De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En el cálculo de , Intel 's avanzada controlador de interrupción programable ( APIC ) es una familia de controladores de interrupciones . Como sugiere su nombre, el APIC es más avanzado que el controlador de interrupción programable (PIC) 8259 de Intel , lo que permite particularmente la construcción de sistemas multiprocesador . Es uno de 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 del 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 de multiprocesador simétrico (SMP) con los procesadores Intel 486 y los primeros Pentium ; por ejemplo, el sistema 486 SMP bidireccional de referencia utilizó tres chips 82489DX, dos como APIC locales y uno como APIC de E / S. Comenzando con el 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 fue diseñado para sistemas basados ​​en PIIX3 .

Resumen [ editar ]

Hay dos componentes en el sistema Intel APIC, la APIC local (LAPIC) y la I / O APIC . Hay un LAPIC en cada CPU del sistema. En la primera implementación ( 82489DX ), el LAPIC era un circuito discreto opuesto a su implementación posterior en el silicio de los procesadores Intel. Por lo general, hay un APIC de E / S para cada bus de periféricos del sistema. En los diseños de sistemas originales, los LAPIC y los APIC de E / S se conectaban 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 los sistemas que contienen un PIC 8259 , el 8259 se puede conectar al LAPIC en el procesador de arranque del sistema (BSP), a uno de los APIC de E / S del sistema, o ambos. Sin embargo, lógicamente, el 8259 solo se conecta una vez en un momento dado.

APIC discreto [ editar ]

El chip APIC de Intel de primera generación, el 82489DX, que estaba destinado a ser utilizado con procesadores Intel 80486 y los primeros Pentium, es en realidad un APIC de E / S y local externo en un circuito. La especificación Intel MP 1.4 se refiere a ella 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 486 multiprocesador, cada CPU tenía que emparejarse con su propio 82489DX; además, se tuvo que utilizar un 82489DX suplementario como APIC de E / S. El 82489DX no pudo emular el 8259A (XT-PIC) por lo que estos también tuvieron que incluirse como chips físicos para compatibilidad con versiones anteriores. [5] El 82489DX estaba empaquetado como un PQFP de 132 pines . [3]

APIC locales integrados [ editar ]

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

