하이퍼스레딩 및 프로세스 우선순위

하이퍼스레딩 및 프로세스 우선순위

두 번째(하이퍼스레드) 가상 코어가 최대화되도록 예약되지 않은 동안 우선 순위가 높은 프로세스/스레드가 물리적 프로세서 코어에서 실행되도록 할 수 있는 방법(Linux 커널 옵션, sysctl 설정 또는 구성 가능한 스케줄러 모듈)이 있습니까? 총 클록 시스템 처리량을 최대화하기 위해 경쟁 조건을 방지하고, L1 캐시를 공유하지 않고, 최대 CPU 클록(Turbo Boost)을 사용하는 동시에 더 낮은 CPU 클록/스레드를 사용하는 다른 물리적 코어의 2개 가상 코어에서 우선 순위가 낮은 프로세스를 실행하여 성능을 크게 향상시킵니다. ?

다시 말해서:우선순위에 따라 하이퍼스레딩을 동적으로 비활성화할 수 있습니까?

CPU가 프로세스/스레드 우선순위를 사용하여 하이퍼 스레드 코어의 두 스레드 중 경쟁 상황에서 먼저 진행할 수 있는 스레드를 결정하는 경우 Linux 커널은 우선 순위가 높은 프로세스/스레드만 일치하도록 예약할 수 있습니까? 다른 스레드에 미치는 영향을 최소화하기 위해 매우 낮은 수준의 프로세스/스레드가 있는 물리적 코어가 있습니까?

우선 순위가 높은 프로세스가 절전 모드에 있으면 이전 물리적 코어의 가상 코어 2개를 우선 순위가 낮은 프로세스에서 다시 사용할 수 있으므로 taskset다른 모든 프로세스의 CPU 선호도 마스크에서 하나의 물리적 코어를 제외할 수 있습니다.

편집 : 와앨더 레이크 프로세서성능과 효율적인 코어의 하이브리드 아키텍처를 통해 이 질문은 다음과 같이 확장됩니다.

우선순위가 낮은 프로세스를 효율적인 코어로 강제하는 방법성능 코어를 유휴 상태로 유지(전력 절약)하거나 우선 순위가 높은 프로세스용으로 예약(성능 극대화를 위한 열 예산 유지)터보차저)?

답변1

  • 정확히 원하는 것(특히 OP의 의견에서 논의된 것)은 작업 전환과 동기화하여 일부 코어를 온라인/오프라인으로 전환해야 합니다. => 스케줄러만이 이를 수행할 수 있습니다.
  • 스케줄러에 의해 예약된 작업을 실행하는 데 사용할 수 있는 코어 세트는 스케줄러에 대한 제약입니다. (즉, 스케줄러는 CFS, BFS 및 ULE AFAIK를 제어할 수 없습니다.)

그러므로 달성할 방법이 없다.정확히당신은 무엇을 원합니까?


그러나 일부 독립된 커널 기능으로 인해 이런 일이 발생할 가능성이 있지만 공짜 점심은 없으며 비용은 높은 우선 순위로 실행되는 응용 프로그램에 따라 다릅니다.

한 가지 아이디어는 이러한 애플리케이션을 시작하기 위한 전용 스크립트를 작성하는 것입니다. 특수 스크립트는 다음과 같습니다.

1/ 원치 않는 형제자매를 오프라인으로 전환

좋아요, 이건 당신이 알고 있다고 가정합니다물리적작업을 실행할 코어를 CPU2라고 가정하겠습니다. 하지만 그것이 어떤 것인지 알아야 합니다. §2를 읽어보세요.

이는 0을 작성하여 달성할 수 있습니다./sys/devices/system/cpu/cpu3/online

2/ 프로세스의 CPU 선호도 설정

이를 작성할 때 주요 목표는 L1 캐시를 최대한 많이 보존하는 것입니다. L1 캐시에 전혀 관심이 있다면 공정한 분배에 따른 스케줄러의 결정에 따라 언제든지 작업이 다른 코어로 마이그레이션되는 것을 원하지 않을 것입니다.
이는 여러 가지 방법으로 달성할 수 있습니다. 그 이유는 제가 선호하는 섹션 3에서 확인할 수 있습니다.일정 도구그리고 -a 옵션은 CPU2가 필요하다는 것을 인정합니다:

schedtool -a 0x4 -e yourapp_name yourapp_parms

3/ 프로세스의 스케줄링 정책 및 우선순위 설정

SCHED_FIFO 작업을 예약하면 많은 도움이 될 것입니다.시간 조각작업은 우선 순위가 더 높은 작업이 실행되거나 차단되는 경우에만 예약됩니다. -F 및 -p 옵션을 사용하여
이를 달성하는 방법에는 여러 가지가 있습니다 .schedtool

schedtool -F -p 5 -e yourapp_name yourapp_parms

schedtool상관 관계 설정과 예약 정책 설정을 단일 명령으로 결합할 수 있기 때문에 선호합니다 .

schedtool -a 0x04 -F -p 5 -e yourapp_name yourapp_parms

조심스럽게 다루세요: 실시간 임무의 세계에 들어가게 되므로... 자신이 무엇을 하고 있는지 알 수 있습니다. 특히... 작업이 CPU 바인딩된 경우 SCHED_FIFO를 실행하는 시스템에서 다른 작업의 상대적 우선순위에 주의해야 하며 물론 때로는 다른 SCHED_FIFO를 실행하는 다른 코어가 있다는 점도 알아야 합니다. 미션의 불합리함...

4/ 작업이 완료된 후 처음에 오프라인이었던 형제를 다시 삽입합니다.

이는 1을 작성하여 달성할 수 있습니다./sys/devices/system/cpu/cpu3/online


한정

이 접근 방식을 따르면 권한 있는 작업이 종료될 때만 스케줄러에서 형제 작업을 사용할 수 있다는 것을 이해하게 됩니다.
CPU 집약적인 작업 SCHED_FIFO를 실행하는 경우(일정이 전혀 또는 거의 예약되지 않기 때문에) 이는 문제가 되지 않지만, 권한 있는 작업이 실제로 IO 집약적이라면 해로운 것처럼 보일 수 있습니다(전체 성능 관점에서) 보다).
이 경우 권한 있는 작업은 (올바르게) 예약되고 다른 작업은 CPU를 점유하는 반면(친애하는 L1 캐시 삭제 가능) 형제 작업은 오프라인 상태로 유지됩니다. 전체 대기 시간 동안.

따라서 항상 그렇듯이 일반적인 작업 부하에서 시스템을 벤치마킹하는 것만으로 이 접근 방식이 실제로 중요한 이점을 갖는지 여부를 알 수 있습니다.

관련 정보