Informe Técnico: Conflicto de Direccionamiento PCIe e IOMMU

Fecha:

2026-04-26

Host:

dev.raulvilchez.org

Dispositivo Afectado:

NVMe Samsung SM961 (OS/Journal)

Hardware Causante:

QNAP Dual-Port 2.5GbE (Intel I225-LM)

Estado Final:

Estabilizado mediante Downgrade a TX-201

Contexto del Problema

Tras la instalación de una tarjeta de red QNAP de doble puerto, el sistema comenzó a experimentar corrupciones críticas en el Journal de systemd. El síntoma principal era la imposibilidad de escribir logs y el fallo de integridad del sistema de archivos, coincidiendo con la reserva de 16 GB de RAM en Hugepages.

Comandos de Diagnóstico y Mitigación

Para estabilizar y diagnosticar el sistema, se emplearon los siguientes comandos:

  1. Verificación de Integridad:

    journalctl --verify
    journalctl -p 3..0 -xb
    
  2. Gestión de Configuración del Kernel (grubby):

    # Desactivación de Hugepages y forzado de reasignación PCIe
    grubby --update-kernel=ALL --args="pci=realloc,assign-busses hugepages=0 nomodeset"
    
    # Intento de aislamiento de grupos IOMMU
    grubby --update-kernel=ALL --args="pcie_acs_override=downstream,multifunction,all"
    
  3. Análisis de Topología de Bus y Grupos IOMMU:

    # Identificar en qué dirección (Bus ID) ha quedado
    lspci -nn | grep -i "QNAP\|Ethernet\|Network"
    
    # Localización de BARs por encima de 4GB
    lspci -vv | grep -i "Region.*Memory at [0-9a-f]\{9,\}"
    
    # Mapeo de grupos IOMMU por dispositivo
    for d in /sys/kernel/iommu_groups/*/devices/*; do
        n=${d#*/iommu_groups/*}; n=${n%%/*};
        printf 'IOMMU Group %s ' "$n"; lspci -nns "${d##*/}";
    done
    

Conclusiones Técnicas

El análisis reveló un conflicto de hardware insalvable en el Grupo IOMMU 16.

  1. Hacinamiento del Bus: El slot PCIe utilizado cuelga de un switch ASMedia (Chipset) que agrupa en la misma unidad atómica de IOMMU al NVMe de sistema, la controladora Realtek integrada y la tarjeta QNAP.

  2. Conflicto MMIO: La tarjeta QNAP dual-port reclama ventanas de direcciones (BARs) extensas. Al activarse los 16 GB de Hugepages, el mapa de memoria se satura, provocando que las transacciones DMA de la red “pisen” el espacio de memoria reservado para el controlador del NVMe.

  3. Fallo de Aislamiento: A pesar de aplicar pcie_acs_override=all, el hardware no permite el divorcio lógico de estos dispositivos, lo que garantiza que cualquier error de bus en la red corrompa el flujo de datos del disco.

Justificación del Downgrade a TX-201

Se ha determinado que la vuelta a la tarjeta TX-201 (Single Port) es la única vía para mantener los requisitos de rendimiento de la estación:

  • Estabilidad del Journal: La TX-201 posee una huella MMIO significativamente menor, reduciendo la probabilidad de colisión en el Grupo 16.

  • Prioridad de Virtualización: Permite mantener los 8192 Hugepages (2M) necesarios para libvirt sin comprometer la integridad del sistema de archivos.

  • Seguridad de Datos: Las pruebas con la TX-201 devuelven un estado de PASS constante en el Journal, confirmando que la convivencia en el bus es posible con una carga de registros reducida.

Estado Actual

El sistema opera con la TX-201, con el stack de baja latencia activo y los parámetros de diagnóstico (nomodeset, pci=realloc) retirados, recuperando la funcionalidad completa de la GPU y el entorno gráfico.