Der Advanced Programmable Interrupt Controller ( APIC ) ist eine Familie programmierbarer Interrupt-Controller von Intel . Wie der Name schon sagt, ist der APIC fortschrittlicher als Intels 8259 Programmable Interrupt Controller (PIC) und ermöglicht insbesondere den Aufbau von Multiprozessorsystemen . Er ist einer von mehreren Architekturentwürfen, die die Effizienz des Interrupt-Routings in Multiprozessorsystemen verbessern sollen.

Der APIC ist ein zweigeteiltes Architekturdesign mit einer lokalen Komponente (LAPIC), die üblicherweise in den Prozessor selbst integriert ist, und einem optionalen I/O-APIC auf einem Systembus. Der erste APIC war der 82489DX – ein separater Chip, der sowohl als lokaler als auch als I/O-APIC fungierte. Der 82489DX ermöglichte den Aufbau symmetrischer Multiprozessorsysteme (SMP) mit dem Intel 486 und frühen Pentium- Prozessoren. Beispielsweise verwendete das Referenzsystem für bidirektionale 486-SMP drei 82489DX-Chips: zwei als lokale APICs und einen als I/O-APIC. Ab dem P54C -Prozessor wurde die lokale APIC-Funktionalität in den Siliziumchip der Intel-Prozessoren integriert. Der erste dedizierte I/O-APIC war der Intel 82093AA, der für PIIX3 -basierte Systeme vorgesehen war.

Überblick

Das Intel APIC-System besteht aus zwei Komponenten: dem lokalen APIC (LAPIC) und dem I/O-APIC . Jede CPU im System verfügt über einen LAPIC. In der ersten Implementierung ( 82489DX ) war der LAPIC eine separate Schaltung, im Gegensatz zur späteren Integration in die Chipstruktur der Intel-Prozessoren. Typischerweise gibt es für jeden Peripheriebus im System einen eigenen I/O-APIC. In den ursprünglichen Systemdesigns waren LAPICs und I/O-APICs über einen dedizierten APIC-Bus verbunden. Neuere Systeme nutzen den Systembus für die Kommunikation zwischen allen APIC-Komponenten.

Jeder APIC, ob als separater Chip oder in eine CPU integriert, verfügt über ein Versionsregister mit einer vierstelligen Versionsnummer für seine spezifische APIC-Implementierung. Beispielsweise besitzt der 82489DX die APIC-Versionsnummer 0, während die Version 1 der ersten Generation lokaler APICs in den Pentium 90- und 100-Prozessoren zugewiesen wurde. [ 1 ] : 3-5

In Systemen mit einem 8259 PIC kann dieser mit dem LAPIC im Bootstrap-Prozessor (BSP) des Systems, einem der I/O-APICs des Systems oder beiden verbunden sein. Logisch betrachtet ist der 8259 jedoch immer nur einmal gleichzeitig verbunden.

Discrete APIC

Der Intel APIC-Chip der ersten Generation, der 82489DX, der für den Einsatz mit Intel 80486- und frühen Pentium-Prozessoren vorgesehen war, ist eigentlich ein externer lokaler und I/O-APIC in einem einzigen Schaltkreis. Die Intel MP 1.4-Spezifikation bezeichnet ihn als „diskreten APIC“ im Gegensatz zum „integrierten APIC“, der in den meisten Pentium-Prozessoren zu finden ist. [ 1 ] : 1-4 Der 82489DX verfügte über 16 Interrupt-Leitungen; [ 2 ] er hatte außerdem die Besonderheit, dass einige ISA-Interrupts verloren gehen konnten. [ 3 ]

In einem 486-Multiprozessorsystem musste jede CPU mit einem eigenen 82489DX kombiniert werden; zusätzlich wurde ein weiterer 82489DX als I/O-APIC benötigt. Da der 82489DX den 8259A (XT-PIC) nicht emulieren konnte, mussten diese aus Gründen der Abwärtskompatibilität ebenfalls als physische Chips integriert werden. [ 1 ] : 5-3 Der 82489DX wurde als 132-poliges PQFP-Gehäuse angeboten . [ 2 ] Er war in größeren Mengen für 26 US-Dollar pro 1000 Stück erhältlich. [ 4 ]

Integrierte lokale APICs

Lokale APICs (LAPICs) verwalten alle externen Interrupts für einen bestimmten Prozessor in einem SMP-System. Zusätzlich können sie Interprozessor-Interrupts (IPIs) zwischen LAPICs empfangen und generieren. Ein einzelner LAPIC kann bis zu 224 nutzbare Interruptvektoren von einem I/O-APIC unterstützen . Die Vektornummern 0 bis 31 (von 0 bis 255) sind für die Ausnahmebehandlung durch x86-Prozessoren reserviert.

