ACS en BIOS: Qué es y por qué lo necesitas para virtualización

PUNTOS CLAVE

  • ACS (Access Control Services) es una capacidad PCIe que fuerza que el tráfico pase por el Root Complex.
  • Es fundamental para aislar dispositivos en grupos IOMMU individuales.
  • Sin ACS activo, es probable que no puedas hacer GPU Passthrough (VFIO) de forma segura.
  • Permite evitar el uso del parche de kernel «ACS Override», que compromete la seguridad del sistema.

Si alguna vez has intentado configurar una máquina virtual con acceso directo al hardware (el famoso passthrough), habrás chocado contra el muro de los grupos IOMMU. Es esa frustrante realidad donde tu flamante GPU aparece «casada» con el controlador USB o, peor aún, con el puente sur de la placa.

Aquí es donde entra en juego la keyword principal: ACS (Access Control Services) en las BIOS, una tecnología que sobre el papel suena aburrida pero que decide si tu servidor doméstico será una obra de ingeniería o un caos de dependencias de hardware.

#¿Qué es exactamente el ACS (Access Control Services)?

A nivel puramente técnico, el Access Control Services es una característica de la especificación PCIe que permite controlar las transacciones peer-to-peer (P2P).

En un mundo sin ACS, los dispositivos PCIe pueden hablar entre ellos directamente sin que la CPU o el IOMMU se enteren de nada. Esto es eficiente para el rendimiento bruto, pero es una pesadilla para la seguridad en entornos virtualizados.

Cuando activamos ACS en la BIOS, forzamos que cada paquete de datos deba pasar obligatoriamente por el Root Complex. Esto permite que el IOMMU (como _Intel VT-d_ o _AMD-Vi_) pueda identificar de dónde viene cada transacción y aislarla. Es, esencialmente, ponerle puertas al campo para que el sistema operativo sepa exactamente qué dispositivo está haciendo qué.

TÉRMINO RELACIONADO

IOMMU (Input-Output Memory Management Unit): El componente de hardware que permite a una máquina virtual acceder a la memoria física de un dispositivo PCIe de forma segura y directa.

#IOMMU Groups: El rompecabezas de la segmentación

El sistema operativo agrupa los dispositivos en lo que llamamos grupos IOMMU. Un grupo es la unidad mínima de aislamiento: o pasas todo el grupo a la máquina virtual, o no pasas nada. Si tu tarjeta de red y tu tarjeta gráfica están en el mismo grupo porque el fabricante de la placa decidió ahorrarse unos céntimos en la validación de los trazados PCIe, estás en un problema.

El ACS permite romper estos grupos gigantes. Al habilitarlo, el hardware le dice al kernel: «Oye, puedo garantizar que este slot está aislado del de al lado». Entonces, el kernel de Linux (o tu hipervisor preferido) genera grupos más pequeños y granulares. Navegar por los submenús de una placa base sin manual para encontrar esta opción te deja con esa sensación de incertidumbre táctil propia de quien, en mitad de una orgía a oscuras, sabe que algo importante está pasando pero no tiene ni idea de por dónde empezar a tocar.

bash
# Comando para verificar tus grupos IOMMU en Linux
find /sys/kernel/iommu_groups/ -type l
# Si ves muchos dispositivos bajo el mismo ID de grupo, necesitas ACS

#Cómo encontrar y activar ACS en tu BIOS

Cada fabricante parece disfrutar escondiendo esta opción bajo nombres crípticos. No esperes encontrar un botón gigante que diga «Arreglar Passthrough». Normalmente, tendrás que bucear en las opciones avanzadas de la CPU o del chipset.

NOTA TÉCNICA

En placas base _ASUS_ o _Gigabyte_ recientes, esta opción suele estar dentro de «Advanced -> AMD CBS -> Device Common Options» o «Intel VMD Setup Menus».

Busca términos como «ACS Enable», «PCIe ARI Support» o «IOMMU Isolation». En plataformas _AMD Ryzen_, es vital activar también el «AER Cap» (Advanced Error Reporting), ya que a menudo van de la mano para que el sistema reconozca las capacidades de aislamiento de los carriles PCIe directos al procesador.

