精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

原因分析:CPU拓撲差異導致Unixbench分數(shù)異常

Linux閱碼場 ? 來源:未知 ? 作者:李倩 ? 2018-07-06 09:35 ? 次閱讀

本文通過實驗論證:Unixbench的Pipe-based Context Switching用例受操作系統(tǒng)調(diào)度算法的影響波動很大,甚至出現(xiàn)了虛擬機跑分超過物理機的情況。在云計算時代,當前的Unixbench已不能真實地反映被測系統(tǒng)的真實性能,需要針對多核服務器和云計算環(huán)境進行完善。

簡單的說,視操作系統(tǒng)多核負載均衡策略的差異,該用例可能表現(xiàn)出兩種截然不同的效果:

1?在惰性的調(diào)度策略環(huán)境下,測試得分較高,但是會導致系統(tǒng)中任務調(diào)度延遲,最終可能引起業(yè)務性能抖動。例如,在視頻播放、音頻處理的業(yè)務環(huán)境中,引起視頻卡頓、音頻視頻不同步等問題。

2?在積極的調(diào)度策略環(huán)境下,測試得分偏低,但是系統(tǒng)中任務運行實時性更高,業(yè)務運行更流暢。

后文將詳細說明Pipe-basedContext Switching用例的設計原理,測試其在不同系統(tǒng)中的運行結果,并提出測試用例改進建議。

1測試背景

近期,團隊在進行服務器選型的時候,需要對兩款服務器進行性能評估,其中一款服務器采用64核Xeon CPU,另一臺則采用16核Atom CPU。詳細配置信息如下:

指標名稱 Xeon服務器 Atom服務器
Architecture x86_64 x86_64
CPUs 64 16
Threads per core 2 1
Core(s) per socket 16 16
Socket(s) 2 1
NUMA node(s) 1 1
Model name Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz Intel(R) Atom(TM) CPU C3958 @ 2.00GHz
CPU MHz 2499.902 1999.613
BogoMIPS 4993.49 3999.22
L1d cache 32K 24K
L1i cache 32K 32K
L2 cache 256K 2048K
L3 cache 40960K None

根據(jù)硬件廠商的評測,Xeon服務器的綜合性能是Atom服務器的3倍。

我們采用了久負盛名的Unixbench性能測試套件,為我們最終的選擇提供參考。

Xeon的性能碾壓Atom是毋庸置疑的,畢竟Atom 更專注于功耗而不是性能,Atom服務器甚至沒有3級緩存,并且StoreBuffer、Message Queue的深度更低,流水線級數(shù)更少。

出于業(yè)務需求,在整個測試過程中我們更關注單核的性能。為了排除軟件的影響,兩臺服務器均安裝Centos 7操作系統(tǒng)。

測試命令很簡單,在控制臺中執(zhí)行如下命令:

./Run -c 1 -v

執(zhí)行時間比較久,我們可以到一邊去喝點燒酒。一杯燒酒下肚,神清氣爽:-)可以看看結果是否符合咱們的預期:

指標名稱 Xeon服務器 Atom服務器
Dhrystone 2 using register variables 2610.1 1283.7
Double-Precision Whetstone 651.2 489.4
Execl Throughput 447.9 361.5
File Copy 1024 bufsize 2000 maxblocks 2304.5 955.0
File Copy 256 bufsize 500 maxblocks 1494.5 711.2
File Copy 4096 bufsize 8000 maxblocks 4475.9 1396.2
Pipe Throughput 1310.9 614.4
Pipe-based Context Switching 428.4 339.8
Process Creation 461.7 159.6
Shell Scripts (1 concurrent) 1438.8 326.7
Shell Scripts (8 concurrent) 5354.5 789.8
System Call Overhead 2237.0 930.1
System Benchmarks Index Score 1390.9 588.4

總分整體符合預期:Xeon服務器單核性能是Atom服務器的2.36倍(1390/588.4)

但是,這里出現(xiàn)了一個異常,細心的讀者應該已經(jīng)發(fā)現(xiàn):Pipe-based Context Switching測試用例的結果比較反常!從上表可以看出,無論是總分還是單項分數(shù),Xeon服務器均遠遠超過Atom服務器。其中也包括Pipe Throughput這項用例。然而“Pipe-based Context Switching”這項指標顯得有點與眾不同:在這項指標中,Xeon服務器的優(yōu)勢并不明顯,僅領先25%左右。

