https://zhuanlan.zhihu.com/p/359823092

在定位机器性能问题的时候,有时会觉得机器莫名其妙地跑的慢,怎么也看不出来问题。CPU频率也正常,程序热点也没问题,可就是慢。这时候可以检查一下内存的访问速度,看看是不是机器的内存存在什么问题。Intel Memory Latency Checker就是实现这个目标的一大利器。

尤其现在的很多机器都使用了NUMA架构,本节点内和跨节点的内存访问的速度会有差异。另外,内存带宽也有可能成为机器的性能瓶颈。

下载地址:https://software.intel.com/content/dam/develop/external/us/en/protected/mlc_v3.9.tgz

包里有文档,或者看在线版本的:Intel Memory Latency Checker v3.9

INTEL MLC可以测量出机器的内存访问延迟和带宽,并且可以观察出它们是如何随着机器负载的增加而变化的。Intel的处理器有一些内存预取功能,可能会影响测试结果,所以在Linux下需要使用root权限来运行mlc。

运行一下mlc,输出如下:

# ./mlc
Intel(R) Memory Latency Checker - v3.9
Measuring idle latencies (in ns)...
Numa node
Numa node 0 1
0 82.2 129.6
1 131.1 81.6

这一部分内容表示任意两个Numa node之间的空闲内存访问延迟矩阵,以ns为单位。访问本node的内存延迟是低于访问跨node的内存延迟的。所以观察这个矩阵,它的数值大致关于对角线对称,node 0访问node 1与node 1访问node 0的速度大致相同,可以判断numa节点间的内存访问应该正常。这个功能也是我最常使用的,可以在命令行中使用:

./mlc --latency_matrix

以单独执行内存访问延迟矩阵。


Measuring Peak Injection Memory Bandwidths for the system
Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec)
Using all the threads from each core if Hyper-threading is enabled
Using traffic with the following read-write ratios
ALL Reads : 69143.9
3:1 Reads-Writes : 61908.4
2:1 Reads-Writes : 60040.5
1:1 Reads-Writes : 54517.6
Stream-triad like: 57473.4

这一部分内容表示不同读写比下的内存带宽。一般来说,内存的写速度是略慢于读速度的。有时候内存会出一些奇奇怪怪的问题,比如读取一切正常,但写的特别慢。这时候观察数据,随着写比例的上升,如果带宽急剧下降,那么有可能出现了这种情况。


Measuring Memory Bandwidths between nodes within system
Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec)
Using all the threads from each core if Hyper-threading is enabled
Using Read-only traffic type
Numa node
Numa node 0 1
0 35216.6 32537.9
1 31875.1 35048.5

这一部分内容表示显示内存访问带宽矩阵。单独判断numa节点间内存访问是否正常还可以使用 :

./mlc --bandwidth_matrix

判断方法与延迟矩阵类似,如下列异常数据,node 1访问node 0的带宽与node 0访问node 1的带宽相差较大。出现不平衡的时候一般从内存插法、内存是否故障以及numa平衡等角度进行排查。

异常数据:
Using buffer size of 100.000MB/thread for reads and an additional 100.000MB/thread for writes
Measuring Memory Bandwidths between nodes within system
Bandwidths are in MB/sec (1 MB/sec = 1,000,000 Bytes/sec)
Using all the threads from each core if Hyper-threading is enabled
Using Read-only traffic type
Numa node
Numa node 0 1
0 51999.2 30097.0
1 11091.6 58205.7

Measuring Loaded Latencies for the system
Using all the threads from each core if Hyper-threading is enabled
Using Read-only traffic type
Inject Latency Bandwidth
Delay (ns) MB/sec
==========================
00000 523.74 69057.4
00002 589.55 68668.7
00008 686.99 68571.4
00015 549.87 68873.6
00050 575.48 68673.0
00100 524.74 68877.5
00200 197.61 64225.8
00300 131.60 47141.0
00400 110.39 36803.0
00500 117.32 30135.2
00700 100.90 22179.1
01000 100.93 15762.8
01300 91.74 12351.6
01700 98.61 9475.2
02500 86.66 6927.8
03500 88.13 5132.6
05000 87.68 3818.6
09000 85.36 2473.5
20000 84.83 1538.7

这一部分内容展示了内存访问带宽和内存延迟的之间的关系,全部是读操作。随着机器负载的增加,内存访问带宽增加,内存响应也会相应变慢。根据这里的数据可以判断出内存在负载压力下的响应变化,可以观察是否在达到一定带宽的时候,出现了不可接受的内存响应时间。

除了这些以外,MLC还提供了其他一些功能,可以使用命令参数进行开启,功能包括:

  • 测量指定node之间的访问延迟
  • 测量CPU cache的访问延迟
  • 测量cores/Socket的指定子集内的访问带宽
  • 测量不同读写比下的带宽
  • 指定随机的访问模式以替换默认的顺序模式进行测量
  • 指定测试时的步幅
  • 测量CPU cache到CPU cache之间的访问延迟

