El controlador de interrupciones programable avanzado ( APIC ) es una familia de controladores de interrupciones programables desarrollada por Intel . Como su nombre indica, el APIC es más avanzado que el controlador de interrupciones programable (PIC) 8259 de Intel , y permite, en particular, la construcción de sistemas multiprocesador . Es uno de los diversos diseños arquitectónicos destinados a resolver los problemas de eficiencia en el 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 del sistema. El primer APIC fue el 82489DX , un chip discreto que funcionaba tanto como APIC local como de E/S. El 82489DX permitió la construcción de sistemas multiprocesador simétricos (SMP) con los procesadores Intel 486 y los primeros Pentium ; por ejemplo, el sistema SMP de referencia de dos vías 486 utilizaba tres chips 82489DX, dos como APIC locales y uno como APIC de E/S. A partir del procesador P54C , la funcionalidad del APIC local se integró en el silicio de los procesadores Intel. El primer APIC de E/S dedicado fue el Intel 82093AA, diseñado para 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 . Cada CPU del sistema cuenta con un LAPIC. En su primera implementación ( 82489DX ), el LAPIC era un circuito discreto, a diferencia de su posterior implementación en los chips de silicio de los procesadores Intel. Normalmente, existe un APIC de E/S para cada bus periférico del sistema. En los diseños originales, los LAPIC y los APIC de E/S estaban conectados mediante un bus APIC dedicado. Los sistemas más recientes 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 específica de APIC. Por ejemplo, el 82489DX tiene un número de versión de 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 ] : 3-5
En los sistemas que contienen un microcontrolador PIC 8259 , este puede estar conectado al LAPIC del 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 a la vez.
APIC discreto
El chip Intel APIC de primera generación, el 82489DX, diseñado para usarse con los procesadores Intel 80486 y los primeros procesadores Pentium, es en realidad un APIC externo local y de E/S en un solo circuito. La especificación Intel MP 1.4 lo denomina "APIC discreto" en contraste con el "APIC integrado" presente en la mayoría de los procesadores Pentium. [ 1 ] : 1-4 El 82489DX tenía 16 líneas de interrupción; [ 2 ] también presentaba la peculiaridad de que podía perder algunas interrupciones ISA. [ 3 ]
En un sistema multiprocesador 486, cada CPU debía estar emparejada con su propio 82489DX; además, se debía usar un 82489DX suplementario como APIC de E/S. El 82489DX no podía emular el 8259A (XT-PIC), por lo que estos también debían incluirse como chips físicos para la retrocompatibilidad. [ 1 ] : 5-3 El 82489DX se empaquetaba como un PQFP de 132 pines . [ 2 ] Estaba disponible por USD $26 por cada 1000 unidades en cantidades. [ 4 ]
APIC locales integrados
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. Un único LAPIC puede admitir hasta 224 vectores de interrupción utilizables de un APIC de E/S. Los vectores del 0 al 31, de un total del 0 al 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 integrado. [ 5 ] [ 6 ] Sin embargo, si el APIC local está deshabilitado en un procesador P5, no se puede volver a habilitar por software; esta limitación ya no existe en los procesadores P6 y posteriores. [ 6 ]
Con la introducción de Pentium 4 HT y Pentium D , cada núcleo de CPU y cada hilo de CPU cuentan con el LAPIC integrado.
La función de interrupciones señalizadas por mensaje (MSI) de las especificaciones PCI 2.2 y posteriores no se puede utilizar sin que la APIC local esté habilitada. [ 7 ] El uso de MSI elimina la necesidad de una APIC de E/S. Además, se admiten hasta 224 interrupciones en modo MSI y no se permite el uso compartido de IRQ. [ 8 ] : 10–11
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. [ 6 ]
El temporizador APIC tuvo 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) criticaba al temporizador LAPIC por tener una "resolución deficiente" y afirmaba que "el silicio del reloj a veces presenta muchos errores". [ 9 ] Sin embargo, el temporizador APIC se utiliza, por ejemplo, en Windows 7 cuando la creación de perfiles está habilitada, 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 compartible. [ 10 ]
Las interrupciones aperiódicas que ofrece el temporizador APIC son utilizadas por la función de kernel sin temporizador del kernel de Linux . Esta función opcional, pero predeterminada, es nueva en la versión 2.6.18. Cuando se habilita en un equipo con un temporizador APIC, el kernel no utiliza el temporizador de intervalo programable 8253 para la medición del tiempo. [ 11 ] Un documento de VMware señala que "el software no tiene una forma fiable de determinar su frecuencia. Generalmente, la única forma de determinar la frecuencia del temporizador APIC local es medirla utilizando el temporizador PIT o CMOS, lo que proporciona solo un resultado aproximado". [ 12 ]
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. [ 8 ] : 10–11 Se empaquetaba como un PQFP de 64 pines . [ 13 ] El 82093AA normalmente se conectaba al PIIX3 / PIIX4 y utilizaba sus PIC 8259 heredados integrados. [ 13 ] El ICH1 integraba el APIC de E/S. Un APIC de E/S integrado de los conjuntos de chips modernos puede proporcionar más de 24 líneas de interrupción. [ 14 ]
Según una prueba de rendimiento de Intel de 2009 realizada con Linux , el I/O APIC 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. [ 8 ] : 19
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. [ 15 ] Las principales mejoras del x2APIC abordan la cantidad de CPU compatibles y el rendimiento de la interfaz.
El x2APIC ahora usa 32 bits para direccionar las CPU, lo que permite direccionar hasta 2³² − 1 CPU usando el modo de destino físico. El modo de destino lógico ahora funciona de manera diferente e introduce clústeres; usando este modo, se puede direccionar hasta 2²⁰ − 16 procesadores.
La interfaz mejorada reduce la cantidad de accesos necesarios al registro APIC para enviar interrupciones entre procesadores (IPI). Gracias a esta ventaja, KVM puede emular, y de hecho emula, el x2APIC para procesadores antiguos que no lo admiten físicamente, y esta compatibilidad está disponible en QEMU desde Conroe e incluso para los procesadores AMD Opteron de la serie G (ninguno de los cuales admite x2APIC de forma nativa). [ 16 ] [ 17 ]
APICv es la marca de Intel para el soporte de virtualización de hardware destinado a reducir la sobrecarga de interrupciones en los invitados. APICv se introdujo en la serie de procesadores Ivy Bridge-EP , que se vende como Xeon E5-26xx v2 (lanzado a finales de 2013) y como Xeon E5-46xx v2 (lanzado a principios de 2014). [ 18 ] [ 19 ] AMD anunció una tecnología similar llamada AVIC , [ 20 ] [ 21 ] está disponible en los modelos de la familia 15h, procesadores 6Xh (Carrizo) y posteriores. [ 22 ]
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 las BIOS defectuosas no configuren correctamente el enrutamiento de interrupciones o proporcionen tablas ACPI y tablas de especificación multiprocesador de Intel (MPS) incorrectas.
El APIC también puede provocar fallos en el sistema cuando el sistema operativo no lo admite correctamente. En sistemas operativos antiguos, a menudo era necesario deshabilitar los APIC de E/S y locales. Si bien esto ya no es posible debido a la prevalencia de los sistemas multiprocesador simétricos y multinúcleo , los errores en el firmware y los sistemas operativos son ahora poco frecuentes.
Competencia
AMD y Cyrix propusieron en su momento una arquitectura OpenPIC de propósito similar que admitía hasta 32 procesadores; [ 23 ] contaba con soporte declarativo, al menos, de IBM y Compaq alrededor de 1995. [ 24 ] Sin embargo, no se lanzó ninguna placa base x86 con OpenPIC. [ 25 ] Tras el fracaso de OpenPIC en el mercado x86, AMD obtuvo la licencia de APIC de Intel para sus procesadores AMD Athlon y posteriores.
IBM, sin embargo, desarrolló su controlador de interrupciones multiprocesador (MPIC) basado en las especificaciones de registro OpenPIC. [ 26 ] MPIC se utilizó en diseños basados en PowerPC , incluidos los de IBM, por ejemplo en algunos sistemas RS/6000 , [ 27 ] pero también por Apple, incluso en sus Power Mac G5 . [ 28 ] [ 29 ]
Véase también
Referencias
- 1 2 3 "Especificación multiprocesador, versión 1.4" . Intel. Mayo de 1997. Archivado del original el 30 de octubre de 2004.
- 1 2 Badri Ram (2001). Interfaz avanzada de microprocesadores . Tata McGraw-Hill Education. pág. 314. ISBN 978-0-07-043448-6.
- ↑ "Descripción del subsistema de E/S APIC" . freebsd.org . Consultado el 14 de mayo de 2023 .
- ↑ Intel Corporation, "Nuevo producto destacado: OEM: Controlador de interrupciones optimizado para sistemas operativos avanzados", Microcomputer Solutions, enero/febrero de 1993, página 21
- ↑ Scott M. Mueller (2011). Actualización y reparación de PC (20.ª ed.). Que Publishing. pág. 242. ISBN 978-0-13-268218-3.
- 1 2 3 Uwe Walter; Vincent Oberle. "Soporte de temporizador de precisión de microsegundos para el kernel de Linux" (PDF) .
- ↑ "Subsistemas de interrupción basados en APIC en PC con uniprocesador" . Centro de desarrollo de hardware de Windows . 7 de enero de 2003. Archivado del original el 26 de octubre de 2012.
- 1 2 3 James Coleman (enero de 2009). "Reducción de la latencia de interrupción mediante el uso de interrupciones señalizadas por mensajes" (PDF) . Intel. Archivado del original (PDF) el 19 de enero de 2022.
- ↑ "Directrices para proporcionar compatibilidad con temporizadores multimedia" . Microsoft . 20 de septiembre de 2002. Archivado del original el 28 de julio de 2012.
- ↑ "Windows 8 y el temporizador APIC" . social.msdn.microsoft.com . Archivado del original el 22 de febrero de 2014. Consultado el 14 de mayo de 2023 .
- ↑ "Base de conocimientos de VMware" . kb.vmware.com . Archivado del original el 27 de febrero de 2017. Consultado el 13 de febrero de 2014 .
- ↑ "Control del tiempo en máquinas virtuales VMware (para VMware vSphere 5.0, Workstation 8.0, Fusion 4.0)" (PDF) . pág. 8. Archivado del original (PDF) el 26 de junio de 2016.
- 1 2 "Hoja de datos del controlador de interrupciones programable avanzado (E/S APIC) Intel 82093AA" . Centro de recursos y diseño para el desarrollo con Intel . Archivado del original el 28 de noviembre de 2016.
- ↑ "Hoja de datos del controlador de plataforma de la familia de chipsets Intel Serie 400 - Volumen 2 de 2" (PDF) . Intel . Mayo de 2020.
- ↑ "Mejora de las características clave de X2APIC" . ComputerBase .
- ↑ Marcelo Tosatti (22 de julio de 2013). "Re: [ Qemu-devel ] [ Pregunta ] por qué x2apic se configura por defecto sin soporte del host (en la CPU Nehalem)" . qemu-devel (Lista de correo).
- ↑ Eduardo Habkost (20 de enero de 2014). " [ Qemu-devel ] [ PATCH ] target-i386: habilitar x2apic por defecto en modelos de CPU más recientes" . qemu-devel (Lista de correo).
- ↑ Jun Nakajima (2012). Revisión de características nuevas y no utilizadas para la virtualización de interrupciones/APIC (PDF) . Linux Plumber's Conference 2012. Consultado el 14 de mayo de 2023 .
- ↑ "Pruebas de rendimiento de virtualización de APIC e Iozone* - Software Intel®" . software.intel.com .
- ↑ Wei Huang. Introducción al controlador de interrupciones virtuales avanzado de AMD . XenSummit 2012.
- ↑ Jörg Rödel (agosto de 2012). Virtualización de interrupciones de próxima generación para KVM (PDF) . Linux Plumber's Conference 2012. Consultado el 14 de mayo de 2023 .
- ↑ Suravee Suthikulpanit (18 de septiembre de 2016). " [ Xen-devel ] [ RFC PATCH 0/9 ] Introducir AMD SVM AVIC" . Xen-devel (Lista de correo).
- ↑ "Definición de OpenPIC de la enciclopedia de PC Magazine" . Pcmag.com. 1 de diciembre de 1994. Consultado el 24 de septiembre de 2025 .
- ↑ Brooke Crothers (20 de marzo de 1995). "AMD y Cyrix ofrecen una especificación SMP alternativa" . InfoWorld : 8. ISSN 0199-6649 .
- ↑ André D. Balsa. "Nota adjunta a "Linux Benchmarking: Parte III - Interpretación de los resultados de las pruebas comparativas" ] que aparece en el número 24 de Linux Gazette, enero de 1998" .
- ↑ "Controlador de interrupciones multiprocesador. Libro de datos" (PDF) . IBM. Archivado del original (PDF) el 23 de febrero de 2014.
- ↑ "Sistema distribuido RS/6000 de IBM Corporation con AIX versión 4.3.1. Seguridad C2 evaluada por TCSEC" (PDF) . Instalación de evaluación TTAP de Arca Systems. pág. 29.
- ↑ Singh, Amit (13 de octubre de 2006). Eche un vistazo al interior del Power Mac de doble procesador basado en G5 – a través de la base de datos informIT.
- ↑ "Nota para desarrolladores de Power Mac G5" . Desarrollador de Apple . Soporte para interrupciones.
Lecturas adicionales
- Manual del desarrollador de software de la arquitectura Intel IA-32, Volumen 3A: Guía de programación del sistema, Parte 1, capítulo 10 .
Enlaces externos
- Especificación de la arquitectura Intel 64 x2APIC (PDF)
- Encontrará más información sobre la arquitectura Intel x2APIC en los manuales para desarrolladores de software de las arquitecturas Intel 64 e IA-32.
- Placa madre
- Interrumpe
- Productos Intel
- IBM PC compatibles
- Arquitectura X86