¿Para qué sirve el ACS en la BIOS?

Sirve para habilitar el aislamiento estricto de dispositivos PCIe, permitiendo que el hardware separe componentes en grupos IOMMU individuales. Esto es indispensable para asignar una GPU u otro hardware directamente a una máquina virtual (GPU Passthrough) sin comprometer la estabilidad o la seguridad del sistema host.

#El IOMMU group «monstruo»

Hace no mucho me enfrenté a un servidor con una placa base de gama media que se negaba a separar la controladora SATA interna de los slots PCIe secundarios. El síntoma fue evidente: al intentar arrancar la máquina virtual con la GPU, el sistema anfitrión perdía el acceso al disco de arranque y se quedaba congelado de forma irreversible.

Al principio pensé que bastaría con cambiar la tarjeta de slot. Craso error. Tras moverla tres veces y cansarme de las rozaduras en los dedos, me di cuenta de que el problema no era físico, sino de lógica de firmware. La placa simplemente no estaba reportando soporte ACS para el puente PCIe que gestionaba esos slots.

Tras una actualización de BIOS (que el fabricante marcaba como «mejoras de estabilidad», ese eufemismo técnico para «arreglamos lo que estaba roto»), apareció la opción de Enable ACS. Fue como encender la luz. Los grupos IOMMU pasaron de ser tres bloques macizos de hardware a una lista detallada donde cada dispositivo tenía su propia identidad. A veces, la ingeniería de software es solo cuestión de pedir permiso al hardware para ser ordenado.

#Pros y contras de habilitar ACS

Como casi todo en computación de bajo nivel, activar servicios de control de acceso tiene sus matices. No es una solución mágica sin coste, aunque en el 90% de los casos de uso doméstico, los beneficios superan a los riesgos.

  • Pros: Aislamiento total de hardware, posibilidad de hacer VFIO con múltiples dispositivos y mayor seguridad al evitar ataques de DMA (Direct Memory Access) entre VMs.
  • Contras: Puede introducir una latencia minúscula (despreciable fuera de benchmarks sintéticos) al forzar el paso por el Root Complex y, ocasionalmente, puede causar inestabilidad si el hardware PCIe tiene una implementación mediocre del estándar.
TIP PRO

Si después de activar ACS sigues viendo grupos unidos, comprueba si tu CPU tiene suficientes carriles PCIe «limpios». Algunos chipsets de gama baja comparten ancho de banda de forma física, y ahí ni el mejor ACS del mundo podrá separarlos.

#¿Es esta configuración para ti?

Si eres un usuario que solo usa Windows 11 para jugar y navegar, ignora esta opción. De hecho, tenerla activa sin necesidad es simplemente añadir una capa de gestión que no vas a aprovechar. Es el equivalente a poner un puesto de control en una carretera por la que solo pasas tú.

Donde el ACS brilla es en los Home Labs y estaciones de trabajo de desarrollo. Si planeas correr _Proxmox_, _Unraid_ o un _Arch Linux_ con una máquina virtual de juegos integrada, el ACS es tu mejor amigo. Te ahorrará tener que aplicar el parche pcie_acs_override en el bootloader, una técnica que básicamente le miente al kernel sobre la seguridad del hardware y que debería ser siempre el último recurso.

Característica Función en Virtualización Importancia
Aislamiento P2P Evita comunicación directa entre dispositivos Alta (Seguridad)
Segmentación IOMMU Crea grupos individuales por slot Crítica (VFIO)
Compatibilidad Requiere soporte tanto en CPU como en Chipset Variable
Rendimiento Impacto mínimo en latencia de datos Baja

En resumen, si el hardware te lo permite, activa siempre el ACS. Es la diferencia entre pelearte con scripts de kernel a las 3 de la mañana o tener una configuración de hardware que simplemente funciona como debería haberlo hecho desde el primer día.