La función de calidad de servicio (QoS) del grupo de control de memoria (memcg) permite gestionar los recursos de memoria y optimizar su uso en los sistemas operativos Linux. Con esta función, puede bloquear una cantidad específica de memoria para cumplir con los requisitos de servicios o aplicaciones críticas. También sirve para establecer un límite máximo de uso de memoria y evitar la inestabilidad del sistema que provocan las tareas con alto consumo de memoria. En las versiones comunitarias del kernel de Linux, la función memcg QoS solo es compatible con la interfaz cgroup v2. En Alibaba Cloud Linux 2, a partir de la versión del kernel 4.19.91-18.al7, y en Alibaba Cloud Linux 3, la función memcg QoS también es compatible con la interfaz cgroup v1.
Contexto
De forma predeterminada, la función memcg QoS está habilitada en la interfaz cgroup v1 del kernel de Alibaba Cloud Linux. Para obtener más información sobre la función memcg QoS, consulte Documentation/admin-guide/cgroup-v2.rst. Este documento del kernel se obtiene desde el paquete Debuginfo y el paquete de código fuente de Alibaba Cloud Linux. Para más detalles, consulte Use Alibaba Cloud Linux 2.
Notas de uso
Cuando utilice la función memcg QoS de la interfaz cgroup v1, coloque sus tareas en un nodo hoja de memcg. A continuación se muestra un ejemplo de ruta de tarea: /sys/fs/cgroup/memory/<intermediate node>/<leaf node>/tasks.
Descripción de la interfaz
A continuación se describen las interfaces que implementan la función memcg QoS de la interfaz cgroup v1 en el kernel de Alibaba Cloud Linux.
Interfaz | Descripción |
memory.min | Bloquea de forma absoluta una cantidad específica de memoria. La memoria que bloquea esta interfaz no se recupera, incluso si el sistema no tiene otra memoria available para recuperar. Esto garantiza que los procesos del cgroup obtengan la cantidad mínima especificada de memoria y evita la degradación del rendimiento del servicio. Esta interfaz es adecuada para servicios que requieren una cantidad mínima garantizada de memoria residente para cumplir con los requisitos de rendimiento. Las operaciones de lectura y escritura son las siguientes:
|
memory.low | Bloquea de forma relativa una cantidad específica de memoria. El sistema recupera parcialmente la memoria que bloquea esta interfaz cuando no hay otra memoria available para recuperar. De este modo, el sistema ajusta la asignación de memoria de manera más razonable cuando los recursos son insuficientes. Esta interfaz es adecuada para servicios que necesitan protección básica, pero no absoluta, como las aplicaciones empresariales no críticas y las tareas en segundo plano. En esta interfaz se ejecutan las siguientes operaciones de lectura y escritura:
|
memory.high | Limita el uso de memoria. En esta interfaz se ejecutan las siguientes operaciones de lectura y escritura:
|
Ejemplos de API
En Alibaba Cloud Linux 3, asigne memoria o especifique un límite máximo de uso de memoria en el directorio de montaje de memcg, por ejemplo, /sys/fs/cgroup/memory/.
Ejecute los siguientes comandos únicamente como usuario root.
Comandos de ejemplo:
-
Cree el directorio test_memcg con el siguiente comando:
mkdir /sys/fs/cgroup/memory/test_memcg -
Bloquee de forma absoluta una cantidad específica de memoria.
-
Bloquee de forma absoluta 200 MB de memoria con el siguiente comando:
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.min -
Consulte el resultado con el siguiente comando:
cd /sys/fs/cgroup/memory/test_memcg cat memory.min
-
-
Bloquee de forma relativa una cantidad específica de memoria.
-
Establezca la memoria bloqueada de forma absoluta en 200 MB con el siguiente comando:
echo 209715200 > /sys/fs/cgroup/memory/test_memcg/memory.low -
Consulte el resultado con el siguiente comando:
cd /sys/fs/cgroup/memory/test_memcg cat memory.low
-
-
Especifique un límite máximo de uso de memoria.
-
Establezca el límite máximo de uso de memoria en 1 GB con el siguiente comando:
echo 1073741824 > /sys/fs/cgroup/memory/test_memcg/memory.high -
Consulte la salida con el siguiente comando:
cd /sys/fs/cgroup/memory/test_memcg cat memory.high
-