最近在進(jìn)行網(wǎng)絡(luò)性能測(cè)試的時(shí)候進(jìn)程會(huì)遇到系統(tǒng)C-state,P-state以及turbo的相關(guān)設(shè)置,雖然知道都是和CPU功耗有關(guān)奥此,但具體有什么聯(lián)系以及對(duì)當(dāng)前進(jìn)程的影響并不是很清楚涉枫,于是查了一下相關(guān)資料做一個(gè)總結(jié)記錄。
首先C-state和P-state是完全不同的概念和維度蹂午,官方解釋是“C-states are idle states and P-states are operational states”。彬碱,此外C-States(CPU Power states)指CPU電源狀態(tài)豆胸,而P-States(CPU Performance states)則指CPU性能狀態(tài)。下面我們逐個(gè)分析一下巷疼。
C-state
C-state有C0晚胡,C1...Cn多種模式,但只有C0是正常工作模式(active)嚼沿,其他方式都是idle狀態(tài)估盘,只是idle的程度不同,C后的數(shù)越高骡尽,CPU睡眠得越深遣妥,CPU的功耗被降低得越多,同時(shí)需要更多的時(shí)間回到C0模式攀细。 那么是什么決定了idle的程度或者說(shuō)睡眠的程度呢箫踩?答案是stop CPU功能的多少,CPU的功能被閹割的越多就越省電谭贪,當(dāng)然恢復(fù)正常狀態(tài)就需要越長(zhǎng)時(shí)間境钟。每一個(gè)模式都有一個(gè)對(duì)應(yīng)的名字,有的模式還有子模式俭识,子模式又具有不同功耗和喚醒時(shí)間慨削。在下表所列的模式中,C1到C3通過(guò)切斷CPU內(nèi)部的時(shí)鐘,C4到C6模式通過(guò)降低CPU的電壓缚态。"Enhanced"模式兩種方式都采用磁椒。
CPU在C0狀態(tài)時(shí)會(huì)執(zhí)行指令,但是即使在C0狀態(tài)下OSPM仍然可以通過(guò)調(diào)整CPU的工作電壓和頻率的方式猿规,以此降低整個(gè)平臺(tái)的功耗衷快。P-state 在Intel平臺(tái)上通常指的是EIST(Enhanced Intel SpeedStep Technology),EIST允許多個(gè)核動(dòng)態(tài)的切換電壓和頻率姨俩,動(dòng)態(tài)的調(diào)整系統(tǒng)的功耗蘸拔。OSPM通過(guò)WRMSR指令寫IA32_PERF_CTL MSR的方式調(diào)整CPU電壓和<u style="overflow-wrap: break-word;">工作頻率</u>。
允許多個(gè)核動(dòng)態(tài)的切換電壓和頻率环葵,動(dòng)態(tài)的調(diào)整系統(tǒng)的功耗调窍。通常 P0 指的就是處理器以最高頻率、最高運(yùn)算量的狀態(tài)運(yùn)作张遭,接下來(lái) P1邓萨、P2、P3……就依照運(yùn)作效能的多少菊卷、省電性由少至多依序排下去缔恳。 Intel 的 Turbo Boost 技術(shù)就是當(dāng)系統(tǒng)工作要求處理器運(yùn)作在 P0 狀態(tài)時(shí),收集有關(guān)目前處理器耗電量洁闰、啟動(dòng)核心數(shù)量歉甚、核心電源狀態(tài)、處理器溫度等信息扑眉,來(lái)決定P0的運(yùn)作頻率多少纸泄。
可以通過(guò)修改grub啟動(dòng)文件開啟P-state,一般情況下我們也會(huì)通過(guò)限制max_cstate來(lái)限制C-state的最大睡眠深度腰素。
修改/etc/default/grub配置行GRUB_CMDLINE_LINUX添加intel_idle.max_cstate=1 intel_pstate=enable processor.max_cstate=1
grub2-mkconfig -o /boot/grub2/grub.cfg
Turbo P-states
P-state可以和turbo(睿頻)相結(jié)合聘裁,如果/sys/devices/system/cpu/intel_pstate/no_turbo被設(shè)置為0,說(shuō)明使能了turbo P-state弓千。
P-state支持的所有頻率范圍可以分為兩個(gè)部分衡便,有一個(gè)分界的閾值turbo threshold,超過(guò)這個(gè)閾值的P-state稱之為turbo P-states洋访。turbo P-states有一個(gè)問(wèn)題是無(wú)法指定CPU具體是在哪個(gè)turbo P-states砰诵,這個(gè)會(huì)隨著CPU功耗的增加減少動(dòng)態(tài)調(diào)節(jié),而在turbo threshold之下的P-state是可以指定的捌显。關(guān)于turbo詳細(xì)在Turbo Boost中講解。
Turbo Boost
Intel Turbo Boost是Intel在系列處理器實(shí)現(xiàn)的技術(shù)总寒,通過(guò)動(dòng)態(tài)控制處理器的時(shí)鐘率來(lái)激活處理器運(yùn)行在超過(guò)基礎(chǔ)操作主頻扶歪。
支持不同Turbo Boost版本技術(shù)的處理器分為:
Turbo Boost 1.0: Nehalem
Turbo Boost 2.0: Sandby Bridge
Turbo Boost Max 3.0: Ivy Bridge, Haswell, Broadwell, Skylake, Broadwell-E
Turo Boost是在操作系統(tǒng)請(qǐng)求處理器的最高性能狀態(tài)(highest performance state, pstate)時(shí)候激活。
處理器性能狀態(tài)是通過(guò)高級(jí)配置和電源接口(Advanced Configuration and Power Interface, ACPI)規(guī)范來(lái)定義的,這是被所有主流操作系統(tǒng)所支持的開放標(biāo)準(zhǔn)善镰。在Turbo Boost背后的設(shè)計(jì)概念也被稱為"動(dòng)態(tài)超頻"妹萨。
時(shí)鐘主頻是由處理器電壓,電流和熱量所限制的炫欺,同時(shí)也受到當(dāng)前CPU核心數(shù)量和激活核心的最高主頻限制乎完。當(dāng)處理器上負(fù)載調(diào)用更快性能,并且此時(shí)處理器還沒有達(dá)到上限品洛,則處理器時(shí)鐘將增加操作頻率以滿足需求树姨。頻率增長(zhǎng),在Nehalem處理器是133MHz桥状,而在Sand Bridge, Ivy Bridge帽揪,Haswell和Skylake處理器是100MHz。
Intel Turbo Boost監(jiān)控處理器當(dāng)期使用情況辅斟,以及處理器是否接近最大熱量設(shè)計(jì)功率(thermal design power, TDP)转晰。這個(gè)TDP是處理器支持的最大功率。
Turbo Boost是動(dòng)態(tài)功能士飒,Turbo Boost以133MHz步長(zhǎng)增長(zhǎng)查邢,直到達(dá)到允許的最大Turbo Boost(和處理器型號(hào)相關(guān))或者最大TDP。不過(guò)酵幕,Intel仍然建議處理器工作在基礎(chǔ)時(shí)鐘速度(base clock speed)扰藕,因?yàn)镮ntel不承諾處理器任何時(shí)候都能夠達(dá)到最大Turbo Boost speed。
Turbo Boost允許一個(gè)或多個(gè)CPU核心運(yùn)行在更高的P-states(turbo P-state)裙盾,這個(gè)最大P-state需要考慮以下因素:
激活的核心數(shù)量( C0狀態(tài))
評(píng)估當(dāng)前處理器消耗(Imax)
評(píng)估處理器電能消耗(TDP - Thermal Design Power)
處理器穩(wěn)定
所以实胸,內(nèi)核啟動(dòng)參數(shù)需要激活****P-state****驅(qū)動(dòng)后才能使用****Turbo Boost****功能。
Turbo Boot Max 3.0
Intel Turbo Boost Max Technology 3.0 使用一個(gè)和CPU中存儲(chǔ)信息相連的驅(qū)動(dòng)番官。它標(biāo)識(shí)并直接工作在最快的芯片內(nèi)核上庐完。驅(qū)動(dòng)也允許通過(guò)白名單自定義配置以便讓用戶設(shè)置應(yīng)用程序的優(yōu)先級(jí)。這個(gè)驅(qū)動(dòng)必須在系統(tǒng)中存在和正確配置徘熔,否則操作系統(tǒng)就不能有效路由工作負(fù)載到目標(biāo)處理器核心门躯。
要使用Intel Turbo Boost Max Technology 3.0需要同時(shí)滿足條件:
CPU處理器支持 (需要檢查Intel CPU功能)
操作系統(tǒng)支持
驅(qū)動(dòng)和相應(yīng)的應(yīng)用軟件
X99或X299主板并使用激活BIOS/firmware支持
和Intel Turbo Boost Technology 2.0不同的是,3.0版本允許單核心更高的主頻酷师。
Intel Turbo Boost Max技術(shù)的軟件用戶接口和驅(qū)動(dòng)允許用戶優(yōu)先將負(fù)載(應(yīng)用)直接調(diào)度到最快的CPU核心上讶凉。
支持Core List是處理器核心的順序列表,最高性能的core位于最高山孔。更改列表順序可能會(huì)重新以對(duì)應(yīng)性能來(lái)表述處理器核心懂讯。在操作系統(tǒng)的core序號(hào)體系和處理器序號(hào)體系相關(guān)。例如台颠,Core 0對(duì)應(yīng)邏輯處理器0和1褐望,Core 1對(duì)應(yīng)邏輯處理器2和3。
當(dāng)每個(gè)CPU核心最大主頻超過(guò)時(shí)鐘 - Overclocking Enabled顯示了Core List的優(yōu)先級(jí)。
Turbo Boost Max技術(shù)支持設(shè)置應(yīng)用程序可以使用的CPU性能的百分比(閥值)瘫里,以及評(píng)估時(shí)間間隔: 默認(rèn)的評(píng)估時(shí)間間隔單位是100ms实蔽,默認(rèn)值是10,也就是10x100ms=1s谨读,即每秒評(píng)估一次局装;CPU使用閥值默認(rèn)是90%,調(diào)整這個(gè)閥值會(huì)降低程序消耗的系統(tǒng)性能劳殖。
cpufreq子系統(tǒng)
cpufreq 為在Linux 內(nèi)核中更好的支持不同 CPU 的變頻技術(shù)提供了一個(gè)統(tǒng)一的設(shè)計(jì)框架铐尚,其軟件結(jié)構(gòu)如下:
cpufreq 在設(shè)計(jì)上主要分為以下三個(gè)模塊:
cpufreq 模塊(cpufreq module)對(duì)如何在底層控制各種不同 CPU 所支持的變頻技術(shù)以及如何在上層根據(jù)系統(tǒng)負(fù)載動(dòng)態(tài)選擇合適的運(yùn)行頻率進(jìn)行了封裝和抽象,并在二者之間定義了清晰的接口闷尿,從而在設(shè)計(jì)上完成了前文所提到的對(duì) mechanism 與 policy 的分離塑径。
在 cpufreq 模塊的底層,各個(gè) CPU 生產(chǎn)廠商只需根據(jù)其變頻技術(shù)的硬件實(shí)現(xiàn)和使用方法提供與其 CPU 相關(guān)的變頻驅(qū)動(dòng)程序(CPU-specific drivers)填具,例如 Intel 需要提供支持 Enhanced SpeedStep 技術(shù)的 CPU 驅(qū)動(dòng)程序统舀,而 AMD 則需要提供支持 PowerNow! 技術(shù)的 CPU 驅(qū)動(dòng)程序。
在 cpufreq 模塊的上層劳景,governor 作為選擇合適的目標(biāo)運(yùn)行頻率的決策者誉简,根據(jù)一定的標(biāo)準(zhǔn)在適當(dāng)?shù)臅r(shí)刻選擇出 CPU 適合的運(yùn)行頻率,并通過(guò) cpufreq 模塊定義的接口操作底層與 CPU 相關(guān)的變頻驅(qū)動(dòng)程序盟广,將 CPU 設(shè)置運(yùn)行在選定的運(yùn)行頻率上闷串。目前最新的 Linux 內(nèi)核中提供了 performance 、powersave 筋量、userspace烹吵、conservative 和 ondemand 五種 governors 供用戶選擇使用,它們?cè)谶x擇 CPU 合適的運(yùn)行頻率時(shí)使用的是各自不同的標(biāo)準(zhǔn)并分別適用于不同的應(yīng)用場(chǎng)景桨武。用戶在同一時(shí)間只能選擇其中一個(gè) governor 使用肋拔,但是可以在系統(tǒng)運(yùn)行過(guò)程中根據(jù)應(yīng)用需求的變化而切換使用另一個(gè) governor 。
這種設(shè)計(jì)帶來(lái)的好處是使得 governor 和 CPU 相關(guān)的變頻驅(qū)動(dòng)程序的開發(fā)可以相互獨(dú)立進(jìn)行呀酸,并在最大限度上實(shí)現(xiàn)代碼重用凉蜂,內(nèi)核開發(fā)人員在編寫和試驗(yàn)新的 governor 時(shí)不會(huì)再陷入到某款特定 CPU 的變頻技術(shù)的硬件實(shí)現(xiàn)細(xì)節(jié)中去,而 CPU 生產(chǎn)廠商在向 Linux 內(nèi)核中添加支持其特定的 CPU 變頻技術(shù)的代碼時(shí)只需提供一個(gè)相對(duì)來(lái)說(shuō)簡(jiǎn)單了很多的驅(qū)動(dòng)程序性誉,而不必考慮在各種不同的應(yīng)用場(chǎng)景中如何選擇合適的運(yùn)行頻率這些復(fù)雜的問(wèn)題窿吩。
內(nèi)核中的 cpufreq 子系統(tǒng)通過(guò) sysfs 文件系統(tǒng)向上層應(yīng)用提供了用戶接口,對(duì)于系統(tǒng)中的每一個(gè) CPU 而言错览,其 cpufreq 的 sysfs 用戶接口位于 /sys/devices/system/cpu/cpuX/cpufreq/ 目錄下纫雁,其中 X 代表 processor id 潮尝,與 /proc/cpuinfo 中的信息相對(duì)應(yīng)绿店。以 cpu0 為例日熬,用戶一般會(huì)在該目錄下觀察到以下文件:
|
$ ls -F /sys/devices/system/cpu/cpu0/cpufreq/
affected_cpus
cpuinfo_cur_freq
cpuinfo_max_freq
cpuinfo_min_freq
ondemand/
scaling_available_frequencies
scaling_available_governors
scaling_cur_freq
scaling_driver
scaling_governor
scaling_max_freq
scaling_min_freq
stats/
|
linux頻率管理相關(guān)工具
cpupower monitor -l可以列出所有可以監(jiān)控的模塊卵皂,如:
cpupower frequency-info可以檢查處理器主頻:
#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: 0.97 ms.*
hardware limits: 1000 MHz - 3.10 GHz*
available cpufreq governors: performance, powersave*
current policy: frequency should be within 1000 MHz and 3.10 GHz.*
The governor "powersave" may decide which speed to use*
within this range.*
current CPU frequency is 2.70 GHz (asserted by call to hardware).*
boost state support:*
Supported: yes*
Active: yes*
其中hardware limits表示CPU支持的頻率范圍;
current policy表示當(dāng)前配置下CPU的支持的頻率波動(dòng)范圍闲勺;
注意:使用cpupower frequency-info****顯示的當(dāng)前cpu 0****主頻是一個(gè)約數(shù),不精確且有延遲扣猫。最好采用 ****cpupower monitor -m Mperf ****檢查能夠獲取精確的CPU****主頻菜循,且即使沒有使用intel_pstate驅(qū)動(dòng)也能夠準(zhǔn)確獲取頻率。
檢查處理器主頻cpupower monitor -m Mperf
$sudo cpupower monitor -m Mperf
|Mperf*
PKG |CORE|CPU | C0 | Cx | Freq
0| 0| 0| 7.85| 92.15| 2820*
0| 0| 32| 0.38| 99.62| 2825*
0| 1| 1| 42.75| 57.25| 2891*
0| 1| 33| 6.98| 93.02| 2890*
...
可以看到Cx顯示的就是處理器idle的狀態(tài)
cpupower idle-info命令列出支持的C-State
cpupower idle-info
CPUidle driver: intel_idle
CPUidle governor: menu
Analyzing CPU 0:
Number of idle states: 2
Available idle states: POLL C1-SKX
POLL:
Flags/Description: CPUIDLE CORE POLL IDLE
Latency: 0
Usage: 2667
Duration: 296902700
C1-SKX:
Flags/Description: MWAIT 0x00
Latency: 2
Usage: 776606
Duration: 14056122480
以上信息表示當(dāng)前系統(tǒng)支持POLL申尤,C1-SKX兩種idle C-state癌幕,并且都沒有disable。注意:系統(tǒng)必須加載了intel_idle驅(qū)動(dòng)之后才能列出支持的C-state昧穿。
intel_pstate/no_turbo
可以在intel_pstate驅(qū)動(dòng)中關(guān)閉turob(設(shè)置intel_pstate/no_turbo值為1)
echo 1|sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
要檢查是否啟用和停止Turbo勺远,可以通過(guò):
- cat /sys/devices/system/cpu/intel_pstate/no_turbo* 來(lái)檢查
Turbo Boost也可以在運(yùn)行時(shí)通過(guò)禁止intel_pstate驅(qū)動(dòng)來(lái)關(guān)閉:
echo off |sudo tee /sys/devices/system/cpu/intel_pstate/status
注意:這里禁用intel_pstate之后,處理器主頻會(huì)跌到物理主頻的最小值时鸵,此時(shí)需要通過(guò)MSR寄存器199H來(lái)靜態(tài)設(shè)置目標(biāo)性能狀態(tài)值(Target performance State Value)
也可以激活intel_pstate驅(qū)動(dòng):
echo active |sudo tee /sys/devices/system/cpu/intel_pstate/status
注意:這個(gè)intel_pstate/status入口必須在激活Turbo Boost之后才會(huì)存在
cpupower frequency-info讀取CPU主頻
注意胶逢,默認(rèn)沒有指定cpu參數(shù)則讀取cpu 0主頻。要讀取指定cpu的主頻饰潜,需要使用-c參數(shù)初坠,例如,讀取cpu 31的主頻
cpupower -c 31 frequency-info
不過(guò)彭雾,cpupower frequency-info 是通過(guò)intel_pstate驅(qū)動(dòng)來(lái)獲取信息的碟刺,所以如果使用 echo off |sudo tee /sys/devices/system/cpu/intel_pstate/status 禁用了intel_pstate驅(qū)動(dòng),則該指令失效薯酝。
可以通過(guò)cpupower monitor指令來(lái)獲取CPU主頻半沽,該指令是直接讀取MSR 198H 來(lái)直接獲取CPU主頻信息,所以即使禁用了intel_pstate驅(qū)動(dòng)也可以獲得準(zhǔn)確的數(shù)據(jù)吴菠。
cpupower monitor
使用turbostat讀取主頻
turbostat默認(rèn)10秒刷新一次者填,可以使用-i 1可以1秒刷新一次。
Avg_MHz是平均主頻橄务,基于APERF
Busy%表示處理器繁忙百分比
Bzy_MHz是實(shí)際的busy frequency幔托,基于MPERF
TSC_MHz是固定主頻,TSC基于
APERF (average) and MPERF (maximum) 是MSR寄存器可以提供當(dāng)前CPU主頻信息蜂挪。
通過(guò)cpupower frequency-set設(shè)置cpu的頻率
可以通過(guò)cpupower frequency-set --min/--max $freq 來(lái)設(shè)置當(dāng)前系統(tǒng)的cpu頻率范圍重挑。
查看設(shè)置系統(tǒng)的governor
同樣通過(guò)cpupower frequency-info可以查看當(dāng)前系統(tǒng)支持的governor,已經(jīng)在使用的governor棠涮。
#cpupower frequency-info
analyzing CPU 0:
……*
available cpufreq governors: performance, powersave*
current policy: frequency should be within 1000 MHz and 3.10 GHz.*
The governor "powersave" may decide which speed to use*
within this range.*
如上谬哀,表示當(dāng)前系統(tǒng)支持performance, powersave兩種governor,而當(dāng)前正在使用的是powersave严肪。
可以通過(guò)*cpupower frequency-set --governor $governor*來(lái)設(shè)置當(dāng)前系統(tǒng)使用的governor史煎。
轉(zhuǎn)載自http://blog.chinaunix.net/uid-28541347-id-5822288.html