Este post foi originalmente escrito por Abhijit Khande & Vineeth V Acharya da equipe de engenharia do Windows da DELL.
Comentários são bem-vindos! Para sugerir um tópico ou fazer outros comentários, entre em contato com WinServerBlogs@dell.com.
Com o sistema operacional Microsoft® Windows Server® 2012 Beta, a Microsoft introduziu suporte para vários recursos no espaço de rede. Uma dessas características significativas e interessantes é
Virtualização de E/S de raiz única (SR-IOV), que permite que máquinas virtuais compartilhem um único dispositivo PCI-e. Este post fornece uma visão geral básica do SR-IOV no Windows Server 2012 Beta e como ele reduz drasticamente a utilização da CPU em um ambiente virtualizado durante a E/S de rede.
A interface SR-IOV é uma extensão da especificação PCI Express (PCIe). O SR-IOV permite que um único dispositivo PCIe, como um adaptador de rede, forneça várias superfícies de hardware leves no barramento PCI e acesso separado a seus recursos entre as várias instâncias. Ela é alcançada pelo uso de múltiplas funções virtuais (FV), além da função física (usual) (FP). Como ele depende de hardware, o dispositivo PCIe e a plataforma devem dar suporte a esse recurso.
Tradicionalmente, um pacote destinado à máquina virtual é recebido pelo adaptador de rede física (usando a função física) presente no sistema operacional host. Esse pacote é tratado pelo módulo de driver NDIS (Network Driver Interface Specification for NICs). Em seguida, o pacote é fornecido ao comutador Hyper-V, que processa o pacote (como roteamento, filtragem de VLAN) e o encaminha para a VM de destino via VMBus, conforme mostrado na Figura 1. O caminho inverso será seguido quando a VM tiver que enviar um pacote.
Com o SR-IOV, a VM pode usar uma função virtual (VF) para enviar e receber pacotes diretamente para o adaptador de rede física, ignorando completamente o caminho tradicional, conforme mostrado na Figura 1. Isso não apenas impulsiona a E/S de rede, mas também reduz a sobrecarga na CPU da máquina host.
Figura 1: Caminho de dados com e sem SR-IOV
Migração em tempo real & SR-IOV
No Windows Server 2012 Beta, o Live Migration pode ser realizado com SR-IOV sendo usado por uma VM. Se os sistemas de origem e destino forem compatíveis com SR-IOV e o destino tiver uma VF disponível, a VM usará a função virtual. Caso contrário, a VM será revertida para o caminho tradicional (VM-Bus).
Cada adaptador de rede compatível com SR-IOV expõe um número fixo de funções virtuais, que podem ser obtidas executando o comando do PowerShell "Get-NetAdapterSriov".
Análise de desempenho
Realizamos alguns testes em nosso laboratório para comparar o desempenho com e sem SR-IOV. O ambiente de teste consiste em um servidor de teste (no qual os testes são executados) e um servidor de arquivos. O servidor de teste é um Dell PowerEdge™ R710 II com um adaptador Ethernet Intel® X520 de 10 GB e o sistema operacional Windows Server 2012 Beta. O servidor de arquivos hospeda vários compartilhamentos SMB e está conectado ao servidor de teste usando uma rede de 10 GB por meio de um switch Dell PowerConnect™ 8024.
Capturamos os dados de desempenho em termos da CPU usada pelos DPCs (Deferred Procedure Call, chamada de procedimento adiado) agendados pelos diferentes módulos de driver que participam da transferência de dados de rede. Esses dados foram capturados no SO guest e host, conforme descrito nos cenários a seguir. O servidor de teste tem 4 máquinas virtuais idênticas com o Windows Server 2012 Beta como o sistema operacional convidado. As 4 VMs estão conectadas à rede de 10 GB por meio de um switch virtual. Essa configuração de teste é mostrada na Figura 2.
Figura 2:
Configuração de teste Antes de mostrarmos os dados de desempenho, é importante introduzir um parâmetro muito crítico usado para esse teste. No
Microsoft Windows No SO, existe um mecanismo do sistema chamado DPC (Deferred Procedure Call, chamada de procedimento adiado), que permite tarefas de alta prioridade (por exemplo, um
Manipulador de interrupções) para adiar tarefas necessárias, mas de prioridade mais baixa, para execução posterior. Isso permite que drivers de dispositivo e outros consumidores de eventos de baixo nível executem a parte de alta prioridade de seu processamento rapidamente e agendem processamento adicional não crítico para execução em uma prioridade mais baixa.
Cenário 1 – Resultados de desempenho em máquina virtual (SO convidado):
Neste cenário, usamos quatro máquinas virtuais (VM) (VM 1 a VM 4). Ativamos o SR-IOV na VM 1 e na VM 2 (marcando a opção "Enable SR-IOV" nas configurações da VM) e desabilitamos o SR-IOV nas VMs 3 e 4 (desmarcando a mesma opção). Portanto, as VMs 1 e 2 usarão a função virtual (exposta pelo adaptador Intel), enquanto a VM 3 e a VM 4 usarão o caminho sintético (VMBus) para qualquer comunicação de rede, conforme mostrado na Figura 2.
Começamos a copiar dados (de tamanho 20 GB) de um único compartilhamento SMB para as VMs e capturamos os registros de uso da CPU do sistema no SO convidado.
Figura 3: Uso da CPU DPC na máquina
virtual Na Figura 3, SR-IOV refere-se ao uso médio da CPU DPC em VM-1 e VM-2 e não SR-IOV refere-se ao uso médio da CPU DPC em VM-3 e VM-4. Se observarmos o gráfico, veremos que não há muita diferença no uso da CPU entre os dois casos, mas ainda não contabilizamos o uso da CPU na máquina host.
Cenário 2 – Resultado de desempenho na máquina host (sistema operacional do host):
Usamos uma máquina virtual para esse cenário. Começamos a copiar dados (de tamanho 20 GB) do compartilhamento SMB para a VM e capturamos o uso da CPU DPC de dois módulos, NDIS e VMBUS, que são usados na E/S de rede.
Figura 4: Uso da CPU DPC na máquina
host Os resultados são mostrados na Figura 4. Como esperado, há uma grande diferença no uso da CPU entre os dois casos (SR-IOV e não-SR-IOV). O uso da CPU é da ordem de 102 no caso de SR-IOV, e da ordem 103 - 104 no caso de Non-SR-IOV. Isso ocorre principalmente porque, no caso do SR-IOV, a máquina virtual se comunica diretamente com a NIC física por meio da função virtual. Portanto, os ciclos de CPU do host não são utilizados para processar nenhum pacote de rede. No caso de Non-SR-IOV (conforme mostrado na Figura 1), o sistema operacional convidado se comunica com o sistema operacional host por meio do barramento de VM, que, por sua vez, processa os pacotes e os envia por meio da NIC física. Portanto, módulos como VM Bus e NDIS são amplamente utilizados.
Ao calcular o uso total da CPU, observamos que a utilização da CPU durante a E/S de rede é muito menor ao usar SR-IOV. Portanto, o Windows Server 2012 Beta com SR-IOV ativado ajudará os clientes a reduzir a sobrecarga da CPU durante a E/S de rede e, assim, melhorar o desempenho geral do sistema.
Configurando o SR-IOV usando o PowerShell
Você pode usar os seguintes comandos do PowerShell para criar um novo comutador virtual com SR-IOV habilitado e conectar o comutador virtual ao adaptador de rede virtual de uma máquina virtual existente.
NOTA: Antes de executar os comandos a seguir, as seguintes opções devem ser ativadas no BIOS
- Tecnologia de virtualização
- Ativação global do SR-IOV
(Supondo que um único adaptador de rede (Intel X520) esteja conectado)
$NetAdap = Get-NetAdapter | Where-Object { $_. Status -eq "Up"}(O switch -EnableIov é usado para habilitar o SR-IOV no switch virtual)
New-VMSwitch -Name "SRIOV Switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV Switch on X520" -EnableIov $True
$VMSw = Get-VMSwitch
Adicionar um novo adaptador de rede à VM-1 e conectá-lo ao switch virtual.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
NOTA:Para que esse comando funcione, a VM deve estar desativada)
Você também pode usar um adaptador de rede VM já existente usando os seguintes comandos)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Cada adaptador de rede VM tem duas propriedades, IovWeight & VmqWeight, que correspondem a SR-IOV e VMQ, respectivamente. O ajuste desses pesos ativa ou desativa os recursos.