Las interrupciones señalizadas por mensaje ( MSI ) son un método de señalización de interrupciones que utiliza mensajes especiales en banda para reemplazar las señales tradicionales fuera de banda en líneas de interrupción dedicadas. Si bien las interrupciones señalizadas por mensaje son más complejas de implementar en un dispositivo, tienen algunas ventajas significativas sobre la señalización de interrupciones fuera de banda basada en pines, como un mejor rendimiento en el manejo de interrupciones. Esto contrasta con los mecanismos de interrupción tradicionales, como el sistema de solicitud de interrupción (IRQ) heredado.
Las interrupciones señalizadas por mensaje son compatibles con el bus PCI desde su versión 2.2 y con los buses PCI Express posteriores . Algunas arquitecturas no PCI también utilizan interrupciones señalizadas por mensaje.
Descripción general
Tradicionalmente, un dispositivo tiene una línea de interrupción (pin) que activa cuando desea enviar una señal de interrupción al entorno de procesamiento del host. Esta forma tradicional de señalización de interrupción es una forma de señalización de control fuera de banda, ya que utiliza una ruta dedicada para enviar dicha información de control, por separado de la ruta de datos principal. MSI reemplaza esas líneas de interrupción dedicadas con señalización dentro de banda, intercambiando mensajes especiales que indican interrupciones a través de la ruta de datos principal. En particular, MSI permite que el dispositivo escriba una pequeña cantidad de datos que describen interrupciones en una dirección de E/S especial asignada a la memoria , y luego el chipset envía la interrupción correspondiente a un procesador. [1] [2] [3]
Un error común con MSI es que permite que el dispositivo envíe datos a un procesador como parte de la interrupción. Los datos que se envían como parte de la transacción de escritura de memoria son utilizados por el chipset para determinar qué interrupción activar en qué procesador; esos datos no están disponibles para que el dispositivo comunique información adicional al controlador de interrupciones. [1] [2] [3]
Por ejemplo, PCI Express no tiene pines de interrupción separados; en su lugar, utiliza mensajes especiales en banda para permitir que se emule la activación o desactivación de pines. Algunas arquitecturas que no son PCI también utilizan MSI; como otro ejemplo, los dispositivos HP GSC no tienen pines de interrupción y pueden generar interrupciones solo escribiendo directamente en el registro de interrupción del procesador en el espacio de memoria. [ cita requerida ] El protocolo HyperTransport también admite MSI. [4]
Ventajas
Si bien son más complejas de implementar en un dispositivo, las interrupciones señalizadas por mensaje tienen algunas ventajas significativas sobre la señalización de interrupciones fuera de banda basada en pines. Desde el punto de vista mecánico, menos pines hacen que el conector sea más simple, más económico y más confiable. Si bien esto no es una ventaja para el conector PCI estándar, PCI Express aprovecha estos ahorros.
MSI aumenta la cantidad de interrupciones posibles. Mientras que el PCI convencional estaba limitado a cuatro interrupciones por tarjeta (y, como se compartían entre todas las tarjetas, la mayoría usaba solo una), las interrupciones señalizadas por mensaje permiten docenas de interrupciones por tarjeta, cuando esto resulta útil. [1]
También existe una ligera ventaja en el rendimiento. En el software, una interrupción basada en pines podría competir con una escritura enviada a la memoria. Es decir, el dispositivo PCI escribiría datos en la memoria y luego enviaría una interrupción para indicar que la escritura DMA se había completado. Sin embargo, un puente PCI o un controlador de memoria podrían almacenar en búfer la escritura para no interferir con algún otro uso de la memoria. La interrupción podría llegar antes de que se completara la escritura DMA y el procesador podría leer datos obsoletos de la memoria. [5] Para evitar esta competencia, se requería que los controladores de interrupciones leyeran desde el dispositivo para garantizar que la escritura DMA hubiera terminado. Esta lectura tenía una penalización moderada en el rendimiento. Una escritura MSI no puede superar una escritura DMA, por lo que la competencia se elimina. [6]
Tipos de MSI
PCI define dos extensiones opcionales para admitir interrupciones señalizadas por mensajes: MSI y MSI-X. PCI Express define su propio mecanismo basado en mensajes para emular las interrupciones PCI heredadas.
MSI
MSI (definido por primera vez en PCI 2.2) permite que un dispositivo asigne 1, 2, 4, 8, 16 o 32 interrupciones. El dispositivo está programado con una dirección en la que escribir (esta dirección es generalmente un registro de control en un controlador de interrupciones ) y una palabra de datos de 16 bits para identificarlo. El número de interrupción se agrega a la palabra de datos para identificar la interrupción. [1] Algunas plataformas como Windows no utilizan las 32 interrupciones, sino que solo utilizan hasta 16 interrupciones. [7]
MSI-X
MSI-X (definido por primera vez en PCI 3.0) permite que un dispositivo asigne hasta 2048 interrupciones. Se descubrió que la dirección única utilizada por MSI original era restrictiva para algunas arquitecturas. En particular, dificultaba la asignación de interrupciones individuales a diferentes procesadores, lo que resulta útil en algunas aplicaciones de redes de alta velocidad. MSI-X permite una mayor cantidad de interrupciones y le otorga a cada una una dirección de destino y una palabra de datos independientes. Los dispositivos con MSI-X no necesariamente admiten 2048 interrupciones. [3] [8] [9] [10]
Las características opcionales en MSI (direccionamiento de 64 bits y enmascaramiento de interrupciones) también son obligatorias con MSI-X.
Emulación de interrupción heredada de PCI Express
PCI Express no tiene pines de interrupción físicos, pero emula los 4 pines de interrupción físicos de PCI a través de mensajes PCI Express dedicados, como Assert_INTA y Deassert_INTC . Al estar basado en mensajes (en la capa PCI Express), este mecanismo proporciona algunas, pero no todas, las ventajas del mecanismo MSI de la capa PCI: los 4 pines virtuales por dispositivo ya no se comparten en el bus (aunque los controladores PCI Express aún pueden combinar interrupciones heredadas internamente) y los cambios de interrupción ya no sufren inherentemente condiciones de carrera.
PCI Express permite que los dispositivos utilicen estos mensajes de interrupción heredados, conservando la compatibilidad del software con los controladores PCI, pero también deben admitir MSI o MSI-X en la capa PCI.
sistemas x86
En los sistemas Intel, el LAPIC debe estar habilitado para que funcione el MSI/MSI-X PCI (y PCI Express), incluso en sistemas monoprocesador (de un solo núcleo). [11] [12] En estos sistemas, los MSI se manejan escribiendo el vector de interrupción directamente en el LAPIC del procesador/núcleo que necesita dar servicio a la interrupción. Los LAPIC Intel de 2009 admitían hasta 224 interrupciones basadas en MSI. [12] Según un benchmark de Intel de 2009 que utilizaba Linux , el uso de MSI reducía la latencia de las interrupciones en un factor de casi tres en comparación con la entrega de APIC de E/S. [13]
Compatibilidad con sistemas operativos
En la familia de sistemas operativos de Microsoft, Windows Vista y versiones posteriores admiten tanto MSI como MSI-X. La compatibilidad se agregó en el ciclo de desarrollo de Longhorn alrededor de 2004. [14] MSI no es compatible con versiones anteriores como Windows XP o Windows Server 2003. [ 15]
Solaris Express 6/05, lanzado en 2005, agregó soporte para MSI y MSI-X como parte de su nuevo marco de interrupción de interfaz de controlador de dispositivo (DDI). [16]
FreeBSD 6.3 y 7.0 lanzados en 2008 agregaron soporte para MSI y MSI-X. [17]
OpenBSD 5.0 lanzado en 2011 agregó soporte para MSI. [18] 6.0 agregó soporte para MSI-X. [19]
Linux obtuvo soporte para MSI y MSI-X alrededor de 2003. [20] Se sabe que las versiones del kernel de Linux anteriores a la 2.6.20 tienen errores y limitaciones graves en su implementación de MSI/MSI-X. [21]
Haiku obtuvo soporte para MSI alrededor de 2010. [22] El soporte para MSI-X se agregó más tarde, en 2013. [23]
NetBSD 8.0 lanzado en 2018 agregó soporte para MSI y MSI-X.
VxWorks 7 es compatible con MSI y MSI-X
Véase también
Referencias
- ^ abcd Especificación de bus local PCI Revisión 2.2 . PCI-SIG. Diciembre de 1998.
{{cite book}}:|work=ignorado ( ayuda ) - ^ ab Especificación de bus local PCI Revisión 2.3 . PCI-SIG. 2002.
{{cite book}}:|work=ignorado ( ayuda ) - ^ abc Especificación de bus local PCI Revisión 3.0 . PCI-SIG. Agosto de 2002.
{{cite book}}:|work=ignorado ( ayuda ) - ^ Don Anderson; Jay Trodden (2003). Arquitectura del sistema de hipertransporte. Addison-Wesley Professional. pág. 200. ISBN 978-0-321-16845-0.
- ^ Coleman, James (2009). "Descripción general de los métodos de entrega de interrupciones, interrupciones XT-PIC heredadas, limitaciones de XT-PIC". Reducción de la latencia de las interrupciones mediante el uso de interrupciones señalizadas por mensajes (PDF) . Intel Corporation. pág. 10.
- ^ Corbet, Jonathan; Rubini, Alessandro; Kroah-Hartman, Greg (2009). "Capítulo 15: Mapeo de memoria y DMA". Controladores de dispositivos Linux (3.ª ed.). O'Reilly Media . Consultado el 20 de abril de 2019 .
- ^ Microsoft. "Habilitación de interrupciones señalizadas por mensajes en el Registro". Microsoft Corporation . Consultado el 12 de abril de 2013 .
- ^ "Sección 6.1: MSI y MSI-X". Revisión 1.0a de la especificación básica de PCI Express . PCI-SIG . Abril de 2003.
- ^ "Sección 6.1: MSI y MSI-X". Revisión 1.1 de la especificación básica de PCI Express . PCI-SIG . Marzo de 2005.
- ^ "Aviso de cambio de ingeniería de MSI-X". Revisión 2.3 de la especificación de bus local PCI (PDF) . PCI-SIG .
- ^ Subsistemas de interrupción basados en APIC en PC con un solo procesador
- ^ ab Coleman, James (2009). Reducción de la latencia de las interrupciones mediante el uso de interrupciones señalizadas por mensajes (PDF) . Intel Corporation. págs. 10, 11.
- ^ Coleman, James (2009). "Resultados, plataforma de clase de estación de trabajo". Reducción de la latencia de interrupciones mediante el uso de interrupciones señalizadas por mensajes (PDF) . Intel Corporation. pág. 19.
- ^ Mejoras en la arquitectura de interrupciones en Microsoft Windows Vista, 11 de agosto de 2004
- ^ PCI, PCI-X y PCI Express: Preguntas frecuentes, 18 de noviembre de 2005, página 4
- ^ John Stearns, Govinda Tatti, Edward Gillett y Anish Gupta, (27 de marzo de 2006) Cambios realizados para admitir MSI en los controladores de interrupciones avanzados de Solaris Express en el sistema operativo Solaris Express 6/05
- ^ John H. Baldwin, "Interrupciones PCI para máquinas x86 en FreeBSD", sección "disponibilidad"
- ^ Mark Kettenis, (mayo de 2011) Interrupciones MSI para muchos dispositivos, en aquellas arquitecturas que pueden soportarlas (amd64, i386, sparc64 sólo hasta ahora)
- ^ Mark Kettenis, (mayo de 2016) Se ha añadido compatibilidad inicial con MSI-X
- ^ MSI-HOWTO.txt primera versión
- ^ Con Myri10GE, ¿puedo usar interrupciones MSI-X en Linux 2.6.18 y versiones anteriores?
- ^ [1] Haiku confirma que se agregó compatibilidad con MSI
- ^ [2] Haiku confirma que agrega compatibilidad con MSI-X
Enlaces externos
- Introducción a las interrupciones señalizadas por mensajes - MSDN
- CÓMO HACER UN MSI EN LINUX