Linux : 성능 조정기를 사용할 때 CPU 주파수가 변동되는 이유는 무엇입니까?


8

벤치마킹에 데비안 8 amd64 머신을 사용하고 있습니다. 실험하는 동안 CPU가 고정 주파수 (바람직하게 가능한 최대)로 작동하기를 원합니다. 결과의 변동 원인으로 CPU 클럭 속도가 배제됩니다.

약간의 독서 후에, 올바른 행동은 CPU 총재를로 변경하는 것 같습니다 performance. 이것은 Linux 커널 문서에서 설명 합니다 :

CPUfreq 조정기 "성능"은 scaling_min_freq 및 scaling_max_freq의 경계 내에서 CPU를 정적으로 최고 주파수로 설정합니다.

슬프게도에 대한 자세한 내용 scaling_min_freq과는 scaling_max_freq제공되지 않습니다. 사용 된 CPU 주파수가 간격의 최대 값이므로 문제가되지 않기를 바랍니다.

그래서 cpufreq-set을 사용 하여이 관리자를 활성화했습니다.

$ cat / sys / devices / system / cpu / cpu * / cpufreq / scaling_governor
공연
공연
공연
공연

그리고 좋은 측정을 위해 BIOS에서 터보 부스트 모드도 비활성화했습니다.

$ cat / sys / devices / system / cpu / intel_pstate / no_turbo
1

위의 성능 조정기 설명에 따르면 CPU 클럭 속도에는 변동이 없을 것으로 예상됩니다. 그러나 반복적으로 실행 cpufreq-info하면 클럭 속도가 변동하는 것을 볼 수 있습니다.

$ cpufreq- 정보 | grep '현재 CPU fr'
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 3.99GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
$ cpufreq- 정보 | grep '현재 CPU fr'
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 3.96GHz입니다.
$ cpufreq- 정보 | grep '현재 CPU fr'
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 3.94GHz입니다.
$ cpufreq- 정보 | grep '현재 CPU fr'
  현재 CPU 주파수는 4.01GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 4.00GHz입니다.
  현재 CPU 주파수는 3.98GHz입니다.

하드웨어, BIOS, 커널 또는 기타 요인으로 인해 이러한 변동이 발생합니까? 전혀 변동하지 않도록 CPU 주파수를 설정하는 방법이 있습니까?


어떤 유형의 서버 하드웨어를 사용하고 있습니까? 해당 하드웨어의 BIOS 전원 및 CPU 성능 설정은 무엇입니까?
ewwhite

실제로 i7 CPU가있는 데스크탑 시스템입니다. dmesg와 cpuinfo를 여기에 업로드했습니다 : gist.github.com/vext01/73eea539eb041acf784b . 다시 : 바이오스 설정, 나는 기계에 가서 봐야 할 것입니다. 마음에 드는 특정 설정이 있습니까?
Edd Barrett

일반적인 pstate 변동에 비해 "많은"변동이 아닙니다 ... :)
rogerdpack

답변:


9

실험을 마치고 나 자신의 질문에 대답 할 수 있다고 생각합니다.

이 스레드에서 언급 한 것처럼 특정 인텔 하드웨어에서는 CPU 주파수를 관리하는 두 가지 방법이 있습니다.

  • pstate 사용.
  • 정기적 인 ACPI 사용

pstate를 사용하면 BIOS가 클럭 속도에 대해 말을하는데 이것이 변동의 원인 인 것 같습니다.

intel_pstate=disable커널 인수 를 추가 하여 pstate를 강제로 해제 할 수 있습니다 ( /etc/default/grubarg를 편집 하고 추가하십시오 GRUB_CMDLINE_LINUX_DEFAULT. 마지막으로 실행 sudo update-grub).

이 작업을 수행 한 후 출력 결과 cpufreq-info가 크게 달라지고 다른 CPU 조정기 집합을 사용할 수있게됩니다 (예 : ondemand현재 사용 가능함).

가장 중요한 것은, 조정기를로 설정 한 후에 performance는 클럭 속도가 고정되어 있습니다 (제 경우에는 4.00GHz).

당신은에서 볼 수 /sys/devices/system/cpu/cpu*/cpufreq/scaling_driverpstate 또는 ACPI가 CPU의 크기를 조절하는 데 사용되는 경우 결정. 이러한 파일은 값을 가정 할 수있다 acpi-cpufreqintel_pstate.


또 다른 방법 : 커널에 의해로드 된 모듈을 나열하려면 'lsmod'를 사용하고 CPU 속도 스케일링 / p- 상태 / c- 상태 / 무엇과 관련된 모든 모듈을 블랙리스트에 추가하고 머신을 재부팅하십시오. "블랙리스트 커널 모듈"을 검색하십시오.
Rufo El Magufo


4

최신 인텔 프로세서의 경우 프로세서 자체에 의해 주파수가 제어되며 소프트웨어에 노출 된 P 상태는 성능 수준과 관련이 있습니다. 주파수를 단일 주파수 로 설정할 수 있다는 아이디어는 인텔 코어 프로세서에 대한 허구입니다 . 스케일링 드라이버가 단일 P 상태를 선택하더라도 프로세서가 실행할 실제 주파수는 프로세서 자체에 의해 선택됩니다. [1]

[1] https://www.kernel.org/doc/Documentation/cpu-freq/intel-pstate.txt


흥미 롭군 intel_pstate=disable커널에 전달할 때 여전히 적용 됩니까? 그렇게 할 때 "레거시 모드"를 호출합니까?
Edd Barrett

1) 확실하지 않습니다. 필요에 문의하기 Intel Architectures Software Developer's Manual.2) 예. 추신. x86_energy_perf_policy
SaveTheRbtz

귀하의 의견에 감사드립니다. 아직 확실하지 않으므로 지금은 질문을 공개합니다. 어쩌면 누군가 나중에 상황에 대해 밝힐 것입니다.
Edd Barrett

-1

팬이 더 이상 작동하지 않기 때문에 CPU에 고정 주파수를 설정하려고 너무 너무했기 때문에이 스레드를 읽었습니다. 가장 낮은 주파수 (800Mhz) ..i는 마지막으로 구성의 각 CPU에 대해 / sys / devices / system / cpu / cpu * / cpufreq /에서 scaling_max_freq를 변경하는 데 성공했습니다. 이제 주파수는 800Mhz에서 이동하는 것이 좋습니다. .... 800Mhz까지. 그것은 내가 경험했던 과열 문제를 해결하고 해결했다.

추신 : 나는 또한 터보 모드를 비활성화합니다 (3,1Ghz)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.