更新时间:2026-08-13 GMT+08:00
分享

cgroup异步内存回收

需求背景

申请内存时,如果超过memory.high警示值,引发同步的内存回收任务,影响业务性能。

为解决此问题,HCE 2.0HCE 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,异步回收动作实际不容易被调度到。
图1 异步内存回收示意图
表1 memory.high_async_ratio接口说明

接口

说明

memory.high_async_ratio

警戒水位线控制百分比。取值类型为整数形式,取值范围为11~100,默认值为100(即不开启异步内存回收)。

  • 读该接口可以查看警戒水位线控制百分比
  • 写该接口可以设置警戒水位线控制百分比

接口示例

  1. 创建测试文件。
    mkdir /sys/fs/cgroup/memory/memcg_test_1/
  2. 查看memory.high_async_ratio接口值。
    cat /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio
    100
  3. 配置memory.high_async_ratio接口。
    echo 80 > /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio
  4. 查看memory.high_async_ratio接口值。
    cat /sys/fs/cgroup/memory/memcg_test_1/memory.high_async_ratio
    80

相关文档