Advanced Programmable Interrupt Controller
Em computação, Advanced Programmable Interrupt Controller (APIC), em em português: Controlador Avançado de Interrupção Programável, da Intel, é uma família de controladores de interrupções. Como o próprio nome sugere, o APIC é mais avançado do que o Programmable Interrupt Controller (PIC) 8259 da Intel, mais intricado, contendo uma escala muito maior de saídas, esquemas de prioridade muito mais complexos e um gerenciamento avançado de IRQs, permitindo a construção de sistemas com múltiplos processadores. Este é um dos vários projetos arquitetônicos destinados a resolver problemas de eficiência de roteamento de interrupções em sistemas de computadores com múltiplos processadores.
Uma das arquiteturas APIC mais conhecidos, a Intel APIC Architecture, tem substituído a PIC 8259A original nos novos PCs x86. O APIC é um projeto de arquitetura de divisão, com um componente local (LAPIC) normalmente integrado no próprio processador e um APIC de E/S opcional em um barramento do sistema. O primeiro foi o APIC 82489DX - era um chip discreto que funcionava tanto como um APIC local e de E/S. O 82489DX permitiu a construção de sistemas com multiprocessador simétrico (SMP) nos processadores Intel 486 e nos primeiros processadores Pentium; por exemplo, o sistema 486 SMP 2-way utiliza três 82489DX chips, dois como APICs locais e um como APIC de E/S. Começando com o processador P54C, a funcionalidade do APIC local foi integrado aos processadores de silício da Intel. O primeiro APIC de E/S dedicado foi o Intel 82093AA, que foi destinado para sistemas baseados em PIIX3.
Visão Geral
editarExistem dois componentes no sistema Intel APIC, o APIC local (LAPIC) e o APIC de E/S. Existe um LAPIC em cada CPU no sistema. Na primeira implementação, o LAPIC era um circuito discreto, o 82489DX, mas depois disso ele foi integrado em processadores Intel. Há tipicamente um APIC de E/S para cada barramento periférico no sistema. Em projetos de sistema originais, LAPICs e APICs de E/S estavam ligados por um barramento APIC dedicado. Sistemas mais recentes usam o barramento do sistema de comunicação entre todos os componentes APIC.
Cada APIC, seja um chip discreto ou integrado em uma CPU, tem um registo de versão que contém um número de versão de quatro bits para a sua implementação de APIC específico. Por exemplo, o 82489DX tem um número de versão APIC de 0, enquanto que a versão 1 foi atribuído à primeira geração de APICs locais integrados nos processadores Pentium 90 e 100.[1]
Em sistemas que contêm um PIC 8259, este pode ser ligado em um LAPIC do Sistema de Processador de Inicialização (BSP), ou a um dos APICs de E/S do sistema, ou ambos. No entanto, logicamente, o 8259 - só é ligado quando em um determinado momento.
APIC Discreto
editarA primeira geração de chip APIC da Intel, o 82489DX, que estava destinado a ser utilizado com o Intel 80486 e nos primeiros processadores Pentium, é, na verdade, um APIC local e um APIC de E/S em um circuito. A especificação Intel MP 1.4 refere-se a ele como "APIC discreto", em contraste com o "APIC integrado" encontrado na maioria dos processadores Pentium.[2] O 82489DX tinha 16 linhas de interrupção;[3] também teve um equívoco que poderia perder algumas interrupções de ISA.[4]
Em um sistema multiprocessador 486, cada CPU tinha que ser emparelhado com o seu próprio 82489DX; adicionalmente um 82489DX complementar teve de ser utilizado como APIC de E/S. O 82489DX não poderia emular o 8259A (XT-PIC) então estes também tiveram que ser incluídos como chips físicos para compatibilidade com versões anteriores.[5] O 82489DX foi empacotado como um PQFP de 132-pin.[3]
APICs locais integradas
editarAPICs locais (LAPICs) gerenciam todas as interrupções externas para algum processador específico em um sistema SMP. Além disso, eles são capazes de aceitar e gerar interrupções inter-processos (IPIs) entre LAPICs. LAPICs pode suportar até 224 vetores de interrupção utilizáveis a partir de um APIC de E/S. Os números de vetores de 0 a 31 são reservados para o tratamento de exceção nos processadores de arquitetura x86.
Todos os processadores Intel começando com a P54C tem um APIC local embutido.[6][7] No entanto, se o APIC local é desativado em um processador de P5, não pode ser reativado por software; essa limitação não existe mais nos processadores P6 e posteriores.[7] Em sistemas com um único processador, a grande vantagem da APIC local é que as placas PCI não precisam ter suas interrupções mapeadas para as interrupções ISA, mas pode usar PCI virtuais IRQs acima de 15, resultando em menos conflitos e melhor desempenho.[6]
Na família Microsoft de sistema operacional, o Windows XP foi o primeiro a fazer corretamente o uso de IRQ virtuais fornecidos pela APIC local, com algum apoio parcial presente no Windows 2000.[6] No Windows 2000, a propagação de interrupções PCI para cartões virtuais IRQ só acontece se a máquina também tem um APIC de E/S. Microsoft culpou sua implementação do Windows 2000, sobre as informações que tinha recebido da Intel supostamente prometendo que todos os futuros sistemas conteria um APIC de E/S, algo que, em retrospecto, não aconteceu.[8] (Um documento da Microsoft daquela época chegou a afirmar que "sem um APIC de E/S no sistema, os APICs locais são inúteis. Em tal situação, o Windows 2000 tem que voltar a usar a 8259 PIC."[9]) O uso generalizado repentino do APIC local com Windows XP fez expor um número de erros em várias implementações do BIOS. A Microsoft foi forçada a manter o comportamento de empilhamento do PCI IRQ para qualquer máquina com um controlador CardBus (e sem um APIC de E/S).[8]
O recurso Mensagem de Interrupção Sinalizado (MSI) do PCI 2.2 e especificações posteriores não pode ser usado sem o APIC local sendo habilitado.[8] O uso de MSI elimina a necessidade de um APIC de E/S. Além disso, até 224 interrupções são suportados em modo MSI e compartilhamento de IRQ não é permitido.[10]
APIC temporizador
editarOutra vantagem do APIC local é que ele proporciona também um cronômetro de alta resolução (da ordem de um microssegundo, ou melhor) que pode ser usado em ambos intervalo e modo pontual.[7]
O cronômetro APIC teve seus problemas de aceitação iniciais. Um documento da Microsoft de 2002 (que ao invés defendeu a adoção de cronômetro de evento de alta precisão) criticou o temporizador LAPIC por ter "baixa resolução" e afirmando que "o silício do relógio às vezes tem muitos erros ".[11] No entanto, o cronômetro APIC é usado, por exemplo, no Windows 7 quando perfil é ativado, e por Windows 8 em todas as circunstâncias. (Antes do Windows 8 foi reivindicado direitos exclusivos para este temporizador, também foi usado por alguns programas como o CPU-Z.) No Microsoft Windows o temporizador APIC não é um recurso compartilhável.[12]
As interrupções aperiódicas oferecidos pelo temporizador APIC são usados pelo kernel do Linux a partir de 2.6.18 em diante para implementar o seu recurso tickless kernel; o legado 8253 Temporizador De Intervalo Programável não é mais usado pelos tickless kernels.[13] Um documento VMware observa que "software não tem uma maneira confiável para determinar a sua frequência. Geralmente, a única maneira de determinar a frequência do temporizador APIC local é medir -lo usando o PIT ou CMOS timer, que produz unicamente um resultado aproximado. "[14]
APICs de E/S
editarAPICs de E/S contém uma tabela de redirecionamento, que é usado para rotear as interrupções que recebe de barramento periférico para um ou mais APICs locais. A primeira geração de APIC de E/S dedicado, o 82093AA, tinha suporte para 24 linhas de interrupção.[10] Ele foi empacotado como um 64-Pin PQFP.[15] A 82093AA normalmente conectado à PIIX3 e usou seu legado integrado 8259 PICs.[15]
De acordo com um Intel 2009 de referência utilizando o Linux, o APIC de E/S reduziu a interrupção de latência por um fator de quase três, relativo ao emulador 8259 (XT-PIC), enquanto utilizando o MSI reduz a latência ainda mais, por um fator de cerca de sete relativo a linha de base XT-PIC.[16]
Variantes
editarO xAPIC foi introduzido com o Pentium 4, enquanto o x2APIC é a mais recente geração de controlador de interrupção programável da Intel, introduzidos com a microarquitetura Nehalem.[17] As principais melhorias do x2APIC endereça o número de CPUs suportadas e o desempenho da interface.
APICv é a marca da Intel para suporte à virtualização de hardware visando reduzir sobrecarga interrupção em seus hóspedes. APICv foi introduzido nos processadores Ivy Bridge-EP. A AMD anunciou uma tecnologia similar chamada AVIC, mas ainda tem que enviar os produtos com ela.
Problemas
editarHá um número de problemas conhecidos em implementações de sistemas APIC, sobretudo com a preocupação de como o 8254 é conectado. BIOS defeituosos pode não configurar o roteamento de interrupção corretamente, ou fornecer tabelas ACPI incorretas e tabelas de Especificações de Multiprocessadores (MPS) da Intel.
O APIC também pode ser uma causa de falha do sistema quando o sistema operacional não o suporta adequadamente. Em sistemas operacionais mais antigos, os APICs local e de E/S, muitas vezes teve de ser desativado. Embora isso não seja mais possível devido à prevalência de multiprocessadores simétricos e sistemas multi-core, os erros no firmware e nos sistemas operacionais agora são uma ocorrência rara.
Competição
editarA AMD e Cyrix uma vez propuseram como algo semelhante a arquitetura OpenPIC que suporta até 32 processadores;[18] que tinha pelo menos apoio declarativo da IBM e Compaq por volta de 1995.[19] Entretanto, a placa-mãe do x86 foi lançado com OpenPIC.[20] Após o fracasso do OpenPIC no mercado x86, a AMD licenciou o APIC da Intel para a sua AMD Athlon e processadores posteriores.
A IBM no entanto desenvolveram seu Controlador de Interrupção de Multiprocessador (MPIC) com base nas especificações de registo OpenPIC.[21] MPIC foi utilizado em projetos baseados no PowerPC, incluindo os da IBM, por exemplo, em alguns sistemas RS/6000,[22] mas também pela Apple, tão tarde quanto os seus Power Mac G5.[23][24]
Ver também
editarReferências
- ↑ Intel MultiProcessor Specification, version 1.4, page 3-5, May 1997
- ↑ Intel MultiProcessor Specification, version 1.4, page 1-4, May 1997
- ↑ a b Badri Ram (2001). Adv Microprocessors Interfacing. [S.l.]: Tata McGraw-Hill Education. p. 314. ISBN 978-0-07-043448-6
- ↑ http://people.freebsd.org/~fsmp/SMP/papers/apicsubsystem.txt
- ↑ Intel MultiProcessor Specification, version 1.4, page 5-3, May 1997
- ↑ a b c Scott M. Mueller (2011). Upgrading and Repairing PCs 20th ed. [S.l.]: Que Publishing. p. 242. ISBN 978-0-13-268218-3
- ↑ a b c Uwe Walter, Vincent Oberle μ-second precision timer support for the Linux kernel
- ↑ a b c APIC-Based Interrupt Subsystems on Uniprocessor PCs
- ↑ Key Benefits of the I/O APIC
- ↑ a b James Coleman, Reducing Interrupt Latency Through the Use of Message Signaled Interrupts, pp. 10-11
- ↑ Guidelines For Providing Multimedia Timer Support, September 20, 2002
- ↑ «Windows 8 and APIC timer». Consultado em 26 de maio de 2015. Arquivado do original em 22 de fevereiro de 2014
- ↑ Determining and changing the rate of timer interrupts a guest operating system requests (1005802)
- ↑ Timekeeping in VMware Virtual Machines (for VMware vSphere 5.0, Workstation 8.0, Fusion 4.0), page 8
- ↑ a b Intel 82093AA I/O Advanced Programmable Interrupt Controller (I/O APIC) Datasheet
- ↑ James Coleman, Reducing Interrupt Latency Through the Use of Message Signaled Interrupts, p. 19
- ↑ "Next Generation Interrupt Architecture"
- ↑ «OpenPIC Definition from PC Magazine Encyclopedia». Pcmag.com. 1 de dezembro de 1994. Consultado em 3 de novembro de 2011
- ↑ Brooke Crothers (20 de março de 1995). AMD, Cyrix offer up alternative SMP spec. [S.l.]: InfoWorld. p. 8. ISSN 0199-6649
- ↑ André D. Balsa, Note attached to "Linux Benchmarking: Part III -- Interpreting Benchmark Results" appearing in Issue 24 of Linux Gazette, January 1998
- ↑ IBM Multiprocessor Interrupt Controller. Data Book
- ↑ Arca Systems TTAP Evaluation Facility The IBM Corporation RS/6000 Distributed System Running AIX Version 4.3.1. TCSEC Evaluated C2 Security, p. 29
- ↑ Take a Look Inside the G5-Based Dual-Processor Power Mac
- ↑ Power Mac G5 Developer Note (Legacy), p. 26