cgroup을 사용하여 두 개의 cpu_exclusive cpuset A와 B를 생성하고 모든 사용자 스레드와 바인딩되지 않은 모든 커널 스레드를 cpuset A에 연결된 cgroup으로 마이그레이션하는 Linux 시스템이 있습니다. CPUset A에서 실행되는 것들은 스케줄러 정책과 우선순위가 다르며, CPUset A에 있는 코어보다 CPUSet A에서 실행되는 스레드가 더 많습니다.
또한 CPU세트 B에는 매우 활동적인 소수의 프로세스가 연결되어 있으며, 이러한 프로세스의 총 사용자 스레드 수는 CPU세트 B에서 독점적으로 사용할 수 있는 코어 수보다 결코 크지 않습니다. 목표는 CPUset에서 실행되는 중요한 작업 B를 머신의 다른 활동으로부터 보호하고 처리 지연을 최소화하는 것입니다.
이러한 설정에서 CPUset B에서 실행되는 사용자 스레드의 예약 정책/우선순위가 눈에 띄는 영향을 줍니까? 즉, B cpuset 스레드의 스케줄링 정책을 기본 SCHED_OTHER에서 SCHED_FIFO 또는 SCHED_RR로 변경하면 어떤 결과(좋은 결과 또는 나쁜 결과)가 발생합니까?
대답은 "아니오"여야 할 것 같습니다. 왜냐하면 스케줄러는 cpuset B에서 실행되는 각 스레드를 자체 전용 코어에 할당할 수 있어야 하므로 우선순위나 스케줄링이 없으므로 B의 정책과 상대적 우선순위는 cpuset 스레드는 중요하지 않습니다. 반면에 걱정해야 할 바인딩된 커널 스레드와 "스케줄러 도메인" 측면이 있으며, 제가 고려하지 않은 다른 사항이 있을 수도 있습니다.
초과 프로비저닝된 독점 CPU세트에서 실행되는 스레드의 스케줄링 정책과 우선순위가 실제적인 의미에서 중요합니까?
답변1
사용되는 시간 조각은 특정 코어를 각 PID에 잠그지 않는 한 캐시 지속성이 필요한 CPU 집약적 작업에 중요합니다. 스케줄러 정책 SCHED_BATCH를 사용하면 시간 조각을 늘려 대화형 응답성을 줄이면서 성능을 최대 300%까지 향상시킬 수 있습니다. SCHED_RR은 더 작은 시간 조각의 반대 효과를 갖습니다(처리량은 감소하지만 실시간 응답성은 향상됨).
schedtool을 단일 명령으로 사용하여 세트 B의 모든 PID에 대한 특정 PID에 대한 정책을 설정할 수 있습니다. 또한 특정 PID를 특정 코어에 잠그는 데 사용할 수 있습니다. 이는 캐시 지속성이 더 이상 시간 조각에 의존하지 않기 때문에 최상의 솔루션이 될 수 있지만 별도의 schedtool 명령을 실행해야 하므로 더 많은 노력이 필요합니다.
답변2
각 프로세스에 자체 코어가 있으면 우선순위 제약이 없습니다.
그러나 프로세스가 30분 동안 15분마다 실행되도록 예약하면 프로세스가 겹치기 시작하므로 우선순위를 지정해야 합니다.
그러나 "최상의" 일정 정책은 없습니다.
그들은 실제로 당신이 달성하고자 하는 것에 달려 있습니다. 하지만 처음에는 기본값인 SCHED_OTHER로 두고 좀 더 전문적인 작업을 시도하기 전에 잠시 지켜보겠습니다.