Qué es la virtualización de I/O (SR-IOV) y para qué sirve

Última actualización: diciembre 12, 2025
Autor: Isaac
  • SR-IOV permite que una única tarjeta PCIe se divida en funciones físicas y virtuales, ofreciendo a cada VM acceso casi directo al hardware de red.
  • El uso de funciones virtuales reduce la latencia y el consumo de CPU del host, acercando el rendimiento de red al de un entorno no virtualizado.
  • La tecnología requiere hardware, firmware e hipervisor compatibles y limita funciones como la migración en vivo y algunas opciones de alta disponibilidad.
  • Plataformas como Hyper-V, XenServer y Oracle VM Server for SPARC integran SR-IOV con sus propios mecanismos de creación, asignación y gestión avanzada de VF.

Virtualización SR-IOV en redes

La virtualización de E/S de raíz única (SR-IOV) se ha convertido en una de esas tecnologías que, aunque trabajan en segundo plano, marcan la diferencia cuando exiges a la red el máximo rendimiento en entornos virtualizados. Si alguna vez has notado que tus máquinas virtuales “van bien, pero podrían ir mejor” en términos de red, probablemente lo que te está frenando es la capa de conmutación software del hipervisor, y justo ahí es donde entra SR-IOV.

En pocas palabras, SR-IOV permite que las máquinas virtuales hablen casi “cara a cara” con el hardware de red, saltándose buena parte de la sobrecarga del hipervisor. A cambio, hay que asumir ciertas limitaciones en funciones avanzadas como la migración en vivo o algunas opciones de alta disponibilidad. En este artículo vamos a desgranar con calma qué es SR-IOV, cómo funciona a nivel de hardware y software, qué ventajas e inconvenientes tiene, y cómo se implementa en plataformas como Hyper-V, XenServer o Oracle VM Server for SPARC.

Qué es la virtualización de I/O (SR-IOV)

SR-IOV, siglas de Single Root I/O Virtualization, es una extensión de la especificación PCI Express (PCIe) definida por PCI-SIG que permite que un único dispositivo de E/S (normalmente una NIC, pero también controladoras de otro tipo) se presente al sistema como múltiples dispositivos PCIe independientes. Es decir, una sola tarjeta puede “partirse” lógicamente en varias interfaces que el sistema ve como si fueran tarjetas distintas.

Para lograrlo, el dispositivo SR-IOV expone dos tipos de funciones PCIe claramente diferenciadas: funciones físicas (PF) y funciones virtuales (VF). La función física es el “cerebro” que controla el dispositivo, gestiona la capacidad SR-IOV y crea o destruye las funciones virtuales. Las funciones virtuales, por su parte, son instancias ligeras que comparten recursos de hardware con la PF y con otras VF, pero que el sistema operativo huésped percibe como dispositivos PCIe propios y dedicados.

El estándar SR-IOV define, además, cómo debe presentarse esta capacidad en el espacio de configuración PCIe, cómo se gestionan los recursos compartidos (colas, memoria, registros, interrupciones) y cómo se relaciona con la IOMMU (unidad de gestión de memoria de E/S) para mantener el aislamiento entre huéspedes. Gracias a este diseño, el tráfico de red puede evitar el conmutador virtual software del hipervisor y viajar directamente entre la máquina virtual y el adaptador físico.

Arquitectura de SR-IOV: PF, VF e IOMMU

En la arquitectura de SR-IOV, la pieza clave es la función física (Physical Function, PF). Esta función PCIe integra la estructura de capacidades SR-IOV, anuncia al sistema cuántas VF puede soportar como máximo, gestiona la asignación de recursos y permite configurar el dispositivo como cualquier otro PCIe completo (detectar, inicializar, gestionar, aplicar parámetros específicos del hardware, etc.).

Sobre esa PF se crean una o varias funciones virtuales (Virtual Functions, VF). Cada VF está asociada a una PF y comparte con ella, y con otras VF del mismo dispositivo, ciertos recursos físicos como la memoria, los registros internos, las colas de E/S o el puerto de red. Sin embargo, cada VF tiene su propio espacio de configuración PCIe, su propio espacio de memoria asignado y su propio conjunto de registros, lo que hace que el sistema invitado la perciba como una NIC “real”, no como una mera emulación.

A cada PF y cada VF se le asigna un RID (Requester ID) de PCIe único. Este identificador es fundamental para la IOMMU, que lo utiliza para distinguir los diferentes flujos de tráfico, aplicar traducciones de direcciones de memoria y gestionar las interrupciones por separado para cada función. Gracias a esto, el sistema puede entregar los paquetes directamente a la partición o dominio correcto, manteniendo el aislamiento entre máquinas virtuales aunque compartan el mismo adaptador físico.

