修订历史 版本 V1.0
ZGCC编译性能评测
内容 修订者 时间 2014-12-1 内核态评测 李斌 2014-12-3 用户态评测 李斌 李彦龙 摘要:为对比ZGCC与原生GNU GCC编译性能的差异,本文在Linux OS内核态与用户态分别进行评测。在内核态,使用UnixBench分别评测自带原生内核及用ZGCC编译安装的同版本新内核性能,获得数据;在用户态,挑选典型应用,分别ZGCC与GNU GCC编译后运行,使用系统命令top及shell内建命令time测时间及内存消耗,获得数据;对比内核态及用户态数据,得出评测结论。
一. 内核态评测 1. 评测说明 1.1 工具简介
UnixBench是一个类unix(Unix,BSD,Linux)系统的性能评测工具,开源,被广泛用于测试linux系统主机的性能。如被评测主机为多CPU系统,其默认处理方式是运行两次测试,一次测试系统运行单任务的性能,一次测试系统运行多任务的性能,并分别给出测试结果。UnixBench的测试结果不仅依赖硬件,还取决于操作系统、库及编译器。
1.2 测试项说明 测试项 Double-Precision Whetstone Execl Throughput File copy Pipe Throughput 说明 测试浮点数操作的速度和效率 测试每秒可执行的execl 系统调用的次数 测试从一个文件向另外一个文件传输数据的速率 测试一秒内一个进程可以向一个管道写512字节数据然后再读回的次数,需注意pipe throughtput在实际编程中并不存在 用于测试string handling,因无浮点操作,故深受软件和硬件设计、编译和链接、代码优化、内存cache、等待状态、整数数据类型的影响 测试两个进程(每秒钟)通过一个管道交换一个不断增长的整数的次数,这个测试首先创建一个子进程,再和这个子进程进行双向管道传输 测试每秒一个进程可以创建子进程然后收回子进程的次数,其关注点是新进程PCB创建和内存分配 测试进入和离开操作系统内核的代价,即一次系统调用的代价 测试一秒钟内一个进程可并发地开始一个 shell 脚本的 n 个拷贝的次数,n 一般取值 1,2,4,8 Dhrystone 2 using register variables Pipe-based Context Switching Process Creation System Call Overhead Shell Scripts 2. 评测步骤
下载最新版UnixBench5.1.3并编译,命令如下: root@lyl:/unixbench-5.1.3# ls
Makefile pgms README results Run src testdir tmp USAGE WRITING_TESTS root@lyl:/unixbench-5.1.3# vi Makefile
# GRAPHIC_TESTS = defined //去掉图形化测试 root@lyl:/unixbench-5.1.3# make //编译
2.1 原生内核性能评测
使用如下命令启动UnixBench: root@lyl:/unixbench-5.1.3# ./Run
运行约2小时结束,在results目录下生成2014-12-1-1.html文件,该文件含重要评测结果如下图1及图2:
图1 单任务评测结果
图2 多任务评测结果
由图1及图2知系统运行单任务性能跑分为386.1,系统运行多任务跑分为660.4。
重复以上过程10次,统计评测分数得下表1。
1 2 3 4 5 6 7 8 9 10 次数
单任务 多任务
374.7 384.7 369.8 638.2 627.4 638.5
371.3 656.4 387.7 650.6 373.2 631.8 387.4 623.6 374.3 658.2 381.9 646.6 383.5 671.7 表1 原生内核跑分统计
2.2 编译安装新内核性能评测
使用如下命令安装ZGCC:
root@lyl:/eglibc-deb# dpkg –I * //安装c库 root@lyl:/gcc-32# dpkg –I * //安装gcc工具
如出现库依赖问题导致部分deb包安装失败,使用如下命令解决: root@lyl:/home# apt-get –f instll //-y即fix,系统自动解决库依赖 root@lyl:/home# gcc –E –v -< /dev/null
…… ‘-march=nano’ //说明工具链安装成功 使用ZGCC工具链编译安装同版本新内核,启动UnixBench,如上重复运行10次,统计评测分数得下表2。 次数 单任务 多任务 1 2 3 4 5 6 7 8 9 10 表2 编译安装新内核跑分统计
3. 数据处理
对表1与表2单任务跑分与多任务跑分取和后取均值,得表3: GNU gcc内核 1023.15 ZGCC内核 性能 跑分均值 二. 用户态评测 1. 评测说明
选取典型App,在指定Nano CPU-Ubuntu平台,用Nano gcc与GNU gcc分别编译产生可执行文件,在保证运行环境相同前提下分别运行,测时间及内存相关参数。
1.1 App选定 选择Ubuntu平台下ffmpeg与mplayer两款App,选择原因如下: ①开源
②大小合适(解压后源码70M左右)
③典型(ffmpeg用于音视频格式转换,mpleyer用于视频播放) ④涉及颜色空间转换及视频编解码,用到大量浮点运算
⑤运行时负载接近恒定,便于测量(其它如建模、3D游戏等,运行时负载波动大)
1.2 测试工具选定 第三方软件如gprof、valgrind、oProfile、google-perftools等均用于代码调优,如统计App中各函数调用次数及时间消耗等,不适合在本测试场合使用。 shell内建命令time(非系统命令/user/bin/time)可用于测量可执行文件运行详细时间消耗,系统命令top通过配置后,可用于测量可执行文件运行详细内存消耗。 故测试工具选定shell内建命令time及系统命令top。