linux cpu 運行模式
CPU動態節能技術用於降低服務器功耗,通過選擇系統空閑狀態不同的電源管理策略,可以實現不同程度降低服務器功耗,更低的功耗策略意味着CPU喚醒更慢對性能 影響更大。
對於對時延和性能要求高的應用,建議關閉CPU的動態調節功能,禁止 CPU休眠,並把CPU頻率固定到最高。
通常建議在服務器BIOS中修改電源管理為Performance,如果發現CPU模式為conservative或者powersave,可以使用cpupower設置CPU Performance模式,效果也是相當顯著的。
幾種模式如下:
- performance: 顧名思義只注重效率,將CPU頻率固定工作在其支持的最高運行頻率上,而不動態調節。
- userspace:最早的cpufreq子系統通過userspace governor為用戶提供了這種靈活性。系統將變頻策略的決策權交給了用戶態應用程序,並提供了相應的接口供用戶態應用程序調節CPU 運行頻率使用。也就是長期以來都在用的那個模式。可以通過手動編輯配置文件進行配置
- powersave: 將CPU頻率設置為最低的所謂“省電”模式,CPU會固定工作在其支持的最低運行頻率上。因此這兩種governors 都屬於靜態governor,即在使用它們時CPU 的運行頻率不會根據系統運行時負載的變化動態作出調整。這兩種governors 對應的是兩種極端的應用場景,使用performance governor 是對系統高性能的最大追求,而使用powersave governor 則是對系統低功耗的最大追求。
- ondemand: 按需快速動態調整CPU頻率, 一有cpu計算量的任務,就會立即達到最大頻率運行,等執行完畢就立即回到最低頻率;ondemand:userspace是內核態的檢測,用戶態調整,效率低。而ondemand正是人們長期以來希望看到的一個完全在內核態下工作並且能夠以更加細粒度的時間間隔對系統負載情況進行采樣分析的governor。 在 ondemand governor 監測到系統負載超過 up_threshold 所設定的百分比時,說明用戶當前需要 CPU 提供更強大的處理能力,因此 ondemand governor 會將CPU設置在最高頻率上運行。但是當 ondemand governor 監測到系統負載下降,可以降低 CPU 的運行頻率時,到底應該降低到哪個頻率呢? ondemand governor 的最初實現是在可選的頻率范圍內調低至下一個可用頻率,例如 CPU 支持三個可選頻率,分別為 1.67GHz、1.33GHz 和 1GHz ,如果 CPU 運行在 1.67GHz 時 ondemand governor 發現可以降低運行頻率,那么 1.33GHz 將被選作降頻的目標頻率。
- conservative: 與ondemand不同,平滑地調整CPU頻率,頻率的升降是漸變式的,會自動在頻率上下限調整,和ondemand的區別在於它會按需分配頻率,而不是一味追求最高頻率;
查看當前的模式
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
查看所有邏輯CPU
watch -n -1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor"
查看所有邏輯CPU當前運行的頻率
watch -n -1 "cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq"
查看頻率信息
cpupower frequency-info
調整頻率
cpupower frequency-set -g performance
cpupower
RHEL/CentOS 7的systemd提供了cpupower.service配置
cat /lib/systemd/system/cpupower.service [Unit] Description=Configure CPU power related settings After=syslog.target [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/sysconfig/cpupower ExecStart=/usr/bin/cpupower $CPUPOWER_START_OPTS ExecStop=/usr/bin/cpupower $CPUPOWER_STOP_OPTS [Install] WantedBy=multi-user.target
配置/etc/sysconfig/cpupower
cat /etc/sysconfig/cpupower # See 'cpupower help' and cpupower(1) for more info CPUPOWER_START_OPTS="frequency-set -g performance" CPUPOWER_STOP_OPTS="frequency-set -g ondemand"
參考文章
https://zhuanlan.zhihu.com/p/33753019
https://wiki.archlinux.org/index.php/CPU_frequency_scaling_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://segmentfault.com/a/1190000017942936
https://www.houzhibo.com/archives/864