高度なプログラマブル割り込みコントローラ

コンピューティング分野において、IntelAdvanced Programmable Interrupt ControllerAPIC )は、プログラマブル割り込みコントローラのファミリーです。その名が示すように、APICはIntelの8259 Programmable Interrupt Controller(PIC)よりも先進的で、特にマルチプロセッサシステムの構築を可能にします。これは、マルチプロセッサコンピュータシステムにおける割り込みルーティングの効率性問題を解決することを目的とした、複数のアーキテクチャ設計の1つです。

APICは分割アーキテクチャ設計で、ローカルコンポーネント(LAPIC)は通常プロセッサ自体に統合され、オプションでシステムバス上にI/O APICが配置されます。最初のAPICは82489DXで、ローカルAPICとI/O APICの両方の機能を持つディスクリートチップでした。82489DXにより、Intel 486プロセッサと初期のPentiumプロセッサで対称型マルチプロセッサ(SMP)システム構築できるようになりました。例えば、リファレンスの2ウェイ486 SMPシステムでは、3つの82489DXチップが使用されており、そのうち2つはローカルAPIC、1つはI/O APICとして機能していました。P54Cプロセッサ以降、ローカルAPIC機能はIntelプロセッサのシリコンに統合されました。最初の専用I/O APICはIntel 82093AAで、PIIX3ベースのシステム向けに設計されました。

概要

Intel APICシステムには、ローカルAPIC(LAPIC)とI/O APICという2つのコンポーネントがあります。システム内の各CPUにはLAPICが1つずつあります。最初の実装(82489DX)では、LAPICは独立した回路でしたが、後にIntelプロセッサのシリコンに実装されました。通常、システム内の各周辺バスには1つのI/O APICがあります。初期のシステム設計では、LAPICとI/O APICは専用のAPICバスで接続されていました。新しいシステムでは、すべてのAPICコンポーネント間の通信にシステムバスを使用しています。

各APICは、ディスクリートチップであってもCPUに統合されている場合でも、そのAPIC実装に対応する4ビットのバージョン番号を含むバージョンレジスタを備えています。例えば、82489DXのAPICバージョン番号は0ですが、バージョン1はPentium 90および100プロセッサに統合された第1世代のローカルAPICに割り当てられました。[ 1 ]:3-5

8259 PICを搭載したシステムでは、8259はシステムのブートストラッププロセッサ(BSP)内のLAPIC、システムのI/O APICのいずれか、あるいはその両方に接続される場合があります。ただし、論理的には、8259は一度に1つしか接続されません。

ディスクリートAPIC

第一世代のIntel APICチップである82489DXは、 Intel 80486および初期のPentiumプロセッサでの使用を想定していましたが、実際には外付けのローカルAPICとI/O APICを1つの回路に統合したものです。Intel MP 1.4仕様では、ほとんどのPentiumプロセッサに搭載されている「統合APIC」とは対照的に、これを「ディスクリートAPIC」と呼んでいます。[ 1 ] : 1-4 82489DXには16本の割り込みラインがありましたが、[ 2 ]一部のISA割り込みが失われるという問題がありました。[ 3 ]

マルチプロセッサ486システムでは、各CPUに専用の82489DXチップを組み合わせ、さらに補助的な82489DXチップをI/O APICとして使用する必要がありました。82489DXは8259A(XT-PIC)をエミュレートできなかったため、下位互換性を確保するためにこれらも物理チップとして組み込む必要がありました。[ 1 ] : 5-3 82489DXは132ピンPQFPパッケージで提供されました。[ 2 ] 大量注文の場合、1,000個あたり26米ドルで入手可能でした。[ 4 ]

統合されたローカルAPIC

ローカルAPIC(LAPIC)は、SMPシステム内の特定のプロセッサに対するすべての外部割り込みを管理します。さらに、 LAPIC間でプロセッサ間割り込み(IPI)の受信と生成が可能です。1つのLAPICは、I/O APICから最大224個の使用可能な割り込みベクターをサポートできます。ベクター番号0~255のうち、0~31はx86プロセッサによる例外処理用に予約されています。

