内核性能分析总结

285 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第27天,点击查看活动详情

若看到相同文章,为本人其他平台

1.unixbench

a.测试介绍 UnixBench源于1995 年,基线系统是“George”,一个工作站:SPARCstation 20‐61,128MB RAM,Solaris2.3,此系统的指数值被设定为10,所以,如果一个系统的最后结果分数为520,意思是指此系统比基线系统运行快52 倍。 UnixBench也支持多CPU系统的测试,默认的行为是测试两次,第一次是一个进程的测试,第二次是N份测试,N等于CPU个数。这样的设计是为了以下目标: 测试系统的单任务性能 测试系统的多任务性能 测试系统并行处理的能力 UnixBench一个基于系统的基准测试工具,不单纯是CPU 内存 或者磁盘测试工具。测试结果不仅仅取决于硬件,也取决于系统、开发库、甚至是编译器。

Dhrystone测试 测试聚焦在字符串处理,没有浮点运算操作。这个测试用于测试链接器编译、代码优化、内存缓存、等待状态、整数数据类型等,硬件和软件设计都会非常大的影响测试结果。

Whetstone 测试 这项测试项目用于测试浮点运算效率和速度。这项测试项目包含若干个科学计算的典型性能模块,包含大量的C语言函数,sin cos sqrt exp和日志以及使用整数和浮点的数学操作。包含数组访问、条件分支和过程调用。

Execl Throughput测试 (execl 吞吐,这里的execl是类unix系统非常重要的函数,非办公软件的excel) 这项测试测试每秒execl函数调用次数。execl是 exec函数家族的一部分,使用新的图形处理代替当前的图形处理。有许多命令和前端的execve()函数命令非常相似。

File Copy测试 这项测试衡量文件数据从一个文件被传输到另外一个,使用大量的缓存。包括文件的读、写、复制测试,测试指标是一定时间内(默认是10秒)被重写、读、复制的字符数量。

Pipe Throughput(管道吞吐)测试 pipe是简单的进程之间的通讯。管道吞吐测试是测试在一秒钟一个进程写512比特到一个管道中并且读回来的次数。管道吞吐测试和实际编程有差距。

Pipe-based Context Switching (基于管道的上下文交互)测试 这项测试衡量两个进程通过管道交换和整数倍的增加吞吐的次数。基于管道的上下文切换和真实程序很类似。测试程序产生一个双向管道通讯的子线程。

Process Creation(进程创建)测试 这项测试衡量一个进程能产生子线程并且立即退出的次数。新进程真的创建进程阻塞和内存占用,所以测试程序直接使用内存带宽。这项测试用于典型的比较大量的操作系统进程创建操作。

Shell Scripts测试 shell脚本测试用于衡量在一分钟内,一个进程可以启动并停止shell脚本的次数,通常会测试1,2, 3, 4, 8 个shell脚本的共同拷贝,shell脚本是一套转化数据文件的脚本。

System Call Overhead (系统调用消耗)测试 这项测试衡量进入和离开系统内核的消耗,例如,系统调用的消耗。程序简单重复的执行getpid调用(返回调用的进程id)。消耗的指标是调用进入和离开内核的执行时间。

b.Run用法 Run [ -q | -v ] [-i ] [-c [-c …]] [test …]

选项说明:

-q 不显示测试过程 -v 显示测试过程 -i 执行次数,最低3次,默认10 -c 每次测试并行n个copies(并行任务) 备注:-c选项可以用来执行多次,如:

Run -c 1 -c 4表示执行两次,第一次单个copies,第二次4个copies的测试任务。

对于多cpu系统的性能测试策略,需要统计单任务,多任务及其并行的性能增强。

以4个cpu的PC为例,需要测试两次,4个CPU就是要并行执行4个copies,

Run -q -c 1 -c 4

测试结果单个并行的任务的得分为171.3,4个并行任务的得分为395.7。对比测试时需要关注这个值。

c.结果显示

2.netperf网络性能

a.安装 wgetc"https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf2.5.0"Onetperf2.5.0.tar.gzwget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz tar xvf netperf-2.5.0.tar.gz cdnetperfnetperf2.5.0/cd netperf-netperf-2.5.0/ ./configure make && make install netperf -h #有输出说明安装成功

b.使用 1.服务器的启动

netserverStartingnetserverwithhostIN(6)ADDRANYport12865andfamilyAFUNSPECnetserver Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC ss -lnt #监听在12865端口

2.测试客户端的启动

$ netperf -H 192.168.1.180 MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.1.180 (192.168.1.180) port 0 AF_INET Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec

87380 16384 16384 10.47 86.40

吞吐量:86.4 * 10^6 bits/sec

换算一下就是 10Mbit/s(86.40/8=10.8*1000000bps=10Mbit/s)