Lmbench测试集 --- 延迟测试工具lat_mem_rd
lmbench测试集简介
lmbench是一套简单的可移植的微型测评工具。
Linux性能测试
主要功能:延迟、带宽、处理器时钟比率计算
基本使用步骤:
- 解压安装
- make编译
- make result命令 进行总体的性能测试
执行过程中可根据提示自己选择需要的选项,若无特殊要求可以直接回车选择默认 - make see命令 查看结果
也可以cd到results目录下查看summary.out文件
lmbench所包含的测试工具有很多,从make result的结果中可以看出有以下:
- 系统基本参数
- 处理器Processor性能
- 数学运算:整型、无符号整型、浮点型、双精度型
- 上下文切换
- 本地通讯延时
- 文档、内存延时
- 本地通信贷款
- 内存操作延时
本篇博客将以内存读取延迟为例,主要介绍lat_mem_rd测试工具。
lat_mem_rd延迟测试工具
如何测试
从工具名就可以看出:latency_memory_read,内存读取的延迟测试
该测试工具是lmbench的常用测试之一,编译成功之后,cd到bin目录下就可以看到该程序的可执行文件啦。
测试CPU与内存之间的读取延迟
命令使用:./lat_mem_rd <-t> size_in_megabytes stride
若需要指定测试时的核与通道:numactl -C num1 -m num2
- 举例:
numactl -C 0 -m 0 ./lat_mem_rd -t 1 16
-C 0:程序运行时指定使用0核
-m 0:程序运行时指定使用通道0
-t:随机访问模式,若无此选项为顺序访问
1:访问的最大数据块,单位M
16:访问的步长大小,单位Byte
测试结果
执行结果的左侧为数据块大小,单位为兆M;右侧为在该数据块大小时测得的延时,延时单位是纳秒ns。
stride=16
0.00049 1.584
0.00098 1.583
0.00195 1.593
0.00293 1.593
0.00391 1.597
0.00586 1.598
0.00781 1.600
0.01172 1.600
0.01562 1.602
0.02344 1.602
0.03125 1.628
0.04688 2.230
0.06250 2.207
0.09375 2.205
0.12500 2.204
0.18750 2.237
0.25000 2.278
0.37500 2.326
0.50000 2.351
0.75000 2.345
1.00000 2.349
源码分析
可以先看看官网对于该测试工具的一个描述:
点击进入官网
- 测量不同内存大小和跨度的内存读取延迟。结果以每次加载纳秒为单位报告;
- 测量整个内存层次结构,包括板载缓存延迟和大小、外部缓存延迟和大小、主内存延迟和TLB未命中延迟。
- 仅测量数据访问;指令缓存没有测量。
- 基准测试作为两个嵌套循环运行。外环是步幅大小。内部循环是数组大小。对于每个数组大小,基准创建一个指针环,指向前一个步长。遍历数组由p = (char **)*p;
- 数组的大小从 512 字节开始。对于小尺寸,缓存会起作用,加载速度会快得多。
以下是博主自己的理解,若有不对请批评指正!
测试主要流程:
1、解析命令参数
2、根据输入的命令更新测试参数(步长,最大访问数据块大小等)
这里需要说明的是,除去最大访问数据块的大小必须设置之外,其他的选项都被赋予了默认值。
3、loads函数进行延迟测试
该函数就是最主要的函数了。测试是通过两层嵌套循环完成的:
- 外层循环是每次访问的range大小(就是测试结果左侧那一列),最小值是0.00049M(512K),循环增加至所设置的最大数据块大小
- 内层循环是访问次数count,count的计算是由range与stride(步长)共同决定的
结果计算就是访问某个数据块大小所用的时间除以访问次数count就得到了延迟大小- 对于每次循环,基准创建了一个链表,指针指向前一个步长,数组的遍历通过指针完成
4、结果打印