cgroup异步内存回收
需求背景
申请内存时,如果超过memory.high警示值,引发同步的内存回收任务,影响业务性能。
为解决此问题,HCE 2.0和HCE 3.0增加cgroup级别的异步内存回收功能。减少触发memory.high引发的同步内存回收,提高性能。
约束与限制
memory.high_async_ratio异步内存回收需与memory.high共同发挥作用。
cgroup异步内存回收接口说明
cgroup级别异步回收功能的警戒水位线和安全水位线是基于memory.high和memory.high_async_ratio共同决定的。当内存申请达到警戒水位线时,会触发异步内存回收,尽可能将内存回收到安全水位线;当内存申请超过异步回收速度,达到memory.high警戒值,则会触发同步内存回收。
- 警戒水位线 = memory.high * memory.high_async_ratio / 100
- 安全水位线 = memory.high * (memory.high_async_ratio - 10) / 100
memory.high和memory.high_async_ratio的关系:
- 当memory.high一定时,memory.high_async_ratio取值越大,说明触发异步回收的阈值越高,不容易触发异步回收,但是容易触发同步回收,对于性能提高影响不大。
- 当memory.high一定时,memory.high_async_ratio取值越小,说明触发异步回收的阈值越低,可能导致过度起workqueue,异步回收动作实际不容易被调度到。
| 接口 | 说明 |
|---|---|
| memory.high_async_ratio | 警戒水位线控制百分比。取值类型为整数形式,取值范围为11~100,默认值为100(即不开启异步内存回收)。
|
接口示例
- 创建测试文件。
mkdir /sys/fs/cgroup/memory/memcg_test_1/
- 查看memory.high_async_ratio接口值。
cat /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio 100
- 配置memory.high_async_ratio接口。
echo 80 > /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio
- 查看memory.high_async_ratio接口值。
cat /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio 80