NUMA 本地回收开关
在 NUMA 机器上,某内存节点的空闲内存低于水位时有两种选择:跨节点向邻居借内存(远程访问,延迟更高),或优先在本节点回收可回收页(代价是回收 CPU 开销)。vm.zone_reclaim_mode 是决定是否走后者的按位开关:0 关闭(现代内核默认),非 0 时可按位叠加「回收时包含写回脏页」「回收时使用 swap」等行为。
基本信息
| 参数名 | vm.zone_reclaim_mode |
|---|---|
| 默认值 | 0(关闭) |
| 取值含义 | 按位:1 启用本地回收,2 回收含脏页写回,4 回收可使用 swap |
| 相关观测 | numastat、numastat -m |
| 生效范围 | 全机,写入需要 root |
典型使用场景
- 跨节点访存确认是瓶颈的机器上做受控实验
- 文件缓存占满节点内存,业务申请本地内存变慢
- 与 numactl 手工绑定方案对比,选更适合业务的策略
- 复盘「远程访问多但回收开销小」这一取舍是否仍成立
- 基线审计:确认该开关是否被第三方调优脚本改动过
查看与观测
查看与观测
sysctl vm.zone_reclaim_mode
numastat -m | head -12 # 各节点内存与命中情况
numastat | head -20 # numa_hit 与 numa_miss 计数
cat /proc/zoneinfo | grep -E 'Node|min|low|high' | head -24 # 各节点水位
sysctl kernel.numa_balancing # 与自动均衡是否同时开启
sysctl -w vm.zone_reclaim_mode=1 # 试探性开启,同时观测业务延迟按位取值含义
| 取值 | 含义 | 使用场景 |
|---|---|---|
| 0 | 关闭节点内回收,优先跨节点分配 | 默认值,适合多数通用负载 |
| 1 | 启用节点内回收 | 跨节点访问确为瓶颈时测试 |
| 2 | 节点内回收包含写回脏页 | 需要在回收时落盘,通常与 1 组合为 3 |
| 4 | 节点内回收允许使用 swap | 有 swap 且希望业务留在本地,通常与 1 组合为 5 |
现代内核默认关闭是权衡的结果:开启后内存紧张的节点会反复回收而不是借用邻居内存,常见表现是 CPU 回收开销上升。
是否值得开启取决于 numastat 的 miss 分布与业务的延迟分布,不要仅凭「本地内存更快」的理论直接改生产配置。