關于如何用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)),結果恰恰好就是我們要的結果。
電子發燒友App





























評論