使用llcbench测试缓存性能

陆续写些关于新书《自己动手写CPU》的博客,本篇主要是讲解如何使用llcbench测试缓存性能。

LLCbench (底层表征基准测试 Low-Level Characterization Benchmarks) 是一个基准测试工具,集成了 MPBench, CacheBench, 和 BLASBench 测试方法。这里只使用其中的CacheBench测试缓存性能。

在http://icl.cs.utk.edu/projects/llcbench/llcbench.tar.gz下载LLCbench。

然后解压缩,以/root/gem5/llcbench为例。打开终端,进入该路径,输入make,会出现如下提示

Please use one of the following targets:

        alpha
        alpha-mpich
        linux-lam
        linux-mpich
        o2000
        pow2
        pow3
        ppc
        solaris
        solaris-mpich
        t3e
        reconfig (to bring this menu up again)

在这里选择linux-lam,所以输入

make linux-lam

显示如下结果:

ln -s conf/sys.linux-lam sys.def

再次输入make,显示如下:

Please use one of the following targets:

For all three : compile, run, script, graph, clean, clobber, reconfig
For BlasBench : blas-bench, blas-run, blas-script, blas-graph
For CacheBench: cache-bench, cache-run, cache-script, cache-graph
For MPBench   : mp-bench, mp-run, mp-script, mp-graph

clean: removes object files and leaves result files
clobber: removes binary files and leaves result files
distclean: removes everything!

因为是三个工具的和集,所以输入make compile会编译全部三个软件,笔者在make compile的时候发现编译BlasBench会报错,提示找不到g77,CentOS7没有g77安装包,于是决定只编译CacheBench,所以输入如下命令:

make cache-bench

然后输入:

make bench-run

