0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用于衡量CPU的繁忙程度的正確指標(biāo)

Linux閱碼場(chǎng) ? 來源:cg ? 2018-12-23 13:50 ? 次閱讀

1. 引言

可能你認(rèn)為的 90% CPU 利用率意味著這樣的情形:

而實(shí)際卻可能是這樣的:

CPU 并非 90% 的時(shí)間都在忙著,很大一部分時(shí)間在等待,或者說“停頓(Stalled)”了。這種情況表示處理器流水線停頓,一般由資源競(jìng)爭(zhēng)、數(shù)據(jù)依賴等原因造成。多數(shù)情況下表現(xiàn)為等待訪存操作,其中又以讀操作為主。在停頓周期內(nèi),不能執(zhí)行指令,這意味著你的程序不往前走。值得注意的是,圖中 “Stalled” 狀態(tài)所占的比例是作者依據(jù)生產(chǎn)環(huán)境中的典型場(chǎng)景計(jì)算而來,具有普遍現(xiàn)實(shí)意義。因此,大多時(shí)候 CPU 處于停頓狀態(tài),而你卻不知道,因?yàn)?CPU 利用率這個(gè)指標(biāo)沒有告訴你真相。通過進(jìn)一步分析 CPU 停頓的原因,可以指導(dǎo)代碼優(yōu)化,提高執(zhí)行效率,這是我們深入理解CPU微架構(gòu)的動(dòng)力之一。

2. CPU 利用率的真實(shí)含義是什么?

我們通常所說的CPU利用率是指 “non-idle time”:即CPU不執(zhí)行 idle thread 的時(shí)間。操作系統(tǒng)內(nèi)核會(huì)在上下文切換時(shí)記錄CPU的運(yùn)行時(shí)間。假設(shè)一個(gè) non-idle thread 開始運(yùn)行,100ms 后結(jié)束,內(nèi)核會(huì)認(rèn)為這段時(shí)間內(nèi) CPU 利用率為 100%。這種度量方式源于分時(shí)復(fù)用系統(tǒng)。早在阿波羅登月艙的導(dǎo)航計(jì)算機(jī)中,idle thread 當(dāng)時(shí)被叫做 “DUMMY JOB”,工程師通過比對(duì)運(yùn)行 “DUMMY JOB” 和 “實(shí)際任務(wù)” 的時(shí)間來衡量導(dǎo)航系統(tǒng)的利用率。

那么這個(gè)所謂“利用率”的問題在哪兒呢?

當(dāng)今時(shí)代,CPU 執(zhí)行速度遠(yuǎn)遠(yuǎn)大于內(nèi)存訪問速度,等待訪存的時(shí)間成為占用 CPU 時(shí)間的主要部分。當(dāng)你在 top 中看到很高的 “%CPU”,你可能認(rèn)為處理器是瓶頸,但實(shí)際上卻是內(nèi)存。在過去很長(zhǎng)一段時(shí)間內(nèi),CPU 頻率增長(zhǎng)的速度大于 DRAM 訪存延時(shí)降低的速度(CPU DRAM gap),直到2005年前后,處理器廠商們才開始放棄“頻率路線”,轉(zhuǎn)向多核、超線程技術(shù),再加上多處理器架構(gòu),這些都導(dǎo)致訪存需求急劇上升。盡管廠商通過增大 cache 容量、優(yōu)化 cache 策略、提升總線帶寬來試圖緩解訪存瓶頸,但我們的程序仍深受 CPU stall 困擾。

3. 如何真正辨別 CPU 在做些什么?

在 PMC(Performance Monitoring Counters) 的幫助下,我們能看到更多的 CPU 運(yùn)行狀態(tài)信息。下圖中,perf采集了10秒內(nèi)全部 CPU 的運(yùn)行狀態(tài)。

這里我們重點(diǎn)關(guān)注的核心度量指標(biāo)是 IPC(instructions per cycle),它表示平均每個(gè) CPU cycle 執(zhí)行的指令數(shù)量,很顯然該數(shù)值越大性能越好。上圖中IPC 為 0.78,看起來還不錯(cuò),是不是 78% busy 呢?現(xiàn)代處理器一般有多條流水線,運(yùn)行perf的那臺(tái)機(jī)器,IPC 的理論值可達(dá)到 4.0。如果我們從 IPC的角度來看,這臺(tái)機(jī)器只運(yùn)行到其處理器最高速度的 19.5%(0.78 / 4.0)。幸運(yùn)的是,在處理器內(nèi)部,有很多 PMU event,可用來幫助我們分析造成 CPU stall 的原因。用好 PMU 需要我們熟悉處理器微架構(gòu),可以參考 Intel SDM。

