O Alibaba Cloud Linux 2, a partir da versão do kernel 4.19.91-18.al7, e o Alibaba Cloud Linux 3, a partir da versão do kernel 5.10.60-9.al8, oferecem suporte ao recurso de política de prioridade de out-of-memory (OOM) do subsistema de memória (memcg). Este tópico descreve as interfaces desse recurso e apresenta um exemplo de configuração.
Informações básicas
Nos sistemas de kernel atuais, quando a pressão de memória é alta, o kernel percorre os cgroups para recuperar memória daqueles que mais consomem. Se a recuperação falhar, o kernel pode acionar um evento de out-of-memory (OOM) e encerrar todas as tarefas nesse cgroup. Isso pode impactar severamente serviços críticos em execução no cgroup. Portanto, é fundamental proteger a memória de cgroups com serviços críticos contra recuperação ou garantir que as tarefas nesses cgroups sobrevivam a eventos de OOM. Assim, o kernel consegue selecionar outros cgroups para recuperação de memória ou eliminação por OOM.
Para resolver esse problema, o Alibaba Cloud Linux inclui um recurso de configuração de prioridade de out-of-memory (OOM) do memcg. Durante uma operação de OOM, esse recurso determina as prioridades dos cgroups e seleciona um cgroup de baixa prioridade para a operação.
Funcionalidade da interface de prioridade OOM do memcg
Interface | Descrição |
| Especifica se o recurso de política de prioridade OOM do memcg está ativado. Os valores válidos são 0 e 1. Essa configuração não é herdada pelos cgroups filhos. O valor padrão é 0.
|
| Defina a prioridade do memcg para suportar cargas de trabalho de diferentes níveis de importância. Existem 13 níveis de prioridade. Os valores válidos variam de 0 a 12. Um valor maior indica uma prioridade mais alta. Essa configuração não é herdada pelos cgroups filhos. O valor padrão é 0.
|
Exemplo de configuração da interface
Este exemplo demonstra como crie seis nós filhos de cgroup: A, B, C, D, E e F. Ative a interface memory.use_priority_oom e defina as prioridades de OOM usando a interface memory.priority.
root
/ \
A B
/ \ / \
C D E F
Os valores da interface para cada nível têm o seguinte mapeamento:
A: 10
B: 8
C: 5
D: 6
E: 7
F: 8
-
Conecte-se remotamente à instância ECS.
Para mais informações, consulte Connect to a Linux instance using Workbench.
-
Execute os comandos a seguir para crie dois nós de cgroup, A e B, e ativar o recurso de política de prioridade OOM do memcg.
mkdir /sys/fs/cgroup/memory/A cd /sys/fs/cgroup/memory/A echo 1 >memory.use_priority_oom mkdir /sys/fs/cgroup/memory/B cd /sys/fs/cgroup/memory/B echo 1 >memory.use_priority_oom -
Defina a prioridade OOM do memcg do nó A como 10 e do nó B como 8 executando os seguintes comandos.
cd /sys/fs/cgroup/memory/A echo 10 > memory.priority cd /sys/fs/cgroup/memory/B echo 8 > memory.priority -
Crie os nós filhos C e D sob o nó A e os nós filhos E e F sob o nó B. Em seguida, ative o recurso de política de prioridade OOM do memcg com os comandos abaixo.
mkdir /sys/fs/cgroup/memory/A/C cd /sys/fs/cgroup/memory/A/C echo 1 >memory.use_priority_oom mkdir /sys/fs/cgroup/memory/A/D cd /sys/fs/cgroup/memory/A/D echo 1 >memory.use_priority_oom mkdir /sys/fs/cgroup/memory/B/E cd /sys/fs/cgroup/memory/B/E echo 1 >memory.use_priority_oom mkdir /sys/fs/cgroup/memory/B/F cd /sys/fs/cgroup/memory/B/F echo 1 >memory.use_priority_oom -
Configure as prioridades OOM do memcg para os nós filhos C, D, E e F como 5, 6, 7 e 8, respectivamente, utilizando os comandos a seguir.
cd /sys/fs/cgroup/memory/A/C echo 5 > memory.priority cd /sys/fs/cgroup/memory/A/D echo 6 > memory.priority cd /sys/fs/cgroup/memory/B/E echo 7 > memory.priority cd /sys/fs/cgroup/memory/B/F echo 8 > memory.priority
Ao acionar um erro de OOM com a conta root, o sistema inicia uma consulta iterativa a partir de A e B. Como a prioridade de B é menor que a de A, o sistema continua a consultar E e F sob B. O sistema identifica que E tem a menor prioridade entre os cgroups filhos e aciona um erro de OOM em E.