天天看點

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      

簡單參數介紹

  • StudyFrom:​​https://yuntue.com/post/29354.html​​

簡單參數介紹文字版

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.都需要關注帶寬以及延時.