30장. 스케줄링 정책 튜닝

Red Hat Enterprise Linux에서 가장 작은 프로세스 실행 단위를 스레드라고 합니다. 시스템 스케줄러는 스레드를 실행하는 프로세서와 스레드가 실행되는 기간을 결정합니다. 그러나 스케줄러의 주요 문제는 시스템을 계속 사용하는 것이기 때문에 애플리케이션 성능에 가장 적합한 스레드를 예약하지 않을 수 있습니다.

예를 들어 NUMA 시스템의 애플리케이션이 노드 B의 프로세서를 사용할 수 있게 되면 노드 A에서 실행되고 있다고 가정합니다. 노드 B에서 프로세서를 사용하도록 유지하기 위해 스케줄러는 애플리케이션의 스레드 중 하나를 Node B로 이동합니다. 그러나 애플리케이션 스레드는 여전히 Node A의 메모리에 액세스해야 합니다. 그러나 스레드가 현재 노드 B에서 실행되고 있는 스레드가 더 이상 스레드에서 실행되고 있지 않기 때문에 이 메모리는 더 이상 액세스할 수 없습니다. 따라서 노드 A에서 프로세서를 사용할 수 있을 때까지 대기한 다음 로컬 메모리 액세스 권한이 있는 원래 노드에서 스레드를 실행하는 데 걸리는 것보다 노드 B에서 실행을 완료하는 데 시간이 더 오래 걸릴 수 있습니다.

30.1. 스케줄링 정책의 범주

성능에 민감한 애플리케이션은 종종 설계자 또는 관리자가 스레드가 실행되는 위치를 결정하는 데 도움이 됩니다. Linux 스케줄러는 스레드가 실행되는 위치와 기간을 결정하는 여러 스케줄링 정책을 구현합니다.

다음은 스케줄링 정책의 두 가지 주요 범주입니다.

일반 정책
일반 스레드는 일반적인 우선 순위의 작업에 사용됩니다.
실시간 정책

실시간 정책은 중단 없이 완료해야 하는 시간에 민감한 작업에 사용됩니다. 실시간 스레드는 시간 분할의 영향을 받지 않습니다. 즉, 스레드는 차단, 종료, 자발적으로 산출되거나 더 높은 우선순위 스레드에 의해 선점될 때까지 실행됩니다.

가장 낮은 우선 순위 실시간 스레드는 일반 정책이 있는 스레드보다 먼저 예약됩니다. 자세한 내용은 nfsnobody _RR 를 사용한 Static 우선순위 스케줄링 을 참조하십시오.

추가 리소스

  • sched -02- , sched_setaffinity(2), sched_getaffinity(2), sched_setscheduler(2)sched_getscheduler(2) 도움말 페이지