Alibaba Cloud Linux 2在4.19.81-17.al7
内核版本增加了内存子系统(memcg)后台异步回收功能。本文介绍实现memcg后台异步回收功能的接口。
背景信息
在社区内核系统中,系统分配内存并在相应memcg中的统计达到memcg设定的内存上限时,会触发memcg级别的直接内存回收。直接内存回收是发生在内存分配上下文的同步回收,因此会影响当前进程的性能。
为了解决这个问题,Alibaba Cloud Linux 2增加了memcg粒度的后台异步回收功能。该功能的实现不同于全局kswapd内核线程的实现,并没有创建对应的memcg kswapd内核线程,而是采用了workqueue机制来实现,并在cgroup v1和cgroup v2两个接口中,均新增了4个memcg控制接口。
注意事项:
- 当前memcg的内存分配,可能会递归触发父组的后台异步回收。
- 触发memcg后台异步回收时,会从当前被触发的memcg开始,自上而下做层级回收。
- 当memory.high接口被配置,并且memory.high的值比memory.limit_in_bytes接口的值小的时候,接口memory.wmark_high和memory.wmark_low水位线的计算将基于memory.high而不是memory.limit_in_bytes。
memcg后台异步回收功能接口说明
接口 | 说明 |
---|---|
memory.wmark_ratio | 该接口用于设置是否启用memcg后台异步回收功能,以及设置异步回收功能开始工作的memcg内存水位线。单位是相对于memcg limit的百分之几。取值范围:0~100
|
memory.wmark_high | 只读接口,说明如下:
|
memory.wmark_low | 只读接口,说明如下:
|
memory.wmark_scale_factor | 该接口用于控制memory.wmark_high和memory.wmark_low之间的间隔。单位是相对于memcg limit的万分之几。取值范围:1~1000
|