You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为测试自研页面回收算法,如何禁用Linux内核默认page frame reclamation与swapping?

禁用Linux内核默认页面回收与交换机制的方法

1. 快速禁用swap功能

  • 立即停止所有swap操作:执行 swapoff -a,这会让内核停止往swap分区读写数据,但默认的页面回收逻辑仍会运行——毕竟内存不足时内核还是会尝试回收文件页这类可释放的内存。
  • 永久禁用swap:把 /etc/fstab 里所有swap相关的配置行注释掉,避免系统启动时自动挂载swap分区。

2. 内核编译层面彻底禁用默认回收逻辑

如果要完全替换默认的页面回收机制,需要修改内核源码后重新编译:

  • 关闭后台回收守护进程:找到 mm/vmscan.c 中的 kswapd_run() 调用,直接注释掉,负责后台页面回收的kswapd就不会启动了。
  • 关闭swap相关编译选项:在内核配置中关掉 CONFIG_SWAP,这会直接移除所有swap相关代码,同时砍掉依赖swap的那部分页面回收逻辑;另外 CONFIG_ZSWAP、CONFIG_ZRAM 这类swap增强功能也需要一并关闭。
  • 移除紧急回收触发点:注释掉 try_to_free_pages() 函数的调用,这是内核在内存不足时触发直接回收的入口,注释后默认回收机制就不会被触发。

3. 运行时调参限制默认回收行为

虽然没法完全禁用,但可以通过sysctl参数大幅降低默认回收的触发概率:

  • 设置 vm.swappiness=0:让内核尽可能避免使用swap,但文件页的回收操作仍会正常进行。
  • 调大 vm.min_free_kbytes:把这个参数设为一个接近系统总内存一半的数值(不能超过一半,否则系统可能无法启动),让内核始终保留大量空闲内存,从而避免触发页面回收。

注意事项

  • 禁用默认回收后,你的自研算法必须能完全接管内存管理,否则系统在内存不足时会直接触发OOM崩溃。
  • 修改内核源码时要注意依赖关系,部分子系统可能会调用默认的回收函数,需要做好兼容处理,避免编译失败或运行时panic。

内容的提问来源于stack exchange,提问作者Rohit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:50:02