P5マイクロアーキテクチャ(P54C)以降のすべてのIntelプロセッサには、ローカルAPICが組み込まれています。[ 5 ] [ 6 ]ただし、P5プロセッサでローカルAPICが無効になっている場合は、ソフトウェアで再度有効にすることはできません。この制限はP6プロセッサ以降ではなくなりました。[ 6 ]

Pentium 4 HTおよびPentium Dの導入により、各 CPU コアと各 CPU スレッドに LAPIC が統合されました。

PCI 2.2以降の仕様におけるメッセージシグナル割り込み(MSI)機能は、ローカルAPICが有効になっていないと使用できません。[ 7 ] MSI使用するとI/O APICが不要になります。さらに、MSIモードでは最大224個の割り込みがサポートされ、IRQの共有は許可されません。[ 8 ] : 10–11

APICタイマー

ローカルAPICのもう一つの利点は、インターバルモードとワンオフモードの両方で使用できる高解像度(1マイクロ秒程度以上)のタイマーも提供していることです。 [ 6 ]

APICタイマーは当初、導入に苦労しました。2002年のMicrosoftの文書(高精度イベントタイマーの採用を推奨)では、LAPICタイマーの「解像度が低い」ことと「クロックチップにバグが多いことがある」ことが批判されていました。[ 9 ]しかし、APICタイマーは、例えばWindows 7ではプロファイリングが有効になっている場合、Windows 8ではすべての状況で使用されています。(Windows 8がこのタイマーの独占権を主張する前は、 CPU-Zなどの一部のプログラムでも使用されていました。)Microsoft Windowsでは、APICタイマーは共有可能なリソースではありません。[ 10 ]

APICタイマーが提供する非周期割り込みは、Linuxカーネルのティックレスカーネル 機能によって使用されます。これはオプションですがデフォルトの機能で、2.6.18で新しく追加されました。APICタイマーを搭載したコンピュータでこの機能を有効にすると、カーネルは計時のために8253プログラマブルインターバルタイマーを使用しません。[ 11 ] VMwareのドキュメントには、「ソフトウェアにはその周波数を確実に測定する方法がありません。一般的に、ローカルAPICタイマーの周波数を測定する唯一の方法は、PITタイマーまたはCMOSタイマーを使用して測定することですが、これはおおよその結果しか得られません。」と記載されています。[ 12 ]

I/O APIC

I/O APIC にはリダイレクト テーブルが含まれており、これを使用して周辺バスから受信した割り込みを 1 つ以上のローカル APIC にルーティングします。初期の I/O APIC (82489DX、SIO.A、PCEB/ESC など) は 16 の割り込みラインしかサポートしていませんでしたが、後期の 82093AA (PIIX3/PIIX4 用の別のチップ) などは 24 の割り込みラインをサポートしています。[ 8 ] : 10–11 64 ピンPQFPとしてパッケージ化されていました。[ 13 ] 82093AA は通常PIIX3 / PIIX4に接続され、統合されているレガシー 8259 PIC を使用していました。[ 13 ] ICH1I/O APIC を統合しました。最近のチップセットの統合型 I/O APIC は 24 を超える割り込みラインを提供する場合があります。[ 14 ]

2009年のLinuxを使用したIntelベンチマークによると、I/O APICは8259エミュレーション(XT-PIC)に比べて割り込みレイテンシをほぼ3分の1に削減し、MSIを使用するとレイテンシはさらに削減され、XT-PICベースラインに比べて約7分の1になりました。[ 8 ]:19

変種

xAPICPentium 4で導入されましたが、x2APICはIntelのプログラマブル割り込みコントローラの最新世代であり、2008年11月にNehalemマイクロアーキテクチャで導入されました。 [ 15 ] x2APICの主な改良点は、サポートされるCPUの数とインターフェースのパフォーマンスです。

