UnixBench的簡單測試與驗證

UnixBench的簡單測試與驗證


目標

飛騰2000+ (物理機和虛擬機)
Intel Golden 6170  物理機 
Intel Golden 5218  虛擬機 Gold 5218 CPU @ 2.30GHz
至強十年前的CPU  E5-2620    物理機
E5-2630 v3 @ 2.40GHz       虛擬機
驗證一下不同機器的最簡單的性能數據.

過程

第一步 下載UnixBench
https://codeload.github.com/kdlucas/byte-unixbench/tar.gz/refs/tags/v5.1.3
下載完後 該改名, 放到不同的機器裏面

tar -zxvf unixbench-5.1.3.tar.gz
cd byte-unixbench-5.1.3/UnixBench/
sed -i "s/GRAPHIC_TESTS = defined/#GRAPHIC_TESTS = defined/g" ./Makefile
make

執行命令爲:
./Run

簡單參數介紹

image


簡單參數介紹文字版

Unixbench做了哪些性能測試
Dhrystone 2 using register variables
這裏有比較詳細的dhrystone介紹,這個主要是測整數性能,對應的浮點數測試是:Double-Precision Whetstone。
那繞開裏面一坨計算,說下輸出:默認就是在10秒內,那一坨計算能計算次數,算出分數後,參考前面篇UnixBench算分介紹,算出Index分數。

Double-Precision Whetstone
既然有整數運算的CPU性能,那麼浮點數運算性能也希望有,於是就有了:whets.c 

Execl Throughput
除了前面介紹的那兩個比較複雜,UnixBench其他的運算都比較簡單,Execl它的實際就是遞歸調用,它主要利用的是execl函數。
本身execl.c編譯出來後的執行文件是execl的二進制文件,execl函數執行的時候記錄參數:開始時間,執行次數,耗時(一般都是10秒)。
當本次總執行時間耗時超過10秒時,輸出執行次數,然後根據算分規則算分,這個思想還是很巧妙的。

File Copy
這個主要是測試的write和read兩個函數,測試30秒。實現很簡單,先寫入一個文件2秒(循環寫入),再讀2秒,
然後從剛剛寫入的文件讀取數據,寫入到另一個文件,循環寫入,在30秒的讀寫次數。 
不同的參數測試測的是不同塊大小,不同塊數的性能,如果測試磁盤建議用FIO測試。

Pipe Throughput
打開一個管道,往管道寫入512個bytes,再讀出來,測試10秒,總共讀寫次數

Pipe-based Context Switching
打開兩個管道,開啓兩個進程,其中一個進程往管道1寫,往管道2讀,另一個進程往管道2寫,往管道2讀,
一個進程完成一次讀寫,計數+1。其中一個很有意思的事情:如果這兩個進程在同一個CPU和不同的CPU有完全不同的性能,
在同一個CPU下性能會好很多。這裏有篇很細緻的分析,值得大家評閱:Unixbench 測試套件缺陷深度分析

Process Creation
就是不停調用fork函數,創建進程,並立馬退出,成功一次計數+1。

Shell Scripts
通過fork函數,創建進程,不停地執行一個腳本, 執行成功一次+1. 
所謂Shell Scripts (1 concurrent) 一個併發是指傳遞給腳本:pgms/multi.sh 參數是1,
同樣Shell Scripts (8 concurrent) ,傳遞給腳本的參數是8,同時8個子任務併發執行。

System Call Overhead
本意是想計算進入離開操作系統的開銷,進入離開一次計數+1,
在10秒內的執行次數. 實際執行的效果是fork子進程,waitpid函數後退出,計數+1

部分機器的配置與結果

  • Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz * 18 *4 1T內存
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   45321616.5   3883.6
Double-Precision Whetstone                       55.0       3994.4    726.3
Execl Throughput                                 43.0        990.5    230.3
File Copy 1024 bufsize 2000 maxblocks          3960.0     653004.6   1649.0
File Copy 256 bufsize 500 maxblocks            1655.0     170341.0   1029.3
File Copy 4096 bufsize 8000 maxblocks          5800.0    1991790.6   3434.1
Pipe Throughput                               12440.0     812102.4    652.8
Pipe-based Context Switching                   4000.0     129430.3    323.6
Process Creation                                126.0       2688.8    213.4
Shell Scripts (1 concurrent)                     42.4       2276.7    536.9
Shell Scripts (8 concurrent)                      6.0       1225.2   2042.0
System Call Overhead                          15000.0     656542.4    437.7
                                                                   ========