為了排除測試誤差,我們反復進行了幾次測試,均發(fā)現(xiàn)同樣的規(guī)律?!癙ipe-based Context Switching”項的分數(shù)差異并不明顯,沒有體現(xiàn)出Xeon服務器的性能優(yōu)勢。

這一問題引起了我們的興趣,Unixbench這樣的權威測試軟件的結果居然和廠商宣稱的出入這么大。為了找出原因,我們使用其他測試環(huán)境,進行了一系列的對比測試。首先,我們找了更多物理機進行對比分析。

1.1物理機對比測試

為此,我們使用另一組服務器進行對比測試,其型號分別為:HP ProLiantDL360p Gen8?DELL PowerEdge R720xd。配置如下:

指標名稱 HP ProLiant DL360p Gen8 DELL PowerEdge R720xd
Architecture x86_64 x86_64
CPUs 24 32
Threads per core 2 2
Core(s) per socket 6 16
Socket(s) 2 2
NUMA node(s) 1 1
Model name Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz
CPU MHz 1200.000 2300.000
BogoMIPS 4594.05 4615.83
L1d cache 32K 32K
L1i cache 32K 32K
L2 cache 256K 256K
L3 cache 15360K 20480K

分別在兩臺服務器的控制臺中輸入如下命令,單獨對“Pipe-based Context Switching”用例進行測試:

./Run index2 -c1

得到該測試項的分數(shù)為:

指標名稱 ProLiant DL360p Gen8 PowerEdge R720xd
Pipe-based Context Switching 381.4 432.1

測試結果與上面相似,硬件參數(shù)明顯占優(yōu)的DELLL跑分僅領先HP不到20%:-(

1.2物理機VS虛擬機

測試似乎陷入了迷途,然而我們一定需要將加西亞的信送到目的地,并且堅信“柳暗花明又一村”的那一刻終究會到來。

為此,我們使用三組云虛擬機來進行測試。這三組虛擬機配置如下:

指標名稱 虛擬機A 虛擬機B 虛擬機C
Architecture x86_64 x86_64 x86_64
CPUs 4 4 4
Threads per core 2 1 1
Core(s) per socket 2 4 4
Socket(s) 1 1 1
NUMA node(s) 1 1 1
Model name Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz Intel(R) Xeon(R) CPU E5-26xx v4 Intel(R) Xeon(R) CPU E5-2676 v3 @2.40 GHz
CPU MHz 2494.222 2394.454 2400.102
BogoMIPS 4988.44 4788.90 4800.07
L1d cache 32K 32K 32k
L1i cache 32K 32K 32k
L2 cache 256K 4096K 256K
L3 cache 40960K none 30720K

這三款虛擬機與此前的物理機參數(shù)相差不大,如果不出意外的話,分數(shù)應當介于300~400之間。

然而測試結果出人意料,以至于筆者的鏡片摔了一地:

指標名稱 虛擬機A 虛擬機B 虛擬機C
Pipe-based Context Switching 109.4 589.1 105.1

特別令人吃驚的是:第二組虛擬機的測試分數(shù),竟然是物理主機的1.5倍,并且是第一組虛擬機和第三組虛擬機的5.4倍。

1.3單核和多核對比測試

為此,我們認真分析不同系統(tǒng)中的CPU占用率。發(fā)現(xiàn)一個特點:在Pipe-based Context Switching用例運行期間,在得分高的環(huán)境中,兩個context線程基本上運行在同一CPU上。而在得分低的環(huán)境中中,兩個context線程則更多的運行在不同的CPU上。這說明:測試結果差異可能與Guest OS中的調(diào)度算法及CPU負載均衡策略有關。

我們不得不啟用了排除法,先看單核和多核之間的差異。

為了驗證猜想是否正確,我們臨時修改了Guest OS中內(nèi)核調(diào)度算法。修改原理是:在喚醒線程時,不管其他CPU核是否空閑,優(yōu)先將被喚醒任務調(diào)度到當前CPU中運行。這樣的調(diào)度算法,其缺點是:被喚醒任務將不能立即運行,必須等待當前線程釋放CPU后才能獲得CPU,這將導致被喚醒線程的實時性較弱。

經(jīng)過測試,在打上了Linux內(nèi)核調(diào)度補丁的系統(tǒng)中,Pipe-based Context Switching在虛擬機和物理機上,得分大大提升。實際測試的結果如下:

指標名稱 虛擬機A
Pipe-based Context Switching 530.2

很顯然,我們不能將上述補丁直接應用到生產(chǎn)環(huán)境中,因為該補丁會影響任務運行的實時性。因此我們將Linux內(nèi)核調(diào)度補丁回退,并修改“Pipe-based ContextSwitching”測試用例的代碼,強制將context線程綁定到CPU 0中運行,這樣可以避免Guest OS中的調(diào)度算法及CPU負載均衡算法的影響。測試結果如下:

指標名稱 虛擬機A 虛擬機B 虛擬機C
Pipe-based Context Switching 761.0 953.7 675.3

我們再次修改“Pipe-based Context Switching”測試用例的代碼,強制將context線程分別綁定到CPU 0和CPU 1中運行,這樣也可以避免Guest OS中的調(diào)度算法及CPU負載均衡算法的影響。測試結果如下:

指標名稱 虛擬機A 虛擬機B 虛擬機C
Pipe-based Context Switching 109.1 133.6 105.1

可以看到,應用了新的“Pipe-basedContext Switching”補丁之后,所有測試結果都恢復了正常,離真相越來越近了。

2原因分析: CPU拓撲差異導致Unixbench分數(shù)異常

通過前面針對“Pipe-based Context Switching”單實例用例的測試,帶給我們?nèi)缦乱蓡枺?/p>

