non-movable pageblock
movable pageblock
non-movable 池子耗尽 → slowpath
movable 大块不被侵占
slowpath:提升到 pageblock_order 运行
order-0 请求
reclaim / compaction
以 pageblock_order 生产整块 non-movable pageblock
执行用 promoted order,重试判定用 request order
实际执行
order-9
重试判定
order-0
≠
reclaim 的返回值
1
实际回收
0
compaction_ready() 提前返回
无进展、没回收,跳过 memory.low cgroup
compaction 结果
失败 / defer
重试检查依据
request order
继续重试
重试决策把空进展当成真进展
reclaim 空进展,返回 1
重置 no_progress_loops
0
no_progress_loops
请求继续重试
无限循环
ALLOC_NOFRAGMENT fallback
计数始终为 0,永远走不到这里
Meta 64G 生产机 · defrag_mode
direct reclaim 中无产出的 order-9 运行
95%
60k
次/秒(峰值)
全天约 2 亿次 should_reclaim_retry(),no_progress_loops 始终为 0
空转的代价
SLUB inode/dentry refill 空转
内存压力 → PSI OOM
杀掉业务与系统服务
slowpath 每次迭代
nofrag_promote_order()
算一次 promoted order
direct reclaim
should_reclaim_retry()
direct compaction
should_compact_retry()
reclaim:promoted 请求的进展不再重置计数器
空进展累积
no_progress_loops++
ALLOC_NOFRAGMENT fallback
fallback 时重置 no_progress_loops 与 compaction_retries,重试预算完整
compaction:按 promoted order 检查结果
COMPACT_SKIPPED
走 fallback
优先级下限与 COMPACT_SUCCESS 上限仍按请求 order
非 costly 请求仍能走到 COMPACT_PRIO_SYNC_FULL
32G VM · inode churn · should_reclaim_retry() 调用次数
before
63M
after
293k
−99.5%
峰值内存压力 PSI some avg10
99%
12%
−87pp
文件创建速度提升
5.7
倍
空格
播放/暂停
←
→
逐动作
R
重播
⚠
1x