作者:安謀科技 (Arm China) 主任軟件工程師 常瑞
Arm Neoverse N 系列和 V 系列處理器并未采用同步多線程 (SMT) 技術(shù)。在 Arm Neoverse 處理器上運(yùn)行時(shí),每個(gè)線程始終能夠訪問處理器的全部資源。這有助于提高在云環(huán)境中執(zhí)行的可預(yù)測性,確保每個(gè)線程都能完全訪問處理器資源,并提供更強(qiáng)大的保護(hù),防止線程之間發(fā)生意外數(shù)據(jù)泄露。
在采用 SMT 技術(shù)的處理器中,每個(gè)物理處理器分為兩個(gè)或兩個(gè)以上的邏輯核心。這些邏輯核心相互共享一些資源。例如,一種常見的設(shè)計(jì)是,邏輯核心共享執(zhí)行單元,分支預(yù)測器、預(yù)取器和緩存等處理器結(jié)構(gòu)。在 SMT 系統(tǒng)中,每個(gè)邏輯核心都有自己的寄存器和程序計(jì)數(shù)器,因此每個(gè)邏輯核心能夠執(zhí)行獨(dú)立的執(zhí)行線程。市面上典型的 SMT 實(shí)現(xiàn)方案包括英特爾的超線程 (Hyper-Threading) 和 AMD 的 SMT。
如果比較 Neoverse 處理器和其他支持 SMT 的處理器的 CPU 使用率,有時(shí)會(huì)出現(xiàn)這樣的情況:在類似的輕負(fù)載水平下,Arm CPU 使用率似乎更高。這可能令使用者認(rèn)為 Arm 平臺的性能可用擴(kuò)展空間較小。在本文中,我們將探討輕負(fù)載場景下,比較采用 SMT 和未采用 SMT 的系統(tǒng)時(shí),為什么“CPU 使用率”指標(biāo)可能具有誤導(dǎo)性。
測量 CPU 使用率
Linux 操作系統(tǒng)根據(jù) CPU 核心在工作還是處于空閑狀態(tài)來計(jì)算 CPU 使用率。SMT 模式下的邏輯核心共享物理核心的執(zhí)行資源。在輕負(fù)載場景下,邏輯核心能夠以物理核心的能力全速運(yùn)行。因此,操作系統(tǒng)可能會(huì)顯示邏輯 CPU 使用率低。但這并不意味著物理核心負(fù)載低,因?yàn)閮蓚€(gè)邏輯核心的負(fù)載都添加到了物理核心中。
這就導(dǎo)致負(fù)載較輕的情況下 SMT 系統(tǒng)與未采用 SMT 的系統(tǒng)相比,似乎有更多的剩余性能空間。但其實(shí)這可能是一個(gè)誤導(dǎo)。例如以下這個(gè)經(jīng)過大幅簡化的場景:
兩個(gè)邏輯核心 LCore0 和 LCore1 在一個(gè)物理處理器上運(yùn)行。
每個(gè)邏輯核心都運(yùn)行一個(gè)處理 Web 請求的工作負(fù)載。每個(gè)請求需使用整個(gè) CPU 0.1 秒進(jìn)行處理,然后返回等待狀態(tài)。
在一秒的時(shí)間范圍內(nèi),LCore0 和 LCore1 分別為三個(gè)請求提供服務(wù)。
LCore0 的執(zhí)行時(shí)間為 0.3 秒,空閑時(shí)間為 0.7 秒,因此計(jì)算得出 CPU 使用率為 30%。
LCore1 也是如此,同樣計(jì)算得出 CPU 使用率為 30%。
二者相加,物理處理器被充分使用的時(shí)間為 0.6 秒,因此實(shí)際使用率為 60%。
圖 1:SMT 下的 CPU 使用率說明
分析上述示例中的邏輯核心使用率時(shí),使用者可能會(huì)推斷 CPU 的能力足以繼續(xù)處理 14 個(gè) Web 請求。然而,實(shí)際 CPU 只能夠再處理四個(gè)請求。
需注意的是,與實(shí)際工作負(fù)載相比,上述示例經(jīng)過簡化,實(shí)際工作負(fù)載的物理處理器使用率可能更低,具體取決于支持在邏輯核心之間共享物理處理器資源的動(dòng)態(tài)條件。在嘗試預(yù)估系統(tǒng)上可能有多少可用性能空間時(shí),這種不可預(yù)測性會(huì)是一項(xiàng)挑戰(zhàn)。
在本文中,我們將設(shè)計(jì)一個(gè)微型基準(zhǔn)測試,以及使用實(shí)際工作負(fù)載在 SMT 系統(tǒng)上演示此行為。
微型基準(zhǔn)測試
這個(gè)微型基準(zhǔn)測試包含了大量讀數(shù)據(jù)和一些簡單數(shù)學(xué)運(yùn)算。它會(huì)產(chǎn)生較大的 IPC,從而充分利用物理處理器的可用執(zhí)行單元。為了模擬不同的負(fù)載水平,我們在計(jì)算循環(huán)中添加了不同的休眠時(shí)間。一級負(fù)載最輕,七級負(fù)載最重。在支持 SMT 的系統(tǒng)上,我們先在一個(gè)邏輯核心上運(yùn)行程序,然后在同一物理處理器的兩個(gè)邏輯核心上同時(shí)運(yùn)行程序。對從輕到重的所有負(fù)載水平都做同樣的測試。對于非 SMT 系統(tǒng),我們使用 Neoverse N2 進(jìn)行測試。對于雙核測試情形,我們使用連接到同一 Arm CMN 交叉點(diǎn)的兩個(gè)核。需注意的是,我們在編譯時(shí)禁用了向量化,因?yàn)閷?shí)際工作負(fù)載中的大多數(shù)代碼不像該微型基準(zhǔn)測試那樣容易實(shí)現(xiàn)向量化。
運(yùn)行測試
我們在運(yùn)行頻率為 3.5GHz 的主流 SMT 系統(tǒng)和未采用 SMT 的基于 Neoverse N2 的平臺 (2.7GHz) 上運(yùn)行微型基準(zhǔn)測試。
SMT
在我們的系統(tǒng)中,邏輯核心 0 和邏輯核心 32 共享同一個(gè)物理核心。因此,我們將在核心 0 和核心 32 上運(yùn)行。
此處列舉了在兩個(gè)核心上同時(shí)運(yùn)行微型基準(zhǔn)測試的輸出示例。1000000000 是我們使用微型基準(zhǔn)測試進(jìn)行的計(jì)算輪數(shù)。7 是我們希望達(dá)到的負(fù)載級別。我們將使用 perf 工具來收集 time elapsed(即總運(yùn)行時(shí)間)和 insn per cycle(即 IPC)。CPU 使用率通過 top 命令獲取。
收集到的結(jié)果如下所示:
從數(shù)據(jù)中可以看出,從三級和四級負(fù)載開始,LCore 0 和 LCore 1 的綜合 CPU 使用率逐漸超過 100%,相應(yīng)地,兩個(gè)核心的 IPC 大幅下降。
非 SMT
在 Neoverse N2 平臺上,每個(gè)核心都是獨(dú)立的物理核心。我們將在核心 0 和核心 1 上運(yùn)行。
結(jié)果表明,在 Neoverse 系統(tǒng)上,兩個(gè)核心的 IPC 與一個(gè)核心的 IPC 沒有太大的差別。而且,從輕負(fù)載到重負(fù)載,IPC 沒有下降。這一點(diǎn)與 SMT 系統(tǒng)截然不同。這意味著無論 CPU 使用率如何,CPU 的能力始終保持一致。
對結(jié)果的進(jìn)一步分析
兩個(gè)硬件線程影響
要想找到一個(gè)可靠的直接指標(biāo)來判斷物理核心的繁忙程度,這并非易事,但我們可以從其他角度進(jìn)行判斷。在這里,我們選擇 IPC 進(jìn)行分析。我們使用兩個(gè)核心運(yùn)行得到的數(shù)據(jù)除以一個(gè)核心運(yùn)行得到的數(shù)據(jù)。這可以揭示 SMT 系統(tǒng)的特點(diǎn)。
在下圖中,我們看到在輕負(fù)載的情況下,對于 SMT 系統(tǒng),兩個(gè)核心和一個(gè)核心的 IPC 幾乎相同。這是因?yàn)槲锢砗诵牟⒉环泵?,邏輯核心的所有操作幾乎都是以物理核心的最快速度運(yùn)行,因此 IPC 非常高。CPU 使用率看起來很低。但物理核心實(shí)際運(yùn)行的負(fù)載是一個(gè)邏輯核的兩倍。因此,物理 CPU 的使用率應(yīng)該增加一倍。隨著負(fù)載的增加,與一個(gè)核心相比,兩個(gè)核心的 IPC 大幅降低。這是因?yàn)樗鼈冃枰獱幱煤凸蚕韴?zhí)行單元中的資源。此時(shí)物理核心已經(jīng)滿載,無法像輕負(fù)載情況下那樣及時(shí)處理來自兩個(gè)核心的所有請求。最后,IPC 降至幾乎一半。這證明兩個(gè)邏輯核心正在共享物理核心。
相比之下,Neoverse 系統(tǒng)始終保持在 1,因?yàn)閮蓚€(gè)核心是獨(dú)立的,無論負(fù)載水平如何,它們始終以相同的速度運(yùn)行。
圖 2:微型基準(zhǔn)測試 IPC 比較
性能與 CPU 使用率的對比
在這里,我們將性能定義為“1000000000/總運(yùn)行時(shí)間”。1000000000 是我們使用微型基準(zhǔn)工具進(jìn)行的測試輪數(shù)。由于我們使用的 Neoverse N2 平臺的頻率 (2.7Ghz) 遠(yuǎn)低于 SMT 系統(tǒng) (3.5Ghz),因此我們將 Neoverse N2 平臺的性能數(shù)據(jù)按比例調(diào)整為相同的 3.5Ghz。我們針對兩個(gè)核心的情況進(jìn)行對比,因?yàn)樵谏a(chǎn)環(huán)境中,同時(shí)使用物理核心的兩個(gè)邏輯核心是最通常的用例。
下圖展示了頻率調(diào)整后的性能與 CPU 使用率??梢钥吹剑S著 CPU 使用率的增加,SMT 系統(tǒng)的性能輸出變得平緩。與此同時(shí),Arm 的性能輸出保持理想的線性增長趨勢,并最終在高 CPU 使用率區(qū)域性能超過了 SMT 系統(tǒng)。因此,如果僅使用低 CPU 使用率區(qū)域的性能輸出來預(yù)測 SMT 系統(tǒng)在高 CPU 使用率場景下的性能,可能會(huì)得到錯(cuò)誤的結(jié)果。
圖 3:微型基準(zhǔn)測試調(diào)整后的性能
在這里,我們又創(chuàng)建了“性能達(dá)成率”指標(biāo),即“性能/CPU 使用率”。性能數(shù)據(jù)來自上表。處理工作負(fù)載時(shí),理想的系統(tǒng)應(yīng)保持恒定的比率,即特定的 CPU 使用率應(yīng)提供特定的性能輸出。
從該圖中可以看出,隨著 CPU 使用率的增加,SMT 系統(tǒng)的性能達(dá)成率大幅下降。而在 Arm 平臺上,性能達(dá)成率表現(xiàn)得更好且恒定。
圖 4:微型基準(zhǔn)測試調(diào)整后的性能達(dá)成率
實(shí)際工作負(fù)載
下面試著用大家熟悉的工作負(fù)載來描述這個(gè)問題。在這里,我使用了 Flink 以及用于對 Flink 進(jìn)行基準(zhǔn)測試的 Nexmark。
測試說明
針對 SMT 系統(tǒng)和未采用 SMT 的基于 Neoverse N2 的系統(tǒng),我們創(chuàng)建了兩個(gè)具有類似硬件資源的集群。軟件版本和配置也相同。
Nexmark 有多個(gè)測試用例,這里我們選擇 Q0 測試進(jìn)行比較。其他的測試也會(huì)有類似輸出。
測試結(jié)果
Nexmark Q0 測試結(jié)果如下所示。對于 SMT 系統(tǒng)和 Arm 平臺,在相同負(fù)載水平 (TPS) 下,從 top 工具中得到的 CPU 使用率不同。
可以看到,當(dāng)工作負(fù)載水平較低時(shí),Arm CPU 使用率高于 SMT 系統(tǒng),但當(dāng) CPU 使用率達(dá)到大約 50% 后,SMT 系統(tǒng)的 CPU 使用率增長得更快。最后,我們看到在高 CPU 負(fù)載下,SMT 系統(tǒng) CPU 使用率遠(yuǎn)高于 Arm 平臺。當(dāng) CPU 得到充分使用時(shí),Arm 平臺可輸出更高的 TPS。
圖 5:不同 TPS 下的 Flink CPU 使用率
我們也可以從另一個(gè)角度來看:在相同的 CPU 使用率水平下,系統(tǒng)能夠生成的 TPS 數(shù)量的趨勢。起先,Arm 平臺表現(xiàn)得并不突出,但當(dāng) CPU 使用率達(dá)到大約 50% 后,Arm 的性能大幅提高。
圖 6:不同 CPU 使用率下的 Flink TPS
在這里,我們也創(chuàng)建了“性能達(dá)成率”指標(biāo),即 TPS/CPU_Usage。處理工作負(fù)載時(shí),理想的系統(tǒng)應(yīng)保持恒定的比率。從該圖中可以看出,隨著 CPU 使用率的增加,SMT 系統(tǒng)的性能達(dá)成率大幅下降。而在 Arm 平臺上,性能達(dá)成率表現(xiàn)得更好。
圖 7:Flink 性能達(dá)成率
因此,該 Flink 測試用例展示的結(jié)果與我們在微型基準(zhǔn)測試中看到的結(jié)果相似。在輕負(fù)載場景下,Arm 平臺可能會(huì)顯示較高的 CPU 使用率。然而,超過某個(gè)點(diǎn)后,SMT 系統(tǒng)的 CPU 使用率會(huì)迅速超過 Arm,因此在高 CPU 使用率的情況下,SMT 系統(tǒng)的性能輸出下降。
結(jié)論
在輕負(fù)載場景下,支持 SMT 的系統(tǒng)的 CPU 使用率可能會(huì)被低估。在預(yù)估還有多少額外性能空間可供我們在機(jī)器上部署工作負(fù)載時(shí),CPU 使用率指標(biāo)可能具有誤導(dǎo)性。因此,在部署工作負(fù)載時(shí),我們應(yīng)在 CPU 被 100% 使用的情況下測試性能輸出水平,然后根據(jù)得到的值留出性能緩沖區(qū),而不是簡單的根據(jù) CPU 使用率預(yù)留性能空間。
-
處理器
+關(guān)注
關(guān)注
68文章
19893瀏覽量
235171 -
ARM
+關(guān)注
關(guān)注
134文章
9352瀏覽量
377501 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217050 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7151瀏覽量
125576 -
smt
+關(guān)注
關(guān)注
43文章
3044瀏覽量
72016
原文標(biāo)題:一文解謎 SMT 系統(tǒng)上 CPU 使用率的盲點(diǎn)
文章出處:【微信號:Arm社區(qū),微信公眾號:Arm社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
labview如何獲取Win7的CPU使用率、MEM使用率和硬盤使用率?
如何表示UCOS-III的CPU使用率?
Outport對CPU使用率的影響是什么?
高CPU使用率問題求解
Linux 下 CPU 使用率與機(jī)器負(fù)載的關(guān)系與區(qū)別
cpu使用率多少算正常_cpu使用率100怎么辦
為什么明明沒開多少軟件,計(jì)算的CPU使用率卻莫名的高

CPU使用率達(dá)到100%會(huì)怎樣
CPU使用率是什么意思
Lappy電池警報(bào)和CPU使用率開源

使用Bolt監(jiān)控CPU使用率

什么是CPU使用率?如何測量CPU使用率?
如何在Linux系統(tǒng)中檢查CPU使用率

評論