완벽하게 공정한 스케줄링에서 시간 분할은 프로세스 우선순위에 따라 달라지나요?

완벽하게 공정한 스케줄링에서 시간 분할은 프로세스 우선순위에 따라 달라지나요?

CFS(Completely Fair Scheduler)를 이해하려고 합니다. 로버트 러브(Robert Love)에 따르면리눅스 커널 개발, 제3판(이탤릭체는 그의 것이고 굵은 글씨는 내 것입니다):

각 프로세스에 시간 조각을 할당하는 대신 CFS는 실행 가능한 총 프로세스 수를 기반으로 프로세스가 실행되어야 하는 시간을 계산합니다. 시간 조각을 계산하기 위해 Nice 값을 사용하는 대신 CFS는 프로세스가 수신할 프로세서 비율의 측정값으로 Nice 값을 사용합니다. 더 높은 값(낮은 우선순위)을 가진 프로세스는 기본 Nice 값에 비해 부분적인 가중치를 받습니다. , 값이 낮은 프로세스는 기본 Nice 값(우선순위가 높음)에 비해 부분적인 가중치를 받습니다.

그런 다음 각 프로세스는 해당 가중치를 실행 가능한 모든 스레드의 총 가중치로 나눈 값에 비례하는 "시간 조각"을 실행합니다. 현실적인 시간 조각을 계산하기 위해 CFS는 거의 완벽한 멀티태스킹에서 "무한히 작은" 일정 기간에 대한 목표를 설정합니다. 이 목표를 대상 대기 시간이라고 합니다... 대상 대기 시간이 20밀리초이고 동일한 우선순위를 가진 두 개의 실행 가능한 작업이 있다고 가정해 보겠습니다.이러한 작업의 우선순위에 관계없이, 각 프로세스는 다른 프로세스를 선점하기 전에 10밀리초 동안 실행됩니다.동일한 우선순위의 작업 4개가 있는 경우 각 작업은 5밀리초 동안 실행됩니다. 20개의 작업이 있는 경우 각 작업은 1밀리초 동안 실행됩니다.

이제 서로 다른 Nice 값을 제외하고 실행 가능한 두 프로세스의 경우를 다시 고려해 보겠습니다. 예를 들어 하나는 기본 Nice 값(0)이고 다른 하나는 good 값 5입니다. 이러한 Nice 값은 가중치가 다르므로 두 프로세스는 서로 다른 프로세서 시간 비율을 받습니다. 이 경우 가중치는 Nice-5 프로세스의 약 1/3 페널티입니다.목표 대기 시간이 다시 20밀리초라면 두 프로세스는 각각 15밀리초와 5밀리초의 프로세서 시간을 받게 됩니다.

첫 번째 굵은 문장은 작업이 우선순위에 관계없이 동일한 시간 조각을 갖는다는 것을 의미하고, 두 번째 문장은 시간 조각이 좋은 값에 따라 달라진다는 것을 의미합니다. 어느 것이 맞나요? 아니면 뭔가 빠졌나요?

답변1

이 2개의 문장은 CFS 작동 방식의 2가지 사례를 설명합니다. 전자는 2개의 작업이 동일한 Nice 값을 갖는 경우이고, 후자는 2개의 작업이 서로 다른 Nice 값을 갖는 경우입니다. 일반적으로 각 작업에 대해 계산된 시간 조각은 다음 공식으로 요약될 수 있습니다.

timeslice = (weight/total_weight)*target_latency

weight작업에 할당된 좋은 값에 따라 현재 작업의 가중치입니다.

total_weight실행 큐에 있는 모든 작업의 ​​가중치 합계입니다.

target_latencyCFS가 실행 대기열의 모든 작업을 동시에 예약하려고 시도하는 시간 간격입니다.

원래 공식으로 돌아가서 두 작업의 nice 값이 같으면 값도 같습니다 weight. 이를 weight상수로 처리하면 새로운 공식은 다음과 같습니다.

timeslice = (target_latency/total_weight)

보시다시피, 실행 큐에 있는 각 작업의 시간 조각은 더 이상 해당 weight값에 의존하지 않으므로 각 작업은 동일한 시간 조각을 받게 됩니다. 이 책에서 언급된 첫 번째 사례이다.

두 번째 사례는 좋은 가치가 다르기 때문에 weight가치도 달라질 것이라고 언급했습니다. 각 작업은 그에 따라 시간 조각을 받습니다.

관련 정보