Linux 3.10 CFS에는 "시간 조각"이 있습니까?
나는 혼란스러워서계획설계-CFS.txt구체적으로 정의됨:
CFS는 나노초 세분성 계산을 사용하며 jiffies 또는 기타 HZ 세부 정보에 의존하지 않습니다. 따라서 CFS 스케줄러에는 이전 스케줄러와 같은 "시간 조각" 개념이 없으며 경험적 방법도 없습니다. 중앙 조정 가능 매개변수는 하나만 있습니다(CONFIG_SCHED_DEBUG를 활성화해야 함).
/proc/sys/kernel/sched_min_grinderity_ns
스케줄러를 "데스크톱"(즉, 낮은 대기 시간) 워크로드에서 "서버"(즉, 양호한 배치) 워크로드로 조정하는 데 사용할 수 있습니다.
그러나 다중 작업 스케줄러 조정 가이드에서는 "시간 조각"을 계산하기 위한 두 가지 다른 공식을 제안합니다. (실행 가능한 작업 수에 따라 다름) 예를 들어 다음과 같습니다.오픈수세 가이드.
저는 격리된 CPU에서만 SCHED_FIFO 스레드를 실행합니다.
답변1
CFS
"이전 스케줄러와 같은" 시간 조각이 없습니다.
타임 CFS
슬라이스는 기본적으로 동일한 스레드에 부여된 CPU 실행 시간의 연속 전환 사이의 기간입니다. 이렇게 하면 두 가지 옵션이 제공됩니다.
모든 스레드는
min_granularity_ns
최소한 1회 실행될 수 있는 충분한 시간을 갖습니다latency_ns
. 그래서 당신의timeslice = scheduling period * (task's weight/total weight of tasks in the run queue)
수용할 스레드가 너무 많기
latency_ns
때문에 다음을 기반으로 실행하려는 더 많은 스레드를 수용하기 위해 타임 슬라이스가 더 커집니다.timeslice = number_of_running_tasks * sched_min_granularity_ns
그렇기 때문에 CFS
대표하는완전히공정한 스케줄러는 우선 순위가 낮은 스레드를 제외하지 않고 모든 사람의 시간 조각을 무차별적으로 확장합니다.