Cuando las tareas sensibles a la latencia y las que consumen muchos recursos se ejecutan en el mismo host, las asignaciones repentinas de memoria de estas últimas pueden llevar la memoria libre hasta la marca de agua mínima global (global wmark_min). Esto provoca fluctuaciones de rendimiento en las tareas sensibles a la latencia. La función de clasificación de marca de agua mínima global de memcg le permite asignar distintos umbrales de marca de agua a cada memory cgroup (memcg) individual. De este modo, las tareas sensibles a la latencia obtienen una mayor protección de memoria y las tareas que consumen muchos recursos se limitan antes de desestabilizar el sistema.
Versiones compatibles:
|
Sistema operativo |
Versión mínima del kernel |
|
Alibaba Cloud Linux 2 |
|
|
Alibaba Cloud Linux 3 |
|
Funcionamiento
Esta función expone la interfaz memory.wmark_min_adj en cada memcg que no es raíz. El valor predeterminado de la interfaz es 0 (se hereda del grupo padre cuando se crea la interfaz) y no se almacena en el directorio raíz del memcg. El valor que escriba ajusta la marca de agua mínima efectiva de ese cgroup como un porcentaje de desplazamiento respecto al rango de la marca de agua global. Valores válidos: de -25 a 50.
Valor negativo (−25 a −1): aumenta la prioridad de protección. El desplazamiento se aplica sobre el rango
[0, WMARK_MIN], lo que reduce la marca de agua mínima efectiva del cgroup por debajo deglobal wmark_min. La recuperación de memoria de este cgroup se pospone, lo cual reduce las fluctuaciones de rendimiento en las tareas sensibles a la latencia. Por ejemplo,memory.wmark_min_adj=-25establece elWMARK_MINdel cgroup enWMARK_MIN + (WMARK_MIN - 0) × (−25%).Valor positivo (1 a 50): reduce la prioridad de protección. El desplazamiento se aplica sobre el rango
[WMARK_MIN, WMARK_LOW], lo que eleva la marca de agua mínima efectiva del cgroup por encima deglobal wmark_min. La presión de recuperación de memoria sobre este cgroup aumenta, lo que reduce su calidad de servicio (QoS) de memcg y evita que desplace a las tareas de mayor prioridad. Por ejemplo,memory.wmark_min_adj=50establece elWMARK_MINdel cgroup enWMARK_MIN + (WMARK_LOW - WMARK_MIN) × 50%.
Al alcanzar la marca de agua con el desplazamiento aplicado, se aplica la limitación. La duración de esta limitación es directamente proporcional al exceso de uso de memoria, dentro de un rango de 1 a 1000 microsegundos.
Valor efectivo en una jerarquía de memcg multinivel
En un memcg multinivel, el kernel calcula un effective memory.wmark_min_adj para cada nodo. Para ello, recorre todos los niveles superiores y toma el valor máximo. Los nodos intermedios con el valor predeterminado de 0 se excluyen de este cálculo.
Considere a continuación la siguiente jerarquía:
root
/ \
A D
/ \
B C
/ \
E F
La tabla siguiente muestra cómo los valores configurados corresponden a los valores efectivos en cada nodo:
|
Nivel |
Valor configurado |
Valor efectivo |
|
A |
-10 |
-10 |
|
B |
-25 |
-10 |
|
C |
0 |
0 |
|
D |
50 |
50 |
|
E |
-25 |
-10 |
|
F |
50 |
50 |
Para consultar el valor efectivo de un cgroup, ejecute:
cat /sys/fs/cgroup/memory/<Memcg path>/memory.wmark_min_adj
Reemplace <Memcg path> con la ruta raíz del memcg de destino.
Configurar la clasificación de marca de agua
Las modificaciones incorrectas en la QoS de memcg pueden causar problemas de rendimiento de red, como congestión de red, mayor latencia de reenvío y pérdida de paquetes. Esto afecta la calidad y disponibilidad de su negocio. Proceda con precaución.
Requisitos previos
Se recomienda usar esta función junto con una marca de agua mínima global alta. Por ejemplo, establezca
global wmark_minen 2 GB o más mediante una escritura en/proc/sys/vm/min_free_kbytes.Ejecute todos los comandos de configuración con el usuario
root.
Configurar un memcg para tareas sensibles a la latencia
Establezca un ajuste negativo para reducir la marca de agua efectiva y aumentar la prioridad de protección de memoria del cgroup.
-
Cree un memcg para la carga de trabajo sensible a la latencia:
mkdir /sys/fs/cgroup/memory/test-lc -
Establezca el ajuste de la marca de agua en
-25:echo -25 > /sys/fs/cgroup/memory/test-lc/memory.wmark_min_adj
Configurar un memcg para tareas que consumen muchos recursos
Establezca un ajuste positivo para elevar la marca de agua efectiva y reducir la prioridad de protección de memoria del cgroup.
-
Cree un memcg para la carga de trabajo que consume muchos recursos:
mkdir /sys/fs/cgroup/memory/test-be -
Establezca el ajuste de la marca de agua en
25:echo 25 > /sys/fs/cgroup/memory/test-be/memory.wmark_min_adj