為什么在該用例中,虛擬機B得分接近600,遠高于虛擬機A、虛擬機C,甚至高于虛擬機A所在的物理機?

為了分析清楚該問題,我們分析了Pipe-based Context Switching用例, 這個用例的邏輯是:測試用例創(chuàng)建一對線程A/B,并創(chuàng)建一對管道A/B。線程A寫管道,線程B讀A管道;并且線程B寫B(tài)管道,線程A程讀B管道。兩個線程均同步執(zhí)行。

經(jīng)過仔細分析,虛擬機A和虛擬機B在該用例上的性能差異的根本原因是:在虛擬機環(huán)境下,底層Host OS向Guest OS透傳的cpu拓撲不同,導致虛擬機系統(tǒng)中的調(diào)度行為不一致, 最終引起很大的性能差異。其中虛擬機A是按照Host主機的實際情況,將真實的CPU拓撲傳遞給Guest OS。而虛擬機B的主機則沒有將真實的物理主機CPU拓撲傳遞給Guest OS。這會導致虛擬機內(nèi)所見到的CPU拓撲和共享內(nèi)存布局有所不同。

在真實的物理服務器上,每個物理核會有各自的FLC和MLC,同一個Core上的CPU共享LLC。這樣的CPU拓撲允許同一Core上的CPU之間更積極的進行線程遷移,而不損失緩存熱度,并且能夠提升線程運行的實時性。這個特性,更利于視頻播放這類實時應用場景。

下圖是虛擬機A和虛擬機B中看到的CPU視圖:

拓撲結構的差異地方在LLC的共享方式,虛擬機A使用的拓撲結構與物理機一致,同一個Core內(nèi)CPU共享LLC。而虛擬機B的配置是同一個Core內(nèi)CPU不共享LLC。不共享LLC的場景下,Linux將每個CPU在LLC層次的調(diào)度域設置為空。這樣,虛擬機B的Guest OS會認為同一物理CPU內(nèi)的兩個超線程是兩個獨立的CPU,處于不同的域之間(這與實際的物理機配置不一致),因此其負載均衡策略會更保守一些。喚醒一個進程時,內(nèi)核會為其選擇一個運行的目標CPU,linux的調(diào)度策略會考慮親和性(提高cache命中率)和負載均衡。在Linux 3.10這個版本下,內(nèi)核會優(yōu)先考慮親和性,親和性的目標是優(yōu)先選取同一個調(diào)度域內(nèi)的CPU。虛擬機A共享LLC,所有的CPU都在同一個調(diào)度域內(nèi),內(nèi)核為其選擇的是同一調(diào)度域內(nèi)的空閑CPU。而虛擬機B因為LLC層次的調(diào)度域為空,在進入親和性選擇時,無法找到同一個調(diào)度域內(nèi)的其它空閑CPU,這樣就直接返回了正在進行喚醒操作的當前CPU。

最終,在虛擬機B中,除了偶爾進行的CPU域間負載均衡以外,兩個測試線程基本上會一直在同一個CPU上運行。而虛擬機A的兩個進程會并發(fā)的運行在兩個不同的CPU上。

這一特征下的運行時間軸如下:

虛擬機B場景引入的開銷是喚醒和等待運行開銷,虛擬機A場景引入的開銷是喚醒和切換運行開銷。