Todos los procesadores Intel que comienzan con la microarquitectura P5 ( P54C ) tienen un APIC local integrado. [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 PCI 2.2 y especificaciones posteriores no se puede utilizar sin que la APIC local esté habilitada. [8] El uso de MSI evita la necesidad de una APIC de E / S. Además, se admiten hasta 224 interrupciones en el modo MSI y no se permite compartir IRQ. [9]

Temporizador APIC [ editar ]

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 de aceptación inicial. Un documento de Microsoft de 2002 (que abogaba por la adopción del temporizador de eventos de alta precisión ) criticaba al temporizador LAPIC por tener "mala resolución" y afirmaba que "el silicio de los relojes a veces tiene muchos errores". [10] No obstante, el temporizador APIC lo utiliza, por ejemplo, Windows 7 cuando la creación de perfiles está habilitada, y Windows 8 en todas las circunstancias. (Antes de que Windows 8 reclamara los derechos exclusivos de este temporizador, también lo usaban 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 característica del kernel sin tick del kernel de Linux . Esta característica opcional pero predeterminada es nueva con 2.6.18. Cuando está habilitado en una computadora con un temporizador APIC, el núcleo no utiliza el temporizador de intervalo programable 8253 para la hora normal. [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 usando el temporizador PIT o CMOS, que arroja solo un resultado aproximado . " [13]

APIC de E / S [ editar ]

Las 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 una o más APIC locales. Las primeras APIC de E / S (como 82489DX, SIO.A y PCEB / ESC) solo tenían soporte para 16 líneas de interrupción, pero las posteriores como 82093AA (chip separado para PIIX3 / PIIX4) tenían soporte para 24 líneas de interrupción. [9] Estaba empaquetado como un PQFP de 64 pines . [14] El 82093AA normalmente se conectaba al PIIX3 / PIIX4 y utilizaba sus PIC 8259 heredados integrados. [14] El ICH1 reintegró un APIC de E / S, como el predecesor de PIIX SIO.A (para ISA) y PCEB / ESC (para EISA).

Según una evaluación comparativa de Intel de 2009 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 a la línea de base XT-PIC. [15]

Variantes [ editar ]

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 el número de CPU compatibles y el rendimiento. de la interfaz.

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

La interfaz mejorada reduce la cantidad de acceso al registro APIC necesario para enviar interrupciones entre procesadores (IPI). Debido a esta ventaja, KVM puede emular y emula el x2APIC para procesadores más antiguos que no lo admiten físicamente, y este soporte está expuesto desde QEMU desde Conroe e incluso para los procesadores AMD Opteron de la serie G (ninguno de los cuales es compatible de forma nativa con x2APIC) . [17] [18]

APICv es el nombre comercial de Intel para 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). [19] [20] [21] AMD anunció una tecnología similar llamada AVIC , [22] [23] está disponible la familia de procesadores 15h modelos 6Xh (Carrizo) y más nuevos. [24]

Problemas [ editar ]

Hay una serie de errores conocidos en las implementaciones de los sistemas APIC, especialmente en lo que respecta a cómo se conecta el 8254 . Es posible que los BIOS defectuosos no configuren el enrutamiento de interrupciones correctamente o que 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 admite correctamente. En los sistemas operativos más antiguos, las E / S y las APIC locales a menudo tenían que desactivarse. Si bien esto ya no es posible debido a la prevalencia de sistemas multiprocesador y de múltiples núcleos simétricos , los errores en el firmware y los sistemas operativos ahora son poco frecuentes.

Competición [ editar ]

AMD y Cyrix propusieron una vez una arquitectura OpenPIC de propósito similar que admite hasta 32 procesadores; [25] tuvo al menos soporte declarativo de IBM y Compaq alrededor de 1995. [26] Sin embargo, no se lanzó ninguna placa base x86 con OpenPIC. [27] 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 interrupción multiprocesador (MPIC) basado en las especificaciones de registro de OpenPIC. [28] MPIC se utilizó en diseños basados en PowerPC , incluidos los de IBM, por ejemplo en algunos sistemas RS / 6000 , [29] pero también por Apple, incluso en sus Power Mac G5 . [30] [31]

Ver también [ editar ]

  • Intel 8259
  • Controlador de interrupciones programable (PIC)
  • Interrupción entre procesadores (IPI)
  • Interrumpir
  • Controlador de interrupciones
  • Interrupción de latencia
  • Interrupciones señalizadas por mensaje (MSI)
  • Interrupción no enmascarable (NMI)

Referencias [ editar ]

  1. ^ Especificación Intel multiprocesador , versión 1.4, página 3-5, mayo de 1997
  2. ^ Especificación Intel multiprocesador , versión 1.4, página 1-4, mayo de 1997
  3. ↑ a b Badri Ram (2001). Interfaz de microprocesadores Adv . Educación de Tata McGraw-Hill. pag. 314. ISBN 978-0-07-043448-6.
  4. ^ http://people.freebsd.org/~fsmp/SMP/papers/apicsubsystem.txt
  5. ^ Especificación Intel multiprocesador, versión 1.4, página 5-3, mayo de 1997
  6. ^ Scott M. Mueller (2011). Actualización y reparación de PC (20ª ed.). Que Publishing. pag. 242. ISBN 978-0-13-268218-3.
  7. ^ a b c Uwe Walter, Vincent Oberle Soporte de temporizador de precisión de μ-segundo para el kernel de Linux
  8. ^ "Centro de desarrollo de hardware de Windows" . msdn.microsoft.com .
  9. ^ a b James Coleman, Reducción de la latencia de interrupción mediante el uso de interrupciones señalizadas por mensaje , págs. 10-11
  10. ^ Directrices para proporcionar soporte de temporizador multimedia , 20 de septiembre de 2002
  11. ^ Temporizador de Windows 8 y APIC Archivado el 22 de febrero de 2014 en Wayback Machine
  12. ^ "Base de conocimientos de VMware" . kb.vmware.com .
  13. ^ Cronometraje en máquinas virtuales VMware (para VMware vSphere 5.0, Workstation 8.0, Fusion 4.0) , página 8
  14. ^ a b "Centro de diseño y recursos para el desarrollo con Intel" . Intel .
  15. ^ James Coleman, Reducción de la latencia de interrupción mediante el uso de interrupciones señalizadas por mensaje , p. 19
  16. ^ "Intel Nehalem mit X2APIC - Arquitectura xAPIC extendida (Bild 27/27) - ComputerBase" . www.computerbase.de .
  17. ^ "Re: [Qemu-devel] [Pregunta] por qué x2apic está configurado por defecto sin host sup" . listas.gnu.org .
  18. ^ "[Qemu-devel] [PATCH] target-i386: habilita x2apic por defecto en más recientes" . listas.nongnu.org .
  19. ^ http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-intel-vt-feat-nakajima.pdf
  20. ^ "Pruebas de rendimiento de virtualización APIC y Iozone * - Software Intel®" . software.intel.com .
  21. ^ http://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/xeon-e5-4600-v2-brief.pdf
  22. ^ Wei Huang, Introducción del controlador de interrupción virtual avanzado de AMD , XenSummit 2012
  23. ^ http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-interrupt-virt-kvm-roedel.pdf
  24. ^ "[Xen-devel] [RFC PATCH 0/9] Presentar AMD SVM AVIC" . www.mail-archive.com .
  25. ^ "Definición de OpenPIC de la enciclopedia de la revista PC" . Pcmag.com. 1994-12-01 . Consultado el 3 de noviembre de 2011 .
  26. ^ Brooke Crothers (20 de marzo de 1995). AMD y Cyrix ofrecen especificaciones SMP alternativas . InfoWorld . pag. 8. ISSN 0199-6649 . 
  27. ^ André D. Balsa, Nota adjunta a "Linux Benchmarking: Part III - Interpreting Benchmark Results" que aparece en el número 24 de Linux Gazette, enero de 1998
  28. ^ Controlador de interrupción de multiprocesador de IBM . Libro de datos archivado el 23 de febrero de 2014 en la Wayback Machine.
  29. ^ 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. TCSEC Evaluado C2 Seguridad , p. 29
  30. ^ 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 informIT.
  31. ^ Nota para desarrolladores de Power Mac G5 (heredado) , p. 26

Lectura adicional [ editar ]

  • IA-32 Intel Architecture Software Developer's Manual, Volumen 3A: Guía de programación del sistema, Parte 1, capítulo 10 .

Enlaces externos [ editar ]

  • Especificación Intel 64 Architecture x2APIC (PDF)
  • Puede encontrar más información sobre la arquitectura Intel x2APIC en los Manuales para desarrolladores de software de arquitecturas Intel 64 e IA-32