KVM: rendimiento de red en máquinas virtuales Windows

En el artículo KVM: rendimiento de red en máquinas virtuales GNU/Linux presenté una serie de pruebas de rendimiento de la red en máquinas virtuales GNU/Linux utilizando diferentes drivers. En este artículo presento el mismo experimento, pero esta vez sobre un guest Windows XP SP3 de 32 bit.



Por defecto en KVM, a las máquinas virtuales (guests) Windows se les asigna una interfaz de red (NIC - network interface controller) virtual Realtek 8139.

El resultado de los experimentos sobre guests Windows no fue el esperado, ya que el dispositivo paravirtualizado virtio otorgó el mismo rendimiento que los dispositivos pcnet y rtl8139.

Experimento

Contando con un host CentOS 6.3 y una máquina virtual KVM con Windows XP SP3 32 bit, realicé pruebas de performance con diferentes dispositivos de red virtuales, utilizando la herramienta iperf. Iperf mide el rendimiento del ancho de banda de los protocolos TCP y UDP.

Instalación de iperf

En la máquina virtual Windows XP utilizo iperf en modo servidor (escucha peticiones de clientes para iniciar tests). Previamente se debe descargar el ejecutable iperf.exe desde el siguiente enlace:

Iperf

Para iniciar iperf en modo servidor, ejecutar:

iperf.exe -s -f M

En el host CentOS 6.3 utilizo iperf en modo cliente (se conecta a un servidor iperf para realizar tests). Se puede instalar utilizando el manejador de paquetes yum agregando el repositorio RPMforge:

yum install iperf

Para iniciar iperf en modo cliente, y conectarse al servidor iperf previamente iniciado en la máquina virtual Windows XP (192.168.122.235), ejecutar:

iperf -c 192.168.122.235 -f M

La configuración de red del host CentOS 6.3 es la siguiente:

Los parámetros -f M se utilizan para expresar las unidades en Megabytes/segundo.

Cambiar interfaz de red en máquinas virtuales KVM

Para cambiar un dispositivo en una máquina virtual KVM se deben seguir los siguientes pasos:

  1. Apagar el sistema operativo del guest.
  2. Editar la configuración del guest (en este caso "vwxp") utilizando el comando virsh:
    virsh edit vwxp
  3. Encontrar la sección de configuración de la interfaz de red:
    <interface type='network'>
      [...]
      <model type='rtl8139' />
    </interface>
  4. Cambiar el atributo "type" del elemento "model":
    <interface type='network'>
      [...]
      <model type='virtio' />
    </interface>
  5. Guardar los cambios, salir del editor y reiniciar el sistema operativo en el guest.

Resultados

Los resultados del experimento utilizando diferentes dispositivos de red en la máquina virtual KVM con Windows XP como sistema operativo guest fueron los siguientes.

pcnet

El resultado del experimento utilizando el driver pcnet es el siguiente:

  • Desde el cliente iperf 192.168.122.1 (host CentOS):
    $ iperf -c 192.168.122.235 -f M
    ------------------------------------------------------------
    Client connecting to 192.168.122.235, TCP port 5001
    TCP window size: 0.02 MByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.122.1 port 43020 connected with 192.168.122.235 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec   123 MBytes  12.3 MBytes/sec
    
    
  • En el servidor iperf 192.168.122.196 (máquina virtual Windows XP) se observa la conexión desde el cliente 192.168.122.1 (host CentOS):
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    C:\Documents and Settings\pepe>cd "My Documents"
    
    C:\Documents and Settings\pepe\My Documents>ipconfig /all
    
    Windows IP Configuration
    
            Host Name . . . . . . . . . . . . : kvm-wxp
            Primary Dns Suffix  . . . . . . . :        
            Node Type . . . . . . . . . . . . : Unknown
            IP Routing Enabled. . . . . . . . : No     
            WINS Proxy Enabled. . . . . . . . : No     
    
    Ethernet adapter Local Area Connection 5:
    
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : AMD PCNET Family PCI Ethernet Adapte
    r
            Physical Address. . . . . . . . . : 52-54-00-F2-4C-FE
            Dhcp Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            IP Address. . . . . . . . . . . . : 192.168.122.235
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . : 192.168.122.1
            DHCP Server . . . . . . . . . . . : 192.168.122.1
            DNS Servers . . . . . . . . . . . : 192.168.122.1
            Lease Obtained. . . . . . . . . . : Martes, 18 de Diciembre de 2012 09:2
    5:38 a.m.
            Lease Expires . . . . . . . . . . : Martes, 18 de Diciembre de 2012 10:2
    5:38 a.m.
    
    C:\Documents and Settings\pepe\My Documents>iperf.exe -s -f M
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 0.01 MByte (default)
    ------------------------------------------------------------
    [1880] local 192.168.122.235 port 5001 connected with 192.168.122.1 port 43020
    [ ID] Interval       Transfer     Bandwidth
    [1880]  0.0-10.0 sec   123 MBytes  12.3 MBytes/sec
    
    
    Se debe detener el servidor enviando la combinación de teclas Ctrl+C.

El ancho de banda utilizando el driver pcnet es 12.3 MBytes/sec.

rtl8139