System Benchmarks Index Score                                         811.8

------------------------------------------------------------------------
Benchmark Run: 日 9月 25 2022 17:19:07 - 17:19:07
144 CPUs in system; running 144 parallel copies of tests

  • Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz62 32G內存
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   26845867.5   2300.4
Double-Precision Whetstone                       55.0       3161.6    574.8
Execl Throughput                                 43.0       1477.6    343.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     253582.3    640.4
File Copy 256 bufsize 500 maxblocks            1655.0      67713.4    409.1
File Copy 4096 bufsize 8000 maxblocks          5800.0     731087.8   1260.5
Pipe Throughput                               12440.0     322218.7    259.0
Pipe-based Context Switching                   4000.0      95001.7    237.5
Process Creation                                126.0       5645.1    448.0
Shell Scripts (1 concurrent)                     42.4       3719.6    877.3
Shell Scripts (8 concurrent)                      6.0       1646.3   2743.9
System Call Overhead                          15000.0     211672.9    141.1
                                                                   ========
System Benchmarks Index Score                                         578.5

------------------------------------------------------------------------
Benchmark Run: 日 9月 25 2022 17:25:56 - 17:25:56
24 CPUs in system; running 24 parallel copies of tests

  • FT-2000+/64 2.0Ghz * 64core * 1 128G內存
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   22368348.8   1916.7
Double-Precision Whetstone                       55.0       3631.2    660.2
Execl Throughput                                 43.0       2535.4    589.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     403977.6   1020.1
File Copy 256 bufsize 500 maxblocks            1655.0     123146.9    744.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    1059038.5   1825.9
Pipe Throughput                               12440.0     731953.9    588.4
Pipe-based Context Switching                   4000.0     128939.1    322.3
Process Creation                                126.0       5281.5    419.2
Shell Scripts (1 concurrent)                     42.4       3729.0    879.5
Shell Scripts (8 concurrent)                      6.0       1687.8   2813.0
System Call Overhead                          15000.0     512275.3    341.5
                                                                   ========
System Benchmarks Index Score                                         800.7

------------------------------------------------------------------------
Benchmark Run: 日 9月 25 2022 17:27:32 - 17:27:32
64 CPUs in system; running 64 parallel copies of tests

  • 虛擬機 Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz *8vCPU 16G內存
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  211612119.4  18133.0
Double-Precision Whetstone                       55.0      35513.7   6457.0
Execl Throughput                                 43.0       7928.8   1843.9
File Copy 1024 bufsize 2000 maxblocks          3960.0    1008598.8   2547.0
File Copy 256 bufsize 500 maxblocks            1655.0     280047.4   1692.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    3083540.8   5316.4
Pipe Throughput                               12440.0    6476970.5   5206.6
Pipe-based Context Switching                   4000.0    1522650.6   3806.6
Process Creation                                126.0      29679.7   2355.5
Shell Scripts (1 concurrent)                     42.4      21083.6   4972.6
Shell Scripts (8 concurrent)                      6.0       3255.8   5426.4
System Call Overhead                          15000.0    4443744.9   2962.5
                                                                   ========
System Benchmarks Index Score                                        4032.0

只進行一個copy的性能爲: Run -c 1
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   34026972.9   2915.8
Double-Precision Whetstone                       55.0       4072.9    740.5
Execl Throughput                                 43.0       2797.2    650.5
File Copy 1024 bufsize 2000 maxblocks          3960.0     747208.9   1886.9
File Copy 256 bufsize 500 maxblocks            1655.0     208899.4   1262.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    1819202.2   3136.6
Pipe Throughput                               12440.0    1148215.4    923.0
Pipe-based Context Switching                   4000.0     132960.3    332.4
Process Creation                                126.0       7724.1    613.0
Shell Scripts (1 concurrent)                     42.4       6659.2   1570.6
Shell Scripts (8 concurrent)                      6.0       2005.4   3342.3
System Call Overhead                          15000.0    2023562.5   1349.0
                                                                   ========
