NUMA balancing 想让页待在合适的节点
tiered memory 上:热数据放高带宽 tier
NUMA balancing
把页迁移到合适的 NUMA 节点
tiered memory 上就是搬到高带宽 tier
scanner:task_numa_work
逐个 VMA 检查
这个 VMA 是否可迁移
gate:vma_policy_mof()
只有策略带 MPOL_F_MOF(migrate-on-fault)的 VMA 才参与 NUMA scan
这个 gate 决定了谁能进 NUMA scan
背景 · gate 的初衷是别碰 pin 住的段
Oracle 用 mbind(MPOL_BIND) pin 共享段
Oracle 的场景
mbind(MPOL_BIND) pin 共享段
页被明确绑定到指定节点集合
trap fault 既贵又无意义
扫这种 VMA 只是白费
gate 的初衷合理
所以:用户明确 opt-out 的 VMA,scan 直接跳过
问题出在「明确 opt-out」这个判断上
问题 · shmem 查共享策略返回 NULL
用户没设共享策略,是常见情况
shmem:vm_ops->get_policy
vma_policy_mof() 走它取策略
没有共享策略时返回 NULL
旧代码:NULL = 明确 opt-out
直接返回 false
跳过这个 VMA
少了回退到 task policy 这一步
而 task policy 默认带 MPOL_F_MOF
一次 fallback 缺失,变成整类 VMA 被排除
后果 · 默认策略的 shmem 全被排除
不只是少扫几个 VMA
默认 shmem VMA
全部跳过 NUMA scan
tiered memory
tmpfs workingset 卡在低带宽 tier
生产报告
cachelib convergence/bandwidth 问题
默认 tmpfs 的 tier 迁移与 NUMA 扫描一起失效
整个 workingset 留在低带宽 tier
方案 · 空策略走统一 fallback
查询返回空,就继续往下找
共享策略
shmem get_policy 可能为空
VMA 自身策略
VMA 上设的策略
task policy
默认带 MPOL_F_MOF
vma_policy_mof() 不再把空策略当成 opt-out
默认策略的 shmem VMA 重新参与 balancing
边界 · 原意没有丢
明确 pin 的仍然不 scan
保留:不 scan 明确 pin 的 VMA
如 mbind(MPOL_BIND)
trap fault 依然不必发生
允许:默认策略 VMA 参与
空策略回退到 task 策略
task 策略默认带 MPOL_F_MOF
其它查共享策略的路径早已这样回退
只有 NUMA scan 的这个判定入口是 outlier
改的是这一个入口,不是 gate 的用意
预期收益 · 作者未提供量化 benchmark
以下为基于机制的推断,不是实测
shmem 默认策略 VMA 恢复 scan
tmpfs 重新进入 NUMA balancing
workingset 可以上高带宽 tier
tiered memory 上热数据不再困在低带宽 tier
convergence 恢复
cachelib 报告的 convergence 与 bandwidth 问题消除
与其它路径行为一致
NUMA scan 的 outlier 消除
空格
播放/暂停
←
→
逐动作
R
重播
⚠
1x