TLBサポート設計のIOMMU
【解決手段】
実施形態は、ページテーブルの構造及びフォーマットに依存しない改良されたトランスレーション挙動を有する入力/出力メモリ管理ユニット(IOMMU)のより小さくより単純なハードウエア実装を可能にする。実施形態はまた、デバイスに依存しない構造及び実装の方法を提供し、ソフトウエアのより大きな一般性を可能にする(より少ない特定のソフトウエアバージョンは同時に開発コストを低減する)。
実施形態は、ページテーブルの構造及びフォーマットに依存しない改良されたトランスレーション挙動を有する入力/出力メモリ管理ユニット(IOMMU)のより小さくより単純なハードウエア実装を可能にする。実施形態はまた、デバイスに依存しない構造及び実装の方法を提供し、ソフトウエアのより大きな一般性を可能にする(より少ない特定のソフトウエアバージョンは同時に開発コストを低減する)。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は概してコンピュータシステムに関し、より特定的には入力/出力メモリ管理ユニット(IOMMU)に関する。
【背景技術】
【0002】
メモリ管理ユニット(MMU)は中央処理ユニット(CPU)に関連付けられ得る。例えばCPU_MMUは、CPUによって用いられる仮想アドレスをシステムメモリに対応する物理アドレスへとトランスレートするように構成され、そしてCPU_MMUはアクセス(存在、読み出し、書き込み等)を認証して、CPUに関連付けられるメモリオーバーコミット、リロケーション及び保護を可能にする。
【0003】
x86_CPUに関連しているシステムにおいては、比較的最近、入力/出力周辺機器に関連付けられる入力/出力(IO)MMUが定義されるようになってきた。入力/出力メモリ管理ユニット(IOMMU)は、例えば周辺機器によって使用される仮想アドレスに関連付けられる周辺機器要求に応答してシステムメモリからトランスレーション情報をリトリーブして(retrieve)、その仮想アドレスをシステムメモリの対応物理アドレスへとトランスレートする。
【0004】
IOMMUは、典型的には、主システムメモリの内容を調べて必要なトランスレーション情報を探し出す(ページテーブルウォークを行う)ページテーブルウォーカー論理(page-table walker logic)を含み得る。例えば、IOMMU内にキャッシュされていない情報を周辺機器が要求する場合(即ち「ミス」)、システムメモリから情報を得るためにテーブルウォーカーが用いられる。しかし、ページテーブルウォーカーは実装するのに複雑であるので、IOMMUのチップ又はチップ部品のシリコン面積及び電力消費を増大させる可能性がある。IOMMUは、IOMMUハードウエアが利用可能な限定された情報に基づきローカル的に最適化されるようにページテーブルウォーカーを実装する(例えば最長時間未使用(least-recently-used)(LRU)アルゴリズムに基づきIOMMU内にキャッシュされる情報に影響する)。ハードウエアのみ実装(hardware-only implementations)のそのような例は、過剰なトランスレーションフェッチ(fetches)(「ページテーブルウォーク(page-table walks)」)及び過剰なトランスレーションミスを潜在的に引き起こし、IOサブシステムの性能を低下させまたメモリ待ち時間の増大をもたらす可能性がある。
【0005】
加えて、IOMMUは典型的には、特定のアーキテクチャに付随するページテーブルエントリのフォーマットに基づき情報を読み出し且つ構文解析するように構成され、ページテーブルフォーマットをハードウエア設計に委ねる特定のページテーブルアーキテクチャに、つまりは特定の適合可能なプロセッサ実装に、IOMMUを限定している。
【0006】
ソフトウエア設計/管理の(software architected/managed)トランスレーションルックアサイドバッファ(translation look-aside buffer)(TLB)キャッシュもまた知られている。ソフトウエアがTLBを管理し、そして任意のページテーブルウォークはソフトウエアにおいて行われる。ソフトウエアはエントリをTLB内へロードするが、ハードウエア基盤がソフトウエア設計のTLBを支援することはない。また、ソフトウエア設計のTLBは、ローディング及び/又は無効化に際して柔軟性を有していない、つまりエントリがTLB内へロードされるときに、ローダ(loader)は先行するエントリを置換する影響を有する。
【発明の概要】
【発明が解決しようとする課題】
【0007】
幾つかのIO制御器又は周辺機器は、オペレーティングシステム又はハイパーバイザ(hypervisor)におけるデバイスドライバソフトウエアによって管理される単純なMMUを含む。例えば典型的なグラフィクス制御器は、グラフィクスカード上の「ローカルMMU」を含む。このような場合、「ローカルMMU」マッピングハードウエアは、洗練されたアルゴリズムを用いるシステムソフトウエアによって制御されるが、各MMUは固有のものであり且つ固有のドライバを必要とする。周辺機器ハードウエアに対する変更点はドライバに対する変更を必要とし、開発コストを跳ね上げると共に開発スケジュールを長期化させ、最終的には製品化までの時間を遅らせる。このことはまた、仮想化されたシステムにおけるハイパーバイザのための一般的なドライバを製造供給元が作成することができず、従って特定のドライバがハイパーバイザ内に含まれている必要があることを意味し、ハイパーバイザの選択は、システム内に存在する的確なIO周辺機器に依存することになる。これは、サポートされるオペレーティングシステムのためのドライバに加えてハイパーバイザのために更に別のドライバが作成され且つ試験される必要があることを意味し、開発コスト及び時間が更に跳ね上がる。
【0008】
IOMMU性能を改善し、且つソフトウエアがハイパーバイザのために一度作成されると共に周辺機器メモリマッピングアーキテクチャの多重実装に用いられることを可能にする手法が必要とされている。
【課題を解決するための手段】
【0009】
本発明の実施形態は、ページテーブルの構造及びフォーマットに依存しない改良されたトランスレーション挙動を伴うIOMMUのより小さくより単純なハードウエア実装を可能にする。実施形態はまた、デバイスに依存しない構造及び実装の方法を提供し、ソフトウエアのより大きな一般性を可能にする(より少ない特定のソフトウエアバージョンは同時に開発コストを低減する)。
【0010】
1つの実施形態は、システムの入力/出力(I/O)メモリ管理ユニット(IOMMU)でプリフェッチ即時コマンドを受け取ることを含む方法に関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。方法は更に、少なくとも資源状態に基づいてアドレストランスレーション情報をIOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)内へと選択的に記憶することを含む。
【0011】
別の実施形態は、プリフェッチ即時コマンドを受け取るように構成される入力/出力(I/O)メモリ管理ユニット(IOMMU)を含むシステムに関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。IOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)は、少なくとも資源状態に基づいてアドレストランスレーション情報を選択的に記憶するように構成される。
【0012】
更に別の実施形態は、システムの入力/出力(I/O)メモリ管理ユニット(IOMMU)でプリフェッチ即時コマンドを受け取ることを含む方法を、コンピューティングデバイスによって実行される場合にコンピューティングデバイスに行わせるコンピュータ実行可能命令が記憶された有形的コンピュータ可読媒体に関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。方法は更に、少なくとも資源状態に基づいてアドレストランスレーション情報をIOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)内へと選択的に記憶することを含む。
【0013】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。ここに含まれる教示に基き追加的な実施形態が関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【0014】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は実施形態を示し、そして上述の一般的な説明及び下記の実施形態の詳細な説明と共に、本発明の実施形態の原理を説明することに役立つ。
【0015】
【図1】図1はある実施形態に従いIOMMUを含むシステムを示すブロック図である。
【0016】
【図2】図2は別の実施形態に従うIOMMUを示すブロック図である。
【0017】
【図3】図3は別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0018】
【図4】図4は別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0019】
【図5】図5は別の実施形態に従いアドレストランスレーション情報を選択的に記憶するための方法を示すフロー図である。
【0020】
【図6】図6は別の実施形態に従うIOMMUを示すブロック図である。
【0021】
【図7】図7は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0022】
【図8】図8は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0023】
【図9】図9は更に別の実施形態に従いアドレストランスレーションデータに対する要求をサービスするための方法を示すフロー図である。
【0024】
【図10】図10は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0025】
【図11】図11は更に別の実施形態に従いIOMMUとIOTLBを伴う周辺機器とを含むシステムを示すブロック図である。
【0026】
【図12】図12は更に別の実施形態に従い割り込み再マッピングバッファ及びデバイステーブルエントリバッファを含むシステムを示すブロック図である。
【発明を実施するための形態】
【0027】
本発明の実施形態は、メモリ管理ユニット及びその応用を提供する。以下の詳細な説明において、「1つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【0028】
図1はCPU106とCPU106に関連付けられるCPU_MMU108とを含むシステム100を示すブロック図である。システム100は、周辺機器110に関連付けられるIOMMU102を更に含む。ここには図示されていないが、システム100においては、多重のCPU_MMU108が考慮されるのと同時に多重のIOMMUが考慮される(例えば多重プロセッサシステム)。
【0029】
IOMMU102は、一連の定義された機能及び挙動に従って動作する。これらの機能及び挙動は、システムメモリ104内にキューされ(queued)且つIOMMU102によって読み出されてIOMMU102によって実行/使用される一連のコマンドに関連付けられている。
【0030】
IOMMU102は、周辺機器110とシステムメモリ104の間で仮想/物理アドレスをトランスレートし、そして割り込み再マッピングを行う。割り込み再マッピングは、再マッピング割り込みに対応するアドレスをトランスレートするという点において、アドレストランスレーションと同様に機能する。IOMMU102のトランスレーション/再マッピング速度を向上させるために、システムメモリ104内に記憶されるアドレストランスレーション/割り込み再マッピング情報がIOMMU102内にキャッシュされ得る。この処理は、IOMMU102がトランスレーション又は再マッピング情報にアクセスし得る速度を高める。
【0031】
図2は図1のIOMMU102を示す更に詳細なブロック図である。IOMMU202は、主システムメモリ104(図1参照)の内容を調べるように構成されるページテーブルウォーカー214を含む。ページテーブルウォーカー214はまた、IOMMU102内での記憶/キャッシングのための情報の配置及びリトリーバル(retrieval)を容易にする。ページテーブルウォーカー214は、トランスレーションルックアサイドバッファ(TLB)212と称されるキャッシュ内へとトランスレーション情報を挿入することができ、TLB212は入力/出力TLB(IOTLB)212としても知られる。IOTLB212は、仮想アドレス216と物理アドレス218の間でのアドレストランスレーションに用いられ得る。同様のキャッシング構造が割り込み再マッピングに対しても用いられ得る。
【0032】
IOMMU102は、キャッシュされるべき情報の充填とIOMMU102及び/又はIOTLB212内にキャッシュされるトランスレーション/再マッピング情報の無効化又はフラッシング(flushing)とを制御するシステムメモリ104からのコマンドを読み出す。IOMMU102は更に、周辺機器110からの情報に対する要求に応答してシステムメモリ104からのトランスレーション/再マッピング情報を自動的にロードすることが可能である。例えばIOMMU102は、ハードウエアのページテーブルウォーカー214を実装して、ページテーブルウォークを行うと共にシステムメモリ104のページテーブルから物理アドレス218をリトリーブする(retrieve)ことができる。トランスレートされるべき仮想アドレス216がIOTLB212内にキャッシュされていない場合に、ページテーブルウォークは、仮想アドレス216を含む周辺機器110からの要求に応答することができる。
【0033】
IOTLB212内のアドレストランスレーション/再マッピング情報は、ハードウエア及び/又はソフトウエアにより種々の方法(トランスレーションバッファポリシーとも称される)において維持され且つ更新され得る。例えば、CPU106上のシステムソフトウエアは、システムメモリ104内に記憶される対応する情報が変化していることを理由としてもはや有効ではないIOMMU102内にキャッシュされている情報を無効化することができる。IOMMU102はまた、IOMMU102内にキャッシュされるトランスレーションエントリのキャッシング及び退去を主としてハードウエアが決定するように、トランスレーションバッファポリシーをハードウエアにおいて実装することもできる。キャッシュされたトランスレーションエントリが退去させられると、新たな情報のための場所を空けることができる。キャッシュされたトランスレーションエントリは、それがもはや有効ではなくなったときにフラッシュされる(flushed)必要がある。これらの及び他の技術は、IOTLB212内の情報が置換されることになる場合又はもはや有効ではなくなった場合にこれを処理するために適用され得る。
【0034】
IOMMU102は、システムメモリ104からの情報を、その情報に対する要求を周辺機器110から受け取るのに先立ちプリフェッチする(prefetch)ことができる。プリフェッチコマンドは、例えば、「IOMMUにおけるトランスレーションデータプリフェッチ(Translation Data Prefetch in an IOMMU)」の表題で2008年4月30日に出願された米国特許出願第12/112,611号に開示されるように実装することができ、その内容はその全部を参照としてここに組み込まれる。プリフェッチコマンドは、システムメモリ104のページテーブルをウォークすること及び例えば指定された(デバイス仮想)アドレスに関連付けられるトランスレーション情報をプリロードする(preload)ことをIOMMU102に指示することができる。従って、プリロードされたトランスレーション情報は、要求がIOMMU102内に入ってきたときにIOTLB212において利用可能である。
【0035】
図3はIOMMU302及びシステムメモリ304を含むシステム300を示すブロック図である。システム300はページテーブル320及びイベントログバッファ328を更に含む。アドレストランスレーション情報322はページテーブル320内でアクセス可能である。IOMMUエントリ330はイベントログバッファ328内でアクセス可能である。システム300はCPU306及びCPU_MMU308を追加的に含む。
【0036】
単一又は複数のIOMMUキャッシュを充填することに関して、IOMMU302は、システムメモリ304のページテーブル320内に記憶されるアドレストランスレーション情報322にアクセスしてこれをキャッシュする。図示されるように、IOMMU302のページテーブルウォーカー314は、ページテーブルウォークを行ってアドレストランスレーション情報322をリトリーブする。アドレストランスレーション情報322は、次いでIOTLB312内にキャッシュされる。アドレストランスレーション情報322に対して周辺機器310からの後続の要求がIOMMU302に到着すると、アドレストランスレーション情報322はIOTLB312において利用可能となり、ページテーブルウォークは不要になる。IOTLB312でもはや利用可能でないアドレストランスレーション情報322に対する要求がIOMMU302に到着すると、ページテーブル320からのアドレストランスレーション情報322を得るために、次のページテーブルウォークが行われ得る。代替的には、システム300は、プリフェッチ即時コマンド(prefetch immediate command)326を利用してIOTLB312の内容を更新することができる。
【0037】
IOMMU302は、システムメモリ304のコマンドキュー324内に記憶されるコマンドを読み出して使うことができる。これにより、IOMMU302は、その単一又は複数のキャッシュを、コマンドにおいて渡された情報を用いて充填することができる。充填ポリシーに加えて、IOMMU302によって読み出されたコマンドは、実際上、IOTLB312内にキャッシュされた情報をソフトウエアが無効化し又は更新することを可能にする。例えば、無効化は、アドレストランスレーション情報322が変化し、IOTLB312内の先にキャッシュされたアドレストランスレーション情報が、変化したアドレストランスレーション情報322にもはや対応しなくなったときの状態と関連付けられ得る。
【0038】
IOMMU302によってコマンドキュー324から読み出されたコマンドは、IOMMU302の機能を更に拡大することができる。プリフェッチ即時コマンド326は、プリフェッチ即時コマンド326の本体(body)内にアドレストランスレーション情報322を含むことができる。IOMMU302は次いで、プリフェッチ即時コマンド326を介してアドレストランスレーション情報322を受け取ることができる。従ってIOMMU302は、アドレストランスレーション情報322を得るためにページテーブルウォーカー314を用いてページテーブル320をウォークする必要はない。プリフェッチ即時コマンド326内の情報は、ページテーブルウォーキングをなんら行うことなしに、IOTLB312内へ直接的にロードされ得る。図示されるように、ページテーブルウォーカー314は、プリフェッチ即時コマンド326と連動してバックアップし且つ/又は動作するために利用可能である。
【0039】
プリフェッチ即時コマンド326は、IOMMUへの新たなコマンドとして又は上述したプリフェッチコマンドの変形として実装され得る。また、プリフェッチ即時コマンド326は、必要な情報をシステムソフトウエアが書き込む一連のMMIOレジスタとして実装されてもよい。
【0040】
図4は実施形態に従いプリフェッチ即時コマンド426を実装しているシステム400を示すブロック図である。システム400は、周辺機器410に関連付けられており、そしてCPU406、CPU_MMU408及びシステムメモリ404を含み得る。システムメモリ404は、ページテーブル420、コマンドキュー424及びイベントログバッファ428を含む。システムメモリ404はまた、IOページテーブル430に関連付けられていてもよい。アドレストランスレーション情報422はIOページテーブル430内に記憶され得る。IOページテーブル430の内部フォーマットは、ページテーブル420の内部フォーマットと同じである必要はない。プリフェッチ即時コマンド426は、アドレストランスレーション情報422をIOTLB412内へキャッシュする。アドレストランスレーション情報422は、仮想アドレス416及び物理アドレス418と関連付けられている。システム400は、コマンドキュー424及びプリフェッチ即時コマンド426を管理して、アドレストランスレーション情報422をプリフェッチ即時コマンド426による使用のために供することができる。従って、プリフェッチ即時コマンド426を用いてIOMMUと相互作用しているシステム400は、システム400がIOMMU402におけるデータのキャッシングに関連付けられるための柔軟性及び機会を導入する。
【0041】
加えて、システム400は、ページテーブルウォーカー414を用いる必要性なしに、アドレストランスレーション情報422のキャッシングをIOTLB412で達成することができる。従ってシステム400は、特定のハードウエア実装のページテーブルウォーカー414(用いられている場合における)とインタフェースするために特定のシステムドライバを含んでいる必要がない。しかし、プリフェッチ即時コマンド426は、妥当な場合、ハードウエアページテーブルウォーカー414と連動して全体の性能を改善するために動作可能であることが検討される。
【0042】
図5は実施形態に従いシステム状態に基づきアドレストランスレーション情報を選択的に記憶する例示的な方法560を示すフローチャートである。ステップ570において、IOMMUは、アドレストランスレーション情報を指定するプリフェッチ即時コマンドを受け取る。ステップ572では、例えばIOMMU又はシステムによってシステム状態がチェックされる。システム状態はシステムの資源状態を含むことができ、システムの資源状態は、システム資源の利用可能性、IOTLBにおける1つ以上の空きアドレスエントリの利用可能性、電力節約及び/若しくはスリープ状態、並びに/又は係属中システム要求を考慮したシステム資源の利用可能性、を含むことができる。資源状態はまた、プリフェッチ即時コマンドにおいて指定されるアドレストランスレーション情報に対応するIOTLB内に記憶される1つ以上の有効アドレスエントリの優先度、又はプリフェッチ即時コマンドにおいて指定される無効化表示、を含むこともできる。
【0043】
ステップ574では、システム状態に基づきプリフェッチ即時コマンドを無視するかどうかの決定がなされる。プリフェッチ即時コマンドを無視しないとの決定である場合には、方法はステップ576へ進み、アドレストランスレーション情報がIOMMUのIOTLBに記憶される。方法はステップ576からステップ578へ進む。ステップ574においてプリフェッチ即時コマンドを無視するとの決定である場合には、方法はステップ578へ進み、コマンドキュー内の次のIOMMUコマンドが処理される。
【0044】
プリフェッチ即時コマンドのためのコマンドフォーマットは、トランスレートされた物理アドレスと、指定された(デバイス仮想)アドレスに対する許可アクセス標識及びIOMMUドメイン情報を含む他の情報と、を含むことができる。コマンドフォーマットはまた、IOTLBスロット宛先を含んでいてもよい。
【0045】
IOMMUはプリフェッチ即時コマンドを選択的に無視することができる。例えば、IOMMUは、IOMMUキャッシュ内に存在しているエントリが上書きされるべきではないことと、アドレストランスレーションが挿入されるべき現在利用可能なIOMMUキャッシュエントリがないことと、を決定することができる。無視されたプリフェッチ即時コマンドに含まれてはいたが挿入されてはいなかったアドレストランスレーション情報に対して要求がIOMMUに後で到着する場合、IOMMUは、ページテーブルウォークを行い又はプリフェッチ即時コマンドを要求して、要求されたアドレストランスレーション情報を得ることができる。何らかの理由によりプリフェッチ即時コマンドを引き受けるのに不都合があり又は正当な時間でない場合には、プリフェッチ即時コマンドは無視されるのが安全である。
【0046】
プリフェッチ即時コマンドの選択的な引き受け/無視は、コマンドを引き受けるかどうかを決定する際に資源状態を考慮することによってIOMMUがシステム性能を最適化することを可能にする。アドレストランスレーション情報を取得してそれを挿入するためのハードウエアベースの基盤/メカニズムがIOMMUの実施形態に利用可能であり、プリフェッチ即時コマンドはハードウエア基盤の中でも最高の加速である。プリフェッチ即時コマンドはアドレストランスレーション情報をロードすることができ、あるいは当該コマンドは無視されてアドレストランスレーション情報をロードするのにハードウエアメカニズムが頼られてよい。
【0047】
プリフェッチ即時コマンドは、アドレストランスレーション情報をIOMMUに提供するために、IOMMUのページテーブルウォーカーに対する代替案を提供する。加えて、提供されたアドレストランスレーション情報をIOMMUのIOTLB内へロードすること及び/又は挿入することのために、種々の技術が実装され得る。ここに開示される実施形態は、IOMMUの既存の機能と連動して動作することができ、あるいはIOMMU機能をオーバーライドする(override)ことができる。
【0048】
1つの実施形態においては、提供されたアドレストランスレーション情報をIOMMUのIOTLB内へ、即ちIOMMUの内部アドレストランスレーションキャッシュ内へ挿入するために、IOMMUのネイティブキャッシュ置換アルゴリズム(native cache replacement algorithm)が用いられ得る。IOMMU_IOTLBトランスレーションキャッシュは、提供されたアドレストランスレーション情報をIOTLB内へロード/挿入するに際して、通常はこのようにして機能することになる。しかし、アドレストランスレーション情報を取得し且つ/又はこれをIOMMUのネイティブキャッシュ置換アルゴリズムに提供するために、IOMMU全体がページウォーク機能を必要とするわけではない。
【0049】
従って、IOMMUのネイティブキャッシュ置換アルゴリズムは、退去をもたらし得る状況、例えば提供されたアドレストランスレーション情報を記憶するためにIOTLB内に空きスロットが無い状況を取り扱うことができる。例えば、IOTLBの通常動作は、IOTLB内に既にキャッシュされたアドレストランスレーション情報が使用され又は要求される前であっても、その既にキャッシュされたアドレストランスレーション情報が他の提供されたアドレストランスレーション情報によって退去させられる(置換される)ことを可能にする。
【0050】
別の実施形態においては、プリフェッチ即時コマンドは、IOMMU_IOTLBトランスレーションキャッシュ内の特定のスロット内へ情報をロードすることをIOMMUに指示するその情報を含むことができる。この情報のローディングは、当該プリフェッチ即時コマンドのためのIOMMUトランスレーションキャッシュ置換ハードウエア及び/又はアルゴリズムをオーバーライドし又は置換する。IOTLBの通常動作は次いで、トランスレーション情報が使用される前にそれが退去させられる(置換される)ことを可能にする。システムはIOMMUに指示することができるので、システムは、IOMMUトランスレーションキャッシュ置換ハードウエア及び/又はアルゴリズムの仕様からは解放されている。
【0051】
更に別の実施形態においては、IOTLB構造は、例えばシステムソフトウエアが直接的に内容を操作することができるMMIOスペース内に直接的にさらされており、あるいはアドレス/データレジスタ対を介して間接的にMMIOスペース内にさらされている。
【0052】
図6は実施形態に従いサイドTLB632を含むIOMMU602の別の実施形態を示すブロック図である。IOMMU602は、仮想アドレス616、物理アドレス618及びページテーブルウォーカー614に関連付けられている。サイドTLB632はIOTLB612から切り離されている。IOMMU602は、提供されたアドレストランスレーション情報を特別の「サイド」トランスレーションルックアサイドバッファ(サイドTLB632)内へ挿入することができる。サイドTLB632は、システムソフトウエアによって管理されてよく、そして頻繁に使用されるトランスレーションを含むことができる。サイドTLB632を用いて、頻繁に使用されるトランスレーションをIOTLB612とは別にしておくことによって、頻繁に使用されるトランスレーションがIOTLB612内のスロットに対する他のアドレストランスレーションと競合することを回避することができる。TLB632内にキャッシュされている頻繁に使用されるトランスレーションは、IOTLB612上で実行されるIOMMU602の通常のトランスレーションキャッシュ動作によっては退去させられないであろうから、サイドTLB632を「スティッキー(sticky)」にして、アドレストランスレーション情報を記憶するために常時利用可能にする。例えば、TLBキャッシュのエントリ内に記憶されるアドレストランスレーション情報を必要とするデバイス直接メモリアクセス(DMA)動作は、IOMMUによるページウォークによって遅滞なく迅速にトランスレートされるであろう。
【0053】
図7は実施形態に従いIOTLB712及びサイドTLB732を含むIOMMU702を伴うシステム700を示すブロック図である。システム700は、CPU706、CPU_MMU708及びシステムメモリ704を含む。システムメモリ704は、ページテーブル720、コマンドキュー724及びイベントログバッファ728を含む。システム700においては、仮想アドレス716を含む周辺機器710からの要求は、IOMMU702に到着する。IOMMU702は、物理アドレス718に関連付けられ且つ仮想アドレス716に対応するアドレストランスレーション情報がIOMMU702でIOTLB712及び/又はサイドTLB732内にキャッシュされるかどうかを決定する。当該情報がIOMMU702で利用可能でなく且つ主システムメモリ704のページテーブル720から利用可能である場合には、IOTLBミスとなる(当該情報が利用可能ではないページフォールトとは区別される)。ページテーブルウォーカー714は、システムメモリ704のページテーブル720にアクセスしてIOMMU702で要求をサーブするのに必要なアドレストランスレーション情報を取得しそして提供するために利用可能である。加えて、システム700は、ページテーブルウォーカー714がページテーブルウォークを行うのを待つことなしに、コマンドキュー724を用いてプリフェッチ即時コマンド726を実行し、サイドTLB732及びIOTLB712に対してアドレストランスレーション情報722を提供することができる。
【0054】
IOMMU702は、プリフェッチ即時コマンド726に関連付けられる記憶装置(キャッシュ;例えばIOTLB712及びサイドTLB732)のサイズ及び機能に関する情報を、システムソフトウエアが記憶装置キャッシュの使用を最適化し得るよう、システムソフトウエア及び/又はシステム700に提供するように構成され得る。提供される情報は、例えば、エントリの数及び種類並びにそれらのキャッシュとしての組織化を含み得る。従ってシステム700は、IOMMU702の記憶装置キャッシュ資源をグローバルシステムレベルで知的に管理することができる。
【0055】
図8は実施形態に従いIOTLB812を含むIOMMU802を伴うシステム800を示すブロック図である。システム800はシステムメモリ804及びCPU_MMU808を含む。システムメモリ804は、ページテーブル820、コマンドキュー824及びイベントログバッファ828を含む。図8の実施形態においては、IOMMU802はページテーブルウォーカーを含まないので、電力及びチップ面積を節約することができる。仮想アドレス816を含む周辺装置810からの要求は、IOMMU802に到着する。IOMMU802は、仮想アドレス816及び物理アドレス818に関連付けられるアドレストランスレーション情報がIOMMU802で周辺装置810からのトランスレーション要求をサーブするために利用可能であるかどうかを決定する。アドレストランスレーション情報がIOMMU802でキャッシュされていない場合(例えばIOTLBミスの場合)には、IOMMU802は、イベントログバッファ828で新たなIOMMUイベントログを作成する。イベントログエントリは、トランスレーション情報がIOMMU802によって要求されている旨の信号を主CPU806へ送る。主CPU806は、プリフェッチ即時コマンド826を用いてアドレストランスレーション情報822をIOTLB812内へ挿入することができ、またイベントをトリガーした周辺機器810のIO動作をレジュームする(resume)ことができる。IOTLBミスの蓋然性を更に低減し又は排除するために、IOMMU802キャッシュの実装決定及び使用パターンに応じて、サイドTLB(図8には図示せず;例えば図7を参照)がIOMMU802内に含まれていてよい。
【0056】
プリフェッチ即時コマンドは、ドメイン情報(デバイステーブルエントリ内容)をIOMMUキャッシュ構造内に投入するために、ドメイン情報を含むことができる。代替的には、ドメイン情報を投入することは、種々の実装仕様に応じて、別個のコマンドとして実装され得る。
【0057】
図9はI/O動作からの要求をサービスするための例示的な方法960を示すフローチャートである。ステップ980では、アドレストランスレーション情報を要求しているI/O動作からの要求が受け取られる。ステップ982では、要求に関連付けられるアドレストランスレーション情報が既にIOMMUのIOTLB内に記憶されているかどうかが決定される。アドレストランスレーション情報が既に記憶されている場合には、方法はステップ984へ進み、要求されているアドレストランスレーション情報が提供される。ステップ982においてアドレストランスレーション情報がまだ記憶されていない場合には、方法は986へ進み、IOMMUイベントログエントリが作成されて、アドレストランスレーション情報が要求されている旨の信号が送られる。ステップ990では、要求されたアドレストランスレーション情報が、プリフェッチ即時コマンドを用いて、IOMMUイベントログエントリに応答して1つ以上のIOMMUキャッシュ内へ挿入される。ステップ992では、アドレストランスレーション情報を要求しているI/O動作がレジュームされる。
【0058】
図10はIOMMUイベントログエントリ1030を含むイベントログバッファ1028を伴うシステム1000を示すブロック図である。図示される実施形態はIOMMU1002内にページテーブルウォーカーを含まないので、電力及びチップ面積を節約することができる。システム1000はCPU_MMU1008及びシステムメモリ1004を含む。システムメモリ1004は、ページテーブル1020、コマンドキュー1024及びイベントログバッファ1028を含む。システム1000においては、周辺機器1010からの要求はIOMMU1002に到着する。IOMMU1002は、周辺機器1010からのトランスレーション要求をサービスするためにアドレストランスレーション情報がIOMMU1002で利用可能であるかどうかを決定する。アドレストランスレーション情報がIOMMU1002でキャッシュされていない場合(例えばIOTLBミスの場合)には、新たなIOMMUイベントログエントリ1030がイベントログバッファ1028で作成される。IOMMUエントリ1030は、トランスレーション情報がIOMMU1002によって要求されている旨の信号をCPU1006へ送る。主CPU1006は、プリフェッチ即時コマンド1026を用いてアドレストランスレーション情報1022をIOTLB1012に提供する。トランスレーション情報1022は、プリフェッチ即時コマンド1026をシステムメモリ1004のコマンドキュー1024内へ投入することによって提供される。IOMMU1002はコマンドキュー1024からプリフェッチ即時コマンド1026をフェッチし、そしてプリフェッチ即時コマンド1026を実行する。提供されたアドレストランスレーション情報1022は次いで、上述した種々の充填ポリシーを用いてIOTLB1012内へ挿入され得る。
【0059】
例えばプリフェッチ即時コマンド1026は、IOTLB1012の特定のスロットを含むことができ又はIOTLB1012の特定のロケーションに関する他の情報を含むことができる。代替的には、提供されたアドレストランスレーション情報1022をIOTLB1012内へ挿入するために、IOMMUのネイティブキャッシュ置換アルゴリズムを用いることができる。IOTLBミスの蓋然性を更に低減し又は排除するために、IOMMU1002キャッシュの実装決定及び使用パターンに応じて、サイドTLB(図示せず)がIOMMU1002内に含まれていてよい。
【0060】
アドレストランスレーション情報は、種々の理由で無効にされ且つ/又はIOMMUの単一若しくは複数のトランスレーションキャッシュから除去され得る。例えば、IOMMU内にキャッシュされるアドレストランスレーション情報は、システムメモリのページテーブル内に記憶されるアドレストランスレーション情報にもはや対応していないであろう。
【0061】
ある実施形態においては、ネイティブIOMMU検索アルゴリズムを用いてIOMMUがその単一又は複数の内部アドレストランスレーションキャッシュを検索し、任意の特定の無効化する単一又は複数のエントリを見つけ出すように、INVALIDATE_IOMMU_PAGESコマンドが、無効化するアドレストランスレーション情報又は特定のアドレスを指定するために用いられ得る。
【0062】
別の実施形態においては、INVALIDATE_IOMMU_PAGESコマンドが、無効化するアドレスの代わりに無効化するIOMMUの特定のスロットを表示することができる。当該コマンドはINVALIDATE_IOMMU_PAGESコマンドの変形として構成することができ、あるいは当該コマンドは新たなコマンドとして構成することができる。
【0063】
別の実施形態においては、無効化は、プリフェッチ即時コマンドを発行することによって達成され得る。プリフェッチ即時コマンドは、占有されているアドレストランスレーションスロットを特定することができ、また占有されているアドレストランスレーションスロットに含まれる情報が上書きされるべきであることを指定することができる。例えば、プリフェッチ即時コマンドは無効化ビットを含むことができる。無効化ビットが表示されている場合、IOMMUは、プリフェッチ即時コマンドに従うこと及び既存のアドレストランスレーション情報に上書きすることを指示される。従って無効化ビットは、IOMMUがプリフェッチ即時コマンドを選択的に無視し得るかどうかを制御することができる。
【0064】
例えばシステムソフトウエアが内容を直接的に操作し得るMMIOスペースにIOTLB構造が直接的にさらされている更に別の実施形態においては、無効化は直接アクセス方法を用いて達成され得る。この実施形態においては、システムソフトウエアは、MMIOスペースを介してIOTLBを操作することによってシステムソフトウエアがエントリをテーブル内に挿入したのと同じやり方でエントリを無効化することができる。
【0065】
例えば主x86プロセッサ上で実行中のシステムソフトウエアがこれらの新たなコマンドによって増強されるが、導き出される利益は、それら利益を達成するために容易に変化させられ得るソフトウエアにおいて実装され得る。システムソフトウエアは、無修正のハードウエアメカニズムがローカルレベルで達成し得る又は予想され得るよりも洗練された、適切な、適合性のある、及び効率的な置換技術を実装することが可能である。幾つかのシステム制約に対して、典型的には性能敏感なシステムに対して、ソフトウエアコマンド及びここに説明される関連する構造を補完するために、ハードウエアページテーブルウォーカーを伴う完全IOMMUが実装され得る。
【0066】
図11はIOMMU1102とIOTLBを伴う周辺機器1111とを含むシステム1100を示すブロック図である。システム1100は、システムメモリ1104、CPU1106及びCPU_MMU1108を含む。幾つかの周辺機器は、周辺機器内でIOTLBを用いるであろう。周辺機器のIOTLBは、IOMMU1102のIOTLBの論理的拡張として機能することができる。IOTLB1111を伴う周辺機器は、IOMMU1102を利用して、トランスレーション情報を取得すると共にそれを戻すためにページテーブルウォークを行うことができる(例えばPCI−SIG_ATSアドレストランスレーションサービス(PCI-SIG ATS Address Translation Services))。ここに説明されるプリフェッチ即時コマンド並びに他の関連するコマンド及び構造は、従って、IOTLB1111を伴う周辺機器を含むそのようなシステムに適合する。
【0067】
そのようなシステムにおいてIOTLB1111を伴う周辺機器は、それらのIOTLBをポピュレートする(populate)するために、PCI−SIG_ATSプロトコルを用い続ことができる。そのようなシステムにおいてIOTLBを伴う周辺機器はまた、それらのIOTLBをポピュレートするために、ここに説明される実施形態を採用することができる。システムソフトウエアは、IOMMUと周辺機器のIOTLBとの両方をポピュレートすることができ、そしてプロトコル及びソフトウエアは、効率性のために互換性があってよい。ある実施形態においては、IOMMUはATSプロトコルをサポートする必要はなくてよく、設計を簡素化し且つシリコン面積及び電力要求を低減することができる。
【0068】
図12はIOTLB1212、ページテーブルウォーカー1214、割り込み再マッピングバッファ1234及びデバイステーブルエントリバッファ1236を含むIOMMU1202の更なる実施形態を示すブロック図である。IOMMU1202は、仮想アドレス1216と物理アドレス1218の間でトランスレーションする際のアドレストランスレーションと同様に機能するが割り込みに適用される割り込み再マッピングと称される特徴を提供する。ここに説明される技術及び実施形態は、従って、割り込み再マッピングに用いられ得る。アドレストランスレーションの代わりに割り込み再マッピング情報を伝えるために、新たなコマンド又は既存のコマンドの変形が実装され得る。同様に、割り込み再マッピング情報の無効化のために、新たな又は変形されたコマンドが実装され得る。アドレストランスレーション及び割り込み再マッピングは、対応するテーブルが別々であり且つ独立していることを理由として、IOMMUデバイステーブルエントリバッファ1236によって独立して相互に関連付けられ得る。従って、IOMMU1202は、強化されたアドレストランスレーション及び割り込み再マッピングを行うことができる。
【0069】
結論
ここに説明される実施形態は、IOMMU実装(製品)の製品化までの時間を改善することができ、新たなIOMMUハードウエアを開発し、試験し及びサポートするのに要求される努力を低減することができ、そしてソフトウエアがグローバル的に最適なポリシー決定を行ってそれが適用可能なハードウエアによるローカル的に最適なポリシー決定を改善するのを可能にするメカニズムを提供することができる。実施形態はまた、サイドTLBを利用してソフトウエア管理の「迅速パス(quick path)」トランスレーション特徴を可能にする。IOメモリ管理ユニットの機能がより効率的に実装され得る(より少ないシリコン面積)し、またIOはそのようなシステムでより高速に動作することができる。提案される強化の有無にかかわらず、多重IOMMUが互換性の理由からシステム内に共存することができ、即ち新旧チップ設計がシステム設計において混在し得る。幾つかの実施形態はページウォーカーハードウエアを必要としないので、この場合におけるIOMMUは小型化が可能でありまたより小さなFPGAを取り付けることができる。実施形態は、IOMMUが特定のページテーブルのフォーマットをハードウエア配線することを必要としないので、実施形態は種々のページテーブルフォーマット(例えば非x86プロセッサ及びフォーマットを伴う)と協働することができる。
【0070】
本発明の側面を実施する論理によって実行される命令は、C及びC++等の種々のプログラミング言語、アセンブリ言語、並びに/又はハードウエア記述言語(HLD)においてコード化されてよく、また論理又は他のデバイスによって実行され得るオブジェクトコードへとコンパイルされてよい。
【0071】
上述の実施形態は、ベリログ(Verilog)、RTL、ネットリスツ(netlists)等のハードウエア記述言語において記述されてよく、またこれらの記述は、ここに説明されるような本発明の側面を具現化する1つ以上のハードウエアデバイスを作り出すマスクワーク/フォトマスクの生成を通じて製造プロセスを最終的に構成するために用いられ得る。
【0072】
本発明の側面は、全体又は一部においてコンピュータ可読媒体に記憶され得る。コンピュータ可読媒体に記憶される命令は、本発明の実施形態の全部又は一部を行うようにプロセッサを適合させることができる。
【0073】
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の1つ以上であるが全てではない例示的な実施形態を記述しているはずであり、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【技術分野】
【0001】
本発明は概してコンピュータシステムに関し、より特定的には入力/出力メモリ管理ユニット(IOMMU)に関する。
【背景技術】
【0002】
メモリ管理ユニット(MMU)は中央処理ユニット(CPU)に関連付けられ得る。例えばCPU_MMUは、CPUによって用いられる仮想アドレスをシステムメモリに対応する物理アドレスへとトランスレートするように構成され、そしてCPU_MMUはアクセス(存在、読み出し、書き込み等)を認証して、CPUに関連付けられるメモリオーバーコミット、リロケーション及び保護を可能にする。
【0003】
x86_CPUに関連しているシステムにおいては、比較的最近、入力/出力周辺機器に関連付けられる入力/出力(IO)MMUが定義されるようになってきた。入力/出力メモリ管理ユニット(IOMMU)は、例えば周辺機器によって使用される仮想アドレスに関連付けられる周辺機器要求に応答してシステムメモリからトランスレーション情報をリトリーブして(retrieve)、その仮想アドレスをシステムメモリの対応物理アドレスへとトランスレートする。
【0004】
IOMMUは、典型的には、主システムメモリの内容を調べて必要なトランスレーション情報を探し出す(ページテーブルウォークを行う)ページテーブルウォーカー論理(page-table walker logic)を含み得る。例えば、IOMMU内にキャッシュされていない情報を周辺機器が要求する場合(即ち「ミス」)、システムメモリから情報を得るためにテーブルウォーカーが用いられる。しかし、ページテーブルウォーカーは実装するのに複雑であるので、IOMMUのチップ又はチップ部品のシリコン面積及び電力消費を増大させる可能性がある。IOMMUは、IOMMUハードウエアが利用可能な限定された情報に基づきローカル的に最適化されるようにページテーブルウォーカーを実装する(例えば最長時間未使用(least-recently-used)(LRU)アルゴリズムに基づきIOMMU内にキャッシュされる情報に影響する)。ハードウエアのみ実装(hardware-only implementations)のそのような例は、過剰なトランスレーションフェッチ(fetches)(「ページテーブルウォーク(page-table walks)」)及び過剰なトランスレーションミスを潜在的に引き起こし、IOサブシステムの性能を低下させまたメモリ待ち時間の増大をもたらす可能性がある。
【0005】
加えて、IOMMUは典型的には、特定のアーキテクチャに付随するページテーブルエントリのフォーマットに基づき情報を読み出し且つ構文解析するように構成され、ページテーブルフォーマットをハードウエア設計に委ねる特定のページテーブルアーキテクチャに、つまりは特定の適合可能なプロセッサ実装に、IOMMUを限定している。
【0006】
ソフトウエア設計/管理の(software architected/managed)トランスレーションルックアサイドバッファ(translation look-aside buffer)(TLB)キャッシュもまた知られている。ソフトウエアがTLBを管理し、そして任意のページテーブルウォークはソフトウエアにおいて行われる。ソフトウエアはエントリをTLB内へロードするが、ハードウエア基盤がソフトウエア設計のTLBを支援することはない。また、ソフトウエア設計のTLBは、ローディング及び/又は無効化に際して柔軟性を有していない、つまりエントリがTLB内へロードされるときに、ローダ(loader)は先行するエントリを置換する影響を有する。
【発明の概要】
【発明が解決しようとする課題】
【0007】
幾つかのIO制御器又は周辺機器は、オペレーティングシステム又はハイパーバイザ(hypervisor)におけるデバイスドライバソフトウエアによって管理される単純なMMUを含む。例えば典型的なグラフィクス制御器は、グラフィクスカード上の「ローカルMMU」を含む。このような場合、「ローカルMMU」マッピングハードウエアは、洗練されたアルゴリズムを用いるシステムソフトウエアによって制御されるが、各MMUは固有のものであり且つ固有のドライバを必要とする。周辺機器ハードウエアに対する変更点はドライバに対する変更を必要とし、開発コストを跳ね上げると共に開発スケジュールを長期化させ、最終的には製品化までの時間を遅らせる。このことはまた、仮想化されたシステムにおけるハイパーバイザのための一般的なドライバを製造供給元が作成することができず、従って特定のドライバがハイパーバイザ内に含まれている必要があることを意味し、ハイパーバイザの選択は、システム内に存在する的確なIO周辺機器に依存することになる。これは、サポートされるオペレーティングシステムのためのドライバに加えてハイパーバイザのために更に別のドライバが作成され且つ試験される必要があることを意味し、開発コスト及び時間が更に跳ね上がる。
【0008】
IOMMU性能を改善し、且つソフトウエアがハイパーバイザのために一度作成されると共に周辺機器メモリマッピングアーキテクチャの多重実装に用いられることを可能にする手法が必要とされている。
【課題を解決するための手段】
【0009】
本発明の実施形態は、ページテーブルの構造及びフォーマットに依存しない改良されたトランスレーション挙動を伴うIOMMUのより小さくより単純なハードウエア実装を可能にする。実施形態はまた、デバイスに依存しない構造及び実装の方法を提供し、ソフトウエアのより大きな一般性を可能にする(より少ない特定のソフトウエアバージョンは同時に開発コストを低減する)。
【0010】
1つの実施形態は、システムの入力/出力(I/O)メモリ管理ユニット(IOMMU)でプリフェッチ即時コマンドを受け取ることを含む方法に関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。方法は更に、少なくとも資源状態に基づいてアドレストランスレーション情報をIOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)内へと選択的に記憶することを含む。
【0011】
別の実施形態は、プリフェッチ即時コマンドを受け取るように構成される入力/出力(I/O)メモリ管理ユニット(IOMMU)を含むシステムに関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。IOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)は、少なくとも資源状態に基づいてアドレストランスレーション情報を選択的に記憶するように構成される。
【0012】
更に別の実施形態は、システムの入力/出力(I/O)メモリ管理ユニット(IOMMU)でプリフェッチ即時コマンドを受け取ることを含む方法を、コンピューティングデバイスによって実行される場合にコンピューティングデバイスに行わせるコンピュータ実行可能命令が記憶された有形的コンピュータ可読媒体に関連している。プリフェッチ即時コマンドは、(i)仮想アドレス、及び(ii)仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含むアドレストランスレーション情報を指定する。方法は更に、少なくとも資源状態に基づいてアドレストランスレーション情報をIOMMUに関連付けられるI/Oトランスレーションルックアサイドバッファ(IOTLB)内へと選択的に記憶することを含む。
【0013】
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。ここに含まれる教示に基き追加的な実施形態が関連分野を含めた当業者にとって明らかであろう。
【図面の簡単な説明】
【0014】
ここに組み込まれ且つ出願書類の一部をなす添付の図面は実施形態を示し、そして上述の一般的な説明及び下記の実施形態の詳細な説明と共に、本発明の実施形態の原理を説明することに役立つ。
【0015】
【図1】図1はある実施形態に従いIOMMUを含むシステムを示すブロック図である。
【0016】
【図2】図2は別の実施形態に従うIOMMUを示すブロック図である。
【0017】
【図3】図3は別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0018】
【図4】図4は別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0019】
【図5】図5は別の実施形態に従いアドレストランスレーション情報を選択的に記憶するための方法を示すフロー図である。
【0020】
【図6】図6は別の実施形態に従うIOMMUを示すブロック図である。
【0021】
【図7】図7は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0022】
【図8】図8は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0023】
【図9】図9は更に別の実施形態に従いアドレストランスレーションデータに対する要求をサービスするための方法を示すフロー図である。
【0024】
【図10】図10は更に別の実施形態に従いシステムメモリと相互作用するIOMMUを含むシステムを示すブロック図である。
【0025】
【図11】図11は更に別の実施形態に従いIOMMUとIOTLBを伴う周辺機器とを含むシステムを示すブロック図である。
【0026】
【図12】図12は更に別の実施形態に従い割り込み再マッピングバッファ及びデバイステーブルエントリバッファを含むシステムを示すブロック図である。
【発明を実施するための形態】
【0027】
本発明の実施形態は、メモリ管理ユニット及びその応用を提供する。以下の詳細な説明において、「1つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
【0028】
図1はCPU106とCPU106に関連付けられるCPU_MMU108とを含むシステム100を示すブロック図である。システム100は、周辺機器110に関連付けられるIOMMU102を更に含む。ここには図示されていないが、システム100においては、多重のCPU_MMU108が考慮されるのと同時に多重のIOMMUが考慮される(例えば多重プロセッサシステム)。
【0029】
IOMMU102は、一連の定義された機能及び挙動に従って動作する。これらの機能及び挙動は、システムメモリ104内にキューされ(queued)且つIOMMU102によって読み出されてIOMMU102によって実行/使用される一連のコマンドに関連付けられている。
【0030】
IOMMU102は、周辺機器110とシステムメモリ104の間で仮想/物理アドレスをトランスレートし、そして割り込み再マッピングを行う。割り込み再マッピングは、再マッピング割り込みに対応するアドレスをトランスレートするという点において、アドレストランスレーションと同様に機能する。IOMMU102のトランスレーション/再マッピング速度を向上させるために、システムメモリ104内に記憶されるアドレストランスレーション/割り込み再マッピング情報がIOMMU102内にキャッシュされ得る。この処理は、IOMMU102がトランスレーション又は再マッピング情報にアクセスし得る速度を高める。
【0031】
図2は図1のIOMMU102を示す更に詳細なブロック図である。IOMMU202は、主システムメモリ104(図1参照)の内容を調べるように構成されるページテーブルウォーカー214を含む。ページテーブルウォーカー214はまた、IOMMU102内での記憶/キャッシングのための情報の配置及びリトリーバル(retrieval)を容易にする。ページテーブルウォーカー214は、トランスレーションルックアサイドバッファ(TLB)212と称されるキャッシュ内へとトランスレーション情報を挿入することができ、TLB212は入力/出力TLB(IOTLB)212としても知られる。IOTLB212は、仮想アドレス216と物理アドレス218の間でのアドレストランスレーションに用いられ得る。同様のキャッシング構造が割り込み再マッピングに対しても用いられ得る。
【0032】
IOMMU102は、キャッシュされるべき情報の充填とIOMMU102及び/又はIOTLB212内にキャッシュされるトランスレーション/再マッピング情報の無効化又はフラッシング(flushing)とを制御するシステムメモリ104からのコマンドを読み出す。IOMMU102は更に、周辺機器110からの情報に対する要求に応答してシステムメモリ104からのトランスレーション/再マッピング情報を自動的にロードすることが可能である。例えばIOMMU102は、ハードウエアのページテーブルウォーカー214を実装して、ページテーブルウォークを行うと共にシステムメモリ104のページテーブルから物理アドレス218をリトリーブする(retrieve)ことができる。トランスレートされるべき仮想アドレス216がIOTLB212内にキャッシュされていない場合に、ページテーブルウォークは、仮想アドレス216を含む周辺機器110からの要求に応答することができる。
【0033】
IOTLB212内のアドレストランスレーション/再マッピング情報は、ハードウエア及び/又はソフトウエアにより種々の方法(トランスレーションバッファポリシーとも称される)において維持され且つ更新され得る。例えば、CPU106上のシステムソフトウエアは、システムメモリ104内に記憶される対応する情報が変化していることを理由としてもはや有効ではないIOMMU102内にキャッシュされている情報を無効化することができる。IOMMU102はまた、IOMMU102内にキャッシュされるトランスレーションエントリのキャッシング及び退去を主としてハードウエアが決定するように、トランスレーションバッファポリシーをハードウエアにおいて実装することもできる。キャッシュされたトランスレーションエントリが退去させられると、新たな情報のための場所を空けることができる。キャッシュされたトランスレーションエントリは、それがもはや有効ではなくなったときにフラッシュされる(flushed)必要がある。これらの及び他の技術は、IOTLB212内の情報が置換されることになる場合又はもはや有効ではなくなった場合にこれを処理するために適用され得る。
【0034】
IOMMU102は、システムメモリ104からの情報を、その情報に対する要求を周辺機器110から受け取るのに先立ちプリフェッチする(prefetch)ことができる。プリフェッチコマンドは、例えば、「IOMMUにおけるトランスレーションデータプリフェッチ(Translation Data Prefetch in an IOMMU)」の表題で2008年4月30日に出願された米国特許出願第12/112,611号に開示されるように実装することができ、その内容はその全部を参照としてここに組み込まれる。プリフェッチコマンドは、システムメモリ104のページテーブルをウォークすること及び例えば指定された(デバイス仮想)アドレスに関連付けられるトランスレーション情報をプリロードする(preload)ことをIOMMU102に指示することができる。従って、プリロードされたトランスレーション情報は、要求がIOMMU102内に入ってきたときにIOTLB212において利用可能である。
【0035】
図3はIOMMU302及びシステムメモリ304を含むシステム300を示すブロック図である。システム300はページテーブル320及びイベントログバッファ328を更に含む。アドレストランスレーション情報322はページテーブル320内でアクセス可能である。IOMMUエントリ330はイベントログバッファ328内でアクセス可能である。システム300はCPU306及びCPU_MMU308を追加的に含む。
【0036】
単一又は複数のIOMMUキャッシュを充填することに関して、IOMMU302は、システムメモリ304のページテーブル320内に記憶されるアドレストランスレーション情報322にアクセスしてこれをキャッシュする。図示されるように、IOMMU302のページテーブルウォーカー314は、ページテーブルウォークを行ってアドレストランスレーション情報322をリトリーブする。アドレストランスレーション情報322は、次いでIOTLB312内にキャッシュされる。アドレストランスレーション情報322に対して周辺機器310からの後続の要求がIOMMU302に到着すると、アドレストランスレーション情報322はIOTLB312において利用可能となり、ページテーブルウォークは不要になる。IOTLB312でもはや利用可能でないアドレストランスレーション情報322に対する要求がIOMMU302に到着すると、ページテーブル320からのアドレストランスレーション情報322を得るために、次のページテーブルウォークが行われ得る。代替的には、システム300は、プリフェッチ即時コマンド(prefetch immediate command)326を利用してIOTLB312の内容を更新することができる。
【0037】
IOMMU302は、システムメモリ304のコマンドキュー324内に記憶されるコマンドを読み出して使うことができる。これにより、IOMMU302は、その単一又は複数のキャッシュを、コマンドにおいて渡された情報を用いて充填することができる。充填ポリシーに加えて、IOMMU302によって読み出されたコマンドは、実際上、IOTLB312内にキャッシュされた情報をソフトウエアが無効化し又は更新することを可能にする。例えば、無効化は、アドレストランスレーション情報322が変化し、IOTLB312内の先にキャッシュされたアドレストランスレーション情報が、変化したアドレストランスレーション情報322にもはや対応しなくなったときの状態と関連付けられ得る。
【0038】
IOMMU302によってコマンドキュー324から読み出されたコマンドは、IOMMU302の機能を更に拡大することができる。プリフェッチ即時コマンド326は、プリフェッチ即時コマンド326の本体(body)内にアドレストランスレーション情報322を含むことができる。IOMMU302は次いで、プリフェッチ即時コマンド326を介してアドレストランスレーション情報322を受け取ることができる。従ってIOMMU302は、アドレストランスレーション情報322を得るためにページテーブルウォーカー314を用いてページテーブル320をウォークする必要はない。プリフェッチ即時コマンド326内の情報は、ページテーブルウォーキングをなんら行うことなしに、IOTLB312内へ直接的にロードされ得る。図示されるように、ページテーブルウォーカー314は、プリフェッチ即時コマンド326と連動してバックアップし且つ/又は動作するために利用可能である。
【0039】
プリフェッチ即時コマンド326は、IOMMUへの新たなコマンドとして又は上述したプリフェッチコマンドの変形として実装され得る。また、プリフェッチ即時コマンド326は、必要な情報をシステムソフトウエアが書き込む一連のMMIOレジスタとして実装されてもよい。
【0040】
図4は実施形態に従いプリフェッチ即時コマンド426を実装しているシステム400を示すブロック図である。システム400は、周辺機器410に関連付けられており、そしてCPU406、CPU_MMU408及びシステムメモリ404を含み得る。システムメモリ404は、ページテーブル420、コマンドキュー424及びイベントログバッファ428を含む。システムメモリ404はまた、IOページテーブル430に関連付けられていてもよい。アドレストランスレーション情報422はIOページテーブル430内に記憶され得る。IOページテーブル430の内部フォーマットは、ページテーブル420の内部フォーマットと同じである必要はない。プリフェッチ即時コマンド426は、アドレストランスレーション情報422をIOTLB412内へキャッシュする。アドレストランスレーション情報422は、仮想アドレス416及び物理アドレス418と関連付けられている。システム400は、コマンドキュー424及びプリフェッチ即時コマンド426を管理して、アドレストランスレーション情報422をプリフェッチ即時コマンド426による使用のために供することができる。従って、プリフェッチ即時コマンド426を用いてIOMMUと相互作用しているシステム400は、システム400がIOMMU402におけるデータのキャッシングに関連付けられるための柔軟性及び機会を導入する。
【0041】
加えて、システム400は、ページテーブルウォーカー414を用いる必要性なしに、アドレストランスレーション情報422のキャッシングをIOTLB412で達成することができる。従ってシステム400は、特定のハードウエア実装のページテーブルウォーカー414(用いられている場合における)とインタフェースするために特定のシステムドライバを含んでいる必要がない。しかし、プリフェッチ即時コマンド426は、妥当な場合、ハードウエアページテーブルウォーカー414と連動して全体の性能を改善するために動作可能であることが検討される。
【0042】
図5は実施形態に従いシステム状態に基づきアドレストランスレーション情報を選択的に記憶する例示的な方法560を示すフローチャートである。ステップ570において、IOMMUは、アドレストランスレーション情報を指定するプリフェッチ即時コマンドを受け取る。ステップ572では、例えばIOMMU又はシステムによってシステム状態がチェックされる。システム状態はシステムの資源状態を含むことができ、システムの資源状態は、システム資源の利用可能性、IOTLBにおける1つ以上の空きアドレスエントリの利用可能性、電力節約及び/若しくはスリープ状態、並びに/又は係属中システム要求を考慮したシステム資源の利用可能性、を含むことができる。資源状態はまた、プリフェッチ即時コマンドにおいて指定されるアドレストランスレーション情報に対応するIOTLB内に記憶される1つ以上の有効アドレスエントリの優先度、又はプリフェッチ即時コマンドにおいて指定される無効化表示、を含むこともできる。
【0043】
ステップ574では、システム状態に基づきプリフェッチ即時コマンドを無視するかどうかの決定がなされる。プリフェッチ即時コマンドを無視しないとの決定である場合には、方法はステップ576へ進み、アドレストランスレーション情報がIOMMUのIOTLBに記憶される。方法はステップ576からステップ578へ進む。ステップ574においてプリフェッチ即時コマンドを無視するとの決定である場合には、方法はステップ578へ進み、コマンドキュー内の次のIOMMUコマンドが処理される。
【0044】
プリフェッチ即時コマンドのためのコマンドフォーマットは、トランスレートされた物理アドレスと、指定された(デバイス仮想)アドレスに対する許可アクセス標識及びIOMMUドメイン情報を含む他の情報と、を含むことができる。コマンドフォーマットはまた、IOTLBスロット宛先を含んでいてもよい。
【0045】
IOMMUはプリフェッチ即時コマンドを選択的に無視することができる。例えば、IOMMUは、IOMMUキャッシュ内に存在しているエントリが上書きされるべきではないことと、アドレストランスレーションが挿入されるべき現在利用可能なIOMMUキャッシュエントリがないことと、を決定することができる。無視されたプリフェッチ即時コマンドに含まれてはいたが挿入されてはいなかったアドレストランスレーション情報に対して要求がIOMMUに後で到着する場合、IOMMUは、ページテーブルウォークを行い又はプリフェッチ即時コマンドを要求して、要求されたアドレストランスレーション情報を得ることができる。何らかの理由によりプリフェッチ即時コマンドを引き受けるのに不都合があり又は正当な時間でない場合には、プリフェッチ即時コマンドは無視されるのが安全である。
【0046】
プリフェッチ即時コマンドの選択的な引き受け/無視は、コマンドを引き受けるかどうかを決定する際に資源状態を考慮することによってIOMMUがシステム性能を最適化することを可能にする。アドレストランスレーション情報を取得してそれを挿入するためのハードウエアベースの基盤/メカニズムがIOMMUの実施形態に利用可能であり、プリフェッチ即時コマンドはハードウエア基盤の中でも最高の加速である。プリフェッチ即時コマンドはアドレストランスレーション情報をロードすることができ、あるいは当該コマンドは無視されてアドレストランスレーション情報をロードするのにハードウエアメカニズムが頼られてよい。
【0047】
プリフェッチ即時コマンドは、アドレストランスレーション情報をIOMMUに提供するために、IOMMUのページテーブルウォーカーに対する代替案を提供する。加えて、提供されたアドレストランスレーション情報をIOMMUのIOTLB内へロードすること及び/又は挿入することのために、種々の技術が実装され得る。ここに開示される実施形態は、IOMMUの既存の機能と連動して動作することができ、あるいはIOMMU機能をオーバーライドする(override)ことができる。
【0048】
1つの実施形態においては、提供されたアドレストランスレーション情報をIOMMUのIOTLB内へ、即ちIOMMUの内部アドレストランスレーションキャッシュ内へ挿入するために、IOMMUのネイティブキャッシュ置換アルゴリズム(native cache replacement algorithm)が用いられ得る。IOMMU_IOTLBトランスレーションキャッシュは、提供されたアドレストランスレーション情報をIOTLB内へロード/挿入するに際して、通常はこのようにして機能することになる。しかし、アドレストランスレーション情報を取得し且つ/又はこれをIOMMUのネイティブキャッシュ置換アルゴリズムに提供するために、IOMMU全体がページウォーク機能を必要とするわけではない。
【0049】
従って、IOMMUのネイティブキャッシュ置換アルゴリズムは、退去をもたらし得る状況、例えば提供されたアドレストランスレーション情報を記憶するためにIOTLB内に空きスロットが無い状況を取り扱うことができる。例えば、IOTLBの通常動作は、IOTLB内に既にキャッシュされたアドレストランスレーション情報が使用され又は要求される前であっても、その既にキャッシュされたアドレストランスレーション情報が他の提供されたアドレストランスレーション情報によって退去させられる(置換される)ことを可能にする。
【0050】
別の実施形態においては、プリフェッチ即時コマンドは、IOMMU_IOTLBトランスレーションキャッシュ内の特定のスロット内へ情報をロードすることをIOMMUに指示するその情報を含むことができる。この情報のローディングは、当該プリフェッチ即時コマンドのためのIOMMUトランスレーションキャッシュ置換ハードウエア及び/又はアルゴリズムをオーバーライドし又は置換する。IOTLBの通常動作は次いで、トランスレーション情報が使用される前にそれが退去させられる(置換される)ことを可能にする。システムはIOMMUに指示することができるので、システムは、IOMMUトランスレーションキャッシュ置換ハードウエア及び/又はアルゴリズムの仕様からは解放されている。
【0051】
更に別の実施形態においては、IOTLB構造は、例えばシステムソフトウエアが直接的に内容を操作することができるMMIOスペース内に直接的にさらされており、あるいはアドレス/データレジスタ対を介して間接的にMMIOスペース内にさらされている。
【0052】
図6は実施形態に従いサイドTLB632を含むIOMMU602の別の実施形態を示すブロック図である。IOMMU602は、仮想アドレス616、物理アドレス618及びページテーブルウォーカー614に関連付けられている。サイドTLB632はIOTLB612から切り離されている。IOMMU602は、提供されたアドレストランスレーション情報を特別の「サイド」トランスレーションルックアサイドバッファ(サイドTLB632)内へ挿入することができる。サイドTLB632は、システムソフトウエアによって管理されてよく、そして頻繁に使用されるトランスレーションを含むことができる。サイドTLB632を用いて、頻繁に使用されるトランスレーションをIOTLB612とは別にしておくことによって、頻繁に使用されるトランスレーションがIOTLB612内のスロットに対する他のアドレストランスレーションと競合することを回避することができる。TLB632内にキャッシュされている頻繁に使用されるトランスレーションは、IOTLB612上で実行されるIOMMU602の通常のトランスレーションキャッシュ動作によっては退去させられないであろうから、サイドTLB632を「スティッキー(sticky)」にして、アドレストランスレーション情報を記憶するために常時利用可能にする。例えば、TLBキャッシュのエントリ内に記憶されるアドレストランスレーション情報を必要とするデバイス直接メモリアクセス(DMA)動作は、IOMMUによるページウォークによって遅滞なく迅速にトランスレートされるであろう。
【0053】
図7は実施形態に従いIOTLB712及びサイドTLB732を含むIOMMU702を伴うシステム700を示すブロック図である。システム700は、CPU706、CPU_MMU708及びシステムメモリ704を含む。システムメモリ704は、ページテーブル720、コマンドキュー724及びイベントログバッファ728を含む。システム700においては、仮想アドレス716を含む周辺機器710からの要求は、IOMMU702に到着する。IOMMU702は、物理アドレス718に関連付けられ且つ仮想アドレス716に対応するアドレストランスレーション情報がIOMMU702でIOTLB712及び/又はサイドTLB732内にキャッシュされるかどうかを決定する。当該情報がIOMMU702で利用可能でなく且つ主システムメモリ704のページテーブル720から利用可能である場合には、IOTLBミスとなる(当該情報が利用可能ではないページフォールトとは区別される)。ページテーブルウォーカー714は、システムメモリ704のページテーブル720にアクセスしてIOMMU702で要求をサーブするのに必要なアドレストランスレーション情報を取得しそして提供するために利用可能である。加えて、システム700は、ページテーブルウォーカー714がページテーブルウォークを行うのを待つことなしに、コマンドキュー724を用いてプリフェッチ即時コマンド726を実行し、サイドTLB732及びIOTLB712に対してアドレストランスレーション情報722を提供することができる。
【0054】
IOMMU702は、プリフェッチ即時コマンド726に関連付けられる記憶装置(キャッシュ;例えばIOTLB712及びサイドTLB732)のサイズ及び機能に関する情報を、システムソフトウエアが記憶装置キャッシュの使用を最適化し得るよう、システムソフトウエア及び/又はシステム700に提供するように構成され得る。提供される情報は、例えば、エントリの数及び種類並びにそれらのキャッシュとしての組織化を含み得る。従ってシステム700は、IOMMU702の記憶装置キャッシュ資源をグローバルシステムレベルで知的に管理することができる。
【0055】
図8は実施形態に従いIOTLB812を含むIOMMU802を伴うシステム800を示すブロック図である。システム800はシステムメモリ804及びCPU_MMU808を含む。システムメモリ804は、ページテーブル820、コマンドキュー824及びイベントログバッファ828を含む。図8の実施形態においては、IOMMU802はページテーブルウォーカーを含まないので、電力及びチップ面積を節約することができる。仮想アドレス816を含む周辺装置810からの要求は、IOMMU802に到着する。IOMMU802は、仮想アドレス816及び物理アドレス818に関連付けられるアドレストランスレーション情報がIOMMU802で周辺装置810からのトランスレーション要求をサーブするために利用可能であるかどうかを決定する。アドレストランスレーション情報がIOMMU802でキャッシュされていない場合(例えばIOTLBミスの場合)には、IOMMU802は、イベントログバッファ828で新たなIOMMUイベントログを作成する。イベントログエントリは、トランスレーション情報がIOMMU802によって要求されている旨の信号を主CPU806へ送る。主CPU806は、プリフェッチ即時コマンド826を用いてアドレストランスレーション情報822をIOTLB812内へ挿入することができ、またイベントをトリガーした周辺機器810のIO動作をレジュームする(resume)ことができる。IOTLBミスの蓋然性を更に低減し又は排除するために、IOMMU802キャッシュの実装決定及び使用パターンに応じて、サイドTLB(図8には図示せず;例えば図7を参照)がIOMMU802内に含まれていてよい。
【0056】
プリフェッチ即時コマンドは、ドメイン情報(デバイステーブルエントリ内容)をIOMMUキャッシュ構造内に投入するために、ドメイン情報を含むことができる。代替的には、ドメイン情報を投入することは、種々の実装仕様に応じて、別個のコマンドとして実装され得る。
【0057】
図9はI/O動作からの要求をサービスするための例示的な方法960を示すフローチャートである。ステップ980では、アドレストランスレーション情報を要求しているI/O動作からの要求が受け取られる。ステップ982では、要求に関連付けられるアドレストランスレーション情報が既にIOMMUのIOTLB内に記憶されているかどうかが決定される。アドレストランスレーション情報が既に記憶されている場合には、方法はステップ984へ進み、要求されているアドレストランスレーション情報が提供される。ステップ982においてアドレストランスレーション情報がまだ記憶されていない場合には、方法は986へ進み、IOMMUイベントログエントリが作成されて、アドレストランスレーション情報が要求されている旨の信号が送られる。ステップ990では、要求されたアドレストランスレーション情報が、プリフェッチ即時コマンドを用いて、IOMMUイベントログエントリに応答して1つ以上のIOMMUキャッシュ内へ挿入される。ステップ992では、アドレストランスレーション情報を要求しているI/O動作がレジュームされる。
【0058】
図10はIOMMUイベントログエントリ1030を含むイベントログバッファ1028を伴うシステム1000を示すブロック図である。図示される実施形態はIOMMU1002内にページテーブルウォーカーを含まないので、電力及びチップ面積を節約することができる。システム1000はCPU_MMU1008及びシステムメモリ1004を含む。システムメモリ1004は、ページテーブル1020、コマンドキュー1024及びイベントログバッファ1028を含む。システム1000においては、周辺機器1010からの要求はIOMMU1002に到着する。IOMMU1002は、周辺機器1010からのトランスレーション要求をサービスするためにアドレストランスレーション情報がIOMMU1002で利用可能であるかどうかを決定する。アドレストランスレーション情報がIOMMU1002でキャッシュされていない場合(例えばIOTLBミスの場合)には、新たなIOMMUイベントログエントリ1030がイベントログバッファ1028で作成される。IOMMUエントリ1030は、トランスレーション情報がIOMMU1002によって要求されている旨の信号をCPU1006へ送る。主CPU1006は、プリフェッチ即時コマンド1026を用いてアドレストランスレーション情報1022をIOTLB1012に提供する。トランスレーション情報1022は、プリフェッチ即時コマンド1026をシステムメモリ1004のコマンドキュー1024内へ投入することによって提供される。IOMMU1002はコマンドキュー1024からプリフェッチ即時コマンド1026をフェッチし、そしてプリフェッチ即時コマンド1026を実行する。提供されたアドレストランスレーション情報1022は次いで、上述した種々の充填ポリシーを用いてIOTLB1012内へ挿入され得る。
【0059】
例えばプリフェッチ即時コマンド1026は、IOTLB1012の特定のスロットを含むことができ又はIOTLB1012の特定のロケーションに関する他の情報を含むことができる。代替的には、提供されたアドレストランスレーション情報1022をIOTLB1012内へ挿入するために、IOMMUのネイティブキャッシュ置換アルゴリズムを用いることができる。IOTLBミスの蓋然性を更に低減し又は排除するために、IOMMU1002キャッシュの実装決定及び使用パターンに応じて、サイドTLB(図示せず)がIOMMU1002内に含まれていてよい。
【0060】
アドレストランスレーション情報は、種々の理由で無効にされ且つ/又はIOMMUの単一若しくは複数のトランスレーションキャッシュから除去され得る。例えば、IOMMU内にキャッシュされるアドレストランスレーション情報は、システムメモリのページテーブル内に記憶されるアドレストランスレーション情報にもはや対応していないであろう。
【0061】
ある実施形態においては、ネイティブIOMMU検索アルゴリズムを用いてIOMMUがその単一又は複数の内部アドレストランスレーションキャッシュを検索し、任意の特定の無効化する単一又は複数のエントリを見つけ出すように、INVALIDATE_IOMMU_PAGESコマンドが、無効化するアドレストランスレーション情報又は特定のアドレスを指定するために用いられ得る。
【0062】
別の実施形態においては、INVALIDATE_IOMMU_PAGESコマンドが、無効化するアドレスの代わりに無効化するIOMMUの特定のスロットを表示することができる。当該コマンドはINVALIDATE_IOMMU_PAGESコマンドの変形として構成することができ、あるいは当該コマンドは新たなコマンドとして構成することができる。
【0063】
別の実施形態においては、無効化は、プリフェッチ即時コマンドを発行することによって達成され得る。プリフェッチ即時コマンドは、占有されているアドレストランスレーションスロットを特定することができ、また占有されているアドレストランスレーションスロットに含まれる情報が上書きされるべきであることを指定することができる。例えば、プリフェッチ即時コマンドは無効化ビットを含むことができる。無効化ビットが表示されている場合、IOMMUは、プリフェッチ即時コマンドに従うこと及び既存のアドレストランスレーション情報に上書きすることを指示される。従って無効化ビットは、IOMMUがプリフェッチ即時コマンドを選択的に無視し得るかどうかを制御することができる。
【0064】
例えばシステムソフトウエアが内容を直接的に操作し得るMMIOスペースにIOTLB構造が直接的にさらされている更に別の実施形態においては、無効化は直接アクセス方法を用いて達成され得る。この実施形態においては、システムソフトウエアは、MMIOスペースを介してIOTLBを操作することによってシステムソフトウエアがエントリをテーブル内に挿入したのと同じやり方でエントリを無効化することができる。
【0065】
例えば主x86プロセッサ上で実行中のシステムソフトウエアがこれらの新たなコマンドによって増強されるが、導き出される利益は、それら利益を達成するために容易に変化させられ得るソフトウエアにおいて実装され得る。システムソフトウエアは、無修正のハードウエアメカニズムがローカルレベルで達成し得る又は予想され得るよりも洗練された、適切な、適合性のある、及び効率的な置換技術を実装することが可能である。幾つかのシステム制約に対して、典型的には性能敏感なシステムに対して、ソフトウエアコマンド及びここに説明される関連する構造を補完するために、ハードウエアページテーブルウォーカーを伴う完全IOMMUが実装され得る。
【0066】
図11はIOMMU1102とIOTLBを伴う周辺機器1111とを含むシステム1100を示すブロック図である。システム1100は、システムメモリ1104、CPU1106及びCPU_MMU1108を含む。幾つかの周辺機器は、周辺機器内でIOTLBを用いるであろう。周辺機器のIOTLBは、IOMMU1102のIOTLBの論理的拡張として機能することができる。IOTLB1111を伴う周辺機器は、IOMMU1102を利用して、トランスレーション情報を取得すると共にそれを戻すためにページテーブルウォークを行うことができる(例えばPCI−SIG_ATSアドレストランスレーションサービス(PCI-SIG ATS Address Translation Services))。ここに説明されるプリフェッチ即時コマンド並びに他の関連するコマンド及び構造は、従って、IOTLB1111を伴う周辺機器を含むそのようなシステムに適合する。
【0067】
そのようなシステムにおいてIOTLB1111を伴う周辺機器は、それらのIOTLBをポピュレートする(populate)するために、PCI−SIG_ATSプロトコルを用い続ことができる。そのようなシステムにおいてIOTLBを伴う周辺機器はまた、それらのIOTLBをポピュレートするために、ここに説明される実施形態を採用することができる。システムソフトウエアは、IOMMUと周辺機器のIOTLBとの両方をポピュレートすることができ、そしてプロトコル及びソフトウエアは、効率性のために互換性があってよい。ある実施形態においては、IOMMUはATSプロトコルをサポートする必要はなくてよく、設計を簡素化し且つシリコン面積及び電力要求を低減することができる。
【0068】
図12はIOTLB1212、ページテーブルウォーカー1214、割り込み再マッピングバッファ1234及びデバイステーブルエントリバッファ1236を含むIOMMU1202の更なる実施形態を示すブロック図である。IOMMU1202は、仮想アドレス1216と物理アドレス1218の間でトランスレーションする際のアドレストランスレーションと同様に機能するが割り込みに適用される割り込み再マッピングと称される特徴を提供する。ここに説明される技術及び実施形態は、従って、割り込み再マッピングに用いられ得る。アドレストランスレーションの代わりに割り込み再マッピング情報を伝えるために、新たなコマンド又は既存のコマンドの変形が実装され得る。同様に、割り込み再マッピング情報の無効化のために、新たな又は変形されたコマンドが実装され得る。アドレストランスレーション及び割り込み再マッピングは、対応するテーブルが別々であり且つ独立していることを理由として、IOMMUデバイステーブルエントリバッファ1236によって独立して相互に関連付けられ得る。従って、IOMMU1202は、強化されたアドレストランスレーション及び割り込み再マッピングを行うことができる。
【0069】
結論
ここに説明される実施形態は、IOMMU実装(製品)の製品化までの時間を改善することができ、新たなIOMMUハードウエアを開発し、試験し及びサポートするのに要求される努力を低減することができ、そしてソフトウエアがグローバル的に最適なポリシー決定を行ってそれが適用可能なハードウエアによるローカル的に最適なポリシー決定を改善するのを可能にするメカニズムを提供することができる。実施形態はまた、サイドTLBを利用してソフトウエア管理の「迅速パス(quick path)」トランスレーション特徴を可能にする。IOメモリ管理ユニットの機能がより効率的に実装され得る(より少ないシリコン面積)し、またIOはそのようなシステムでより高速に動作することができる。提案される強化の有無にかかわらず、多重IOMMUが互換性の理由からシステム内に共存することができ、即ち新旧チップ設計がシステム設計において混在し得る。幾つかの実施形態はページウォーカーハードウエアを必要としないので、この場合におけるIOMMUは小型化が可能でありまたより小さなFPGAを取り付けることができる。実施形態は、IOMMUが特定のページテーブルのフォーマットをハードウエア配線することを必要としないので、実施形態は種々のページテーブルフォーマット(例えば非x86プロセッサ及びフォーマットを伴う)と協働することができる。
【0070】
本発明の側面を実施する論理によって実行される命令は、C及びC++等の種々のプログラミング言語、アセンブリ言語、並びに/又はハードウエア記述言語(HLD)においてコード化されてよく、また論理又は他のデバイスによって実行され得るオブジェクトコードへとコンパイルされてよい。
【0071】
上述の実施形態は、ベリログ(Verilog)、RTL、ネットリスツ(netlists)等のハードウエア記述言語において記述されてよく、またこれらの記述は、ここに説明されるような本発明の側面を具現化する1つ以上のハードウエアデバイスを作り出すマスクワーク/フォトマスクの生成を通じて製造プロセスを最終的に構成するために用いられ得る。
【0072】
本発明の側面は、全体又は一部においてコンピュータ可読媒体に記憶され得る。コンピュータ可読媒体に記憶される命令は、本発明の実施形態の全部又は一部を行うようにプロセッサを適合させることができる。
【0073】
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の1つ以上であるが全てではない例示的な実施形態を記述しているはずであり、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。
【特許請求の範囲】
【請求項1】
メモリ管理ユニットを含むコンピュータシステムの資源状態を決定することと、
決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶することと、を備える方法。
【請求項2】
前記アドレストランスレーション情報はプリフェッチ即時コマンド内に含まれる請求項1の方法。
【請求項3】
前記アドレストランスレーション情報は、(i)仮想アドレス、及び(ii)前記仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含む請求項1の方法。
【請求項4】
前記メモリ管理ユニットは入力/出力(I/O)メモリ管理ユニット(IOMMU)である請求項1の方法。
【請求項5】
前記キャッシュはI/Oトランスレーションルックアサイドバッファ(IOTLB)である請求項1の方法。
【請求項6】
前記キャッシュは前記IOTLBに関連付けられるトランスレーションキャッシュ動作から隔離されたサイドトランスレーションバッファを更に備える請求項5の方法。
【請求項7】
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答してイベントログエントリを作成することと、
当該要求されたアドレストランスレーション情報を前記イベントログエントリに応答して前記キャッシュ内へと挿入することと、を更に備える請求項1の方法。
【請求項8】
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答して、前記メモリ管理ユニットに関連付けられるページテーブルウォーカーを用いてページテーブルウォークを行うことと、
前記ページテーブルウォーカーを用いて前記コンピュータシステムのシステムメモリ内のトランスレーションテーブルから当該要求されたアドレストランスレーション情報を取得することと、
前記要求されたアドレストランスレーション情報を、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムを用いて前記キャッシュ内へと挿入することと、を更に備える請求項1の方法。
【請求項9】
前記アドレストランスレーション情報を前記キャッシュに関連付けられる1つ以上の指定されたスロット内へと挿入することにより、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムをバイパスすることを更に備える請求項1の方法。
【請求項10】
前記メモリ管理ユニットに関連付けられる無効化メカニズムを用いて、前記キャッシュに関連付けられるロケーションを無効化することを更に備え、
前記無効化することは、(i)1つ以上のアドレスエントリ、及び(ii)1つ以上のスロット、の少なくとも1つを指定する無効化コマンドに応答する請求項1の方法。
【請求項11】
指定されたアドレストランスレーション情報に関連付けられる既に記憶されたいかなるアドレストランスレーション情報にもかかわらず、無効化表示に応答して前記指定されたアドレストランスレーション情報を記憶することを更に備える請求項1の方法。
【請求項12】
少なくとも前記資源状態に基づいて割り込み再マッピング情報を前記メモリ管理ユニットに関連付けられる割り込み再マッピングバッファで選択的に記憶することを更に備える請求項1の方法。
【請求項13】
メモリ管理ユニットを備えるコンピュータシステムであって、
前記メモリ管理ユニットは、前記コンピュータシステムの資源状態を決定すると共に決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶するように構成されるコンピュータシステム。
【請求項14】
前記アドレストランスレーション情報はプリフェッチ即時コマンド内に含まれる請求項13のシステム。
【請求項15】
前記アドレストランスレーション情報は、(i)仮想アドレス、及び(ii)前記仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含む請求項13のシステム。
【請求項16】
前記メモリ管理ユニットは入力/出力(I/O)メモリ管理ユニット(IOMMU)である請求項13のシステム。
【請求項17】
前記キャッシュはI/Oトランスレーションルックアサイドバッファ(IOTLB)である請求項13のシステム。
【請求項18】
前記キャッシュは前記IOTLBに関連付けられるトランスレーションキャッシュ動作から隔離されたサイドトランスレーションバッファを更に備える請求項17のシステム。
【請求項19】
前記メモリ管理ユニットは、
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答してイベントログエントリを作成することと、
当該要求されたアドレストランスレーション情報を前記イベントログエントリに応答して前記キャッシュ内へと挿入することと、を行うように更に構成される請求項13のシステム。
【請求項20】
前記メモリ管理ユニットは、
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答して、前記メモリ管理ユニットに関連付けられるページテーブルウォーカーを用いてページテーブルウォークを行うことと、
前記ページテーブルウォーカーを用いて前記コンピュータシステムのシステムメモリ内のトランスレーションテーブルから当該要求されたアドレストランスレーション情報を取得することと、
前記要求されたアドレストランスレーション情報を、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムを用いて前記キャッシュ内へと挿入することと、を行うように更に構成される請求項13のシステム。
【請求項21】
前記メモリ管理ユニットは、
前記アドレストランスレーション情報を前記キャッシュに関連付けられる1つ以上の指定されたスロット内へと挿入することにより、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムをバイパスするように更に構成される請求項13のシステム。
【請求項22】
前記メモリ管理ユニットは、
(i)1つ以上のアドレスエントリ、及び(ii)1つ以上のスロット、の少なくとも1つを指定する無効化コマンドに応答して、前記メモリ管理ユニットに関連付けられる無効化メカニズムを用いて、前記キャッシュに関連付けられるロケーションを無効化するように更に構成される請求項13のシステム。
【請求項23】
前記メモリ管理ユニットは、
指定されたアドレストランスレーション情報に関連付けられる既に記憶されたいかなるアドレストランスレーション情報にもかかわらず、無効化表示に応答して前記指定されたアドレストランスレーション情報を記憶するように更に構成される請求項13のシステム。
【請求項24】
前記メモリ管理ユニットに関連付けられる割り込み再マッピングバッファであって、少なくとも前記資源状態に基づいて割り込み再マッピング情報を選択的に記憶するように構成される再マッピングバッファを更に備える請求項13のシステム。
【請求項25】
コンピュータ実行可能命令が記憶された有形的コンピュータ可読媒体であって、前記コンピュータ実行可能命令は、コンピューティングデバイスによって実行される場合に、
メモリ管理ユニットを含むコンピュータシステムの資源状態を決定することと、
決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶することと、を備える方法を前記コンピューティングデバイスに行わさせる有形的コンピュータ可読媒体。
【請求項1】
メモリ管理ユニットを含むコンピュータシステムの資源状態を決定することと、
決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶することと、を備える方法。
【請求項2】
前記アドレストランスレーション情報はプリフェッチ即時コマンド内に含まれる請求項1の方法。
【請求項3】
前記アドレストランスレーション情報は、(i)仮想アドレス、及び(ii)前記仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含む請求項1の方法。
【請求項4】
前記メモリ管理ユニットは入力/出力(I/O)メモリ管理ユニット(IOMMU)である請求項1の方法。
【請求項5】
前記キャッシュはI/Oトランスレーションルックアサイドバッファ(IOTLB)である請求項1の方法。
【請求項6】
前記キャッシュは前記IOTLBに関連付けられるトランスレーションキャッシュ動作から隔離されたサイドトランスレーションバッファを更に備える請求項5の方法。
【請求項7】
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答してイベントログエントリを作成することと、
当該要求されたアドレストランスレーション情報を前記イベントログエントリに応答して前記キャッシュ内へと挿入することと、を更に備える請求項1の方法。
【請求項8】
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答して、前記メモリ管理ユニットに関連付けられるページテーブルウォーカーを用いてページテーブルウォークを行うことと、
前記ページテーブルウォーカーを用いて前記コンピュータシステムのシステムメモリ内のトランスレーションテーブルから当該要求されたアドレストランスレーション情報を取得することと、
前記要求されたアドレストランスレーション情報を、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムを用いて前記キャッシュ内へと挿入することと、を更に備える請求項1の方法。
【請求項9】
前記アドレストランスレーション情報を前記キャッシュに関連付けられる1つ以上の指定されたスロット内へと挿入することにより、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムをバイパスすることを更に備える請求項1の方法。
【請求項10】
前記メモリ管理ユニットに関連付けられる無効化メカニズムを用いて、前記キャッシュに関連付けられるロケーションを無効化することを更に備え、
前記無効化することは、(i)1つ以上のアドレスエントリ、及び(ii)1つ以上のスロット、の少なくとも1つを指定する無効化コマンドに応答する請求項1の方法。
【請求項11】
指定されたアドレストランスレーション情報に関連付けられる既に記憶されたいかなるアドレストランスレーション情報にもかかわらず、無効化表示に応答して前記指定されたアドレストランスレーション情報を記憶することを更に備える請求項1の方法。
【請求項12】
少なくとも前記資源状態に基づいて割り込み再マッピング情報を前記メモリ管理ユニットに関連付けられる割り込み再マッピングバッファで選択的に記憶することを更に備える請求項1の方法。
【請求項13】
メモリ管理ユニットを備えるコンピュータシステムであって、
前記メモリ管理ユニットは、前記コンピュータシステムの資源状態を決定すると共に決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶するように構成されるコンピュータシステム。
【請求項14】
前記アドレストランスレーション情報はプリフェッチ即時コマンド内に含まれる請求項13のシステム。
【請求項15】
前記アドレストランスレーション情報は、(i)仮想アドレス、及び(ii)前記仮想アドレスに関連付けられるトランスレートされた物理アドレス、を含む請求項13のシステム。
【請求項16】
前記メモリ管理ユニットは入力/出力(I/O)メモリ管理ユニット(IOMMU)である請求項13のシステム。
【請求項17】
前記キャッシュはI/Oトランスレーションルックアサイドバッファ(IOTLB)である請求項13のシステム。
【請求項18】
前記キャッシュは前記IOTLBに関連付けられるトランスレーションキャッシュ動作から隔離されたサイドトランスレーションバッファを更に備える請求項17のシステム。
【請求項19】
前記メモリ管理ユニットは、
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答してイベントログエントリを作成することと、
当該要求されたアドレストランスレーション情報を前記イベントログエントリに応答して前記キャッシュ内へと挿入することと、を行うように更に構成される請求項13のシステム。
【請求項20】
前記メモリ管理ユニットは、
前記キャッシュに記憶されていないアドレストランスレーション情報に対する要求に応答して、前記メモリ管理ユニットに関連付けられるページテーブルウォーカーを用いてページテーブルウォークを行うことと、
前記ページテーブルウォーカーを用いて前記コンピュータシステムのシステムメモリ内のトランスレーションテーブルから当該要求されたアドレストランスレーション情報を取得することと、
前記要求されたアドレストランスレーション情報を、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムを用いて前記キャッシュ内へと挿入することと、を行うように更に構成される請求項13のシステム。
【請求項21】
前記メモリ管理ユニットは、
前記アドレストランスレーション情報を前記キャッシュに関連付けられる1つ以上の指定されたスロット内へと挿入することにより、前記メモリ管理ユニットに関連付けられるキャッシュ置換メカニズムをバイパスするように更に構成される請求項13のシステム。
【請求項22】
前記メモリ管理ユニットは、
(i)1つ以上のアドレスエントリ、及び(ii)1つ以上のスロット、の少なくとも1つを指定する無効化コマンドに応答して、前記メモリ管理ユニットに関連付けられる無効化メカニズムを用いて、前記キャッシュに関連付けられるロケーションを無効化するように更に構成される請求項13のシステム。
【請求項23】
前記メモリ管理ユニットは、
指定されたアドレストランスレーション情報に関連付けられる既に記憶されたいかなるアドレストランスレーション情報にもかかわらず、無効化表示に応答して前記指定されたアドレストランスレーション情報を記憶するように更に構成される請求項13のシステム。
【請求項24】
前記メモリ管理ユニットに関連付けられる割り込み再マッピングバッファであって、少なくとも前記資源状態に基づいて割り込み再マッピング情報を選択的に記憶するように構成される再マッピングバッファを更に備える請求項13のシステム。
【請求項25】
コンピュータ実行可能命令が記憶された有形的コンピュータ可読媒体であって、前記コンピュータ実行可能命令は、コンピューティングデバイスによって実行される場合に、
メモリ管理ユニットを含むコンピュータシステムの資源状態を決定することと、
決定された資源状態に基づいてアドレストランスレーション情報を前記メモリ管理ユニットに関連付けられるキャッシュで選択的に記憶することと、を備える方法を前記コンピューティングデバイスに行わさせる有形的コンピュータ可読媒体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公表番号】特表2013−519965(P2013−519965A)
【公表日】平成25年5月30日(2013.5.30)
【国際特許分類】
【出願番号】特願2012−553997(P2012−553997)
【出願日】平成23年2月16日(2011.2.16)
【国際出願番号】PCT/US2011/025075
【国際公開番号】WO2011/103184
【国際公開日】平成23年8月25日(2011.8.25)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
【Fターム(参考)】
【公表日】平成25年5月30日(2013.5.30)
【国際特許分類】
【出願日】平成23年2月16日(2011.2.16)
【国際出願番号】PCT/US2011/025075
【国際公開番号】WO2011/103184
【国際公開日】平成23年8月25日(2011.8.25)
【出願人】(591016172)アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド (439)
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
【Fターム(参考)】
[ Back to top ]