** Nota: Recuperação para a posteridade **
Seu problema está aqui
# No alternate memory nodes if the system is not NUMA
# On computenodes use all available cores
cpuset {
cpuset.mems="0";
cpuset.cpus="0-47";
}
}
Você está sempre usando o um nó da memória. Você precisa definir isso para usar todos nós da memória.
Eu também acho que o abaixo também se aplica, e você verá o problema ainda a menos que você saiba sobre o abaixo. Então, deixando a posteridade.
Esse problema basicamente se resume ao hardware que está sendo usado. O kernel tem uma heurística para determinar o valor desse switch. Isso altera como o kernel determina a pressão da memória em um sistema NUMA.
zone_reclaim_mode:
Zone_reclaim_mode allows someone to set more or less aggressive approaches to
reclaim memory when a zone runs out of memory. If it is set to zero then no
zone reclaim occurs. Allocations will be satisfied from other zones / nodes
in the system.
This is value ORed together of
1 = Zone reclaim on
2 = Zone reclaim writes dirty pages out
4 = Zone reclaim swaps pages
zone_reclaim_mode is set during bootup to 1 if it is determined that pages
from remote zones will cause a measurable performance reduction. The
page allocator will then reclaim easily reusable pages (those page
cache pages that are currently not used) before allocating off node pages.
It may be beneficial to switch off zone reclaim if the system is
used for a file server and all of memory should be used for caching files
from disk. In that case the caching effect is more important than
data locality.
Allowing zone reclaim to write out pages stops processes that are
writing large amounts of data from dirtying pages on other nodes. Zone
reclaim will write out dirty pages if a zone fills up and so effectively
throttle the process. This may decrease the performance of a single process
since it cannot use all of system memory to buffer the outgoing writes
anymore but it preserve the memory on other nodes so that the performance
of other processes running on other nodes will not be affected.
Allowing regular swap effectively restricts allocations to the local
node unless explicitly overridden by memory policies or cpuset
configurations.
Para lhe dar uma idéia do que está acontecendo, a memória é dividida em zonas, isso é especificamente útil em sistemas NUMA, nos quais a RAM está ligada a CPUs específicas. Nesses hosts, a localidade de memória pode ser um fator importante no desempenho. Se, por exemplo, os bancos de memória 1 e 2 são atribuídos à CPU física 0, a CPU 1 pode acessar isso, mas com o custo de bloquear essa RAM da CPU 0, o que causa uma degradação de desempenho.
No linux, o zoneamento reflete o layout NUMA da máquina física. Cada zona tem 16 GB de tamanho.
O que está acontecendo no momento com a recuperação de zona é que o kernel está optando por recuperar (gravar páginas sujas em disco, remover cache de arquivos, trocar memória) em uma zona completa (16 GB) em vez de permitir que o processo aloque memória em outra zona (o que afetará o desempenho nessa CPU. É por isso que você percebe a troca após 16 GB.
Se você desativar este valor, isso deve alterar o comportamento do kernel não recuperar agressivamente os dados da zona e, em vez disso, alocar de outro nó.
Tente desativar zone_reclaim_mode
executando sysctl -w vm.zone_reclaim_mode=0
no seu sistema e, em seguida, executando novamente o teste.
Observe que os processos de alta memória de longa execução executados em uma configuração como essa com zone_reclaim_mode
off se tornarão cada vez mais caros com o tempo.
Se você permitir que vários processos diferentes sejam executados em várias CPUs diferentes, todos usando muita memória para usar qualquer nó com páginas livres, você poderá renderizar efetivamente o desempenho do host a algo parecido com apenas 1 CPU física.