这样就开始测试了,大约需要等待40分钟左右,在这个过程中,最好不要操作计算机,同时在开始这个测试之前,最好关掉一些不用的程序,笔者第一次测试的时候,就因为内存不足,而失败,提示cachebench: cachebench.c:712: do_memory_copy: Assertion `y = (void *)malloc(memsize)‘ failed,后来关掉了耗内存的firefox,测试顺利结束。

测试过程显示如下:

cd cachebench; make run
make[1]: 进入目录“/root/gem5/llcbench/cachebench”
ln -s ../results results
Measuring Read...
./cachebench  -m 29 -e 1 -x 2 -d 5 -r > results/localhost.localdomain-x86_64_cache_read.dat
Measuring Write...
./cachebench  -m 29 -e 1 -x 2 -d 5 -w > results/localhost.localdomain-x86_64_cache_write.dat
Measuring RMW...
./cachebench  -m 29 -e 1 -x 2 -d 5 -b > results/localhost.localdomain-x86_64_cache_rmw.dat
Measuring Tuned Read...
./cachebench  -m 29 -e 1 -x 2 -d 5 -tr > results/localhost.localdomain-x86_64_cache_handread.dat
Measuring Tuned Write...
./cachebench  -m 29 -e 1 -x 2 -d 5 -tw > results/localhost.localdomain-x86_64_cache_handwrite.dat
Measuring Tuned RMW...
./cachebench  -m 29 -e 1 -x 2 -d 5 -tb > results/localhost.localdomain-x86_64_cache_handrmw.dat
Measuring memset()...
./cachebench  -m 29 -e 1 -x 2 -d 5 -s > results/localhost.localdomain-x86_64_cache_memset.dat
Measuring memcpy()...
./cachebench  -m 29 -e 1 -x 2 -d 5 -p > results/localhost.localdomain-x86_64_cache_memcpy.dat

可见,实际是运行了八次,分别是read、write、rmw、handread、handwrite、handrmw、memset、memcpy。

然后输入命令:

 make cache-script

然后输入命令:

 make cache-graph

如果出现“ gnuplot: 未找到命令” 的错误,那是因为没有安装gnuplot的缘故,使用yum install gnuplot安装即可,然后再次运行上面的make caceh-graph命令,即可得到图形结果。

cd cachebench; make graph
make[1]: 进入目录“/root/gem5/llcbench/cachebench”
cd results; gnuplot < localhost.localdomain-x86_64_cache.gp > localhost.localdomain-x86_64_cache.ps

Memory heirarchy graph is in results/localhost.localdomain-x86_64_cache.ps

make[1]: 离开目录“/root/gem5/llcbench/cachebench”

笔者的结果如下:

可以发现在32KB的时候有一个明显的拐点,使用 lscpu 命令查看系统的缓存情况,显示如下:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
座:                 1
NUMA 节点:         1
厂商 ID:           GenuineIntel
CPU 系列:          6
型号:              23
型号名称:        Pentium(R) Dual-Core  CPU      E5800  @ 3.20GHz
步进:              10
CPU MHz:             3203.000
BogoMIPS:            6384.21
虚拟化:           VT-x
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           2048K
NUMA 节点0 CPU:    0,1

一级缓存正是32KB。在1级cache失效的时候,二级cache发挥了作用,所以图中在32KB到512KB、1MB之间还有一个稍微平滑的阶段,过了这个阶段之后,优惠出现了一个拐点。

有一一个疑问:我的处理器的二级缓存是2MB,是指令和数据共用,按理说应该在2MB左右出现拐点才对,为何实验结果在512KB-1MB之间就出现了拐点?

时间: 2024-10-31 18:42:08

使用llcbench测试缓存性能的相关文章

使用SQLIO测试磁盘性能

SQLIO 是一个用于测试存储系统能力的命令行工具,用以获取存储系统相关的性能指标,以判断系统的 I/O 处理能力. 在微软的网站可以下载 SQLIO 的安装包,安装后目录中会出现如下文件: EULA.rtf – End-user license agreement that covers sqlio usage. param.txt – Configuration options that identify the target drives, test file names, and spe

使用iozone测试磁盘性能

IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random write, random mix, backwards read, record rewirte, strided read, fwrite, frewrite, fread, freread, mmap, async I/0 等不同的模式下的硬盘的性能.测试的时候请注意,设置的测试文件的大小一定要

使用iozone测试磁盘性能(测试文件读写)

IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random write, random mix, backwards read, record rewirte, strided read, fwrite, frewrite, fread, freread, mmap, async I/0 等不同的模式下的硬盘的性能.测试的时候请注意,设置的测试文件的大小一定要

SQLIOSim 模拟SQLServer的行为来测试IO性能

SQLIOSim 功能: 模拟SQLServer的行为来测试IO性能. SQLIOSim的版本: (1) SQL Server 2005的SQLIOSim是需要上网下载的套件. (2) 从SQL Server 2008开始,SQLIOSim会包含在SQL Sever安装内.对于SQL Server 2008 R2,该应用程序所在目录为C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn. (3) SQLIO

为何测试时性能吊炸天而上线却惨不忍睹?

转自:冬瓜哥 为何测试时性能吊炸天而上线却惨不忍睹? 无数次,让各个存储厂商的售前.售后.架构师头痛的一件事情就是:明明前期测试的时候性能强悍到报表,SPC1之流登顶,结果用户实际业务部署之后发现,性能惨不忍睹.厂商出动顶级架构师优化,结果还是不行,无力回天,甚至直接退货. 到底是什么原因导致这类事件?可以明确的讲,90%以上的原因就是因为两个字:时延.纵观性能测试,哪个不是"提高队列深度"."增加线程数量".具体体现为IO测试软件里的诸如"Outstan

压力测试tps性能下降问题解决方案

压力测试tps性能下降问题解决方案 背景 测力测试时反映tps一直下滑的问题,为了重现该问题,开发一个简单交易进行测试,测试代码如下 录制该交易脚本,并放在LoadRunner11中进行测试,场景为10个用户同时启动并持续的跑.可以看到1分钟之后tps开始下降,并在后期持续下降. 此时分析服务端日志.javacore.heapdump.gc等,并未发现异常现象.修改服务端线程池相关等,但测试结果却是一如既往的下滑.记录服务端处理请求时间,发现一直很稳定,初步怀疑是客户端压力不够导致,但一直无具体

hdparm测试硬盘性能

<1>Centos安装hdparm测试硬盘性能 一.安装hdparm yum install hdparm -y Linux学习,http:// linux.it.net.cn 二.评估读取 SSD 硬盘,请使用hdparm命令进行读取测试. hdparm -t /dev/sda1 Linux学习,http:// linux.it.net.cn SSH执行以上命令,可使用hdparm评估SSD的读取速率. 注意,“/dev/sda1”指的是对应磁盘的驱动号,请执行“fdisk -l”查看.

使用iperf测试网络性能

iperf 是一个 TCP/IP 和 UDP/IP 的性能测量工具,能够提供网络吞吐率信息,以及震动.丢包率.最大段和最大传输单元大小等统计信息:从而能够帮助我们测试网络性能,定位网络瓶颈.iperf是开源的,源代码可以从http://sourceforge.net/projects/iperf/下载. 1.    iperf能够做什么 提起iperf,想必大家都知道它是用了测试网络性能的.具体说来,Iperf是美国伊利诺斯大学(University of Illinois)开发的一种开源的网络

Service系统服务(四):搭建单区域DNS服务器、特殊DNS解析、配置DNS子域授权、搭建并测试缓存DNS

一.搭建单区域DNS服务器 目标: 本例要求要求为DNS区域tedu.cn搭建一台DNS服务器,以便用户能通过域名的方式访问网站.测试阶段主要提供以下正向记录: svr7.tedu.cn ---> 192.168.4.7    pc207.tedu.cn ---> 192.168.4.207    www.tedu.cn ---> 192.168.4.100 配置完成后在客户机上验证查询结果. 方案: 快速构建DNS服务器的基本过程: 1> 安装 bind.bind-chroot