virt-manager: Particionando a memória disponível

2

Eu tenho um hypervisor que usa o kvm e o virt-manager para lidar com as máquinas virtuais.

O hipervisor tem 6GBytes de memória.

Se eu adicionar uma nova máquina virtual, não sei quanta memória ainda está livre.

Pelo menos a caixa de diálogo do virt-manager não mostra:

Existeumaferramentaquemeajudaaencontrarumvalormáximocorrespondente?

Exemplo:

  • 6GBdememóriatotaldohost
  • 2GBatribuídosaohost"host-one"
  • GB para host "host-dois".

Acima é apenas um exemplo simples. Em nossos servidores reais, temos muito mais hosts virtuais.

Eu tenho medo de dar muita memória aos hosts virtuais. Isso resulta em impacto pesado no desempenho se o hipervisor tiver muito poucos. Se eu der 4GB de "host-dois", o hipervisor ficaria "em chamas", já que "não há ar para respirar".

Existe uma ferramenta que pode me ajudar a decidir quanta memória está disponível?

    
por guettli 28.04.2016 / 15:22

3 respostas

2

Como diz a documentação do Redhat que você relacionou sobre supercomprometimento de memória,

"As máquinas virtuais convidadas em execução em um hipervisor KVM não possuem blocos dedicados de RAM física atribuídos a elas. Em vez disso, cada máquina virtual guest funciona como um processo Linux onde o kernel Linux da máquina física aloca memória apenas quando solicitado."

Isso faz com que toda a situação de determinar a quantidade de memória RAM que você pode / deva alocar para cada host seja um pouco confusa, infelizmente. Uma ferramenta que você pode usar para visualizar a memória alocada entre as VMs é virsh e sua comando freecell .

A página man do virsh afirma que freecell, "Imprime a quantidade de memória disponível na máquina ou dentro de uma célula NUMA. O comando freecell pode fornecer uma das três exibições diferentes de memória disponível na máquina, dependendo das opções especificadas .... "

Para hipervisores baseados em KVM, você pode usar o comando shell da máquina virtual ( virsh ) em um terminal para entrar no shell virtual - seu prompt deve mudar de seu padrão para virsh # . Em seguida, você pode usar o comando list para exibir uma lista de máquinas virtuais no hypervisor.

Para exibir a quantidade de memória por VM (por seu número mostrado pelo comando list ), use:

virsh # freecell <cell_number> 

Você também pode passar o sinal --all em vez de um número de célula para mostrar a quantidade de memória alocada para cada uma das VMs e para a máquina inteira.

Isso deve lhe dar uma boa idéia da memória total com a qual você está trabalhando e quanto está alocado para cada VM. Se você decidir que deseja alterar a quantidade de memória alocada, o virsh também fornece o comando setmem para alterar a alocação de memória de um domínio de convidado. É semelhante à interface fornecida pelo virt-manager, mas oferece mais opções e flexibilidade. Você pode encontrar todas as opções e descrições de comandos com man virsh .

    
por 12.05.2016 / 19:26
1

Se você quiser ser realmente seguro e não exagerar na memória, uma alternativa é ativar páginas enormes em seu host e fazer com que suas máquinas virtuais as usem. A desvantagem é que você realmente precisa ter toda a memória de que precisa - a memória do host e a memória da VM serão basicamente separadas.

Você pode ter um controle melhor sobre como páginas enormes são usadas se você desabilitar as páginas maiores anônimas (inicializar com transparent_hugepages=never ) e então você pode atribuir um pool de páginas grandes como quiser (inicialize com default_hugepagesz=2M hugepagesz=2M hugepages=2560 para 5GB de memória e deixando 1GB para o sistema operacional host).

Você também precisará adicionar isso à sua definição de VM.

<memoryBacking>
  <hugepages/>
</memoryBacking>

E, para responder à sua pergunta, se você usar as páginas de entrada, a "quantidade de memória" será respondida por grep ^Huge /proc/meminfo . Aqui está um exemplo com 60G reservados para VMs e cerca de 600MB ainda disponíveis.

> grep ^Huge /proc/meminfo
HugePages_Total:   30000
HugePages_Free:      304
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
    
por 17.05.2016 / 19:54
1

Aqui está a minha versão hacky. Idéias de como melhorá-lo são bem-vindas:

Relacione a quantidade de RAM em kiB que toda VM precisa:

hypervisor5:~ # for dom in $(virsh list --all --name); do echo $(virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$//p') $dom ; done| sort -n
524288 testfoo
2146304 x131
3121152 y114
3121152 foo
4096000 y123
4194304 mac-test
6144000 x123

Soma da RAM usada pelas VMs

hypervisor5:~ # for dom in $(virsh list --all --name); do virsh dumpxml $dom | sed -nre 's/^.*>([0-9]*)<.currentMemory.*$//p' ; done| awk '{s+=$1} END {print s}'
23347200

VM física disponível:

hypervisor5:~ # cat /proc/meminfo | grep MemTotal
MemTotal:       24797436 kB

Quanto resta para a operação que está executando a VM:

hypervisor5:~ # python -c 'print 24797436-23347200'
1450236 (kiB)

... não sobrou muito para o hipervisor.

Novamente: idéias para melhorá-lo são bem vindas!

    
por 26.05.2016 / 11:10