Content deleted Content added
m Reverted edits by 2A02:908:1628:3EE0:1D32:5A8E:6873:A50F (talk) to last version by 92.23.129.107 |
Rescuing 2 sources and tagging 1 as dead.) #IABot (v2.0.9.5 |
||
(46 intermediate revisions by 29 users not shown) | |||
Line 1:
{{Short description|Family of computer interrupt controllers}}
In [[computing]], [[Intel]]'s '''Advanced Programmable Interrupt Controller''' ('''APIC''') is a family of [[programmable interrupt controller]]s. As its name suggests, the APIC is more advanced than Intel's [[8259]]
▲In [[computing]], [[Intel]]'s '''Advanced Programmable Interrupt Controller''' ('''APIC''') is a family of [[interrupt controller]]s. As its name suggests, the APIC is more advanced than Intel's [[8259]] [[Programmable Interrupt Controller]] (PIC), particularly enabling the construction of [[multiprocessor]] systems. It is one of several architectural designs intended to solve interrupt routing efficiency issues in multiprocessor computer systems.
The APIC is a split architecture design, with a local component (LAPIC) usually integrated into the processor itself, and an optional I/O APIC on a system bus. The first APIC was the 82489DX{{snd}} it was a discrete chip that functioned both as local and I/O APIC. The 82489DX enabled construction of [[symmetric multiprocessor]] (SMP) systems with the [[Intel 486]] and early [[Pentium]] processors; for example, the reference two-way 486 SMP system used three 82489DX chips, two as local APICs and one as I/O APIC. Starting with the [[P54C]] processor, the local APIC functionality was integrated into the Intel processors' silicon. The first dedicated I/O APIC was the Intel 82093AA, which was intended for [[PIIX3]]-based systems.
== Overview ==
There are two components in the Intel APIC system, the ''local APIC'' (LAPIC) and the ''I/O APIC''. There is one LAPIC in each CPU in the system. In the very first implementation ('''82489DX'''), the LAPIC was a discrete circuit, as opposed to its
Each APIC, whether a discrete chip or integrated in a CPU, has a version register containing a four-bit version number for its specific APIC implementation. For example, the 82489DX has an APIC version number of 0, while version 1 was assigned to the first generation of local APICs integrated in the Pentium 90 and 100 processors.<ref>[http://www.intel.com/design/archives/processors/pro/docs/242016.htm Intel MultiProcessor Specification], version 1.4, page 3-5, May 1997</ref>
In systems containing an [[Intel 8259|8259
==Discrete APIC==
The first-generation Intel APIC chip, the 82489DX, which was meant to be used with [[Intel 80486]] and early Pentium processors, is actually an external local and I/O APIC in one circuit. The Intel MP 1.4 specification refers to it as "discrete APIC" in contrast with the "integrated APIC" found in most of the Pentium processors.<ref>[http://www.intel.com/design/archives/processors/pro/docs/242016.htm Intel MultiProcessor Specification], version 1.4, page 1-4, May 1997</ref> The 82489DX had 16 interrupt lines;<ref name="Ram2001">{{cite book|author=Badri Ram|title=Adv Microprocessors Interfacing|url=https://books.google.com/books?id=eVcEWDIeTYcC&pg=PT314|year=2001|publisher=Tata McGraw-Hill Education|isbn=978-0-07-043448-6|page=314}}</ref> it also had a quirk that it could lose some ISA interrupts.<
In a multiprocessor 486 system, each CPU had to be paired with its own 82489DX; additionally a supplementary 82489DX had to be used as I/O APIC. The 82489DX could not emulate the 8259A (XT-PIC) so these also had to be included as physical chips for backwards compatibility.<ref>Intel MultiProcessor Specification, version 1.4, page 5-3, May 1997</ref> The 82489DX was
==Integrated local APICs==
Local APICs (LAPICs) manage all external interrupts for some specific processor in an SMP system. In addition, they are able to accept and generate [[inter-processor interrupt]]s (IPIs) between LAPICs.
All Intel processors starting with the P5 microarchitecture ([[P54C]]) have a built-in local APIC.<ref name="Mueller2011">{{cite book|author=Scott M. Mueller|title=Upgrading and Repairing PCs|year=2011|publisher=Que Publishing|isbn=978-0-13-268218-3|page=242|edition=20th}}</ref><ref name="timer" /> However, if the local APIC is disabled in a P5 processor, it cannot be re-enabled by software; this limitation no longer exists in the [[P6 (microarchitecture)|P6 processors]] and later ones.<ref name="timer
With the introduction of [[Pentium 4 HT]] and [[Pentium D]], each CPU core and each CPU thread have the integrated LAPIC.
The [[Message Signaled Interrupts]] (MSI) feature of the PCI 2.2 and later specifications cannot be used without the local APIC being enabled.<ref name="up">{{cite web|url=http://msdn.microsoft.com/en-us/windows/hardware/gg462964.aspx|title=Windows Hardware Dev Center|website=msdn.microsoft.com|date=June 2017 }}</ref> Use of MSI obviates the need for an I/O APIC. Additionally, up to 224 interrupts are supported in MSI mode, and IRQ sharing is not allowed.<ref name="msi"/>
=== APIC timer ===
Another advantage of the local APIC is that it also provides a high-resolution (on the order of one [[microsecond]] or better) timer that can be used in both interval and one-off mode.<ref name="timer">Uwe Walter, Vincent Oberle [http://telematics.tm.kit.edu/publications/Files/61/walter_ibm_linux_challenge.pdf μ-second precision timer support for the Linux kernel]</ref>
The APIC timer had its initial acceptance woes. A Microsoft document from 2002 (which advocated for the adoption of [[High Precision Event Timer]] instead) criticized the LAPIC timer for having "poor resolution" and stating that "the clocks silicon is sometimes very buggy".<
The aperiodic interrupts offered by the APIC timer are used by the [[Linux kernel]] [[tickless kernel]]
==I/O APICs==
I/O APICs contain a redirection table, which is used to route the interrupts it receives from peripheral buses to one or more local APICs.
According to a 2009 Intel benchmark using [[Linux]], the I/O APIC reduced interrupt latency by a factor of almost three relative to the 8259 emulation (XT-PIC), while using MSI reduced the latency even more, by a factor of nearly seven relative to the XT-PIC baseline.<ref>James Coleman, [http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/msg-signaled-interrupts-paper.pdf Reducing Interrupt Latency Through the Use of Message Signaled Interrupts], p. 19</ref>
Line 41:
The ''xAPIC'' was introduced with the [[Pentium 4]], while the ''x2APIC'' is the most recent generation of the Intel's programmable interrupt controller, introduced with the [[Nehalem (microarchitecture)|Nehalem microarchitecture]] in November 2008.<ref>{{cite web|url=http://www.computerbase.de/bildstrecke/20069/27/|title=Intel Nehalem mit X2APIC - Extended xAPIC Architecture (Bild 27/27) - ComputerBase|website=www.computerbase.de}}</ref> The major improvements of the x2APIC address the number of supported CPUs and performance of the interface.
The x2APIC now uses 32 bits to address CPUs, allowing to address up to 2<sup>32</sup> − 1 CPUs using the physical destination mode. The logical destination mode now works differently and introduces clusters; using this mode, one can address up to 2<sup>20</sup> − 16 processors
The improved interface reduces the number of needed APIC register
[[APICv]] is
== Issues ==
{{unreferenced
There are a number of known bugs in implementations of APIC systems, especially with concern to how the [[Intel 8254|8254]] is connected. Defective [[BIOS]]es may not set up interrupt routing properly, or provide incorrect [[Advanced Configuration and Power Interface|ACPI]] tables and Intel [[MultiProcessor Specification]] (MPS) tables.
Line 56:
== Competition ==
{{further|OpenPIC and IBM MPIC}}
[[AMD]] and [[Cyrix]] once proposed a somewhat similar-in-purpose [[OpenPIC]] architecture supporting up to 32 processors;<ref>{{cite web |url=https://www.pcmag.com/encyclopedia_term/0,2542,t=OpenPIC&i=48497,00.asp |title=OpenPIC Definition from PC Magazine Encyclopedia |publisher=Pcmag.com |date=1994-12-01 |
IBM however developed their [[OpenPIC and MPIC|MultiProcessor Interrupt Controller]] (MPIC) based on the OpenPIC register specifications.<ref>IBM [https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/F27971551C9EED8E8525774A0048770A/$file/mpic_db_05_16_2011.pdf Multiprocessor Interrupt Controller. Data Book] {{webarchive|url=https://web.archive.org/web/20140223012746/https://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/F27971551C9EED8E8525774A0048770A/%24file/mpic_db_05_16_2011.pdf |date=2014-02-23 }}</ref> MPIC was used in [[PowerPC]] based designs, including those of IBM, for instance in some [[RS/6000]] systems,<ref>Arca Systems TTAP Evaluation Facility [http://www.ashtonlabs.com/library/FERs/CSC-FER-98-004.pdf The IBM Corporation RS/6000 Distributed System Running AIX Version 4.3.1. TCSEC Evaluated C2 Security], p. 29</ref> but also by Apple, as late as their [[Power Mac G5]]s.<ref>{{cite book|url=http://www.informit.com/articles/article.aspx?p=606582|title=Take a Look Inside the G5-Based Dual-Processor Power Mac|first=Amit|last=Singh|date=13 October 2006
== See also ==
* [[Inter-processor interrupt]] (IPI)
* [[Interrupt]]
Line 70 ⟶ 67:
* [[Message Signaled Interrupts]] (MSI)
* [[Non-maskable interrupt]] (NMI)
== References ==
Line 81 ⟶ 76:
== External links ==
* [http://www.intel.com/content/dam/doc/specification-update/64-architecture-x2apic-specification.pdf Intel 64 Architecture x2APIC Specification] (PDF)
* More information on the Intel x2APIC Architecture can be found in the ''Intel 64 and IA-32 [http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html Architectures Software Developer's Manuals]''
{{Intel}}
[[Category:Motherboard]]
[[Category:Interrupts]]
|