vm.cache_reclaim_enable和vm.cache_reclaim_ratio的使用

系统版本:openEuler-22.03-LTS
架构:ARM64
内核版本:5.10.0-60.18.0.50.oe2203.aarch64
客户在机器上启动kafka服务,一直进行生产消费,这种情况下pagecache占用内存会快速上升。服务器总共256GB内存,pagecache使用了200GB。然后想通过修改vm.cache_reclaim_enable和vm.cache_reclaim_ratio两个参数达到实现pagecache回收的目的。客户发现当修改vm.cache_reclaim_enable=1和vm.cache_reclaim_ratio=50时,pagecache并没有被回收,还是保持200GB,所以客户有以下两个疑问:
1、 为什么参数不生效,如果是修改的有问题,那么正确的修改是怎么样的?
2、 发现目前cache_reclaim_ratio参数在5.10.0-60.18.0.50.oe2203.aarch64这个内核版本中有,但是在最新的update版本中不存在了,并且其他22.03-LTS-SPX的系统版本上都没这个cache_reclaim_ratio参数,这个是为什么?
解决方案:
问题1:
从代码逻辑上分析,如果需要进行pagecacehe回收,需要配置以下几个参数:
1、 pagecache_reclaim_enable(必须配置, 对应内核参数cache_reclaim_enable。代表是否使能page cache limit 功能)
2、 pagecache_limit_ratio(必须配置,对应内核参数cache_limit_ratio。非0,代表回收的阈值,当系统page cache 大于该阈值时,回收内存至该水线位)
3、 pagecache_reclaim_ratio(选配,对应内核参数cache_reclaim_ratio。激进回收page cache 内存,可回收内存至pagecache_limit_ratio-pagecache_reclaim_ratio 该水位线。不建议激进,可能会出现大量回收内存导致 系统性能短暂出现波动。)
问题2:
后期版本删除了cache_reclaim_ratio内核参数,并将该参数对应的功能拆分成以下两个功能:
1、 周期性回收
2、 page cache 上限回收
对应的内核参数为:
1、 cache_reclaim_enable:表示page cache限制的功能的使能开关
2、 cache_limit_mbytes:表示cache的上限,以M为单位
3、 cache_reclaim_s:表示定期触发cache回收的时间,以秒为单位系统
4、 cache_reclaim_weight:表示每次回收的权值,假设node上N个CPU,则每个node每次回收N * 32 * cache_reclaim_weight个page
可以参考以下文档:

2 Likes