[转帖]INTEL MLC(Memory Latency Checker)介绍的更多相关文章

  1. 【转帖】互联网加密及OpenSSL介绍和简单使用

    转帖:https://mritd.me/2016/07/02/%E4%BA%92%E8%81%94%E7%BD%91%E5%8A%A0%E5%AF%86%E5%8F%8AOpenSSL%E4%BB%8 ...

  2. 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  3. [svc]Linux中Swap与Memory内存简单介绍

    swap区域是干嘛的 cpu 内存(不常用到的进程swap区) 磁盘 当内存没有可用的,就必须要把内存中不经常运行的程序给踢出去.但是踢到哪里去,这时候swap就出现了. 背景介绍 对于Linux来说 ...

  4. [转帖]Intel为何吊打AMD,先进半导体工艺带来什么?

    Intel为何吊打AMD,先进半导体工艺带来什么? 2016-3-10 15:38  |  作者:Strike   |  关键字:超能课堂,半导体工艺,CPU制程 分享到       按照摩尔定律的发 ...

  5. Linux中Swap与Memory内存简单介绍

    1.背景介绍   这篇文章介绍一下Linux中swap与memory.对于memory没什么可说的就是机器的物理内存,读写速度低于cpu一个量级,但是高于磁盘不止一个量级.所以,程序和数据如果在内存的 ...

  6. [转帖]新一代IBM Z14主机技术介绍

    新一代IBM Z14主机技术介绍 https://cloud.tencent.com/developer/news/268909 IBM最新的已经有IBM Z15 主机了.. 文章来源:企鹅号 - 云 ...

  7. [转帖]Intel Xeon路线图:7nm处理器要上DDR5、PCIe 5.0

    Intel Xeon路线图:7nm处理器要上DDR5.PCIe 5.0 https://www.cnbeta.com/articles/tech/849631.htm 在月初的投资者会议上,Intel ...

  8. Linux中Swap与Memory内存简单介绍 (转)

    https://blog.csdn.net/zwan0518/article/details/12059213 一.背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇 ...

  9. [转帖]Windows Server 2016各种版本介绍

    Windows Server 2016各种版本介绍 http://www.5sharing.com/js/zx/872.html windows server的版本 时间:2018-10-06 10: ...

  10. mysql 开发基础系列11 存储引擎memory和merge介绍

    一. memory存储引擎 memoery存储引擎是在内存中来创建表,每个memory表只实际对应一个磁盘文件格式是.frm.   该引擎的表访问非常得快,因为数据是放在内存中,且默认是hash索引, ...

随机推荐

  1. 将一个服务器通过HTTP请求另一个服务器

    1.一个服务器访问另一个服务器(不传参) @RequestMapping ("/test") public ResponseEntity<String> serverT ...

  2. Llama2-Chinese项目:7-外延能力LangChain集成

      本文介绍了Llama2模型集成LangChain框架的具体实现,这样可更方便地基于Llama2开发文档检索.问答机器人和智能体应用等. 1.调用Llama2类   针对LangChain[1]框架 ...

  3. 火山引擎DataTester:一个爆款游戏产品,是如何用A/B测试打磨出来的?

    随着国内游戏用户数量趋于饱和,中国游戏产业也从高速成长期逐渐转型,市场成熟度提升,竞争趋于精细化. 随着游戏出海以及私域流量运营的挑战,游戏企业对数据分析的使用需求和依赖度进一步提高.而在游戏研发立项 ...

  4. Java 获取当前天是一年中的第几天

    Java 获取当前天是一年中的第几天 @Test void dayofweed() throws Exception { System.out.println("2023-01-01 第 & ...

  5. 不使用kvm的qemu虚拟化

    本文记录的是在某些机器上并不支持kvm虚拟化,单纯使用qemu来完成虚拟机的创建和管理. 系统版本:centos 7 qemu版本:4.2 首先说明一下qemu和kvm的关系: qemu 是一个模拟器 ...

  6. ChatGPT带你入门机器学习:逻辑回归模型博客和小红书风格文案一次搞定!

    打脸了 顺手向大家演示一下如何用 ChatGPT 写技术博客吧,其实蛮简单的,特别需要操心的是它会一本正经的胡说八道,还信誓旦旦的.我们要审查它的回答,万不可全信. 为了便于阅读,我把prompt加粗 ...

  7. SD 信用模拟检查增强

    一.业务流程中需要进行信用模拟检查,但逻辑梳理较为复杂,因此借用交货单创建时信用检查逻辑.但是当交货单信用检查通过时,不创建交货单,因此需要对BAPI:BAPI_OUTB_DELIVERY_CREAT ...

  8. 版本升级 | v1.0.11 上线,你的需求被翻牌了吗?

    叮咚-综合我们接到的各种用户反馈,OpenSCA 项目组在 1.0.10 的基础上迭代了 1.0.11 版本 升级功能 优化 Java 解析逻辑 支持打印结果概览及常见报错信息到终端界面 支持输出 C ...

  9. 基于阿里云Serverless函数计算开发的疫情数据统计推送机器人

    一.Serverless函数计算 什么是Serverless? 在<Serverless Architectures>中对 Serverless 是这样子定义的: Serverless w ...

  10. springboot+vue实现 下载服务端返回的文件功能

    开发中会遇到,通过浏览器下载服务器端返回的文件功能,本文使用springboot+vue实现该功能. 后端代码: 注:后端返回的文件名遇到中文就会乱码,一直也没得到很好的解决方案,最后就统一返回1.x ...