1.簡介
bios里面設置performance,包括多項調整,cpu只是其中一項,其他調整項,不同廠家不同,大致包括內存頻率,ACPI T-States,散熱策略,monitor/mwait等;
系統里面可以將cpu的性能調至最優,主要是pstate, cstate及monit/mwait這幾項,其他方面目前看無法調整;
2.Kernel cpu頻率調整策略
- 控制cpu頻率的kernel cpufreq driver分兩種acpi cpufreq和intel pstate.
- 在centos7上,針對Intel Xeon E系列及更新的cpu,默認是使用intel pstate控制cpu的頻率,較新的cpu若支持hwp(hardware-managed P-states),則可根據driver配置的頻率值硬件自動進行調節,否則軟件會根據算法選擇頻率(注:配置和讀取頻率信息都是通過相關的MSR);
- 經簡單測試,skylake之前不支持hwp,從skylake開始支持hwp;
- 不支持hwp的cpu,根據intel pstate代碼,最快10ms(可通過/sys/kernel/debug/pstate_snb/sample_rate_ms調整這個時間)會根據算法調整一次頻率,參考kernel函數:intel_pstate_init_cpu;
- 通過intel pstate不可能將cpu控制在某一頻率,真正的運行頻率是cpu本身決定的,通過pstate設置的值僅是代表性能高低。參考kernel文檔: Documentation\cpu-freq\intel-pstate.txt 有如下內容:“For contemporary Intel processors, the frequency is controlled by the processor itself and the P-states exposed to software are related to performance levels. The idea that frequency can be set to a single frequency is fiction for Intel Core processors. Even if the scaling driver selects a single P state the actual frequency the processor will run at is selected by the processor itself.”
若intel pstate使用了hwp,則通過dmesg可查到如下信息:
[root@A01-R06-I12-98-BHD8HP2 cpufreq]# dmesg
[ 3.843891] Intel P-state driver initializing.
[ 3.846331] intel_pstate: HWP enabled
3.Kernel idle實現
- 當前系統idle driver分兩種acpi idle及intel idle,同時cstate也分intel cstate與acpi cstate,有一定的對應關系,但不完全一樣。
- 如果當前系統使用的idle是intel idle, 則可在如下路徑:/sys/devices/system/cpu/cpu*/cpuidle/state* 查詢cstate名稱,延時,存在時間等信息。
- centos intel idle driver默認使用monitor/mwait 進入cstate,喚醒時間相對ioport方式更快,(acpi idle driver進入cstate時,可選擇使用mwait或ioport方式);
- C0-C6 latency從0到上百微秒,級別越高,延時越大,喚醒時間越長;
- 可通過在kernel啟動參數中添加max_cstate=<*> 來設置cpu使用的最大cstate級別;
1)cstate簡介
為了在CPU空閑時節約能源,可以使用命令讓CPU進入低功耗模式。每個CPU都有幾種功耗模式,它們統稱為“C-State”或“C-模式”。它們從C0開始編號,C0是正常的CPU操作模式,即CPU完全開啟。C編號越高,CPU睡眠模式越深,也就是說關閉的電路和信號更多,CPU需要更多時間才能恢復到C0,即喚醒。
在下面的表中,列舉了一些C-State模式。模式C1到C3的工作方式基本上是切斷CPU內使用的時鐘信號,而模式C4到C6的工作方式是降低CPU電壓。“增強”模式可以同時執行這兩個操作。具體的實現每款cpu都不太一樣,具體實現哪些cstate也不確定,依具體型號而定。
4.相關kernel啟動參數
- max_cstate=1 //設置為0時,會使用acpi idle driver, 設置為1時, idle僅進入C1
- intel_pstate=disable/no_hwp //disable:配置kernel不使用intel_pstate而是使用acpi driver, no_hwp: 不使用cpu的hwp功能
- max_cstate=0 //使用acpi idle driver時生效
- idle=halt/nomwait //配置此參數后,不再使用intel_idle driver,而是使用acpi idle driver,=halt時,不會進入C2/C3,=nowait時, 在進入c1-state時不使用mwait命令,而是halt命令,在進入c2/c3時,使用ioport指令
5.Centos內調整cpu性能
通過cpupower控制pstate及cstate:
- cpupower -c all frequency-set -g performance //調整cpu pstate到最高性能
- cpupower -c all frequency-info -wm //查看cpu頻率
- cpupower -c all idle-set -D 3 //關閉latency大于等于3的所有cstate
- cpupower idle-info //查看cpu cstate狀態信息
- cpupower monitor -i 10 //監控cpu 10s內平均頻率與各cstate百分比
通過sys接口控制pstate及cstate:
- echo 100 > /sys/devices/system/cpu/intel_pstate/min_perf_pct //調整driver能設置的最低性能為100%
- echo 1 | tee -a /sys/devices/system/cpu/cpu[0-9]*/cpuidle/state2/disable //通過sys接口手動關閉cstate-2
6.推薦配置參數
根據上述分析,以DELL R640為例,有兩種配置比較適合線上機器:
1)兼顧性能及功耗:
調整pstate為powersave模式,同時只開啟c1-state, 其它都關閉,可讓所有cpu工作在基頻及以上頻率,如gold 6148基頻2.6G,作如下配置后,所有cpu頻率都在2.6G左右;
cpupower -c all frequency-set -g powersave
cpupower -c all idle-set -D 3 //-D之后的值為/sys/devices/system/cpu/cpu0/cpuidle/state1/latency的值+1
2)偏重于性能:
調整pstate為performance模式,同時只開啟c1-state, 其它都關閉,可讓所有cpu工作在較高的頻率,如gold 6148基頻2.6G,作如下配置后,所有cpu頻率都在3.1G左右;
cpupower -c all frequency-set -g performance
cpupower -c all idle-set -D 3 //-D之后的值為/sys/devices/system/cpu/cpu0/cpuidle/state1/latency的值+1
設置為上述工作模式后,有兩個缺點:
1)所有cpu頻率都比較高,但是最高頻率沒有打開所有cstate時高, 因為打開所有cstate時,部分cpu頻率很低,部分cpu頻率就可以變的很高;
2)cpu電源消耗較大,不確定cpu及服務器能否長時間穩定工作;