System Benchmarks Index Score                                        1245.8

  • KVM虛擬機 FT-2000+/64 *12 32G內存
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0  230828135.7  19779.6
Double-Precision Whetstone                       55.0      43293.8   7871.6
Execl Throughput                                 43.0      12516.6   2910.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     337653.1    852.7
File Copy 256 bufsize 500 maxblocks            1655.0      88730.2    536.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    1151598.8   1985.5
Pipe Throughput                               12440.0    6932899.9   5573.1
Pipe-based Context Switching                   4000.0     839878.7   2099.7
Process Creation                                126.0      14315.2   1136.1
Shell Scripts (1 concurrent)                     42.4      14834.8   3498.8
Shell Scripts (8 concurrent)                      6.0       2267.5   3779.1
System Call Overhead                          15000.0    1072451.9    715.0
                                                                   ========
System Benchmarks Index Score                                        2470.5

只進行一個copy的性能爲:
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   22350448.1   1915.2
Double-Precision Whetstone                       55.0       3610.6    656.5
Execl Throughput                                 43.0       2140.6    497.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     361175.9    912.1
File Copy 256 bufsize 500 maxblocks            1655.0     107413.0    649.0
File Copy 4096 bufsize 8000 maxblocks          5800.0     998342.8   1721.3
Pipe Throughput                               12440.0     689464.3    554.2
Pipe-based Context Switching                   4000.0      45415.8    113.5
Process Creation                                126.0       3255.5    258.4
Shell Scripts (1 concurrent)                     42.4       3168.9    747.4
Shell Scripts (8 concurrent)                      6.0       1299.4   2165.6
System Call Overhead                          15000.0     472585.1    315.1
                                                                   ========
System Benchmarks Index Score                                         646.1

部分結論1

這次測試感覺非常反常識.. 我的服務器甚至不如部分雲主機的結果好..
而且很奇怪的是 物理機器的測試結果都不如虛擬機..所以感覺很詭異. 
猜測物理機的性能結果有損耗, 可能只能用來評估虛擬機的性能.
但是感覺自己的部分項目經驗. 能夠得出部分淺顯的結論2

部分結論2

  • 只是自己最近學到的和簡單的總結. 不是很準確.
CPU的速度主頻僅是其中一個變量. 
不同指令集, 不同架構, 不同廠商的CPU完全不具備橫向對比的基礎. 

引申出來比較重要的概念是IPC, instruction per cycle. 
但是這個概念意義也不是很大, 通過整數和浮點計算出來的結果其實與現實生產差距巨大
但是可以這樣理解. 跑分高了性能不一定好, 但是跑分低了性能一定很差. 

SPEC2006和SPEC2017可以對CPU進行簡單的度量, 但是結果具有一定的欺騙性
GCC和ICC不同編譯器以及不通的編譯優化會導致結果天差地別. 

CPU的指令集對性能有影響,但是不是最大的變量.VIA的x86的CPU就不如安培的ARM架構的CPU
架構和製程非常重要. 架構會決定流水線深度和多發射的條數,以及uos的數量和編譯器前後端的優化程度. 
製程會決定CPU的體質, 能不能支撐大量的計算和生產的壓力. 
可以理解 架構就是技術 支撐就是體力. 想打好球 兩者缺一不可. 並且是相輔相成的. 

流水線深度和多發射的數量對性能影響很大. 
並且指令預取.以及分支判斷的算法對性能影響也很大. 分支判斷對了. L1I就會更好發揮做用. 

然後緩存對CPU的影響更體現在生產上. 科學計算可能可以不太考慮緩存. 但是生產服務器必須要考慮.
不管是L1 L2 L3 還是TLB 還是寄存器. 他的性能和容量決定了很大一部分CPU的性能也很考驗CPU廠商的技術功底  

在滿足上面的情況下. CPU對中斷和上下文切換的效率也會影響性能表現. 
尤其是多線程情況時的處理. 

CPU終歸是要將數據從內存中取出,計算完再寫入到內存的. 所以內存帶寬和內存時延 就是除了CPU本身之外最大的性能參數
CPU的帶寬很好理解. 一般就是比如DDR4-2933 然後乘以系統內的激活通道數再乘以(根據配置和插入的內存可能不乘) 2 進行計算. 
現在來說帶寬一把還可以餵飽CPU,但是時延是非常重要的. 他決定了計算的響應時間. 時延一方面跟內存體質有關係.
另一方面也跟CPU的總線結構, 以及Core之間的互連結構有關係. 

其他像是PCI-E以及ACHI接口對性能的影響主要體現在數據庫和文件系統落盤上面. 
應用環境一般不會考慮這個. 但是數據庫會考慮的更多, 
其實不管是網絡還是存儲. 都可以理解爲是IO.都需要關注帶寬以及延時. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章