Linux의 완전히 공정한 스케줄러 및 sched_latency_ns

Linux의 완전히 공정한 스케줄러 및 sched_latency_ns

CFS를 이해했다고 생각했는데...

예약된 대기 시간은 실행 가능한 각 프로세스가 프로세서의 해당 공유를 수신할 것으로 예상하는 시간입니다. Linux 커널 코드에서는 다음을 제공합니다.

(기본값: 6ms * (1 + ilog(ncpus)), 단위: 나노초)

1개 CPU 머신의 경우 6ms가 걸리고, 4코어 머신의 경우 18ms가 걸립니다. Rpi Zero 원코어와 Rpi 4 쿼드코어에서 확인해 보니 그런 것 같습니다. 그러나 쿼드 코어가 있는 Pi 4는 0보다 더 강력한 시스템입니다. 확실히 예약 대기 시간이 3배가 아니라 더 작을 것이라고 예상할 수 있습니까? 두 경우 모두 sched_min_capsularity를 ​​살펴보면 둘 다 8개의 작업을 처리한 다음 0.75ms와 2.25ms의 고정 시간 조각으로 대체됩니다. 나는 이것 때문에 분명히 혼란스러워합니다 ...

답변1

당신은 확실히 계획된 지연이 3배 더 큰 것보다 3배 더 작을 것이라고 예상할 것입니다.

이것이 _NONE, _LOG로 "수정"된 이유입니다. 또는 _LINEAR.

SMP의 개념을 생각해보면나뉘다, CPU를 추가하는 대신. 이렇게 하면 전반적인 성능을 얻을 수는 없지만 여전히 더 나은 응답성을 얻을 수 있습니다.

이 짧은 함수("마침표")는 두 가지 모두를 사용합니다.최소 세분성그리고숨어있는. 다시 포맷했습니다. 나는 당신이 C를 이해하기 위해 C에 대해 아무것도 알 필요가 없다고 생각합니다.너무 가능하지 않음힌트:

static u64 __sched_period(unsigned long nr_running)
{
    if (unlikely(nr_running > sched_nr_latency))

        return   nr_running * sysctl_sched_min_granularity;
    else
        return                sysctl_sched_latency;
}

마지막으로, 사물보다 단어에 대한 더 많은 정보: Wikipedia, CFS:

...이것원자 단위개별 프로세스의 CPU 점유율을 할당합니다(따라서이전 시간 조각 개념)


저것추가의남아 있는 단어는 다음과 같습니다 kernel/sched/fair.c.

 * (to see the precise effective timeslice length of your workload,
 *  run vmstat and monitor the context-switches (cs) field)

6밀리초,0.75밀리초(=1/8) 그리고24밀리초(= ncpus=8에 대해 수정된 _LOG)할 수 있는IMHO, 그것을 주기, 즉 시간 조각으로 해석하세요. 이를 헤르츠(Hertz)로 환산하면 Kconfig.hz100HZ(서버)부터 1000HZ(고응답)까지의 범위가 일치합니다.

1/.00075 s
1333.3 Hz

1초에 1,000개 이상의 최소 단위 "슬라이스"를 수용할 수 있습니다.

1/.006 s
166.6 Hz

166개의 수정되지 않은 대기 시간 "슬라이스"는 100HZ "서버"와 250HZ "손상" 사이에 있습니다.

1/.024 s
41.6 Hz

8개 코어에 로그 수정을 적용하면 각 코어가 컨텍스트 전환을 4배까지 줄일 수 있지만 "유효 대기 시간"은 여전히 ​​낮습니다.


이발소와 비교했을 때, 새로운 고객이 10분 이상 기다릴 필요가 없도록 하고 싶습니다. 이것은 당신이해야한다는 것을 의미합니다잡다10분마다 현재 고객이 자리에 앉습니다. 적어도 인사 시간에는요.

좌석이 4개 있고 이발사가 있는 매장에서는 그 10분을 단축할 수 있습니다. 4명의 이발사가 각각 캐비닛에서 일하며 40분마다 멈춰서 살펴보기만 하면 됩니다. 신규 고객은 이전처럼 평균 10분만 기다리면 됩니다.

이는 대기 시간의 완전한 "선형" 수정입니다.N을 곱한다.

그러나 최악의 시나리오에서는 네 사람 모두 동시에 신규 고객을 체크인하게 됩니다. 왜냐하면 동시에 시작하기 때문입니다. 이 시간 이후에 고객이 입장하면 서비스를 받기까지 39분을 기다려야 할 수도 있습니다.

따라서 절충안으로 N을 곱하는 대신로그(N)로.

1 + ilog(N)

이는 1+ilog(4) = 1+2가 되므로 4명의 이발사는 이발 시간을 10분에서 30분(40분이 아닌)으로 연장할 수 있습니다. 함께 10분 지연을 달성합니다.

4배에서 16으로, 50분으로만 연장됩니다. "수정"은 대수적이며 다음과 같습니다 + 1.

관련 정보