stringtranslate.com

Controlador de interrupciones programable avanzado

En informática , el Controlador de interrupciones programable avanzado ( APIC ) de Intel es una familia de controladores de interrupciones programables . Como sugiere su nombre, el APIC es más avanzado que el Controlador de interrupciones programable (PIC) 8259 de Intel , lo que permite en particular la construcción de sistemas multiprocesador . Es uno de los varios diseños arquitectónicos destinados a resolver problemas de eficiencia de enrutamiento de interrupciones en sistemas informáticos multiprocesador.

El APIC es un diseño de arquitectura dividida, con un componente local (LAPIC) generalmente integrado en el propio procesador y un APIC de E/S opcional en un bus de sistema. El primer APIC fue el 82489DX: era un chip discreto que funcionaba como APIC local y de E/S. El 82489DX permitió la construcción de sistemas multiprocesador simétrico (SMP) con los procesadores Intel 486 y los primeros Pentium ; por ejemplo, el sistema SMP 486 de dos vías de referencia utilizó tres chips 82489DX, dos como APIC locales y uno como APIC de E/S. A partir del procesador P54C , la funcionalidad APIC local se integró en el silicio de los procesadores Intel. El primer APIC de E/S dedicado fue el Intel 82093AA, que estaba destinado a los sistemas basados ​​en PIIX3 .

Descripción general

El sistema Intel APIC consta de dos componentes: el APIC local (LAPIC) y el APIC de E/S . Hay un LAPIC en cada CPU del sistema. En la primera implementación ( 82489DX ), el LAPIC era un circuito discreto, a diferencia de su implementación posterior en el silicio de los procesadores Intel. Normalmente hay un APIC de E/S para cada bus periférico del sistema. En los diseños de sistemas originales, los LAPIC y los APIC de E/S estaban conectados mediante un bus APIC dedicado. Los sistemas más nuevos utilizan el bus del sistema para la comunicación entre todos los componentes APIC.

Cada APIC, ya sea un chip discreto o integrado en una CPU, tiene un registro de versión que contiene un número de versión de cuatro bits para su implementación APIC específica. Por ejemplo, el 82489DX tiene un número de versión APIC de 0, mientras que la versión 1 se asignó a la primera generación de APIC locales integrados en los procesadores Pentium 90 y 100. [1]

En sistemas que contienen un PIC 8259 , el 8259 puede estar conectado al LAPIC en el procesador de arranque (BSP) del sistema, a uno de los APIC de E/S del sistema o a ambos. Sin embargo, lógicamente, el 8259 solo se conecta una vez en un momento dado.

APIC discreta

El chip APIC de Intel de primera generación, el 82489DX, que se suponía que se utilizaría con el Intel 80486 y los primeros procesadores Pentium, es en realidad un APIC local externo y de E/S en un solo circuito. La especificación Intel MP 1.4 se refiere a él como "APIC discreto" en contraste con el "APIC integrado" que se encuentra en la mayoría de los procesadores Pentium. [2] El 82489DX tenía 16 líneas de interrupción; [3] también tenía la peculiaridad de que podía perder algunas interrupciones ISA. [4]

En un sistema multiprocesador 486, cada CPU tenía que estar emparejada con su propio 82489DX; además, se tenía que utilizar un 82489DX suplementario como APIC de E/S. El 82489DX no podía emular al 8259A (XT-PIC), por lo que también había que incluirlos como chips físicos para lograr compatibilidad con versiones anteriores. [5] El 82489DX se empaquetaba como un PQFP de 132 pines . [3]

APIC locales integradas

Los APIC locales (LAPIC) gestionan todas las interrupciones externas de un procesador específico en un sistema SMP. Además, pueden aceptar y generar interrupciones entre procesadores (IPI) entre LAPIC. Los LAPIC pueden admitir hasta 224 vectores de interrupción utilizables desde un APIC de E/S. Los números de vector del 0 al 31, de 0 a 255, están reservados para el manejo de excepciones por parte de los procesadores x86.

Todos los procesadores Intel a partir de la microarquitectura P5 ( P54C ) tienen un APIC local incorporado. [6] [7] Sin embargo, si el APIC local está deshabilitado en un procesador P5, no se puede volver a habilitar mediante software; esta limitación ya no existe en los procesadores P6 y posteriores. [7]

La función Message Signaled Interrupts (MSI) de las especificaciones PCI 2.2 y posteriores no se puede utilizar sin que esté habilitado el APIC local. [8] El uso de MSI elimina la necesidad de un APIC de E/S. Además, se admiten hasta 224 interrupciones en modo MSI y no se permite compartir IRQ. [9]

Temporizador APIC

Otra ventaja del APIC local es que también proporciona un temporizador de alta resolución (del orden de un microsegundo o mejor) que se puede utilizar tanto en modo de intervalo como en modo único. [7]

