测试目标
测试基于ARM架构的网卡访问L1,L2 Cache和DRAM的latency。
lmbench工具
查到了很多测试工具,但好像只有lmbench能测试内存延迟,所以就选择了lmbench。
如何使用?
通过https://nchc.dl.sourceforge.net/project/lmbench/development/lmbench-3.0-a9/lmbench-3.0-a9.tgz下载了lmbench最新版本的代码。由于网卡没有连接上公网,所以不能直接使用wget命令下载,而是使用scp命令(ssh)把压缩包传输到网卡上[小技巧]。
进入下载目录,执行以下命令
tar -xvzf lmbench-3.0-a9.tgz
cd lmbench-3.0-a9/可是
进入到lmbench-3.0-a9/目录。直接make。我这里是直接make成功了。然后make results。
这里除了填写内存范围,也就是下图的部分(我填的是256,这里是找的网上的图),其他全按照默认就好。而且要注意的是,也不用傻傻输入默认值,直接按空格换行就好!!!因为在配置REMOTE的时候,输入字符就会出问题!!!好冤的坑。
好了配置好了但是并没有测试结果... 仔仔细细看了日志,发现$OS是空的,而且日志也提示这个脚本不能识别系统类型。最后的解决办法是,直接在配置文件scripts/os里,手动添加OS。我的机器MACHINE=aarch64,SYSTEM=Linux(日志里会给出),所以在echo $os上面一行添加OS="aarch64-Linux"。然后make results。虽然日志里还是说不能识别系统类型,但是可以出测试结果了!大概20分钟后,测试完成。
make see。在lmbench-3.0-a9/results目录下的summary.out可以查看结果。
测试结果分析
系统基本参数
tlb pages: 快表的页面数。
cache line bytes: cache的行字节数。
mem par: 存储器分层并行化(?什么意思)
scal load: 并行的lmbench数。
上下文切换
2p/0k:每个进程的size为0(不执行任何任务),2个并行处理(进程数为2)0K大小的数据。
2p/16k: 每个进程的size为16K(执行任务),2个并行处理16K大小的数据。
异常情况:2p/64k花费的时间怎么会是最小的?
文档、虚拟机系统内存延时
File Create & Delete: 创建并删除文档。
Mmap Latency: 内存映射(这个latency怎么这么大?)
本地通信带宽
pipe: 管道操作,pipe的每个chunk为64K,通过该管道传送50M数据所用的时间。
AF UNIX: Unix协议,在两个进程之间建立一个unix stream socket,每个chunk为64K,通过该socket移动10M数据所用的时间。
TCP:TCP通信,使用TCO/IP socket通信,传输数据为3MB。
File reread:文档重复读。
MMap reread:内存映射重复读 Bcopy(libc)。
内存拷贝 Bcopy(hand):内存拷贝。
Mem read:内存读,测试把数据读入processor的带宽。
Mem write:内存写,测试写数据到内存的带宽。
内存操作延时(平均Latency)
L1:L1缓存操作延时。
L2: L2缓存操作延时。
Main mem: 系统内存连续操作延时。
原理:以某个固定步长循环访问地址空间,最后用时间除以访问测试。
Rand mem: 系统内存随机访问操作延时。