Un dispositivo SR-IOV típico dispone de una PF y hasta decenas de miles de VF potenciales (el estándar permite hasta 64.000, aunque la cifra real depende del modelo concreto). La PF se encarga de crear las VF que se necesiten y de exponerlas al sistema para que puedan asignarse a distintos dominios, particiones o VMs. Una vez creadas, las VF se pueden vincular directamente a máquinas virtuales, que usan controladores específicos para sacar partido a la aceleración de hardware.

  ¿Cómo puedo abrir un archivo de Publisher en Word?

Cómo fluye el tráfico de red con SR-IOV

En un entorno sin SR-IOV, el tráfico de red de una VM suele pasar por una NIC virtual emulada o paravirtualizada, conectada a un conmutador software del hipervisor. Cada paquete que entra o sale debe procesarse en esa capa intermedia, lo que consume CPU del host y añade latencia. SR-IOV cambia las reglas del juego al permitir un camino de datos directo (VF data path) entre la VM y el hardware.

Cuando a una máquina virtual se le asigna una VF, el tráfico de esa VM fluye directamente entre la pila de red del sistema operativo invitado y la función virtual de la NIC. El conmutador interno de la tarjeta de red es el encargado de enrutar los paquetes entre VFs y el puerto físico del adaptador, o de reenviarlos hacia el conmutador extensible del hipervisor si el destino es una VM que no tiene VF asignada.

Esta ruta de datos directa tiene varios efectos inmediatos: disminuye la latencia, reduce el consumo de CPU en el host y acerca el rendimiento de las VMs al de un entorno no virtualizado. Además, las VF cuentan con sus propios recursos (memoria, interrupciones, flujos DMA), lo que evita que el tráfico de una partición interfiera con el de otra, reforzando así el aislamiento.

Eso sí, los paquetes que se dirigen a máquinas virtuales que no disponen de VF siguen pasando por el camino sintético: la NIC reenvía esos paquetes al conmutador extensible del hipervisor, que los distribuye mediante las NIC virtuales convencionales. De esta forma, SR-IOV convive con el modelo tradicional y sólo acelera el tráfico de las VMs a las que se ha asignado una VF.

Ventajas de usar SR-IOV en entornos virtualizados

La principal razón para habilitar SR-IOV es el salto de rendimiento que ofrece, tanto en ancho de banda efectivo como en latencia de red. En muchas plataformas se ha observado que una VF asociada a una VM puede rendir casi al mismo nivel que una NIC física asignada directamente, con mejoras muy claras respecto a NIC emuladas o incluso paravirtualizadas.

Uno de los beneficios directos es la reducción del uso de CPU en el host, al eliminar gran parte del procesamiento de paquetes en el hipervisor y en su conmutador virtual. En algunos escenarios se habla de reducciones de consumo de CPU cercanas al 30 %, especialmente en cargas de trabajo con tráfico intensivo (servicios de alta concurrencia, almacenamiento sobre red, etc.). Menos sobrecarga implica poder alojar más VMs por host o liberar recursos para otras tareas.

La latencia también se ve notablemente afectada: al eliminar cambios de contexto y capas de software intermedias, los tiempos de ida y vuelta de los paquetes pueden reducirse hasta la mitad en entornos muy exigentes, algo crítico en plataformas de trading de alta frecuencia, sistemas de comunicaciones en tiempo real o clústeres de computación científica.

Desde el punto de vista de costes, SR-IOV permite compartir un único adaptador físico entre muchas VMs como si cada una tuviera su propia NIC dedicada, lo que ahorra tarjetas, puertos, cableado y consumo energético. Se mejora así la eficiencia de la infraestructura sin renunciar a un gran rendimiento de red para las cargas que realmente lo necesitan.

Por último, al delegar parte del procesamiento de red en el propio hardware de la NIC, se liberan recursos del hipervisor y se reduce la complejidad de algunas rutas de datos, algo que puede traducirse en mayor estabilidad y menos cuellos de botella en entornos densamente virtualizados.

Limitaciones y retos prácticos de SR-IOV

No todo son ventajas: SR-IOV trae consigo una serie de compromisos funcionales que conviene conocer antes de desplegarlo en producción. El más relevante en la mayoría de plataformas es que, cuando una VM tiene asignada una VF, no suele ser posible migrarla en vivo entre hosts sin interrumpir el servicio, ya que el dispositivo PCI está fuertemente ligado al hardware físico concreto.

