Linux를 실행하는 듀얼 코어 CPU가 있다고 가정 해 보겠습니다.
백그라운드에서 두 개의 단일 스레드 프로세스(nodejs)를 시작하면 어떻게 예약되나요?
OS가 최선을 다하고 각 프로세스가 다른 코어에서 실행되도록 노력할 것이라고 가정할 수 있습니까, 아니면 다른 작업을 수행해야 합니까?
답변1
예, 추가 구성을 수행할 필요 없이 코어 전체에 걸쳐 작업을 예약합니다.
따라서ibm.com의 Linux SMP에 관한 훌륭한 기사(강조):
Linux 2.0 초기에 SMP 지원은 시스템 전체에 걸쳐 직렬 액세스를 허용하는 "큰 잠금"으로 구성되었습니다. SMP 지원의 진전은 느리게 이루어졌지만 2.6 커널이 되어서야 SMP의 힘이 마침내 명백해졌습니다.
2.6 커널에는 SMP 시스템에 대한 더 나은 지원을 포함하여 새로운 O(1) 스케줄러가 도입되었습니다. 핵심은 캐시 효율성을 유지하면서 사용 가능한 CPU 간에 작업 부하의 균형을 맞출 수 있다는 것입니다. 캐시 효율성을 높이려면 작업이 단일 CPU와 연결되어 있을 때 작업을 다른 CPU로 이동하려면 작업의 캐시를 플러시해야 한다는 그림 4를 떠올려 보세요. 이로 인해 해당 데이터가 새 CPU의 캐시에 있을 때까지 작업의 메모리 액세스 대기 시간이 늘어납니다.
2.6 커널은 각 프로세서에 대해 한 쌍의 실행 큐(만료된 실행 큐 및 활성 실행 큐)를 유지합니다.. 각 실행 대기열은 140개의 우선 순위 수준을 지원하며, 처음 100개는 실시간 작업이고 마지막 40개는 사용자 작업입니다. 작업에는 실행 시간 조각이 제공되며 할당된 시간 조각을 사용하면 활성 실행 큐에서 만료된 실행 큐로 이동합니다. 이는 모든 작업에 대해 CPU에 대한 공정한 액세스를 제공합니다(CPU당 잠금만 가능).
CPU별 작업 대기열을 사용하면 시스템의 모든 CPU에 대해 측정된 로드에 따라 작업 균형을 조정할 수 있습니다.스케줄러는 200밀리초마다 로드 균형 조정을 수행하여 작업 로드를 재분배하여 프로세서 컴플렉스 간의 균형을 유지합니다. Linux 2.6 스케줄러에 대한 자세한 내용은 리소스 섹션을 참조하세요.