El temporizador APIC tuvo sus problemas iniciales de aceptación. Un documento de Microsoft de 2002 (que abogaba por la adopción del temporizador de eventos de alta precisión en su lugar) criticó al temporizador LAPIC por tener una "resolución deficiente" y afirmó que "el silicio de los relojes a veces tiene muchos errores". [10] Sin embargo, el temporizador APIC se utiliza, por ejemplo, en Windows 7 cuando se habilita la creación de perfiles , y en Windows 8 en todas las circunstancias. (Antes de que Windows 8 reclamara los derechos exclusivos de este temporizador, también lo utilizaban algunos programas como CPU-Z ). En Microsoft Windows, el temporizador APIC no es un recurso que se pueda compartir. [11]

Las interrupciones aperiódicas que ofrece el temporizador APIC son utilizadas por la función de kernel tickless del kernel de Linux . Esta función opcional pero predeterminada es nueva en la versión 2.6.18. Cuando se habilita en una computadora con un temporizador APIC, el kernel no utiliza el temporizador de intervalo programable 8253 para el control del tiempo. [12] Un documento de VMware señala que "el software no tiene una forma confiable de determinar su frecuencia. Generalmente, la única forma de determinar la frecuencia del temporizador APIC local es medirla utilizando el temporizador PIT o CMOS, que arroja solo un resultado aproximado". [13]

APIC de E/S

Los APIC de E/S contienen una tabla de redirección, que se utiliza para enrutar las interrupciones que recibe de los buses periféricos a uno o más APIC locales. Los primeros APIC de E/S (como 82489DX, SIO.A y PCEB/ESC) solo tenían soporte para 16 líneas de interrupción, pero los posteriores como 82093AA (chip separado para PIIX3/PIIX4) tenían soporte para 24 líneas de interrupción. [9] Se empaquetó como un PQFP de 64 pines . [14] El 82093AA normalmente se conectaba al PIIX3 / PIIX4 y usaba sus PIC 8259 heredados integrados. [14] El ICH1 e Intel 815 integraron el APIC de E/S.

Según un benchmark de Intel de 2009 que utilizó Linux , la APIC de E/S redujo la latencia de interrupción en un factor de casi tres en relación con la emulación 8259 (XT-PIC), mientras que el uso de MSI redujo la latencia aún más, en un factor de casi siete en relación con la línea base XT-PIC. [15]

Variantes

El xAPIC se introdujo con el Pentium 4 , mientras que el x2APIC es la generación más reciente del controlador de interrupciones programable de Intel, introducido con la microarquitectura Nehalem en noviembre de 2008. [16] Las principales mejoras del x2APIC abordan la cantidad de CPU compatibles y el rendimiento de la interfaz.

El x2APIC ahora utiliza 32 bits para direccionar las CPU, lo que permite direccionar hasta 2 32  − 1 CPU mediante el modo de destino físico. El modo de destino lógico ahora funciona de manera diferente e introduce clústeres; utilizando este modo, se pueden direccionar hasta 2 20  − 16 procesadores.

La interfaz mejorada reduce la cantidad de accesos necesarios al registro APIC para enviar interrupciones entre procesadores (IPI). Debido a esta ventaja, KVM puede emular y de hecho emula x2APIC para procesadores más antiguos que no lo admiten físicamente, y esta compatibilidad está presente en QEMU desde Conroe e incluso en procesadores AMD Opteron serie G (ninguno de los cuales admite x2APIC de forma nativa). [17] [18]

APICv es la marca de Intel para el soporte de virtualización de hardware destinado a reducir la sobrecarga de interrupciones en los huéspedes. APICv se introdujo en la serie de procesadores Ivy Bridge-EP , que se vende como Xeon E5-26xx v2 (lanzado a fines de 2013) y como Xeon E5-46xx v2 (lanzado a principios de 2014). [19] [20] AMD anunció una tecnología similar llamada AVIC , [21] [22] está disponible en los modelos de la familia 15h, 6Xh (Carrizo) y procesadores más nuevos. [23]

Asuntos

Existen varios errores conocidos en las implementaciones de sistemas APIC, especialmente en lo que respecta a la conexión del 8254. Es posible que los BIOS defectuosos no configuren correctamente el enrutamiento de interrupciones o proporcionen tablas ACPI y tablas de especificación de multiprocesador Intel (MPS) incorrectas.

El APIC también puede ser una causa de falla del sistema cuando el sistema operativo no lo soporta adecuadamente. En sistemas operativos más antiguos, a menudo era necesario deshabilitar el E/S y los APIC locales. Si bien esto ya no es posible debido a la prevalencia de sistemas multiprocesador y multinúcleo simétricos , los errores en el firmware y los sistemas operativos ahora son una ocurrencia poco frecuente.

Competencia

AMD y Cyrix propusieron una vez una arquitectura OpenPIC con un propósito algo similar que soportaba hasta 32 procesadores; [24] tuvo al menos apoyo declarativo de IBM y Compaq alrededor de 1995. [25] Sin embargo, no se lanzó ninguna placa base x86 con OpenPIC. [26] Después del fracaso de OpenPIC en el mercado x86, AMD obtuvo la licencia de APIC de Intel para sus procesadores AMD Athlon y posteriores.