En algunos entornos, esta dependencia del hardware también complica las estrategias de alta disponibilidad y conmutación por error. Si tu diseño de plataforma se basa en mover VMs libremente entre hosts ante cualquier incidente, SR-IOV puede resultar un freno. Por eso muchos administradores lo ven como una herramienta para casos concretos, no como una solución universal para toda la granja de servidores.

  Activar el Micrófono en Windows 10: Instrucciones Paso a Paso

Existen, además, limitaciones de compatibilidad: no todas las tarjetas de red soportan SR-IOV, no todos los hipervisores lo implementan igual y tanto BIOS como firmware de la NIC deben estar debidamente preparados. Es imprescindible comprobar que el hardware soporte VT-d o AMD-Vi (virtualización de E/S) y que el sistema operativo del host y de las VMs disponga de controladores compatibles.

En cuanto a la gestión, la configuración de SR-IOV no es trivial. Hay que coordinar ajustes en BIOS, drivers, hipervisor, asignación de VF y, en algunos casos, planificar cuidadosamente los reinicios del dominio raíz o del host para minimizar el impacto. Además, operaciones como crear o destruir VF suelen requerir que el dominio de control o “primary” se reinicie, lo que afecta a todos los dominios de E/S configurados.

Por último, ciertas funciones de red avanzadas pueden no estar disponibles o estar restringidas con SR-IOV: por ejemplo, en algunos sistemas no se admite la agregación de enlaces (bonding) de VF, o la configuración de VLAN sobre VF tiene reglas específicas (no se pueden combinar simultáneamente ciertas propiedades como pvid y vid, o conviene no modificar direcciones MAC desde el invitado).

Requisitos de hardware y software para usar SR-IOV

Para desplegar SR-IOV necesitas que confluyan varios requisitos en el host. El primero y más obvio es contar con dispositivos PCIe con soporte SR-IOV, normalmente NIC de gama media-alta de fabricantes como Intel (series X520/X540, etc.) o Mellanox, entre otros. El estándar SR-IOV se apoya en la versión 1.1 (o superior) de la especificación PCI-SIG.

En el plano de la plataforma, la placa base y el procesador deben ser compatibles con tecnologías de virtualización de E/S, como Intel VT-d o AMD-Vi, y estas deben estar habilitadas en la BIOS/UEFI. Si estas características no están activas, la IOMMU no podrá diferenciar ni proteger adecuadamente los flujos de tráfico de cada VF.

El hipervisor y el sistema operativo del host tienen que incluir controladores con soporte SR-IOV. Es recomendable verificar con herramientas como ethtool (en Linux) qué driver está utilizando la NIC y si la documentación del fabricante lo marca como compatible con SR-IOV. A menudo también es necesario tener el firmware de la tarjeta y de la placa base actualizados a versiones mínimas indicadas por el proveedor.

En plataformas como Oracle VM Server for SPARC, a partir de ciertas versiones se habilita de forma oficial la función SR-IOV PCIe, lo que implica también requisitos concretos de firmware de sistema, versiones de hypervisor y utilidades de gestión como Logical Domains Manager (ldm). Es importante revisar las notas de la versión y la documentación del proveedor antes de empezar.

Por último, el sistema operativo invitado que va a usar la VF debe contar con drivers adecuados para la función virtual. En muchos casos, una VF de red creada por una NIC SR-IOV se expone como un dispositivo estándar (por ejemplo, igbvf en entornos Intel), de modo que el invitado la detecta igual que detectaría una NIC física.

SR-IOV en Hyper-V: rutas de datos y particiones

En Hyper-V, SR-IOV se integra directamente con la arquitectura de particiones primaria y secundarias. La PF suele estar asociada a la partición principal (el sistema de gestión), mientras que cada VF se asigna a una partición secundaria concreta. De este modo, Hyper-V puede mapear las VFs como NICs de alto rendimiento dentro de las VMs invitadas.

El tráfico de red de las VMs que usan VF no atraviesa el conmutador extensible de Hyper-V, sino que fluye directamente entre la pila de red del invitado y la VF. El conmutador de la propia NIC se encarga de encaminar los paquetes hacia la red externa o hacia otras particiones con VF. Sólo los paquetes con destino a VMs sin VF conectada vuelven al conmutador extensible, que opera sobre la ruta de datos sintética.

Cada VF tiene su propio espacio de memoria, interrupciones y flujos DMA asociados a la partición secundaria donde se usa. Esto permite que el tráfico de una VM no afecte al resto y que el rendimiento se acerque al de un servidor físico. Además, como cada función (PF y VF) tiene un RID PCIe propio, la IOMMU puede aplicar traducciones de memoria e interrupciones por separado.

  Como pasar archivos pdf y enlaces a kindle

