Quando tarefas sensíveis à latência e tarefas que consomem muitos recursos são executadas no mesmo host, a alocação súbita de memória pelas tarefas intensivas pode reduzir a memória livre até o watermark mínimo global (global wmark_min), causando variação de desempenho nas tarefas sensíveis à latência. O recurso de classificação de watermark mínimo global do memcg permite definir diferentes limiares de watermark para memory cgroups (memcgs) individuais. Assim, as tarefas sensíveis à latência recebem proteção de memória mais robusta, enquanto as tarefas que consomem muitos recursos são limitadas antes de desestabilizar o sistema.
Versões compatíveis:
|
SO |
Versão mínima do kernel |
|
Alibaba Cloud Linux 2 |
|
|
Alibaba Cloud Linux 3 |
|
Como funciona
Esse recurso expõe a interface memory.wmark_min_adj em cada memcg não raiz. O valor padrão da interface é 0 (herdado do grupo pai na criação) e ela não fica armazenada no diretório raiz do memcg. O valor gravado ajusta o watermark mínimo efetivo desse cgroup como um deslocamento percentual em relação ao intervalo de watermark global. Valores válidos: de -25 a 50.
Valor negativo (−25 a −1) — aumenta a prioridade de proteção. O deslocamento é aplicado sobre o intervalo
[0, WMARK_MIN], reduzindo o watermark mínimo efetivo do cgroup para abaixo deglobal wmark_min. A recuperação de memória desse cgroup é adiada, o que diminui a variação de desempenho em tarefas sensíveis à latência. Exemplo:memory.wmark_min_adj=-25define oWMARK_MINdo cgroup comoWMARK_MIN + (WMARK_MIN - 0) × (−25%).Valor positivo (1 a 50) — diminui a prioridade de proteção. O deslocamento é aplicado sobre o intervalo
[WMARK_MIN, WMARK_LOW], elevando o watermark mínimo efetivo do cgroup para acima deglobal wmark_min. A pressão de recuperação de memória sobre esse cgroup aumenta, reduzindo sua qualidade de serviço (QoS) do memcg e impedindo que ele prejudique tarefas de maior prioridade. Exemplo:memory.wmark_min_adj=50define oWMARK_MINdo cgroup comoWMARK_MIN + (WMARK_LOW - WMARK_MIN) × 50%.
Ao atingir o watermark com deslocamento, o sistema aplica limitação. A duração dessa limitação é linearmente proporcional ao excesso de uso de memória, variando entre 1 e 1000 microssegundos.
Valor efetivo em uma hierarquia de memcg multinível
Em um memcg multinível, o kernel calcula um effective memory.wmark_min_adj para cada nó percorrendo todos os níveis ancestrais e selecionando o valor máximo. Nós intermediários com o valor padrão de 0 são excluídos desse cálculo.
Considere a seguinte hierarquia:
root
/ \
A D
/ \
B C
/ \
E F
A tabela a seguir mostra como os valores configurados correspondem aos valores efetivos em cada nó:
|
Nível |
Valor configurado |
Valor efetivo |
|
A |
-10 |
-10 |
|
B |
-25 |
-10 |
|
C |
0 |
0 |
|
D |
50 |
50 |
|
E |
-25 |
-10 |
|
F |
50 |
50 |
Para ler o valor efetivo de um cgroup, execute:
cat /sys/fs/cgroup/memory/<Memcg path>/memory.wmark_min_adj
Substitua <Memcg path> pelo caminho raiz do memcg de destino.
Configure a classificação de watermark
Modificações inadequadas na QoS do memcg podem causar problemas de desempenho de rede, incluindo congestionamento, aumento da latência de encaminhamento e perda de pacotes. Isso afeta a qualidade e a disponibilidade dos seus serviços. Proceda com cautela.
Pré-requisitos
Recomendamos usar este recurso em conjunto com um watermark mínimo global alto. Por exemplo, defina
global wmark_mincomo 2 GB ou mais gravando em/proc/sys/vm/min_free_kbytes.Execute todos os comandos de configuração como usuário
root.
Configure um memcg para tarefa sensível à latência
Defina um ajuste negativo para reduzir o watermark efetivo e aumentar a prioridade de proteção de memória do cgroup.
-
Crie um memcg para a carga de trabalho sensível à latência:
mkdir /sys/fs/cgroup/memory/test-lc -
Defina o ajuste de watermark como
-25:echo -25 > /sys/fs/cgroup/memory/test-lc/memory.wmark_min_adj
Configure um memcg para tarefa que consome muitos recursos
Defina um ajuste positivo para elevar o watermark efetivo e diminuir a prioridade de proteção de memória do cgroup.
-
Crie um memcg para a carga de trabalho que consome muitos recursos:
mkdir /sys/fs/cgroup/memory/test-be -
Defina o ajuste de watermark como
25:echo 25 > /sys/fs/cgroup/memory/test-be/memory.wmark_min_adj