한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L7 SO do servidor (kernel)

Pausas por recuperação e compactação de memória Memory compaction / reclaim stalls (THP)

ID da causa so-reclaim · Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

O processo fica parado enquanto o SO compacta a memória para montar páginas grandes (huge pages) ou recupera memória livre.

Por quê A memória livre diminui, ou o recurso de páginas grandes (THP) dispara a compactação de memória → Efeito A thread que pediu memória espera até a recuperação ou a compactação terminar → Na tela Paradas irregulares do servidor (de alguns ms a centenas de ms)

Sintomas
Travamento, Engasgos
Fatores
Paralisação
Quem é afetado
Servidor inteiro
Quando
Quanto mais tempo ligado, Aleatoriamente, de vez em quando
Responsável
Responsável principal Infraestrutura de servidores (Equipe de infraestrutura) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Reduzir alocações grandes durante a execução (reservar na inicialização e reutilizar).
O que fazer (Equipe de infraestrutura)
Configurar as páginas grandes (THP) para uso só onde for preciso (madvise), aumentar a reserva de memória livre (vm.min_free_kbytes etc.).
No gráfico
Picos aleatórios · Tempo de tick do servidor, PSI de memória
Onde olhar
Ver some e full em /proc/pressure/memory (proporção do tempo parado esperando memória) e o aumento de compact_stall em /proc/vmstat junto com o tempo de tick do servidor, e conferir a configuração em /sys/kernel/mm/transparent_hugepage/defrag
Confirma se
A PSI de memória sobe e compact_stall aumenta nos momentos de pico do tick. defrag está em always
Descarta se
PSI e compact_stall parados: não é esta causa. Uso de swap subindo: “Swap”
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. Transparent Hugepage Support Linux kernel
    Com defrag=always, quando a alocação de THP falha, o kernel recupera e compacta memória ali mesmo, parando o processo; com madvise, isso só acontece nas regiões que pediram
  2. Documentation for /proc/sys/vm/ Linux kernel
    min_free_kbytes: reserva mínima de memória livre (watermark) que o kernel mantém
  3. PSI - Pressure Stall Information Linux kernel
    some (proporção do tempo em que algumas tarefas ficaram paradas esperando memória) e full (proporção do tempo em que todas ficaram paradas) em /proc/pressure/memory

Veja também

Mesma camada: L7 SO do servidor (kernel)

Mesmo sintoma (Travamento) em outras camadas

Ver o card interativo, com figuras e simulações