例示的な実施形態の以下の詳細な説明は、添付図面を参照する。異なる図面における同一の参照番号は、同一又は類似の要素を特定し得る。
ダイレクトメモリアドレス(DMA)機能を有する周辺デバイスは、メモリアクセス要求を入出力メモリ管理ユニット(IOMMU)に提供することによって、仮想化されたコンピューティング環境で動作することができる。IOMMUは、メモリアクセス要求で特定される仮想アドレスを、メインメモリブロックに関連付けられた物理アドレスに変換することができる。このようにして、IOMMUは、仮想化されたコンピューティング環境で動作する周辺デバイスと、メインメモリとの間の通信を提供することができる。しかし、IOMMUを介してメモリアクセス要求をルーティングすることは、アドレス変換アルゴリズムを実行するのにIOMMUが必要とする演算能力の量、及び、様々な他のIOMMUプロセスを実行するのに必要な演算能力の量のために、低速及び/又はコストがかかる可能性がある。
メモリアクセス要求のルーティングを高速化するために、IOMMU処理から特定の要求を除外する場合がある。例えば、ディスプレイデバイスのピクセルをリフレッシュするのに用いられるフレームバッファに関連付けられたアドレスを特定する要求は、IOMMU処理から除外されてもよい。しかしながら、このような除外は、セキュリティ問題を引き起こし、仮想化されたコンピューティング環境において周辺デバイスを動作させるのに必要なメモリアドレス変換を提供しない可能性がある。本明細書で説明する実施形態は、或る条件を満たす場合に、高速ルートを介してメモリアクセス要求をメインメモリにルーティングし、条件を満たさない場合に、低速ルートを介してメモリアクセス要求をメインメモリにルーティングするメカニズムを提供する。両方のルートは、メモリアドレス変換を提供し、これにより、周辺デバイスの性能を向上させながら、仮想化されたコンピューティング環境で周辺デバイスが動作することを可能にする。
図1は、本明細書で説明する例示的な実施形態の概要100を示す図である。図1に示すように、DMA対応デバイス(例えば、周辺デバイス)は、仮想アドレスを特定するDMA要求を、ルーティングコントローラに提供することができる。ルーティングコントローラは、DMA要求が、IOMMUを用いて当該要求を処理する第1ルート又はIOMMUを用いずに当該要求を処理する第2ルートを介してルーティングされるか否かを決定するルーティング決定を行うデバイスを含むことができる。ルーティングコントローラは、要求を分析して、1つ以上の条件を満たすか否かを判別することができる。例えば、ルーティングコントローラは、第2ルートを介するルーティングが有効であるか否か、仮想アドレスが第2ルートを介してルーティングされる仮想アドレスの範囲内にあるか否か、要求されたアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス等)が許可されているか否か等を判別することができる。ルーティングコントローラは、割り当てられたレジスタセットを用いてこの分析を実行してもよい。
さらに図1に示すように、条件を満たさない場合に、ルーティングコントローラは、第1ルートを介してDMA要求をルーティングしてもよい。第1ルートは、IOMMUを含んでもよく、及び/又は、第1アドレス変換アルゴリズムを用いてメモリアクセス要求を処理して、仮想アドレスを、メインメモリに関連付けられた物理アドレスに変換することを含んでもよい。IOMMUは、アドレス変換を実行した後に、物理アドレスを特定する情報を含むダイレクトメモリアクセス要求を、メインメモリにルーティングするためのメモリコントローラにルーティングしてもよい。
一方、条件を満たす場合に、ルーティングコントローラは、第2ルートを介してDMA要求をルーティングしてもよい。第2ルートは、IOMMUを含まなくてもよく、及び/又は、第1アドレス変換アルゴリズムと異なる(より高速な)第2アドレス変換アルゴリズムを用いてメモリアクセス要求を処理することを含んでもよい。この場合、ルーティングコントローラは、割り当てられたレジスタセットを用いて仮想アドレスから物理アドレスを判別してもよく、物理アドレスを用いてメインメモリにルーティングするためにDMA要求をメモリコントローラにルーティングしてもよい。
第2アドレス変換アルゴリズムは、第1アドレス変換アルゴリズムよりも複雑でなく、より高速に実行されてもよい。さらに、又は代替として、第2ルートは、第1ルートでIOMMUが実行するいくつかの処理を除外してもよい。これにより、第2ルートは、DMA要求を、第1ルートより早くメインメモリに提供することができる。このようにして、ルーティングコントローラは、仮想化されたコンピューティング環境で動作するDMA対応デバイスの性能を向上させるとともに、DMA要求を分析することによってセキュリティを強化することができる。
図2は、本明細書で説明する実施形態を実装し得る例示的なシステム200を示す図である。図2に示すように、システム200は、1つ以上の周辺デバイス210−1〜210−N(N≧1)(以下、「周辺デバイス210」と総称する)と、ルーティングコントローラ220と、IOMMU230と、メモリコントローラ240と、メインメモリ250と、を含む。システム200の各デバイスは、有線接続、無線接続等を介して接続されてもよい。
周辺デバイス210は、中央処理装置から独立して、ダイレクトメモリアクセスを介してメインメモリ250にアクセス可能な1つ以上のデバイスを含んでもよい。例えば、周辺デバイス210は、グラフィックス処理ユニット(GPU)、加速処理ユニット(APU)、ネットワークインタフェースカード、サウンドカード、ディスクドライブ、マザーボード等のDMA対応デバイスを含んでもよい。いくつかの実施形態では、周辺デバイス210は、他のコンピューティングデバイスのメインメモリ250へのリモートDMAアクセスを有するコンピューティングデバイスである。他の例として、周辺デバイス210は、他のプロセッサコアのメインメモリ250へのDMAアクセスを有するプロセッサコアを含んでもよい。周辺デバイス210は、(例えば、入力及び/又は命令に基づいて)DMA要求を生成してもよく、DMA要求をルーティングコントローラ220に提供してもよい。
ルーティングコントローラ220は、DMA要求を受信、処理、ルーティング、及び/又は、提供可能な1つ以上のデバイスを含んでもよい。例えば、ルーティングコントローラ220は、周辺デバイス210からDMA要求を受信してもよく、DMA要求を分析して、当該DMA要求を第1ルート又は第2ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングするか否かを判別してもよい。上述したように、第1ルートはIOMMU230を含んでもよく、第2ルートはIOMMU230を含まなくてもよい。さらに、又は代替として、第1ルートは、第2ルートよりも多くDMA要求を処理することを含んでもよい。このため、第1ルートは、第2ルートよりも低速なルートであってもよい。ルーティングコントローラ220は、DMA要求の分析に基づいて、DMA要求をIOMMU230又はメモリコントローラ240に提供してもよい。いくつかの実施形態では、ルーティングコントローラ220は、DMA要求に含まれる仮想アドレスから物理アドレスを決定する。さらに、又は代替として、ルーティングコントローラ220は、DMA要求を他のデバイスに提供して、物理アドレスを決定してもよい。いくつかの実施形態では、周辺デバイス210の外部に存在するように示されているが、ルーティングコントローラ220は、周辺デバイス210内に統合されてもよい。さらに、又は代替として、システム200は、1つ以上の周辺デバイス210に関連付けられたルーティングをそれぞれ制御する複数のルーティングコントローラ220を含んでもよい。
IOMMU230は、DMA要求を受信、処理、及び/又は、提供可能な1つ以上のデバイスを含んでもよい。例えば、IOMMU230は、ルーティングコントローラ220からDMA要求を受信してもよく、DMA要求をメモリコントローラ240及び/又はメインメモリ250に提供する前に当該DMA要求を処理してもよい。IOMMU230は、例えば、仮想アドレスを物理アドレスに変換すること、DMA要求で要求されたアクセス及び/又はアクセスタイプを許可するのを検証すること等によって、DMA要求を処理してもよい。いくつかの実施形態では、IOMMU230は、第1ルートを介してルーティングされたDMA要求を処理する(例えば、アドレス変換を実行する)ために、DMA要求が第2ルートを介してルーティングされる場合にルーティングコントローラ220及び/又は他のデバイスによって用いられた第2アルゴリズムとは異なる第1アルゴリズムを使用する。いくつかの実施形態では、IOMMU230は、周辺機器相互接続(PCI)バス、PCI expressバス等を介して周辺デバイス210に電気的に接続される。
メモリコントローラ240は、メインメモリ250との間で行き来する情報のフローを管理することができ、並びに/又は、メインメモリ250からの読み出し及び/若しくはメインメモリ250への書き込みが可能な1つ以上のデバイスを含むことができる。例えば、メモリコントローラ240は、IOMMU230からのメモリアクセス要求を、周辺デバイス210から第1ルートを介して受信してもよいし、ルーティングコントローラ220からのメモリアクセス要求を、周辺デバイス210から第2ルートを介して受信してもよい。メモリアクセス要求は、メインメモリ250の物理アドレスを特定してもよく、物理アドレスに関連して実行される動作(例えば、読み出し動作、書き込み動作等)を特定してもよく、並びに/又は、当該物理アドレスから読み出され及び/若しくは当該物理アドレスに書き込まれる情報(例えば、データ、命令等)を特定してもよい。メモリコントローラ240は、メモリアクセス要求に基づいて、メインメモリ250から情報を読み出してもよいし、メインメモリ250に情報を書き込んでもよい。
メインメモリ250は、情報を記憶する1つ以上のデバイスを含んでもよい。例えば、メインメモリ250は、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)等を含んでもよい。メインメモリ250は、物理メモリアドレスによって特定された情報を記憶することができる。
システム200は、本明細書で説明する1つ以上のプロセスを実行してもよい。システム200は、メインメモリ250等のコンピュータ可読媒体に記憶された命令(例えば、ソフトウェア命令)を実行するプロセッサに応じて、これらのプロセスを実行してもよい。コンピュータ可読媒体は、本明細書では、非一時的なメモリデバイスとして定義される。メモリデバイスは、単一の物理的な記憶装置のメモリ空間、又は、複数の物理的な記憶装置間に亘るメモリ空間を含む。
図2に示すデバイスの数は、一例として提供されている。実際には、システム200は、追加のデバイス、より少ないデバイス、異なるデバイス、又は、図2に示すデバイスとは配置の異なるデバイスを含んでもよい。また、システム200の1つ以上のデバイスは、システム200の1つ以上の他のデバイスによって実行されるように、上述した1つ以上の機能を実行してもよい。
図3は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てるための例示的なプロセス300のフローチャートである。いくつかの実施形態では、図3の1つ以上のプロセスブロックは、ルーティングコントローラ220によって実行される。いくつかの実施形態では、図3の1つ以上のプロセスブロックは、周辺デバイス210、IOMMU230、メモリコントローラ240及び/又はメインメモリ250等のような、他のデバイス、又は、ルーティングコントローラ220から分離した、若しくはルーティングコントローラ220を含むデバイスのグループによって実行される。
図3に示すように、プロセス300は、メモリアクセス要求に関連するルーティング決定を行うために用いられる仮想アドレスの範囲を定義するベースアドレスレジスタ及び長さレジスタを割り当てること(ブロック310)を含んでもよい。例えば、ルーティングコントローラ220は、ベースアドレスレジスタ及び長さレジスタを割り当ててもよい。ベースアドレスレジスタは、仮想アドレスの範囲に関連するベースアドレスを特定する情報(例えば、仮想アドレスの範囲の一端を特定するベース仮想アドレス)を記憶してもよく、長さレジスタは、当該範囲の長さ(例えば、当該範囲に含まれる仮想アドレスの量)を特定する情報を記憶してもよい。同時に、ベースアドレス及びアドレスの量は、メモリアクセス要求に関連するルーティング決定を行うために、ルーティングコントローラ220によって用いられる仮想アドレスの範囲を定義することができる。
(単純なアドレス値を用いる)一例として、ベースアドレスレジスタがベースアドレスを1,001として特定すると仮定する。さらに、長さレジスタが500個の仮想アドレスの量を特定すると仮定する。これらの2つの値に基づいて、ルーティングコントローラ220は、1,001から1,500までの500の仮想アドレスの範囲を決定することができる。ルーティングコントローラ220は、この範囲に含まれない仮想アドレスを特定するメモリアクセス要求を受信すると、IOMMU230を含む第1ルートを介してメモリアクセス要求をルーティングしてもよい。一方、ルーティングコントローラ220は、この範囲に含まれる仮想アドレスを特定するメモリアクセス要求を受信すると、IOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングしてもよい。
いくつかの実施形態では、仮想アドレスの範囲は、メインメモリ250に記憶されたフレームバッファを表す物理アドレスの範囲にマッピングされる。フレームバッファは、ディスプレイデバイス上に提供されるピクセルのカラー値を記憶してもよく、周辺デバイス210(例えば、GPU)によってアクセスされて、(例えば、ピクセルのカラー値を取得し、カラー値に基づいてピクセルを表示することができるディスプレイデバイスに値を提供することによって)ピクセルを周期的にリフレッシュしてもよい。
さらに図3に示すように、プロセス300は、仮想アドレスを物理アドレスに変換するために用いられるリロケーションレジスタを割り当てること(ブロック320)を含んでもよい。例えば、ルーティングコントローラ220は、リロケーションレジスタを割り当ててもよい。リロケーションレジスタは、リロケーション値を特定する情報を記憶してもよい。ルーティングコントローラ220は、リロケーション値を用いて、メモリアクセス要求で特定された仮想アドレスをメインメモリ250に関連する物理アドレスに変換してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、ベースアドレス値、長さ値及び/又はリロケーション値を変更してもよい。例えば、ルーティングコントローラ220は、仮想アドレスの範囲及び/又は当該範囲の一部がエラー(例えば、メモリエラー)に関連付けられているという指標を受信してもよい。この場合、ルーティングコントローラ220は、(例えば、エラーが仮想メモリに関連付けられている場合等に)ベースアドレス及び/又は長さを変更してもよい。さらに、又は代替として、ルーティングコントローラ220は、(例えば、エラーが物理メモリに関連付けられている場合に)リロケーション値を変更してもよい。ルーティングコントローラ220は、変更を他のデバイス(例えば、周辺デバイス210、IOMMU230等)に通知してもよい。
ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタを含むレジスタセット(例えば、トリプレット)は、メモリアクセス要求に関連するルーティング決定を行う場合にルーティングコントローラ220をサポートするために共に動作してもよい。いくつかの実施形態では、ルーティングコントローラ220は、(例えば、0セットのレジスタ、4セットのレジスタ、8セットのレジスタ等の)複数のセットのレジスタを割り当てる。この場合、(例えば、特定の周辺デバイス210、周辺デバイス210のセット、全ての周辺デバイス210等の)ルーティング決定を有効又は無効にするために、複数のセットのグループ全体が(例えば、IOMMU230に関連するルーティングコントロールフィールドを用いて)有効又は無効にされてもよい。
さらに、又は代替として、特定のレジスタセットは、ブロック330に関連して本明細書で説明するように、(例えば、1つ以上の周辺デバイス210の)ルーティング決定を行う場合に特定のレジスタセットの使用を有効又は無効にするために、イネーブルフィールドを用いて有効又は無効にされてもよい。さらに、又は代替として、ルーティングコントローラ220は、ブロック340に関連して本明細書で説明するように、アクセスコントロールフィールドを用いて、特定のレジスタセット及び/又は特定の周辺デバイス210のセットについてのアクセスコントロールを設定してもよい。
ルーティングコントローラ220は、ベースアドレスレジスタ、長さレジスタ及びリロケーションレジスタ(例えば、レジスタセット)間の関係の指標を記憶してもよい。例えば、ルーティングコントローラ220は、レジスタセットセット内の各レジスタを、(例えば、メモリマップされた入出力(MMIO)アドレスページ内の)隣接するメモリアドレスに記憶してもよい。
さらに図3に示すように、プロセス300は、異なるルートを介してメモリアクセス要求のルーティングを有効又は無効にするためにイネーブルフィールドを割り当てること(ブロック330)を含んでもよい。例えば、ルーティングコントローラ220は、イネーブルフィールドを割り当ててもよい。いくつかの実施形態では、イネーブルフィールドは、リロケーションレジスタに含まれる。ルーティングコントローラ220は、イネーブルフィールドを用いて、メモリアクセス要求のルーティング決定を行う(例えば、複数のルートのうち1つのルートを選択する)か否か、単一のルートを介してメモリアクセス要求を転送するか否かを判別してもよい。例えば、イネーブルフィールドがルーティング無効であることを示す場合、ルーティングコントローラ220は、IOMMU230を含む第1ルートを介してメモリアクセス要求を転送してもよい。一方、イネーブルフィールドがルーティング有効であることを示す場合、ルーティングコントローラ220は、メモリアクセス要求を分析して、第1ルート又はIOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングするか否かを判別してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、複数の周辺デバイス210のルーティングを制御する。この場合、ルーティングコントローラ220は、ルーティング決定に関連する周辺デバイス210を示すイネーブルフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ220は、周辺デバイス210の第1セットから受信したメモリアクセス要求のルーティング決定を行ってもよく、周辺デバイス210の第2セットから受信したメモリアクセス要求のルーティング決定を行わなくてもよい(例えば、周辺デバイス210の第2セットから受信した要求をIOMMU230に転送してもよい)。ルーティングコントローラ220は、イネーブルフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス210から受信したメモリアクセス要求のルーティング決定を行うか否かを判別してもよい。
さらに図3に示すように、プロセス300は、要求されたアクセスタイプを許可又は拒否するためにアクセスコントロールフィールドを割り当てること(ブロック340)を含んでもよい。例えば、ルーティングコントローラ220は、アクセスコントロールフィールドを割り当ててもよい。いくつかの実施形態では、アクセスコントロールフィールドは、リロケーションレジスタに含まれてもよい。ルーティングコントローラ220は、アクセスコントロールフィールドを用いて、メモリアクセス要求によって特定される、要求されたアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス、アクセス不可等)を許可又は拒否するかどうかを判別してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、複数の周辺デバイス210のルーティングを制御する。この場合、ルーティングコントローラ220は、周辺デバイス210のセットに関連するアクセスタイプを許可又は拒否するかどうかを示すアクセスコントロールフィールドのセットを割り当ててもよい。例えば、ルーティングコントローラ220は、周辺デバイス210の第1セットから受信したメモリアクセス要求に対して第1アクセスタイプ(例えば、読み出しアクセス)を適用し、周辺デバイス210の第2セットから受信したメモリアクセス要求に対して第2アクセスタイプ(例えば、読み出し/書き込みアクセス)を適用してもよい。ルーティングコントローラ220は、アクセスコントロールフィールドのセットに記憶された情報に基づいて、特定の周辺デバイス210から受信したメモリアクセス要求に適用されるアクセスタイプを判別してもよい。
さらに図3に示すように、プロセス300は、割り当てられたレジスタを検証すること(ブロック350)を含んでもよい。例えば、ルーティングコントローラ220は、ベースアドレスレジスタ、長さレジスタ及び/又はリロケーションレジスタを検証してもよい。いくつかの実施形態では、ルーティングコントローラ220は、(例えば、IOMMU230を含む、及び/又は、ページテーブルを用いてアドレス変換を実行する)第1ルートを介してルーティングされる場合、並びに、(例えば、IOMMU230を含まない、及び/又は、メモリリロケーションアルゴリズムを用いてアドレス変換を実行する)第2ルートを介してルーティングされる場合に、特定の仮想アドレスが同一の物理アドレスに変換されるのを確実にすることによって、割り当てられたレジスタを検証する。
いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスの複数の範囲を設定するプロセス300を繰り返す。異なる範囲は、異なるベースアドレス値、異なる長さの値、異なるリロケーション値等に関連してもよい。いくつかの実施形態では、ルーティングコントローラ220は、異なる範囲に対して、(例えば、同一のリロケーションレジスタに記憶された)同一のリロケーション値を用いる。さらに、又は代替として、ルーティングコントローラ220は、異なる範囲に対して同一のイネーブルフィールド及び/又はアクセスコントロールフィールドを用いてもよいし、異なる範囲に対して異なるイネーブルフィールド及び/又はアクセスコントロールフィールドを用いてもよい。このようにして、ルーティングコントローラ220は、メモリアクセス要求(例えば、仮想化されたコンピューティング環境におけるグラフィックス処理に関連するメモリアクセス要求)のより高速なルーティングのために、物理メモリの非連続範囲を設定してもよい。
ルーティングコントローラ220が仮想アドレスの複数の範囲を割り当てる場合、ルーティングコントローラ220は、レジスタによって特定される複数の仮想アドレス範囲が重複しないことを確実にすることによって、割り当てられたレジスタを検証してもよい。例えば、ルーティングコントローラ220は、複数のベースアドレスレジスタ及び各々の長さレジスタを用いて、複数の仮想アドレス範囲を定義してもよい。ルーティングコントローラ220は、特定の仮想アドレスが複数の範囲に含まれるか否かを判別することによって、複数の範囲が重複しないことを確実にしてもよい。複数の範囲が重複しているとルーティングコントローラ220が判別した場合には、ルーティングコントローラ220は、エラー通知を提供し、及び/又は、これらの範囲が重複しないように1つ以上のレジスタを再割り当てしてもよい。
図3はプロセス300の例示的なブロックを示しているが、いくつかの実施形態では、プロセス300は、図3に示されたブロックの追加ブロック、より少ないブロック、異なるブロック、異なる配置のブロックを含んでもよい。さらに、又は代替として、プロセス300のブロックのうち2つ以上のブロックは、並行して実行されてもよい。
図4A及び図4Bは、図3に示す例示的なプロセス300に関する例示的な実施形態400を示す図である。図4A及び図4Bは、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングする場合に用いられるメモリレジスタを割り当てる例を示している。
図4Aに示すように、ルーティングコントローラ220がベースアドレスレジスタ405を割り当てると仮定する。図示するように、ベースアドレスレジスタ405が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット0〜11及び52〜63が予約されていると仮定する。いくつかの実施形態では、予約されたビットは、デバッグ目的で用いられる。最後に、ビット12〜51(例えば、合計40ビット)を用いて、200の値を有するベースアドレスを特定すると仮定する。
さらに図4Aに示すように、ルーティングコントローラ220が長さレジスタ410を割り当てると仮定する。図示するように、長さレジスタ410が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット0〜11及び52〜63が予約されていると仮定する。最後に、ビット12〜51(例えば、合計40ビット)を用いて、500の値の長さを特定すると仮定する。
さらに図4Aに示すように、ベースアドレスレジスタ405及び長さレジスタ410に記憶された値が、IOMMU230を含まないルートを介してルーティングされる仮想アドレス空間415内の仮想アドレスの範囲を定義すると仮定する。符号420で示すように、ベースアドレスは、仮想アドレスの範囲の開始を特定する。仮想アドレスの範囲は、200の仮想アドレスで開始する。符号425で示すように、長さは、その範囲に含まれる仮想アドレスの数を特定する。この場合、符号430で示すように、200〜699の仮想アドレス範囲に500個の仮想アドレスが含まれる。
いくつかの実施形態では、仮想アドレス空間415は、メインメモリ250に記憶されたフレームバッファに対応する仮想アドレスの範囲を表す。フレームバッファは、ディスプレイデバイスのピクセルのカラー値を記憶してもよく、ピクセルを周期的にリフレッシュするGPUによってアクセスされてもよい。フレームバッファに関連するメモリアクセス要求を、IOMMU230を含まないより高速なルートを介してルーティングすることによって、ルーティングコントローラ220は、IOMMU230を含むより低速なルートを介してメモリアクセス要求をルーティングする場合と比較して、より迅速にディスプレイリフレッシュを実行することができる。
図4Bに示すように、ルーティングコントローラ220がリロケーションレジスタ435を割り当てると仮定する。図示するように、リロケーションレジスタ435が64ビットレジスタ(例えば、ビット0〜63)を含むと仮定する。さらに、ビット2〜11及び52〜63が予約されていると仮定する。符号440で示すように、ビット12〜51(例えば、合計40ビット)を用いて、値が400のリロケーション値を特定すると仮定する。符号445で示すように、ルーティングコントローラ220がメモリアクセス要求のルーティング決定を行うか否かを示すイネーブルビットとして、ビット0を用いると仮定する。符号450で示すように、メモリアクセス要求(例えば、読み出しアクセス、書き込みアクセス、読み出し及び書き込みアクセス等)について許可されたアクセスタイプを特定するアクセスコントロールビットとして、ビット1を用いると仮定する。
上述したように、図4A及び図4Bは単なる一例である。他の例も可能であり、図4A及び図4Bに関して説明したものとは異なっていてもよい。
図5は、仮想化されたコンピューティング環境においてダイレクトメモリアクセス要求をルーティングするための例示的なプロセス500のフローチャートである。いくつかの実施形態では、図5の1つ以上のプロセスブロックは、ルーティングコントローラ220によって実行される。いくつかの実施形態では、図5の1つ以上のプロセスブロックは、周辺デバイス210、IOMMU230、メモリコントローラ240及び/又はメインメモリ250等のような、他のデバイス、又は、ルーティングコントローラ220から分離した、若しくはルーティングコントローラ220を含むデバイスのグループによって実行される。
図5に示すように、プロセス500は、仮想アドレスを特定するメモリアクセス要求を周辺デバイスから受信すること(ブロック510)を含んでもよい。例えば、ルーティングコントローラ220は、メモリアクセス要求を周辺デバイス210から受信してもよい。メモリアクセス要求は、いくつかの実施形態において、ダイレクトメモリアクセス要求を含む。さらに、又は代替として、メモリアクセス要求は、周辺デバイス210に関連するゲスト物理アドレス等の仮想アドレスを特定してもよい。
いくつかの実施形態では、メモリアクセス要求は、メモリアクセス要求に関連するアクセスタイプを特定する。例えば、メモリアクセス要求は、メインメモリ250から情報を読み出す要求、メインメモリ250に情報を書き込む要求等を含んでもよい。さらに、又は代替として、メモリアクセス要求は、メインメモリ250から読み出される情報、及び/又は、メインメモリ250に書き込まれる情報を特定してもよい。
さらに図5に示すように、プロセス500は、ルーティングが有効であるか否かを判別すること(ブロック520)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、リロケーションレジスタに含まれる)イネーブルビットを読み出すことによって、ルーティングが有効であるか否かを判別してもよい。イネーブルビットの値は、ルーティングが、(例えば、イネーブルビットが例えば1という第1値を含む場合)有効であり、(例えば、イネーブルビットが例えば0という第2値を含む場合)無効であるという指標を提供してもよい。
ルーティングが有効でない場合(ブロック520:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、ルーティングが有効でないと判別した場合に(例えば、イネーブルビットが、ルーティングが有効でないことを示す場合に)、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。
いくつかの実施形態では、メモリコントローラ240及び/又はメインメモリ250への第1ルートはIOMMU230を含み、メモリコントローラ240及び/又はメインメモリ250への第2ルートはIOMMU230を含まない。さらに、又は代替として、第1ルートは、第2ルートよりも(例えば、IOMMU230による)メモリアクセス要求のさらなる処理を含んでもよい。さらに、又は代替として、第1ルートは、第2ルートと比べて、メモリコントローラ240及び/又はメインメモリ250に対するより高いレイテンシ(例えば、より高い平均レイテンシ)を有してもよい。
さらに、又は代替として、第1ルートを介してルーティングされたメモリアクセス要求は、第2ルートを介してルーティングされたメモリアクセス要求に関連して使用されたアルゴリズムとは異なるアルゴリズムを介してアドレス変換されてもよい。例えば、第1ルートにおけるアドレス変換は、1つ以上のページテーブルを用いて、仮想アドレスを物理アドレスに変換してもよい。いくつかの実施形態では、第1ルートは、複数のページテーブルを用いてアドレス変換を実行する。逆に、第2ルートにおけるアドレス変換は、何れのページテーブルも用いないことがある。むしろ、第2ルートにおけるアドレス変換は、別の値(例えば、仮想アドレス値、仮想アドレス値とベースアドレス値とに基づいて判別されたオフセット値等)に値を加えることによって、又は、当該別の値から値を引くことによって物理アドレスを判別する、メモリリロケーションアルゴリズムを用いてもよい。このようにして、第2ルートにおけるアドレス変換は、(例えば、メモリリロケーションが、ページテーブルを用いるよりも高速であるため)第1ルートにおけるアドレス変換よりも高速となり得る。
ルーティングが有効である場合(ブロック520:はい)、プロセス500は、仮想アドレス及びベースアドレスを比較することによってオフセット値を計算すること(ブロック540)を含んでもよい。例えば、ルーティングコントローラ220は、ルーティングが有効であると判別した場合に(例えば、イネーブルビットが、ルーティングが有効であることを示す場合に)、メモリアクセス要求で特定された仮想アドレスとベースアドレスとを比較することによって、オフセット値を計算してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスとベースアドレスとの差としてオフセット値を計算する。例えば、ルーティングコントローラ220は、仮想アドレス(例えば、仮想アドレスを表す値)からベースアドレス(例えば、ベースアドレスを表す値)を減算して、オフセット値を計算してもよい。一例として、ベースアドレス値が1,000であり、仮想アドレス値が1,300であると仮定すると、ルーティングコントローラ220は、300(1,300−1,000=300)というオフセット値を計算してもよい。
さらに図5に示すように、プロセス500は、仮想アドレスが、メモリアクセス要求のルーティングに関連する仮想アドレスの範囲内に存在するか否かを判別すること(ブロック550)を含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが、図3に関連して本明細書で説明したように決定された範囲内に存在するか否かを判別してもよい。いくつかの実施形態では、ルーティングコントローラ220は、仮想アドレスが、オフセット値に基づく範囲内に存在するか否かを判別する。例えば、ルーティングコントローラ220は、オフセット値を第1閾値(例えば、0)及び/又は第2閾値(例えば、長さレジスタで特定される長さ値)と比較して、仮想アドレスが当該範囲内に存在するか否かを判別することができる。
ルーティングコントローラ220は、いくつかの実施形態において、メモリアクセス要求に適用する、割り当てられたレジスタのセットを判別する。例えば、複数のレジスタセットが割り当てられてもよく、ルーティングコントローラ220は、メモリアクセス要求に適用するレジスタセットを選択してもよい。さらに、又は代替として、ルーティングコントローラ220は、メモリアクセス要求で特定される仮想アドレスが特定のレジスタセットに関連する仮想アドレスの範囲内に存在すると判別されるまで、複数のレジスタセットをメモリアクセス要求に適用してもよい。この場合、ルーティングコントローラ220は、特定のレジスタセットをメモリアクセス要求に適用してもよい。仮想アドレスが何れの範囲内に存在しない場合に、ルーティングコントローラ220は、第1ルートを介してメモリアクセス要求をルーティングしてもよい。
いくつかの実施形態では、仮想アドレスの第1範囲は、仮想アドレスの第2範囲と重複する。この場合、ルーティングコントローラ220は、これらの範囲のうち1つの範囲を選択し、選択された範囲に関連するレジスタセットをメモリアクセス要求に適用してもよい。
仮想アドレスが範囲内に存在しない場合(ブロック550:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが範囲内に存在しないと判別した場合、ブロック530に関連して本明細書で説明したように、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。
いくつかの実施形態では、ルーティングコントローラ220は、オフセット値が第1閾値又は第2閾値を満たす場合に、仮想アドレスが範囲内に存在しないと判別する。第1閾値は0と等しくてもよく、第2閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ220は、オフセット値が0よりも小さい場合に、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、ルーティングコントローラ220が、900という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。さらに、ベースアドレス値が1,000であると仮定する。この例において、オフセット値は、−100(900−1,000=−100)である。−100は0より小さいため、このオフセット値は、(例えば、範囲が1,000で開始するため)900という仮想アドレスが範囲外であることを示す。
さらに、又は代替として、ルーティングコントローラ220は、オフセット値が長さ値以上である場合、仮想アドレスが範囲内に存在しないと判別してもよい。例えば、オフセット値が300であり、長さ値が200であると仮定する。オフセット値が長さ値よりも大きいため、ルーティングコントローラ220は、仮想アドレスが範囲内に存在しないと判別して、第1ルートを介してメモリアクセス要求をルーティングする。この例では、1,000というベースアドレス値は、範囲の開始アドレス1,000を示し、200という長さ値は、(例えば、1,000〜1,199まで200の値がある)範囲の終了値1,199を示す。オフセット値300(1,300−1,000)を生成した1,300という仮想アドレスは、範囲外にある。同様に、長さ値に等しいオフセット値200を生成する1,200という仮想アドレスは、範囲外にある。
このようにして、ルーティングコントローラ220は、オフセット値が0未満である場合、又は、オフセット値が長さ値以上である場合に、仮想アドレスが範囲内に存在しないと判別することができる。ルーティングコントローラ220は、オフセット値を用いて仮想アドレスが範囲内に存在するか否かを判別することによって、仮想アドレスを範囲の終了値と直接比較することに対して、仮想アドレスが範囲内に存在するか否かを判別するのに必要な計算資源の量を低減することができる。
仮想アドレスが範囲内に存在する場合(ブロック550:はい)、プロセス500は、要求されたアクセスタイプが許可されているか否かを判別する(ブロック560)ことを含んでもよい。例えば、ルーティングコントローラ220は、仮想アドレスが範囲内に存在すると判別した場合に、メモリアクセス要求で特定されたアクセスタイプが許可されているか否かを判別してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、オフセット値が第1閾値及び第2閾値を満たす場合に、仮想アドレスが範囲内に存在すると判別する。第1閾値は0であってもよく、第2閾値は長さ値に対応してもよい。例えば、ルーティングコントローラ220は、オフセット値が0以上である場合、及び、オフセット値が長さ値よりも小さい場合に、仮想アドレスが範囲内に存在する判別してもよい。例えば、ルーティングコントローラ220が、1,300という仮想アドレスを特定するメモリアクセス要求を受信すると仮定する。また、ベースアドレス値が1,000であると仮定する。この例では、オフセット値は300(1,300−1,000=300)である。300は0より大きいため、このオフセット値は、1,300という仮想アドレスが(例えば、長さ値に依拠する)範囲内に存在することを示す。
オフセット値が300である上記の例を続けると、長さ値が500であると仮定する。オフセット値が長さ値よりも小さいので、ルーティングコントローラ220は、仮想アドレスが範囲内に存在すると判別する。この例では、ベースアドレス値1,000は、範囲の開始アドレスを1,000と特定し、長さ値500は、(例えば、1,000〜1,499までに500の値がある)範囲について1,499という終了値を特定する。オフセット値300(1,300−1,000)を生成した1,300という仮想アドレスは、この範囲内に存在する。
ルーティングコントローラ220は、いくつかの実施形態では、要求されたアクセスタイプが許可されるか否かを、(例えば、リロケーションレジスタに含まれる)アクセスコントロールビットを読み出すことによって判別する。アクセスコントロールビットの値は、特定のアクセスタイプ(例えば、読み出しアクセス、書き込みアクセス等)を許可又は拒否するか否かの指標を提供してもよい。
要求されたアクセスタイプが許可されていない場合(ブロック560:いいえ)、プロセス500は、メモリアクセス要求を、第1ルートを介してメインメモリにルーティングすること(ブロック530)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、アクセスコントロールビットの読み出しに基づいて)要求されたアクセスタイプが許可されていないと判別した場合に、ブロック530に関連して本明細書で説明したように、メモリアクセス要求を、第1ルートを介してメモリコントローラ240及び/又はメインメモリ250にルーティングしてもよい。さらに、又は代替として、ルーティングコントローラ220は、要求されたアクセスタイプが許可されていない場合に、エラー表示を提供してもよい。
一例として、特定の仮想アドレスを特定するメモリアクセス要求が、メインメモリ250に書き込む要求を含むと仮定する。さらに、アクセスコントロールビットが、特定の仮想アドレス又は当該特定の仮想アドレスに関連する物理アドレスが読み出し専用であることを示すと仮定する。この場合、ルーティングコントローラ220は、メモリアクセス要求を、第1ルートを介して(例えば、IOMMU230を含む)メインメモリ250に向けてルーティングする。IOMMU230は、アクセスを拒否してもよいし、エラーを提供する等してもよい。
要求されたアクセスタイプが許可された場合(ブロック560:はい)、プロセス500は、オフセット値及びリロケーション値を組み合わせることによって、仮想アドレスに対応する物理アドレスを判別すること(ブロック570)を含んでもよい。例えば、ルーティングコントローラ220は、(例えば、アクセスコントロールビットを読み出すことに基づいて、)要求されたアクセスタイプを許可すると判別した場合に、オフセット値と、リロケーションレジスタで特定されたリロケーション値と、を組み合わせて、仮想アドレスに対応する物理アドレス判別してもよい。
一例として、メモリアクセス要求は、読み出し要求を含んでもよく、アクセスコントロールビットは、読み出し要求が許可されることを示してもよい。さらに、又は代替として、メモリアクセス要求は、書き込み要求を含んでもよく、アクセスコントロールビットは、書き込み要求が許可されることを示してもよい。これらの場合、ルーティングコントローラ220は、仮想アドレスと、リロケーションレジスタで特定されたリロケーション値とに基づいて、仮想アドレスに対応する物理アドレスを計算してもよい。
いくつかの実施形態では、ルーティングコントローラ220は、オフセット値及びリロケーション値を(例えば、加算、減算等で)組み合わせることによって、物理アドレスを判別する。たとえば、本明細書の他の箇所で説明したように、ルーティングコントローラ220は、300というオフセット値を判別したと仮定する。さらに、ルーティングコントローラ220は、リロケーションレジスタにおいて400というリロケーション値を特定すると仮定する。ルーティングコントローラ220は、これらの値を加算して、700(300+400=700)という物理アドレス値を判別し得る。
さらに図5に示すように、プロセス500は、物理アドレスを含むメモリアクセス要求を、第2ルートを介してメインメモリにルーティングすること(ブロック580)を含んでもよい。例えば、ルーティングコントローラ220は、メモリアクセス要求を、メインメモリ250に関連する判別された物理アドレスに向けてルーティングしてもよい。いくつかの実施形態では、ルーティングコントローラ220は、メモリアクセス要求を、第2ルートを介してメインメモリ250にルーティングする。
本明細書の他の箇所で説明したように、メモリコントローラ240及び/又はメインメモリ250への第2ルートは、IOMMU230を含まなくてもよい。さらに、又は代替として、第2ルートは、第1ルートよりも少ないメモリアクセス要求の処理を必要としてもよい。さらに、又は代替として、第2ルートは、第1ルートと比べて、メモリコントローラ240及び/又はメインメモリ250への小さいレイテンシ(例えば、より小さい平均レイテンシ)を有してもよい。さらに、又は代替として、第2ルートを介してルーティングされたメモリアクセス要求は、第1ルートを介してルーティングされたメモリアクセス要求に関連して用いられたアルゴリズムとは異なるアルゴリズムを介して、アドレス変換されてもよい。さらに、又は代替として、第2ルートは、1つ以上の予測アルゴリズム(例えば、バッファリング、ルックアヘッド等)を用いて、第1ルートに比べて性能を向上させることができる。さらに、又は代替として、第1ルートは、メモリアクセス要求に基づいて、1セットの動作を実行させてもよく、第2ルートは、メモリアクセス要求に基づいて、当該1セットの動作のサブセットを実行させてもよい。
メインメモリ250へメモリアクセス要求をルーティングすることは、メモリアクセス要求で特定された仮想アドレスに対応する物理アドレスから情報を読み出させ、及び/又は、当該物理アドレスに情報を書き込ませてもよい。いくつかの実施形態では、ルーティングコントローラ220及び/又はメモリコントローラ240は、複数の周辺デバイス210と中央処理装置との間、及び/又は、1つの周辺デバイス210と中央処理装置との間のキャッシュコヒーレンシを提供する。例えば、メモリコントローラ240は、第2デバイスがメインメモリ250の特定の物理アドレスに書き込んだ指標を、第1デバイスのキャッシュコントローラに提供してもよい。キャッシュコントローラは、第1デバイスに関連するキャッシュを変更して、キャッシュコヒーレンシを確保してもよい。例えば、キャッシュコントローラは、特定の物理アドレスに関連する、キャッシュされた書き込み動作を無効としてマークしてもよいし、特定の物理アドレスに関連する、キャッシュされた読み出し動作をフラッシュしてもよい。
このようにして、ルーティングコントローラ220は、フレームバッファ等の特定のメモリリソースに関連するメモリアクセス要求を高速化する方法を提供することができる。また、ルーティングコントローラ220は、非仮想化コンピューティング環境に近いレベルで実行しながら、仮想化されたコンピューティング環境においてグラフィックスプロセッシングユニット等の周辺デバイスが動作するのを可能にすることができる。
図5は、プロセス500の例示的なブロックを示しているが、いくつかの実施形態では、プロセス500は、図5で示されたものに対して追加のブロック、より少ないブロック、異なるブロック、又は、これらと異なる配置のブロックを含む。さらに、又は代替として、プロセス500のブロックのうち2つ以上のブロックは、並行して実行されてもよい。
図6A〜図6Eは、図5に示す例示的なプロセス500に関する例示的な実施形態600を示す図である。図6A〜図6Eは、IOMMU230を含む第1ルートを介してメモリアクセス要求をルーティングする様々なルーティング決定の例を示している。
図6Aにおいて符号605で示すように、GPU210は、メモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求は、100という仮想アドレスを特定し、書き込みのアクセスタイプを特定し、100という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。ルーティングコントローラ220は、要求を受信し、リロケーションレジスタ435に記憶されたイネーブルビットの値を判別すると仮定する。符号610で示すように、イネーブルビットは、メモリアクセス要求を第2ルート(例えば、IOMMU230を含まないルート)を介してメインメモリ250にルーティングすることが無効であることを示す0の値を記憶していると仮定する。このようにして、符号615で示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。
図6Bの目的のために、ルーティングコントローラ220がGPU210から同一のメモリアクセス要求を受信すると仮定する。しかしながら、この場合、ルーティングコントローラ220が、第2ルートを介するルーティングが有効であると判別する(例えば、イネーブルビットが1という値を記憶していると判別する)と仮定する。符号620で示すように、ルーティングコントローラ220が、ベースアドレスレジスタ405に記憶された200というベースアドレス値を判別すると仮定する。符号625で示すように、ルーティングコントローラ220は、100という仮想アドレス値から200というベースアドレス値を減算し、−100(100−200=−100)というオフセット値を生成する。符号630で示すように、ルーティングコントローラ220は、オフセット値が0未満であると判別するため、100という仮想アドレスは、第2ルートを介するルーティングに関連する仮想アドレスの範囲外に存在する。このようにして、符号635に示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。
図6Cにおいて符号640で示すように、GPU210が、他のメモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求は、800という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、800という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図6Cの目的のために、第2ルートを介するルーティングが有効であり、(例えば、図6Bに示すように、)ベースアドレス値が200であると仮定する。
符号645で示すように、ルーティングコントローラ220が、800という仮想アドレス値から200というベースアドレス値を減算し、600(800−200=600)というオフセット値を生成すると仮定する。オフセット値が0よりも大きいので、ルーティングコントローラ220は、オフセット値を、長さレジスタ410に記憶された長さ値と比較することを決定する。符号650で示すように、ルーティングコントローラ220は、長さレジスタ410に記憶された500という長さ値を判別すると仮定する。符号655で示すように、ルーティングコントローラ220は、オフセット値と長さ値とを比較し、オフセット値が長さ値より大きいと判別し、これにより、800という仮想アドレスが、第2ルートを介してルーティングされる仮想アドレスの範囲内に存在しないと判別する。結果として、ルーティングコントローラ220は、符号660で示すように、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。
図6Dにおいて符号665で示すように、GPU210が他のメモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求が、600という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、600という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。図6Dの目的のために、第2ルートを介するルーティングが有効であり、ベースアドレス値が200であり、長さ値が500であると仮定する。
符号670で示すように、ルーティングコントローラ220は、600という仮想アドレス値から200というベースアドレス値を減算して、400(600−200=400)というオフセット値を計算する。符号675で示すように、ルーティングコントローラ220は、400というオフセット値が500という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ220は、600という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。
図6Eでは、図6Dに示す例を続けて、ルーティングコントローラ220が受信したメモリアクセス要求で特定される600という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると仮定する。図6Eにおいて符号680で示すように、ルーティングコントローラ220は、リロケーションレジスタ435に記憶されたアクセスコントロールビットが、読み出し専用アクセスコントロールが有効であることを示す1という値を記憶している、と判別すると仮定する。メモリアクセス要求が、書き込み動作を特定すると仮定する。結果として、符号685で示すように、ルーティングコントローラ220は、メモリアクセスを、IOMMU230を含む第1ルートを介してメモリコントローラ240にルーティングする。しかしながら、メモリアクセス要求が読み出し動作を特定した場合には、ルーティングコントローラ220は、600という仮想アドレスに対応する物理アドレスを判別して、メモリアクセス要求を、第2ルート(例えば、IOMMU230を含まないルート)を介してメモリコントローラ240にルーティングする。
上述したように、図6A〜図6Eは単なる一例である。他の例も可能であり、図6A〜図6Eに関して説明したものとは異なっていてもよい。
図7A及び図7Bは、図5に示す例示的なプロセス500に関する他の例示的な実施形態700を示す図である。図7A及び図7Bは、IOMMU230を含まない第2ルートを介してメモリアクセス要求をルーティングするルーティング決定の一例を示している。
図7Aにおいて符号705で示すように、GPU210が、メモリアクセス要求をルーティングコントローラ220に提供すると仮定する。図示するように、メモリアクセス要求が、699という仮想アドレスを特定し、書き込みというアクセスタイプを特定し、699という仮想アドレスに対応する物理メモリアドレスに書き込まれるいくつかの情報を特定すると仮定する。符号710で示すように、第2ルートを介するルーティングが有効であり、書き込みアクセスが有効であると仮定する。符号715で示すように、ルーティングコントローラ220は、699という仮想アドレス値から200というベースアドレス値を減算して、499(699−200=499)というオフセット値を計算する。符号720で示すように、ルーティングコントローラ220は、499というオフセット値が0よりも大きく、且つ、500という長さ値よりも小さいと判別する。この判別に基づき、ルーティングコントローラ220は、699という仮想アドレスが、第2ルートを介するルーティングに関連する仮想アドレスの範囲内に存在すると判別する。
図7Bにおいて符号725で示すように、ルーティングコントローラ220が、リロケーションレジスタ435に記憶された400というリロケーション値を判別すると仮定する。符号730で示すように、ルーティングコントローラ220は、400というリロケーション値を499というオフセット値に加算して、899(499+400=899)という物理アドレス値を生成する。符号735で示すように、ルーティングコントローラ220は、899という物理アドレスを特定する情報を含むメモリアクセス要求を、IOMMU230を含まない第2ルートを介してメモリコントローラ240にルーティングする。
上述したように、図7A及び図7Bは単なる一例である。他の例も可能であり、図7A及び7Bに関して説明したものとは異なっていてもよい。
上記の開示は、例示及び説明を提供するが、網羅的であること又は開示された正確な形態に実施形態を限定することを意図していない。修正及び変形が、上記の開示に照らして可能であり、実施形態の実施から得ることができる。
本明細書で用いられる場合、デバイス又はコンポーネントは、ハードウェア、ファームウェア、又は、ハードウェア及びソフトウェアの組み合わせとして広く解釈されることを意図している。
いくつかの実施形態では、閾値に関して記載されている。本明細書で用いられる場合、閾値を満たすことは、閾値より大きい(greater than)値、閾値以上(more than)の値、閾値より高い(higher than)値、閾値より大きいか等しい(greater than or equal to)値、閾値より小さい(less than)値、閾値以下(fewer than)の値、閾値より低い(lower than)値、閾値より小さいか等しい(less than or equal to)値、閾値に等しい値等に言及することができる。
本明細書で説明するシステム及び/又は方法は、図面に示された実施形態において、ソフトウェア、ファームウェア及びハードウェアの多くの異なる形態で実施可能であることが明らかであろう。これらのシステム及び/又は方法を実装するために使用される実際のソフトウェアコード又は専用の制御ハードウェアは、実施形態を限定するものではない。したがって、システム及び/又は方法の動作及び挙動は、特定のソフトウェアコードに言及することなく説明されている。すなわち、ソフトウェア及びハードウェアは、本明細書の説明に基づいて、システム及び/又は方法を実装するように設計可能であることが理解される。
特徴の特定の組み合わせは、特許請求の範囲に記載及び/又は本明細書に開示されるが、これらの組み合わせは、可能な実施形態の開示を限定することを意図してしない。実際、これらの特徴の多くは、具体的に特許請求の範囲に記載されない方法、及び/又は、本明細書に開示されない方法で組み合わせることができる。下記の各従属請求項は1つの請求項のみに直接従属してもよいが、可能な実施形態の開示は請求項内の全ての他の請求項と組み合わせた各従属請求項を含む。
本明細書で用いられた要素、動作又は命令は、明示的に記載されない限り、重要又は必須であると解釈されるべきではない。また、本明細書で用いられる冠詞「a」及び「an」は、1つ以上の項目を含むことを意図し、「1つ以上」と互換的に用いられてもよい。同様に、「セット」は、1つ以上の項目を含むことを意図しており、「1つ以上」と互換的に用いられてもよい。1つの項目のみを意図する場合、「one」という用語又は同様の言語を使用する。また、本明細書で用いられるように、「有する」という用語は、オープンエンドの用語であることを意図している。さらに、「基づいて」という表現は、特に明示的に記載のない限り、「少なくとも部分的に基づいて」を意味することを意図している。