首页/系统/Linux 内核与性能调优速查/vm.watermark_boost_factor 瞬时抬升水位
内存与 OOM58 条

vm.watermark_boost_factor 瞬时抬升水位

按比例临时抬高低水位,缓解碎片化时的分配失败;属于瞬态缓冲,不是长期给系统多留内存的手段。

参数是什么

vm.watermark_boost_factor 控制「水位瞬时抬升」的幅度:当内核发现内存碎片化导致高阶分配困难时,会在一段时间内把各 zone 的低水位按比例抬高,提前唤醒 kswapd 做后台回收,把突发压力从分配路径上移走,而不是等分配真正失败才做直接回收。它是瞬态缓冲机制,作用在回收时机上,不会给系统多留可用内存。

基本信息

参数名vm.watermark_boost_factor
默认值15000(以 10000 为 100%,即抬高约 150% 的低水位)
触发条件内核自行判断的高速缓存/阶数分配困难,非人工触发
关联参数vm.watermark_scale_factor 决定常驻水位比例(默认 10)
观测点/proc/zoneinfo 的 boost 与 min/low/high 行
关闭方式设为 0,此时不做瞬态抬升

典型使用场景

  • 高阶分配(大页、驱动 DMA、较大 slab 对象)间歇性失败,同时观察到直接回收计数上升
  • 希望把回收压力提前交给 kswapd 后台处理,降低分配路径上的延迟尖峰
  • 确认水位为何被临时抬高:在 /proc/zoneinfo 中看到非零 boost 值
  • 与 THP 或大页场景联合调优,评估水位策略对高阶分配成功率的影响
  • 实验性关掉该机制(设为 0),对比特定负载下延迟与分配失败率的变化

查看与调整

查看与调整
sysctl vm.watermark_boost_factor vm.watermark_scale_factor  # 看瞬态抬升与常驻水位比例
cat /proc/zoneinfo | grep -E 'boost|low|min' | head  # 当前水位与是否正在抬升
cat /proc/buddyinfo  # 各阶空闲块分布,判断是否真的碎片化
grep -E 'compact_|allocstall|pgscan_direct' /proc/vmstat  # 直接回收与整理的计数
sysctl -w vm.watermark_boost_factor=0  # 关闭瞬态抬升(实验用,重启即回退)
printf 'vm.watermark_boost_factor = 15000\n' > /etc/sysctl.d/90-vmwm.conf  # 需要持久化时写入

水位线读法

水位作用异常表现
min最低线,低于它分配会同步做直接回收频繁下探说明内存或水位长期紧张
low低线,降至此处唤醒 kswapd 后台回收经常贴着 low 运行说明余量不足
high高线,回到此处 kswapd 停止回收长期到不了 high 表示回收跟不上
boost碎片化时临时叠加在 low 上的抬升量平时读数为 0 属正常
boost 是瞬时值:只有在水位被实际抬高的那段时间,/proc/zoneinfo 里才会出现非零 boost。平时读到 0 并不代表参数没生效,需要结合 buddyinfo 与分配失败记录判断机制是否曾经触发。
它与 watermark_scale_factor 是两回事:后者按比例调整常驻的 min/low/high 水位(默认 10 即 0.1%),前者只在碎片化时做短期补偿。想「给系统多留内存」应调后者或 min_free_kbytes,而不是把 boost 当容量参数。

易错点

  • 把 boost 当容量参数调大:它只改变回收时机,不增加可用内存,调大后往往看不到预期收益
  • 不确认是否真的碎片化就动参数:先看 /proc/buddyinfo 的高阶块分布,内存绝对不足时调水位没有意义
  • 混淆 boost 与 scale_factor 的作用范围:一个瞬态、一个常驻,改错旋钮会引入长期的回收策略变化
  • 期望随时在 zoneinfo 里看到 boost 值:只有抬升期间才非零,误判为「参数没生效」
  • sysctl -w 后忘记持久化:重启回到默认值,问题在重启后复现,排查方向容易跑偏

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/vm.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