x2APICはCPUのアドレス指定に32ビットを使用するようになり、物理アドレス指定モードでは最大2 32  − 1 個のCPUをアドレス指定できます。論理アドレス指定モードでは動作が異なり、クラスタが導入されています。このモードでは、最大2 20  − 16 個のプロセッサをアドレス指定できます。

改良されたインターフェースにより、プロセッサ間割り込み(IPI)の送信に必要なAPICレジスタアクセス回数が削減されます。この利点により、KVMは物理的にx2APICをサポートしていない古いプロセッサでもx2APICをエミュレートすることが可能であり、実際にエミュレートしています。このサポートは、Conroeに遡るQEMUや、AMD Opteron Gシリーズプロセッサ(どちらもx2APICをネイティブにサポートしていません)にも公開されています。[ 16 ] [ 17 ]

APICvは、ゲストOSの割り込みオーバーヘッドを削減することを目的とした、Intelのハードウェア仮想化サポートのブランド名です。APICvは、Xeon E5-26xx v2(2013年後半発売)およびXeon E5-46xx v2(2014年初頭発売)として販売されているIvy Bridge-EPプロセッサシリーズで導入されました。 [ 18 ] [ 19 ] AMDはAVICと呼ばれる同様の技術を発表しました。[ 20 ] [ 21 ]これは、15hファミリーのモデル6Xh(Carrizo)プロセッサ以降で利用可能です。 [ 22 ]

問題

APICシステムの実装には、特に8254の接続方法に関して、既知のバグが多数存在します。BIOS欠陥があると、割り込みルーティングが正しく設定されなかったり、ACPIテーブルやIntel MultiProcessor Specific(MPS)テーブルが正しく提供されなかったりする可能性があります。

APICは、オペレーティングシステムが適切にサポートしていない場合、システム障害の原因となることもあります。古いオペレーティングシステムでは、I/OおよびローカルAPICを無効化しなければならない場合がよくありました。対称型マルチプロセッサマルチコアシステムの普及により、これはもはや不可能ですが、ファームウェアやオペレーティングシステムのバグは今では稀にしか発生しません。

競争

AMDCyrixはかつて、最大32個のプロセッサをサポートする、目的が多少似ているOpenPICアーキテクチャを提案しました。 [ 23 ]少なくとも1995年頃にはIBMCompaqから宣言的なサポートを受けていました。 [ 24 ]しかし、OpenPICを搭載したx86マザーボードはリリースされませんでした。[ 25 ] x86市場でのOpenPICの失敗後、AMDはAMD Athlon以降のプロセッサ向けにIntelのAPICのライセンスを取得しました。

IBMはOpenPICレジスタ仕様に基づいて独自のマルチプロセッサ割り込みコントローラ(MPIC)を開発した。 [ 26 ] MPICはIBMのRS/6000システムなどのPowerPCベースの設計で使用されていたが、 [ 27 ] AppleのPower Mac G5でも使用されていた。[ 28 ] [ 29 ]

参照