4. 最佳實(shí)踐是什么?

如果 IPC < 1.0, 很可能是 Memory stall 占主導(dǎo),可從軟件和硬件兩個(gè)方面考慮這個(gè)問題。軟件方面:減少不必要的訪存操作,提升 cache 命中率,盡量訪問本地節(jié)點(diǎn)內(nèi)存;硬件方面:增加 cache 容量,加快訪存速度,提升總線帶寬。

如果IPC > 1.0, 很可能是計(jì)算密集型的程序??梢栽噲D減少執(zhí)行指令的數(shù)量:消除不必要的工作?;鹧鎴DCPU flame graphs,非常適用于分析這類問題。硬件方面:嘗試超頻、使用更多的 core 或 hyperthread。作者根據(jù)PMU相關(guān)的工作經(jīng)驗(yàn),設(shè)定了1.0這個(gè)閾值,用于區(qū)分訪存密集型(memory-bound)和計(jì)算密集型(cpu-bound)程序。讀者可以根據(jù)自己的實(shí)際工作平臺(tái),合理調(diào)整這個(gè)閾值。

5. 性能工具應(yīng)該告訴我們什么?

作者認(rèn)為,性能工具中使用 %CPU 時(shí)都應(yīng)該附帶上 IPC,或者將 %CPU 拆分為指令執(zhí)行消耗 cycle(%INS) 和 stalled 的 cycle(%STL)。對(duì)應(yīng)到top,在 Linux 系統(tǒng)有一個(gè)能夠顯示每個(gè)處理器 IPC 的工具tiptop:

6. 其他可能讓 CPU 利用率引起誤解的因素

除了訪存導(dǎo)致的 stall 容易讓人誤解 CPU 利用率外,還有其他一些因素:

溫度原因?qū)е绿幚砥?stall;

Turboboost 干擾了時(shí)鐘速率;

內(nèi)核使得時(shí)鐘速率加快;

平均帶來的問題:1分鐘利用率平均 80%,掩蓋了中間 100% 部分;

自旋鎖: CPU 一直在被使用,同時(shí) IPC 也很高,但是應(yīng)用邏輯上并沒有任何進(jìn)展。

7. 更新:CPU 利用率真的錯(cuò)了嗎?

這篇文章引起了大量留言:

http://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html的留言欄;

https://news.ycombinator.com/item?id=14301739

https://www.reddit.com/r/programming/comments/6a6v8g/cpu_utilization_is_wrong/

總結(jié)下作者的回答是:這里討論的并不是 iowait (那是磁盤IO),而且如果你已經(jīng)確認(rèn)是訪存密集型,是有些處理辦法(參考上面)。

那么 CPU 利用率指標(biāo)是確確實(shí)實(shí)錯(cuò)誤的,還是只是容易誤導(dǎo)?如作者前面所說,他認(rèn)為許多人把高 CPU 利用率理解為瓶頸在 CPU 上,這一行為才是錯(cuò)誤的;其實(shí)單看 CPU 利用率并不清楚瓶頸在何處,很多時(shí)候瓶頸是在外部。這個(gè)指標(biāo)技術(shù)上看是否正確?如果 CPU stall 的周期并不能被其他地方使用,它們是不是也就因此是“忙于等待“(聽起來有點(diǎn)矛盾)?在有些情況,確實(shí)如此,你可以說 CPU 利用率作為操作系統(tǒng)級(jí)別的指標(biāo)技術(shù)上看是對(duì)的,但是容易產(chǎn)生誤導(dǎo)。從另一個(gè)角度來說,有超線程的情況下,那些 stalled 的周期是可以被其他線程使用的,這時(shí) “%CPU” 可能會(huì)將可用的周期統(tǒng)計(jì)為正在使用,這種情況是錯(cuò)誤的。這篇文章作者想關(guān)注的是解釋清楚這個(gè)問題,并給出解決方法建議,但沒錯(cuò),CPU 利用率這個(gè)指標(biāo)本身也是存在一些問題的。

