• Nenhum resultado encontrado

Use o comando virsh edit para editar a configuração XML da VM que você deseja otimizar, neste exemplo super-VM:

No documento Red Hat Enterprise Linux 8 (páginas 111-116)

Reduzindo a perda de desempenho da VM

4. Use o comando virsh edit para editar a configuração XML da VM que você deseja otimizar, neste exemplo super-VM:

# virsh edit super-vm

5. Ajuste a configuração XML da VM da seguinte maneira:

a. Configure a VM para usar 8 vCPUs estáticas. Use o elemento <vcpu/> para fazer isso. b. Fixe cada uma das roscas da vCPU nas roscas correspondentes da CPU hospedeira que ela

espelha na topologia. Para fazer isso, use os elementos <vcpupin/> na seção <cputune>. Observe que, como mostrado pelo utilitário virsh capabilities acima, os fios da CPU do host não são ordenados seqüencialmente em seus respectivos núcleos. Além disso, as roscas vCPU devem ser fixadas ao conjunto mais alto disponível de núcleos hospedeiros no mesmo nó NUMA. Para uma ilustração da tabela, veja a seção Additional Resources abaixo. A configuração XML para as etapas a. e b. pode parecer semelhante a:

<cputune>

<vcpupin vcpu='0' cpuset='1'/>

c. Configure o VM para usar 1 página gigantesca GiB:

d. Configurar os nós NUMA da VM para usar a memória dos nós NUMA correspondentes no host. Para fazer isso, use os elementos <memnode/> na seção <numatune/>:

e. Certifique-se de que o modo CPU esteja configurado para host-passthrough, e que a CPU utilize o cache no modo passthrough:

6. A configuração XML resultante da VM deve incluir uma seção similar à seguinte: <vcpupin vcpu='1' cpuset='4'/>

<vcpupin vcpu='2' cpuset='2'/>

<vcpupin vcpu='3' cpuset='5'/>

<vcpupin vcpu='4' cpuset='7'/>

<vcpupin vcpu='5' cpuset='10'/>

<vcpupin vcpu='6' cpuset='8'/>

<vcpupin vcpu='7' cpuset='11'/>

<emulatorpin cpuset='6,9'/> </cputune>

<memoryBacking>

<hugepages>

<page size='1' unit='GiB'/>

</hugepages> </memoryBacking> <numatune>

<memory mode="preferred" nodeset="1"/>

<memnode cellid="0" mode="strict" nodeset="0"/>

<memnode cellid="1" mode="strict" nodeset="1"/> </numatune>

<cpu mode="host-passthrough">

<topology sockets="2" cores="2" threads="2"/>

<cache mode="passthrough"/>

[...]

<memoryBacking>

<hugepages>

<page size='1' unit='GiB'/>

</hugepages>

</memoryBacking>

<vcpu placement='static'>8</vcpu>

<cputune>

<vcpupin vcpu='0' cpuset='1'/>

<vcpupin vcpu='1' cpuset='4'/>

<vcpupin vcpu='2' cpuset='2'/>

<vcpupin vcpu='3' cpuset='5'/>

<vcpupin vcpu='4' cpuset='7'/>

<vcpupin vcpu='5' cpuset='10'/>

<vcpupin vcpu='6' cpuset='8'/>

<vcpupin vcpu='7' cpuset='11'/>

<emulatorpin cpuset='6,9'/>

7. Optional: Teste o desempenho da VM usando as ferramentas e utilitários aplicáveis para avaliar o impacto da otimização da VM.

Recursos adicionais

As tabelas a seguir ilustram as conexões entre as vCPUs e as CPUs anfitriãs às quais elas devem ser fixadas:

Tabela 11.1. Topologia do hospedeiro

CPU threads 0 3 1 4 2 5 6 9 7 10 8 11 Cores 0 1 2 3 4 5 Sockets 0 1 NUMA nodes 0 1 Tabela 11.2. Topologia VM vCPU threads 0 1 2 3 4 5 6 7 Cores 0 1 2 3 Sockets 0 1 NUMA nodes 0 1 <numatune>

<memory mode="preferred" nodeset="1"/>

<memnode cellid="0" mode="strict" nodeset="0"/>

<memnode cellid="1" mode="strict" nodeset="1"/>

</numatune>

<cpu mode="host-passthrough">

<topology sockets="2" cores="2" threads="2"/>

<cache mode="passthrough"/>

<numa>

<cell id="0" cpus="0-3" memory="2" unit="GiB">

<distances>

<sibling id="0" value="10"/>

<sibling id="1" value="21"/>

</distances>

</cell>

<cell id="1" cpus="4-7" memory="2" unit="GiB">

<distances>

<sibling id="0" value="21"/>

<sibling id="1" value="10"/>

</distances>

</cell>

</numa>

</cpu> </domain>

