vmpressure
回收效率推断压力
scan : reclaim
压力大就节流 socket
比值
扫描页数
回收页数
比值差 = 压力
没回收几个
动作
socket pressure
TCP 收紧接收窗口
节流网络
低阶回收合理
背景
扫多收少
像是内存不够
旧逻辑 · 比值判压
vmpressure()
vmpressure_calc_level()
level > LOW
调用
gfp / memcg
scanned
reclaimed
没有 order
判定
scan / reclaim
算 pressure level
超过 LOW
assert socket
缺陷
不看分配 order
不分 order 判压力
误判 · costly order
order > COSTLY_ORDER
主要靠 compaction
reclaim 难奏效
碎片化
高阶块不足
compaction 整理
扫描多回收少
差效率正常
误判
比值难看
level > LOW
仍断言 socket
TCP 被节流
问题
碎片不是压力
却被当成压力
方案 · 传 order
vmpressure() 加参数
order 来自 scan_control
调用点传 sc->order
签名
gfp, order
memcg, tree
scanned, reclaimed
order 新维度
调用
shrink_one
shrink_node_memcgs
shrink_node
都用 sc->order
改动
只加一个参数
不改编排逻辑
过滤 · 只低阶断言
level > LOW
order <= COSTLY_ORDER
两个条件都满足
条件
level > LOW
order <= costly
才 assert socket
否则跳过
效果
costly 回收
不再触发
socket pressure
TCP 窗口不被误压
关键
高阶回收低效
不等于内存压力
例外 · memcg/prio
memcg 回收
try_to_free_mem_cgroup_pages
恒为 order 0
memcg
order 0
<= costly
无条件通过
不受影响
prio
vmpressure_prio
内部传 0
critical 压力
不被过滤误伤
边界
两处必须保留
低优先级关键压力
现场 · 碎片化主机
~15GB available
zero cgroup pressure
order 7+ = 0
buddyinfo
order 0-3 充足
order 7+ 为 0
碎片化
高阶分配难
bpf
94% vmpressure
来自 order-7 kswapd
TCP min window
rcv_ssthresh:19712
现场
不是内存不足
是碎片化
结果与边界
live-patching
约 30 分钟
TCP 连接
Before
723 / 3,843
19%
卡在 minimum
recv window
After
0 / 3,470
无卡住连接
窗口恢复
单一主机
边界
不是 fleet A/B
只反映该场景
空格
播放/暂停
←
→
逐动作
R
重播
⚠
1x