16.3. 실시간 커널에서 스레드 중단
스레드 중단은 스레드가 별표 임계값보다 오래 CPU 실행 대기열에 있고 진행되지 않을 때 발생합니다. 스레드 중단의 일반적인 원인은 CPU에 바인딩된 Cryostat _FIFO 또는 Cryostat 과 같은 고정 우선 순위의 폴링 애플리케이션을 실행하는 것입니다. 폴링 애플리케이션은 I/O를 차단하지 않으므로 _ RRkworkers 와 같은 다른 스레드가 해당 CPU에서 실행되지 않도록 할 수 있습니다.
스레드 부족을 줄이기 위한 초기 시도는 실시간 제한이라고 합니다. 실시간 제한에서 각 CPU에는 실시간이 아닌 작업 전용 실행 시간의 일부가 있습니다. 제한의 기본 설정은 실시간 작업에 대해 CPU의 95%를 사용하고 5%는 비실시간 작업을 위해 예약되어 있습니다. 이 작업은 단일 실시간 작업으로 인해 중단을 유발하지만 CPU에 할당된 실시간 작업이 여러 개 있는 경우 작동하지 않습니다. 다음을 사용하여 문제를 해결할 수 있습니다.
stalld메커니즘stalld메커니즘은 실시간 제한에 대한 대안이며 제한적인 단점을 방지합니다.stalld는 시스템에서 각 스레드의 상태를 정기적으로 모니터링하고 실행 대기열에 있는 스레드를 실행하지 않고 지정된 시간 동안 찾는 데몬입니다.stalld는 thread가 Cryostat_DEADLINE정책을 사용하도록 일시적으로 변경되고 지정된 CPU에서 스레드에 작은 시간을 할당합니다. 그런 다음 스레드가 실행되고 시간 슬라이스를 사용하면 스레드가 원래 스케줄링 정책으로 반환되고stalld는 스레드 상태를 계속 모니터링합니다.하우스키핑 CPU는 모든 데몬, 쉘 프로세스, 커널 스레드, 인터럽트 처리기 및 분리된 CPU에서 디스패치할 수 있는 모든 작업을 실행하는 CPU입니다. 실시간 제한이 비활성화된 하우스키핑 CPU의 경우
stalld는 기본 워크로드를 실행하는 CPU를 모니터링하고 Cryostat_FIFO사용량 루프로 CPU를 할당하므로 이전에 정의된 허용 가능한 추가 노이즈에서 필요에 따라 stalled 스레드를 감지하고 스레드 우선 순위를 개선하는 데 도움이 됩니다. 실시간 제한 메커니즘으로 인해 주요 워크로드에서 불합리한 노이즈가 발생하는 경우stalld가 선호될 수 있습니다.stalld를 사용하면 겨운 스레드를 강화하여 도입 된 노이즈를 더 정확하게 제어할 수 있습니다.stalld가 실행될 때 쉘 스크립트/usr/bin/throttlectl은 실시간 제한을 자동으로 비활성화합니다./usr/bin/throttlectl show스크립트를 사용하여 현재 제한 값을 나열할 수 있습니다.- 실시간 제한 비활성화
/proc파일 시스템의 다음 매개변수는 실시간 제한을 제어합니다.-
/proc/sys/kernel/sched_rt_period_us매개 변수는 마침표의 마이크로초 수를 지정하고 기본값은 1초입니다. -
/proc/sys/kernel/sched_rt_runtime_us매개 변수는 제한되기 전에 실시간 작업에서 사용할 수 있는 마이크로초 단위 수를 지정하고 기본값은 사용 가능한 CPU 주기의 950,000 또는 95%입니다.echo파일에 전달하여 제한을 비활성화할 수 있습니다.-1> /proc/sys/kernel/sched_rt_runtime_us 명령을 사용하여 -1 값을sched_rt_runtime_us
-