Tabela 11.3. Topologia combinada de host e VM vCPU threads 0 1 2 3 4 5 6 7 Host CPU threads 0 3 1 4 2 5 6 9 7 10 8 11 Cores 0 1 2 3 4 5 Sockets 0 1 NUMA nodes 0 1

Neste cenário, existem 2 nós NUMA e 8 vCPUs. Portanto, 4 fios de vCPU devem ser fixados a cada nó.

Além disso, a Red Hat recomenda deixar pelo menos uma única linha de CPU disponível em cada nó para as operações do sistema hospedeiro.

Como neste exemplo, cada nó NUMA abriga 3 núcleos, cada um com 2 fios de CPU hospedeira, o conjunto para o nó 0 se traduz como segue:

11.5.5. Desativação da fusão do kernel na mesma página

Embora a fusão da mesma página do kernel (KSM) melhore a densidade da memória, ela aumenta a utilização da CPU e pode afetar adversamente o desempenho geral, dependendo da carga de trabalho. Nestes casos, você pode melhorar o desempenho da máquina virtual (VM) desativando o KSM.

Dependendo de suas necessidades, você pode tanto desativar o KSM para uma única sessão ou persistentemente.

Procedimento

Para desativar o KSM para uma única sessão, use o utilitário systemctl para parar ksm e ksmtuned serviços.

# systemctl stop ksm # systemctl stop ksmtuned

Para desativar o KSM persistentemente, use o utilitário systemctl para desativar ksm e ksmtuned serviços.

# systemctl disable ksm

Removed /etc/systemd/system/multi-user.target.wants/ksm.service. # systemctl disable ksmtuned

Removed /etc/systemd/system/multi-user.target.wants/ksmtuned.service.

<vcpupin vcpu='0' cpuset='1'/> <vcpupin vcpu='1' cpuset='4'/> <vcpupin vcpu='2' cpuset='2'/> <vcpupin vcpu='3' cpuset='5'/>

NOTA

As páginas de memória compartilhadas entre os VMs antes de desativar o KSM

continuarão a ser compartilhadas. Para parar de compartilhar, exclua todas as páginas de PageKSM no sistema usando o seguinte comando:

# echo 2 > /sys/kernel/mm/ksm/run

Depois de páginas anônimas substituírem as páginas do KSM, o serviço do kernel khugepaged reconstruirá hugepages transparentes na memória física da VM.

11.6. OTIMIZANDO O DESEMPENHO DA REDE DE MÁQUINAS VIRTUAIS

Devido à natureza virtual da placa de interface de rede (NIC) de uma VM, a VM perde uma parte de sua largura de banda de rede alocada ao host, o que pode reduzir a eficiência geral da carga de trabalho da VM. As seguintes dicas podem minimizar o impacto negativo da virtualização no rendimento virtual da placa de interface de rede (vNIC).

Procedimento

Use qualquer um dos métodos a seguir e observe se tem um efeito benéfico no desempenho de sua rede VM:

Habilitar o módulo vhost_net

No host, certifique-se de que o recurso do kernel vhost_net esteja habilitado: # lsmod | grep vhost

vhost_net 32768 1

vhost 53248 1 vhost_net tap 24576 1 vhost_net tun 57344 6 vhost_net

Se a saída deste comando estiver em branco, ative o módulo do kernel vhost_net: # modprobe vhost_net

Criar uma rede virtio-multi-frequência

Para configurar o recurso multi-queue virtio-net para uma VM, use o comando virsh edit para editar para a configuração XML da VM. No XML, adicione o seguinte na seção <devices>, e substitua N pelo número de vCPUs na VM, até 16:

<interface type='network'> <source network='default'/> <model type='virtio'/>

<driver name='vhost' queues='N'/> </interface>

Se o VM estiver funcionando, reinicie-o para que as mudanças entrem em vigor. Pacotes de rede em lotes

Nas configurações Linux VM com um longo caminho de transmissão, a dosagem de pacotes antes de submetê-los ao kernel pode melhorar a utilização do cache. Para configurar o agrupamento de

pacotes, use o seguinte comando no host, e substitua tap0 pelo nome da interface de rede que as VMs usam:

# ethtool -C tap0 rx-frames 128 SR-IOV

Se seu NIC hospedeiro suporta SR-IOV, use a designação do dispositivo SR-IOV para seus vNICs. Para mais informações, consulte Gerenciando os dispositivos SR-IOV.

Recursos adicionais

Para informações adicionais sobre tipos de conexão de rede virtual e dicas de uso, consulte

Entendendo a rede virtual.

11.7. FERRAMENTAS DE MONITORAMENTO DE DESEMPENHO DE

MÁQUINAS VIRTUAIS

Para identificar o que consome mais recursos de VM e qual aspecto do desempenho da VM necessita de otimização, podem ser utilizadas ferramentas de diagnóstico de desempenho, tanto gerais quanto específicas de VM.

No documento Red Hat Enterprise Linux 8 (páginas 111-116)