• Nenhum resultado encontrado

Clique em Aplicar.

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

Reduzindo a perda de desempenho da VM

4. Clique em Aplicar.

NOTA

As alterações nas configurações da CPU virtual só entram em vigor após o reinício da VM.

Recursos adicionais:

Para informações sobre como gerenciar suas vCPUs usando a interface de linha de comando, veja Seção 11.5.1, “Adicionar e remover CPUs virtuais usando a interface de linha de comando” .

11.5.3. Configuração do NUMA em uma máquina virtual

Os seguintes métodos podem ser usados para configurar as configurações de Acesso Não-Uniforme de Memória (NUMA) de uma máquina virtual (VM) em um host RHEL 8.

Pré-requisitos

O host é uma máquina compatível com NUMA. Para detectar se este é o caso, use o comando virsh nodeinfo e veja a linha NUMA cell(s):

# virsh nodeinfo

CPU model: x86_64 CPU(s): 48

CPU frequency: 1200 MHz CPU socket(s): 1

Core(s) per socket: 12 Thread(s) per core: 2 NUMA cell(s): 2

Memory size: 67012964 KiB

Se o valor da linha for 2 ou maior, o host é compatível com NUMA.

Procedimento

Para facilidade de uso, você pode configurar uma configuração NUMA da VM usando utilidades e serviços automatizados. Entretanto, é mais provável que a configuração manual do NUMA produza uma melhoria significativa no desempenho.

Automatic methods

Defina a política NUMA da VM para Preferred. Por exemplo, para fazer isso para o testguest5 VM:

# virt-xml testguest5 --edit --vcpus placement=auto # virt-xml testguest5 --edit --numatune mode=preferred Habilitar o balanceamento automático NUMA no host:

# echo 1 > /proc/sys/kernel/numa_balancing

Use o comando numad para alinhar automaticamente a CPU da VM com os recursos de memória.

# numad

Manual methods

1. Roscas de vCPU específicas de pinos para uma CPU hospedeira específica ou uma gama de CPUs. Isto também é possível em hosts e VMs não-NUMA, e é recomendado como um método seguro de melhoria do desempenho da vCPU.

Por exemplo, os seguintes comandos pino vCPU fios 0 a 5 do testguest6 VM para hospedar CPUs 1, 3, 5, 7, 9, e 11, respectivamente:

# virsh vcpupin testguest6 0 1 # virsh vcpupin testguest6 1 3 # virsh vcpupin testguest6 2 5 # virsh vcpupin testguest6 3 7 # virsh vcpupin testguest6 4 9 # virsh vcpupin testguest6 5 11

Em seguida, você pode verificar se isto foi bem sucedido: # virsh vcpupin testguest6

VCPU CPU Affinity --- 0 1 1 3 2 5 3 7 4 9 5 11

2. Depois de afixar os fios do vCPU, você também pode afixar os fios do processo QEMU associados a uma VM específica para uma CPU host específica ou uma gama de CPUs. Por exemplo, os seguintes comandos fixam a rosca de processo QEMU de testguest6 para CPUs 13 e 15, e verificam se isto foi bem sucedido:

# virsh emulatorpin testguest6 13,15 # virsh emulatorpin testguest6 emulator: CPU Affinity

--- *: 13,15

3. Finalmente, você também pode especificar quais nós do NUMA hospedeiro serão atribuídos especificamente a um determinado VM. Isto pode melhorar o uso da memória do host pelo vCPU da VM. Por exemplo, os comandos a seguir definem testguest6 para usar os nós de host NUMA 3 a 5, e verificar se isto foi bem sucedido:

# virsh numatune testguest6 --nodeset 3-5 # virsh numatune testguest6

Recursos adicionais

Observe que para melhores resultados de desempenho, é recomendado o uso de todos os métodos de sintonia manual listados acima. Para um exemplo de tal configuração, veja

Seção 11.5.4, “Exemplo de cenário de ajuste de desempenho da vCPU” .

Para ver a configuração atual do NUMA de seu sistema, você pode usar o utilitário numastat. Para detalhes sobre o uso de numastat, veja Seção 11.7, “Ferramentas de monitoramento de desempenho de máquinas virtuais”.

Atualmente não é possível realizar a sintonia NUMA em hosts IBM Z. Para maiores informações, veja Como a virtualização no IBM Z difere da AMD64 e Intel 64 .

11.5.4. Exemplo de cenário de ajuste de desempenho da vCPU

