Linux에서 실시간 알고리즘을 구현하려고 합니다.
나는 리눅스 실시간 전략을 조사했습니다:Scheduling_rr,선입선출 스케줄링.
나보다 더 깊이 파고들어 완전히 공정한 스케줄러를 찾았습니다. CFS를 사용하면 CFS는 공정성만 고려하기 때문에 예측 가능성을 잃을 것이라고 생각했습니다.
실시간 스케줄링 알고리즘을 엄격하게 구현하려면 CFS를 사용하면 안 됩니다. 내가 맞나요? 그렇다면 어떤 Linux 스케줄러를 사용해야 합니까?
답변1
CFS는 다양한 동시 작업 부하 간에 대역폭을 공정하게 공유하므로 대기 시간이 짧은 대화형 작업 부하에 적합합니다. 실시간은 시간 내에 작업을 완료하는 것을 의미합니다. 대기 시간이 짧은 것처럼 들리지만 다릅니다. CFS는 마감일을 제공하지 않기 때문에 실시간에는 적합하지 않습니다. 꼭 살펴보시길 권합니다SCHED_DEADLINE스케줄러. 마감 기한이 있는 주기적 또는 산발적 작업을 위한 매우 훌륭한 범용 실시간 스케줄러입니다.
SCHED_DEADLINE 작업은 우선순위가 가장 높으므로 다른 모든 작업보다 우선합니다. SCHED_RR 및 SCHED_FIFO는 우선순위 1~99에 따라 예약되며, 높은 숫자가 낮은 우선순위보다 우선합니다. SCHED_OTHER의 우선순위는 0으로 이전 우선순위보다 낮으므로 CFS 스케줄러는 실시간 작업에 대해서만 나머지 CPU를 가져옵니다. 실시간 스케줄러는 CPU 대역폭의 최대 95%를 할당하고 SCHED_OTHER 작업에 5%를 남겨둘 수 있습니다(sysctl을 통해 변경하지 않는 한). 스케줄러에게 SCHED_OTHER에 비해 다른 단점을 제공하도록 지시하는 SCHED_BATCH 및 SCHED_IDLE도 있습니다. 리눅스 매뉴얼 페이지예약(7)자세한 내용을 제공하세요.