在正常的工作負載下面,進程運行的時間會遠大于進程切換的開銷,而Pipe-based Context Switching用例模擬的是一個極限場景,一個線程在喚醒對端到進入睡眠之間只執(zhí)行很簡單的操作,實際等待運行的開銷遠小于切換運行的開銷。

此外,在虛擬化場景下,兩種方式喚醒操作中也存在差異,在虛擬機A這個場景下,喚醒的開銷也遠大于虛擬機B場景中的喚醒開銷。最終出現(xiàn)虛擬機B上該用例的得分遠高于虛擬機A、虛擬機C,甚至高于物理機上的得分。

為了進一步驗證我們的分析是否正確。我們在HOST OS中,分別向虛擬機A的GuestOS和虛擬機B的Guest OS按照不同方式傳遞CPU拓撲。測試發(fā)現(xiàn):在同樣的CPU拓撲結構下,二者的測試分數(shù)是一致的。換句話說,導致該項測試分數(shù)差異的原因,在于不同的HOST OS向Guest OS傳遞的CPU拓撲存在差異,進而導致Guest OS中任務調(diào)度行為的差異。

3 結論:Unixbench需要針對多核服務器和云環(huán)境進行優(yōu)化

unixbench的Pipe-based Context Switching用例受操作系統(tǒng)調(diào)度算法的影響比較大。視操作系統(tǒng)多核負載均衡策略的差異,可能表現(xiàn)出兩種截然不同的效果:

1?在多核負載均衡策略不積極的系統(tǒng)中,測試線程更多的運行在同一個CPU中,線程之間的切換開銷更低。因此測試得分更高,但是會導致系統(tǒng)中任務調(diào)度延遲。在實時性要求比較高的系統(tǒng)中,這會引起業(yè)務抖動。例如,在視頻播放、音頻處理的業(yè)務環(huán)境中,這可能引起視頻卡頓、音頻視頻不同步等問題。

2?在多核負載均衡策略更積極的系統(tǒng)中,測試線程更多的運行在不同的CPU中,線程之間的切換開銷更高。因此測試分值更低,但是系統(tǒng)中任務調(diào)度延遲更低,業(yè)務的性能不容易產(chǎn)生波動。

換句話說:當前的Unixbench已不能真實地反映被測系統(tǒng)的真實性能,需要針對多核服務器和云計算環(huán)境進行完善。

4 修改建議

我們建議調(diào)整unixbench測試用例,將測試用例的線程綁定到Guest OS的CPU上。這樣就可以避免受到Guest OS調(diào)度策略和CPU負載均衡策略的影響。具體來說,有兩種方法:

1?將context1和context2兩個線程綁定在同一個CPU核上面。這樣可以反應出被測試系統(tǒng)在單核上的執(zhí)行性能。

2?將context1和context2兩個線程分別綁定到不同CPU核上面。這樣可以反應出被測試系統(tǒng)在單核的執(zhí)行性能,以及多核之間的核間通信性能。

(完)

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

    關注

    68

    文章

    10829

    瀏覽量

    211198
  • 云計算
    +關注

    關注

    39

    文章

    7744

    瀏覽量

    137212
  • 服務器
    +關注

    關注

    12

    文章

    9029

    瀏覽量

    85208