Alle Intel-Prozessoren ab der P5-Mikroarchitektur ( P54C ) verfügen über einen integrierten lokalen APIC. [ 5 ] [ 6 ] Wird der lokale APIC in einem P5-Prozessor deaktiviert, kann er jedoch nicht per Software wieder aktiviert werden; diese Einschränkung besteht bei den P6-Prozessoren und späteren Modellen nicht mehr . [ 6 ]

Mit der Einführung von Pentium 4 HT und Pentium D verfügt jeder CPU-Kern und jeder CPU-Thread über den integrierten LAPIC.

Die Message Signaled Interrupts (MSI)-Funktion der PCI-2.2-Spezifikation und späterer Versionen kann nur bei aktiviertem lokalem APIC verwendet werden. [ 7 ] Durch die Verwendung von MSI entfällt die Notwendigkeit eines I/O-APIC. Im MSI-Modus werden bis zu 224 Interrupts unterstützt, die gemeinsame Nutzung von IRQs ist jedoch nicht zulässig. [ 8 ] : 10–11

APIC-Timer

Ein weiterer Vorteil des lokalen APIC besteht darin, dass er auch einen hochauflösenden Timer (in der Größenordnung einer Mikrosekunde oder besser) bietet, der sowohl im Intervall- als auch im Einzelbetriebsmodus verwendet werden kann. [ 6 ]

Der APIC-Timer hatte anfängliche Akzeptanzschwierigkeiten. Ein Microsoft-Dokument aus dem Jahr 2002 (das stattdessen die Verwendung des High Precision Event Timers befürwortete ) kritisierte den LAPIC-Timer wegen seiner „schlechten Auflösung“ und stellte fest, dass „die Taktgeberchips mitunter sehr fehlerhaft sind“. [ 9 ] Dennoch wird der APIC-Timer beispielsweise von Windows 7 verwendet , wenn die Profilerstellung aktiviert ist, und von Windows 8 in allen Fällen. (Bevor Windows 8 die exklusiven Rechte an diesem Timer beanspruchte, wurde er auch von einigen Programmen wie CPU-Z verwendet .) Unter Microsoft Windows ist der APIC-Timer keine gemeinsam nutzbare Ressource. [ 10 ]

Die vom APIC-Timer bereitgestellten aperiodischen Interrupts werden von der Tickless-Kernel -Funktion des Linux-Kernels genutzt . Diese optionale, aber standardmäßige Funktion ist neu in Version 2.6.18. Wenn sie auf einem Computer mit APIC-Timer aktiviert ist, verwendet der Kernel nicht den programmierbaren Intervalltimer 8253 zur Zeitmessung. [ 11 ] Ein VMware- Dokument merkt an: „Software verfügt über keine zuverlässige Methode zur Frequenzbestimmung. Im Allgemeinen lässt sich die Frequenz des lokalen APIC-Timers nur durch Messung mit dem PIT- oder CMOS-Timer ermitteln, was jedoch nur ein Näherungswert liefert.“ [ 12 ]

I/O-APICs

I/O-APICs enthalten eine Umleitungstabelle, die dazu dient, die von Peripheriebussen empfangenen Interrupts an einen oder mehrere lokale APICs weiterzuleiten. Frühe I/O-APICs (wie 82489DX, SIO.A und PCEB/ESC) unterstützten nur 16 Interruptleitungen, spätere wie der 82093AA (separater Chip für PIIX3/PIIX4) hingegen 24. [ 8 ] : 10–11 Er war als 64-Pin- PQFP- Gehäuse erhältlich . [ 13 ] Der 82093AA wurde üblicherweise mit dem PIIX3 / PIIX4 verbunden und nutzte dessen integrierte Legacy-8259-PICs. [ 13 ] Der ICH1 integrierte den I/O-APIC. Ein integrierter I/O-APIC moderner Chipsätze kann mehr als 24 Interruptleitungen bereitstellen. [ 14 ]

Laut einem Intel-Benchmark aus dem Jahr 2009 unter Linux reduzierte der I/O-APIC die Interrupt-Latenz im Vergleich zur 8259-Emulation (XT-PIC) um fast den Faktor drei, während die Verwendung von MSI die Latenz sogar noch weiter verringerte, und zwar um fast den Faktor sieben im Vergleich zur XT-PIC-Baseline. [ 8 ] : 19

Varianten

