(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-28
(54)【発明の名称】データ移動を容易にするために複数のアドレス空間をサポートする方法、システム及び装置
(51)【国際特許分類】
G06F 13/28 20060101AFI20240220BHJP
G06F 13/14 20060101ALI20240220BHJP
G06F 13/36 20060101ALI20240220BHJP
G06F 12/1036 20160101ALI20240220BHJP
【FI】
G06F13/28 310L
G06F13/14 310F
G06F13/36 310E
G06F12/1036 100
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023553175
(86)(22)【出願日】2022-03-01
(85)【翻訳文提出日】2023-09-26
(86)【国際出願番号】 US2022018331
(87)【国際公開番号】W WO2022187239
(87)【国際公開日】2022-09-09
(32)【優先日】2021-03-02
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】フィリップ ン
(72)【発明者】
【氏名】ニッポン ラヴァル
(72)【発明者】
【氏名】ブヘン シュー
(72)【発明者】
【氏名】ロスチスラフ エス. ドブリン
(72)【発明者】
【氏名】ショーン ハン
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205KK16
5B205MM36
5B205MM51
(57)【要約】
方法、システム及び装置は、データ移動を容易にするために複数のアドレス空間に対するサポートを提供する。1つのシステムは、ホストプロセッサと、メモリと、ホストプロセッサ及びメモリに結合されたデータファブリックと、複数の入出力メモリ管理ユニット(IOMMU)であって、複数のIOMMUの各々がデータファブリックに結合される、複数のIOMMUと、複数のルートポートであって、ルートポートの各々が、複数のIOMMUのうち対応するIOMMUに結合される、複数のルートポートと、複数の周辺コンポーネントエンドポイントであって、複数の周辺コンポーネントエンドポイントの各々が、複数のルートポートのうち対応するルートポートに結合される、複数の周辺コンポーネントエンドポイントと、を備え、ルートポートの各々がハードウェア制御ロジックを備え、ハードウェア制御ロジックは、複数のルートポートを同期させ、対応する周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信し、複数のIOMMUのうち対応するIOMMUにDMA要求を提供するように動作する。
【選択図】
図12
【特許請求の範囲】
【請求項1】
複数のアドレス空間の間でデータ移動を提供するための方法であって、
複数のルートポートのうち何れかのルートポートが、前記複数のルートポートのうち別のルートポートのコンテキストデータを記憶することであって、前記ルートポートの各々は、複数の入出力メモリ管理ユニット(IOMMU)のうち対応するIOMMUと、複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントと、に結合されており、前記複数のIOMMUの各々は、前記複数のアドレス空間のうち異なるアドレス空間に関連付けられた、異なる周辺コンポーネントエンドポイントに関連付けられている、ことと、
前記ルートポートが、ダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータと、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能の機能識別子と、を含む、ことと、
前記DMA要求に応じて、前記別のIOMMUに属するメモリアドレス空間へのダイレクトメモリアクセスを、前記ルートポートを介して提供することと、を含む、
方法。
【請求項2】
前記ルートポートの各々は、複数のレジスタを含む、
請求項1の方法。
【請求項3】
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの複数のレジスタと同期させることを更に含む、
請求項2の方法。
【請求項4】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタと同期させることは、
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することと、
前記ルートポートが、前記複数のルートポートの前記複数のレジスタへの変更を追跡することと、を含む、
請求項3の方法。
【請求項5】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することは、
前記複数のルートポートの各々のルートポートが、前記ルートポートのコンテキストIDを受信することを含む、
請求項4の方法。
【請求項6】
前記複数のルートポートの前記複数のレジスタへの変更を追跡することは、
前記ルートポートのレジスタが変更される場合に、前記ルートポートが、メッセージを前記複数のルートポートに送信することと、
前記複数のルートポートのうち別のルートポートのレジスタが変更される場合に、前記ルートポートが、前記複数のルートポートのうち前記別のルートポートからメッセージを受信することと、を含む、
請求項4の方法。
【請求項7】
前記送信すること及び前記受信することは、レジスタバスを介して行われる、
請求項6の方法。
【請求項8】
前記機能は、PCIeエンドポイント機能である、
請求項1の方法。
【請求項9】
前記周辺コンポーネントエンドポイント機能は、物理機能、及び、複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである、
請求項1の方法。
【請求項10】
データ移動を容易にするために複数のメモリアドレス空間をサポートするための方法であって、
複数のルートポートのうち何れかのルートポートにおいて、前記複数のルートポートのうち別のルートポートのコンテキストデータを受信することであって、前記複数のルートポートの各ルートポートは、複数の入出力メモリ管理ユニット(IOMMU)のうち対応するIOMMUと、複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントと、に結合されている、ことと、
前記ルートポートが、前記ルートポートの複数のレジスタを、前記複数のルートポートの複数のレジスタと同期させることと、
ルートポートに結合された前記対応する周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータと、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能の機能識別子と、を含む、ことと、
前記ルートポートが、前記複数のIOMMUのうち前記対応するIOMMUに前記DMA要求を提供することと、を含む、
方法。
【請求項11】
前記複数のIOMMUの各々は、前記複数のIOMMUのそれぞれのIOMMUに属するメモリアドレス空間をマッピングする複数のメモリマップト入出力(MMIO)レジスタを含み、
前記方法は、
前記IOMMUが、前記ルートポートから提供された前記DMA要求の前記コンテキストデータに基づいて、前記IOMMUの前記複数のMMIOレジスタにアクセスすることと、
前記IOMMUから、アクセスされた前記複数のMMIOレジスタに基づいて、前記別のIOMMUに属するコンテキストによって参照されるページテーブルにアクセスすることと、
前記IOMMUが、アクセスされた前記ページテーブルを使用して、前記DMA要求のアドレス変換を実行することと、
前記IOMMUが、前記DMA要求及び変換されたアドレスに基づいて、メモリアクセスを実行することと、を更に含む、
請求項10の方法。
【請求項12】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタと同期させることは、
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することと、
前記ルートポートが、前記複数のルートポートの前記複数のレジスタへの変更を追跡することと、を含む、
請求項10の方法。
【請求項13】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することは、
前記複数のルートポートの各々のルートポートが、前記ルートポートのコンテキストID及び前記ルートポートのアドレスを受信することを含む、
請求項12の方法。
【請求項14】
前記複数のルートポートの前記複数のレジスタへの変更を追跡することは、
前記ルートポートのレジスタが変更される場合に、前記ルートポートが、メッセージを前記複数のルートポートに送信することと、
前記複数のルートポートのうち別のルートポートのレジスタが変更される場合に、前記ルートポートが、前記複数のルートポートのうち前記別のルートポートからメッセージを受信することと、を含む、
請求項12の方法。
【請求項15】
前記送信すること及び前記受信することは、レジスタバスを介して行われる、
請求項14の方法。
【請求項16】
データ処理システムであって、
ホストプロセッサと、
メモリと、
前記ホストプロセッサ及び前記メモリに結合されたデータファブリックと、
複数の入出力メモリ管理ユニット(IOMMU)であって、前記複数のIOMMUの各々が前記データファブリックに結合されている、複数のIOMMUと、
複数のルートポートであって、前記ルートポートの各々が、前記複数のIOMMUのうち対応するIOMMUに結合されている、複数のルートポートと、
複数の周辺コンポーネントエンドポイントであって、前記複数の周辺コンポーネントエンドポイントの各々が、前記複数のルートポートのうち対応するルートポートに結合されている、複数の周辺コンポーネントエンドポイントと、を備え、
前記ルートポートの各々は、ハードウェア制御ロジックを備え、
前記ハードウェア制御ロジックは、
前記複数のルートポートを同期させることと、
前記ルートポートに結合された前記複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータを含み、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能に対する機能識別子を要求する、ことと、
前記複数のIOMMUのうち前記対応するIOMMUに前記DMA要求を提供することと、
を行うように構成されている、
データ処理システム。
【請求項17】
前記ルートポートの各々は、複数のレジスタを備え、
前記ハードウェア制御ロジックは、レジスタバスを介して前記複数のルートポートの前記複数のレジスタの各々と通信するように構成されている、
請求項16のシステム。
【請求項18】
前記複数の周辺コンポーネントエンドポイントの各々は、ハードウェア制御ロジックを備え、
前記ハードウェア制御ロジックは、
前記少なくとも1つの他のIOMMUの前記複数のMMIOレジスタを同期させることと、
前記対応するルートポートを介して、前記対応するIOMMUに結合された前記対応する周辺コンポーネントエンドポイントから、前記DMA要求を受信することと、
前記DMA要求の前記コンテキストデータに基づいて、前記IOMMUの前記複数のMMIOレジスタにアクセスすることと、
前記IOMMUから、前記アクセスされた複数のMMIOレジスタに基づいて、前記少なくとも1つの他のIOMMUに属する前記メモリアドレス空間に割り当てられた前記機能にアクセスすることと、
を行うように構成されている、
請求項16のシステム。
【請求項19】
前記メモリは、周辺コンポーネントエンドポイント割り込み情報を記憶するメモリカーブアウトを含む、
請求項16のシステム。
【請求項20】
前記周辺コンポーネントエンドポイントの各々は、割り込み要求を受信した場合に、前記メモリのメモリカーブから周辺コンポーネントエンドポイント割り込み情報を取得するように動作するハードウェア制御ロジックを備える、
請求項19のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
ソフトウェアベースのコピーループをオフロードするために、ダイレクトメモリアクセス(DMA)データムーバデバイスが使用される。オフロードは、中央処理装置(CPU)実行サイクルを解放するために望ましい。しかしながら、DMAの採用は、特定の特権ソフトウェアに限定される可能性があり、非常にデバイス固有のインタフェースを採用する入出力(I/O)使用ケースは、前向きの互換性(forward compatible)がない。加えて、制限により、ユーザモードアプリケーションの使用は、非仮想化環境では困難になり、マルチテナント仮想化環境では極めて困難になる。
【0002】
特定のアーキテクチャにおいて、入出力メモリ管理ユニット(IOMMU)は、ルートコンプレックスを介してシステムファブリックにルーティングされるメモリトランザクションを処理する。複数のルートコンプレックスを有するシステムでは、別々のソフトウェア可視IOMMUが各ルートコンプレックスに必要とされる。特定のシステムでは、複数のスマートデータアクセラレータインタフェース(SDXI)エンジンが複数のソケットにわたって分散され、SDXIエンジンは、複数のルートコンプレックスへのインタフェースを有し、マルチアドレス空間DMA動作を実行することができる周辺コンポーネント相互接続エクスプレス(PCIe)エンドポイント等の周辺コンポーネントエンドポイントである。
【0003】
これらのシステムでは、SDXIエンジンは、適切な保護及びアドレス変換を適用するために、DMAを正しいルートコンプレックスにルーティングするために、ケーブル又は相互接続を介して接続される可能性がある物理チャネル上で通信することを必要とする可能性がある。そのような通信は、余分なI/O帯域幅オーバーヘッドを必要とし、システムの全体的なI/O性能に影響を与える。したがって、SDXIエンジン間の直接物理チャネルのコストなしに通信するSDXIエンジンが必要とされている。
【0004】
実施形態は、同様の符号が同様の要素を表す以下の図を伴う場合に、以下の説明を考慮してより容易に理解されるであろう。
【図面の簡単な説明】
【0005】
【
図1】本開示の実施形態による、IOMMUを含むプラットフォームアーキテクチャの一例を示す図である。
【
図2】本開示の実施形態による、IOMMU及びSDXIエンジンを含むプラットフォームアーキテクチャの一例を示す図である。
【
図3】本開示の実施形態による、複数のIOMMUを含むプラットフォームアーキテクチャの一例を示す図である。
【
図4】いくつかの実施形態による、
図3のMMIOレジスタ更新フローのブロック図である。
【
図5】いくつかの実施形態による、
図3のDMA要求フローのブロック図である。
【
図6】本開示の実施形態による、複数のアドレス空間の間のデータ移動を提供するための方法を示すフローチャートである。
【
図7】本開示の実施形態による、ハイパーバイザと少なくとも1つの仮想マシンとの間のデータ移動を容易にするために複数のメモリアドレス空間をサポートするための方法を示すフローチャートである。
【
図8】本開示の実施形態による、プラットフォームアーキテクチャ800の別の例を示す図である。
【
図9】いくつかの実施形態による、
図8の割り込みトランザクションのブロック図である。
【
図10】いくつかの実施形態による、
図8の割り込みトランザクションのブロック図である。
【
図11】いくつかの実施形態による、
図8の割り込みレジスタのソフトウェアプログラミングのためのブロック図である。
【
図12】いくつかの実施形態による、
図8のDMA要求フローのブロック図である。
【
図13】本開示の実施形態による、複数のアドレス空間の間のデータ移動を提供するための方法を示すフローチャートである。
【
図14】本開示の実施形態による、データ移動を容易にするために複数のメモリアドレス空間をサポートするための方法を示すフローチャートである。
【発明を実施するための形態】
【0006】
当業者は、本開示の様々な実装及び実施形態が本明細書に従って実施され得ることを認識するであろう。これらの実装及び実施形態の全ては、本開示の範囲内に含まれることが意図されている。
【0007】
本明細書で使用される場合、用語「含む(comprises)」、「含んでいる(comprising)」、「有する(have)」、「有している(having)」、「含む(include)」、「含んでいる(including)」、又は、それらの任意の他の変形は、要素のリストを含むプロセス、方法、物品又は装置が、それらの要素のみを含むのではなく、明示的に列挙されていない又はそのようなプロセス、方法、物品又は装置に固有の他の要素を含み得るように、非排他的な包含をカバーすることが意図される。「例示的」という用語は、「理想的」ではなく「例」の意味で使用される。更に、「又は」という用語は、排他的な「又は」ではなく、包括的な「又は」を意味することが意図されている。すなわち、特に明記しない限り又はコンテキストから明らかでない限り、「XはA又はBを用いる」という句は、全てのあり得る順列の何れかを意味することが意図される。例えば、「XはA又はBを使用する」という句は、以下のインスタンスの何れかによって満たされる:XはAを使用する、XはBを使用する、又は、XはA及びBの両方を使用する。加えて、本願及び添付の特許請求の範囲で使用される冠詞「一つの(a)」及び「一つの(an)」は、別段の指定がない限り又は単数形を対象とすることが文脈から明らかでない限り、一般に「1つ以上」を意味すると解釈されるべきである。
【0008】
簡潔にするために、方法を実施するために使用されるシステム及びサーバに関連する従来の技術、並びに、システム及びサーバ(並びにシステムの個々の動作構成要素)の他の機能的側面は、本明細書では詳細に説明されない場合がある。更に、本明細書に含まれる様々な図に示される接続線は、様々な要素間の例示的な機能的関係及び/又は物理的結合を表すことを意図している。多くの代替及び/又は追加の機能的関係又は物理的接続が、発明の実施形態に存在し得ることに留意されたい。
【0009】
ここで、本開示の例示的な実施形態を詳細に参照し、その例が添付の図面に示されている。可能な限り、同一又は同様の部分を指すために、図面全体を通して同一の符号が使用される。
【0010】
本開示は、概して、とりわけ、コンテキストに基づいて1つ以上のアドレス変換を提供するために、PCIeバスアーキテクチャ等の周辺コンポーネントバスアーキテクチャと、周辺コンポーネントバスアーキテクチャ及びIOMMUアーキテクチャをマルチコンテキストアウェアアーキテクチャに変えるIOMMUアーキテクチャと、を仮想化する方法、システム及び装置に関する。各マルチコンテキストアウェアIOMMUインスタンスは、異なるルートコンプレックスへのインタフェースを有することができるSDXIエンジン等のマルチインタフェースデバイス内の所定のインタフェースに対してアクセスチェック及びアドレス変換を実行することができる。これにより、少なくとも2つのIOMMUインスタンスがコンテキスト情報を交換し、互いに代わって動作することが可能になる。SDXIエンジンのグループ化は、機能グループと呼ばれる相互接続されたインスタンスの集合を含むことができる。更に、各IOMMUコンテキストが任意の他のコンテキストと同じようにプログラムされるという仮定がなされない。各IOMMUコンテキストの全ては、同じデータ構造(デバイステーブル、ページテーブル、リンガーバッファ等)を指してもよく、又は、アドレス空間識別子(ドメインID)等の符号化を再利用してもよい。更に、マルチコンテキストアウェアIOMMUの変換ルックアサイドバッファ(TLB)は、適切なコンテキスト識別子でタグ付けされるように拡張される。
【0011】
IOMMUは、周辺デバイスからのDMA転送に対するアドレス変換及びシステムメモリアクセス保護のサポートを追加することによって、システムアーキテクチャを拡張する。また、IOMMUは、周辺デバイスからの割り込みをフィルタリング及び再マッピングする。IOMMUは、システム内のI/Oデバイス、SDXIエンジン、周辺コンポーネントデバイス及び/又はPCIeデバイス等の各周辺コンポーネントエンドポイントが特定のドメイン及びI/Oページテーブルの個別のセットに割り当てられることを可能にする保護ドメインの概念を拡張する。周辺コンポーネントエンドポイントがシステムメモリの読取り又は書込みを試みる場合、IOMMUはアクセスを傍受し、デバイスが割り当てられているドメインを決定し、そのドメインに関連付けられたTLBエントリ又はその周辺コンポーネントエンドポイントに関連付けられたI/Oページテーブルを使用して、アクセスが許可されるべきかどうか、及び、アクセスされるべきシステムメモリ内の実際の位置を決定する。
【0012】
IOMMUは、リモートI/O変換ルックアサイドバッファ(IOTLB:Translation Look-aside Buffer)に対するサポートを含むことができ、IOTLBは、例えば、PCIeアドレス変換キャッシュ等の事前変換されたアドレスを保持する周辺デバイス内に配置されたバッファである。IOTLBサポートを有する信頼できる周辺コンポーネントは、IOMMUと協働して、それ自体のアドレス変換のキャッシュを維持することができ、これにより、周辺コンポーネントエンドポイントが異なる使用モデル及びワーキングセットサイズを有し得るIOMMUを有するスケーラブルシステムを生成するためのフレームワークが生成される。
【0013】
IOMMUによって提供される主要なシステムリソースは、とりわけ、I/O DMAアクセス許可チェック及びメモリベースの変換テーブルを使用するアドレス変換と、周辺コンポーネントエンドポイントが特定のドメインに割り当てられることを可能にし、周辺コンポーネントエンドポイントのページテーブルへのポインタを含むデバイステーブルである、ロングモードページテーブルフォーマットと互換性のあるゲスト変換テーブルのサポートと、IOMMUが周辺コンポーネントエンドポイント割り込みのための許可チェック及び割り込み再マッピングを提供するために使用する割り込み再マッピングテーブルと、IOMMUがゲストVMに割り込みを配信するために使用するゲスト仮想APIC機構と、IOMMUと1つ以上のシステムプロセッサとの間でコマンド及びステータス情報を交換するためのメモリベースのキューと、周辺ページ要求(PPR)ログのサポートと、PPR及びイベントログオーバーフローを軽減するための特徴(features)と、特権周辺コンポーネントエンドポイントがシステムメモリの定義領域に直接アクセスすることを可能にするためのハードウェアベース機構のサポートと、を含む。
【0014】
特に、IOMMUは、中央処理装置(CPU)によるメモリアクセスではなく、周辺コンポーネントエンドポイントによるDMAのためのアドレス変換及びページ保護を提供する。更に、IOMMUは、未変換のポストされた要求を処理する場合に、失敗した変換の周辺コンポーネントエンドポイントに直接的な指示を提供しなくてもよい。IOMMUによってサポートされるシステムは、AMD Infinity Fabric、Data Fabricリンク又は他の手段等のデータファブリックによって互いに接続されたいくつかのプロセッサ及びデバイスノードから構成され得る。IOMMUは、システムファブリック内のそのノードを介してルーティングされるメモリトランザクションを処理することができる。周辺コンポーネントエンドポイントへの複数のリンク及びバスを有するシステムにおいて、複数のIOMMUは、各I/Oリンク又はバスに適切な保護及び変換が適用されることを保証する。
【0015】
図1は、本開示の実施形態による、IOMMUを含むプラットフォームアーキテクチャの一例を示す図である。例示的なアーキテクチャ100は、データ移動を容易にするために複数のアドレス空間をサポートするために提供される。
図1に示すように、アーキテクチャ100は、IOMMU102と、SDXIエンジン104等の周辺コンポーネントエンドポイントと、データファブリック106と、メモリデバイス108と、CPU110と、を含む。IOMMU102は、マルチコンテキストIOMMUである。本発明で使用する場合、コンテキストは、カーネルが実行される環境と、同期及びメモリ管理が定義されるドメインと、を考慮している。コンテキストは、1組のIOMMU MMIOレジスタと、メモリ内のページテーブルと、コマンドキュー等の様々なリングバッファと、を含む。コマンドキューは、IOMMU変換ルックアサイドバッファ(TLB)管理のために、すなわち、例えばページテーブル等の基礎となるメモリデータ構造の変化に起因してTLBエントリを無効化すべきであることをIOMMUに示すために使用することができる。IOMMU102は、デバイスメモリアクセスのために仮想から物理アドレス変換を実行するロジックを含む。また、アーキテクチャ100は、IOMMU102とCPU110及び/又は他のIOMMUとの間の通信を容易にするために、データファブリック106に結合されたI/Oスイッチ112を含んでもよい。また、I/Oスイッチ112は、IOMMU102に組み込まれ得る。
【0016】
いくつかの実施形態では、IOMMU102は、DMAポート114、MMIOレジスタ116、変換索引バッファ(TLB)118、作業待ち行列120、ページテーブルウォーカー122、イベントロガー124、コマンドプロセッサ126及びPPRロガー128を含むか、それらへのアクセスを有する。I/Oスイッチ112、DMAポート114、ページテーブルウォーカー122、イベントロガー124、コマンドプロセッサ126及びPPRロガー128は、相互接続115を介して互いに接続される。ページテーブルウォーカー122、イベントロガー124、コマンドプロセッサ126及びPPRロガー128は、相互接続117を介して互いに接続される。
【0017】
DMAポート114は、既に変換されたDMAトランザクションを容易にする。TLB118は、一例として、コンテンツアドレス指定可能メモリ(CAM)で実装されており、システムメモリ108内のデータの要求に対するロジック(すなわち、仮想)メモリアドレスの物理的メモリアドレスへの変換を加速する。作業待ち行列120は、制御及びステータス情報等の全ての関連するメモリデータ構造と共に、動作を実行するために使用される。デッドロックを回避するために、IOMMUは、ページテーブルウォーク要求のためにページテーブルウォーカー112を使用する。TLBミス時に、ページテーブルウォーカー112は、所望の仮想アドレスから物理アドレスへのマッピングを見つけるために、メモリ内ページテーブルをウォークする。変換は、TLB階層でミスしたものがIOMMUのページウォーク要求バッファにキューアップすることを要求する。IOMMUが任意の種類のイベントを検出すると、イベントロガー124は、システムメモリ内に位置するイベントログに適切なイベントエントリを書き込む。ホストソフトウェアは、IOMMUを制御し、コマンドをコマンドプロセッサ126に書き込む。次に、IOMMUは、コマンドを読み取り、それ自体のペースでそれらを実行する。
【0018】
各IOMMU102は、ローカルMMIOレジスタ116a及びリモートコンテキストレジスタ116bを含むMMIOレジスタ116を含む。ローカルMMIOレジスタ116aは、ドライバソフトウェアによって直接プログラムされ、ローカルコンテキストに対応する。リモートコンテキストMMIOレジスタ116bは、他の全てのIOMMUインスタンスのMMIOレジスタのサブセットのシャドウコピーである。IOMMUは、他のIOMMUのMMIOレジスタプログラミングを追跡して、ローカルIOMMUに属さないメモリ構造にアクセスし、これにより、SDXIエンジン要求が別のIOMMUによって仮想的に変換されたように見えるようになる。IOMMUは、他のIOMMUに関連付けられたデータ構造をキャッシュし、ドメインID及びBDF(登録商標)割り当て等の異なるIOMMUコンテキストへのSDXIエンジントラフィックによって共有されないデータ構造がコンテキスト固有であることを保証することができる。
【0019】
各IOMMUには、ローカルコンテキストDMAを変換するためのローカルコンテキストMMIOレジスタ116aが設けられている。各IOMMUには、非ローカルコンテキストからDMAを変換するためのリモートコンテキストMMIOレジスタ116bも設けられる。各IOMMUは、他の各IOMMU内のローカルコンテキストMMIOレジスタに対応するリモートコンテキストMMIOレジスタ116bのバージョンを維持する。各IOMMUは、他の各IOMMUに対応するこれらのレジスタのバージョンを維持する。非MMIOレジスタは、IOMMUコンテキストにわたって同一にプログラムされ、したがって、コンテキストごとにシャドウ化されない。
【0020】
IOMMUメッセージは、以下で説明するように、適用可能なMMIOレジスタが書き込まれた場合に、他のIOMMUインスタンス内の全てのリモートコンテキストMMIOレジスタ116bを自動的に更新するために使用される。例えば、本開示のいくつかの実施形態では、合計22×32ビットレジスタがシャドウ化され、IOMMUデバイステーブルベースアドレスレジスタメッセージ及びIOMMU除外ベースレジスタメッセージ等のIOMMU MMIOメッセージタイプが、全てのMMIOレジスタ116を自動的に更新する場合に使用される。
【0021】
他のIOMMUに対応するレジスタを維持するMMIOレジスタ116は、システム内の全てのIOMMUに対するマルチコンテキストIOMMUサポートをイネーブルにする前に書き込まれない。両方のIOMMU MMIOメッセージタイプは、初期値がレジスタ構成可能であり、32等の所定の値にデフォルトであり得るMMIOメッセージクレジットを必要とする。スレーブIOMMUは、レジスタ更新を肯定応答するためにIOMMUメッセージのMMIOクレジットフィールドを使用する。全てのMMIOレジスタ116は、他のIOMMUインスタンスから独立してプログラムされる。更に、例えば、SDXIエンジンは、SDXIエンジンが物理的に接続されているIOMMUインスタンスに対してイネーブル/ディスエーブル用のIOMMUレジスタがディスエーブルされている場合であっても、そのレジスタが設定されているIOMMUインスタンスを仮想的に対象とすることができる。
【0022】
IOMMUの各々のMMIOレジスタ116は、IOMMUが特定のコンテキストに対してイネーブル/ディスエーブルであるかどうかのレジスタ、特定のコンテキストへのSDXIアクセスによってトリガされたイベントログがコンテキスト所有IOMMUに転送されるかどうかを制御するレジスタ、特定のIOMMUコンテキストに関連付けられたテーブルウォークアクセスがコヒーレントでなければならないかどうかのレジスタ、PPRsメッセージがIOMMUコンテキスト所有者に転送され得るかどうかのレジスタ、特定のIOMMUコンテキストがゲスト変換をサポートするかどうかのレジスタ、特定のIOMMUコンテキストがAVICをサポートするかどうかのレジスタ、及び、特定のコンテキストへのSDXIエンジンAVIC割り込みによってトリガされたGAログがコンテキスト所有IOMMUに転送されるかどうかを制御するレジスタを含む。
【0023】
また、IOMMUの各々に対するMMIOレジスタ116は、特定のIOMMUコンテキストによってサポートされるDTEセグメントの数を指定し、デバイスストリームIDの何れのビットがDTEテーブルにインデックスを付けるために使用されるかを決定するためのレジスタを含み、拡張ページ要求インタフェース(PRI)を指定するための特定のIOMMUコンテキストレジスタに対するユーザのみの許可を有するゲストアクセスを指定するためのレジスタは、特定のIOMMUコンテキストに対してイネーブルにされ、SDXIエンジンDTEが構成されている場合、特定のIOMMUはPRIをアボートすることができ、IOMMUはイベントログをコンテキスト所有IOMMUに適用可能に転送する。
【0024】
IOMMUの各々に対するMMIOレジスタ116は、ゲストダーティが特定のIOMMUコンテキストに対してビットイネーブルにされているかどうか、X2APICサポートが特定のIOMMUコンテキストに対してイネーブルにされているかどうか、IOMMU仮想化が特定のIOMMUコンテキストの下でデバイスによって使用され得るかどうか、ゲストアクセスビットサポートが特定のIOMMUコンテキストに対してイネーブルにされているかどうか、及び、AVIC GAPPIが特定のIOMMUコンテキストに対してイネーブルにされているかどうかを指定するためのレジスタを更に含む。
【0025】
MMIOレジスタ116のMMIO制御及びステータスレジスタは、第1レベルデバイステーブルのバイト整列ベースアドレスのビットを指定するデバイステーブルベースアドレス用のレジスタであるIOMMUデバイステーブルベースアドレスレジスタと、デバイステーブルのサイズを指定する値を含むデバイステーブルのサイズ用のレジスタと、を含む。デバイステーブルセグメント化がサポートされていないか又はイネーブルにされていない場合、このレジスタは、単一の統合されたデバイステーブルのベースアドレスを確立する。デバイステーブルセグメント化がサポートされ、イネーブルにされる場合、レジスタは、デバイステーブルのセグメント0のベースアドレスレジスタとして働く。
【0026】
MMIOレジスタ116のMMIO制御及びステータスレジスタは、IOMMU除外範囲のベースデバイス仮想アドレスを指定するためのIOMMU除外ベースレジスタを含む。除外範囲内のアドレスをターゲットとするデバイスアクセスは、デバイステーブル内のビットがデバイスに対して設定されている場合、又は、許可ビットがこのレジスタに設定されている場合、変換もアクセスチェックもされない。除外範囲テストは、有効な所定のプレフィックスを提示するデバイストランザクションには適用されない。いくつかの実施形態において、MMIOレジスタ116のMMIO制御及びステータスレジスタは、IOMMU除外範囲の限界を指定するためのIOMMU除外範囲制限レジスタを含む。
【0027】
上述したように、IOMMUメッセージは、適用可能なMMIOレジスタ116が書き込まれた場合に、他のIOMMUインスタンス内の全てのMMIOレジスタ116を自動的に更新するために使用される。例えば、IOMMUデバイステーブルベースアドレスレジスタメッセージは、所定のフォーマットであり、適用可能なレジスタ内の何れかのフィールドが変更された場合にIOMMUが送信するIOMMUデバイステーブルベースアドレスレジスタを含む。IOMMU除外ベースレジスタメッセージは、所定のフォーマットであり、MMIO除外ベースレジスタとIOMMU除外範囲制限レジスタとを含み、適用可能なレジスタ内の何れかのフィールドが変更された場合にIOMMUがこれらを送信する。
【0028】
IOMMU102のマルチIOMMU同期ロジック150は、IOMMUメッセージの処理、MMIOレジスタ116の同期、及び、IOMMUのコンテキスト復号を容易にする。マルチIOMMU同期ロジック150は、複数のIOMMUの複数のMMIOレジスタを同期させ、ダイレクトメモリアクセス(DMA)要求を受信し、DMA要求のコンテキストデータに基づいてIOMMUの複数のMMIOレジスタにアクセスし、メモリアドレス空間に割り当てられた仮想及び/又は物理機能のアクセスを支援する等の動作を行うハードウェア制御ロジックである。
【0029】
本開示の実施形態では、特定の周辺コンポーネントエンドポイントであるSDXIエンジン104は、ホストシステム上の少なくとも2つの個別のアドレスドメイン間のデータの低レイテンシ及び高帯域幅転送を容易にするソフトウェア及びハードウェアソリューションである。
図2は、本開示の実施形態による、IOMMU及びSDXIエンジンを含むプラットフォームアーキテクチャ200の一例を示す図である。DMAエンジン240A及び240Bをそれぞれ含むSDXIエンジン204A及び204Bは、単一ルートI/O仮想化物理機能(SR-IOV PF)及び複数の単一ルートI/O仮想機能(SR-IOV VF)を通してソフトウェアにさらされ、その各々は、メモリデバイス208内の異なるアドレスドメイン、及び、これらの機能間でデータを移動させる能力にマッピングされ得る。SDXIエンジン204A及び204Bは、ハイパーバイザ(HV)及びCPUリソースをオフロードし、少なくとも2つのゲストオペレーティングシステム(OS)又はゲストOSとHVとの間のデータ転送を維持するために必要なソフトウェアスタックの複雑さを低減する。
【0030】
帯域幅要件を満たすために、SDXIエンジン204A及び204Bは、個別のIOMMU202A及び202Bと統合され、データファブリック206のデータファブリック経路は、システムメモリ208に統合される。例えば、システムでは、ソケットごとに4つのSDXIエンジンが存在し、4つのソケット能力を有し、したがって、システム内に最大16個のSDXIエンジンが存在し得る。ソフトウェアオーバーヘッドを低減し、ソフトウェアからのシステムレベル実装を不明瞭にするために、仮想マシン(VM)及びHVは、SDXIエンジンのための複数のデバイステーブルエントリ(DTE)を維持することを回避する。各SDXIエンジンは、物理機能(PF)及び複数のVFを有するが、各VMは、1つのVFにアタッチする必要があるだけであり、いくつのSDXIエンジンインスタンスがシステム上に存在するかにかかわらず、全てのSDXIエンジンインスタンスを利用して、任意の他のSDXIエンジンPF/VF間のデータ転送を容易にすることができる。したがって、システムは、本開示の実施形態で説明されるように、1つのIOMMUインスタンスの下のI/Oデバイスが、別のIOMMUインスタンスに仮想的に接続されているように見えることを可能にする。
【0031】
マルチコンテキストIOMMU機能の使用をイネーブルにする場合、各IOMMUインスタンスは、一意のコンテキストIDに割り当てられる。SDXIエンジンは、機能グループ内の全てのSDXIエンジン上のPF及びVF等の全ての機能のセットのうち何れの機能がDMA要求を生成しているかを示す。DMA要求を受信するIOMMUは、これらの指標を使用して、DMA要求を変換するために何れのIOMMUコンテキストを使用するかを決定する。機能番号は、標準的なリクエスタID(バス/デバイス/機能)を使用して、例えばPCIeバス等のバスを介して通信され得る。また、追加の機能識別情報は、セグメントID等のバスを介して又は独自の手段を介して通信することができる。指標が設定されていない場合、要求は、コンテキストがIOMMUの一意のコンテキストIDにプログラムされているかのように処理され、デバイスはIOMMUに物理的に接続される。
【0032】
各SDXIエンジンは、識別子フィールドで符号化された複数のVFにまたがる。バスデバイス機能(BDF(登録商標))割り当ては、IOMMUコンテキストに関連しており、したがって、NBIF二次/従属バス番号等のハブ番号に基づいて導出されるSDXIエンジンバス番号範囲もコンテキスト固有である。IOMMUコンテキストにわたって、BDF(登録商標)割り当ては、異なるデバイス間で重複する可能性があり、これらのデバイスは、必ずしもメモリページを共有せず、異なるDTEを有する。
【0033】
いくつかの要求は、イベントログ、ゲストAvic(GA)ログ、及び、周辺ページ要求(PPR)ログ等のIOMMU制御メモリデータ構造への書込みを必要とする。IOMMUは、IOMMUメッセージを通じて適切なログを仮想ターゲットIOMMUに転送する。SDXIエンジンは、下流向き要求のターゲットとすることができ、これらの要求は、後述するように、IOMMUによって生成された周辺ページ要求(PPR)応答及びI/O変換ルックアサイドバッファ(IOTLB)無効化メッセージを含む。
【0034】
各IOMMUは、IOMMUマルチコンテキスト機能のイネーブル/初期化、特定の要求タイプを処理し、対応するIOMMUからのメッセージを送受信するように構成される。SDXI初期化のために、IOMMUは、ローカルIOMMUのコンテキストIDを符号化する初期化レジスタと、対応するIOMMUインスタンスのコンテキストIDを符号化する複数の他の初期化レジスタと、を定義する。他の初期化レジスタは、特定のコンテキストに割り当てられた他のIOMMUのステータス及び位置を符号化する。両方の初期化レジスタは、IOMMUがイネーブルにされ、SDXIエンジンがクロスコンテキスト要求の送信を開始する前にプログラムされる。
【0035】
各IOMMUの初期化レジスタは、ローカルIOMMU内のマルチコンテキストアウェアを可能にするレジスタと、ローカルIOMMUインスタンスのコンテキストIDの値を含むレジスタと、システム内のIOMMUコンテキストの総数を含むレジスタと、を含む。また、各IOMMU初期化レジスタは、システム内の各IOMMUコンテキストのためのIOMMUコンテキスト識別子制御レジスタを含む。IOMMUコンテキスト識別子制御レジスタは、他のIOMMUがマルチコンテキストアウェアであるか否かを識別するレジスタと、マルチコンテキストアウェアである他のIOMMUに関連付けられた周辺コンポーネントエンドポイントセグメント識別子と、マルチコンテキストアウェアである他のIOMMUに関連付けられたバス番号と、を含む。IOMMUコンテキスト識別子制御レジスタは、ホストシステム内の全てのIOMMUインスタンスにわたって同じようにプログラムされる。更に、IOMMUコンテキスト識別子制御レジスタのうち何れかは、ローカルIOMMUに対応し、ローカルIOMMUのバス及びセグメントIDを符号化する。
【0036】
また、各IOMMUは、バッファ粒度ごとにIOMMUに利用可能なデフォルト数のクレジットをオーバーライドする構成レジスタを含む。例えば、システムは、必要に応じて各タイプの1つの未処理メッセージのみを許可するように、又は、タイプごとにすなわち1つの未処理MMIOレジスタ更新メッセージのみを許可するように構成することができる。利用可能なクレジットの数はブート中にプログラムされ、上述したように、マルチコンテキストサポートがイネーブルにされる前又は後にプログラムすることができる。
【0037】
利用可能なクレジットの数は、システム内のSDXIエンジンの数に依存し得る。例えば、16個未満のコンテキストがサポートされる場合、利用可能なクレジットの数は、1ソケットシステム等においてスケーリングすることができ、IOMMUコンテキストごとのクレジットの数は、32ではなく160に増加することができる。各IOMMUの構成レジスタは、サポートされる未処理のPPRログメッセージの総数、サポートされる未処理のイベントログメッセージの総数、サポートされる未処理のコマンドプロセッサの総数、サポートされる未処理のGAログメッセージの総数、及び、サポートされる未処理のMMIOレジスタ更新メッセージの総数を含む。
【0038】
異なるIOMMUの下で物理的にSDXIエンジンにサービスを提供するが、PPR Log、GA Log、EL Log、コマンドプロセッサ等のIOMMUの共有データ構造にアクセスすることをサポートし、IOMMUインスタンスにわたってMMIOレジスタプログラミングを同期させるために、IOMMUメッセージを使用して、マルチIOMMU同期ロジック150を介してIOMMU間でデータを転送する。IOMMUメッセージは、Route By ID復号を用いて送信され、他のIOMMUのみをターゲットとすることが予想される。
【0039】
IOMMUメッセージは、IOMMUのバスデバイス機能に基づいて、他のIOMMUの対応するI/Oスイッチを介して、IOMMUからI/Oスイッチ112を介してデータファブリックに転送され、データファブリックから他のIOMMUに転送され得る。IOMMUによって生成されたIOMMUメッセージは、所定のフォーマットを有し、そのままデータファブリックに送信され得る。他のIOMMUによってデータファブリックから受信されたメッセージは、必要に応じて、IOMMU、マルチIOMMU同期ロジック150に転送される前に、他の所定のフォーマットに変換され得る。
【0040】
各IOMMUは、同じサイクルで処理することができない他のIOMMUからのデータを受け入れるために、IOMMUインスタンスごとに所定量のバッファを実装する。これらのデータタイプは、PPRログ、イベントログ及びGAログ、並びに、コマンドプロセッサコマンドバッファのためのものである。各エントリは所定数のビットとすることができ、各バッファは所定量までのエントリを記憶することができる。上述のクレジット方式は、使用されたクレジット及び利用可能なクレジットを追跡するために使用される。クレジットは、クレジットタイプごとに個別のフィールドを有するIOMMUメッセージを介して解放される。IOMMUは、リセット後に他の各IOMMUバッファに対して所定数のクレジットを有する。レジスタオーバーライドは、デバッグ目的のために提供されることができ、より少ない最大数のSDXIエンジンがサポートされながら、より大きいデータが転送されることを可能にする。
【0041】
IOMMUは、データからのメッセージコード及びフィールドを使用して、受信されたIOMMUメッセージが所定のIOMMUメッセージフォーマットであることを確認する。所定のIOMMUメッセージフォーマットでないメッセージは、サポートされなくてもよく、アボートされ得る。例えば、IOMMUメッセージは、512ビットの最小データサイズであってもよく、最初の256ビットのデータは、カプセル化された周辺コンポーネントメッセージフィールドを含み、2番目の256ビットは、IOMMU固有フィールドを含む。最初の512ビットの後のデータペイロードは、128ビット整列され、IOMMUメッセージタイプデータとして扱われる。
【0042】
IOMMUメッセージは、IOMMUインスタンスID、クレジット解放等のメッセージタイプ、イベントログタイプ、PPRタイプ、コマンドプロセッサタイプ、GAログタイプ、MMIO制御及びステータスレジスタ更新、IOMMU除外ベースレジスタ更新、並びに、SDXIエラーのためのフィールドを含む。また、IOMMUメッセージは、SDXI物理機能のバス番号のためのフィールドを含む。例えば、IOMMUは、SDXIバス番号を記憶し、それを使用して自動PPR応答及びPPR応答をSDXIエンジンに直接ルーティングする。また、IOMMUメッセージは、以下に説明するように、IOMMUデバイステーブルベースアドレスレジスタメッセージ及びIOMMU除外ベースレジスタメッセージ等のIOMMU MMIOメッセージタイプのフィールドクレジット、スレーブIOMMUにリリースバックされるPPRクレジットのフィールド、スレーブIOMMUにリリースバックされるイベントログクレジットのフィールド、マスタIOMMUにリリースバックされるコマンドプロセッサクレジットのフィールド、スレーブIOMMUにリリースバックされるGAログクレジットのフィールド、マスタIOMMUがSDXIエンジンデバイス識別子及び機能識別子を記憶し、それを使用して自動PPR応答及びPPR応答をSDXIエンジン物理デバイス及び機能に直接ルーティングするSDXIエンジンの物理デバイス番号及び機能番号のフィールド、並びに、対応するメッセージタイプのSDXIメッセージペイロードのフィールドを含む。
【0043】
図3は、本開示の実施形態による、複数のIOMMUを含むプラットフォームアーキテクチャの一例を示す図である。例示的なアーキテクチャ300は、データ移動を容易にするために複数のアドレス空間をサポートするために提供される。
図3に示すように、アーキテクチャ300は、IOMMU302A及び302Bと、SDXIエンジン304A及び304B等の周辺コンポーネントエンドポイントと、データファブリック306と、メモリデバイス308と、CPU310と、を含む。IOMMU302A及び302Bは、マルチコンテキストIOMMUである。IOMMU302A及び302Bの各々は、デバイスのメモリページアクセスのために仮想から物理アドレス変換を実行するロジックを含む。また、アーキテクチャ300は、IOMMU302A及び302BとCPU310との間の通信を容易にするために、データファブリック306に結合されたI/Oスイッチ312A及び312Bを含んでもよい。I/Oスイッチ312A及び312Bは、それぞれIOMMU302A及び302Bに組み込むこともできる。
【0044】
いくつかの実施形態では、IOMMU302A及び302Bの各々は、DMAポート314と、ローカルMMIOレジスタ316等のローカルMMIOレジスタ及びリモートコンテキストMMIOレジスタ116b等のリモートコンテキストMMIOレジスタを含むMMIOレジスタ116aと、変換ルックアサイドバッファ(TLB)318と、作業待ち行列320と、ページテーブルウォーカー322と、イベントロガー324と、コマンドプロセッサ326と、PPRロガー328と、を含むか、それらにアクセスする。I/Oスイッチ312A/312B、DMAポート314、ページテーブルウォーカー322、イベントロガー324、コマンドプロセッサ326及びPPRロガー328は、相互接続315を介して互いに接続される。ページテーブルウォーカー322、イベントロガー324、コマンドプロセッサ326及びPPRロガー328は、相互接続317を介して互いに接続される。
【0045】
IOMMU302A及び302Bのうち1つ以上は、非ローカルIOMMUコンテキストに属するIOMMUによる変換を必要とするDMA要求をそれぞれのSDXIエンジン304A及び304Bから受信してもよい。これらの要求は、sATS及び非sATSモードで動作する、DMA未変換、DMA変換又はDMA事前変換タイプのものである。
【0046】
SDXIエンジン304A及び304Bは、固定及びアービトレートされた再マップ可能割り込み、並びに、他の割り込みを送信することができる。SDXIエンジン304A及び304Bは、
図3に示すように、機能グループ375と呼ばれる相互接続されたインスタンスの集合を含むことができるSDXIエンジンのグループ化であってもよい。IOMMUは、要求されたIOMMUコンテキストからのDTE及びIRTE構造を使用して割り込みを処理する。AVICがイネーブルにされている場合、IOMMUは、GAログの生成を必要とする可能性があり、これらは、新しいIOMMUVDMサポートを介して、GAログバッファ内のシリアル化された記憶のためにIOMMUコンテキスト所有者に転送される。
【0047】
IOMMU302A及び302Bは、それ自身のIOMMUコンテキストに関連付けられたイベントログを維持し、他のIOMMUからのイベントログがそのコンテキストに適用可能である場合、それらを受け入れる。同様に、IOMMU302A及び302Bは、コンテキストがイベントログをサポートする場合、適用可能なようにイベントログをIOMMUコンテキストオーナーに転送する。IOMMUメッセージは、IOMMU302A及び302Bにわたってイベントログを転送するために使用される。IOMMUマスタは、イベントログメッセージタイプを有するメッセージを受信すると、メッセージペイロードを有するイベントログバッファに直接書き込む。IOMMUスレーブは、ソフトウェア可視イベントログバッファにプッシュされるように、正しいイベントログフィールドを有するペイロードをフォーマットする。
【0048】
SDXIエンジン304A及び304Bは、異なるIOMMUインスタンスを仮想的にターゲットとするコンテキストに適用可能なPPRをIOMMU302A及び302Bにそれぞれ発行することができる。拡張PRIがサポートされている場合、IOMMU302A及び302Bは、DTEをフェッチし、メッセージを介してPPR要求をIOMMUコンテキストマスタに転送する前に、適用可能なチェックを実行する。拡張PRI機能がサポートされていない場合、DTEはフェッチされないが、要求は依然として転送される。IOMMU302A及び302Bがメッセージを介してPPRログを受信すると、これは、このIOMMUのコンテキストを仮想的にターゲットとするが、異なるIOMMUの下に物理的に配置されたPPR要求に対応する。IOMMU302A及び302Bは、ソフトウェアによるサービスのために、これらを関連するPPRバッファに記録する。
【0049】
拡張PRIサポートがイネーブルにされている場合、PPRは、IOMMUマスタによって受信された場合に、DTEの再フェッチを含む追加の処理を必要とする。性能強化として、IOMMU302A及び302Bは、PPRコマンドに付加され、IOMMUスレーブによって設定され、必要とされない場合にDTEをフェッチすることを回避するためにIOMMUマスタによって使用されるDTE_IGNOREビットを実装することができる。
【0050】
PPR自動応答メッセージ、及び、コマンドバッファからフェッチされた通常のPPR応答メッセージは、正しいSDXIエンジン304A/304Bリクエスタに直接転送される。これを容易にするために、IOMMU302A及び302Bは、発行SDXIエンジン304A/304BのIOMMUコンテキストをPPRページ要求グループインデックスフィールドの最上位ビットに符号化する。これは、システム上でサポートされるIOMMUコンテキストの数に依存して、SDXIエンジン304A/304Bに利用可能なPPRインデックスグループの数を制限する。IOMMUの下にないSDXIエンジン304A/304BをターゲットとするPPR自動応答メッセージは、所定のメッセージフォーマットでデータファブリックを介して送信される。SDXIエンジン304A/304BのターゲットバスID及び物理デバイス機能は、元のPPR要求のメッセージから記憶され、全てのPPR応答がこの宛先に転送される。SDXIエンジン304A/304Bは、グループインデックスフィールドを使用して、PRG応答をPPR要求にマッピングする。
【0051】
上述したように、各IOMMU302A及び302Bは、そのコンテキストに関連付けられたIOMMUデータ構造を無効化するために使用されるコマンドプロセッサ326を含む。各IOMMU302A及び302Bは、IOMMUメッセージフォーマットを用いてコマンドアクションテーブルに記述されているようにコマンドを他のIOMMUに転送する。コマンドは、HVコマンドキュー又はIOMMUコマンドキューの何れかから生じ得る。
【0052】
IOMMUメッセージを介してコマンドを受信するIOMMU302A及び302Bは、同じコンテキストからのコマンドに対してシリアルにコマンドをサービスする。デッドロックを防止するために、IOMMU302A及び302Bは、異なるコンテキストからのコマンドを並列に処理することができる。IOMMU302A及び302Bは、いくつかのIOMMUインスタンスに対するコマンドプロセッサクレジットが不足している場合、自身のコンテキスト上でコマンドの処理を停止することができるが、他のIOMMUコンテキストからのコマンドを処理することができなければならない。
【0053】
IOMMUコマンドプロセッサを介して受信された完了待ちコマンドが、IOMMUメッセージを用いて他の全てのIOMMUに転送されると、IOMMU302A及び302Bは、全てのコマンドプロセッサクレジットが返されるまで、より多くのコマンドの発行を停止することができる。また、IOMMU302A及び302Bは、完了待ちライトバック又は割り込みを実行する前に、同期機構として全てのクレジットを待つことができる。
【0054】
【0055】
IOMMU302A及び302Bのマスタコマンドプロセッサ326は、ATSがイネーブルにされている場合、それぞれSDXIエンジン304A及び304BのATキャッシュをフラッシュアウトするために使用され得る。SDXI IOTLBキャッシュを無効にするために、IOTLB無効化コマンドがIOMMUコマンドプロセッサ326にプッシュされ、その後に完了待ちコマンドが続く。IOMMUは、SDXI SR-IOV範囲を対象とするコマンドプロセッサ326からの任意のIOTLB無効化をフィルタリングしてドロップし、次いで、IOMMUは、SDXIエンジン物理デバイス機能のアドレス空間全体を無効化する単一の内部IOTLBを生成する。IOMMUは、最後に実行された完了待ちコマンド以降にSDXIターゲットIOTLB無効化を受信しない限り、SDXIエンジンに内部IOTLB無効化を発行しない。任意のIOTLB無効化コマンドを受信すると、SDXIエンジンは、全てのIOMMUコンテキスト及び仮想/物理機能にわたって、全ての内部に記憶された変換データをクリアした後に、IOTLBに肯定応答する。IOMMUは、IOMMUメッセージを介してスレーブIOMMUコンテキストに転送される完了待ちコマンドのためのフィールドを設定する。IOMMUスレーブコンテキストが、フィールドが設定された完了待ちを受信した場合、IOMMUは、内部IOTLBをSDXIエンジンに発行する。
【0056】
図4は、いくつかの実施形態による、
図3のMMIOレジスタ更新フローのブロック図である。
図4に示されるように、ソフトウェアは、長い破線によって示されるような構成及び初期化経路を使用して、IOMMU302B内のローカルコンテキストを直接プログラムする。IOMMU302Bは、IOMMUメッセージを使用して、IOMMU302A等の他の全てのIOMMUにローカルレジスタをマルチキャストする。
【0057】
図5は、いくつかの実施形態による、
図3のDMA要求フローのブロック図である。
図5に示されるように、SDXIエンジン304Aのクロスコンテキスト要求発行装置355からの各DMA要求は、IOMMUコンテキスト識別子を搬送し、IOMMU302AのマルチIOMMU同期ロジック350によって、DMA要求を変換するために何れのIOMMUコンテキストを使用するかを識別するために使用される。各IOMMUコンテキストは、独立してプログラムされることが可能であり、ドメインID等のための異なるデータ構造又は再使用符号化を指すことが可能である。TLBは、一致するコンテキストの変換を検索するために、コンテキスト識別子で更にタグ付けされる。MMIOレジスタ316のコンテキストレジスタは、着信コンテキスト識別子に基づいて使用される。コンテキストレジスタは、リモートIOMMUコンテキストを使用して変換される各コンテキストDMAアクセスがローカルIOMMUコンテキストの物理DMAポートを介して依然として発生するため、ソフトウェアによって独立してプログラムされ得るデバイステーブル等のデータ構造を指す。
【0058】
図6は、本開示の実施形態による、複数のアドレス空間の間のデータ移動を提供するための方法を示すフローチャートである。動作は、任意の適切な順序で実行されてもよい。
図6に示すように、方法600は、IOMMU302A及び302BのマルチIOMMU同期ロジック350等によって、複数のIOMMUのうち別のIOMMUのコンテキストデータを記憶するステップ602を含む。IOMMU302A及び302B等の複数のIOMMUの各々は、複数のアドレス空間のうち異なるアドレス空間に関連付けられたSDXIエンジン304A及び304Bのクロスコンテキスト要求発行装置355等の異なるメモリアクセス要求装置に関連付けられる。IOMMUの各々は、複数のアドレス空間の各々に関連付けられたメモリアクセス要求装置のためのアドレス変換をマッピング/提供する、MMIOレジスタ316等の複数のメモリマップト入出力(MMIO)レジスタを含む。
【0059】
図6に示されるように、方法600は、IOMMUによって、IOMMUの複数のMMIOレジスタを複数のIOMMUの複数のMMIOレジスタと同期させるステップ604を含む。IOMMUの複数のMMIOレジスタを複数のIOMMUの複数のMMIOレジスタと同期させることは、IOMMUによって、複数のIOMMUの複数のMMIOレジスタのコンテキストデータを用いてIOMMUの複数のMMIOレジスタを初期化することと、IOMMUによって、複数のIOMMUの複数のMMIOレジスタに対する変更を追跡することと、を含む。複数のIOMMUの複数のMMIOレジスタのコンテキストデータを用いてIOMMUの複数のMMIOレジスタを初期化することは、IOMMUによって、複数のIOMMUの各IOMMUについて、IOMMUのコンテキストID及びIOMMUのアドレスを受信することを含む。更に、複数のIOMMUの複数のMMIOレジスタに対する変更を追跡することは、IOMMUのMMIOレジスタが変更された場合に、IOMMUによって複数のIOMMUにメッセージを送信することと、複数のIOMMUの別のIOMMUのMMIOレジスタが変更された場合に、IOMMUによって複数のIOMMUの別のIOMMUからメッセージを受信することと、を含む。
【0060】
ブロック606に示すように、方法600は、IOMMU302A及び/又は302B等のIOMMUによって、ダイレクトメモリアクセス(DMA)要求を受信することを含み、DMA要求は、コンテキストデータと、複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能のPCIセグメント/バス/デバイス/機能等の機能識別子と、を含む。例えば、DMA要求は、IOMMUが要求されたアドレスに対してアドレス変換を実行するために、必要とされる適切なIOMMUコンテキストを識別するために使用される機能識別子と共に発行される。すなわち、各IOMMUコンテキストは、機能識別子空間の一意のサブセットに関連付けられる。機能識別子は、複数のアドレス空間に関連付けられてもよく、DMA要求は、任意選択で、プロセスアドレス空間識別子(PASID)を含んでもよく、機能識別子とPASIDの組合せは、アドレス変換に使用される、例えば、ゲスト及びホストページテーブル等のページテーブル又はネストされたページテーブルのセットを参照するために組み合わされる。
【0061】
DMA要求は、複数のIOMMUのうち別のIOMMUに結合されたSDXIエンジン304A及び304Bのクロスコンテキスト要求発行装置355等の周辺コンポーネントエンドポイントから受信される。機能は、周辺コンポーネントエンドポイント機能であり、複数のIOMMUのうち別のIOMMUに結合された周辺コンポーネントエンドポイントの物理機能及び複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである。(
図2参照)。
【0062】
ブロック608に示すように、方法600は、IOMMU302A及び302BのDMAポート314、作業待ち行列310、TLB318、MMIOレジスタ316、及び、マルチIOMMU同期ロジック350等のIOMMUによって、DMA要求に応じて別のIOMMUに属するメモリアドレス空間へのダイレクトメモリアクセスを提供することを含む。
【0063】
図7は、本開示の実施形態による、ハイパーバイザと少なくとも1つの仮想マシンとの間等のデータ移動を容易にするために複数のメモリアドレス空間をサポートするための方法を示すフローチャートである。動作は、任意の適切な順序で実行されてもよい。
図7に示すように、方法700は、IOMMU302A及び302BのマルチIOMMU同期ロジック350等によって、複数のIOMMUの入出力メモリ管理ユニット(IOMMU)において、複数のIOMMUの別のIOMMUのコンテキストデータを受信するステップ702を含む。複数のIOMMUの各々は、MMIOレジスタ316等の複数のメモリマップト入出力(MMIO)レジスタを含み、MMIOレジスタは、複数のIOMMUのそれぞれのIOMMUに属するメモリアドレス空間のための、ページテーブル等のメモリデータ構造と組み合わせてアドレス変換を提供する。
【0064】
図7に示されるように、方法700は、IOMMUによって、IOMMUの複数のMMIOレジスタを複数のIOMMUの複数のMMIOレジスタと同期させるステップ704を含む。IOMMUの複数のMMIOレジスタを複数のIOMMUの複数のMMIOレジスタと同期させることは、IOMMUによって、複数のIOMMUの複数のMMIOレジスタのコンテキストデータを用いてIOMMUの複数のMMIOレジスタを初期化することと、IOMMUによって、複数のIOMMUの複数のMMIOレジスタに対する変更を追跡することと、を含む。複数のIOMMUの複数のMMIOレジスタのコンテキストデータを用いてIOMMUの複数のMMIOレジスタを初期化することは、IOMMUによって、複数のIOMMUの各IOMMUについて、IOMMUのコンテキストID及びIOMMUの位置を受信することを含む。更に、複数のIOMMUの複数のMMIOレジスタに対する変更を追跡することは、IOMMUのMMIOレジスタが変更された場合に、IOMMUによって複数のIOMMUにメッセージを送信することと、複数のIOMMUの別のIOMMUのMMIOレジスタが変更された場合に、IOMMUによって複数のIOMMUの別のIOMMUからメッセージを受信することとを含む。
【0065】
ブロック706に示すように、方法700は、IOMMU302A及び/又は302B等のIOMMUに結合された周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信することを含み、DMA要求は、コンテキストデータと、複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能のPCIセグメント/バス/デバイス/機能等の機能識別子と、を含む。例えば、DMA要求は、IOMMUが要求されたアドレスに対してアドレス変換を実行するために、必要とされる適切なIOMMUコンテキストを識別するために使用される機能識別子と共に発行される。すなわち、各IOMMUコンテキストは、機能識別子空間の一意のサブセットに関連付けられる。機能識別子は、複数のアドレス空間に関連付けられてもよく、DMA要求は、任意選択で、プロセスアドレス空間識別子(PASID)を含んでもよく、機能識別子とPASIDの組合せは、アドレス変換に使用される、例えば、ゲスト及びホストページテーブル等のページテーブル又はネストされたページテーブルのセットを参照するために組み合わされる。
【0066】
DMA要求は、複数のIOMMUのうち別のIOMMUに結合されたSDXIエンジン304A及び304Bのクロスコンテキスト要求発行装置355等の周辺コンポーネントエンドポイントから受信される。機能は、周辺コンポーネントエンドポイント機能であり、複数のIOMMUのうち別のIOMMUに結合された周辺コンポーネントエンドポイントの物理機能及び複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである。(
図2参照)。
【0067】
ブロック708に示されるように、方法700は、IOMMUによって、DMA要求のコンテキストデータに基づいて、IOMMUの複数のMMIOレジスタにアクセスすることを含む。DMA要求のコンテキストデータに基づいて、IOMMUの複数のMMIOレジスタにアクセスすることは、DMA要求のコンテキストデータを復号することと、復号されたコンテキストデータに基づいて、複数のMMIOレジスタのうち特定の複数のMMIOレジスタにアクセスすることと、復号されたコンテキストデータに基づいて変換ルックアサイドバッファをロードすることと、復号されたコンテキストデータに基づいて、DMA要求を変換することと、を含む。次いで、ブロック710に示すように、方法700は、アクセスされた複数のMMIOレジスタに基づいて、IOMMUから、別のIOMMUに属するコンテキストによって参照されるページテーブルにアクセスすることを含む。特に、別のIOMMUに属するメモリアドレス空間に割り当てられた機能にアクセスすることは、アクセスされた特定の複数のMMIOレジスタ及び変換されたDMA要求に基づく。次いで、ブロック712に示すように、方法700は、IOMMUによって、アクセスされたページテーブルを使用してDMA要求に対するアドレス変換を実行することを含む。最後に、ブロック714に示すように、方法700は、IOMMUによって、DMA要求及び変換されたアドレスに基づいてメモリアクセスを実行することを含む。
【0068】
上述したように、本開示は、ソフトウェアトランスペアレントな方法で、複数のルートツリーにおいて、周辺コンポーネントデバイス、SDXIエンジン、及び、PCIエンドポイント等のI/Oデバイスのための保護及びアドレス変換を提供するコンテキストアウェアIOMMUに関する。このソリューションは、コンテキストアウェアIOMMUを使用してリモートDMAを実行するために、異なるルートコンプレックスの下で接続された高度なこれらのI/Oデバイスを可能にする。
【0069】
コンテキストアウェアIOMMUは、システムオンチップ等のチップ、I/O電力及び性能の分析によって検出可能であり得る。更に、チップの相互接続を検討すると、周辺コンポーネントエンドポイント間に直接的な物理的接続が存在するかどうかが示される。例えば、変換サービスが特定のコンポーネントの一部であり、周辺コンポーネントエンドポイント間に大量の直接物理接続が存在せず、ソフトウェアがシステムにおいてIOMMUを報告させるようにプログラムされている場合、コンテキストアウェアIOMMUが存在する可能性が高い。
【0070】
図8は、本開示の実施形態による、プラットフォームアーキテクチャ800の別の例を示す。DMAエンジン840A及び840Bをそれぞれ含むSDXIエンジン804A及び804Bは、SR-IOV PF及び複数のSR-IOV VFを通してソフトウェアにさらされ、その各々は、メモリデバイス808内の異なるアドレスドメイン及びこれらの機能間でデータを移動させる能力にマッピングされ得る。SDXIエンジン804A及び804Bは、HV及びCPUリソースをオフロードし、少なくとも2つのゲストOS又はゲストOSとHVとの間のデータ転送を維持するために必要とされるソフトウェアスタックの複雑さを低減する。
【0071】
帯域幅要件を満たすために、SDXIエンジン804A及び804Bは、それぞれのルートポート860A及び860Bを介して個別のIOMMU802A及び802Bと統合され、データファブリック806のデータファブリック経路は、システムメモリ808に統合される。例えば、システムでは、ソケットごとに4つのSDXIエンジンが存在し、4つのソケット能力を有し、したがって、システム内に最大16個のSDXIエンジンが存在し得る。ソフトウェアオーバーヘッドを低減し、ソフトウェアからのシステムレベル実装を不明瞭にするために、VM及びHVは、SDXIエンジンのための複数のDTEを維持することを回避する。各SDXIエンジンは、PF及び複数のVFを有するが、各VMは、1つのVFにアタッチする必要があるだけであり、いくつのSDXIエンジンインスタンスがシステム上に存在するかにかかわらず、全てのSDXIエンジンインスタンスを利用して、任意の他のSDXIエンジンPF/VF間のデータ転送を容易にすることができる。したがって、システムは、本開示の実施形態で説明されるように、1つのIOMMUインスタンスの下のI/Oデバイスが、別のIOMMUインスタンスに仮想的に接続されているように見えることを可能にする。本開示の特定の実施形態では、システムトポロジは、同じルートコンプレックス内の2つのルートポートのうち何れかに各々接続された2つのSDXIエンジンが存在する場合を含むことができる。両方のルートポートは、システム内の複数のIOMMUのうち単一のIOMMUによってサービスされる。
【0072】
図8に示すように、SDXIエンジン804A及び804Bは、互いのリクエスタIDを使用してDMA要求を生成することができる機能の集合である機能グループ内にある。マルチコンテキストIOMMU機能の使用をイネーブルにする場合、各IOMMUインスタンスは、一意のコンテキストIDに割り当てられる。SDXIエンジン804A又はSDXIエンジン804B等のSDXIエンジンは、機能グループ内の全てのSDXIエンジン上のPF及びVFのような全ての機能のセットのうち何れの機能がDMA要求を生成しているかを示す。DMA要求を受信するIOMMUは、これらの指標を使用して、DMA要求を変換するために何れのIOMMUコンテキストを使用するかを決定する。機能番号は、標準的なリクエスタID(バス/デバイス/機能)を使用して、例えばPCIeバス等のバスを介して通信され得る。また、追加の機能識別情報は、セグメントID等のバスを介して又はユーザビット等の独自の手段を介してシステムハブに伝達されてもよい。指標が設定されていない場合、要求は、コンテキストがIOMMUの一意のコンテキストIDにプログラムされているかのように処理され、デバイスはIOMMUに物理的に接続される。
【0073】
各SDXIエンジンは、識別子フィールドで符号化された複数のVFにまたがる。BDF(登録商標)割り当ては、IOMMUコンテキストに関連しており、したがって、NBIF二次/従属バス番号等のハブ番号に基づいて導出されるSDXIエンジンバス番号範囲もコンテキスト固有である。IOMMUコンテキストにわたって、BDF(登録商標)割り当ては、異なるデバイス間で重複する可能性があり、これらのデバイスは、必ずしもメモリページを共有せず、異なるDTEを有する。
【0074】
ルートポート860A及び860Bは、デバイスメモリアクセスのための仮想アドレスから物理アドレス変換への実行を支援するハードウェア制御ロジックを含む。上述したように、SDXIエンジン804A及びSDXIエンジン804Bは、VM間、コンテナ間、又は、セキュリティポリシーが分離されたアドレス空間を必要とする通信を加速するためのソフトウェア及びハードウェアソリューションを提供する。SDXIエンジンは、異なる保護されたメモリ空間間でデータを移動させることを可能にする高度なデータムーバ能力と、CPU及びメモリリソースのより良好な使用と、を使用して、2つの周辺コンポーネントデバイス間をブリッジする独自のハードウェア設計を介してこれを達成し、これは、レイテンシの大幅な減少、帯域幅の増加を達成し、したがって、より大きいVMスケーリングを可能にする。
【0075】
図示した実施形態において、SDXIエンジン804A及びSDXIエンジン804Bの各々は、ルートポート860A及び860Bを含む複数の周辺コンポーネント相互接続バスを介して、それぞれのIOMMU802A及び802Bと相互接続される。IOMMU802A及び802Bは、I/Oリソース、メモリデバイス808、及び、プラットフォームアーキテクチャ800の他のコンポーネントの間のインタフェースとして動作する。上述したように、プラットフォームアーキテクチャ800は、物理リソースが複数のVMをサポートする仮想化環境を提供し、各VMは、個別のゲストOSカーネルと、対応するVMのゲストOSカーネルによってサポートされる1つ以上のゲストソフトウェアアプリケーションと、を実装する。
【0076】
SDXIエンジンは、物理的に接続されたルートポートに属し、同じグループID値の他のSDXIエンジンのための変換を処理する能力を有する。ルートポート860A及び860Bを含む複数の周辺コンポーネント相互接続バスは、1つのSDXIエンジンインスタンスが別のSDXIエンジンインスタンスの代わりにDMA及び割り込みを生成することができるように、任意の他のインスタンスとして動作することができ、複数の周辺コンポーネント相互接続バスは、例えばMSI-X、BusMasterEn、ACS等の適切な制御を使用することができる。ルートポート860A及び860Bを含む複数の周辺コンポーネント相互接続バスは、割り込み生成、バスマスタイネーブルブロッキングDMA、エラー報告等の制御によって駆動されるロジックと共に、ルートポート及びエンドポイントコンポーネントの両方のための周辺コンポーネント構成空間レジスタを含む。SDXIエンジンの各物理インスタンスは、1つのPFと、1つのルートポートの下に位置するいくつかのVF、例えば64個のVFとを有するSR-IOV周辺コンポーネントエンドポイントである。各SDXIエンジンインスタンスは、異なるルートポートの下に存在し、各周辺コンポーネント相互接続バスインスタンスは、それ自体のローカルにアタッチされたSDXIエンジンインスタンスのためのSDXIエンジンルートポート及びエンドポイントレジスタの全てと、全ての他の周辺コンポーネント相互接続バスインスタンス/SDXIエンジンインスタンスによってホストされる同等のレジスタ/ロジックと、を含む。
【0077】
図8に示されるように、ルートポート860A及びSDXIエンジン804Aは、PF0及びVF0
*のソフトウェアビューを含み、SDXIエンジン804Aは、PF0、PF1、VF0
*又はVF1
*識別子を使用してDMAを生成することができる。ルートポート860B及びSDXIエンジン804Bは、PF1及びVF1
*のソフトウェアビューを含み、SDXIエンジン804Bは、PF0、PF1、VF0
*又はVF1
*識別子を使用してDMAを生成することができる。SDXIエンジン804Aの場合、ソフトウェアは、PF0及びVF0
*の一次構成空間を直接書き込むことができ、PF1及びVF1
*の二次構成空間は、その状態が一次構成から順方向であるコピーである。同様に、SDXIエンジン804Bの場合、ソフトウェアは、PF1及びVF1
*の一次構成空間を直接書き込むことができ、PF0及びVF0
*の二次構成空間は、その状態が一次構成から順方向であるコピーである。更に、レジスタ状態及び特別な場合のデータの低帯域幅交換は、例えばバスを介して、SDXIエンジン804Aと804Bとの間、及び、ルートポート860Aと860Bとの間を流れることができる。追加的及び/又は代替的に、データファブリック806は、この情報を転送するために使用され得る。
【0078】
ルートポートメッセージ/通信は、適用可能な更新が書き込まれた場合に、他のSDXIエンジン及びIOMMUインスタンスに接続された全てのリモートルートポートを自動的に更新するために使用される。例えば、ローカルルートポートは構成を監視し、リモート範囲がヒットした場合、リモートルートポートへの一致する値のトランザクションを行うことができる。リモートルートポートは、トランザクションを受信し、ルックアップテーブル値に従ってデコードする。
【0079】
各ルートポートは、その構成レジスタ/内部レジスタの少なくとも一部を他のリモートルートポートにシャドウする。例えば、16個のルートポートがある場合、シャドウ機構は、そのシャドウ化されるべきレジスタの値に変化が検出されている限り、1DWのサイズでの1対15ブロードキャストである。
【0080】
リモートルートポートにおいて、各ルートポートは、15個の他のルートポートのような他のリモートルートポートからのシャドウ化レジスタコピーを維持する。単一ルートポートの場合、リモートルートポートコピー及びローカルルートポートの内部レジスタは、ルックアップテーブル(LUT)を構成する。SDXIエンジンのためのDMAトランザクションが存在すると、トランザクションの属性(インスタンスIDによって示されるリモートノード、PFであるかVFであるか、VFID等)に従って、LUTから情報を得るための内部チェックが存在し、次いで、対応する周辺コンポーネント関連チェックを実行する。
【0081】
例えば、構成レジスタ/内部レジスタのその部分を他のリモートルートポートにシャドウする能力を有するSDXIエンジン機能を有するルートポートの場合、SDXIエンジンPF関連レジスタ(PFごと)、ポート0関連レジスタ(ポートごと)、及び、SDXIエンジンVF関連レジスタ(VFごと)を含む。リモートルートポートのローカルルートポート認識を可能にするために、初期構成段階において、ファームウェアは、リモートトランザクションを可能にするようにいくつかのレジスタをプログラムすることができる。
【0082】
SDXIエンジンが周辺コンポーネントエンドポイント機能として動作する場合、ルートポートは、その周辺コンポーネント構成レジスタを物理的にルートポート内に保持し、SDXIエンジン用の周辺コンポーネントパッケージを送受信し、DMAトランザクションを処理し、SDXIエンジン用の周辺コンポーネントイベント管理を処理する。上述したように、各SDXIエンジン804A及び804Bは、PF及び複数のVFを有する。各VMは、1つのVFにアタッチする必要があるだけであり、いくつのSDXIエンジンインスタンスがシステム上に存在するかにかかわらず、全てのSDXIエンジンインスタンスを利用して、任意の他のSDXIエンジンPF/VF間のデータ転送を容易にすることができる。したがって、システムは、本開示の実施形態で説明されるように、1つのIOMMUインスタンス及び1つのルートポートインスタンスの下のI/Oデバイスが、別のIOMMUインスタンス及び別のルートポートインスタンスに仮想的に接続されているように見えることを可能にする。ソフトウェアは、SDXIエンジンエンドポイント及び関連するルートポート構成空間レジスタの一次コピーに書き込む。ハードウェアは(非割り込み)情報を他の全てのインスタンスに転送する。
【0083】
また、プラットフォームアーキテクチャ800は、MSI又はMSI-X割り込みを使用する信号割り込み等の割り込みの配信をサポートする。例えば、各SDXIエンジン804A及び804Bに対して1つのPF及び128のVFが存在し、各機能が1つのMSIベクトル及び140のMSI-Xベクトルをサポートする場合、ベクトル情報を記憶するために多くの空間が必要とされる。このエリアのサイズを減少させるために、MSI/MSI-X能力のいくつかのレジスタが、メモリデバイス808のメモリカーブアウト808Bに記憶される。割り込みの配信をサポートするために、SDXIエンジンエンドポイント機能のためのレジスタ状態が交換される。例えば、各エンドポイント機能(PF又はVF)は、交換されるルートポートバージョンとは別のバスマスタイネーブル制御も含む。割り込みは、エンドポイント機能構成/MMIO空間においてプログラムされる。
【0084】
ソフトウェアがSDXIエンジン機能のこれらのMSI/MSI-X能力にアクセスしたい場合、SDXIエンジンは、ルートポート860A/860Bを介して、メモリデバイス808のメモリカーブアウト808Bから情報を取得し、ソフトウェアに戻る。MSI能力の場合、メッセージアドレス、メッセージ上位アドレス、メッセージデータ、マスクビット、及び、保留ビットは、メモリデバイス808のメモリカーブアウト808Bに記憶される。MSI-X能力の場合、メッセージアドレス、メッセージ上位アドレス、メッセージデータ、STテーブル、マスクビット、及び、保留ビットは、メモリデバイス808のメモリカーブアウト808Bに記憶される。他のタイプは、必要に応じてエンドポイント機能内に記憶される。
【0085】
SDXIエンジンエンドポイント機能のこれらのMSI/MSI-X能力を有効にするために、初期構成段階において、ファームウェアは、リモートトランザクションを可能にするようにいくつかのレジスタをプログラムすることができる。ファームウェアは、メモリデバイス808内のMSI/MSI-X能力のための空間を確保し、メモリデバイス808のメモリカーブアウト808Bを有効にすることができる。ファームウェアは、ルートポート860A/860Bを介して、メモリデバイス808内のメモリカーブアウト808Bのベースアドレスを示し、メモリデバイス808内のメモリカーブアウト808Bが準備完了であることを示す、SDXIエンジンエンドポイント機能内のレジスタに書き込むことができる。ソフトウェアは、MSI/MSI-X能力を構成するために、ルートポート860A/860Bを介して構成送信を送信することができ、ソフトウェアは、SDXIエンジンエンドポイント機能においてMSI/MSI-X能力をイネーブルにすることができる。次いで、ハードウェアは、SDXIエンジン804A及び804B割り込みを受信する準備ができており、CPU880は、MSI/MSI-X能力にアクセスすることができる。
【0086】
図9は、いくつかの実施形態による、
図8の割り込みトランザクションのブロック図である。
図9に示すように、SDXIエンジン804A及び804Bの各々は、論理的にMSI/MSI-X割り込み制御レジスタを含む。しかしながら、実レジスタに記憶する代わりに、情報は、SDXIエンジンの全てのインスタンスによってアクセス可能なメモリデバイス808の共有メモリカーブアウト808Bに記憶される。ソフトウェアは、エンドポイント構成空間の一次インスタンスに書き込み、次に、その情報をメモリデバイス808の共有メモリカーブアウト808Bに反映する。MSI制御は、構成空間に完全に配置することができる。MSI-Xの場合、ほとんどの情報(アドレス/データ等)は、MMIO空間を介してソフトウェアによってアクセスすることができる。デバイス割り込み時に、一次インスタンス及び二次インスタンスは、メモリデバイス808の共有メモリカーブアウト808Bからの情報にアクセスすることができる。
図9は、SDXIエンジン804AのDMA840AからのPF0割り込みを示しており、これは、長い破線で示されているように、ローカル機能PF0からの割り込みである。PF0割り込みがSDXIエンジン804AのDMA840Aからのものである場合、エンドポイントMSI/MSI-X割り込み情報PF0は、メモリデバイス808の共有メモリカーブアウト808Bから取り出される。次いで、割り込み情報が返され、次いで、割り込みを、ルートポート860A、IOMMU802A及びデータファブリック806を介して、CPU880等の割り込みターゲットに送信することができる。
【0087】
図10は、いくつかの実施形態による、
図8の割り込みトランザクションのブロック図である。
図10に示すように、SDXIエンジン804A及び804Bの各々は、論理的にMSI/MSI-X割り込み制御レジスタを含む。しかしながら、上述したように、実レジスタに記憶する代わりに、情報は、SDXIエンジンの全てのインスタンスによってアクセス可能なメモリデバイス808の共有メモリカーブアウト808Bに記憶される。ソフトウェアは、エンドポイント構成空間の一次インスタンスに書き込み、次に、その情報をメモリデバイス808の共有メモリカーブアウト808Bに反映する。デバイス割り込み時に、一次インスタンス及び二次インスタンスは、メモリデバイス808の共有メモリカーブアウト808Bからの情報にアクセスすることができる。
図10は、SDXIエンジン804BのDMA840BからのVF0_n割り込みを示し、これは、長い破線によって示されるようなリモート機能VF0_nからの割り込みである。VF0_n割り込みがSDXIエンジン804BのDMA840Bからのものである場合、エンドポイントMSI/MSI-X割り込み情報VF0_nは、メモリデバイス808の共有メモリカーブアウト808Bから取り出される。次いで、割り込み情報が返され、次いで、割り込みを、ルートポート860B、IOMMU802B及びデータファブリック806を介して、CPU880等の割り込みターゲットに送信することができる。
【0088】
図11は、いくつかの実施形態による、
図8の割り込みレジスタのソフトウェアプログラミングのためのブロック図である。
図11に示されるように、VF0_0ソフトウェアドライバは、VF0_0 MSI/MSI-Xレジスタをプログラムすることができ、そのデータは、メモリデバイス808の共有メモリカーブアウト808Bに配置される。VF0_0 MSI/MSI-Xレジスタのソフトウェアプログラミングのみが
図11に示されているが、ソフトウェアは、エンドポイント構成空間の一次インスタンスの何れかに書き込むことができ、それは、次いで、情報をメモリデバイス808の共有メモリカーブアウト808Bに反映する。デバイス割り込み時に、一次インスタンス及び二次インスタンスは、メモリデバイス808の共有メモリカーブアウト808Bからの情報にアクセスすることができる。
【0089】
図12は、いくつかの実施形態による、
図8のDMA要求フローのブロック図である。
図12に示すように、各DMAは、クロスコンテキスト要求発行装置から要求する(例えば、
図3を参照されたい。)。SDXIエンジン804BのDMA840BからのDMAは、何れの機能が使用されているか(一次/ローカルであるか二次/リモートであるか)にかかわらず、ルートポートインフラストラクチャの同じ部分に流れ込む。要求を処理するために、バスマスタイネーブルの適切なコピー等のように、全ての適切なルートポート制御が適用される。各DMA要求は、ルートポート860B及び/又はIOMMU802Bによって使用されるコンテキスト識別子を搬送して、DMA要求を通信し、DMA要求を変換するために何れのコンテキストを使用するかを識別する。各コンテキストは、独立してプログラムされることが可能であり、ドメインID等のための異なるデータ構造又は再使用符号化を指すことが可能である。ルートポート860B及び/又はIOMMU802Bのコンテキストレジスタは、着信コンテキスト識別子に基づいて使用される。コンテキストレジスタは、リモートコンテキストを使用して変換される各コンテキストDMAアクセスがローカルコンテキストの物理DMAポートを介して依然として発生するため、ソフトウェアによって独立してプログラムされ得るデバイステーブル等のデータ構造を指す。長い破線によって示されるように、例示的なDMAフローは、PF1アドレス空間からのフェッチ記述子コマンドを含む。一点鎖線によって示されるように、例示的なDMAフローは、VF0_0アドレス空間を使用するソースバッファからの読取りデータを含む。一点鎖線によって示されるように、例示的なDMAフローは、VF1_0アドレス空間を使用する宛先バッファへの書込みデータを含む。
【0090】
図13は、本開示の実施形態による、複数のアドレス空間の間のデータ移動を提供するための方法を示すフローチャートである。動作は、任意の適切な順序で実行されてもよい。
図13に示されるように、方法1300は、ルートポート860A及び860B等によって、複数のルートポートのうち別のルートポートのコンテキストデータを記憶するステップ1302を含む。複数のルートポートの各ルートポートは、複数のIOMMUのうち対応するIOMMUと、複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントと、に結合される。例えば、ルートポート860A及び860Bのような複数のルートポートの各々は、複数のアドレス空間のうちの異なるアドレス空間に関連付けられたクロスコンテキスト要求発行装置、例えば、SDXIエンジン804A及び804BのDMA840A又は840Bのような異なるメモリアクセス要求元(周辺コンポーネントエンドポイント)に関連付けられる。また、ルートポート860A及び860B等の複数のルートポートの各々は、IOMMU802A及び802B等の異なるIOMMUに関連付けられ、IOMMUは、複数のアドレス空間のうち異なるアドレス空間に関連付けられる。各ルートポートは、複数のレジスタを含む。複数のレジスタは、例えば、ルートポートを介してDMAを許可するか否かを制御するバスマスタイネーブル用のレジスタを含む。また、複数のレジスタは、例えば、(バス/デバイス/機能の)要求に関連付けられたバス番号がルートポートに割り当てられたバス番号の範囲内にあるかどうか等のように、DMA要求に対する基本的なセキュリティチェックを提供するPCIe ACS制御のためのレジスタを含む。
【0091】
図13に示されるように、方法1300は、ルートポートによって、ルートポートの複数のレジスタを複数のルートポートの複数のレジスタと同期させるステップ1304を含む。ルートポートの複数のレジスタを複数のルートポートの複数のレジスタと同期させることは、ルートポートによって、複数のルートポートの複数のレジスタのコンテキストデータを用いてルートポートの複数のレジスタを初期化することと、ルートポートによって、複数のルートポートの複数のレジスタに対する変更を追跡することと、を含む。複数のルートポートの複数のレジスタのコンテキストデータを用いてルートポートの複数のレジスタを初期化することは、複数のルートポートの各ルートポートについて、ルートポートによって、ルートポートのコンテキストID及びルートポートのアドレスを受信することを含む。更に、複数のルートポートの複数のレジスタに対する変更を追跡することは、ルートポートのレジスタが変更された場合に、ルートポートによって複数のルートポートにメッセージを送信することと、複数のルートポートの別のルートポートのレジスタが変更された場合に、ルートポートによって複数のルートポートの別のルートポートからメッセージを受信することと、を含む。
【0092】
ブロック1306に示されるように、方法1300は、ルートポート860A及び/又は860B等のルートポートによって、ダイレクトメモリアクセス(DMA)要求を受信することを含み、DMA要求は、コンテキストデータと、複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能のPCIセグメント/バス/デバイス/機能等の機能識別子と、を含む。例えば、DMA要求は、対応するIOMMUが要求されたアドレスに対してアドレス変換を実行するために、必要とされる適切なIOMMUコンテキストを識別するために使用される機能識別子と共に発行される。すなわち、各IOMMUコンテキストは、機能識別子空間の一意のサブセットに関連付けられる。機能識別子は、複数のアドレス空間に関連付けられてもよく、DMA要求は、任意選択で、プロセスアドレス空間識別子(PASID)を含んでもよく、機能識別子とPASIDの組合せは、アドレス変換に使用される、例えば、ゲスト及びホストページテーブル等のページテーブル又はネストされたページテーブルのセットを参照するために組み合わされる。DMA要求は、複数のルートポートのうち何れかのルートポートを介して複数のIOMMUのうちの対応するIOMMUに結合された、SDXIエンジン804A/804Bのクロスコンテキスト要求発行装置(DMA840A又はDMA840B)等の対応する周辺コンポーネントエンドポイントから受信される。機能は、周辺コンポーネントエンドポイント機能であり、複数のルートポートのうちの別のルートポートを介して複数のIOMMUのうち別のIOMMUに結合された複数の周辺コンポーネントエンドポイントのうち別の周辺コンポーネントエンドポイントの物理機能及び複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである。
【0093】
ブロック1308に示すように、方法1300は、DMA要求に応じて、別のIOMMUに属するメモリアドレス空間へのダイレクトメモリアクセスを、ルートポートを介して提供することを含む。
【0094】
図14は、本開示の実施形態による、ハイパーバイザと少なくとも1つの仮想マシンとの間等のデータ移動を容易にするために複数のメモリアドレス空間をサポートするための方法を示すフローチャートである。動作は、任意の適切な順序で実行されてもよい。
図14に示すように、方法1400は、ルートポート860A及び860B等の複数のルートポートのうち何れかのルートポートにおいて、複数のルートポートのうち別のルートポートのコンテキストデータを受信するステップ1402を含む。複数のルートポートの各ルートポートは、IOMMU802A及び802B等の複数のIOMMUの対応する入出力メモリ管理ユニット(IOMMU)と、SDXIエンジン804A及び804B等の複数の周辺コンポーネントエンドポイントの対応する周辺コンポーネントエンドポイントと、に結合されている。複数のルートポートの各々は、複数のレジスタを含む。
【0095】
図14に示されるように、方法1400は、ルートポートによって、ルートポートの複数のレジスタを複数のルートポートの複数のレジスタと同期させるステップ1404を含む。ルートポートの複数のレジスタを複数のルートポートの複数のレジスタと同期させることは、ルートポートによって、複数のルートポートの複数のレジスタのコンテキストデータを用いてルートポートの複数のレジスタを初期化することと、ルートポートによって、複数のルートポートの複数のレジスタに対する変更を追跡することと、を含む。複数のルートポートの複数のレジスタのコンテキストデータを用いてルートポートの複数のレジスタを初期化することは、複数のルートポートの各ルートポートについて、ルートポートによって、ルートのコンテキストID及びルートポートのアドレスを受信することを含む。更に、複数のルートポートの複数のレジスタに対する変更を追跡することは、ルートポートのレジスタが変更された場合に、ルートポートによって複数のルートポートにメッセージを送信することと、複数のルートポートの別のルートポートのレジスタが変更された場合に、ルートポートによって複数のルートポートの別のルートポートからメッセージを受信することと、を含む。
【0096】
例えば、複数のルートポートにおいて、各ルートポートは、15個の他のルートポート等の他のリモートルートポートからのシャドウ化レジスタコピーを維持する。単一ルートポートの場合、リモートルートポートコピー及びローカルルートポートの内部レジスタは、LUTを構成する。SDXIエンジンのためのDMAトランザクションが存在すると、トランザクションの属性(インスタンスIDによって示されるリモートノード、PFであるかVFであるか、VFID等)に従って、LUTから情報を得るための内部チェックが存在し、次いで、対応する周辺コンポーネント関連チェックを実行する。例えば、構成レジスタ/内部レジスタのその部分を他のリモートルートポートにシャドウする能力を有するSDXIエンジン機能を有するルートポートの場合、SDXIエンジンPF関連レジスタ(PFごと)、ポート0関連レジスタ(ポートごと)、及び、SDXIエンジンVF関連レジスタ(VFごと)を含む。
【0097】
ブロック1406に示すように、方法1400は、ルートポート860A/860B等のルートポートに結合された周辺コンポーネントエンドポイントから、ダイレクトメモリアクセス(DMA)要求を受信することを含み、DMA要求は、コンテキストデータと、複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能のPCIセグメント/バス/デバイス/機能等の機能識別子と、を含む。例えば、DMA要求は、IOMMUが要求されたアドレスに対してアドレス変換を実行するために、必要とされる適切なIOMMUコンテキストを識別するために使用される機能識別子と共に発行される。すなわち、各IOMMUコンテキストは、機能識別子空間の一意のサブセットに関連付けられる。機能識別子は、複数のアドレス空間に関連付けられてもよく、DMA要求は、任意選択で、プロセスアドレス空間識別子(PASID)を含んでもよく、機能識別子とPASIDの組合せは、アドレス変換に使用される、例えば、ゲスト及びホストページテーブル等のページテーブル又はネストされたページテーブルのセットを参照するために組み合わされる。
【0098】
DMA要求は、SDXIエンジン804A及び804B等の対応する周辺コンポーネントエンドポイントから受信される。ブロック1408において、ルートポートは、複数のIOMMUのうち対応するIOMMUにDMA要求を提供することができる。機能は、周辺コンポーネントエンドポイント機能であり、複数のIOMMUのうち別のIOMMUに結合された周辺コンポーネントエンドポイントの物理機能及び複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである。
【0099】
ブロック1410に示されるように、方法1400は、IOMMUによって、DMA要求のコンテキストデータに基づいてIOMMUの複数のMMIOレジスタにアクセスすることを含む。DMA要求のコンテキストデータに基づいて、IOMMUの複数のMMIOレジスタにアクセスすることは、DMA要求のコンテキストデータを復号することと、復号されたコンテキストデータに基づいて、複数のMMIOレジスタのうちの特定の複数のMMIOレジスタにアクセスすることと、復号されたコンテキストデータに基づいて変換ルックアサイドバッファをロードすることと、復号されたコンテキストデータに基づいてDMA要求を変換することと、を含む。次いで、ブロック1412に示すように、方法1400は、アクセスされた複数のMMIOレジスタに基づいて、IOMMUから、別のIOMMUに属するコンテキストによって参照されるページテーブルにアクセスすることを含む。特に、別のIOMMUに属するメモリアドレス空間に割り当てられた機能にアクセスすることは、アクセスされた特定の複数のMMIOレジスタ及び変換されたDMA要求に基づく。次いで、ブロック1414に示すように、方法1400は、IOMMUによって、アクセスされたページテーブルを使用してDMA要求に対するアドレス変換を実行することを含む。最後に、ブロック1416に示すように、方法1400は、IOMMUによって、DMA要求及び変換されたアドレスに基づいてメモリアクセスを実行することを含む。
【0100】
上述したように、本開示は、特に、ソフトウェアトランスペアレントな方法で複数のルートツリーにおいて、周辺コンポーネントデバイス、SDXIエンジン、及び、PCIエンドポイント等のI/Oデバイスのための保護及びアドレス変換を提供するコンテキストアウェアルートポート及びIOMMUに関する。このソリューションは、コンテキストアウェアIOMMUを使用してリモートDMAを実行するために、異なるルートコンプレックスの下で接続された高度なこれらのI/Oデバイスを可能にする。
【0101】
コンテキストアウェアIOMMU及びルートポートは、システムオンチップ等のチップ、I/O電力及び性能の分析によって検出可能であり得る。更に、チップの相互接続を検討すると、周辺コンポーネントエンドポイント間に直接的な物理的接続が存在するかどうかが示される。例えば、変換サービスが特定のコンポーネントの一部であり、周辺コンポーネントエンドポイント間に大量の直接物理接続が存在せず、ソフトウェアがシステムにおいてIOMMUを報告させるようにプログラムされている場合、コンテキストアウェアIOMMUが存在する可能性が高い。
【0102】
特徴及び要素が特定の組み合わせで上に説明されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに様々な組み合わせで使用することができる。いくつかの実施形態において本明細書に記載される装置は、汎用コンピュータ又はプロセッサによる実施のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施され得る。コンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(random-access memory、RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、磁気媒体(例えば、内蔵ハードディスク及びリムーバブルディスク)、磁気光学媒体、並びに、光学媒体(例えば、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD))が挙げられる。
【0103】
様々な実施形態の前述の詳細な説明では、その一部を形成し、本発明を実施することができる特定の好ましい実施形態を例として示す添付図面を参照した。これらの実施形態は、当業者が本発明を実施することを可能にするために十分詳細に説明されており、他の実施形態が利用されてもよく、本発明の範囲から逸脱することなく論理的、機械的及び電気的変更が行われてもよいことを理解されたい。当業者が本発明を実施することを可能にするために必要でない詳細を避けるために、説明は、当業者に知られている特定の情報を省略する場合がある。更に、本開示の教示を組み込む多くの他の様々な実施形態が、当業者によって容易に構築され得る。したがって、本発明は、本明細書に記載の特定の形態に限定されることを意図するものではなく、逆に、本発明の範囲内に合理的に含まれ得るそのような代替形態、修正形態及び均等物を包含することを意図するものである。したがって、前述の詳細な説明は、限定的な意味で解釈されるべきではなく、本発明の範囲は、添付の特許請求の範囲によってのみ定義される。本明細書に記載される実施形態及び実施例の上記の詳細な説明は、限定ではなく、例示及び説明のためにのみ提示されている。例えば、説明された動作は、任意の好適な順序又は方法で行われる。したがって、本発明は、上記で開示され、本明細書で特許請求される基本的な基礎原理の範囲内に入るあらゆる修正、変形又は等価物を包含することが企図される。
【0104】
上記の詳細な説明及びそこに記載される実施例は、限定のためではなく、例示及び説明のためにのみ提示されている。
【手続補正書】
【提出日】2023-11-02
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数のアドレス空間の間でデータ移動を提供するための方法であって、
複数のルートポートのうち何れかのルートポートが、前記複数のルートポートのうち別のルートポートのコンテキストデータを記憶することであって、前記ルートポートの各々は、複数の入出力メモリ管理ユニット(IOMMU)のうち対応するIOMMUと、複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントと、に結合されており、前記複数のIOMMUの各々は、前記複数のアドレス空間のうち異なるアドレス空間に関連付けられた、異なる周辺コンポーネントエンドポイントに関連付けられている、ことと、
前記ルートポートが、ダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータと、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能の機能識別子と、を含む、ことと、
前記DMA要求に応じて、前記別のIOMMUに属するメモリアドレス空間へのダイレクトメモリアクセスを、前記ルートポートを介して提供することと、を含む、
方法。
【請求項2】
前記
複数のルートポートの各々は、複数のレジスタを含
み、
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの複数のレジスタと同期させることを更に含む、
請求項1の方法。
【請求項3】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタと同期させることは、
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することと、
前記ルートポートが、前記複数のルートポートの前記複数のレジスタへの変更を追跡することと、を含む、
請求項
2の方法。
【請求項4】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することは、
前記複数のルートポートの各々のルートポートが、前記ルートポートのコンテキストIDを受信することを含む、
請求項
3の方法。
【請求項5】
前記複数のルートポートの前記複数のレジスタへの変更を追跡することは、
前記ルートポートのレジスタが変更される場合に、前記ルートポートが、メッセージを前記複数のルートポートに送信することと、
前記複数のルートポートのうち別のルートポートのレジスタが変更される場合に、前記ルートポートが、前記複数のルートポートのうち前記別のルートポートからメッセージを受信することと、を含む、
請求項
3の方法。
【請求項6】
前記送信すること及び前記受信することは、レジスタバスを介して行われる、
請求項
5の方法。
【請求項7】
前記周辺コンポーネントエンドポイント機能は、物理機能、及び、複数の仮想機能のうち何れかの仮想機能のうち少なくとも1つである、
請求項1の方法。
【請求項8】
データ移動を容易にするために複数のメモリアドレス空間をサポートするための方法であって、
複数のルートポートのうち何れかのルートポートにおいて、前記複数のルートポートのうち別のルートポートのコンテキストデータを受信することであって、前記複数のルートポートの各ルートポートは、複数の入出力メモリ管理ユニット(IOMMU)のうち対応するIOMMUと、複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントと、に結合されている、ことと、
前記ルートポートが、前記ルートポートの複数のレジスタを、前記複数のルートポートの複数のレジスタと同期させることと、
ルートポートに結合された前記対応する周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータと、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能の機能識別子と、を含む、ことと、
前記ルートポートが、前記複数のIOMMUのうち前記対応するIOMMUに前記DMA要求を提供することと、を含む、
方法。
【請求項9】
前記複数のIOMMUの各々は、前記複数のIOMMUのそれぞれのIOMMUに属するメモリアドレス空間をマッピングする複数のメモリマップト入出力(MMIO)レジスタを含み、
前記方法は、
前記IOMMUが、前記ルートポートから提供された前記DMA要求の前記コンテキストデータに基づいて、前記IOMMUの前記複数のMMIOレジスタにアクセスすることと、
前記IOMMUから、アクセスされた前記複数のMMIOレジスタに基づいて、前記別のIOMMUに属するコンテキストによって参照されるページテーブルにアクセスすることと、
前記IOMMUが、アクセスされた前記ページテーブルを使用して、前記DMA要求のアドレス変換を実行することと、
前記IOMMUが、前記DMA要求及び変換されたアドレスに基づいて、メモリアクセスを実行することと、を更に含む、
請求項
8の方法。
【請求項10】
前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタと同期させることは、
前記ルートポートが、前記ルートポートの前記複数のレジスタを、前記複数のルートポートの前記複数のレジスタの前記コンテキストデータを用いて初期化することと、
前記ルートポートが、前記複数のルートポートの前記複数のレジスタへの変更を追跡することと、を含む、
請求項
8の方法。
【請求項11】
データ処理システムであって、
ホストプロセッサと、
メモリと、
前記ホストプロセッサ及び前記メモリに結合されたデータファブリックと、
複数の入出力メモリ管理ユニット(IOMMU)であって、前記複数のIOMMUの各々が前記データファブリックに結合されている、複数のIOMMUと、
複数のルートポートであって、前記ルートポートの各々が、前記複数のIOMMUのうち対応するIOMMUに結合されている、複数のルートポートと、
複数の周辺コンポーネントエンドポイントであって、前記複数の周辺コンポーネントエンドポイントの各々が、前記複数のルートポートのうち対応するルートポートに結合されている、複数の周辺コンポーネントエンドポイントと、を備え、
前記ルートポートの各々は、ハードウェア制御ロジックを備え、
前記ハードウェア制御ロジックは、
前記複数のルートポートを同期させることと、
前記ルートポートに結合された前記複数の周辺コンポーネントエンドポイントのうち対応する周辺コンポーネントエンドポイントからダイレクトメモリアクセス(DMA)要求を受信することであって、前記DMA要求は、コンテキストデータを含み、前記複数のIOMMUのうち別のIOMMUに属するメモリアドレス空間に割り当てられた機能に対する機能識別子を要求する、ことと、
前記複数のIOMMUのうち前記対応するIOMMUに前記DMA要求を提供することと、
を行うように構成されている、
データ処理システム。
【請求項12】
前記ルートポートの各々は、複数のレジスタを備え、
前記ハードウェア制御ロジックは、レジスタバスを介して前記複数のルートポートの前記複数のレジスタの各々と通信するように構成されている、
請求項
11のシステム。
【請求項13】
前記複数の周辺コンポーネントエンドポイントの各々は、ハードウェア制御ロジックを備え、
前記ハードウェア制御ロジックは、
前記少なくとも1つの他のIOMMUの前記複数のMMIOレジスタを同期させることと、
前記対応するルートポートを介して、前記対応するIOMMUに結合された前記対応する周辺コンポーネントエンドポイントから、前記DMA要求を受信することと、
前記DMA要求の前記コンテキストデータに基づいて、前記IOMMUの前記複数のMMIOレジスタにアクセスすることと、
前記IOMMUから、前記アクセスされた複数のMMIOレジスタに基づいて、前記少なくとも1つの他のIOMMUに属する前記メモリアドレス空間に割り当てられた前記機能にアクセスすることと、
を行うように構成されている、
請求項
11のシステム。
【請求項14】
前記メモリは、周辺コンポーネントエンドポイント割り込み情報を記憶するメモリカーブアウトを含む、
請求項
11のシステム。
【請求項15】
前記周辺コンポーネントエンドポイントの各々は、割り込み要求を受信した場合に、前記メモリのメモリカーブから周辺コンポーネントエンドポイント割り込み情報を取得するように動作するハードウェア制御ロジックを備える、
請求項
14のシステム。
【国際調査報告】