當(dāng)你可能會(huì)說利用率作為一個(gè)指標(biāo)已經(jīng)不對(duì),Andrian Cockcroft之前討論已經(jīng)指出過 (http://www.hpts.ws/papers/2007/Cockcroft_HPTS-Useless.pdf)。

8. 結(jié)論

CPU 利用率已經(jīng)開始成為一個(gè)容易誤導(dǎo)的指標(biāo):它包含訪存導(dǎo)致的等待周期,這樣會(huì)影響一些新應(yīng)用。也許 “%CPU” 應(yīng)該重命名為 “%CYC”(cycles的縮寫)。要清楚知道 “%CPU” 的含義,需要使用其他指標(biāo)進(jìn)行輔助,其中就包括每周期指令數(shù)(IPC)。IPC < 1.0 多半意味著訪存密集型,IPC > 1.0 多半意味著計(jì)算密集型。作者之前的文章中涵蓋有 IPC 說明,以及用于測(cè)量 IPC 的 Performance Monitoring Counters(PMCs)的介紹。

所有的性能監(jiān)控產(chǎn)品如果展示 “%CPU”,都應(yīng)該同時(shí)展示 PMC 指標(biāo)用于解釋其真實(shí)意義,不要誤導(dǎo)用戶。比如,可以把 “%CPU” 和 “IPC” 一起放,或者說指令執(zhí)行消耗周期和 stalled 周期。有這些指標(biāo)之后,開發(fā)者和操作者就能夠知道該如何更好地對(duì)應(yīng)用和系統(tǒng)進(jìn)行調(diào)優(yōu)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10781

    瀏覽量

    210533
  • IPC
    IPC
    +關(guān)注

    關(guān)注

    3

    文章

    337

    瀏覽量

    51726

原文標(biāo)題:震驚,用了這么多年的 CPU 利用率,其實(shí)是錯(cuò)的

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ADC直流分辨率衡量指標(biāo)問題

    -----------------------------------------------------------------------SINAD和ENOB用于測(cè)量ADC 的動(dòng)態(tài)性能,而有效分辨率和無噪聲碼分辨率用于衡量
    發(fā)表于 05-10 13:47

    衡量電能質(zhì)量的指標(biāo)

      提高電能質(zhì)量是電力部門的一項(xiàng)重要任務(wù),電能質(zhì)量即電力系統(tǒng)中電能的質(zhì)量。理想的電能應(yīng)該是完美對(duì)稱的正弦波。一些因素會(huì)使波形偏離對(duì)稱正弦,由此便產(chǎn)生了電能質(zhì)量問題。衡量電能質(zhì)量的指標(biāo)主要是電壓、頻率
    發(fā)表于 09-20 09:36

    示波器衡量指標(biāo)中至關(guān)重要但常被忽略的兩個(gè)概念是什么?

    示波器衡量指標(biāo)中至關(guān)重要但常被忽略的兩個(gè)概念是什么?
    發(fā)表于 05-12 06:49

    PUE指標(biāo)能準(zhǔn)確衡量數(shù)據(jù)中心能效嗎?

    PUE指標(biāo)能準(zhǔn)確衡量數(shù)據(jù)中心能效嗎?孫長(zhǎng)青,注冊(cè)暖通工程師,高級(jí)工程師,規(guī)劃設(shè)計(jì)部總工程師,IDC單位設(shè)計(jì)總監(jiān)等,有多年從事數(shù)據(jù)中心規(guī)劃設(shè)計(jì)、咨詢顧問、甲方自建設(shè)計(jì)部等全過程的實(shí)戰(zhàn)經(jīng)驗(yàn),對(duì)數(shù)
    發(fā)表于 07-12 08:06

    PUE指標(biāo)能準(zhǔn)確衡量數(shù)據(jù)中心能效嗎?

    PUE指標(biāo)能準(zhǔn)確衡量數(shù)據(jù)中心能效嗎?數(shù)據(jù)中心PUE的局限有哪些?
    發(fā)表于 07-15 09:09

    衡量微型計(jì)算機(jī)的主要技術(shù)指標(biāo)是什么

    衡量微型計(jì)算機(jī)的主要技術(shù)指標(biāo)是?特點(diǎn)是?
    發(fā)表于 09-10 08:33

    五大指標(biāo)衡量電池性能

    五大指標(biāo)衡量電池性能
    發(fā)表于 11-10 16:31 ?1.5w次閱讀

    CPU緩存對(duì)性能的影響

      說到CPU,不得不說的就是CPU緩存,目前CPU的緩存已經(jīng)成了衡量CPU性能的一個(gè)必要指標(biāo),
    發(fā)表于 11-13 17:58 ?2421次閱讀

    通過哪些指標(biāo)衡量開關(guān)電源的優(yōu)劣

    通信開關(guān)電源技術(shù)在20世紀(jì)80年代引入我國(guó),如今已廣泛應(yīng)用于通信領(lǐng)域。由于通信開關(guān)電源的性能直接影響著通信系統(tǒng)的可靠性,因此正確判別通信電源的優(yōu)劣也就顯得尤為重要。僅從電源的輸入、輸出特性指標(biāo)
    的頭像 發(fā)表于 09-21 08:00 ?6193次閱讀

    如何衡量IT運(yùn)營(yíng)的成功和指標(biāo)?

    在組織使用云計(jì)算基礎(chǔ)設(shè)施為客戶提供新的服務(wù)獲利的時(shí)候,應(yīng)該如何衡量IT運(yùn)營(yíng)的成功呢? 通過監(jiān)控設(shè)備上的綠色、黃色或紅色指示燈來衡量IT運(yùn)營(yíng)狀態(tài)仍然有用嗎?
    的頭像 發(fā)表于 11-30 11:51 ?2553次閱讀

    物聯(lián)網(wǎng)項(xiàng)目之助旅客了解公交車繁忙程度

    電子發(fā)燒友網(wǎng)站提供《物聯(lián)網(wǎng)項(xiàng)目之助旅客了解公交車繁忙程度.zip》資料免費(fèi)下載
    發(fā)表于 10-21 09:37 ?0次下載
    物聯(lián)網(wǎng)項(xiàng)目之助旅客了解公交車<b class='flag-5'>繁忙</b><b class='flag-5'>程度</b>

    衡量CDN服務(wù)質(zhì)量的指標(biāo)有哪些

    ,應(yīng)用CDN后,DNS返回的不再是IP地址,而是CNAME,指向CDN的全局負(fù)載均衡,下面一起來了解一下衡量CDN服務(wù)質(zhì)量的指標(biāo)有哪些?1、命中率用戶訪問的資源恰
    的頭像 發(fā)表于 07-31 17:40 ?1615次閱讀
    <b class='flag-5'>衡量</b>CDN服務(wù)質(zhì)量的<b class='flag-5'>指標(biāo)</b>有哪些

    Aigtek:衡量基準(zhǔn)電壓源的技術(shù)指標(biāo)有哪些

    基準(zhǔn)電壓源在電子領(lǐng)域中扮演著至關(guān)重要的角色,它為各種應(yīng)用提供了穩(wěn)定、可靠的電壓。為了確保電路的準(zhǔn)確性和可靠性,工程師需要關(guān)注和評(píng)估基準(zhǔn)電壓源的技術(shù)指標(biāo)衡量基準(zhǔn)電壓源的技術(shù)指標(biāo)有很多,下面將詳細(xì)介紹
    的頭像 發(fā)表于 03-14 11:22 ?478次閱讀
    Aigtek:<b class='flag-5'>衡量</b>基準(zhǔn)電壓源的技術(shù)<b class='flag-5'>指標(biāo)</b>有哪些

    CPU主要性能指標(biāo)有哪些

    CPU(中央處理器)的性能指標(biāo)衡量其處理能力和效率的關(guān)鍵參數(shù)。這些指標(biāo)不僅決定了CPU在處理各種任務(wù)時(shí)的速度和效率,還影響了整個(gè)計(jì)算機(jī)系統(tǒng)
    的頭像 發(fā)表于 09-02 11:01 ?1893次閱讀

    衡量功率放大電路的指標(biāo)有哪些

    功率放大電路是電子學(xué)中的一個(gè)重要領(lǐng)域,它負(fù)責(zé)將輸入信號(hào)的功率放大到足以驅(qū)動(dòng)負(fù)載(如揚(yáng)聲器、電機(jī)等)的水平。衡量功率放大電路性能的指標(biāo)有很多,這些指標(biāo)可以幫助我們?cè)u(píng)估放大器的設(shè)計(jì)和性能。 輸出功率
    的頭像 發(fā)表于 09-03 09:30 ?230次閱讀