Sin embargo, IBM desarrolló su controlador de interrupciones multiprocesador (MPIC) basado en las especificaciones de registro OpenPIC. [27] MPIC se utilizó en diseños basados ​​en PowerPC , incluidos los de IBM, por ejemplo en algunos sistemas RS/6000 , [28] pero también por Apple, hasta sus Power Mac G5 . [29] [30]

Véase también

Referencias

  1. ^ Especificación de multiprocesadores Intel, versión 1.4, página 3-5, mayo de 1997
  2. ^ Especificación de multiprocesadores Intel, versión 1.4, página 1-4, mayo de 1997
  3. ^ ab Badri Ram (2001). Interfaz avanzada de microprocesadores. Tata McGraw-Hill Education. pág. 314. ISBN 978-0-07-043448-6.
  4. ^ "Una descripción del subsistema de E/S APIC". freebsd.org . Consultado el 14 de mayo de 2023 .
  5. ^ Especificación de multiprocesadores Intel, versión 1.4, página 5-3, mayo de 1997
  6. ^ Scott M. Mueller (2011). Actualización y reparación de PC (20.ª edición). Que Publishing. pág. 242. ISBN 978-0-13-268218-3.
  7. ^ abc Uwe Walter, Vincent Oberle Compatibilidad con temporizadores de precisión de μ-segundos para el kernel de Linux
  8. ^ "Centro de desarrollo de hardware de Windows". msdn.microsoft.com . Junio ​​de 2017.
  9. ^ ab James Coleman, Reducción de la latencia de las interrupciones mediante el uso de interrupciones señalizadas por mensajes, págs. 10-11
  10. ^ "Directrices para proporcionar compatibilidad con temporizadores multimedia". Microsoft . 20 de septiembre de 2002. Archivado desde el original el 28 de julio de 2012.
  11. ^ "Windows 8 y el temporizador APIC". social.msdn.microsoft.com . Archivado desde el original el 22 de febrero de 2014. Consultado el 14 de mayo de 2023 .
  12. ^ "Base de conocimientos de VMware". kb.vmware.com .
  13. ^ Control de tiempo en máquinas virtuales VMware (para VMware vSphere 5.0, Workstation 8.0, Fusion 4.0), página 8
  14. ^ ab "Centro de recursos y diseño para el desarrollo con Intel". Intel .
  15. ^ James Coleman, Reducción de la latencia de las interrupciones mediante el uso de interrupciones señalizadas por mensajes, pág. 19
  16. ^ "Intel Nehalem con X2APIC - Arquitectura xAPIC extendida (imagen 27/27) - ComputerBase". www.computerbase.de .
  17. ^ "Re: [Qemu-devel] [Pregunta] por qué x2apic está configurado por defecto sin soporte de host". lists.gnu.org .
  18. ^ "[Qemu-devel] [PATCH] target-i386: habilitar x2apic por defecto en los más recientes". lists.nongnu.org .
  19. ^ Jun Nakajima (2012). "Revisión de características nuevas y no utilizadas para la virtualización de interrupciones/APIC" (PDF) . Linux . Consultado el 14 de mayo de 2023 .
  20. ^ "Pruebas de rendimiento de virtualización APIC e Iozone* - Intel® Software". software.intel.com .
  21. ^ Wei Huang, Presentación del controlador de interrupción virtual avanzado de AMD, XenSummit 2012
  22. ^ Jörg Rödel (agosto de 2012). «Virtualización de interrupciones de próxima generación para KVM» (PDF) . Linux . Consultado el 14 de mayo de 2023 .
  23. ^ "[Xen-devel] [RFC PATCH 0/9] Presentamos AMD SVM AVIC". www.mail-archive.com .
  24. ^ "Definición de OpenPIC de la enciclopedia PC Magazine". Pcmag.com. 1994-12-01 . Consultado el 2011-11-03 .
  25. ^ Brooke Crothers (20 de marzo de 1995). "AMD y Cyrix ofrecen una especificación SMP alternativa". InfoWorld : 8. ISSN  0199-6649.
  26. ^ André D. Balsa, Nota adjunta a "Linux Benchmarking: Parte III - Interpretación de los resultados de los benchmarks" que aparece en el número 24 de Linux Gazette, enero de 1998
  27. ^ Controlador de interrupciones de multiprocesador de IBM. Libro de datos Archivado el 23 de febrero de 2014 en Wayback Machine
  28. ^ Instalación de evaluación TTAP de Arca Systems El sistema distribuido RS/6000 de IBM Corporation que ejecuta AIX versión 4.3.1. Seguridad C2 evaluada por TCSEC, pág. 29
  29. ^ Singh, Amit (13 de octubre de 2006). Eche un vistazo al interior del Power Mac con procesador dual basado en G5, a través de la base de datos de informIT.
  30. ^ Nota para desarrolladores de Power Mac G5 (Legacy), pág. 26

Lectura adicional

Enlaces externos