Como especificar região de memória para o ramdrive

6

Estamos montando um cluster de benchmarking baseado em Linux. Cada nó será uma máquina sem disco e sem disco, inicializada via tftp, o SO copiado para uma ramdrive local e a mesma ramdrive é usada como unidade local pelo aplicativo com marca de referência. Meu problema é o seguinte:

As máquinas têm 2 CPUs, cada uma com seus próprios bancos de memória e 4 canais de memória para esses bancos (assim, os bancos são preenchidos com múltiplos chips de memória para obter o máximo rendimento de memória). Se eu não puder controlar quais regiões de memória são usadas para o disco virtual, talvez seja possível que ele seja criado em uma região que esteja em um único canal e use toda a memória nesse chip. O que significa que quando meu aplicativo está em execução, os encadeamentos executados na CPU de cujo banco de memória o ramdisk foi tirado teriam 25% menos largura de banda de memória para sua memória "local" do que os encadeamentos na outra cpu. Isso seria BAD . Daí o desejo de controlar quais regiões da memória são usadas pelo disco virtual.

Ou isso não é um problema e eu posso confiar no controlador de memória para distribuir os endereços de memória contíguos entre os chips nos 4 canais? Isso faria sentido, já que isso maximizaria a largura de banda da memória ao puxar grandes pedaços de memória para o cache.

Eu simplesmente não sei como essas coisas funcionam e gostaria de receber algum esclarecimento ...

    
por LaszloLadanyi 16.06.2016 / 17:30

1 resposta

2

Você está usando tmpfs para o suporte a ramdisk?

Se assim for, você pode usar o parâmetro mpol para atribuir a um nó NUMA específico (Por favor, note que seu kernel precisa de CONFIG_NUMA ativado).

mount -t tmpfs -o size=32g,mpol=prefer:0 tmpfs /mnt/ramdisk criaria um disco virtual de 32GB preferido no nó NUMA 0 montado em / mnt / ramdisk

A documentação do tmpfs é muito boa: link

    
por 23.05.2017 / 13:29