CPU 할당량이 설정된 경우 절전 주파수 거버너의 동작

CPU 할당량이 설정된 경우 절전 주파수 거버너의 동작

나는 CPU cgroup 하위 시스템의 cpu.cpu_quota_us 설정이 애플리케이션 성능에 미치는 영향을 이해하려고 노력하고 있습니다. 기본적으로 CPU 할당량을 줄이면서 "유효한" CPU가 여전히 동일하도록 CPU 수를 늘리면 애플리케이션에 영향을 미치나요? 예를 들어 4개의 CPU 100% 할당량 구성은 8개의 CPU 50% 할당량 구성과 동일합니까?

나는 간단한 CPU 집약적 프로그램을 작성했습니다. https://github.com/ashu-mehra/cpu-quota-test다음 cgroup 구성에서 실행했습니다.

1) CPU가 4개이고 할당량에 제한이 없는 cgroup에서

2) CPU가 8개이고 할당량이 50%인 cgroup에서

32개 스레드에 대해 이 프로그램을 실행할 때 두 구성에 대해 프로그램에서 보고한 처리량에 다음과 같은 차이가 있음을 발견했습니다.

4CPU@100 8CPU@50
176236 87252.5

8CPU@50의 성능은 4CPU@100에서 얻는 성능의 절반에도 미치지 못합니다.

추가 디버깅을 진행하면서 내 시스템이 "절전" CPU 주파수 거버너를 사용하도록 구성되어 있음을 확인했습니다. 이 모드에서는 프로그램이 4CPU@100에서 실행될 때 코어의 CPU 주파수가 최대로 증가했지만 8CPU@50의 경우 코어의 CPU 주파수는 훨씬 낮았습니다.

CPU 주파수 거버너를 "성능"(사용 가능한 유일한 주파수 거버너)으로 변경하면 코어가 최대 주파수에서 실행되기 시작하면서 8CPU@50의 성능이 상당히 향상됩니다.

4CPU@100 8CPU@50
175804 163831

내 시스템 세부정보는 다음과 같습니다.

우분투 16.04.2 LTS

커널 4.4.0-103-일반

CPUFreq 거버너에 관해 다음과 같은 질문이 있습니다.

1) 이 링크https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt"CPUfreq 거버너 "powersave"는 Scaling_min_freq 및 Scaling_max_freq 경계 내에서 CPU를 가장 낮은 주파수로 정적으로 설정합니다."라고 말합니다. 그러나 부하가 증가함에 따라 주파수가 변하는 것을 발견했습니다. "절전"은 실제로 어떻게 작동하나요?

2) Wy는 "절전" CPU 주파수 거버너가 사용 중이고 CPU 할당량이 설정된 경우 CPU 주파수가 최대로 증가하지 않습니다. CPU 할당량을 설정하면 "절전"이 오작동합니까?

답변1

귀하의 질문 1에서 참조된 문서는 acpi-cpufreq CPU 주파수 스케일링 드라이버에 대한 것입니다. 제 생각엔 intel_pstate CPU 주파수 스케일링 드라이버를 사용하고 계신 것 같지만 확실하지는 않습니다. 확실히 알 수 있는 방법은 시스템에 물어보는 것입니다.

$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_driver
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate
intel_pstate

intel_pstate 드라이버의 절전 조정기는 acpi-cpufreq 드라이버의 ondemand 조정기와 유사하게 작동합니다. 제어 알고리즘이 변경되었지만 최근에 충분한 커널이 있다면 로드 기반이어야 합니다.

사용을 50%로 제한하면 CPU 주파수가 많이 올라가지 않거나 전혀 올라가지 않습니다. 로드 기반 알고리즘에는 CPU 주파수를 올릴 만큼 충분한 로드가 제공되지 않기 때문입니다.

관련 정보