参考文献

  1. ^ a b c「MultiProcessor Specification, version 1.4」。Intel。1997年5月。 2004年10月30日時点のオリジナルよりアーカイブ。
  2. ^ a b Badri Ram (2001).マイクロプロセッサインターフェースの高度化. Tata McGraw-Hill Education. p. 314. ISBN 978-0-07-043448-6
  3. ^ 「APIC I/Oサブシステムの説明」 . freebsd.org . 2023年5月14日閲覧
  4. ^インテルコーポレーション、「新製品の焦点:OEM:高度なオペレーティングシステム向けに最適化された割り込みコントローラ」、マイクロコンピュータソリューション、1993年1月/2月、21ページ
  5. ^スコット・M・ミューラー (2011). 『PCのアップグレードと修理(第20版)』Que Publishing. p. 242. ISBN 978-0-13-268218-3
  6. ^ a b c Uwe Walter; Vincent Oberle. 「Linuxカーネルのμ秒精度タイマーサポート」(PDF)
  7. ^ 「ユニプロセッサPC上のAPICベースの割り込みサブシステム」。Windowsハードウェアデベロッパーセンター。2003年1月7日。2012年10月26日時点のオリジナルよりアーカイブ
  8. ^ a b c James Coleman (2009年1月). 「メッセージシグナル割り込みの使用による割り込みレイテンシの削減」(PDF) . Intel. 2022年1月19日時点のオリジナル(PDF)からのアーカイブ。
  9. ^ 「マルチメディアタイマーサポートを提供するためのガイドライン」 . Microsoft . 2002年9月20日. 2012年7月28日時点のオリジナルよりアーカイブ
  10. ^ 「Windows 8とAPICタイマー」 . social.msdn.microsoft.com . 2014年2月22日時点のオリジナルよりアーカイブ2023年5月14日閲覧。
  11. ^ 「VMware Knowledge Base」 . kb.vmware.com . 2017年2月27日時点のオリジナルよりアーカイブ2014年2月13日閲覧。
  12. ^ 「VMware 仮想マシンのタイムキーピング (VMware vSphere 5.0、Workstation 8.0、Fusion 4.0 用)」(PDF) p. 8。2016年 6 月 26 日のオリジナル(PDF)からのアーカイブ。
  13. ^ a b「Intel 82093AA I/O アドバンスト・プログラマブル割り込みコントローラ(I/O APIC)データシート」。Intel開発リソース&デザインセンター。2016年11月28日時点のオリジナルよりアーカイブ
  14. ^ 「Intel 400シリーズチップセットファミリープラットフォームコントローラーハブデータシート - 第2巻/全2巻」(PDF) . Intel . 2020年5月.
  15. ^ 「X2APIC 主要機能強化」 . computerbase.de .
  16. ^ Marcelo Tosatti (2013年7月22日). "Re: [Qemu-devel] [質問] ホストサポートなしでx2apicがデフォルトで設定されているのはなぜですか(Nehalem CPU上)" qemu -devel (メーリングリスト).
  17. ^ Eduardo Habkost (2014年1月20日). 「[Qemu-devel] [PATCH] target-i386: 最近のCPUモデルでx2apicをデフォルトで有効化」 . qemu-devel (メーリングリスト).
  18. ^ Jun Nakajima (2012). Interrupt/APIC仮想化における未使用機能と新機能のレビュー(PDF) . Linux Plumber's Conference 2012. 2023年5月14日閲覧
  19. ^ 「APIC 仮想化パフォーマンス テストと Iozone* - Intel® ソフトウェア。software.intel.com
  20. ^ Wei Huang. AMD Advanced Virtual Interrupt Controller の紹介. XenSummit 2012.
  21. ^ Jörg Rödel (2012年8月). KVM向け次世代割り込み仮想化(PDF) . Linux Plumber's Conference 2012. 2023年5月14日閲覧
  22. ^ Suravee Suthikulpanit (2016年9月18日). 「[Xen-devel] [RFC PATCH 0/9] AMD SVM AVIC の導入」 . Xen-devel (メーリングリスト).
  23. ^ 「PC Magazine百科事典からのOpenPICの定義」 . Pcmag.com. 1994年12月1日. 2025年9月24日閲覧
  24. ^ Brooke Crothers (1995年3月20日). 「AMDとCyrixが代替SMP仕様を提案」 InfoWorld : 8. ISSN 0199-6649 . 
  25. ^ André D. Balsa. 「Linux Gazette 1998年1月号に掲載された「Linuxベンチマーク:パートIII - ベンチマーク結果の解釈」への注釈」
  26. ^ 「マルチプロセッサ割り込みコントローラ データブック」(PDF) IBM。 2014年2月23日時点のオリジナル(PDF)からアーカイブ。
  27. ^ 「AIXバージョン4.3.1を実行するIBM Corporation RS/6000分散システム。TCSECによるC2セキュリティの評価」(PDF)。Arca Systems TTAP評価施設。29ページ。
  28. ^ Singh, Amit (2006年10月13日). G5ベースのデュアルプロセッサPower Macの内部を覗いてみよう– informITデータベースより。
  29. ^ 「Power Mac G5 開発者ノート」。Apple Developer。割り込みサポート。

さらに読む