Nohup은 각 프로세스를 하나의 코어에 구체적으로 배치합니까?

Nohup은 각 프로세스를 하나의 코어에 구체적으로 배치합니까?

나는 읽고 있었다이 링크지금 막 생각이 났어요.

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

나는 멀티스레드 작업에 개념적으로 만족하지만 nohup 호출에서 각 프로세스를 배경화하는 것(각 프로세스는 몇 주 동안 실행된 별도의 시뮬레이션임)이 각 하위 프로세스를 코어/스레드에 배치하는 데 충분하다고 순진하게 가정했습니다. 그런 다음 GNU Parallels 등을 사용하지 않고 계속해서 완성됩니다.

주기적으로 확인했는데 항상 30개의 vCPU가 작업을 수행하고 있었고 모든 것이 합리적인 시간 내에 완료되었으므로 지금까지 내 논리에는 잘못된 것이 없는 것 같습니다.

누군가(어딘가의 SO 페이지에 있는 것 같습니다) 이로 인해 "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 0에 고정된 다음 1, 2 등으로 고정됩니까?

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

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

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

taskset -c -p 0 1234

답변2

nohup특정 코어에서 프로세스를 유지하기 위해 아무것도 설정하지 않습니다. 일반적으로 다음을 사용합니다.tasksetnohup그 일도 함께 요. top프로세스가 마지막으로 예약된 코어를 표시할 수 있는 열입니다 P.

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

관련 정보