性能優化大師Brendan Gregg曾說:“性能問題可能來源于任何地方,包括系統中因你一無所知而不曾檢查的地方”,CPU電源管理就是在性能優化過程中經常被忽略的地方。在這篇文章中,我們從一個簡單的ping延遲出發,以小見大,一起了解CPU電源管理。
之前在項目中觀測到一個奇怪的現象(如下圖所示),在測試網絡延遲時,從服務器A ping服務器B延時只有0.04ms左右,但是從服務器B ping服務器A延遲確有0.12ms左右,結果相差三倍多!而兩臺服務器是直連的,中間也沒有經過路由器或交換機,那么延時差到底是怎么產生的呢?
在分析此問題時,我們將ping時延做一個簡單的拆分,它包括了在鏈路中的傳播時延和在服務器端的處理時延。我們首先判斷下網絡狀況是否良好,用tcpdump分別在收發兩端抓包,沒有發現丟包、亂序等問題,速率也沒有問題,網絡狀態良好。既然網絡傳輸沒有問題,那就重點分析下處理時延。
再來分析下抓到的ping報文,主要分析在兩臺服務器收到ICMP報文后發送回復報文的時間差,發現服務器A的回復時間更長。再使用ftrace分析代碼層的執行時間,圖1是服務器A的處理時間,圖2是服務器B的處理時間,對比可見,服務器A的ICMP reply執行時間比服務器B要長。那什么會影響函數執行的時間呢?是CPU。
圖1
圖2
在觀察服務器B ping服務器A的輸出(圖3)時發現,延時的變化范圍很大,有時延時也很短。
圖3
如圖4所示,CPU的頻率也是變化的,那么CPU頻率是怎么變的又是因何而變,跟延遲的變化有關系嗎?我們能否控制CPU頻率的這種變化呢?要了解這些我們首先要知道CPU的變頻和電源管理方面的知識。
圖4
OS會根據工作負載選擇工作頻率和電壓,當負載較低時(例如此問題的ping報文收發),會對CPU進行降壓降頻以節省用電。在大部分場景下,CPU并不需要7X24小時滿負荷工作,為了省電和延長CPU的使用壽命就有了各種變頻省電技術。其中常見的有以下幾種:
■C states (Power states)
在空閑狀態時,通過關閉不同子系統(時鐘或者緩存等)達到不同省電狀態。 關閉的組件越多,耗電量越低,但恢復工作就越慢。
常用的有以下幾個狀態
C0: 工作狀態,沒有組件關閉。
C1: 使用HLT或MWAIT指令進入該狀態,C1狀態會關閉內部時鐘,但是可以立刻回到C0狀態。
C3: 使用MWAIT指令進入該狀態,會將L1和L2緩存刷到LLC/L3緩存,并進一步關閉了PLL,但仍處于供電狀態。(C1,C3狀態下,Cache一致性是得到保證的,從而恢復現場速度也很快)
C6: 使用MWAIT指令進入該狀態,內部設備的上下文信息(Context)被封存和凍結,Catch被清空和關閉,電壓也被降為0。恢復現場會更耗時。
(idle_intel 驅動可能在Cstates關閉時,仍使core進入省電狀態。)
圖5
■P states (Performance states)
根據處理器負載自動調節電壓和頻率,以減少耗電量和發熱量,大大減少了CPU在低工作量的能耗。(只有在C-states狀態為C0時才會有效,因為必須為其供電才能執行指令)
OS控制的P-states
OS設定特定的P-states,即選擇工作頻率,處理器再根據頻率計算電壓。
硬件控制的P-states
OS只給出負載,由硬件選擇對應的P-states,并設置電壓和頻率。
Intel_pstate驅動
此驅動程序通過內置調頻器,實現面向Intel Core(SandyBridge 和更新的型號)處理器的調頻驅動??梢酝ㄟ^cpupower命令設置最大最小頻率。
■monitor/mwait
在core空閑或者等待寫入時,使當前core進入C1等C-states的特殊指令。
■Turbo
在個別核非常繁忙同時其他核又因為空閑進入C-States時,內置的電源管理模塊將其電能輸送給忙碌的core,升高其電壓和頻率,使其獲得比標頻更高的頻率。
以DELL服務器為例,在System Profile Setting中可以找到有關電源管理的選項。disable C-States、Monitor/Wait相關選項,可以使CPU始終保持高頻率工作。
圖6
■corefreq-cli工具
可以查看各種系統狀態和CPU狀態,包括電壓,頻率,C-states,Turbo,溫度等。
圖7
再回到剛開始的問題,通過corefreq-cli工具看到兩臺服務器的CPU確實工作在不同的C-States等級,如圖8所示,服務器B在C1而服務器A在C6。
圖8
調整服務器A的bios選項,在關閉了C-States、Monitor/Mwait后,兩臺服務的CPU都處在C1狀態(圖9),這時再分別在兩臺服務器執行ping操作,延時終于不相上下了!
圖9
現代CPU電源管理功能十分強大,我們可以選擇經濟環保的方式讓CPU根據負載選擇工作頻率和電壓,在追求極致性能時也可以讓CPU不管任務量大小都滿負荷工作,在了解以上內容后,我們可以根據實際使用需求進行選擇。
服務電話: 400-678-1800 (周??周五 09:00-18:00)
商務合作: 0571-87770835
市場反饋: marketing@woqutech.com
地址: 杭州市濱江區濱安路1190號智匯中?A座1101室