Todos os produtos
Search
Central de documentação

Alibaba Cloud Linux:Memcg backend asynchronous reclaim

Última atualização: Jun 29, 2026

Quando o uso de memória de um memcg atinge o limite, o kernel aciona a reclamação direta de memória. Essa operação síncrona ocorre no caminho de alocação e bloqueia o processo atual. Para eliminar essa latência, o Alibaba Cloud Linux oferece a reclamação assíncrona de backend para memcgs. O kernel recupera memória em segundo plano antes que o uso atinja o limite rígido; assim, os processos não ficam bloqueados aguardando a conclusão da reclamação.

Este recurso está disponível nas seguintes versões:

  • Alibaba Cloud Linux 2 com versão de kernel 4.19.81-17.al7 ou posterior

  • Alibaba Cloud Linux 3 com versão de kernel 5.10.134-12.al8 ou posterior

Aviso

Considere os seguintes comportamentos antes de ativar este recurso:

  • A alocação de memória em um memcg existente pode acionar recursivamente a reclamação assíncrona de backend no cgroup pai.

  • A reclamação começa no memcg onde foi acionada e prossegue de cima para baixo na hierarquia do cgroup.

  • Se memory.high for definido com um valor menor que memory.limit_in_bytes, os valores de memory.wmark_high e memory.wmark_low serão calculados com base em memory.high em vez de memory.limit_in_bytes.

Como funciona

O recurso introduz um mecanismo baseado em marcas d'água. Defina memory.wmark_ratio como uma porcentagem do limite do memcg para estabelecer uma marca d'água alta (memory.wmark_high). Quando o uso de memória ultrapassa essa marca, o kernel inicia a reclamação assíncrona de memória em segundo plano. A reclamação é interrompida quando o uso cai abaixo de uma marca d'água baixa (memory.wmark_low), derivada de memory.wmark_high com um deslocamento definido por um fator de escala configurável.

Isso cria uma zona de buffer: a reclamação ocorre em segundo plano antes que o limite rígido seja atingido, evitando as paralisações abruptas causadas pela reclamação direta.

Referência da interface

memory.wmark_ratio

Leitura e gravação. Ative o recurso e defina a marca d'água alta como uma porcentagem do limite do memcg.

  • Valores válidos: 0–100

  • Padrão: 0 (recurso desativado)

  • Ao definir um valor diferente de zero, você ativa o recurso e recalcula memory.wmark_high.

memory.wmark_high

Somente leitura. Limiar de uso de memória que aciona a reclamação assíncrona de backend.

  • Fórmula: memory.wmark_high = memory.limit_in_bytes x memory.wmark_ratio / 100

  • Quando o recurso está desativado (memory.wmark_ratio = 0), este valor assume o máximo possível para evitar acionamentos.

  • Não presente no diretório raiz do memcg.

memory.wmark_low

Somente leitura. Limiar de uso de memória no qual a reclamação assíncrona de backend é interrompida.

  • Fórmula: memory.wmark_low = memory.wmark_high - memory.limit_in_bytes x memory.wmark_scale_factor / 10000

  • Não presente no diretório raiz do memcg.

memory.wmark_scale_factor

Leitura e gravação. Controla a diferença entre memory.wmark_high e memory.wmark_low.

  • Unidade: 0,01% do limite do memcg

  • Valores válidos: 1–1000

  • Padrão: 50 (0,50% do limite do memcg), herdado do cgroup pai durante a criação do memcg

  • Não presente no diretório raiz do memcg.

Ative a reclamação assíncrona de backend

O exemplo a seguir cria um memcg de teste, define um limite de memória de 1 GB, ativa o recurso com uma marca d'água de 95% e verifica os valores resultantes da interface.

  1. Crie um memcg de teste.

    sudo mkdir /sys/fs/cgroup/memory/test/
  2. Defina o limite de memória como 1 GB.

    sudo sh -c 'echo 1G > /sys/fs/cgroup/memory/test/memory.limit_in_bytes'
  3. Ative a reclamação assíncrona de backend definindo memory.wmark_ratio como 95. Isso configura memory.wmark_high para 95% do limite do memcg.

    sudo sh -c 'echo 95 > /sys/fs/cgroup/memory/test/memory.wmark_ratio'
  4. Verifique os valores da interface para confirmar a configuração.

    Leia memory.wmark_scale_factor. O valor padrão herdado é 50, o que representa 0,50% do limite do memcg.

    cat /sys/fs/cgroup/memory/test/memory.wmark_scale_factor

    Leia memory.wmark_high para confirmar a marca d'água alta.

    cat /sys/fs/cgroup/memory/test/memory.wmark_high

    Leia memory.wmark_low para confirmar a marca d'água baixa.

    cat /sys/fs/cgroup/memory/test/memory.wmark_low