Marcio Cunha

Virtualizacion de Redes y Enrutamiento de Capa 3 con SR-IOV

Aprenda a implementar SR-IOV en servidores de laboratorio casero para lograr un rendimiento de red de Capa 3 cercano al hardware nativo con menor latencia.

Marcio Cunha•5 min
También disponible en:EnglishPortuguês
Resumen
  • El uso de SR-IOV permite que las maquinas virtuales accedan directamente a la tarjeta de red fisica, evitando cuellos de botella.
  • La Capa 3 del modelo OSI se encarga del enrutamiento eficiente de paquetes entre diferentes subredes.
  • Habilitar el soporte IOMMU en la BIOS es el primer paso obligatorio para aislar las operaciones de E/S de hardware.
  • Las ganancias de rendimiento son evidentes en entornos de laboratorio que requieren alto rendimiento y baja latencia.
  • El principal inconveniente es la perdida de flexibilidad para migrar en caliente maquinas virtuales entre nodos fisicos.

El Desafio del Rendimiento de Red en Servidores de Laboratorio

Cuando armamos un laboratorio casero, conocido como homelab, enseguida nos topamos con el cuello de botella tradicional de la virtualizacion: el trafico de red. En un escenario comun, cada maquina virtual necesita comunicarse con el mundo exterior a traves de un conmutador virtual creado por el hipervisor. En la practica, esto significa que el sistema operativo principal debe procesar cada paquete de datos, consumiendo valiosos ciclos de CPU y anadiendo retrasos no deseados. Para cualquiera que ejecute servicios exigentes, este modelo convencional cobra un precio alto en terminos de rendimiento.

La solucion a este problema pasa por tecnologias que permiten evitar al intermediario de software. En lugar de hacer que el hipervisor traduzca y reenvie todo el trafico de red, podemos entregar porciones de la tarjeta de red fisica directamente a las maquinas virtuales. Ahi es exactamente donde entra el concepto de virtualizacion de E/S de raiz unica, o SR-IOV. En la practica, esta tecnologia hace que una sola tarjeta de red fisica se multiplique en docenas de pequenas tarjetas virtuales independientes, cada una con sus propios recursos dedicados.

Comprendiendo la Capa 3 y el Enrutamiento de Paquetes

Antes de ponernos manos a la obra con SR-IOV, vale la pena recordar como los paquetes de datos encuentran su camino. La Capa 3, correspondiente a la capa de red en el modelo OSI, es la responsable de decidir hacia donde va cada paquete de datos cuando deben transitar entre redes diferentes. En la practica, mientras la Capa 2 resuelve direcciones locales usando direcciones MAC, la Capa 3 usa direcciones IP y tablas de enrutamiento para cruzar fronteras, conectando su red domestica con internet o aislando su zona de servidores IoT.

En entornos virtualizados tradicionales, el enrutamiento entre VLANs suele ser realizado por un enrutador virtual que se ejecuta en el hipervisor. Cuando combinamos SR-IOV con este escenario, el enrutador virtual opera con aceleracion de hardware. Los paquetes entran y salen de las maquinas virtuales de enrutamiento sin pasar por las capas lentas de traduccion de software del sistema host. En la practica, esto se traduce en tasas de transferencia que se acercan al limite maximo del cable fisico, con latencias minimas.

Preparando la Infraestructura y Habilitando IOMMU

El primer paso para activar la magia de SR-IOV en su servidor de laboratorio ocurre antes de cargar el sistema operativo. Debemos ingresar a la BIOS de la placa base y activar las funciones avanzadas de virtualizacion orientadas a dispositivos de E/S, conocidas en Intel como VT-d o en AMD como AMD-Vi (ambas basadas en la tecnologia IOMMU). En la practica, IOMMU funciona como un guardia de trafico que permite al sistema operativo aislar y mapear memoria fisica directamente a los componentes de hardware conectados al bus PCIe.

Despues de reiniciar el servidor con IOMMU activo, debemos indicar al nucleo de Linux que cargue los modulos necesarios y habilite el soporte en el momento del arranque. Para verificar que todo salio bien, abrimos la terminal de nuestro hipervisor y ejecutamos un comando de verificacion para listar los dispositivos que soportan la virtualizacion de funciones. Si la salida muestra que las funciones virtuales se crearon con exito, estamos listos para avanzar hacia la configuracion de las interfaces de red.

dmesg | grep -i iommu
lspci -nnk | grep -i ethernet
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" >> /etc/modprobe.d/vfio.conf

Creando y Asignando Funciones Virtuales de Red

Con el soporte de hardware confirmado, ha llegado el momento de crear las llamadas Funciones Virtuales (VFs), que son porciones de nuestra tarjeta de red fisica principal. Para ello, editamos la configuracion del cargador de arranque del sistema para informar cuantas funciones virtuales queremos generar. En una tarjeta de red Intel comun de 10 Gigabit, podemos particionar facilmente el puerto fisico en hasta siete u ocho interfaces virtuales independientes, distribuyendolas entre nuestros enrutadores y cortafuegos.

Despues de aplicar las reglas y reiniciar el servidor de nuevo, cada funcion virtual aparecera como una tarjeta de red comun para el sistema operativo host. El siguiente paso consiste en desvincular estas tarjetas virtuales del sistema principal y pasarlas directamente a la maquina virtual de enrutamiento de Capa 3 que creamos para gestionar el trafico. En la practica, la maquina virtual ve la tarjeta como si estuviera enchufada fisicamente en su propia carcasa, tomando el control total sobre el envio y recepcion de paquetes Ethernet sin interferencia del hipervisor.

echo 4 > /sys/class/net/eth0/device/sriov_numvfs
ip link set eth0 vf 0 spoof off
qm set 100 -net0 virtio=XX:XX:XX:XX:XX:XX,bridge=vmbr0,queues=4

Consideraciones Finales sobre Rendimiento y Limitaciones

Adoptar SR-IOV para el enrutamiento de Capa 3 en un laboratorio transforma radicalmente la capacidad de nuestra infraestructura, ofreciendo una velocidad de red impresionante con un consumo minimo de procesamiento. Sin embargo, existen desventajas: dado que el hardware pasa a ser controlado directamente por la maquina virtual, perdemos funciones clasicas del hipervisor como la capacidad de migrar esa maquina virtual en tiempo real a otro servidor fisico sin cortar la conexion. Para la gran mayoria de los entusiastas, la enorme ganancia de rendimiento compensa con creces esta pequena perdida de flexibilidad operacional.

En resumen, planificar la topologia de red considerando el uso de funciones virtuales exige prestar mucha atencion a la seguridad y al mapeo de puertos fisicos. Cuando esta bien configurado, el ecosistema del laboratorio deja de sufrir por cuellos de botella de paquetes y pasa a soportar flujos intensos de datos, sirviendo como un campo de pruebas excelente para arquitecturas de red empresariales.