El resultado del experimento utilizando el driver rtl8139 es el siguiente:

  • Desde el cliente iperf 192.168.122.1 (host CentOS):
    $ iperf -c 192.168.122.235 -f M
    ------------------------------------------------------------
    Client connecting to 192.168.122.235, TCP port 5001
    TCP window size: 0.02 MByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.122.1 port 42931 connected with 192.168.122.235 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec   105 MBytes  10.4 MBytes/sec
    
    
  • En el servidor iperf 192.168.122.196 (máquina virtual Windows XP) se observa la conexión desde el cliente 192.168.122.1 (host CentOS):
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    C:\Documents and Settings\pepe>cd "My Documents"
    
    C:\Documents and Settings\pepe\My Documents>ipconfig /all
    
    Windows IP Configuration
    
            Host Name . . . . . . . . . . . . : kvm-wxp
            Primary Dns Suffix  . . . . . . . :        
            Node Type . . . . . . . . . . . . : Unknown
            IP Routing Enabled. . . . . . . . : No     
            WINS Proxy Enabled. . . . . . . . : No     
    
    Ethernet adapter Local Area Connection:
    
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : Realtek RTL8139 Family PCI Fast Ethe
    rnet NIC
            Physical Address. . . . . . . . . : 52-54-00-F2-4C-FE
            Dhcp Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            IP Address. . . . . . . . . . . . : 192.168.122.235
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . : 192.168.122.1
            DHCP Server . . . . . . . . . . . : 192.168.122.1
            DNS Servers . . . . . . . . . . . : 192.168.122.1
            Lease Obtained. . . . . . . . . . : Martes, 18 de Diciembre de 2012 09:1
    8:15 a.m.
            Lease Expires . . . . . . . . . . : Martes, 18 de Diciembre de 2012 10:1
    8:15 a.m.
    
    C:\Documents and Settings\pepe\My Documents>iperf.exe -s -f M
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 0.01 MByte (default)
    ------------------------------------------------------------
    [1880] local 192.168.122.235 port 5001 connected with 192.168.122.1 port 42931
    [ ID] Interval       Transfer     Bandwidth
    [1880]  0.0-10.0 sec   105 MBytes  10.5 MBytes/sec
    
    

El ancho de banda promedio utilizando el driver rtl8139 es 10.5 MBytes/sec.

virtio

Luego de cambiar al dispositivo de red paravirtualizado virtio, se debe instalar el driver, el cual se puede descargar desde el siguiente enlace:

virtio-win-0.1-30.iso

Para instalar el driver virtio en Windows XP se deben seguir los siguientes pasos:

  • Luego de cambiar al dispositivo virtio, iniciar la máquina virtual.
  • Montar la imagen iso descargada en la unidad de CDROM.
  • Seguir el "Hardware Update Wizard", indicar que busque en el dispositivo CDROM e ignorar la advertencia:




El resultado del experimento utilizando el driver virtio es el siguiente:

  • Desde el cliente iperf 192.168.122.1 (host CentOS):
    $ iperf -c 192.168.122.235 -f M
    ------------------------------------------------------------
    Client connecting to 192.168.122.235, TCP port 5001
    TCP window size: 0.02 MByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.122.1 port 44368 connected with 192.168.122.235 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec   140 MBytes  14.0 MBytes/sec
    
    
  • En el servidor iperf 192.168.122.196 (máquina virtual Windows XP) se observa la conexión desde el cliente 192.168.122.1 (host CentOS):
    Microsoft Windows XP [Version 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    C:\Documents and Settings\pepe>cd "My Documents"
    
    C:\Documents and Settings\pepe\My Documents>ipconfig /all
    
    Windows IP Configuration
    
            Host Name . . . . . . . . . . . . : kvm-wxp
            Primary Dns Suffix  . . . . . . . :        
            Node Type . . . . . . . . . . . . : Unknown
            IP Routing Enabled. . . . . . . . : No     
            WINS Proxy Enabled. . . . . . . . : No     
    
    Ethernet adapter Local Area Connection 6:
    
            Connection-specific DNS Suffix  . :
            Description . . . . . . . . . . . : Red Hat VirtIO Ethernet Adapter
            Physical Address. . . . . . . . . : 52-54-00-F2-4C-FE
            Dhcp Enabled. . . . . . . . . . . : Yes
            Autoconfiguration Enabled . . . . : Yes
            IP Address. . . . . . . . . . . . : 192.168.122.235
            Subnet Mask . . . . . . . . . . . : 255.255.255.0
            Default Gateway . . . . . . . . . : 192.168.122.1
            DHCP Server . . . . . . . . . . . : 192.168.122.1
            DNS Servers . . . . . . . . . . . : 192.168.122.1
            Lease Obtained. . . . . . . . . . : Martes, 18 de Diciembre de 2012 11:0
    7:01 a.m.
            Lease Expires . . . . . . . . . . : Martes, 18 de Diciembre de 2012 12:0
    7:01 p.m.
    
    C:\Documents and Settings\pepe\My Documents>iperf.exe -s -f M
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 0.01 MByte (default)
    ------------------------------------------------------------
    [1880] local 192.168.122.235 port 5001 connected with 192.168.122.1 port 44368
    [ ID] Interval       Transfer     Bandwidth
    [1880]  0.0-10.0 sec   141 MBytes  14.0 MBytes/sec
    
    

El ancho de banda promedio utilizando el driver virtio es 14 MBytes/sec.

Conclusión

Luego de realizar pruebas con dispositivos de red emulados (pcnet, rtl8139) y con el dispositivo paravirtualizado "virtio", no se observa una importante diferencia de rendimiento, tal como se observa para máquinas virtuales GNU/Linux.

Cabe destacar que para cualquiera de los tres dispositivos, la velocidad de enlace negociada es de 1 Gbps:

Seguiré investigando el tema para tratar de determinar por qué no se logra el mismo rendimiento que para las máquinas virtuales GNU/Linux. Se aceptan comentarios y sugerencias.



Suscribirse

    Registrate para recibir las novedades y artículos por correo electrónico.

Linuxito en G+