아니요, 각 프로세스를 코어에만 배치할지 여부

아니요, 각 프로세스를 코어에만 배치할지 여부

내가 읽고있다이 링크이 생각이 들었습니다.

얼마 전에 저는 32코어 VM의 최대 30개 코어에 대한 시뮬레이션을 시작했고 nohup perl ...<rest of command>...이를 달성하기 위해 STOUT/STDERR을 호출하고 리디렉션하는 래퍼 스크립트를 사용했습니다. 구체적인 세부 사항이 관련성이 있는지 잘 모르겠으므로 생략하겠습니다. 당신은 그 세부 사항입니다.

개념적으로 나는 멀티스레드 작업에 만족하지만 nohup 호출(각 프로세스는 별도의 시뮬레이션이고 몇 주 동안 실행됨)에서 각 프로세스를 배경화하는 것만으로도 충분할 것이라고 순진하게 생각했습니다. 자체 코어/스레드를 생성한 다음 GNU Parallels나 다른 것이 필요 없이 계속해서 완료됩니다.

정기적으로 확인하고 항상 30개의 vCPU 처리 작업을 확인하고 모든 것이 합리적인 시간 내에 완료되므로 지금까지는 내 논리에 문제가 없는 것 같습니다...

누군가 나에게 이것이 "CPU 스래싱"을 일으킬 수 있다고 말했습니다.

그래서 내 질문에는 여러 가지 상호 관련된 부분이 있습니다.

  • 첫째, nohup 및/또는 backgrounding이 특정 코어에 프로세스를 고정하는 데 충분할 것이라고 생각한 것이 틀렸습니까? (그리고 특정 코어에서 실행되는 프로세스가 터미널에 표시될 수 있습니까? Top은 어떤 코어가 사용 중인지만 알려주고 내가 아는 한 어떤 작업을 수행하고 있는지 알려주지 않습니까?)
  • 둘째, 시스템의 다른 작업을 처리하는 데 사용할 수 있는 예비 CPU가 2개 있어도 CPU 스래싱이 발생합니까?
  • 마지막으로, 제 기억이 맞다면 특정 프로세스가 특정 CPU에 고정되나요?그리고 그 CPU만, 또는 호출 순서/타이밍 등에 따라 스레드 간에 점프합니다. 즉, 파일을 반복하면 첫 번째 파일이 완료될 때까지 CPU 0에 고정된 다음 1, 2 등에 고정됩니까?

답변1

첫째, nohup 및/또는 백그라운드가 터미널에 표시된 특정 코어에서 실행되는 프로세스라고 가정하는 것이 틀렸습니까? Top은 내가 아는 한 어떤 코어가 어떤 작업을 수행하고 있는지 알려주지 않고 어떤 코어가 사용 중인지 알려줍니다. ) 프로세스를 특정 코어에 고정하는 데 충분합니까? (그리고 할 수 있다

Nohup은 명령이 없을 때와 똑같이 명령을 실행합니다. 유일한 차이점은 명령이 종료 시 신호를 받도록 pid 목록에서 제거된다는 것입니다. (nohup 없이 시작된 프로세스에는 disown이 적용됩니다).

둘째, 시스템의 다른 작업을 처리하는 데 사용할 수 있는 예비 CPU가 2개 있어도 CPU 스래싱이 발생합니까?

nohup 없이 CPU 스래싱이 발생하는 경우에만...

마지막으로, 제가 틀리지 않았다면 주어진 프로세스가 특정 CPU와 해당 CPU에만 고정될 것입니까, 아니면 호출 순서/타이밍/등을 기반으로 스레드 간에 점프할 것입니까? 즉, 파일을 반복하면 첫 번째 프로세스가 특정 CPU에 고정됩니까? 하나는 완료될 때까지 CPU 0에 고정된 다음 1, 2 등으로 고정됩니까?

nohup 없이도 마찬가지입니다 ...

ps를 사용하여 프로세스가 실행 중인 CPU 코어를 확인할 수 있으며, 작업 세트 제한을 사용하거나 코어 제한을 변경할 수 있습니다.

ps -eo pid,sgi_p,cmd --sort sgi_p

taskset -c -p 0 1234

답변2

nohup특정 코어에 프로세스를 예약하도록 설정된 것은 없습니다. 당신은 일반적으로 사용합니다taskset함께 nohup해보세요 . top프로세스가 마지막으로 예약된 코어를 표시할 수 있습니다 P. 이는 열 입니다.

CPU 선호도, 캐시 선호도, 인터럽트 처리, 전력 봉투 등 고려해야 할 요소가 점점 더 많아지면서 프로세스 및 스레드 스케줄링은 수년에 걸쳐 매우 복잡해졌습니다. 그러나 시스템이 다른 작업으로 너무 바쁘지 않다고 가정하면 시작된 작업 수가 사용 가능한 코어 수보다 적습니다. 비슷한 방식으로 작업이 어떤 CPU에서 실행될지 실제로 예측할 수는 없지만 적절한 경우 스케줄러는 작업을 선택한 후 동일한 코어에 유지할 가능성이 높습니다.

관련 정보