High Precision Event Timer
High Precision Event Timer(高精度イベント タイマー、HPET)はパーソナルコンピューターで使用されるハードウェア タイマーである。マイクロソフトとインテルによって共同で開発され、2005年頃からPCのチップセットに組み込まれ始めた。インテルは当初「Multimedia Timer」と呼んでいたが[1]、Windows 3.0のWindows Multimedia Extensionsで導入されたソフトウェア機能のMultimedia Timersとの混同を避けるため、現在の名称に変更された。[2]
古いオペレーティングシステムはHPETをサポートしておらず、リアルタイムクロックといった以前からの古いタイマー設備を使用する。
特徴
[編集]HPETチップはProgrammable interval timerとIntel 8253のように10MHzの64ビットのアップカウンターと3つの独立した64ビットコンパレータで構成されている。HPETのチップはユーザーソフトウェアのランダムな割り込みの発生のために29の32ビット コンパレーター/タイマーを含んでいる。しかし、いくつかのオペレーティングシステムはマルチコアCPUのシステムでそれらのタイマーを使用するように構成することができない。
ACPI BIOSによって用意されるメモリマップドI/Oを通す場合のみ、HPETの32/64ビット拡張ができる。HPETのチップをマザーボードに同時に8つ実装することができる。FSBとDDR-RAMは2つのHPETチップを必要とする。これは近代的なPCは64の割り込みとIRQが使用可能なタイマーのために、6つの8253-Timer互換のカウンタ/コンパレータと58の32ビット HPET/コンパレータを持つことを表す。
64ビットカウンタの値の最下位ビットが対応するビットと同値である場合、コンパレータ/タイマーは割り込みを生成することができる。コンパレータ/タイマーはワンショットモードか周期的モードで用いることができる。ワンショットモードは、カウンタの値がコンパレータのレジスタにストアされた値に達した場合に割り込みを起こす。周期的なモードは定義した間隔で割り込みを生成する。
比較的、近代的なPCはHPETの回路をノースブリッジに統合している[脚注 1]。 これらのシステム上では、HPETは100MHz以上で動作する。
アプリケーション
[編集]HPETはRTCに比べて高い解像度でより多くの定期的な割り込みを生成することができるため、スムーズな再生を提供するためのマルチメディアストリームの同期によく用いられ、x86ベースのCPUのRDTSC命令のような他のタイムスタンプの計算回数を減らしている。
既存のタイマーとの比較
[編集]HPETはIntel 8254 Programmable interval timerとRTC周期割り込み機能を補い、そして置き換えることが意図されている。PITやRTCなどの古いタイマーと比較して、HPETは高い周波数(少なくとも10MHz)と、より広い64ビットカウンターを持つ(ただし、32ビットモードで駆動することもできる)。[1]
8254やRTCもHPETと同様にワンショットモードで利用できるが、セットアッププロセスが非常に遅いため、正確なスケジューリングを必要とするタスクで使用されることはなく[3]、時間間隔を非常に小さく設定した周期モードで代用されていた。たとえば、アプリケーションが数ミリ秒程度の短い待機を何度も行う場合、8254またはRTCのワンショットタイマーを使用するとセットアップコストが高くつくため、1ミリ秒間隔の周期タイマーモードで動作させた方が良い。しかしそうすると、アプリケーションが実際には長い周期の動作を求めているのに、1ミリ秒毎に余分な割り込みが発生してしまう。一方、HPETのワンショットタイマーはセットアップコストがかなり小さく、短い待ちでもコストを気にしなくて済むため、余分な割り込みを避けることができる。
互換性
[編集]HPETが登場する以前に設計されたオペレーティング システムはHPETを使用できないため、HPETを除く他のハードウェアタイマーを使用する。より新しいオペレーティングシステムはどちらでも使用できる傾向にあり、いくつかのハードウェアは両方を持つ。
以下のオペレーティング システムは、HPETを使用することができないことが知られている。Windows XP[脚注 2] 、Windows Server 2003、それより古いバージョンのWindows、バージョン2.6 よりも古いLinuxカーネル[脚注 3]。
以下のオペレーティング システムは、HPETを使用することが知られている。Windows Vista、Windows Server 2008、Windows 7、x86バージョンのMac OS X、バージョン2.6の Linuxカーネル、FreeBSDとOpenSolaris。
脚注
[編集]注釈
[編集]- ^ ダイの上に高度に統合されてはいるが、BIOSはACPIでしばしば誤ってHPETのセットアップをIntel 8253モードだけで初期化する。ACPIが正しくセットアップしない場合、OSはHPETを列挙できない。そしてBIOSとOS開発者は対応できないために放っておく。HPETは高速なシステムを満たすためにある。もし、HPETをBIOSがACPIで正しくセットアップできるのならば、ACPI MMIOページが最初に 0xFED00000 と次に 0xFED80000 があるはずである。
- ^ Windows XP SP2 は、HPET タイマーを(PNP0103 識別子のデバイスとして)認識する。HPET を発見した場合(例えば、Intel DQ45CB マザーボード)、デバイス マネージャ(スタート/コントロール パネル/システム/ハードウェア/デバイス マネージャ)のシステム デバイスの中で "高精度イベント タイマ" と示される。しかし、この装置はドライバがなく、使用されることは全く無い。
- ^ Linux カーネルでは、オリジナルの "rtc" ドライバーよりも、新しい "rct-cmos" ハードウェア クロック デバイス ドライバを必要とする。
出典
[編集]- ^ a b Intel Corporation (October 2004), IA-PC HPET (High Precision Event Timers) Specification (revision 1.0a) 2015年2月1日閲覧。
- ^ Multimedia Timers
- ^ Guidelines For Providing Multimedia Timer Support, (2002-09-20) 2009年11月10日閲覧。