使用MLC(Memory Latency Checker)进行内存测试

英特尔® Memory Latency Checker (英特尔® MLC) 是一种用于测量内存延迟和黑白,以及它们如何随系统负载的增加而变化的工具。它还提供了多个选项进行更细粒度的调查,其中还可以测量从一组特定内核到高速缓存或内存的黑白和延迟。

下载地址:https://www.intel.cn/content/www/cn/zh/download/736633/intel-memory-latency-checker-intel-mlc.html

下载好以后打开压缩包,可以看到Linux文件内有已经编译好了的mlc工具

•将mlc二进制文件复制到系统上的任何目录
•Intel®MLC动态链接到GNU C库(glibc/lpthread),该库必须存在于系统中
•运行此工具需要Root权限,因为该工具修改H/W预取控制MSR以启用/禁用延迟和b/ W测量的预取器。请参阅readme文档,了解在没有根权限的情况下运行
•应该加载MSR驱动程序(不是安装包的一部分)。如果内核中没有加载,可以使用‘modprobe msr’命令完成。

常用命令参数说明

mlc --latency_matrix,打印出本地和跨连接器内存的延迟矩阵
mlc --bandwidth_matrix,打印出本地内存与跨连接内存之间的矩阵数据
mlc --peak_injection_bandwidth,在所有本地访问的情况下,针对不同的读写比率,打印出核心以最快速率生成请求时的峰值内存使用量(即核心在进行最高速度的数据读写操作时的内存占用情况)
mlc --max_bandwidth,通过自动调整加载注入速率,针对不同的读写比率以及所有本地访问情况,计算出最大内存带宽值。
mlc --idle_latency,打印出平台的空闲内存延迟情况
mlc --loaded_latency,打印出该平台加载内存的延迟时间
mlc --c2c_latency,打印出该平台的缓存到缓存的传输延迟时间
mlc -e,不要修改预取器设置
mlc --memory_bandwidth_scan,针对每个 1GB 的地址范围,统计整个内存的内存带宽情况。

上述每个命令都有更多的选项。这些选项在“readme”文件中有更详细的说明,并且可以下载获取。

MLC仅仅提供了二进制的文件下载,所以除了x86_64以外的架构平台暂时无法使用该工具,下面我们来简单测试下

./mlc

202507071655057278377396.png

测试结果相关字段解释

1.Measuring idle latencies for random access 访问本地和远端socket的时延,鉴于当前的架构很多都是1NPS(每个socket划分为独立的NUMA Node),这个数据也可以间接的表达为跨NUMA内存访问的时延,单位是纳秒。
2.Using Read-only traffic type 这部分也是跟socket,NUMA相关的,格式基本一样,数值看上去比上面的部分大。这个部分是访问本地和远端内存的带宽大小。
3.Using traffic with the following read-write ratios 展示了只读,混合读写,混合比例为3:1,2:1,1:1 下系统在不同的访问模式下可以获得的最大内存带宽
4.Inject  Latency Bandwidth 这部分的数据在整个结果中占据的最大的空间。第一列是"inject delay",每个若干个cycles发起一次内存请求,抑或说不同的内存访问压力;第二列”latency“是内存请求的响应时长;第三列”bandwidth“,获得的内存带宽。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.sulao.cn/post/1076

评论列表

0%