MLC内存延迟测试工具——intel
mlc https://www.intel.com/content/www/us/en/developer/articles/tool/intelr-memory-latency-checker.html
其他资料参考:
https://huataihuang.gitbooks.io/cloud-atlas/content/server/memory/mlc_intel_memory_latency_checker.html
CPU预取与性能简介:
https://blog.csdn.net/qupeng110/article/details/86015471?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242.1
What Your Computer Does While You Wait:
https://manybutfinite.com/post/what-your-computer-does-while-you-wait/
https://www.cnblogs.com/zengkefu/p/5589876.html
ARM学习笔记 计算机结构 总线 南北桥
https://blog.csdn.net/u011690552/article/details/15710659
什么是套接字?套接字的作用是什么?
https://cloud.tencent.com/developer/news/478432
应用层通过传输层进行数据通信
硬件预取器控制
在现代英特尔处理器上准确测量内存延迟具有挑战性,因为它们具有复杂的硬件预取器。英特尔? MLC 会在测量延迟时自动禁用这些预取器,并在完成时将它们恢复到之前的状态。
- 硬件预存器:是由于CPU和其他存储设备的速度差异,导致的存储结构。
- 内存包括主存(内存条,基于DRAM)与高速缓存(Cache,基于SRAM)两部分。
测试方向:
内存延迟检查
- 度量这些潜伏期和 b/w 对于为被测系统建立基线和进行性能分析
- Intel Memory Latency Checker (Intel MLC)是一个用于测量内存延迟和 b/w 的工具,以及它们如何随着系统负载的增加而变化。它还为更细粒度的研究提供了几种选择,其中 b/w 和特定一组核到缓存或内存的延迟也可以测量。
- 新选项 --memory_bandwidth_scan(仅在 Linux 上支持)能够以 1GB 块的形式测量整个地址范围内的内存带宽
工具测了什么
当该工具在没有任何参数的情况下启动时,它会自动识别系统拓扑并测量以下四种类型的信息。每个屏幕都显示了一个屏幕截图。
1.来自每个socket(套接字)并寻址到每个可用socket的请求的空闲内存延迟矩阵
2.峰值内存 b/w 测量(假设所有访问都对本地内存)具有不同读取和写入量的请求
3.来自每个socket并寻址到每个可用套接字的请求的内存 b/w 值矩阵
-
不同b/w点的延迟
英特尔? MLC 还提供命令行参数,用于对测量的延迟和b/w进行细粒度控制。
以下是一些可以使用命令行参数实现的功能:
- 测量从特定内核发往特定内存控制器的请求的延迟
- 测量缓存延迟
- 从核心/插槽的(子集测量)b/w
- 测量不同读/写比率的 b/w
- 测量随机地址模式而不是顺序的延迟
- 更改延迟测量的步幅大小
- 测量cache to cache 传输延迟
英特尔? MLC 的主要特性之一是测量延迟如何随着bw需求的增加而变化。
- 为方便起见,它创建了多个线程,其中线程数与逻辑 CPU 数减 1 相匹配。这些线程用于生成负载(以后,这些线程将被称为负载生成线程)。
- 负载生成线程的主要目的是生成尽可能多的内存引用。当系统像这样加载时,剩余的一个 CPU(未用于生成负载)运行一个用于测量延迟的线程。此线程称为延迟线程并发 出相关读取。
- 基本上,该线程遍历一个指针数组,其中每个指针都指向下一个指针,从而在读取中创建依赖关系。这些读取中的每一个所花费的平均时间提供了延迟。根据负载生成线程生成的负载,此延迟会有所不同。
- 每隔几秒,负载生成线程就会自动调节通过注入延迟生成的负载,从而测量各种负载条件下的延迟。有关更多详细信息,请参阅您下载的软件包中的自述文件。
命令行参数
如前所述,不带任何参数启动英特尔? MLC 会衡量几件事。但是,使用命令行参数,可以按顺序执行以下每个特定操作:
*mlc --latency_matrix*
打印本地和跨插槽内存延迟矩阵
*mlc --bandwidth_matrix*
打印本地和跨插槽内存 b/w 矩阵
*mlc --peak_injection_bandwidth*
针对所有本地访问的各种读写比率打印峰值内存 b/w(核心以尽可能快的速度生成请求)
*mlc --max_bandwidth*
针对所有本地访问的各种读写比率打印最大内存黑白(通过自动改变负载注入率)
mlc --idle_latency
打印平台的空闲内存延迟
mlc --loaded_latency
打印平台的加载内存延迟
*mlc --c2c_latency*
打印平台的缓存到缓存传输延迟
mlc -e
不要修改预取器设置
*mlc --memory_bandwidth_scan*
为每个 1GB 地址范围打印整个内存中的内存带宽
上述每个命令都有更多选项。这些在自述文件中更详细地记录并且可以下载
实际操作:
在阿里云上面进行的测试:
2核2GB内存,硬盘60GBESSD
bandwidth_scan***
为每个 1GB 地址范围打印整个内存中的内存带宽
上述每个命令都有更多选项。这些在自述文件中更详细地记录并且可以下载
实际操作:
在阿里云上面进行的测试:
2核2GB内存,硬盘60GBESSD
|