Linux에서 Intel Alder Lake Efficiency Core 비활성화

Linux에서 Intel Alder Lake Efficiency Core 비활성화

내 애플리케이션에는 최대 단일 스레드 성능이 필요하며 Intel E 코어로 전환하는 데 어려움을 겪고 있습니다.

BIOS에 액세스하지 않고 Ubuntu 20.04 시스템의 Intel i9-12900K에서 E-코어를 비활성화하는 방법을 찾고 있습니다(대여 전용 서버임). 또는 이러한 코어를 구별하고 CPU 유사성을 할당하여 taskset실행에서 제외할 수 있는 가능한 방법이 있습니다 .

나는 구글에서 스스로 답을 찾으려고 노력했다. 현재 확실히 스케줄러 문제가 있다는 것을 알게 되었지만 내 문제에 대한 명확한 수정이나 해결 방법은 없습니다.

답변1

taskset귀하의 경우에 완벽하게 작동하는 애플리케이션에 코어를 할당하기 위한 표준 기능입니다. 예를 들어 Intel Core i9 12900K의 경우 작업을 처음 16개 코어에 고정하면 됩니다.

taskset 0xFFFF application
taskset -c 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 application

두 번째 형식은 더 길지만 읽기 쉽습니다.

내가 아는 한, 표준 Linux 커널에는 현재 특정 응용 프로그램이 특정 유형의 커널을 사용해야 한다는 것을 커널에 알리는 인프라가 없습니다. 예, Linux 커널은 BIG.little ARM 아키텍처를 지원하지만 이 기능을 사용하는 API에 대해 들어본 적이 없습니다.

2022년 1월 현재 Linux 커널은아니요모든 형태의 Intel 스레드 컨트롤러를 지원합니다. 패치도 없고 아무것도 없습니다.

마지막으로 Linux와 Windows가 HT/SMT 형제를 보고하는 방식이 다르다는 점에 주목할 필요가 있습니다.

Windows에서는 이를 쌍으로 나열합니다(예: 코어 1: 스레드 1 스레드 2, 코어 2: 스레드 1 스레드 2 등). Linux는 먼저 모든 물리적 코어를 나열한 다음 HT/SMT 형제 코어를 나열합니다.

따라서 물리 코어를 테스트하고 싶다면아니요16코어 CPU에 HT/SMT를 사용하면 다음을 수행할 수 있습니다.

taskset -c 0,1,2,3,4,5,6,7 application
taskset 0xFF application

자세한 내용을 보려면 여기를 클릭하세요:어떤 프로세서가 물리적 코어인지 어떻게 알 수 있나요?


옵션 N2: E 코어를 오프라인으로 전환하면 시스템에 보이지 않게 됩니다.

echo 0 | sudo tee /sys/devices/system/cpu/cpu{NN}/online

인텔 코어 i9 12900K의 경우

for i in {16..23}; do echo 0 | sudo tee /sys/devices/system/cpu/cpu${i}/online; done

답변2

e-core를 완전히 비활성화하는 대신 다음을 사용하십시오.isolcpus범용 스케줄러에서 e-core를 분리하는 데 사용되는 시작 매개변수입니다.

예를 들어 Intel Core i9 12900K의 경우:

$ sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="isolcpus=16,17,18,19,20,21,22,23"    

$ sudo update-grub

taskset그런 다음 다음을 사용하거나 수동으로 e-코어를 특정 프로세스에 할당하여 계속 사용할 수 있습니다 cset.

$ sudo taskset -p 0xFF0000 <pid>

또는 다음을 사용할 수 있습니다.cset shield.

답변3

chcpu -d [cpulist]언제든지 코어를 오프라인으로 전환 할 수도 있습니다 .

바라보다man chcpu

관련 정보