UnixBench算分介紹
關於如何用UnixBench,介紹文章很多,這裡就不展開了。這裡重點描述下它是如何算分的。
執行引數
碰到很多客戶,裝好後,直接./Run,就把結果跑出來了,然後還只取最後一個分值,比誰高誰低。
下面列一下4C8G的結果:
------------------------------------------------------------------------Benchmark Run: 一 6月 25 2018 20:25:47 - 20:54:19 4 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 30971628.9 lps (10.0 s, 7 samples) Double-Precision Whetstone 3928.1 MWIPS (12.4 s, 7 samples) Execl Throughput 3117.6 lps (30.0 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 645027.2 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 229505.4 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1288742.6 KBps (30.0 s, 2 samples) Pipe Throughput 1635960.9 lps (10.0 s, 7 samples) Pipe-based Context Switching 337333.8 lps (10.0 s, 7 samples) Process Creation 8238.2 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 5817.0 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 2183.9 lpm (60.0 s, 2 samples) System Call Overhead 2465754.7 lps (10.0 s, 7 samples)System Benchmarks Index Values BASELINE RESULT INDEXDhrystone 2 using register variables 116700.0 30971628.9 2654.0Double-Precision Whetstone 55.0 3928.1 714.2Execl Throughput 43.0 3117.6 725.0File Copy 1024 bufsize 2000 maxblocks 3960.0 645027.2 1628.9File Copy 256 bufsize 500 maxblocks 1655.0 229505.4 1386.7File Copy 4096 bufsize 8000 maxblocks 5800.0 1288742.6 2222.0Pipe Throughput 12440.0 1635960.9 1315.1Pipe-based Context Switching 4000.0 337333.8 843.3Process Creation 126.0 8238.2 653.8Shell Scripts (1 concurrent) 42.4 5817.0 1371.9Shell Scripts (8 concurrent) 6.0 2183.9 3639.9System Call Overhead 15000.0 2465754.7 1643.8 ========System Benchmarks Index Score 1362.9------------------------------------------------------------------------Benchmark Run: 一 6月 25 2018 20:54:19 - 21:22:544 CPUs in system; running 4 parallel copies of tests Dhrystone 2 using register variables 114984418.6 lps (10.0 s, 7 samples) Double-Precision Whetstone 16614.2 MWIPS (11.6 s, 7 samples) Execl Throughput 13645.3 lps (30.0 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 751698.4 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 230211.7 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1964420.6 KBps (30.0 s, 2 samples) Pipe Throughput 5999380.0 lps (10.0 s, 7 samples) Pipe-based Context Switching 1095000.2 lps (10.0 s, 7 samples) Process Creation 34454.9 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 18218.1 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 2493.1 lpm (60.0 s, 2 samples) System Call Overhead 5643267.3 lps (10.0 s, 7 samples)System Benchmarks Index Values BASELINE RESULT INDEXDhrystone 2 using register variables 116700.0 114984418.6 9853.0Double-Precision Whetstone 55.0 16614.2 3020.8Execl Throughput 43.0 13645.3 3173.3File Copy 1024 bufsize 2000 maxblocks 3960.0 751698.4 1898.2File Copy 256 bufsize 500 maxblocks 1655.0 230211.7 1391.0File Copy 4096 bufsize 8000 maxblocks 5800.0 1964420.6 3386.9Pipe Throughput 12440.0 5999380.0 4822.7Pipe-based Context Switching 4000.0 1095000.2 2737.5Process Creation 126.0 34454.9 2734.5Shell Scripts (1 concurrent) 42.4 18218.1 4296.7Shell Scripts (8 concurrent) 6.0 2493.1 4155.1System Call Overhead 15000.0 5643267.3 3762.2 ========System Benchmarks Index Score 3357.0
很多人就拿了3357那個分數去比了,但是上面那個單程式結果1362.9也有意義,但凡接觸了這麼多案例,沒人關心過。多程式結果就是根據系統CPU核數,同時起多個程式的結果;單程式就是隻起一個程式的結果,對於系統效能來說,兩個結果都是有意義的。
話說回來,
./Run
到底執行了什麼?預設執行的是Index模組,它包含下面幾個小程式:
"dhry2reg", "whetstone-double", "execl", "fstime", "fsbuffer", "fsdisk", "pipe", "context1", "spawn", "shell1", "shell8","syscall"
對應的就是上面的結果的各個結果對應的case了。
翻看了下它的原始碼,它的執行引數如下:./Run 模組 -i 迭代次數 -c 程式併發數 -q/-v (輸出方式。
-
模組:有時候你只想測某一個小程式的結果,那你可以修改自己去新增一個模組,修改測試內容,這對於除錯是非常方便的,也可以直接指定某個執行程式。
-
迭代次數:關於迭代次數,不能想當然的就理解成這就是要執行的次數了,預設框架分為兩種迭代模式,一種是短迭代次數,預設 3次,一種是 長迭代次數,預設10 次。那輸入的迭代次數就是預設的長迭代次數,短迭代次數=(迭代次數+1)/3,如果結果小於就是1. 程式配置好了,該選擇哪個迭代次數。
-
程式併發數:如果你想程式併發數不是系統CPU數,那就可以透過這個調整;
-
輸出方式:是靜默還是詳細輸出方式;
算分
每個小程式在執行的時候都需要指定迭代模式和執行時間以及併發情況,所有的程式一次執行的結果都是統一模式。
單程式算分:
下面是單程式的一個舉例:
Process Creation -- 1 copy ==> "/opt/unixbench/UnixBench/pgms/spawn" 30 2>&1 >> "/opt/unixbench/UnixBench/results/VM_0_13_centos-2018-06-25-05.log"#### Pass 1# COUNT0: 247371 #分數# COUNT1: 1 # timebase 程式寫死# COUNT2: lps # 測試項名稱# elapsed: 30.003119 # 耗時# pid: 16803 # 程式ID# status: 0 # 是否成功退出#### Pass 2# COUNT0: 242919# COUNT1: 1# COUNT2: lps# elapsed: 30.002898# pid: 5035# status: 0#### Pass 3# COUNT0: 243989# COUNT1: 1# COUNT2: lps# elapsed: 30.002732# pid: 21228# status: 0*Dump score: 242919.0Count score: 243989.0Count score: 247371.0>>>> Results of 1 copy>>>> score: 8188.34084738901>>>> time: 30.0029255>>>> iterations: 2
其中COUNT0,COUNT1,COUNT2是這麼算出來的,每個程式的結果如:
COUNT|x|y|x
經過解析,變成如下:
COUNT0 = x COUNT1 = y COUNT2 = z
算分過程如下:
-
根據COUNT0從小到大,去掉 1/3 的最差結果;
-
如果timebase,耗時都是大於0,
$product += log($COUNT0) - log(耗時/ $timebase)
否則就不需要考慮耗時這塊:$product += log($COUNT0)
-
單項效能分:
$score = exp($product/2)
,2是統計的迭代次數,經過計算恰好是這個分數,與系統輸出一致。
它總的演算法思想:就是先透過log降維,把不同次數不一樣的結果儘可能拉平,平均然後在階乘,後面多個結果也是這個思想,先降維,再平均,再階乘。
多程式算分
那如果併發執行多個呢?舉例如下:
Shell Scripts (1 concurrent) -- 4 copies ==> "/opt/unixbench/UnixBench/pgms/looper" 60 "/opt/unixbench/UnixBench/pgms/multi.sh" 1 2>&1 >> "/opt/unixbench/UnixBench/results/VM_0_13_centos-2018-06-25-05.log"#### Pass 1# COUNT0: 4614# COUNT1: 60# COUNT2: lpm# elapsed: 60.005639# pid: 20858# status: 0# COUNT0: 4596# COUNT1: 60# COUNT2: lpm# elapsed: 60.009496# pid: 20859# status: 0# COUNT0: 4592# COUNT1: 60# COUNT2: lpm# elapsed: 60.011761# pid: 20862# status: 0# COUNT0: 4614# COUNT1: 60# COUNT2: lpm# elapsed: 60.011930# pid: 20864# status: 0#### Pass 2# COUNT0: 4547# COUNT1: 60# COUNT2: lpm# elapsed: 60.005597# pid: 10791# status: 0# COUNT0: 4590# COUNT1: 60# COUNT2: lpm# elapsed: 60.013270# pid: 10793# status: 0# COUNT0: 4578# COUNT1: 60# COUNT2: lpm# elapsed: 60.006054# pid: 10794# status: 0# COUNT0: 4561# COUNT1: 60# COUNT2: lpm# elapsed: 60.014214# pid: 10797# status: 0#### Pass 3# COUNT0: 4631# COUNT1: 60# COUNT2: lpm# elapsed: 60.013816# pid: 31734# status: 0# COUNT0: 4632# COUNT1: 60# COUNT2: lpm# elapsed: 60.012614# pid: 31735# status: 0# COUNT0: 4637# COUNT1: 60# COUNT2: lpm# elapsed: 60.005633# pid: 31737# status: 0# COUNT0: 4645# COUNT1: 60# COUNT2: lpm# elapsed: 60.006082# pid: 31740# status: 0*Dump score: 18276.0Count score: 18416.0Count score: 18545.0>>>> Sum of 4 copies>>>> score: 18477.4244713467>>>> time: 60.009621375>>>> iterations: 2
算分過程如下:
-
分數:如18545,就是PASS3個項的加總: 4631+4632+4637+4645
-
耗時:平均值,即:(60.013816+60.012614+60.005633+60.006082)/4=60.00953625
-
timebase: 還是那個COUNT1
上述3步即是把一個併發結果合成一個結果,然後的積分方式跟單程式的方式一樣
總分
那文章開頭多程式的圖例分數舉例:
-
算出來的每項score有個加權分數,要除以10(作為單項比拼,我覺得除不除10無所謂,估計是為了跟總分接近)
-
總分計算:
=exp(average(每項score分*10))
,結果恰恰好就是我們要的結果。
綜上對UnixBench的分數計算算是全面介紹了一邊,附件有excel證明計算過程。
附件下載:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31551794/viewspace-2284389/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- http代理使用分類介紹HTTP
- java分詞工具hanlp介紹Java分詞HanLP
- 【譯】2分鐘介紹Rx
- 分庫分表—3.詳細介紹二
- HanLP分類模組的分詞器介紹HanLP分詞
- 雲端計算教程之容器介紹
- 計算機記憶體管理介紹計算機記憶體
- SAE自動駕駛分級介紹自動駕駛
- 交換機功能及分類介紹
- 隱私計算相關技術介紹
- 【計算機視覺】視訊格式介紹計算機視覺
- 中文分詞原理及常用Python中文分詞庫介紹中文分詞Python
- DDoS攻擊最常見的分類介紹!
- 數字政府隱私計算落地案例介紹
- 靜態路由介紹(雲端計算隨筆)路由
- 雲端計算日常運用場景介紹!
- 電腦網路卡有什麼型別?計算機網路卡主要分類及功能介紹型別計算機網路
- Hanlp在java中文分詞中的使用介紹HanLPJava中文分詞
- 機器碼和位元組碼分別介紹機器碼
- 樸素貝葉斯分類流程圖介紹流程圖
- 簡單介紹雲端計算的容器技術
- 突破 0 和 1 的思維:量子計算介紹
- 計算機原碼, 反碼,補碼的介紹計算機
- 介紹
- 雲端計算開發學習教程,簡單介紹雲端計算
- 第1天-行業介紹和計算機基礎行業計算機
- 計算機(電腦)硬體組成基本介紹1計算機
- 計算機(電腦)硬體組成基本介紹3計算機
- 計算機(電腦)硬體組成基本介紹4計算機
- TDengine3.0 流式計算引擎語法規則介紹
- 介紹一種二維線性插值計算方法
- 主流雲端計算廠商產品服務介紹
- DM 分庫分表 DDL “樂觀協調” 模式介紹丨TiDB 工具分享模式TiDB
- DM 分庫分表 DDL “悲觀協調” 模式介紹丨TiDB 工具分享模式TiDB
- 社群驅動增長 | Dev.Together 分論壇介紹dev
- 簡單介紹iOS超級簽名系統分發配置iOS
- 差分進化演算法介紹及matlab實現演算法Matlab
- Linux常見的開發命令有哪些?分類介紹!Linux