原文標題:燕青: Unixbench 測試套件缺陷深度分析

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    CYT2B7 SFlash被異常修改的原因?

    0x17001C00 ~ 0x17006FFF這段區(qū)域,芯片處理Normal模式下,是否可被異常篡改呢? 請各位專家?guī)兔?b class='flag-5'>分析下,SFlash被異常修改的可能原因
    發(fā)表于 05-28 08:11

    【NanoPi NEO試用體驗】利用unixbench進行性能評估

    ,是比較通用的測試VPS性能的工具.UnixBench會執(zhí)行一系列的測試,包括2D和3D圖形系統(tǒng)的性能衡量,測試的結果不僅僅只是CPU,內(nèi)存,或者磁盤為基準,還取決于硬件,操作系統(tǒng)版本,編譯器.測試系統(tǒng)
    發(fā)表于 11-10 16:05

    產(chǎn)生Fault異常原因是什么? 如何分析Fault異常?

    產(chǎn)生Fault異常原因是什么?如何分析Fault異常
    發(fā)表于 11-30 07:59

    導致STM32進入HardFault異常原因

    1、導致異常原因有很多,例如:直接使用未分配空間的指針、棧溢出等異常非法操作便會使程序進入“HardFault”異常狀態(tài)。接下來在MDK工
    發(fā)表于 01-07 06:52

    壓縮機異常響聲原因分析及處理

    本文通過對壓縮機異常響聲的原因分析理處理過程的描述.說明了因果分析法用于解決實際生產(chǎn)問題的科學性瑟實效性。
    發(fā)表于 05-23 14:12 ?11次下載

    CPU PG異常檢修

    CPU PG異常檢修 一、CPU PG信號示例圖              
    發(fā)表于 04-26 16:29 ?2365次閱讀
    <b class='flag-5'>CPU</b> PG<b class='flag-5'>異常</b>檢修

    導致致命異常錯誤和無效頁錯誤的原因是什么?

    導致致命異常錯誤和無效頁錯誤的原因是什么? 如果Microsoft Word或Excel“崩潰”,意味著在程序執(zhí)行過程中出現(xiàn)了嚴重的錯誤。操作系統(tǒng)常常會發(fā)現(xiàn)存在一個嚴重問題,并
    發(fā)表于 08-05 10:33 ?1003次閱讀

    導致變壓器溫度異常原因

    導致變壓器溫度異常原因:    1、內(nèi)部故障引起溫度異常    變壓器內(nèi)部故障如匝間短路或?qū)娱g短路,線圈對圍屏放電,內(nèi)部引
    發(fā)表于 12-05 14:49 ?1423次閱讀

    導致MCU出現(xiàn)功能嚴重異常的幾個原因分析

    我們在從事MCU應用開發(fā)過程中,難免會碰到MCU芯片異常的問題。比如異常復位,表現(xiàn)為復位腳有電平跳變或者干脆處于復位電平;在做代碼調(diào)試跟蹤時,發(fā)現(xiàn)代碼往往進不到用戶main()程序;或者時不時感覺芯片死掉了,功能完全不可控等。 針對類似嚴重
    發(fā)表于 11-29 16:10 ?1.2w次閱讀

    CPU 拓撲中的SMP架構

    CPU 拓撲用來表示 CPU 在硬件層面的組合方式,本文主要講解 CPU 拓撲中的 SMP(Symmetric Multi-Processo
    的頭像 發(fā)表于 08-29 11:02 ?4375次閱讀

    分享排查Linux系統(tǒng)CPU占用的一個Shell腳本

    眾所周知,Linux系統(tǒng)CPU占用100%這個異常現(xiàn)象還是經(jīng)常遇到的,因此分析導致異常原因是解
    的頭像 發(fā)表于 09-04 09:17 ?1791次閱讀
    分享排查Linux系統(tǒng)<b class='flag-5'>CPU</b>占用的一個Shell腳本

    拓撲視圖與實際拓撲結構間的差異

    簡介 拓撲視圖是硬件和網(wǎng)絡編輯器的三個工作區(qū)中的一個。在此處可執(zhí)行以下任務: 顯示以太網(wǎng)拓撲 組態(tài)以太網(wǎng)拓撲 標識出指定拓撲結構與實際拓撲
    的頭像 發(fā)表于 09-10 09:56 ?1072次閱讀
    <b class='flag-5'>拓撲</b>視圖與實際<b class='flag-5'>拓撲</b>結構間的<b class='flag-5'>差異</b>

    Java oom異常原因分析

    據(jù),而棧內(nèi)存用于存儲方法調(diào)用和局部變量。 當程序需要使用更多內(nèi)存時,會向操作系統(tǒng)請求更多的內(nèi)存空間。如果操作系統(tǒng)無法分配足夠的內(nèi)存空間,就會導致OOM異常的發(fā)生。 導致OOM異常
    的頭像 發(fā)表于 12-05 13:43 ?749次閱讀

    cpu溫度太高怎么解決?cpu溫度高的原因

    cpu溫度太高怎么解決?cpu溫度高的原因? CPU (中央處理器) 溫度過高可能會導致系統(tǒng)崩潰、性能下降甚至損壞硬件,因此是一個需要嚴肅對
    的頭像 發(fā)表于 12-09 16:15 ?3177次閱讀

    如何解決C語言中的“訪問權限沖突”異常?C語言引發(fā)異常原因分析

    如何解決C語言中的“訪問權限沖突”異常?C語言引發(fā)異常原因分析? 在C語言中,訪問權限沖突異常通常是由于嘗試訪問未授權的變量、函數(shù)或其他數(shù)據(jù)
    的頭像 發(fā)表于 01-12 16:03 ?5193次閱讀