Der xAPIC wurde mit dem Pentium 4 eingeführt , während der x2APIC die neueste Generation des programmierbaren Interrupt-Controllers von Intel darstellt, der im November 2008 mit der Nehalem-Mikroarchitektur eingeführt wurde. [ 15 ] Die wichtigsten Verbesserungen des x2APIC betreffen die Anzahl der unterstützten CPUs und die Leistung der Schnittstelle.

Der x2APIC verwendet nun 32 Bit zur CPU-Adressierung und ermöglicht so die Adressierung von bis zu 2 <sup>32</sup> − 1 CPUs im physischen Zielmodus. Der logische Zielmodus funktioniert nun anders und führt Cluster ein; in diesem Modus können bis zu 2 <sup>20</sup>  − 16 Prozessoren  adressiert werden .

Die verbesserte Schnittstelle reduziert die Anzahl der benötigten APIC-Registerzugriffe zum Senden von Interprozessor-Interrupts (IPIs). Dank dieses Vorteils kann KVM x2APIC für ältere Prozessoren emulieren, die dies physisch nicht unterstützen. Diese Unterstützung wird von QEMU bis zurück zu Conroe und sogar für AMD Opteron G-Prozessoren bereitgestellt (die x2APIC beide nicht nativ unterstützen). [ 16 ] [ 17 ]

APICv ist Intels Markenname für Hardware-Virtualisierungsunterstützung zur Reduzierung des Interrupt-Overheads in Gastsystemen. APICv wurde mit der Ivy-Bridge-EP- Prozessorserie eingeführt, die als Xeon E5-26xx v2 (Einführung Ende 2013) und als Xeon E5-46xx v2 (Einführung Anfang 2014) vertrieben wird. [ 18 ] [ 19 ] AMD kündigte eine ähnliche Technologie namens AVIC an , [ 20 ] [ 21 ] die für die Prozessoren der Familie 15h, 6Xh (Carrizo) und neuere Modelle verfügbar ist . [ 22 ]

Probleme

Es gibt eine Reihe bekannter Fehler in APIC-Systemen, insbesondere hinsichtlich der Anbindung des 8254. Fehlerhafte BIOS-Versionen konfigurieren die Interrupt-Weiterleitung möglicherweise nicht korrekt oder liefern fehlerhafte ACPI- und Intel MultiProcessor Specification (MPS)-Tabellen.

Der APIC kann auch zu Systemausfällen führen, wenn er vom Betriebssystem nicht ordnungsgemäß unterstützt wird. Bei älteren Betriebssystemen mussten die I/O- und lokalen APICs oft deaktiviert werden. Obwohl dies aufgrund der Verbreitung symmetrischer Multiprozessor- und Mehrkernsysteme nicht mehr möglich ist , treten Fehler in der Firmware und den Betriebssystemen heutzutage nur noch selten auf.

Wettbewerb

AMD und Cyrix schlugen einst eine OpenPIC- Architektur mit ähnlichem Zweck vor , die bis zu 32 Prozessoren unterstützen sollte; [ 23 ] sie erhielt um 1995 zumindest deklarative Unterstützung von IBM und Compaq . [ 24 ] Es wurde jedoch kein x86-Motherboard mit OpenPIC veröffentlicht. [ 25 ] Nach dem Scheitern von OpenPIC auf dem x86-Markt lizenzierte AMD Intels APIC für seine AMD Athlon- und späteren Prozessoren.

IBM entwickelte jedoch seinen Multiprozessor-Interrupt-Controller (MPIC) auf Basis der OpenPIC-Registerspezifikationen. [ 26 ] MPIC wurde in PowerPC- basierten Designs eingesetzt , darunter auch in solchen von IBM, beispielsweise in einigen RS/6000 -Systemen, [ 27 ] aber auch von Apple, bis hin zu deren Power Mac G5s . [ 28 ] [ 29 ]

Siehe auch

