Em servidores com duas CPUs, usar a memória ligada à outra CPU deixa o acesso mais lento.
Por quê A thread e a memória ficam em sockets de CPU diferentes → Efeito O acesso à memória fica mais lento (1,5–2 vezes, conforme o hardware) → Na tela Mesma configuração de hardware, mas desempenho diferente em cada processo
Responsável principal Infraestrutura de servidores (Equipe de infraestrutura)
O que fazer (Equipe de infraestrutura)
Fixar processo e memória em um socket (numactl), separar os processos do servidor do jogo por socket quando houver dois sockets.
No gráfico
Alto só em alguns · Tempo de tick por processo, memória por nó
Onde olhar
Com numastat -p PID, ver em que nó NUMA está a memória do processo do servidor do jogo e se numa_miss e other_node do numastat estão crescendo; comparar com o nó da CPU em que o processo roda
Confirma se
Só nos processos lentos a maior parte da memória fica em um nó diferente da CPU em que rodam, e a diferença some ao reiniciá-los com CPU e memória fixadas em um só nó via numactl
Descarta se
Lento mesmo com a mesma distribuição de nós dos processos rápidos: outra causa, como noisy neighbor, throttling de CPU ou carga daquele processo
Como verificar
Ferramentas de infra (sem precisar do código do jogo)
Fontes
What is NUMA?Linux kernel A memória da mesma célula é mais rápida e tem mais largura de banda; a memória de outra célula (remota) tem acesso mais lento
numactl(8) — Linux manual pagenumactl --cpunodebind e --membind fixam a CPU e a memória do processo em um nó NUMA específico
numastat(8) — Linux manual pagenumactl Contadores numa_miss (alocação fora do nó desejado) e other_node (alocação neste nó por um processo rodando em outro nó); -p mostra a memória do processo por nó