cgroup v1接口集成memcg QoS功能优化内存

内存子系统服务质量(memcg QoS)是Linux系统中用来管理和优化内存资源的功能,支持设置内存保障来锁定特定量的内存以保证关键服务或应用的运行需求,并设置内存上限防止个别任务消耗过多内存影响整个系统稳定性。社区版内核中只有cgroup v2接口支持该功能。在Alibaba Cloud Linux 2(内核版本4.19.91-18.al7开始)和Alibaba Cloud Linux 3新增cgroup v1接口支持memcg QoS的相关功能。

背景信息

在Alibaba Cloud Linux内核中,cgroup v1接口中默认开启memcg QoS功能。关于memcg QoS的更多信息,您可以参见内核文档Documentation/admin-guide/cgroup-v2.rst。内核文档通过Alibaba Cloud Linux的Debuginfo包和源码包获取,获取请参见Alibaba Cloud Linux 2使用说明

注意事项

使用cgroup v1接口的memcg QoS功能时,建议将任务放置在memcg的叶子节点中,例如,/sys/fs/cgroup/memory/<intermediate node>/<leaf node>/tasks路径下。

接口说明

本节介绍Alibaba Cloud Linux内核中cgroup v1接口实现memcg QoS功能的相关接口。

接口

描述

memory.min

绝对锁定内存:即使系统没有可回收的内存,也不会回收该接口锁定的内存,使该cgroup内的进程能够获得设置的最小内存的保证,避免服务性能的下降;适用于为了性能需求,需要保证最小常驻内存的服务。

读写说明如下:

  • 读该接口可以查看memcg锁定的内存大小。

  • 写该接口可以设置memcg锁定的内存大小。

memory.low

相对锁定内存:如果系统没有其他可回收的内存,该接口锁定的内存也会被回收一部分,系统在资源紧张的时候能够做出更合理的内存分配策略;适用于需要一定保护但无需绝对保护的服务,比如非关键业务的应用程序、后台任务等。

读写说明如下:

  • 读该接口可以查看memcg锁定的内存大小。

  • 写该接口可以设置memcg锁定的内存大小。

memory.high

限制memcg的内存使用,读写说明如下:

  • 读该接口可以查看memcg的内存上限。

  • 写该接口可以设置memcg的内存上限。

接口示例

在Alibaba Cloud Linux 3操作系统中,memcg的挂载目录下,例如/sys/fs/cgroup/memory/路径下,分配或限制内存使用。

说明

操作以下命令仅使用root用户。

示例命令如下。

  1. 运行以下命令,创建test_memcg目录。

    mkdir /sys/fs/cgroup/memory/test_memcg
  2. 设置绝对锁定内存。

    1. 运行以下命令,设置绝对锁定内存为200 MB。

      echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.min
    2. 运行以下命令,查看结果。

      cd /sys/fs/cgroup/memory/test_memcg
      cat memory.min
  3. 设置相对锁定内存。

    1. 运行以下命令,设置绝对锁定内存为200 MB。

      echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.low
    2. 运行以下命令,查看结果。

      cd /sys/fs/cgroup/memory/test_memcg
      cat memory.low
  4. 设置限制内存的上限。

    1. 运行以下命令,设置限制内存的上限为1 GB。

      echo 1073741824 > /sys/fs/cgroup/memory/test_memcg/memory.high
    2. 运行以下命令,查看结果。

      cd /sys/fs/cgroup/memory/test_memcg
      cat memory.high