Referenzen

  1. ^ a b c „MultiProcessor Specification, version 1.4“ . Intel. Mai 1997. Archiviert vom Original am 30. Oktober 2004.
  2. ^ a b Badri Ram (2001). Adv Microprocessors Interfacing . Tata McGraw-Hill Education. S. 314. ISBN 978-0-07-043448-6Die
  3. ^ „Eine Beschreibung des APIC-E/A-Subsystems“ . freebsd.org . Abgerufen am 14. Mai 2023 .
  4. ^ Intel Corporation, „Neuer Produktfokus: OEM: Interrupt-Controller optimiert für moderne Betriebssysteme“, Microcomputer Solutions, Januar/Februar 1993, Seite 21
  5. ^ Scott M. Mueller (2011). PCs aufrüsten und reparieren (20. Aufl.). Que Publishing. S. 242. ISBN 978-0-13-268218-3Die
  6. ^ a b c Uwe Walter; Vincent Oberle. "μ-Sekunden-Präzision-Timer-Unterstützung für den Linux-Kernel" (PDF) .
  7. ^ „APIC-basierte Interrupt-Subsysteme auf Uniprozessor-PCs“ . Windows Hardware Dev Center . 7. Januar 2003. Archiviert vom Original am 26. Oktober 2012.
  8. ^ a b c James Coleman (Januar 2009). „Reduzierung der Interrupt-Latenz durch die Verwendung von Message-Signaled Interrupts“ (PDF) . Intel. Archiviert vom Original (PDF) am 19. Januar 2022.
  9. ^ „Richtlinien für die Bereitstellung von Multimedia-Timer-Unterstützung“ . Microsoft . 20.09.2002. Archiviert vom Original am 28.07.2012.
  10. ^ „Windows 8 und APIC-Timer“ . social.msdn.microsoft.com . Archiviert vom Original am 22. Februar 2014. Abgerufen am 14. Mai 2023 .
  11. ^ „VMware Knowledge Base“ . kb.vmware.com . Archiviert vom Original am 27.02.2017 . Abgerufen am 13.02.2014 .
  12. ^ „Zeiterfassung in VMware Virtual Machines (für VMware vSphere 5.0, Workstation 8.0, Fusion 4.0)“ (PDF) . S. 8. Archiviert vom Original (PDF) am 26.06.2016.
  13. ^ a b „Intel 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Datasheet“ . Resource & Design Center for Development with Intel . Archiviert vom Original am 28. November 2016.
  14. ^ „Intel 400 Series Chipset Family Platform Controller Hub Datasheet - Volume 2 of 2“ (PDF) . Intel . Mai 2020.
  15. ^ „X2APIC Key Feature Enhancement“ . ComputerBase .
  16. ^ Marcelo Tosatti (22. Juli 2013). "Re: [Qemu-devel] [Frage] Warum werden x2apic standardmäßig ohne Host-Unterstützung (auf Nehalem-CPUs) gesetzt?" . qemu-devel (Mailingliste).
  17. ^ Eduardo Habkost (20. Januar 2014). "[Qemu-devel] [PATCH] target-i386: x2apic standardmäßig auf neueren CPU-Modellen aktivieren" . qemu-devel (Mailingliste).
  18. ^ Jun Nakajima (2012). Reviewing Unused and New Features for Interrupt/APIC Virtualization (PDF) . Linux Plumber's Conference 2012. Abgerufen am 14. Mai 2023 .
  19. ^ „APIC Virtualization Performance Testing and Iozone* - Intel® Software“ . software.intel.com .
  20. ^ Wei Huang. Einführung des AMD Advanced Virtual Interrupt Controller . XenSummit 2012.
  21. ^ Jörg Rödel (August 2012). Interrupt-Virtualisierung der nächsten Generation für KVM (PDF) . Linux Plumber's Conference 2012. Abgerufen am 14. Mai 2023 .
  22. ^ Suravee Suthikulpanit (18. September 2016). "[Xen-devel] [RFC PATCH 0/9] Einführung von AMD SVM AVIC" . Xen-devel (Mailingliste).
  23. ^ „OpenPIC-Definition aus der PC Magazine Encyclopedia“ . Pcmag.com. 1994-12-01 . Abgerufen am 2025-09-24 .
  24. ^ Brooke Crothers (20. März 1995). „AMD und Cyrix stellen alternative SMP-Spezifikation vor“ . InfoWorld : 8. ISSN 0199-6649 . 
  25. ^ André D. Balsa. „Anmerkung zu „Linux Benchmarking: Teil III – Interpretation der Benchmark-Ergebnisse“, erschienen in Ausgabe 24 der Linux Gazette, Januar 1998“ .
  26. ^ „Multiprocessor Interrupt Controller. Data Book“ (PDF) . IBM. Archiviert vom Original (PDF) am 23.02.2014.
  27. ^ „IBM Corporation RS/6000 Distributed System Running AIX Version 4.3.1. TCSEC Evaluated C2 Security“ (PDF) . Arca Systems TTAP Evaluation Facility. S. 29.
  28. ^ Singh, Amit (13. Oktober 2006). Ein Blick ins Innere des G5-basierten Dual-Prozessor-Power-Mac – via informIT-Datenbank.
  29. ^ „Power Mac G5 Entwicklerhinweis“ . Apple Developer . Interrupt-Unterstützung.

Weiterführende Literatur