Al usar tarjetas PCIe SATA en Linux o Ubuntu, es común encontrarse con discos que no se detectan, discos que desaparecen tras un rato, congelamientos del sistema o problemas de arranque durante el entrenamiento del enlace PCIe. Los ejemplos típicos incluyen tarjetas SATA con JMB585 y ASM1166, sobre todo en NAS, mini PC, equipos industriales, placas modificadas o adaptadores baratos.
pci=nomsi y pcie_aspm=off son dos parámetros del kernel Linux usados a menudo para diagnosticar estos problemas. Ambos están relacionados con PCIe, pero no resuelven lo mismo:
pci=nomsitrata sobre problemas de señalización de interrupciones, es decir, la forma en que el dispositivo avisa a la CPU.pcie_aspm=offtrata sobre problemas de gestión de energía PCIe, es decir, enlaces que no despiertan bien tras entrar en bajo consumo.
Si se mezclan como si fueran el mismo tipo de solución, el diagnóstico se vuelve superstición. Es mejor observar los síntomas y decidir si conviene sospechar primero de interrupciones, ahorro de energía del enlace o hardware defectuoso.
pci=nomsi: desactivar interrupciones señalizadas por mensaje
pci=nomsi puede leerse así:
PCI: dispositivos relacionados con PCI.no: desactivar.MSI: Message Signaled Interrupts.
Indica al kernel Linux que no use MSI / MSI-X para dispositivos PCI y que vuelva al modo de interrupciones tradicional INTx.
Qué es MSI
Tradicionalmente, un dispositivo de hardware avisa a la CPU mediante pines físicos de interrupción, es decir, IRQ tradicionales. El mecanismo funciona, pero tiene límites de compartición y escalabilidad.
Después llegaron MSI / MSI-X. El dispositivo ya no necesita tirar de un pin físico, sino escribir un mensaje en una dirección concreta de memoria. La CPU recibe ese mensaje y sabe qué dispositivo ha generado la interrupción. En sistemas modernos, MSI / MSI-X suele ser más flexible y adecuado para dispositivos con mucha concurrencia.
El problema es que no todas las tarjetas PCIe implementan MSI de forma fiable. Algunas tarjetas baratas, tarjetas retiradas de servidores, diseños con chips puente o controladoras SATA con firmware mediocre pueden producir mensajes MSI anómalos, interrupciones perdidas o tormentas de interrupciones con drivers Linux.
Síntomas comunes:
- El sistema se cuelga al detectar la tarjeta PCIe durante el arranque.
- La tarjeta SATA no detecta discos.
- El sistema se congela de forma aleatoria.
dmesgmuestra errores comoirq xx: nobody cared.- La tarjeta parece funcionar en Windows pero es inestable en Linux.
El núcleo del problema no es el disco ni el sistema de archivos, sino el método de comunicación de interrupciones entre el dispositivo y la CPU.
Qué ocurre al añadir pci=nomsi
Se activa:
|
|
Esto dice al kernel Linux que no permita a los dispositivos PCI usar interrupciones MSI avanzadas y que vuelvan al modo INTx tradicional.
Puede haber una ligera pérdida de rendimiento y eficiencia de interrupciones, sobre todo en dispositivos de alto rendimiento o mucha frecuencia de interrupciones. En NAS domésticos, tarjetas SATA y arreglos de discos mecánicos normales, el impacto práctico suele ser pequeño. Su valor está en esquivar bugs de compatibilidad MSI en firmware o chips puente, permitiendo que el sistema identifique el dispositivo y maneje I/O de forma estable.
En resumen, pci=nomsi trata el caso en que “la forma en que el dispositivo avisa a la CPU no es fiable”.
pcie_aspm=off: desactivar Active State Power Management de PCIe
pcie_aspm=off puede leerse así:
PCIe: PCI Express.ASPM: Active State Power Management.off: desactivar.
Significa desactivar el ahorro de energía del enlace PCIe para que no entre en estados de bajo consumo.
Qué es ASPM
ASPM es un mecanismo de ahorro de energía del bus PCIe. Cuando el sistema detecta que un enlace PCIe no está transmitiendo datos, puede moverlo a un estado de bajo consumo como L0s o L1. Cuando el dispositivo vuelve a necesitar transferir datos, el enlace se despierta y regresa al estado normal.
En hardware bien diseñado, esto reduce consumo y el usuario casi no lo nota. En algunas placas de consumo, mini PC, equipos industriales, tarjetas SATA baratas, risers o configuraciones con señal débil, el problema es que el enlace “duerme y luego no despierta bien”.
Un caso típico es una tarjeta PCIe SATA JMB585 o ASM1166 que entra en bajo consumo tras estar inactiva. En el siguiente acceso a disco, el enlace debe despertar desde L1. Si el controlador, la placa, el riser, la alimentación o el firmware no son suficientemente buenos, el despertar puede ser demasiado lento o puede producirse ruido físico en la señal. El kernel Linux puede creer que el dispositivo desapareció por un instante.
Mensajes típicos de dmesg:
|
|
Luego pueden aparecer:
- Discos que desaparecen.
- Arreglos degradados.
- Sistema de archivos remontado como solo lectura.
- Servicios NAS fallando.
- I/O del sistema bloqueado.
- El disco vuelve temporalmente tras reiniciar.
Lo molesto es que no siempre aparece al arrancar. A menudo ocurre tras un rato de funcionamiento, después de estar inactivo o durante cambios de carga.
Qué ocurre al añadir pcie_aspm=off
Se activa:
|
|
Esto indica al kernel que desactive ASPM PCIe en todo el sistema. Los enlaces PCIe intentan mantenerse conectados en estado normal tanto en reposo como con carga, sin entrar en estados de bajo consumo.
El efecto secundario es un ligero aumento del consumo. En sobremesa, NAS y mini PC suele ser de cientos de mW a uno o dos vatios. En portátiles puede afectar la batería. El beneficio es reducir pérdidas de disco, errores de entrenamiento de enlace y errores de capa física causados por dormir y despertar el enlace PCIe.
En resumen, pcie_aspm=off trata el caso en que “el enlace PCIe no despierta de forma fiable tras dormir”.
Diferencia entre ambos parámetros
Se pueden entender como dos problemas distintos:
| Parámetro | Problema central | Síntomas típicos | Efecto secundario |
|---|---|---|---|
pci=nomsi |
Conflictos de interrupciones, mala compatibilidad MSI / MSI-X | Cuelgue al arrancar, no detecta discos, irq xx: nobody cared, congelamiento |
La eficiencia de interrupciones puede bajar algo en concurrencia extrema |
pcie_aspm=off |
Fallo al despertar de ahorro PCIe, señal inestable | Arranca bien, luego pierde discos, PCIe Bus Error, COMRESET failed |
Consumo algo mayor, menos batería en portátiles |
No se sustituyen entre sí. Uno actúa sobre interrupciones; el otro sobre gestión de energía del enlace.
Si la máquina se cuelga durante el arranque o el dispositivo nunca aparece, sospecha primero de pci=nomsi. Si arranca bien pero pierde discos más tarde, o dmesg muestra Physical Layer, COMRESET o “link is slow to respond”, sospecha primero de pcie_aspm=off.
Conviene añadir ambos
Muchos usuarios de NAS añaden ambos:
|
|
Es una forma rápida de diagnosticar, especialmente con JMB585, ASM1166, mini PC, adaptadores, alimentación y cableado dudosos. Permite esquivar a la vez problemas MSI y problemas de despertar ASPM.
Pero para diagnosticar mejor, conviene registrar síntomas y logs:
- Si hay errores de interrupción o cuelgue al arrancar, prueba primero
pci=nomsi. - Si hay pérdidas de disco tras funcionar, PCIe Bus Error o COMRESET, prueba primero
pcie_aspm=off. - Si el problema es grave y necesitas estabilidad rápido, añade ambos y luego verifica por separado.
Así sabrás qué tipo de problema era, lo que ayuda al cambiar tarjeta, ranura, placa o ajustes de BIOS.
Cómo hacerlo permanente en Ubuntu / Debian
Edita el archivo de configuración de Grub:
|
|
Busca esta línea:
|
|
Añade los parámetros dentro de las comillas, separados por espacios:
|
|
Guarda y sal. En Nano, pulsa Ctrl+O, confirma con Enter y luego Ctrl+X.
Actualiza Grub y reinicia:
|
|
Tras reiniciar, verifica la línea de arranque del kernel:
|
|
Si la salida contiene pci=nomsi y pcie_aspm=off, los parámetros están activos.
Qué más revisar
Estos dos parámetros son útiles, pero no arreglan todos los problemas de pérdida de discos. Al diagnosticar tarjetas SATA y NAS, revisa también:
- Cables SATA flojos o de mala calidad.
- Alimentación estable, especialmente al arrancar varios discos a la vez.
- Mal contacto en la ranura PCIe.
- Sobrecalentamiento de la tarjeta.
- Opciones BIOS relacionadas con PCIe ASPM, Above 4G Decoding y PCIe speed.
- Problemas conocidos de firmware de la tarjeta SATA.
- Errores SMART, sectores defectuosos o I/O error en logs.
Si SMART ya informa errores o la alimentación es inestable, los parámetros del kernel no solucionarán la causa real.
Resumen
pci=nomsi y pcie_aspm=off se usan a menudo para diagnosticar tarjetas PCIe SATA inestables en Linux, pero actúan en capas distintas:
pci=nomsi: desactiva MSI / MSI-X para esquivar problemas de compatibilidad de interrupciones.pcie_aspm=off: desactiva PCIe ASPM para evitar fallos al despertar tras ahorro de energía.
En JMB585, ASM1166, NAS, mini PC y tarjetas PCIe baratas, ambos parámetros pueden salvar el día. Lo más prudente es mirar dmesg, decidir si parece un problema de interrupciones o de ahorro del enlace, y luego usar uno o ambos.
Son herramientas de diagnóstico, no sustituyen hardware fiable. Si el sistema se estabiliza al añadirlos, el problema probablemente está en compatibilidad de interrupciones o gestión de energía PCIe. Si los discos siguen cayendo, revisa alimentación, cables, refrigeración, salud de discos y la tarjeta.