Desde la perspectiva del administrador, trabajar con SR-IOV en Hyper-V implica asegurarse de que el hardware lo soporta, habilitar la función en el host, y luego asignar VF a las VMs que necesitan rendimiento de red máximo, sin olvidar que dichas VMs verán restringidas operaciones como la migración en vivo mientras la VF esté conectada.

SR-IOV en XenServer / Citrix Hypervisor

En XenServer (Citrix Hypervisor), SR-IOV se utiliza exactamente con la misma finalidad: reducir la latencia y el uso de CPU derivados de los conmutadores virtuales estándar de dom0. La idea es que cargas de trabajo muy exigentes en red dispongan de funciones virtuales dedicadas para comunicarse prácticamente de forma directa con la NIC física.

En este entorno, el adaptador PCIe SR-IOV presenta un conjunto de VFs que el hipervisor puede asignar a máquinas virtuales. Desde el punto de vista de la VM, la VF aparece como un dispositivo PCI independiente, lo que permite saltarse buena parte de la pila de red de dom0. Como resultado, se consigue una reducción notable de latencia, un aumento de ancho de banda efectivo por VM y un menor consumo de CPU por paquete procesado.

La configuración puede realizarse tanto desde la interfaz gráfica de XenCenter como desde la línea de comandos con la herramienta xe. En XenCenter se crea una “red SR-IOV” asociada a una NIC física compatible, y después se asigna esa red a las VMs como si fuera una red más. Mediante CLI, se pueden crear redes SR-IOV, listar PIFs físicos, vincularlos a redes y gestionar parámetros avanzados.

Si los controladores del host requieren especificar cuántas VF se van a crear, es habitual tener que añadir opciones como max_vfs en los archivos de configuración de módulos del kernel y reiniciar el host para que el número de VFs quede fijado al arrancar. Una vez disponible la red SR-IOV, las VMs pueden conectar interfaces a ella, siempre teniendo en cuenta que no se soporta el hotplug de VFs: hay que apagar la VM para añadir o quitar la interfaz.

Entre las limitaciones importantes en XenServer con SR-IOV están la incapacidad de utilizar migración en vivo, suspensión o ciertas funcionalidades avanzadas mientras la VM tenga una VF asociada, así como restricciones en bonding y VLAN que pueden requerir configuraciones manuales adicionales.

SR-IOV en Oracle VM Server for SPARC

Oracle VM Server for SPARC incorpora soporte para SR-IOV PCIe a partir de versiones concretas del producto, basándose en el estándar SR-IOV 1.1. En este entorno, un mismo recurso de E/S conocido como función física se comparte entre varios dominios lógicos mediante funciones virtuales, de manera que cada dominio tiene acceso a recursos dedicados pero también a recursos comunes compartidos.

En este caso, cada PF y sus VFs se gestionan a través de Logical Domains Manager (ldm). El administrador identifica primero qué funciones físicas SR-IOV PCIe están disponibles en el sistema (por ejemplo, mediante ldm list-io), consulta detalles como el número máximo de VFs soportadas o parámetros específicos del dispositivo (con ldm list-io -l y -d), y después habilita la virtualización de E/S en el bus PCIe correspondiente.

Para activar SR-IOV en un bus concreto se utiliza el comando ldm set-io iov=on sobre el bus en cuestión, normalmente dentro de una operación de “reconfiguración retrasada” del dominio primario. A continuación, se crean las funciones virtuales necesarias con ldm create-vf, pudiendo definir en cada VF propiedades de red como dirección MAC, direcciones MAC alternativas, MTU, VLAN (vid) o VLAN principal (pvid), además de parámetros específicos del dispositivo como el número de “unicast slots”.

Cada VF se puede asignar después a un dominio de E/S o a un dominio invitado con comandos como ldm add-io. Es importante destacar que el dominio al que se añade la VF debe estar apagado o en estado enlazado, y que algunas modificaciones posteriores de propiedades pueden requerir nuevas reconfiguraciones retrasadas y reinicios del dominio primario para surtir efecto.

Oracle documenta asimismo una serie de limitaciones específicas: sólo se soportan en ciertas versiones tarjetas SR-IOV Ethernet; la funcionalidad SR-IOV sólo está activa para tarjetas instaladas en el dominio primary; y la destrucción de VFs debe hacerse en orden inverso al de su creación (sólo puede destruirse la última VF creada). Además, los cambios en la configuración de E/S directa del dominio raíz exigen planificar muy bien los reinicios para minimizar tiempos de inactividad.