Para obter o melhor desempenho possível da vCPU, a Red Hat recomenda o uso do manual vcpupin, emulatorpin e numatune, por exemplo, como no cenário a seguir.

Cenário inicial

Seu anfitrião tem as seguintes especificações de hardware: 2 nós NUMA

3 núcleos de CPU em cada nó 2 roscas em cada núcleo

A saída de virsh nodeinfo de uma máquina desse tipo seria semelhante: # virsh nodeinfo

CPU model: x86_64 CPU(s): 12

CPU frequency: 3661 MHz CPU socket(s): 2

Core(s) per socket: 3 Thread(s) per core: 2 NUMA cell(s): 2

Memory size: 31248692 KiB

Você pretende modificar uma VM existente para ter 8 vCPUs, o que significa que ela não caberá em um único nó NUMA.

Portanto, você deve distribuir 4 vCPUs em cada nó NUMA e fazer com que a topologia da vCPU se pareça o mais próximo possível da topologia do hospedeiro. Isto significa que as vCPUs que funcionam como filamentos irmãos de uma determinada CPU física devem ser fixadas para hospedar filamentos no mesmo núcleo. Para obter detalhes, veja o site Solution abaixo: Solução

1. Obter as informações sobre a topologia do hospedeiro: # virsh capabilities

A saída deve incluir uma seção que se pareça com a seguinte:

<topology>

<cells num="2">

<cell id="0">

<memory unit="KiB">15624346</memory>

<pages unit="KiB" size="4">3906086</pages>

2. Optional: Teste o desempenho da VM usando as ferramentas e utilitários aplicáveis. 3. Montar e montar 1 GiB páginas enormes no host:

a. Adicione a seguinte linha à linha de comando do kernel do host: padrão_hugepagesz=1G hugepagesz=1G

b. Crie o arquivo /etc/systemd/system/hugetlb-gigantic-pages.service com o seguinte conteúdo:

[Unit]

Description=HugeTLB Gigantic Pages Reservation DefaultDependencies=no Before=dev-hugepages.mount ConditionPathExists=/sys/devices/system/node ConditionKernelCommandLine=hugepagesz=1G [Service] Type=oneshot RemainAfterExit=yes

<pages unit="KiB" size="1048576">0</pages>

<distances>

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

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

</distances>

<cpus num="6">

<cpu id="0" socket_id="0" core_id="0" siblings="0,3" />

<cpu id="1" socket_id="0" core_id="1" siblings="1,4" />

<cpu id="2" socket_id="0" core_id="2" siblings="2,5" />

<cpu id="3" socket_id="0" core_id="0" siblings="0,3" />

<cpu id="4" socket_id="0" core_id="1" siblings="1,4" />

<cpu id="5" socket_id="0" core_id="2" siblings="2,5" />

</cpus>

</cell>

<cell id="1">

<memory unit="KiB">15624346</memory>

<pages unit="KiB" size="4">3906086</pages>

<pages unit="KiB" size="2048">0</pages>

<pages unit="KiB" size="1048576">0</pages>

<distances>

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

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

</distances>

<cpus num="6">

<cpu id="6" socket_id="1" core_id="3" siblings="6,9" />

<cpu id="7" socket_id="1" core_id="4" siblings="7,10" />

<cpu id="8" socket_id="1" core_id="5" siblings="8,11" />

<cpu id="9" socket_id="1" core_id="3" siblings="6,9" />

<cpu id="10" socket_id="1" core_id="4" siblings="7,10" />

<cpu id="11" socket_id="1" core_id="5" siblings="8,11" />

</cpus>

</cell>

</cells> </topology>

ExecStart=/etc/systemd/hugetlb-reserve-pages.sh [Install]

WantedBy=sysinit.target

c. Crie o arquivo /etc/systemd/hugetlb-reserve-pages.sh com o seguinte conteúdo: #!/bin/sh

nodes_path=/sys/devices/system/node/ if [ ! -d $nodes_path ]; then

echo "ERROR: $nodes_path does not exist" exit 1 fi reserve_pages() { echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages } reserve_pages 4 node1 reserve_pages 4 node2

Isto reserva quatro páginas enormes da 1GiB de node1 e quatro páginas enormes da 1GiB de

node2.

d. Tornar executável o roteiro criado na etapa anterior: # chmod x /etc/systemd/hugetlb-reserve-pages.sh e. Permitir a reserva de páginas enormes na inicialização:

# systemctl enable hugetlb-gigantic-pages

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

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