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 interrupts (IPIs) between LAPICs. A single LAPIC may support up to 224 usable
interrupt vectors from an I/O APIC. Vector numbers 0 to 31, out of 0 to 255, are reserved for exception handling by x86 processors. All Intel processors starting with the P5 microarchitecture (
P54C) have a built-in local APIC. 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. 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". Nevertheless, the APIC timer is used for example by
Windows 7 when
profiling is enabled, and by
Windows 8 in all circumstances. (Before Windows 8 claimed exclusive rights to this timer, it was also used by some programs like
CPU-Z.) Under Microsoft Windows the APIC timer is not a shareable resource. The aperiodic interrupts offered by the APIC timer are used by the
Linux kernel tickless kernel feature. This optional but default feature is new with 2.6.18. When enabled on a computer with an APIC timer, the kernel does not use the
8253 programmable interval timer for timekeeping. A
VMware document notes that "software does not have a reliable way to determine its frequency. Generally, the only way to determine the local APIC timer’s frequency is to measure it using the PIT or CMOS timer, which yields only an approximate result." ==I/O APICs==