O comportamento que você está vendo se deve à maneira como o Linux aloca memória em um sistema NUMA.
Estou assumindo (sem saber) que o sistema de 32GB não é uma, ou não é o suficiente para o Linux se importar.
O comportamento de como lidar com uma é ditado pela opção /proc/sys/vm/zone_reclaim_mode
. Por padrão, o Linux detectará se você está usando um sistema num e mudará os sinalizadores de recuperação se achar que isso daria um melhor desempenho.
A memória é dividida em zonas, em um sistema há uma zona para o primeiro soquete de CPU e uma zona para o segundo. Eles aparecem como node0
e node1
. Você pode vê-los se você cat /proc/buddyinfo
.
Quando o modo de recuperação da zona é definido como 1, a alocação do primeiro soquete da CPU fará com que a recuperação ocorra na zona de memória associada a essa CPU, porque é mais eficiente em termos de desempenho recuperar de um local numa nó. Reclamar nesse sentido é derrubar páginas como limpar o cache ou trocar coisas nesse nó.
Definir o valor como 0 faz com que não ocorram reclamações se a zona estiver sendo preenchida, em vez disso, alocando as zonas da parte estrangeira para a memória. Isso tem um custo de bloqueio de bloqueio da outra CPU para obter acesso exclusivo a essa zona de memória.
But then it instantly start swaping! after a few secouns: Mem: 66004536k total, 65733796k used, 270740k free, 34250384k buffers Swap: 10239992k total, 1178820k used, 9061172k free, 91388k cached
Comportamento de troca e quando trocar é determinado por alguns fatores, sendo um deles o quão ativas as páginas são que foram alocadas aos aplicativos. Se eles não estiverem muito ativos, eles serão trocados em favor do trabalho mais ocupado ocorrendo no cache. Presumo que as páginas nas suas VMs não sejam ativadas com muita frequência.