关于如何用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 INDEX
Dhrystone 2 using register variables 116700.0 30971628.9 2654.0
Double-Precision Whetstone 55.0 3928.1 714.2
Execl Throughput 43.0 3117.6 725.0
File Copy 1024 bufsize 2000 maxblocks 3960.0 645027.2 1628.9
File Copy 256 bufsize 500 maxblocks 1655.0 229505.4 1386.7
File Copy 4096 bufsize 8000 maxblocks 5800.0 1288742.6 2222.0
Pipe Throughput 12440.0 1635960.9 1315.1
Pipe-based Context Switching 4000.0 337333.8 843.3
Process Creation 126.0 8238.2 653.8
Shell Scripts (1 concurrent) 42.4 5817.0 1371.9
Shell Scripts (8 concurrent) 6.0 2183.9 3639.9
System Call Overhead 15000.0 2465754.7 1643.8
========
System Benchmarks Index Score 1362.9 ------------------------------------------------------------------------
Benchmark Run: 一 6月 25 2018 20:54:19 - 21:22:54
4 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 INDEX
Dhrystone 2 using register variables 116700.0 114984418.6 9853.0
Double-Precision Whetstone 55.0 16614.2 3020.8
Execl Throughput 43.0 13645.3 3173.3
File Copy 1024 bufsize 2000 maxblocks 3960.0 751698.4 1898.2
File Copy 256 bufsize 500 maxblocks 1655.0 230211.7 1391.0
File Copy 4096 bufsize 8000 maxblocks 5800.0 1964420.6 3386.9
Pipe Throughput 12440.0 5999380.0 4822.7
Pipe-based Context Switching 4000.0 1095000.2 2737.5
Process Creation 126.0 34454.9 2734.5
Shell Scripts (1 concurrent) 42.4 18218.1 4296.7
Shell Scripts (8 concurrent) 6.0 2493.1 4155.1
System 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.0
Count score: 243989.0
Count 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

算分过程如下:

  1. 根据COUNT0从小到大,去掉 1/3 的最差结果;
  2. 如果timebase,耗时都是大于0, $product += log($COUNT0) - log(耗时/ $timebase) 否则就不需要考虑耗时这块: $product += log($COUNT0) 
  3. 单项性能分:$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.0
Count score: 18416.0
Count score: 18545.0 >>>> Sum of 4 copies
>>>> score: 18477.4244713467
>>>> time: 60.009621375
>>>> iterations: 2

算分过程如下:

  1. 分数:如18545,就是PASS3个项的加总: 4631+4632+4637+4645
  2. 耗时:平均值,即:(60.013816+60.012614+60.005633+60.006082)/4=60.00953625
  3. timebase: 还是那个COUNT1
    上述3步即是把一个并发结果合成一个结果,然后的积分方式跟单进程的方式一样

总分

那文章开头多进程的图例分数举例:

  1. 算出来的每项score有个加权分数,要除以10(作为单项比拼,我觉得除不除10无所谓,估计是为了跟总分接近)
  2. 总分计算:=exp(average(每项score分*10)),结果恰恰好就是我们要的结果。

综上对UnixBench的分数计算算是全面介绍了一边,附件有excel证明计算过程。

附件下载: 算分过程.xls...[米拉齐].1543830848.zip

阅读原文​​​​​​​

更多技术干货 请关注阿里云云栖社区微信号 :yunqiinsight

UnixBench算分介绍的更多相关文章

  1. Lucene TF-IDF 相关性算分公式(转)

    Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...

  2. Solr相似度算法一:Lucene TF-IDF 相关性算分公式

    Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为向量空间模型,名字听起来很 ...

  3. Lucene TF-IDF 相关性算分公式

    转自: http://lutaf.com/210.htm Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文档频率,TF- ...

  4. ElasticStack学习(九):深入ElasticSearch搜索之词项、全文本、结构化搜索及相关性算分

    一.基于词项与全文的搜索 1.词项 Term(词项)是表达语意的最小单位,搜索和利用统计语言模型进行自然语言处理都需要处理Term. Term的使用说明: 1)Term Level Query:Ter ...

  5. 影响ES相关度算分的因素

    相关性算分 指文档与查询语句间的相关度,通过倒排索引可以获取与查询语句相匹配的文档列表   如何将最符合用户查询需求的文档放到前列呢? 本质问题是一个排序的问题,排序的依据是相关性算分,确定倒排索引哪 ...

  6. Elasticsearch从入门到放弃:浅谈算分

    今天来聊一个 Elasticsearch 的另一个关键概念--相关性算分.在查询 API 的结果中,我们经常会看到 _score 这个字段,它就是用来表示相关性算分的字段,而相关性就是描述一个文档和查 ...

  7. 常用搜索引擎的算分,你get了嘛?

    搜索引擎发展至今,已公布了多种算法.作为SEOER的你,还不懂,就out啦.懂了不会用,也是然并卵的一种行为.了解算法知识并不懂得如何把算法实践于SEO工作的你,还是处于学生思维,是时候该升级了.且听 ...

  8. 学习笔记day1-计算机介绍

    1.1 “计算机”基本介绍 一.为什么需要计算机 对于现在的我们来说,每天要处理的信息量是巨大的,所以如果还是人工的来对这些数据进行处理,那么效率是很低的.此时计算机的出现就可以帮助我么来提高处理数据 ...

  9. VPS性能综合测试(6):UnixBench跑分工具测试

    测试时间可能会比较长,请耐心等待.最后UnixBench会详细列出各个测试项目的得分情况,以及VPS性能的综合跑分结果 UinxBench 的使用 使用方法如下: Run [ -q | -v ] [- ...

随机推荐

  1. Spring Boot和Spring Cloud学习资源推荐

    Spring Boot和Spring Cloud学习资源推荐   比较好的学习资源,分享一下. 1.Spring Boot官方文档:http://projects.spring.io/spring-b ...

  2. demo_service

    <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit ...

  3. boost regex expression

    Boost.Regex provides three different functions to search for regular expressions 1. regex_match #inc ...

  4. I2C自编设备驱动设计

    一.自编设备驱动模型 at24.c: static int __init at24_init(void) { io_limit = rounddown_pow_of_two(io_limit); re ...

  5. 树莓派GPIO口驱动编写

    一.wiringpi写法 #include <wiringPi.h> #include <stdlib.h> int main(int argc,char *argv[]) { ...

  6. Codeforces 789e The Great Mixing (bitset dp 数学)

    Sasha and Kolya decided to get drunk with Coke, again. This time they have k types of Coke. i-th typ ...

  7. 【LeetCode 41】缺失的第一个正数

    题目链接 [题解] 先明确一点假设给的数字有n个. 那么最后的答案最情况下就是n+1 首先我们先判断一下所给的数组里面有没有1 如果没有直接返回1 否则. 把数组中所有的范围超过n或者小于1的数字全都 ...

  8. web开发小知识

    session共享机制:f5刷新是再次提交之前的数据请求 地址栏回车属于不同的请求 不同浏览器获取不到之前数据 同一浏览器可以获取同步数据 session注销:session.invalidate() ...

  9. camunda

    Camunda BPM 用途:   流程管理.流程解决方案 支持语言: java ,nodejs 入门指导:1.https://docs.camunda.org/get-started/quick-s ...

  10. 基于MFC的Media Player播放器的制作(1---播放器界面的布局)

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 通过上面的一些预备知识,我们现在就可以自己来制作基于MFC的播放器了,接下来我们讲的是使用MFC制作我们播放器 的界面. 首先,我们我们打 ...