numactl --hardware仅显示ACPI SLIT表中的标称延迟(单位10ns),非实测值;真实跨节点延迟需用numactl绑定+mbw或stream实测,因受内存控制器、QPI/UPI链路负载及页表映射动态影响。

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

最直观的办法,当然是先看 numactl --hardware 里给出的节点间延迟值。不过要注意,这个数更多只是静态标称;真要判断实际延迟,还是得配合 numactl --membindmbwstream 做实测。原因也不复杂:NUMA 跨节点访问的真实开销,并不只由拓扑决定,还会同时受到内存控制器、QPI/UPI 链路负载以及页表映射方式的影响。只盯着硬件拓扑图看,结论很容易跑偏。

用 numactl 查看 NUMA 节点拓扑和标称延迟

系统启动时内核会从 ACPI SLIT 表读取节点间访问延迟(单位为 10ns),numactl --hardware 显示的是这个预设值,不是实测结果。

用 mbw 测量跨节点内存带宽与隐含延迟

mbw 不直接报延迟,但通过写入速度反推访问效率:相同大小 buffer,在跨节点分配时带宽下降越明显,说明延迟+竞争开销越大。

用 stream 测试真实访存延迟敏感场景

stream 的 Copy、Scale、Add、Triad 四个 kernel 对内存访问模式不同,其中 Triad(a[i] = b[i] + scalar * c[i])最考验跨 NUMA 节点的数据拉取能力,其带宽衰减直接关联延迟抖动。

为什么不能只信 /sys/devices/system/node/node*/distance?

这个文件内容来自同一份 SLIT 表,但它只反映“理想路径”下的标称延迟,而真实延迟取决于当前 QPI/UPI 链路是否被其他 CPU 核心或 PCIe 设备占满。

真实跨核心内存访问延迟从来不是固定值,它随负载、页表状态、链路拥塞实时变化。想靠一个命令“查出延迟”,不如用 mbwstream 在业务负载下持续采样——毕竟你真正关心的,是应用跑起来以后,那一行 memcpy 到底卡不卡。

本文转载于:https://www.php.cn/faq/2976926.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。