====== Linux 5.7でintel_pstateのHWPの挙動が変わっていた ======
自鯖のProxmox VEを6から7に上げたら、アイドル時の消費電力が上がったような気がする。ハードウェア構成が少し変わってたりもするので何とも言えないところだが、IPMIで見る限り増えているのは確か。
あれこれ試してみたところCPUのスケーリングガバナーの挙動が変わっていた。そして、そもそもCPUドライバとしてintel_pstateではなくintel_cpufreqが使われていた。
# cpupower frequency-info
analyzing CPU 0:
driver: intel_cpufreq ★これ
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 20.0 us
hardware limits: 1.20 GHz - 3.30 GHz
available cpufreq governors: conservative ondemand userspace powersave performance schedutil
current policy: frequency should be within 1.20 GHz and 3.30 GHz.
The governor "powersave" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.20 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
同じ環境でPVE 6の時はintel_pstateが使われていたハズなんだけどなぁ。dmesgを見ると、intel_pstateが採用されている雰囲気だが、"HWP not enabled"の一文も気になるところ。
# dmesg | grep intel_pstate
[ 2.020574] intel_pstate: HWP not enabled
[ 2.020580] intel_pstate: Intel P-state driver initializing
答えは[[https://wiki.archlinux.org/title/CPU_frequency_scaling#CPU_frequency_driver|ArchiWiki]]と[[https://www.kernel.org/doc/html/v5.8/admin-guide/pm/intel_pstate.html#passive-mode|intel_pstateのドキュメント]]に書いてあった。HWP (Hardware P-States)が使えないCPUではintel_pstateはPassive Modeとして動作し、ドライバとしてintel_cpufreqが使われるとのこと。お前かー!!
Linuxカーネルバージョン5.8((ArchWikiでは5.7とされているがソースコードを見ると5.8での変更っぽい))でのintel_pstateの改修により、この挙動に変わったらしい。実際、[[https://github.com/torvalds/linux/blob/v5.7/drivers/cpufreq/intel_pstate.c#L2467|v5.7]]と[[https://github.com/torvalds/linux/blob/v5.8/drivers/cpufreq/intel_pstate.c#L2779|v5.8]]のソースを見比べると、確かにそのような変更が加えられている。
話はこれで終わらず[[https://github.com/torvalds/linux/blob/v5.9/drivers/cpufreq/intel_pstate.c#L3012|v5.9]]において、EPP (Energy Performance Preference)を持たないCPUをHWP制御から除外するコードがわざわざ追加されている。HWPはSkylakeからの実装とされているが、実際はBroadwell-EPで初期実装が行われているらしく、現に前述のv5.7コードではHWPを使うようになっている。
自鯖のCPUはまさにBroadwell-EPなXeonなので、見事に該当しているというワケだった。
強制的にアクティブモードにすることもできそうだが、どっちがいいんだろうねぇ?更にHWPM (Hardware Power Management)を使って、完全にハードウェア任せにするという選択肢もあるし悩ましいところ。
----
**(2022-02-21 追記)**
うちのマシンの場合アイドル時の消費電力は、やはりアクティブモードの方が気持ち低いようだ。
アクティブモードとパッシブモードの切り替えは''/sys/devices/system/cpu/intel_pstate/status''に、それぞれ''active''と''passive''を書き込むことで可能。切り替えた場合、スケーリングガバナーの変更もお忘れなく。
# cpupower frequency-info
analyzing CPU 0:
driver: intel_cpufreq
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 20.0 us
hardware limits: 1.20 GHz - 3.30 GHz
available cpufreq governors: conservative ondemand userspace powersave performance schedutil
current policy: frequency should be within 1.20 GHz and 3.30 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.30 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
# echo active > /sys/devices/system/cpu/intel_pstate/status
# cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 1.20 GHz - 3.30 GHz
available cpufreq governors: performance powersave
current policy: frequency should be within 1.20 GHz and 3.30 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency: Unable to call hardware
current CPU frequency: 1.20 GHz (asserted by call to kernel)
boost state support:
Supported: yes
Active: yes
====== 参考サイト ======
* [[https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.9-P-State-HWP-Passive|Intel P-State With Linux 5.9 Adds Passive Mode With Hardware P-States - Phoronix]]
* [[https://www.kernel.org/doc/html/v5.9/admin-guide/pm/intel_pstate.html|intel_pstate CPU Performance Scaling Driver — The Linux Kernel documentation]]
* [[https://wiki.archlinux.org/title/CPU_frequency_scaling|CPU frequency scaling - ArchWiki]]
* [[https://www.reddit.com/r/linux/comments/ihdozd/linux_kernel_58_defaults_to_passive_mode_for/|Linux kernel 5.8 defaults to passive mode for intel_pstate driver for cpu before skylake : linux]]
* [[https://bbs.archlinux.org/viewtopic.php?id=260361|[SOLVED] No intel_pstate driver since kernel 5.8.1 / Kernel & Hardware / Arch Linux Forums]]
* [[https://pc.watch.impress.co.jp/docs/column/ubiq/717008.html|【笠原一輝のユビキタス情報局】Skylakeの“SpeedShift”でPステートの消費電力削減を実現 ~Windows 10とSkylakeでさらなる長時間バッテリ駆動が可能に - PC Watch]]
* [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/power_management_guide/cpufreq_governors|3.2. CPUfreq Red Hat Enterprise Linux 7 | Red Hat Customer Portal]]