Linux怎么查看核心内存访问延迟

浅敏酱_4476

浅敏酱_4476

2026-09-01

463人浏览

原创

linux下无一键命令直接输出核心内存访问延迟,因其由缓存层级、numa节点、内存控制器及dram时序共同决定;需用perf测cache miss开销、numactl+mbw测本地/远程带宽差异、lmbench的lat_mem_rd获取纳秒级近似值,并严格绑定cpu与内存节点。

linux怎么查看核心内存访问延迟

Linux 下没有现成的「一键命令」能直接输出「核心内存访问延迟」数值,因为这个延迟不是单一指标,而是由 CPU 缓存层级、NUMA 节点归属、内存控制器路径、DRAM 时序参数共同决定的。你真正需要测的,是「特定 CPU 核心访问某块内存的实际耗时」,而不是泛泛而谈的“内存延迟”。

perf 测单核到本地内存的 L1/L2/L3 延迟

这是最贴近「核心级」访问延迟的实测方式,依赖 CPU 内置的 lfence + rdtsc 或 perf 的 mem-loads 事件,但需写微基准代码。更可行的是用现成工具 perf 捕获 cache miss 开销:

  • 运行 perf record -e cycles,instructions,cache-references,cache-misses -C 0 -- sleep 1(绑定到 CPU 0)
  • 再用 perf report --sort comm,dcache_misses -n 查看进程级 dcache/llc-misses 比例
  • 若某进程 llc-missescycles 比例 >15%,说明它频繁跨缓存行访问,实际延迟已远超 L3(≈12ns),接近 DRAM(≈60–100ns)
  • 注意:cache-misses 是事件计数,不是纳秒值;但结合 cycles 可估算平均 miss penalty —— 比如 1M LLC miss / 100M cycles ≈ 100 cycles/miss ≈ 30ns(按 3GHz CPU)

numactl + mbw 对比本地 vs 远程节点延迟

NUMA 架构下,“核心内存访问延迟”差异主要来自是否跨节点。不能只看理论值,得实测带宽与有效延迟:

Linux Journey
Linux Journey

当用户想学习Linux基础、命令行、文件系统等时,在LabEx查找并推荐免费的Linux Journey课程。

下载
  • 先查拓扑:numactl --hardware 确认 node 数量及 CPU/memory 绑定关系
  • 安装 mbwapt install mbw 或源码编译),它通过 memcpy 循环测带宽,间接反映访问延迟
  • 在 CPU 0 上强制分配本地内存并测速:numactl -C 0 -m 0 mbw -n 1000 -t 5
  • 再强制跨节点访问:numactl -C 0 -m 1 mbw -n 1000 -t 5
  • 对比结果:若 MEMCPY 带宽从 12GB/s 掉到 4GB/s,说明远程访问延迟升高约 2–3 倍(典型值:本地 ≈ 80–100ns,远程 ≈ 200–400ns)

lmbenchlat_mem_rd 获取近似纳秒值

lmbench 是少数能输出具体延迟数值(单位 ns)的工具,其 lat_mem_rd 子命令专为测量内存读延迟设计:

  • 编译安装:make && sudo make install(需下载源码,GitHub 可搜 lmbench3)
  • 运行:lat_mem_rd -P 1 -N 1000000 1M(单线程、1MB 数据集)
  • 输出中关注 avg 列:L1/L2/L3 均在 1–12ns 区间;若测出 60–120ns,基本就是 DRAM 延迟
  • 关键限制:它测的是顺序读,且无法区分本地/远程;必须配合 numactl 使用,例如:numactl -C 0 -m 0 lat_mem_rd 1M
  • 容易踩坑:不加 -P 1 会多线程干扰;数据集太小(如 4K)会被缓存完全覆盖,测不出真实 DRAM 延迟

别信 /proc/meminfodmidecode 里的“内存频率”

很多人看到 dmidecode | grep "Speed:" 输出 Speed: 3200 MT/s 就以为延迟 = 1/3.2GHz ≈ 0.31ns,这是严重误解:

  • 那个 Speed 是总线吞吐率,不是访问延迟;真实延迟由 CL/tRCD/tRP 等时序参数决定,例如 CL22 @ 3200MHz ≈ 13.75ns(22 ÷ 1.6GHz)
  • /proc/meminfo 只提供总量和使用量,不含任何延迟信息
  • 内核也**不暴露** DRAM 时序参数给用户空间;你只能通过厂商 datasheet 或 BIOS 中的 SPD 信息间接查,但无法在运行时动态读取
  • 真正影响应用延迟的,是 CPU 到内存控制器的物理距离(NUMA)、cache 命中率、prefetcher 行为——这些都无法从静态参数推导

复杂点在于:同一台机器上,不同核心访问同一块内存的延迟可能差 2–3 倍;而一个核心访问不同内存区域(L1、L3、本地 DRAM、远程 DRAM)的延迟跨度从 1ns 到 400ns。不绑定 CPU 和内存节点就测,结果毫无意义。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3570

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3113

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2173

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5150

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4822

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2913

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2405

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2619

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习