MLC测试工具

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的请求的空闲内存延迟矩阵

img

2.峰值内存 b/w 测量(假设所有访问都对本地内存)具有不同读取和写入量的请求

img

3.来自每个socket并寻址到每个可用套接字的请求的内存 b/w 值矩阵

img

  1. 不同b/w点的延迟

    img

英特尔® 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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>