Esta publicación fue escrita originalmente por Abhijit Khande y Vineeth V Acharya del equipo de ingeniería de Windows de DELL.
¡Los comentarios son bienvenidos! Para sugerir un tema o hacer otros comentarios, póngase en contacto con WinServerBlogs@dell.com.
Con el sistema operativo Microsoft® Windows Server® 2012 Beta, Microsoft ha introducido soporte para una serie de características en el espacio de redes. Una de estas características significativas e interesantes es
Virtualización de I/O de raíz única (SR-IOV), que permite que las máquinas virtuales compartan un único dispositivo PCI-e. Esta publicación proporciona una descripción general básica de SR-IOV en Windows Server 2012 Beta y cómo reduce drásticamente la utilización de la CPU en un entorno virtualizado durante la E/S de red.
La interfaz SR-IOV es una extensión de la especificación PCI Express (PCIe). SR-IOV permite que un solo dispositivo PCIe, como un adaptador de red, proporcione varias superficies ligeras de hardware en el bus PCI y acceso independiente a sus recursos entre las diversas instancias. Se logra mediante el uso de múltiples funciones virtuales (VF) además de la función física (PF) (habitual). Dado que depende del hardware, tanto el dispositivo PCIe como la plataforma deben admitir esta función.
Tradicionalmente, el adaptador de red físico (mediante la función física) presente en el sistema operativo host recibe un paquete destinado a la máquina virtual. El módulo del controlador NDIS (especificación de interfaz de controlador de red para NIC) maneja este paquete. A continuación, el paquete se proporciona al switch de Hyper-V, que procesa el paquete (como el enrutamiento y el filtrado de VLAN) y lo reenvía a la VM de destino a través de VMBus, como se muestra en la figura 1. La ruta inversa se seguirá cuando la VM tenga que enviar un paquete.
Con SR-IOV, la VM puede usar una función virtual (VF) para enviar y recibir paquetes directamente al adaptador de red físico omitiendo completamente la ruta tradicional, como se muestra en la Figura 1. Esto no solo aumenta la I/O de la red, sino que también reduce la sobrecarga en la CPU de la máquina host.
Figura 1: Ruta de datos con y sin SR-IOV
Live Migration y SR-IOV
En Windows Server 2012 Beta, Live Migration se puede realizar con SR-IOV en uso por una máquina virtual. Si los sistemas de origen y destino son compatibles con SR-IOV y el destino tiene un VF disponible, la VM utilizará la función virtual. De lo contrario, la VM se revertirá a la ruta tradicional (VM-Bus).
Cada adaptador de red compatible con SR-IOV expone una cantidad fija de funciones virtuales, que se pueden obtener mediante la ejecución del comando de PowerShell "Get-NetAdapterSriov".
Análisis de rendimiento
Realizamos algunas pruebas en nuestro laboratorio para comparar el rendimiento con y sin SR-IOV. El ambiente de pruebas consta de un servidor de pruebas (en el que se ejecutan las pruebas) y un servidor de archivos. El servidor de prueba es un Dell PowerEdge™ R710 II con un adaptador Ethernet Intel® X520 de 10 GB y sistema operativo Windows Server 2012 Beta. El servidor de archivos aloja varios recursos compartidos SMB y está conectado al servidor de prueba mediante una red de 10 GB a través de un switch Dell PowerConnect™ 8024.
Capturamos los datos de rendimiento en términos de la CPU utilizada por los DPC (Deferred Procedure Call) programados por los diferentes módulos de controladores que participan en la transferencia de datos de red. Estos datos se capturaron tanto en el sistema operativo huésped como en el host, como se describe en los siguientes escenarios. El servidor de prueba tiene 4 máquinas virtuales idénticas con Windows Server 2012 Beta como sistema operativo invitado. Las 4 VM están conectadas a la red de 10 GB a través de un switch virtual. Esta configuración de prueba se muestra en la Figura 2.
Figura 2: Configuración
de la prueba Antes de mostrar los datos de rendimiento, es importante introducir un parámetro muy crítico utilizado para esta prueba. En
Microsoft Windows En el sistema operativo, existe un mecanismo del sistema llamado llamada de procedimiento diferido (DPC), que permite tareas de alta prioridad (p. ej., un
Controlador de interrupciones) para aplazar las tareas requeridas pero de menor prioridad para su ejecución posterior. Esto permite que los controladores de dispositivo y otros consumidores de eventos de bajo nivel realicen la parte de alta prioridad de su procesamiento rápidamente y programen el procesamiento adicional no crítico para su ejecución con una prioridad menor.
Situación 1: resultados de rendimiento en una máquina virtual (SO huésped):
Se utilizaron cuatro máquinas virtuales (VM) para este escenario (VM 1 a VM 4). Se habilitó SR-IOV en las VM 1 y 2 (mediante la selección de la opción "Enable SR-IOV" en la configuración de VM) y se deshabilitó SR-IOV en las VM 3 y 4 (mediante la desactivación de la misma opción). Por lo tanto, la VM 1 y la VM 2 utilizarán la función virtual (expuesta por el adaptador Intel), mientras que la VM 3 y la VM 4 utilizarán la ruta sintética (VMBus) para cualquier comunicación de red, como se muestra en la figura 2.
Comenzamos a copiar datos (de 20 GB) de un único recurso compartido SMB a las VM y capturamos los registros de uso de CPU del sistema en el SO huésped.
Figura 3: Uso
de CPU de DPC en máquina virtual En la figura 3, SR-IOV se refiere al uso promedio de CPU de DPC en VM-1 y VM-2, y Non-SR-IOV se refiere al uso promedio de CPU de DPC en VM-3 y VM-4. Si observamos el gráfico, vemos que no hay mucha diferencia en el uso de la CPU entre los dos casos, pero aún no hemos tenido en cuenta el uso de la CPU en la máquina host.
Escenario 2: Resultado de rendimiento en la máquina host (sistema operativo host):
Se utilizó una máquina virtual para este escenario. Comenzamos a copiar datos (de 20 GB) del recurso compartido SMB a la VM y capturamos el uso de CPU de DPC de dos módulos, NDIS y VMBUS, que se utilizan en la I/O de red.
Figura 4: Uso de CPU de DPC en la máquina
host Los resultados se muestran en la Figura 4. Como era de esperar, hay una gran diferencia en el uso de CPU entre los dos casos (SR-IOV y no SR-IOV). El uso de la CPU es del orden de 102 en el caso de SR-IOV y del orden de 103-104 en el caso de Non-SR-IOV. Esto se debe principalmente a que, en el caso de SR-IOV, la máquina virtual se comunica directamente con la NIC física a través de la función virtual. Por lo tanto, los ciclos de CPU del host no se utilizan para procesar ningún paquete de red. En el caso de Non-SR-IOV (como se muestra en la Figura 1), el SO huésped se comunica con el SO host a través del bus de VM, que, a su vez, procesa los paquetes y los envía a través de la NIC física. Por lo tanto, los módulos como VM Bus y NDIS se utilizan ampliamente.
En el cálculo del uso total de la CPU, observamos que la utilización de la CPU durante la I/O de red es mucho menor cuando se utiliza SR-IOV. Por lo tanto, Windows Server 2012 Beta con SR-IOV habilitado ayudará a los clientes a reducir la sobrecarga de la CPU durante la E/S de red y, por lo tanto, mejorará el rendimiento general del sistema.
Configuración de SR-IOV mediante PowerShell
Puede usar los siguientes comandos de PowerShell para crear un nuevo switch virtual con SR-IOV activado y conectarlo al adaptador de red virtual de una máquina virtual existente.
NOTA: Antes de ejecutar los siguientes comandos, se deben activar las siguientes opciones en el BIOS
- Tecnología de virtualización
- Habilitación global de SR-IOV
(Suponiendo que hay un solo adaptador de red (Intel X520) conectado)
$NetAdap = Get-NetAdapter | Objeto-donde: { $_. Status -eq "Up"}
(El switch -EnableIov se utiliza para activar SR-IOV en el switch virtual)
New-VMSwitch -Name "SRIOV Switch" -NetAdapterName $NetAdap.Name -AllowManagementOS $True -Notes "SRIOV Switch on X520" -EnableIov $True
$VMSw = Get-VMSwitch
Agregar un nuevo adaptador de red a VM-1 y conectarlo al switch virtual.
Add-VMNetworkAdapter -SwitchName $VMSw.Name -VMName VM-1 -Name "SRIOV Adapter"
NOTA: Para que este comando funcione, la VM debe estar apagada)
También puede usar un adaptador de red de VM ya existente mediante los siguientes comandos)
$VMNet = Get-VMNetworkAdapter -VMName VM-1
Connect-VMNetworkAdapter -VMName VM-1 -SwitchName $VMSw.Name -Name $VMNet.Name
Cada adaptador de red de VM tiene dos propiedades, IovWeight y VmqWeight, que corresponden a SR-IOV y VMQ, respectivamente. El ajuste de estos pesos habilita o deshabilita las funciones.