(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-01-25
(54)【発明の名称】入出力デバイスによってアクセス可能なメモリのページの移行
(51)【国際特許分類】
G06F 12/1009 20160101AFI20240118BHJP
G06F 12/06 20060101ALI20240118BHJP
【FI】
G06F12/1009
G06F12/06 522A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023538812
(86)(22)【出願日】2021-12-09
(85)【翻訳文提出日】2023-08-15
(86)【国際出願番号】 IB2021061534
(87)【国際公開番号】W WO2022144646
(87)【国際公開日】2022-07-07
(32)【優先日】2020-12-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】フィリップ ン
(72)【発明者】
【氏名】ニッポン ラヴァル
【テーマコード(参考)】
5B160
5B205
【Fターム(参考)】
5B160AA06
5B160AA14
5B160AB29
5B160CA17
5B160KA02
5B160KA06
5B160MM03
5B205MM36
5B205MM42
5B205NN82
(57)【要約】
電子デバイスは、メモリと、入出力メモリ管理ユニット(IOMMU)と、ソフトウェアエンティティを実行するプロセッサと、ページ移行エンジンと、を含む。ソフトウェアエンティティ及びページ移行エンジンは、メモリ内の少なくとも1つのIOデバイスによってアクセス可能なメモリのページを移行する準備を行うための動作を実行し、ソフトウェアエンティティ及びページ移行エンジンは、実行されている動作に基づいて、メモリのページに関するページテーブルエントリ内の移行状態情報を設定する。メモリのページを移行する準備を行うための動作が完了すると、ページ移行エンジンは、メモリ内のメモリのページを移行する。IOMMUは、ページテーブルエントリ内の移行状態情報を使用して、IOMMUの1つ以上の動作を制御する。
【選択図】
図7
【特許請求の範囲】
【請求項1】
電子デバイスであって、
メモリと、
入出力メモリ管理ユニット(IOMMU)と、
ソフトウェアエンティティを実行するプロセッサと、
ページ移行エンジンと、を備え、
前記ソフトウェアエンティティ及び前記ページ移行エンジンは、少なくとも1つのIOデバイスによってアクセス可能なメモリのページを前記メモリ内で移行する準備を行うための動作を実行するように構成されており、前記ソフトウェアエンティティ及び前記ページ移行エンジンは、実行されている動作に基づいて、前記メモリのページに関するページテーブルエントリ内の移行状態情報を設定し、
前記IOMMUは、前記ページテーブルエントリ内の前記移行状態情報を使用して、前記IOMMUの1つ以上の動作を制御するように構成されている、
電子デバイス。
【請求項2】
前記ページテーブルエントリ内の前記移行状態情報を使用して前記IOMMUの前記1つ以上の動作を制御する場合に、
前記IOMMUは、
前記ページテーブルエントリからの情報の使用と、
前記メモリのページのメモリアクセスと、
のうち少なくとも1つを制御する、
請求項1の電子デバイス。
【請求項3】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定する場合に、
前記ソフトウェアエンティティ及び前記ページ移行エンジンは、
前記ソフトウェアエンティティ及び前記ページ移行エンジンによって、前記移行状態情報を値に設定するように構成されており、
前記値は、前記IOMMUによって読み取られると、
前記ページテーブルエントリからの情報のコピーを前記IOMMU内のキャッシュに記憶しないことと、
前記ページテーブルエントリからの情報のコピーを、前記少なくとも1つのIOデバイス内のキャッシュに記憶されるように前記少なくとも1つのIOデバイスに提供しないことと、
によって、前記ページテーブルエントリからの情報の使用を前記IOMMUに制御させる、
請求項2の電子デバイス。
【請求項4】
前記メモリのページを移行する準備を行うための前記動作を実行する場合に、
前記ソフトウェアエンティティ及び前記ページ移行エンジンは、
前記ソフトウェアエンティティによって、前記少なくとも1つのIOデバイス内のキャッシュ内の前記ページテーブルエントリからの情報の任意の既存のコピーを無効化することと、
前記ページ移行エンジンによって、前記IOMMU内のキャッシュ内の前記ページテーブルエントリからの情報の任意の既存のコピーを無効化することと、
を行うように構成されている、
請求項3の電子デバイス。
【請求項5】
前記ページテーブルエントリからの情報のコピーを前記少なくとも1つのIOデバイスに提供しない場合に、
前記IOMMUは、
前記少なくとも1つのIOデバイスからのアドレス変換サービス(ATS)要求に応じて、前記ページテーブルエントリからの情報のコピーを前記少なくとも1つのIOデバイスに提供しないように構成されている、
請求項3の電子デバイス。
【請求項6】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定する場合に、
前記ページ移行エンジンは、
前記移行状態情報を、第1の値であって、前記IOMMUによって読み取られると、前記メモリのページへの第1のタイプの新たに遭遇したメモリアクセスをストールするが、前記メモリのページへの前記第1のタイプ及び第2のタイプの既存のメモリアクセス並びに前記第2のタイプの新たに遭遇したメモリアクセスを進行させることを許可することによって、前記メモリのページのメモリアクセスの性能を前記IOMMUに制御させる、第1の値に設定するように構成されている、
請求項2の電子デバイス。
【請求項7】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定する場合に、
前記ページ移行エンジンは、
前記移行状態情報を、第2の値であって、前記IOMMUによって読み取られると、前記メモリのページへの前記第1のタイプ及び前記第2のタイプの両方の新たに遭遇したメモリアクセスをストールするが、前記メモリのページへの前記第1のタイプ及び前記第2のタイプの既存のメモリアクセスを完了することを許可することによって、前記メモリのページのメモリアクセスの性能を前記IOMMUに制御させる、第2の値に設定するように構成されている、
請求項6の電子デバイス。
【請求項8】
前記メモリのページを移行する準備を行うための動作を実行する場合に、
前記ページ移行エンジンは、
ストールされていない前記メモリのページへの前記第1のタイプ及び前記第2のタイプの任意のメモリアクセスが、前記メモリのページを移行する前に完了することを確実にするように構成されている、
請求項7の電子デバイス。
【請求項9】
前記ページ移行エンジンは、前記メモリのページを移行するための動作を実行するように構成されており、
前記動作は、
前記メモリのページを前記メモリ内の第1の位置から第2の位置に移動させることと、
前記移動が完了した後に、
前記メモリのページを前記メモリ内の前記第2の位置に記憶されているものとして識別するように、前記ページテーブルエントリ内の情報を更新することと、
前記移行状態情報を、値であって、前記IOMMUによって読み取られると、前記ページテーブルエントリからの情報を通常どおり使用して、前記メモリのページのメモリアクセスを通常どおり実行することを前記IOMMUに再開させる、値に設定することと、を含む、
請求項2の電子デバイス。
【請求項10】
前記メモリは、2つ以上の異なるタイプのメモリを含み、それぞれのタイプのメモリは、異なるメモリ特性を有し、
前記メモリのページをメモリ内の前記第1の位置から前記メモリ内の前記第2の位置に移動させることは、前記メモリのページを前記メモリのタイプのうち第1のタイプから前記メモリのタイプのうち第2のタイプに移動させることを含む、
請求項9の電子デバイス。
【請求項11】
前記ソフトウェアエンティティは、移行されていない他のメモリのページに関する他のページテーブルエントリ内の移行状態情報を、値であって、前記IOMMUによって読み取られると、前記IOMMUに、前記ページテーブルエントリからの情報を通常どおり使用させ、前記メモリのページのメモリアクセスを通常どおり実行させる、値に設定するように構成されている、
請求項2の電子デバイス。
【請求項12】
前記ソフトウェアエンティティは、オペレーティングシステム又はハイパーバイザのうち何れかである、
請求項1の電子デバイス。
【請求項13】
前記電子デバイスに結合される又は含まれる前記少なくとも1つのIOデバイスを備える、
請求項1の電子デバイス。
【請求項14】
電子デバイス内のメモリ内のメモリのページを移行するための方法であって、
前記メモリ内の少なくとも1つのIOデバイスによってアクセス可能なメモリのページを移行する準備を行うための動作を実行することであって、実行されている動作に基づいて、前記メモリのページに関するページテーブルエントリ内の移行状態情報を設定することを含む、ことと、
前記ページテーブルエントリ内の前記移行状態情報を使用して、前記電子デバイス内のIOMMUの1つ以上の動作を制御することと、を含む、
方法。
【請求項15】
前記ページテーブルエントリ内の前記移行状態情報を使用して前記IOMMUの前記1つ以上の動作を制御することは、
前記ページテーブルエントリからの情報の使用と、
前記メモリのページのメモリアクセスと、
のうち少なくとも1つを制御することを含む、
請求項14の方法。
【請求項16】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定することは、
前記移行状態情報を値に設定することを含み、
前記値は、前記IOMMUによって読み取られると、
前記ページテーブルエントリからの情報のコピーを前記IOMMU内のキャッシュに記憶しないことと、
前記ページテーブルエントリからの情報のコピーを、前記少なくとも1つのIOデバイス内のキャッシュに記憶されるように前記少なくとも1つのIOデバイスに提供しないことと、
によって、前記ページテーブルエントリからの情報の使用を前記IOMMUに制御させる、
請求項15の方法。
【請求項17】
前記メモリのページを移行する準備を行うことは、
前記少なくとも1つのIOデバイス内のキャッシュ内の前記ページテーブルエントリからの情報の任意の既存のコピーを無効化することと、
前記IOMMU内のキャッシュ内の前記ページテーブルエントリからの情報の任意の既存のコピーを無効化することと、を含む、
請求項16の方法。
【請求項18】
前記ページテーブルエントリからの情報のコピーを前記少なくとも1つのIOデバイスに提供しないことは、
前記少なくとも1つのIOデバイスからのアドレス変換サービス(ATS)要求に応じて、前記ページテーブルエントリからの情報のコピーを前記少なくとも1つのIOデバイスに提供しないことを含む、
請求項16の方法。
【請求項19】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定することは、
前記移行状態情報を、第1の値であって、前記IOMMUによって読み取られると、前記メモリのページへの第1のタイプの新たに遭遇したメモリアクセスをストールするが、前記メモリのページへの前記第1のタイプ及び第2のタイプの既存のメモリアクセス並びに前記第2のタイプの新たに遭遇したメモリアクセスを進行させることを許可することによって、前記メモリのページのメモリアクセスの性能を前記IOMMUに制御させる、第1の値に設定することを含む、
請求項15の方法。
【請求項20】
前記メモリのページに関する前記ページテーブルエントリ内の移行状態情報を設定することは、
前記移行状態情報を、第2の値であって、前記IOMMUによって読み取られると、前記メモリのページへの前記第1のタイプ及び前記第2のタイプの両方の新たに遭遇したメモリアクセスをストールするが、前記メモリのページへの前記第1のタイプ及び前記第2のタイプの既存のメモリアクセスを完了することを許可することによって、前記メモリのページのメモリアクセスの性能を前記IOMMUに制御させる、第2の値に設定することを含む、
請求項19の方法。
【請求項21】
前記メモリのページを移行する準備を行うことは、
ストールされていない前記メモリのページへの前記第1のタイプ及び前記第2のタイプの任意のメモリアクセスが、前記メモリのページを移行する前に完了することを確実にすることを含む、
請求項20の方法。
【請求項22】
前記メモリのページを移行するための動作を実行することを含み、
前記動作は、
前記メモリのページを前記メモリ内の第1の位置から第2の位置に移動させることと、
前記移動が完了した後に、
前記メモリのページを前記メモリ内の前記第2の位置に記憶されているものとして識別するように、前記ページテーブルエントリ内の情報を更新することと、
前記移行状態情報を、値であって、前記IOMMUによって読み取られると、前記ページテーブルエントリからの情報を通常どおり使用して、前記メモリのページのメモリアクセスを通常どおり実行することを前記IOMMUに再開させる、値に設定することと、を含む、
請求項15の方法。
【請求項23】
前記メモリは、2つ以上の異なるタイプのメモリを含み、それぞれのタイプのメモリは、異なるメモリ特性を有し、
前記メモリのページをメモリ内の前記第1の位置から前記メモリ内の前記第2の位置に移動させることは、前記メモリのページを前記メモリのタイプのうち第1のタイプから前記メモリのタイプのうち第2のタイプに移動させることを含む、
請求項22の方法。
【請求項24】
移行されていない他のメモリのページに関する他のページテーブルエントリ内の移行状態情報を、値であって、前記IOMMUによって読み取られると、前記IOMMUに、前記ページテーブルエントリからの情報を通常どおり使用させ、前記メモリのページのメモリアクセスを通常どおり実行させる、値に設定することを含む、
請求項15の方法。
【請求項25】
前記ソフトウェアエンティティは、オペレーティングシステム又はハイパーバイザのうち何れかである、
請求項14の方法。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術)
いくつかの電子デバイスは、データが記憶されるメモリと共に、計算、制御、メモリアクセス及び他の動作を実行するプロセッサ(例えば、中央演算処理装置等)を含む(ここで、「データ」は、プログラムコード命令、計算動作のための及び計算動作からの入力又は結果データ、定数値等の情報の総称として使用される)。そのような電子デバイスの多くは、ネットワークインターフェースデバイス、ディスクコントローラ等の入出力(IO)デバイスも含む。IOデバイスは、様々な動作を実行するためにプロセッサ及びメモリと相互作用し得る。例えば、ネットワークインターフェースデバイスは、ネットワークを介して受信されたデータをメモリに記憶し、次いで、メモリに記憶されたデータが処理を待っていることをプロセッサにシグナリングし得る。
【0002】
場合によっては、電子デバイス内のメモリに記憶されたデータは、データへのアクセスが非効率的であるような方法でメモリに記憶され得る。例えば、メモリは、2つの異なるタイプのメモリの組み合わせを使用して実装される場合があり、メモリのタイプのうち一方は、より高速アクセスであるが、より高価なメモリのタイプあり、他方は、より低速アクセスであるが、より安価なメモリのタイプである。頻繁にアクセスされ、優先度が高く、及び/又は、タイムクリティカルなデータがより低速なタイプのメモリに記憶される場合、又は、その逆の場合、そのようなメモリにおいて非効率性が生じる可能性がある。別の例として、不均一メモリアクセス(non-uniform memory access、NUMA)電子デバイスのリモートソケット内のメモリの一部分等のメモリのリモート部分にデータが記憶されている場合に非効率性が生じる可能性がある。
【0003】
メモリ内のデータにアクセスする際の非効率性は、電子デバイスの全体的な性能に影響を与え得るため、いくつかの電子デバイスは、データがメモリ内のより適切な位置に記憶されるように、メモリ内のデータを動的に再配置又は「移行」するための移行機構を含む。例えば、メモリ内のデータは、メモリ管理及び移行の目的で、指定されたサイズ(例えば、4KiB、2MiB等)のデータの連続ブロック、又は、「メモリのページ」に編成され得る。移行機構は、メモリのページのアクセスを監視し、メモリのページのアクセスの指定されたパターン又は特性に基づいてメモリのページを選択的に移行することができる。例えば、上述した2つの異なるタイプのメモリを有する電子デバイスにおいて、より低速なタイプのメモリに記憶されたメモリのページが十分に頻繁にアクセスされている場合、移行機構は、メモリのページをより低速なタイプのメモリからより高速なタイプのメモリに移行することができる。いくつかの電子デバイスでは、移行機構は、メモリのページを自動的且つ自発的に移行させ、したがって、メモリのページは、メモリのページへのアクセス権を有するアクセスエンティティ(例えば、プロセッサ、IOデバイス等)のそれぞれに移行に関する情報を通信することなく移行され得る。言い換えれば、移行機構は、アクセスエンティティのそれぞれが必ずしも移行の直接の知識を有することなく、移行の承認を与えることなく、及び/又は、移行に関係することなく、メモリのページを「ひそかに」移行する。
【0004】
いくつかの電子デバイスでは、いくつか又は全てのIOデバイスは、メモリのページを移行するためのサポートを提供しない。例えば、IOデバイスは、メモリのページが移行される場合にメモリのページが一時的に利用不可能になることが分かった場合に発生し得るフォールト(例えば、ページフォールト等)を処理するためのソフトウェア及び/又はハードウェアサポートを含まない、より古い又はより単純なIOデバイスである可能性がある。そのようなIOデバイスにとってアクセス可能なメモリのページが移行されることになり、IOデバイスが移行中にメモリのページ又はメモリのページに関連付けられた情報(例えば、アドレス変換情報等)へのアクセスを試みると、IOデバイス及び/又は電子デバイス(例えば、プロセッサ等)内の他の機能ブロック及びデバイスは、クラッシュするか、エラーを経験するか、又は、予期せぬ若しくは望ましくない方法で動作する可能性がある。
【図面の簡単な説明】
【0005】
【
図1】いくつかの実施形態による、電子デバイスを示すブロック図である。
【
図2】いくつかの実施形態による、オペレーティングシステム並びに電子デバイス内の機能ブロック及びデバイスを示すブロック図である。
【
図3】いくつかの実施形態による、ハイパーバイザ並びに電子デバイス内の機能ブロック及びデバイスを示すブロック図である。
【
図4】いくつかの実施形態による、ページテーブルを示すブロック図である。
【
図5】いくつかの実施形態による、ページテーブルエントリ内のメタデータを示すブロック図である。
【
図6】いくつかの実施形態による、移行状態を示す状態図である。
【
図7】いくつかの実施形態による、メモリのページを移行するためのプロセスを示すフロー図である。
【発明を実施するための形態】
【0006】
図面及び記載を通して、同様の符号は、同じ図面要素を指す。
【0007】
以下の記載は、任意の当業者が記載の実施形態を生成及び使用することを可能にするために提示され、特定の用途及びその要件のコンテキストにおいて提供される。記載の実施形態に対する様々な修正は、当業者には容易に明らかであり、本明細書に記載の一般原理は、他の実施形態及び用途に適用され得る。これにより、記載の実施形態は、示される実施形態に限定されず、本明細書に記載の原理及び特徴と一致する最も広い範囲が与えられるべきである。
【0008】
(用語)
以下の記載では、実施形態を記載するために様々な用語が使用される。以下は、用語のうち1つの簡略化された一般的な説明である。この用語が明確さ及び簡潔さのために本明細書に記載されない重要な更なる態様を有する場合があり、したがって、説明がこの用語を限定しようとするものではないことに留意されたい。
【0009】
機能ブロック:機能ブロックは、集積回路構成、ディスクリート回路構成等の一組の相互に関連する回路構成を指す。回路構成は、回路構成内の回路要素が少なくとも1つの特性を共有することに「相互に関連している」。例えば、回路は、特定の集積回路チップ、基板、回路基板、又は、その一部分に含まれ、その上に製造され、あるいはさもなければ、結合されてもよく、特定の動作(例えば、計算動作、制御動作、記憶動作等)の実行に関与してもよく、共通制御要素及び/又は共通クロックによって制御される等してもよい。機能ブロックの回路は、単一の回路要素(例えば、単一の集積回路論理ゲート又はディスクリート回路要素)から数百万又は数十億個の回路要素(例えば、集積回路メモリ)までの任意の数の回路要素を有することができる。幾つかの実施形態では、機能ブロックは、プログラムコードを実行することなく動作を実行する回路を使用して「ハードウェアでの」動作を実行する。
【0010】
データ:データは、メモリに記憶され、並びに/又は、計算、制御及び/若しくは他の動作で使用され得る情報を示す総称である。データは、実際のデータ(例えば、計算又は制御動作の結果、処理回路の出力、計算又は制御動作のための入力、変数値、センサ値等)、ファイル、プログラムコード命令、制御値、及び/又は、他の情報等の情報を含む。データは、メモリへのデータのロード、移行等の動作のための上述したタイプの情報のうちの1つ以上を含む論理ブロック(例えば、メモリの4KiB又は2MiBページ等)に編成され得る。
【0011】
アクセス:メモリ(例えば、メインメモリ、キャッシュメモリ等)に記憶されたデータとの相互作用に適用されるようなアクセス、すなわち「メモリアクセス」は、データ並びに対応するメタデータ及び/若しくは制御値のために、それらに対して、それらを使用して、及び/又は、それらと共に実行され得る、全ての形態の相互作用を示す。例えば、アクセスとしては、メモリからのデータの読み出し若しくはロード、メモリへのデータの書き込み若しくは記憶、メモリ内のデータの無効化若しくは削除、メモリ内のデータに対するメタデータの読み出し若しくは書き込み、ステータスの変更、コヒーレンシ状態、又は、メモリ内のデータに対する許可等が挙げられ得る。特定のタイプのメモリアクセスが、所定の機能ブロック又はデバイスに対して許容/許可されている場合、データはその所定の機能ブロック又はデバイスにとって「アクセス可能」である。
【0012】
(仮想メモリ)
説明される実施形態では、電子デバイスは、電子デバイス内で実行されるソフトウェアエンティティ(例えば、アプリケーションプログラム、オペレーティングシステム、デバイスドライバ、仮想マシン等)によって、又は、入出力(IO)デバイス(例えば、ネットワークインターフェースデバイス、Peripheral Component Interface Express(PCIe)バスデバイス、ディスクコントローラ等)によってデータアクセスを処理するための仮想メモリ技術を使用する。一般に、データがソフトウェアエンティティ又はIOデバイスによって最初にアクセスされる場合、データを含む所定のサイズ(例えば、4KiB、2MiB等)のメモリのブロック又はページが、大容量記憶装置(例えば、ディスクドライブ又は不揮発性半導体メモリ)から電子デバイス内のメモリ(例えば、メインメモリ)内の利用可能な物理位置にコピーされるか、又は、メモリのページがメモリ内に新たに(例えば、計算又は他の動作の結果等を記憶するために)生成される。ソフトウェアエンティティ及びIOデバイスがメモリ内のページの物理位置を追跡する必要がないように、電子デバイスが、ソフトウェアエンティティ又はIOデバイスのページの物理位置を追跡する。ソフトウェアエンティティ及びIOデバイスは、メモリ内のデータの物理位置(又は物理アドレス)に基づくアドレスを使用してメモリにアクセスする代わりに、対応するソフトウェアエンティティ又はIOデバイスに固有のローカルアドレス空間である仮想アドレス空間内の「仮想」アドレスを使用してメモリにアクセスする。ソフトウェアエンティティ又はIOデバイスの観点から、仮想アドレスは、データがメモリ内に記憶されている実際の物理位置を示し、メモリアクセスは、それに応じて仮想アドレスを使用してソフトウェアエンティティ及びIOデバイスによって行われる。しかしながら、仮想アドレスは、データがメモリ内のページに記憶される物理位置の物理アドレスに直接マッピングされない場合がある。ページの物理位置を追跡することの一部として、電子デバイスは、メモリアクセス要求においてソフトウェアエンティティ及びIOデバイスによって使用される仮想アドレスを、データが実際に位置する物理アドレスに変換する。次いで、電子デバイスは、物理アドレスを使用して、ソフトウェアエンティティ及びIOデバイスのためのメモリアクセスを実行する。
【0013】
上述した仮想アドレスから物理アドレスへの変換を可能にするために、電子デバイスはページテーブルを含む。ページテーブルは、エントリ又は「ページテーブルエントリ」を含む電子デバイスのメモリに記憶されたレコードであり、仮想アドレスから物理アドレスへの変換情報及びメモリに記憶されたデータのページに関する他の情報を有する。言い換えれば、ページテーブルは、メモリ内に存在するデータのページごとに、仮想アドレスと対応する物理アドレスとのマッピングを含む。所定の仮想アドレスでメモリにアクセスする要求をソフトウェアエンティティ又はIOデバイスから受信すると、電子デバイスは、ページテーブルウォークを実行することによってページテーブルから対応する物理アドレス情報を取得し、ページテーブルウォーク中に、仮想アドレスに関連付けられた物理アドレスを提供するページテーブルエントリについてページテーブルが検索される。例えば、所定の仮想アドレスにおいてメモリにアクセスする要求をオペレーティングシステムから受信すると、電子デバイス内の中央演算処理装置(central processing unit、CPU)コア内のメモリ管理ユニット(memory management unit、MMU)は、ページテーブルウォークを実行してページテーブルから対応する物理アドレス情報を取得し、物理アドレス情報を使用してメモリアクセスを処理し得る。別の例として、所定の仮想アドレスでメモリにアクセスする要求をIOデバイスから受信すると、電子デバイス内の入出力メモリ管理ユニット(input-output memory management unit、IOMMU)は、ページテーブルウォークを実行してページテーブルから対応する物理アドレス情報を取得し、物理アドレス情報を使用してメモリアクセスを処理し得る。
【0014】
上述したページテーブルウォークは比較的低速であるため、ページテーブルウォークの実行を回避することが望ましい。したがって、電子デバイスは、ページテーブルウォーク中に取得されたアドレス変換情報(すなわち、ページテーブルエントリに基づく情報)の限られた数のコピーを記憶するために使用されるローカルキャッシュであるトランスレーションルックアサイドバッファ(translation lookaside buffer、TLB)を含む。例えば、CPUは、ソフトウェアエンティティのためのメモリアクセスに使用されるページテーブルエントリに基づく情報のコピー(又はページテーブルエントリ自体のコピー)をローカルに記憶するために使用されるTLBを含み得る。別の例として、IOMMUは、IOデバイスのためのメモリアクセスに使用されるページテーブルエントリに基づく情報のコピー(又はページテーブルエントリ自体のコピー)をローカルに記憶するために使用されるTLBを含み得る。動作中、CPUコア又はIOMMUは、まず、仮想アドレスから物理アドレスへの変換を実行するために、対応するTLBからキャッシュされたページテーブルエントリを取得しようと試みる。対応するページテーブルエントリのコピーがTLBに存在しない場合(すなわち、「ミス」が発生した場合)、CPUコア又はIOMMUは、所望のページテーブルエントリを取得するためにページテーブルウォークを実行する。次いで、CPUコア又はIOMMUは、取得されたページテーブルエントリのコピーを、後で使用するためにそれぞれのTLBにキャッシュし得る。
【0015】
いくつかの実施形態では、IOMMU及びIOデバイスは、PCI Express(PCIe)アドレス変換サービス(Address Translation Services、ATS)等のアドレス変換のための通信プロトコルをサポートする。ATSの場合、入出力(IO)デバイスは、それぞれのIOデバイスがページテーブルエントリに基づいたコピー情報(又はページテーブルエントリ自体)を記憶するために使用する対応のローカルキャッシュ又は「アドレス変換キャッシュ」(address translation cache、ATC)を含み得る。一般に、IOデバイスがページテーブルエントリに基づく情報のローカルコピー(又は、より単純には、ページテーブルエントリ全体のコピー)を望む場合、IOデバイスは、IOMMUからページテーブルエントリに基づく情報を要求する。IOMMUは、IOデバイスが情報を有することを許可されていることを確認し、次いで、ページテーブルエントリに基づく情報をIOデバイスに提供する。IOデバイスは、次に、ページテーブルエントリに基づく情報を、後で使用するためにATCに記憶する。したがって、ATCを使用すると、IOデバイスは、IOMMUからのページテーブルエントリに基づいて情報を繰り返し要求する必要を回避することができる。
【0016】
(メモリのページの移行)
説明される実施形態では、メモリのページはメモリ内で移行され得る。移行のために、メモリのページはメモリ内で物理的に移動され、その結果、ページは、メモリ内の第1の位置からメモリ内の第2の位置に再配置される。例えば、メモリのページがメモリの8KiBページであり、最初にアドレスA~A+8KiB-1に位置している場合、そのページはアドレスB~B+8KiB-1に移行され得る。いくつかの実施形態では、メモリのページは、メモリのページ及び/又はメモリ自体により適したメモリ内の位置にメモリのページを再配置するために移行される。例えば、頻繁にアクセスされる又はより優先度の高いメモリのページは、より遅いアクセス速度を有する第1のタイプのメモリから、より速いアクセス速度を有する第2のタイプのメモリに移行され得るか、又は、その逆であり得る。別の例として、メモリのページは、メモリ内のメモリ回路の消耗を回避するためにメモリ内で移行され得る。更に別の例として、メモリのページは、アクセスされているメモリの他のページのより近くにメモリのページを配置するために、メモリ内で移行され得る。更に別の例として、いくつかの実施形態では、メモリは、不均一メモリアクセス(NUMA)用に構成されており、メモリの複数の部分のそれぞれがそれぞれの処理ノードの近くに配置されており、メモリのページは、ノード内のメモリの部分間で移行され得る。
【0017】
いくつかの実施形態では、メモリのページを移行する決定は、メモリのページが移行される条件を識別する1つ以上の移行規則(すなわち、ガイドライン、規格、閾値等)に基づいて、電子デバイス内のソフトウェアエンティティ及び/又は機能ブロック若しくはデバイスによって行われる。例えば、電子デバイス内のプロセッサによって実行されるオペレーティングシステム又はハイパーバイザは、メモリのページに対して行われるアクセスの頻度又はタイプに基づいて、メモリのページが移行されるべきであることを決定し得る。別の例として、プロセッサ内のメモリ管理ユニット機能ブロックは、メモリのページを求めるメモリアクセス要求において識別された優先度に基づいて、メモリのページがより遅いアクセスメモリからより速いアクセスメモリに移行されるべきであることを決定し得る。
【0018】
プロセッサは、メモリ内のメモリのページを移行させること、すなわち、メモリ内のメモリのページの個々のバイトを物理的に移動させることが可能であるが、プロセッサを使用して移行を実行することは、他の動作(例えば、計算動作、他のタイプのメモリアクセス等)のためによりよく使用されるプロセッサリソースを消費する可能性がある。したがって、いくつかの実施形態では、メモリのページの移行は、プロセッサからページ移行エンジン機能ブロック又はデバイス(メモリ内のメモリのページを物理的に移動させるための動作を実行するダイレクトメモリアクセス(direct memory access、DMA)機能ブロックを含み得る)にオフロードされる。ページ移行エンジンは、メモリのページの識別及びメモリ内の宛先位置が与えられると、メモリのページの移行を実行することができ、実行するように最適化され得る。
【0019】
(概要)
説明される実施形態では、電子デバイスと、プロセッサ及び1つ以上の入出力(IO)デバイス(IOデバイスとしては、ネットワークインターフェース、ディスクコントローラ、グラフィックス処理ユニット等の機能ブロック又は実際のデバイスが挙げられ得る)と、を含む。また、電子デバイスは、プロセッサ及び/又はIOデバイスによる使用のためのデータの記憶に使用されるメモリを含む。電子デバイスは、メモリに記憶されたデータをコピー、移動及び他の方法で処理するための動作を実行する少なくとも1つのページ移行エンジン機能ブロックを更に含む。これらの動作の一部として、ページ移行エンジンは、メモリのページ(例えば、メモリの4KiBページ)の移行に関連付けられた動作を実行し、これは、移行規則に従ってメモリ内でメモリのページを再配置することを伴う。また、電子デバイスは、IOデバイスによるメモリアクセスを管理する入出力メモリ管理ユニット(IOMMU)を含む。説明される実施形態では、IOMMUは、IOデバイスにとってアクセス可能であり、移行される又は移行されているメモリのページのIOデバイスアクセスを制御するための動作、及び、そのようなメモリのページに関するページテーブルエントリからの情報の使用を制御するための動作を実行する。IOMMUによって実行される動作は、IOデバイスが移行されていたメモリのページにアクセスした(又はメモリの欠落ページに遭遇した)場合、及び/又は、そのようなメモリのページに関するページテーブルエントリからの誤った情報を使用した場合に起こり得るエラー又はフォールトを、IOデバイス(より一般的には電子デバイス)が経験しないことを保証することを対象とする。
【0020】
説明される実施形態では、ページテーブルは、移行されているメモリのページ及びそれぞれのページテーブルエントリのアクセスを制御することを支援するために使用される移行情報をページテーブルエントリ内に含む。ページテーブルエントリは、上述した変換情報及びメタデータと共に、移行状態情報を含む。移行状態情報は、ページテーブルエントリに関連付けられたメモリのページを移行するための準備が行われているか、又は、メモリのページが移行されているか(いないか)の指標を含む。例えば、いくつかの実施形態では、移行状態情報は2ビットを含み、2ビットのそれぞれの可能な組み合わせは、移行状態のセットの中から対応する移行状態を識別する。00によって識別される第1の、すなわち「非移行」移行状態では、メモリのページは移行されていない。01及び10によってそれぞれ識別される第2及び第3の移行状態では、メモリのページを移行するための対応する準備が行われている。11によって識別される第4の移行状態では、メモリのページを移行するための最終準備が行われているか、又は、メモリのページが移行中である(すなわち、実際にメモリ内で再配置されている)。
【0021】
いくつかの実施形態では、プロセッサは、ページ移行エンジンと組み合わせて、移行のためにメモリのページを準備し、メモリのページの移行を処理するための動作のうち少なくともいくつかを実行するソフトウェアエンティティを実行する。例えば、ソフトウェアエンティティは、ハイパーバイザ、オペレーティングシステム、アプリケーションプログラム等であるか又はそれらを含み得る。メモリのページを移行するための準備を行うためにソフトウェアエンティティ及び/又はページ移行エンジンによって実行される動作の中には、メモリのページの移行状態情報を設定することがある。例えば、電子デバイス内の機能ブロック及びデバイスが上述した移行状態のそれぞれを経て進行すると、ソフトウェアエンティティ又はページ移行エンジンは、それに応じて移行状態情報を設定し得る。ソフトウェアエンティティ及び/又はページ移行エンジンによって実行される別の動作は、IOMMU又はIOデバイス内のキャッシュに記憶されたページを移行するためにページテーブルエントリに既存する情報のコピーを無効化することである。ページ移行エンジンによって実行される更なる動作は、メモリのページを移行した後に、メモリのページに関するページテーブルエントリを更新して、メモリのページのためのメモリ内の新しい位置を識別し、ページテーブルエントリ内の移行状態情報を、非移行状態を示すように設定することである。
【0022】
いくつかの実施形態では、IOMMUは、ページテーブルエントリ内の移行状態情報に基づいて、メモリのページ及びページテーブルエントリに対するアクセス制限を実施する。例えば、移行状態情報が、メモリのページを移行するための準備が行われていること、又は、メモリのページが移行されていることを示す場合、IOMMUは、IOMMU自体及びIOデバイスがローカルキャッシュ内のページテーブルエントリからの情報のコピーを記憶又は使用することを防止し得る。別の例として、ページテーブルエントリ内の移行情報が、メモリのページが移行のために準備されている又は移行されていることを示す場合、IOMMUは、メモリのページのアクセスがそれに応じて処理されることを保証し得る。すなわち、IOMMUは、メモリのページが移行される前にメモリのページの既存のメモリアクセスが完了され、メモリのページが移行された後まで、メモリのページの新たに遭遇したメモリアクセスがストールされる(すなわち、保持される、バッファリングされる等)ことを保証し得る。対照的に、ページテーブルエントリ内の移行情報が、メモリのページが非移行移行状態にある(したがって移行されていない)ことを示す場合、IOMMUは、メモリのページ及びページテーブルエントリの通常アクセスを許容し得る。
【0023】
いくつかの実施形態では、IOデバイスのいくつか又は全ては、PCI Express(PCIe)アドレス変換サービス等のアドレス変換サービス(ATS)をサポートし、アドレス変換サービスは、IOデバイスが、IOMMUから、IOデバイス内のローカルキャッシュ又は「アドレス変換キャッシュ(ATC)」内のエントリにローカルにキャッシュされるページテーブルエントリからの情報を要求し得る規格である。ページテーブルエントリからの情報のコピーがIOデバイス内のキャッシュに記憶されることを防止するための上述の動作の一部として、IOMMUは、移行される又は移行されているメモリのページに関連付けられたページテーブルエントリからの情報に対するATS要求を拒絶/拒否し得る。例えば、いくつかの実施形態では、IOMMUは、メモリのページが存在しないことを要求側IOデバイスに通知することによってATS要求に応答し、これにより、IOデバイスは、メモリのページをIOページテーブル内に存在させるための動作に進む。別の例として、IOMMUは、変換されていないアドレスがメモリのページにアクセスするために使用されるべきであり、したがって、IOデバイスにIOページテーブルエントリからの情報が提供されないことを、要求側IOデバイスに通知し得る。
【0024】
上述した動作は、IOデバイスにとってアクセス可能であり、移行の準備をしている又は移行しているメモリのページに対して実行されるが、他のタイプのメモリのページは、移行時に異なるように処理され得る。例えば、いくつかの実施形態では、IOデバイスにとってアクセス可能ではないが、代わりにプロセッサにとってのみアクセス可能であるメモリのページは、それぞれのページテーブルエントリ内でそのページを「存在しない」とマークし、プロセッサ内のキャッシュ(すなわち、トランスレーションルックアサイドバッファ)内のそのようなメモリのページに関するページテーブル情報の任意のコピーを無効化することによって移行され得る。この場合、プロセッサは、(例えば、ページフォールト等を介して)欠落ページを処理するための機構を含む。加えて、移行の準備をしていない又は移行していないメモリのページ、及び、それらの対応のページテーブルエントリは、IOデバイスにとってアクセス可能である場合であっても、メモリアクセス順序付け規則等が考慮されるが、通常どおりアクセスされ得る。
【0025】
IOデバイスにとってアクセス可能なメモリのページの移行を処理することによって、説明される実施形態は、それ自体がメモリのページの移行を適切に処理しない可能性があるIOデバイスが存在するにもかかわらず、メモリのそのようなページがメモリ内でより自由に移行されることを可能にする。これらのメモリのページを移行することは、メモリのページがメモリ内の望ましい位置にあることを保証するのに役立ち得る。これは、メモリの動作を改善することができ、ひいては、メモリ内のメモリのページを使用するプロセッサ及びIOデバイスの動作を改善する。
【0026】
(電子デバイス)
図1は、いくつかの実施形態による、電子デバイス100を示すブロック図である。
図1に見られるように、電子デバイス100は、プロセッサ102、メモリ104、大容量記憶装置106、入出力(IO)デバイス108~110、入出力(IO)ハブ112及びページ移行エンジン114を含む。プロセッサ102、メモリ104、大容量記憶装置106、IOデバイス108~110、IOハブ112及びページ移行エンジン114の全ては、「ハードウェア」に、すなわち、対応する集積回路、ディスクリート回路及び/又はデバイスを使用して実装される。例えば、いくつかの実施形態では、プロセッサ102、メモリ104、大容量記憶装置106、IOデバイス108~110、IOハブ112及びページ移行エンジン114は、1つ以上の半導体チップ上の集積回路に実装されるか、ディスクリート回路及び/又はデバイスと組み合わせた1つ以上の半導体チップ上の集積回路の組み合わせで実装されるか、又は、ディスクリート回路及び/又はデバイスに実装される。
図1において、電子デバイス100は、様々な図要素がより容易に区別されることを可能にするために部分的に陰影が付けられている。
【0027】
プロセッサ102は、電子デバイス100における計算、メモリアクセス、制御、及び/又は、他の動作を実行する機能ブロックである。プロセッサ102はコア116~118を含み、そのそれぞれは、1つ以上の中央演算処理装置(CPU)コア、グラフィックス処理ユニット(graphics processing unit、GPU)コア、埋め込みプロセッサ、特定用途向け集積回路(application specific integrated circuit、ASIC)及び/又は他の計算機能ブロックを含む。
【0028】
プロセッサ102は、様々な動作を実行するためにコア116~118によって使用され得るデータのコピーを記憶するために使用される機能ブロックである、キャッシュメモリ、すなわち「キャッシュ」を含む。
図1に見られるように、プロセッサ102内のキャッシュは、コア116~118内にそれぞれ1次(L1)キャッシュ120~122(L1 120及びL1 122)を含む。L1キャッシュ120~122のそれぞれは、データを記憶するためのメモリ回路及びメモリ回路に記憶されたデータのアクセスを処理するための制御回路を含む。また、プロセッサ102は、共有2次(L2)キャッシュ124及び3次(L3)キャッシュ126を含み、これらはそれぞれ、データを記憶するためのメモリ回路及びメモリ回路に記憶されたデータのアクセスを処理するための制御回路を含む。
【0029】
プロセッサ102は、電子デバイス100においてセキュリティ関連動作を実行するために使用される機能ブロックであるプラットフォームセキュリティプロセッサ(platform security processor、PSP)128を含む。例えば、いくつかの実施形態では、PSP128は、CPUコア、ASIC及び/又はマイクロコントローラを含む。PSP128は、プロセッサ102及び/又はプロセッサ102によって実行されるソフトウェアエンティティ内の他の機能ブロック及びデバイスの指定された悪意のある又は誤った挙動に対して安全であるように設計された回路を含む。したがって、PSP128は、そのような挙動の影響を受けやすい他の機能ブロック、デバイス及び/又はソフトウェアエンティティの動作を安全にするために使用され得る。言い換えれば、PSP128は、電子デバイス100において信頼できる実行環境を有効にすることに関連付けられた動作を実行し得る。この目的のために、PSP128は、暗号化/復号(例えば、鍵生成、データの暗号化/復号等)、ハードウェア及び/又はソフトウェアエンティティの登録及び/又は認証、アクセス許可検証等のための動作を実行し得る。いくつかの実施形態では、PSP128は、IOデバイス108~110にアクセス可能なページの移行を処理するために、本明細書に記載される動作のうち少なくともいくつかを実行する。例えば、ソフトウェアエンティティは、メモリのページを移行させる要求をPSP128に通信することができ、次いで、メモリのページを移行させる要求を後続の処理のためにページ移行エンジン114に転送する前に、メモリのページの移動が許可されていること(すなわち、ソフトウェアエンティティがメモリの特定のページをメモリ内の宛先位置に移動させることが許容されていること等)を検証する。
【0030】
メモリ104は、電子デバイス100内の他の機能ブロックのためのデータを記憶するために使用される機能ブロックである。例えば、いくつかの実施形態では、メモリ104は、電子デバイス100内の「メイン」メモリである。メモリ104は、データを記憶するためのメモリ回路及びメモリ回路に記憶されたデータのアクセスを処理するための回路を含む。
【0031】
いくつかの実施形態では、メモリ104は、メモリ104内のアドレス指定可能な位置のセットの異なる部分がそれぞれのタイプのメモリにあるように配置された2つ以上の異なるタイプのメモリを含む。例えば、いくつかの実施形態では、アドレス指定可能な位置の半分は、第1のタイプのメモリ内にあり、したがって、第1のタイプのメモリ回路を使用して実装され、アドレス指定可能な位置の半分は、第2のタイプのメモリ内にあり、したがって、第2のタイプのメモリ回路を使用して実装される。2つのタイプのメモリの使用は、メモリのタイプ130及びメモリのタイプ132によって
図1に示されている。例えば、メモリのタイプ130は、第5世代ダブルデータレート同期ダイナミックランダムアクセスメモリ(fifth generation double data rate synchronous dynamic random access memory、DDR5 DRAM)又は別のタイプのメモリであり、メモリのタイプ132は、3Dクロスポイント(3D XPoint)メモリ又は別のタイプのメモリであり得る。それぞれのメモリのタイプは、それぞれのメモリ特性を有する。例えば、メモリ特性としては、アクセス速度/待ち時間、アクセス帯域幅、データ保護/検証/誤り訂正、信頼性/平均故障間隔、電力消費、発熱、データアドレス指定可能性(例えば、バイト又はブロックアドレス指定可能性)、データ互換性/仕様、金銭的コスト、設計複雑性等のうちいくつか又は全てが挙げられ得る。
【0032】
大容量記憶装置106は、電子デバイス100内の他の機能ブロック及びデバイスによって使用されるデータを記憶する機能ブロック及び/又はデバイスである。例えば、大容量記憶装置106は、半導体メモリ、ディスクドライブ、光学ドライブ等であるか、又は、それらを含み得る。大容量記憶装置106は、大容量記憶装置106のための電力が遮断されている(又は別様に低減されている)にもかかわらず、記憶されたデータを保持する回路及び/又はデバイスを含み、したがって、データのための不揮発性「長期」記憶装置として機能する。実行時に(すなわち、電子デバイス100が動作する場合に)、データのコピーが大容量記憶装置106から取得され、電子デバイス100内の機能ブロックによるその後の使用のために揮発性メモリ104(及び場合によっては1つ以上のキャッシュ)に記憶される。例えば、データは、所定のサイズ(例えば、4KiB、2MiB、1GiB等)のブロック又はページ単位で大容量記憶装置106から取得/読み取られ、ページは、「メモリのページ」としてメモリ104に記憶され得る。加えて、電子デバイス100内の他の機能ブロック及びデバイスによって生成されるメモリのページは、(例えば、計算結果、ファイル、構成値等を記憶するために)メモリ104内に記憶され、最終的に大容量記憶装置106に書き出され得る。メモリのページは、メモリ104に記憶されている間、メモリのページ及び/又はその中のデータに対するアクセス規則及び許可に従って、他の機能ブロック及びデバイスに対してアクセス可能であり得る。
【0033】
プロセッサ102に戻ると、メモリ管理ユニット(MMU)134は、メモリアクセス要求及びページテーブルからの情報の要求を処理する機能ブロックである。データがプロセッサ102内の機能ブロックによってアクセスされる場合、機能ブロックは、メモリアクセス要求をMMU 134に送信する。例えば、コア116によって実行されているソフトウェアエンティティ(例えば、プログラム、オペレーティングシステム等)は、コア116内の処理回路内のロード/ストアユニットが、(例えば、データのロード又はストア等のための)メモリアクセス要求をMMU134に送信するようにし得る。次いで、MMU134は、メモリアクセス要求を満たす又は解決するために、対応するメモリアクセス要求をL2キャッシュ124、L3キャッシュ126及びメモリ104のうち1つ以上に送信する。例えば、データがロードされる場合、MMU134は、L2キャッシュ124、L3キャッシュ126又はメモリ104からデータを取得し、要求側の機能ブロックにデータを転送し得る。これは、データがメモリ104内に未だ存在しない場合に、大容量記憶装置106からメモリ104へのデータを含む1つ以上のメモリのページをロードすることを意味し得る。
【0034】
MMU134は、ページテーブルウォークを介してページテーブルからアドレス変換情報及び他の情報を取得することに関する動作を実行する機能ブロックであるテーブルウォーカ(TW)136を含む。例えば、上記により詳細に記載されているように、いくつかの実施形態では、電子デバイス100は、仮想メモリを使用して、ソフトウェアエンティティ(例えば、コア116~118によって実行される)が物理アドレスに変換される仮想アドレスを使用してメモリにアクセスすることを可能にする。仮想アドレスを有するソフトウェアエンティティからメモリアクセス要求を受信すると、テーブルウォーカ136は、仮想アドレスを、データがメモリ104内に位置するページの物理アドレスに変換するためのページテーブルウォーク動作を実行する。ページテーブルウォーク動作中に、テーブルウォーカ136は、ページテーブルエントリ及び/又は他のレコードをチェックして、それぞれのメモリアクセスを要求している機能ブロック及び/又はソフトウェアエンティティがそのようなアクセスを実行することを許可されていること、すなわち、物理アドレスにおいてメモリにアクセスすることを許容されていること等、並びに、変換に使用されるページテーブル及び他のレコードが改ざんされていないか、又は、許されないほど修正されていないことを保証し得る。いくつかの実施形態では、テーブルウォーカ136はまた、ページの移行を処理するための、本明細書に記載される動作の一部として、ページテーブルエントリ内の移行状態情報をチェックする。
【0035】
上述したページテーブルの一例を
図1にページテーブル148として示す。概して、ページテーブル148は、エントリ又は「ページテーブルエントリ」を有するレコードであり、仮想アドレスから物理アドレスへの変換情報及びメモリ104に現在記憶されているデータのそれぞれのページについての他の情報を有する。ページテーブル148は、それぞれのページテーブルエントリ内に、本明細書に記載されるようにメモリのページの移行を処理するために使用されるそれぞれの移行状態情報を含む。
図1では単一のエンティティとして示されているが、いくつかの実施形態では、ページテーブル148は、仮想アドレスから物理アドレスへの変換を実行するために組み合わせて使用される複数の個別のページサブテーブルであるか又はそれを含む。加えて、いくつかの実施形態では、ページテーブル148は、仮想マシン及びIOデバイス等のための仮想アドレスから物理アドレスへの変換を実行するために使用される、すなわち、ゲスト仮想アドレス、ホスト仮想アドレス及びホスト物理アドレスのための複数の変換を実行するために使用されるページテーブル(例えば、ホストページテーブル、IOMMUページテーブル等)の階層を含むか又はそれに含まれる。例えば、いくつかの実施形態では、ページテーブル148は、プロセッサ102上で実行されるソフトウェアエンティティに対して仮想アドレスから物理アドレスへの変換(及び他の動作)を実行するためにプロセッサ102によって使用されるホストページテーブルと、IOデバイス108~110に対して仮想アドレスから物理アドレスへの変換(及び他の動作)を実行するためにIOMMU 140によって使用されるIOMMUページテーブルと、を含む。明確にするために、本明細書の例では単一のページテーブルが使用されるが、いくつかの実施形態では、複数のページテーブル、ページテーブルの階層及び/又は個別のページテーブルが、本明細書に記載される対応する動作の調整と共に使用され得る。
【0036】
MMU134は、ページテーブルエントリから取得された情報のコピーを記憶するために使用される機能ブロックであるトランスレーションルックアサイドバッファ(TLB)138を含む。TLB138は、テーブルウォーカ136によって(又は他のソースから)ページテーブルウォーク中に取得されたページテーブルエントリ又はその一部のコピーを記憶するキャッシュのためのメモリ回路を含む。ページテーブルウォークの実行を回避するために、可能な場合、MMU134は、TLB138からアドレス変換情報及び/又は他のページテーブルエントリ情報を取得する。しかしながら、アドレス変換情報及び/又は他のページテーブルエントリ情報がTLB138に存在しない場合、テーブルウォーカ136は、情報を取得するためにテーブルウォークを実行する。いくつかの実施形態では、TLB138内の指定された情報は、本明細書に記載されるように、対応するページが移行される前に無効化される。
【0037】
入出力(IO)デバイス108~110は、プロセッサ102並びに電子デバイス100内の他の機能ブロック及びデバイスと相互作用する機能ブロック又はデバイスである。したがって、プロセッサ102及び他の機能ブロックは、IOデバイス108~110から「入力」データを受信するか又はIOデバイス108~110に「出力」データを送信し得る。また、IOデバイス108~110は、電子デバイス100の外部の機能ブロック又はデバイスと相互作用してもよい。例えば、入出力デバイス108~110としては、ネットワークインターフェースデバイス、ディスクコントローラ、対応する有線又は無線のバス又はインターフェース(例えば、Peripheral Controller Interface Express(PCIe)バス、ユニバーサルシリアルバス(Universal Serial Bus、USB)、WiFi(登録商標)ネットワーク等)に結合されたデバイス、グラフィックス処理ユニット等が挙げられ得る。IOデバイス108~110のそれぞれによって実行される特定の動作は、それぞれのIOデバイスの性質に依存する。例えば、IOデバイス108がディスクコントローラである場合、IOデバイス108は、ディスク(例えば、大容量記憶装置106)からデータを取り出し、メモリ104にデータを書き込むことができ、又は、その逆も可能である。別の例として、IOデバイス110がネットワークインターフェースデバイスである場合、IOデバイス110は、ネットワーク(図示せず)を介して受信されたデータをメモリ104に記憶すること、ネットワークを介して受信デバイスに送信されるデータをメモリ104から取得すること、プロセッサ102にデータを提供するか又はプロセッサ102からデータを取得すること等を行い得る。
【0038】
IOハブ112は、IOデバイス108~110と電子デバイス100内の他の機能ブロックとの間をインターフェースするための動作を実行する機能ブロック又はデバイスである。言い換えれば、IOハブ112は、IOデバイス108~110とプロセッサ102、メモリ104等の機能ブロックとの間で通信及び他のデータをルーティングするための動作を実行する。IOハブ112によってルーティングされる特定の通信及び通信をルーティングするために実行される動作は、IOデバイス108~110の性質に依存するが、メモリアクセス、データ通信、制御及び構成通信等を含み得る。
【0039】
IOハブ112は、IOデバイス108~110によるメモリアクセスを処理するための動作を実行する機能ブロックである入出力メモリ管理ユニット(IOMMU)140を含む。メモリ104内のデータがIOデバイスによってアクセスされる場合、IOデバイスは、対応するメモリアクセス要求を送信する。IOMMU140は、IOデバイスからのメモリアクセス要求を傍受し、その要求を内部で処理して、メモリアクセス要求が進行し得るかどうかを決定し、次いで(メモリアクセス要求が進行し得ると仮定して)データにアクセスするために対応する要求をメモリ104に送信する。
【0040】
IOデバイス108~110からのメモリアクセス要求を処理するためにIOMMU140によって実行される動作の中には、IOデバイス108~110に対するメモリアクセスのための(すなわち、メモリアクセス要求においてIOデバイス108~110によって使用される仮想アドレスに関連付けられたメモリ内の物理アドレスを取得するための)アドレス変換を実行することがある。IOMMU140は、ページテーブル(例えば、ページテーブルウォーク等)からアドレス変換を取得することに関する動作を実行する機能ブロックである、入出力テーブルウォーカ(input-output table walker、IOTW)142を含む。入出力テーブルウォーカ142によって実行される動作は、(プロセッサ102ではなく)IOデバイス108~110からのメモリアクセスに関するものであるが、テーブルウォーカ136によって実行される動作と同様である。いくつかの実施形態では、アドレス変換を実行すると共に、入出力テーブルウォーカ142は、メタデータ及び移行状態情報等のページ情報をチェックして、IOデバイス108~110からのメモリアクセスがメモリのページにおいて許可されているかどうか、及び/又は、メモリのページが本明細書に記載されるように移行されているかどうかを決定する。これらの実施形態では、入出力テーブルウォーカ142は、不適切なメモリアクセス又は移行されているページへのメモリアクセスを回避するために、メモリアクセスをブロックするか又は他の方法で処理し得る。いくつかの実施形態では、入出力テーブルウォーカ142は、IOMMU140に関連付けられたページテーブル、ホストページテーブル、及び/又は、ソフトウェアエンティティ(例えば、ハイパーバイザ、仮想マシン等)に関連付けられたネストされたページテーブルを含むページテーブルの階層を使用し、したがってその階層においてテーブルウォークを実行する。
【0041】
また、IOMMU140は、ページテーブルエントリから取得された情報のコピーを記憶するために使用される機能ブロックであるトランスレーションルックアサイドバッファ(TLB)144を含む。TLB144は、テーブルウォーカの入出力テーブルウォーカ142によって(又は他のソースから)ページテーブルウォーク中に取得されたページテーブルエントリ又はその一部のコピーを記憶するキャッシュのためのメモリ回路を含む。ページテーブルウォークの実行を回避するために、可能な場合、IOMMU140は、TLB144からアドレス変換情報及び/又は他のページテーブルエントリ情報を取得する。しかしながら、アドレス変換情報及び/又は他のページテーブルエントリ情報がTLB144に存在しない場合、入出力テーブルウォーカ142は、情報を取得するためにテーブルウォークを実行する。いくつかの実施形態では、TLB144内の指定された情報は、本明細書に記載されるように、対応するページが移行される前に無効化される。
【0042】
いくつかの実施形態では、IOデバイス108~110のうちいくつか又は全ては、ページテーブルエントリから取得された情報のコピーを記憶するためのローカルキャッシュを含む。例えば、いくつかの実施形態では、IOデバイス108~110のうちいくつか又は全て及びIOMMU140は、アドレス変換サービス(ATS)のためのサポートを提供し、その下で、IOMMU140は、ページテーブルエントリから取得された情報のコピーをIOデバイス108~110に提供してそこにキャッシュし得る。そのようなキャッシュの例が、IOデバイス108内のアドレス変換キャッシュ(address translation cache、ATC)146として示されている。ATC146は、入出力テーブルウォーカ142によって(又は他のソースから)ページテーブルウォーク中に取得されたページテーブルエントリ又はその一部のコピーを記憶するキャッシュのためのメモリ回路を含む。ページテーブルウォークの実行を回避するために、可能な場合、IOデバイス108は、ATC146からアドレス変換情報及び/又は他のページテーブルエントリ情報を取得する。しかしながら、アドレス変換情報及び/又は他のページテーブルエントリ情報がATC146に存在しない場合、入出力テーブルウォーカ142は、情報を取得するためにテーブルウォークを実行する(又は、TLB144からキャッシュされた情報を使用する)。いくつかの実施形態では、ATC146内の指定された情報は、本明細書に記載されるように、対応するページが移行される前に無効化される。
【0043】
いくつかの実施形態では、
図1では単一のエンティティとして示されているが、IOMMU140は、複数の個別のIOMMU(例えば、IOMMU機能ブロックの複数のインスタンス)を含む。例えば、いくつかの実施形態では、電子デバイス100は、少なくとも2つのIOMMU機能ブロックを含み、それぞれのIOMMU機能ブロックは、電子デバイス100内のIOデバイスのセットのサブセットによるメモリアクセスを制御する。これらの実施形態では、これらのIOMMUは一緒に又は「マスタ」IOMMU若しくは他の機能ブロックを介して動作して、本明細書に記載されるように移行中のメモリのページが存在している場合を含め、IOMMUがページテーブル内の情報を使用し、IOデバイスのメモリに適切にアクセスしていることを保証する。例えば、IOMMUは、全てのIOMMUが接続されている通信リンク上で、TLBの無効化、メモリアクセスの完了又はストール等の要求及び肯定応答をブロードキャストして、所定のIOMMUがページテーブルエントリ内の情報にアクセスすること、IOデバイスからのメモリアクセスが進行することを許容すること等の動作を実行する前に、IOMMUの全てが同期されることを保証し得る。
【0044】
ページ移行エンジン114は、メモリ104内のデータにアクセスすることに関連付けられた動作を実行する機能ブロックである。ページ移行エンジン114は、電子デバイス100内の他の機能ブロックからメモリアクセス動作をオフロードするために使用され得る。例えば、いくつかの実施形態では、ページ移行エンジン114は、コア116~118の代わりにメモリアクセスをオフロードし、したがって受信及び実行し、これにより、コア116~118がメモリアクセス動作を実行することを回避することが可能になる。いくつかの実施形態では、ページ移行エンジン114は、他の機能ブロックの中でも、メモリ104内のメモリのページを移動させるための動作を実行する1つ以上のダイレクトメモリアクセス(DMA)機能ブロックを含む。ページ移行エンジン114によって実行されるメモリアクセス動作の中には、メモリ104内のメモリのページを「移行」することがある。移行について、コア116~118のうちの1つから(例えば、コア116によって実行されているオペレーティングシステム等から)、又は、PSP128等の別のソースから、メモリのページ及びメモリのページが記憶されるメモリ内の新しい位置を識別する要求を受信すると、ページ移行エンジン114は、メモリのページを新しい位置に移動させる(すなわち、メモリのページ内の個々のビット/バイトを1つ以上のデータ移動動作において新しい位置に物理的に移動させる)。メモリのページの移行と共に、ページ移行エンジン114は、本明細書に記載されるように、IOデバイスに対してアクセス可能であるメモリのページの移行を処理するための動作を実行する。
【0045】
いくつかの実施形態では、
図1では単一のエンティティとして示されているが、ページ移行エンジン114は、複数の個別のページ移行エンジン(例えば、ページ移行エンジン機能ブロックの複数のインスタンス)を含む。例えば、いくつかの実施形態では、ページ移行エンジン114は、少なくとも2つのページ移行エンジンを含み、それぞれのページ移行エンジンは、電子デバイス100内の他の機能ブロックの代わりに、本明細書に記載されるようにメモリのページを移行することを含む、メモリアクセスを実行するように配置される。これらの実施形態では、ページ移行タスク/要求は、分散方式(例えば、ラウンドロビン、メモリアドレス又はメモリ内の位置による等)に従って2つ以上のページ移行エンジン間で分散され、ページ移行エンジンは、指定されたメモリアクセスを回避するようにアクセスを調整すること等が可能である。
【0046】
いくつかの実施形態では、通信経路は、機能ブロック間の矢印線によって示されるように、電子デバイス100内の機能ブロック間で結合される。通信経路は、1つ以上のバス、ワイヤ、ガイド、及び/又は、場合によってはコントローラ、ファブリック要素(例えば、スイッチ、ルータ等)等を伴う他の接続を含む。通信経路は、コマンド、データ、制御信号及び/又は他の情報を機能ブロック間でルーティングするために使用される。例えば、いくつかの実施形態では、相互接続ファブリックが、IOハブ112と、プロセッサ102(例えば、MMU134)と、メモリ104との間に結合される。いくつかの通信経路は、明確にするために
図1に示されていないことに留意されたい。
【0047】
電子デバイス100は、特定の数及び配置の機能ブロック及びデバイスと共に
図1に示されているが、いくつかの実施形態では、電子デバイス100は、異なる数及び/又は配置の機能ブロック及びデバイスを含む。例えば、いくつかの実施形態では、プロセッサ102は異なる数のコアを含む。別の例として、いくつかの実施形態では、異なる数及び/又は配置のキャッシュがプロセッサ102内に存在する。更に別の例として、いくつかの実施形態では、IOデバイス108はアドレス変換キャッシュを含まないか、又は、両方のIOデバイス108~110が変換キャッシュを含む。概して、説明される実施形態では、電子デバイス100は、本明細書に記載される動作を実行するのに十分な数及び/又は配置の機能ブロックを含む。
【0048】
図1に示される電子デバイス100及びプロセッサ102は、説明のために簡略化されている。しかしながら、いくつかの実施形態では、電子デバイス100及び/又はプロセッサ102は、本明細書に記載される動作及び他の動作を実行するための追加の又は異なる要素及び機構を含む。例えば、電子デバイス100及び/又はプロセッサ102は、電力機能ブロック又はデバイス、ヒューマンインターフェース機能ブロック又はデバイス等を含み得る。
【0049】
いくつかの実施形態では、
図1に別々に示される機能ブロックは、一緒に実装される。例えば、いくつかの実施形態では、IOハブ112及びIOデバイス108~110のうちいくつか又は全ては、同じ集積回路チップ上に製造される等のように、プロセッサ102内に/と共に組み込まれる。言い換えれば、そのような実施形態では、IOハブ112及びIOデバイス108~110は、プロセッサ102と統合され得る(例えば、「システムオンチップ」として、又は、別の形態で)。代替として、いくつかの実施形態では、他の機能ブロックの一部として示される機能ブロックは個別であってもよい。例えば、いくつかの実施形態では、プラットフォームセキュリティプロセッサ128は、プロセッサ102とは別に実装される。
【0050】
電子デバイス100は、計算動作を実行する任意の電子デバイスであり得るか又はそれに含まれ得る。例えば、電子デバイス100は、デスクトップコンピュータ、ラップトップコンピュータ、ウェアラブル電子デバイス、タブレットコンピュータ、スマートフォン、サーバ、人工知能装置、仮想若しくは拡張現実機器、ネットワーク装置、玩具、視聴覚機器、家電、コントローラ、車両等、及び/又は、それらの組み合わせであり得るか又はそれに含まれ得る。
【0051】
(オペレーティングシステム)
いくつかの実施形態では、1つ以上のソフトウェアエンティティは、メモリ内の、IOデバイスがアクセス可能なメモリのページの移行を処理するための動作を実行するために、電子デバイス内の機能ブロックと相互作用する。これらの実施形態のいくつかにおいて、1つ以上のソフトウェアエンティティは、オペレーティングシステムであるか、又は、オペレーティングシステムを含む。
図2は、いくつかの実施形態による、オペレーティングシステム並びに電子デバイス内の機能ブロック及びデバイスを示すブロック図である。
図2は簡略化されており、オペレーティングシステムと電子デバイスハードウェアとの関係を一般的に示していることに留意されたい。いくつかの実施形態では、
図2に示される要素のうちいくつか又は全ては、存在しない及び/又は異なって配置される。
【0052】
図2に見られるように、オペレーティングシステム200は、電子デバイスハードウェア202(すなわち、プロセッサ102等の電子デバイス100の機能ブロック及びデバイス間)とプログラム204~208のセットとの間をインターフェースする。例えば、オペレーティングシステム200は、Microsoft(Redmond,WA)のWindows(登録商標)、Apple,Inc.(Cupertino,CA)のmacOS(登録商標)等のオペレーティングシステムであってもよく、プログラム204~208の各々は、生産性アプリケーション、科学計算アプリケーション、ウェブブラウザ等であってもよい。IOMMU210は、IOデバイス212と電子デバイスハードウェア202(例えば、メモリ104等)との間をインターフェースする。いくつかの実施形態では、
図2の機能ブロック及びデバイス、すなわち、電子デバイスハードウェア202、IOMMU210及びIOデバイス212は、
図1に示すように、それぞれ電子デバイス100内のハードウェア(例えば、プロセッサ102、メモリ104、ページ移行エンジン114等)、IOMMU140及びIOデバイス108~110と同様である。
【0053】
(仮想マシン及びハイパーバイザ)
いくつかの実施形態では、1つ以上のソフトウェアエンティティは、メモリ内の、IOデバイスがアクセス可能なメモリのページの移行を処理するための動作を実行するために、電子デバイス内の機能ブロックと相互作用する。これらの実施形態のいくつかにおいて、1つ以上のソフトウェアエンティティは、ハイパーバイザであるか、又は、ハイパーバイザを含む。一般に、いくつかの実施形態では、電子デバイス内のプロセッサは、1つ以上の仮想マシンを実行する。仮想マシンは、ソフトウェアプログラムを実行するためのサポートを提供するために、電子デバイス内のプロセッサ並びに他の機能ブロック及びデバイス(例えば、メモリ、IOデバイス等)をエミュレートするか、又は、別様にそれらとインターフェースするソフトウェアエンティティである。例えば、仮想マシンは、ゲストオペレーティングシステムと呼ばれるオペレーティングシステムの1つ以上のインスタンスを実行するためのサポートを提供し得る。次いで、ゲストオペレーティングシステムは、アプリケーション、データベース等の他のソフトウェアプログラムを実行するためのサポートを提供する。いくつかの実施形態では、プロセッサは、仮想マシンの実行を制御/管理するための動作を実行するソフトウェアエンティティであるハイパーバイザも実行する。例えば、ハイパーバイザは、仮想マシンを開始及び初期化し、仮想マシンによる電子デバイス内の機能ブロック及びデバイスのアクセスを制御することを支援し(例えば、メモリ及び/又はIOデバイスの何れの領域に仮想マシンがアクセスすることを許容されるかを指示する等)、仮想マシンを終了又は閉鎖すること等を行い得る。
図3は、いくつかの実施形態による、電子デバイス内のハイパーバイザ並びに機能ブロック及びデバイスを示すブロック図である。
図3は簡略化されており、ハイパーバイザと電子デバイスハードウェアとの関係を一般的に示していることに留意されたい。いくつかの実施形態では、
図3に示される要素のうちいくつか又は全ては、存在しない及び/又は異なって配置される。
【0054】
図3に見られるように、3つの仮想マシン(VM)300~304があり、そのそれぞれで対応のゲストオペレーティングシステム(GUEST OS)306~310及び1つ以上のプログラム(PRGRMS)312~316が実行される。ハイパーバイザ318は、ホストオペレーティングシステム320と仮想マシン300~304との間をインターフェースする。ホストオペレーティングシステム320は、電子デバイスハードウェア322とハイパーバイザ318との間をインターフェースする。IOMMU324は、IOデバイス326と電子デバイスハードウェア322との間をインターフェースする。いくつかの実施形態では、
図3の機能ブロック及びデバイス、すなわち、電子デバイスハードウェア322、IOMMU324及びIOデバイス326は、
図1に示すように、それぞれ電子デバイス100内のハードウェア(例えば、プロセッサ102、メモリ104、ページ移行エンジン114等)、IOMMU140及びIOデバイス108~110と同様である。
【0055】
(ページテーブルエントリ)
説明される実施形態では、電子デバイス内の機能ブロック及びデバイス(例えば、プロセッサ102、IOMMU140等)は、仮想アドレスから物理アドレスへの変換を実行するために及び他の動作のために、1つ以上のページテーブルを使用する。
図4は、いくつかの実施形態による、ページテーブル400を示すブロック図である。
図4に見られるように、ページテーブル400は、いくつかのページテーブルエントリ402(そのうちの1つが破線を使用して強調表示されている)を含み、そのそれぞれは、対応するメタデータ406と共に仮想アドレス(VA)から物理アドレス(PA)への変換404を記憶し得る。いくつかの実施形態では、
図1のページテーブル148は、ページテーブル400と同様に内部に配置される。
【0056】
一般に、メモリのページ(すなわち、4KiB、2MiB等の指定されたサイズのメモリのブロック、セクション又は部分)が大容量記憶装置106から取り出され、メモリ104に記憶されるか、又は、メモリ104内に新たに生成されると、対応するページテーブルエントリ402が、仮想アドレスから物理アドレスへの変換404及びメタデータ406と共にページテーブル400に追加される。したがって、メモリのページがメモリ104において利用可能である場合、ページテーブル400は、対応するページテーブルエントリ402を含むべきである。ページテーブルエントリ402は、ページテーブル400に追加されて、メモリ内のページの物理アドレスと、ソフトウェアエンティティ(例えば、プログラム、ファームウェア、オペレーティングシステム等)及び上述したようにメモリのページにアクセスするためのデバイスによって使用される仮想アドレスとの間の関係を追跡することを可能にする。
【0057】
いくつかの実施形態では、ページテーブル400内のそれぞれのページテーブルエントリ402内の仮想アドレスから物理アドレスへの変換404は、1つ以上の仮想アドレスに関連付けられたメモリ内の対応するページの物理アドレスを決定するために使用され得る情報を含む。言い換えれば、それぞれの仮想アドレスから物理アドレスへの変換404は、それぞれの仮想アドレスを使用してソフトウェアエンティティ及び/又はデバイスによってアドレス指定されるメモリのページのメモリ104内の位置を識別するために使用され得る情報を含む。例えば、いくつかの実施形態では、それぞれの仮想アドレスから物理アドレスへの変換404は、1つ以上の仮想アドレスのうちいくつか又は全て(例えば、それぞれの仮想アドレスのMビットのうちのNビット、ここでN≦M)を有する第1のフィールドと、1つ以上の仮想アドレスがマッピング/一致する物理アドレスのうちいくつか又は全てを有する第2のフィールドと、を含む。
【0058】
メタデータ406は、対応する仮想アドレスから物理アドレスへの変換404に関連付けられた、該変換を特徴付ける、該変換を制御する、及び/又は、別様に該変換に関係する情報を含む。メモリのページに関する変換情報がページテーブル400内のページテーブルエントリ402に追加されると、メタデータが取得、生成等され、そのページテーブルエントリ402に追加される。
図5は、いくつかの実施形態による、ページテーブルエントリ内のメタデータ406を示すブロック図である。
図5に見られるように、メタデータ406は、有効性500、許可502、制御504及び移行状態情報(MIG STATE INF)506を含む。有効性500は、ページテーブルのページテーブルエントリ402、そのページテーブルのページテーブルエントリ402内の仮想アドレスから物理アドレスへの変換404、及び/又は、メモリ104内の対応するメモリのページの有効性に関連する1つ以上の値を含む。例えば、有効性500は、ページテーブルエントリ402自体が有効/アクセス可能であるかどうか、及び/又は、メモリ104内の対応するページが有効/アクセス可能であるかどうかを示す1つ以上のビットを含み得る。
【0059】
許可502は、メモリ104内の対応するページに対するアクセス許可に関連する1つ以上の値を含む。例えば、許可502は、メモリ104内の対応するページが読取り専用許可セット又は読み書き許可セットを有するかどうか、ページが特定の特権(管理者、ユーザ、カーネル等)によってのみアクセス可能であるかどうか、及び/又は、他の許可情報を示す1つ以上のビットを含み得る。
【0060】
コントロール504は、ページテーブルエントリ402及び/又はメモリ104内の対応するページの使用に関連する1つ以上の値を含む。例えば、コントロール504は、ページサイズインジケータ、ダーティインジケータ(メモリ104内の対応するページが修正されており、したがって大容量記憶装置106内のメモリの関連ブロックと一致しない場合)、アクセスインジケータ(メモリ104内のページが1回以上アクセスされた場合)、ライトスルーインジケータ(メモリ104内のページへの修正が大容量記憶装置106上のメモリの関連ブロックに直ちに反映される場合)、及び/又は、他の値を含み得る。
【0061】
移行状態情報506は、関連ページを移行するための準備が行われているか又は関連ページが移行されているか(否か)を示す1つ以上の値を含む。例えば、いくつかの実施形態では、移行状態情報は、メモリの対応するページに対するそれぞれの可能な移行状態を一意に識別するのに十分な数のビットを含む。例えば、第1の移行状態が移行されていないページに対するものであり、第6の移行状態がアクティブに移行されているページに対するものであり、4つの中間移行状態がメモリのページを移行するための準備を行うための様々な準備動作に対するものである、6つの移行状態がある場合、移行状態情報は3ビットで記憶され得る。ページテーブルエントリにアクセスする機能ブロック又はデバイスは、移行状態情報506を使用して、メモリのページ及び/又は対応するページテーブルのページテーブルエントリ402内の情報に対してどの動作が許可されるか(又は許可されないか)を決定し得る。例えば、いくつかの実施形態では、移行状態が、メモリのページを移行するための準備が行われていること、又は、メモリのページが移行されていることを示す場合、アクセスする機能ブロック又はデバイスは、ページテーブルエントリからの情報のコピーがローカルキャッシュにキャッシュされることを許可されないこと、及び/又は、メモリのページに対するメモリアクセスのうちいくつか又は全てが制限されることを決定し得る。
【0062】
いくつかの実施形態では、仮想アドレスから物理アドレスへの変換404及びメタデータ406のうち一方又は両方は、ページテーブル400に追加された後に修正/変更、更新等されてもよい。例えば、ページがメモリ104内の第1の位置から第2の位置に移動される場合、対応するページテーブルエントリ402内の仮想アドレスから物理アドレスへの変換404が更新され得る。別の例として、メタデータ406が許可502(例えば、読み出し/書き込み許可)を含む実施形態では、許可502は、メモリ104内の対応するページに対する読み出し専用、読み書き等の許可を示すように更新され得る。更に別の例として、移行状態情報506は、機能ブロック及びデバイスがメモリのページを移行するために移行状態を経て進行するにつれて更新され得る。
【0063】
上述したように、指定された仮想アドレスに関する物理アドレス情報又はメタデータの取得を試みる場合、MMU134、IOMMU140、又は、電子デバイス100内の別のエンティティは、ページテーブルウォークを実行し得る。ページテーブルウォーク中に、MMU134、IOMMU140等は、対応する仮想アドレスから物理アドレスへの変換404が保持されるページテーブルエントリ402が存在する場合には、そのようなページテーブルエントリ402を見つけるためにページテーブル400を検索する。そのようなページテーブルエントリ402に遭遇すると、MMU134、IOMMU140等は、ページテーブルエントリ402から、指定された仮想アドレスに対する物理アドレス(すなわち、ページテーブルエントリ402内の仮想アドレスから物理アドレスへの変換404)又はメタデータを取得する。MMU134、IOMMU140等が対応するページテーブルエントリ402を見つけることができない場合、エラー処理動作が実行される(例えば、ページフォールトが発行され、その後処理される等)。説明される実施形態では、電子デバイス内の機能ブロック及びデバイス(例えば、IOMMU、ページ移行エンジン等)は、IOデバイスが、対応するメモリのページの移行に起因して、欠落している又は利用不可能なページテーブルエントリ(又は対応するメモリのページ)に関する問題に遭遇することを防止するための動作を実行する。例えば、いくつかの実施形態では、メモリアクセス要求のための仮想アドレスから物理アドレスへの変換を決定する場合、入出力テーブルウォーカ142は、それぞれのページテーブルエントリ402内の移行状態情報506をチェックして、仮想アドレスから物理アドレスへの変換404がIOMMU140及び/若しくはIOデバイス108~110によってキャッシュされることが許容されているかどうか、並びに/又は、メモリアクセスが現在の移行状態に起因してストールされるどうかを決定する。
【0064】
ページテーブル400は、特定の数のページテーブルエントリ402と共に示されているが、いくつかの実施形態は、(
図4の省略記号によって示されるように)異なる数のページテーブルエントリ402を含む。更に、ページテーブルエントリ402及びメタデータ406は、特定の配置及びタイプの情報と共に示されているが、いくつかの実施形態では、ページテーブルエントリ402及びメタデータ406の一方又は両方は異なる情報を含む。例えば、いくつかの実施形態では、上述したメタデータの少なくともいくつかは、ページテーブルエントリ402以外の位置に記憶される。例えば、いくつかの実施形態では、移行状態情報を記憶するために個別のメモリ内データ構造が使用される。一般に、ページテーブル400は、電子デバイス内の機能ブロック及びデバイスが、本明細書に記載されるような仮想アドレスから物理アドレスへの変換情報及びメタデータを記憶し、取り出すことを可能にするのに十分な情報を含む。
【0065】
ページテーブル400は単一のページテーブルとして示されているが、いくつかの実施形態では、ページテーブル400は異なるように編成される。例えば、いくつかの実施形態では、ページテーブル400は、階層に配置された2つ以上のサブテーブルを使用して実装される。これらの実施形態では、それぞれのサブテーブルの検索は、仮想アドレスから物理アドレスへの変換404及びメタデータ406が対応するページテーブルエントリ402内に記憶される最終サブテーブルに到達するまで、検索機能ブロック又はデバイスを階層内の次のサブテーブルに方向付ける。
【0066】
(移行状態)
いくつかの実施形態では、メモリのページを移行するための準備が行われ、次いでメモリのページが移行されるにつれ、電子デバイス内の機能ブロック、デバイス及び/又はソフトウェアエンティティ(例えば、IOMMU140、ページ移行エンジン114、プロセッサ102、オペレーティングシステム200及び/又はハイパーバイザ318)は、移行状態のセットの中から移行状態を経て進行する。初期の非移行移行状態とは別に、移行状態のそれぞれにおいて、メモリのページを移行する準備をするため、及び/又は、メモリのページを移行するためのそれぞれの動作が実行される。移行される若しくは移行されているメモリのページ及び/又はそれぞれのページテーブルエントリ内の情報のアクセスの要求は、メモリのページの現在の移行状態に基づいて、電子デバイス内の機能ブロック及びデバイス(例えば、IOMMU140、ページ移行エンジン114等)によって処理される。概して、要求は、それぞれの移行状態の動作が実行されている間、機能ブロック及びデバイスが正しく動作し続けるように処理される。例えば、IOデバイス(例えば、IOデバイス108~110)及び/又はプロセッサ(例えば、プロセッサ102)は、移行中のメモリのページ及び/又はそれぞれのページテーブルエントリのアクセスから生じ得るエラー及びフォールトから保護される。
【0067】
図6は、いくつかの実施形態による、移行状態を示す状態図である。概して、
図6に示される移行状態は、電子デバイス(例えば、電子デバイス100)内の機能ブロック、デバイス及び/又はソフトウェアエンティティが、メモリのページを移行するための準備が行われ、次いでメモリのページが移行されるにつれて進行し得る移行状態の一例である。特定の数及び配置の移行状態、並びに、移行状態間の遷移が
図6に示されているが、いくつかの実施形態では、異なる数及び/若しくは配置の移行状態が使用され、並びに/又は、移行状態間の異なる遷移が使用され得る。
【0068】
図6では、移行状態間の遷移が移行状態間の矢印線を使用して示されている。移行状態間の遷移の第1のセットは、太い線を使用して示され、移行状態間の他の遷移は、細い線を使用して示されている。以下の説明では、移行状態間の遷移の第1のセットが説明され、次いで移行状態間の他の遷移が説明される。しかしながら、異なる線の太さの使用は、移行状態及び移行状態間の遷移を説明する際に単に明確にするためであることに留意されたい。
【0069】
図6に見られるように、移行状態は移行状態(migration state、MS)600~606を含む。「非移行」移行状態である移行状態600では、メモリのページが移行されておらず、ゆえにメモリ内の現在の位置に留まることになる。したがって、移行状態600は、メモリのページが移行されるまでメモリのページが維持される(より一般的には、メモリのページが移行されるまでメモリのページが保持される)移行状態である。移行状態600において、メモリのページに関するページテーブルエントリ内の移行状態情報(例えば、移行状態情報506)は、メモリのページが移行状態600にあることを表すか又は識別するビットシーケンス、値等に設定される。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報(MS)は、移行状態600を表す又は識別するために00に設定され得る。
【0070】
移行状態600では、ページテーブルエントリ内の移行状態情報が、メモリのページを移行状態600にあるものとして識別するので、IOMMUは、IOデバイスからのメモリのページ及びページテーブルエントリ内のそれぞれの情報のアクセスが通常どおり進行することを許容する。すなわち、メモリのページを移行するための準備が行われておらず、メモリのページが移行されていないため、メモリのページ及びページテーブルエントリ内の情報のアクセスは、IOMMUによって防止されず、ストールされず、又は、別様に制限されない。言い換えれば、移行状態600において、IOMMUは、ページテーブルエントリからの情報を通常どおり使用し、メモリのページのメモリアクセスを通常どおり実行する。
【0071】
しかしながら、いくつかの実施形態では、メモリのページ及びそれぞれのページテーブルエントリのアクセスは、移行状態600ではメモリのページの移行に起因して制限されないが、メモリのページ及びページテーブルエントリ内の情報のアクセスに関する他の制限は、依然として実施され得る。例えば、メモリのページが、IOデバイスにとって通常アクセス可能でないメモリのプライベートページであることに起因して、メモリのページがIOデバイスにとってアクセス可能でない場合、移行状態600にあってもそのようなアクセス制限は変更されない。
【0072】
ソフトウェアエンティティ(例えば、ハイパーバイザ、オペレーティングシステム等)からメモリのページを移行する要求、又は、プラットフォームセキュリティプロセッサ(例えば、PSP128)から転送された要求に遭遇すると、機能ブロック、デバイス及びソフトウェアエンティティは、(移行状態600と602との間の太い矢印線によって示されるように)移行状態602に進行する。移行状態602に入る場合、ソフトウェアエンティティは、メモリのページに関するページテーブルエントリ内の移行状態情報を、移行状態602を表す又は識別するビットシーケンス、値等に設定する。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報は、移行状態602を表す又は識別するために01に設定され得る。
【0073】
移行状態602では、メモリ内のメモリのページを移行するための初期準備が行われる。準備は、IOMMUが、IOMMU及び/又はIOデバイス(例えば、TLB144、ATC146等)内のローカルキャッシュ内のメモリのページに関するページテーブルエントリからの情報の新しいコピーのキャッシュ(すなわち、記憶)を防止することを含む。概して、メモリのページの後続の移行は、メモリのページがメモリ内の新しい物理アドレスに位置することに起因して、ページテーブルエントリからの情報のコピーを不正確にするため、ページテーブルエントリからの情報のコピーは、メモリのページが移行され、ページテーブルエントリが更新されるまで、IOMMU又はIOデバイス内のローカルキャッシュに記憶されないように防止される。したがって、移行状態602では、ページテーブルエントリ内の移行状態情報がメモリのページを移行状態602にあるものとして識別するため、IOMMUは、IOMMU自体のローカルキャッシュ内にそのようなコピーをキャッシュするために、及び/又は、IOデバイスのローカルキャッシュ内に記憶するためにそのようなコピーをIOデバイスに提供するために、ページテーブルエントリから情報のコピーを取得しない。
【0074】
いくつかの実施形態では、ページテーブルエントリからの情報のコピーをIOデバイスに提供しない場合、IOMMUは、ページテーブルエントリからの情報のコピーに対するIOデバイスからのATS要求を拒否する。例えば、いくつかの実施形態では、IOMMUは、メモリのページが存在しないことを要求側IOデバイスに通知することによってATS要求に応答することができ、IOデバイスを、ページを存在させるための動作に進行させる。別の例として、IOMMUは、変換されていないアドレスがメモリのページにアクセスするために使用されるべきであることを要求側IOデバイスに通知することができ、それにより、ページテーブルエントリからの情報は要求側IOデバイスに提供されない。
【0075】
移行状態602において、ソフトウェアエンティティは、IOMMUに、IOデバイスのローカルキャッシュ内、例えば、アドレス変換キャッシュ(ATC)内のページテーブルエントリからの情報の任意の既存のコピーを無効化させる。これらのエントリを無効化することによって、IOデバイスのローカルキャッシュ内のページテーブルエントリからの情報のコピーが続けて無効化及び/又は修正されることが回避される。しかしながら、移行状態602及び後続の移行状態においてメモリアクセスを実行するために依然として必要とされ得る、IOMMU内のローカルキャッシュ内のページテーブルエントリからの情報のコピーは、移行状態602において保持され、後続の移行状態(すなわち、移行状態604)において最終的に無効化されることに留意されたい。
【0076】
移行状態602では、後続の移行状態(すなわち、移行状態604及び606)とは対照的に、IOMMUは、IOデバイスからメモリのページへのメモリアクセスが制限なく進行することを許可する。言い換えれば、IOデバイスからの既存の/未処理のメモリアクセス及び新たに遭遇したメモリアクセスの両方が進行することが許可される。メモリアクセスが進行することを許容することは、IOデバイスの動作を不必要に遅延させることなく、メモリのページを移行する準備中のメモリのページのメモリアクセスをクリア/完了する(メモリのページは、メモリアクセスが未処理の状態で移行されるべきではないため)。
【0077】
移行状態602から、機能ブロック、デバイス及びソフトウェアエンティティは、(移行状態602と604との間の太い矢印線によって示されるように)移行状態604に進行する。例えば、移行状態602の動作を実行した後、ソフトウェアエンティティは、ページ移行エンジンがメモリのページを移行して移行状態604へのエントリを引き起こすことを要求し得る。移行状態604に入る場合、ページ移行エンジンは、メモリのページに関するページテーブルエントリ内の移行状態情報を、移行状態604を表す又は識別するビットシーケンス、値等に設定する。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報は、移行状態604を表す又は識別するために10に設定され得る。
【0078】
移行状態604では、メモリ内のメモリのページを移行するための準備が引き続き行われる。準備は、IOMMUが、IOデバイスからメモリのページへの第1のタイプの新たに遭遇したメモリアクセスをストールすることを含む。例えば、いくつかの実施形態では、第1のタイプのメモリアクセスは、応答を引き起こさない書き込み、無効化等の第2のタイプのメモリアクセスとは対照的に、メモリから要求側IOデバイスへの応答(例えば、返されたデータ等)を引き起こす読み出し、比較及びスワップ等のメモリアクセスを含む。したがって、移行状態604では、ページテーブルエントリ内の移行状態情報がメモリのページを移行状態604にあるものとして識別するため、IOMMUは、メモリのページの移行が完了するまで(例えば、移行状態600に戻るまで)、第1のタイプの新たに遭遇したメモリアクセスをストールする。例えば、IOMMUは、第1のタイプの新たに遭遇したメモリアクセスをバッファ、メモリ要素等に保持し(例えば、IOデバイスからのメモリアクセス要求に関する情報を記憶することによって)、その後、メモリのページの移行が完了した後に、保持されたメモリアクセスをバッファ、メモリ要素等から解放し得る。しかしながら、移行状態604に入る前に進行中であった第1のタイプの既存の/未処理のメモリアクセスは、完了することが許可され、既存の/未処理のメモリアクセス及び新たに遭遇したメモリアクセスの両方の第2のタイプのメモリアクセスは、進行することが許可されることに留意されたい。いくつかの実施形態では、第1のタイプの新たに遭遇したメモリアクセスは、第1のタイプのメモリアクセスと第2のタイプのメモリアクセスとの間で発生し得る競合、デッドロック条件及び/又は他の問題を回避するために、(後述するように、移行状態606においてストールされる)第2のタイプの新たに遭遇したメモリアクセスとは別にストールされる。
【0079】
移行状態604において、ページ移行エンジンは、IOMMUのローカルキャッシュ内のページテーブルエントリからの情報の任意の既存のコピーを無効化する(IOデバイスのローカルキャッシュ内のページテーブルエントリからの情報の既存のコピーが、移行状態602において以前に無効化されたことを想起されたい)。例えば、ページ移行エンジンは、IOMMUにローカルキャッシュ内のページテーブルエントリからの情報の任意の既存のコピーを無効化させる無効化要求をIOMMUに発行し得る。移行状態604において、IOMMUは、移行状態602について上述したように、IOMMU及び/又はIOデバイスがメモリのページに関するページテーブルエントリからの情報のコピーをローカルキャッシュに記憶することを引き続き防止する。
【0080】
移行状態604から、機能ブロック、デバイス及びソフトウェアエンティティは、(移行状態604と606との間の太い矢印線によって示されるように)移行状態606に進行する。例えば、ページ移行エンジンは、移行状態604におけるIOMMUのローカルキャッシュ内のページテーブルエントリからの情報の任意の既存のコピーの無効化を完了した後に、移行状態606に入り得る。移行状態606に入る場合、ページ移行エンジンは、メモリのページに関するページテーブルエントリ内の移行状態情報を、移行状態606を表す又は識別するビットシーケンス、値等に設定する。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報は、移行状態606を表す又は識別するために11に設定され得る。
【0081】
移行状態606では、メモリ内のメモリのページを移行するための準備が完了し、次いで、メモリのページが移行される。動作は、IOMMUが、IOデバイスからメモリのページへの全ての新たに遭遇したメモリアクセスをストールすることを含む。したがって、移行状態606では、ページテーブルエントリ内の移行状態情報がメモリのページを移行状態606にあるものとして識別するため、IOMMUは、メモリのページの移行が完了するまで(例えば、移行状態600に戻るまで)、第1のタイプ及び第2のタイプの両方の新たに遭遇したメモリアクセスをストールする。例えば、IOMMUは、第1のタイプ及び第2のタイプの両方の新たに遭遇したメモリアクセスをバッファ、メモリ要素等に保持し(例えば、IOデバイスからのメモリアクセス要求についての情報を記憶することによって)、その後、メモリのページの移行が完了した後に、保持されたメモリアクセスをバッファ、メモリ要素等から解放し得る。移行状態606において、IOMMUは、移行状態602について上述したように、IOMMU及び/又はIOデバイスがメモリのページに関するページテーブルエントリからの情報のコピーをローカルキャッシュに記憶することを引き続き防止する。
【0082】
移行状態606では、IOデバイスからの全ての新たに遭遇したメモリアクセスはストールされるが、既存の/未処理のメモリアクセスは完了される。言い換えれば、移行状態606に入る前に進行中であった全ての残りのメモリアクセスが完了される。全ての既存の/未処理のメモリアクセスは完了され、その結果、メモリのページのメモリアクセスは、移行中にメモリのページにアクセスしない(古い/不正確なデータがアクセスされる可能性があるため)。
【0083】
既存の/未処理のメモリアクセスが完了し、したがって、メモリのページへの全ての残りのアクセスが、メモリのページを移行するための準備においてストールされた後、メモリのページを移行するための準備が終了する。したがって、ページ移行エンジンは、メモリ内のメモリのページを移行する。例えば、ページ移行エンジンは、メモリのページを、メモリ内の第1の位置/物理アドレスからメモリ内の第2の位置/物理アドレス(例えば、メモリのページを移行する要求において指定された位置)に移動させ得る。いくつかの実施形態では、メモリ内の移動は、第1のタイプのメモリ(例えば、より低速のアクセスタイプのメモリ)から第2のタイプのメモリ(例えば、より高速のアクセスタイプのメモリ)であるか、又は、その逆である。移行状態606は単一の移行状態として示されているが、別の例では、移行状態は、第2のタイプの既存の/未処理のメモリアクセスが完了する移行状態606Aと、メモリのページがメモリ内で移行/移動され、メモリのページを移行状態600に戻す準備としてクリーンアップ動作(後述するような)が実行される移行状態606Bと、に分割され得る。
【0084】
メモリのページを移行した後、ページ移行エンジンは、ページテーブルエントリを更新して(又は別の機能ブロック若しくはソフトウェアエンティティに更新させて)、メモリのページが記憶されている物理アドレス(すなわち、メモリ内の第2の位置の物理アドレス)を識別する。ページテーブルエントリを更新することによって、ページ移行エンジンは、電子デバイス内のソフトウェアエンティティ及びデバイスによって使用される仮想アドレスが、メモリのページが記憶されている物理アドレスに正しくマッピングされ得るように、メモリのページに関する仮想アドレスから物理アドレスへの変換情報を更新する。また、ページ移行エンジンは、メモリ内の第2の位置に基づいて、ページテーブルエントリ内の任意の関連メタデータを(必要に応じて)設定する。
【0085】
メモリのページが首尾よく移行されたため、機能ブロック、デバイス及びソフトウェアエンティティは、(移行状態606と600との間の太い矢印線によって示されるように)移行状態600に戻る。移行状態600に戻ることの一部として、ページ移行エンジンは、メモリのページに関するページテーブルエントリ内の移行状態情報を、移行状態600を表す又は識別するビットシーケンス、値等に設定する。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報は、移行状態600を表す又は識別するために00に設定され得る。上述したように、移行状態600は「非移行」移行状態である。ページテーブルエントリ内の移行状態情報が、メモリのページを移行状態600にあるものとして識別するため、IOMMUは、IOデバイスからのメモリのページ及びページテーブルエントリ内のそれぞれの情報のアクセスが通常どおり進行することを許容する。すなわち、メモリのページを移行するための準備が行われておらず、メモリのページが移行されていないため、メモリのページ及びページテーブルエントリ内の情報のアクセスは、IOMMUによって防止されず、ストールされず、又は、別様に制限されない。
【0086】
移行状態600に戻ると、IOMMUは、移行状態604と606との間で以前にストールされたメモリのページに、第1のタイプ及び第2のタイプのストールされたメモリアクセスを解放する。例えば、いくつかの実施形態では、IOMMUがページテーブルエントリをポーリングする/周期的に読み出す一方、ストールされたメモリアクセスはIOMMUによって保持される。ページテーブルエントリがメモリのページを移行状態600にあるものとして識別することをIOMMUが発見すると、IOMMUは、ストールされたメモリアクセスが記憶されたバッファ又はメモリ要素からストールされたメモリアクセスを先入れ先出し順序で取得し始め、メモリアクセスのそれぞれを実行する。
【0087】
いくつかの実施形態では、IOMMUは、メモリのページの他の新たに遭遇したメモリアクセスの前に、ストールされたメモリアクセスのそれぞれを実行する(新たに遭遇したメモリアクセスはそれ自体が保持され、その後、それらが受信された順序又は別の順序で解放され得る)。加えて、IOMMUは、ローカルキャッシュ内のページテーブルエントリからの情報のキャッシュを再開する。言い換えれば、IOMMUは、それ自体がページテーブルエントリからの情報のコピーをキャッシュし、ページテーブルエントリからの情報のコピーを要求側IOデバイスに提供し得る。また、ページ移行エンジンは、メモリのページが首尾よく移行されたことを示す応答を要求側ソフトウェアエンティティに返す。これにより、メモリのページの移行が完了する。
【0088】
図6の例では、移行の試みが成功し、したがって、ページを移行する準備を行い、次いでページを移行するための全ての動作が成功することを想定している。しかしながら、動作のうちの1つが失敗した場合、又は、望ましくない若しくは予期しない状態若しくはエラーに遭遇した場合、ページの移行は終了され得る。移行が終了されると、機能ブロック、デバイス及びソフトウェアエンティティは、現在の移行状態(移行状態602~606の何れかであり得る)から移行状態600に戻る。これは、移行状態602~604と移行状態600との間の対応する細い矢印線、及び、移行状態606と移行状態600との間の太い矢印線によって示されている。メモリのページの移行を終了すると、ソフトウェアエンティティ、ページ移行エンジン、又は、別の機能ブロック若しくはデバイスは、メモリのページのページテーブルエントリ内の移行状態情報を、移行状態600を表す又は識別するビットシーケンス、値等に復元する。例えば、移行状態情報が2ビットを含むと仮定すると、移行状態情報は、移行状態600を表す又は識別するために00に設定され得る。メモリのページを移行できなかったために移行状態600に戻ると、IOMMUは、メモリのページの任意のストールされたメモリアクセスを解放し、IOMMU及びIOデバイスのローカルキャッシュ内のページテーブルエントリからの情報のコピーのキャッシュを再開し、より一般的には、メモリのページを移行するための準備の効果を除去する。
【0089】
いくつかの実施形態では、移行中のメモリのページのメモリアクセス及びローカルキャッシュ内のそれぞれのページテーブルエントリからの情報のキャッシュに対する制限にもかかわらず、非移行中のメモリのページ及びそれらのそれぞれのページテーブルエントリへのアクセスは通常どおり実行される。すなわち、非移行中のメモリのページを移行するための準備は行われておらず、非移行中のメモリのページは移行されないため、非移行中のメモリのページ及びそれぞれのページテーブルエントリ内の情報のアクセスは、IOMMUによって防止されず、ストールされず、又は、別様に制限されない。言い換えれば、IOMMUは、そのようなページテーブルエントリからの情報を通常どおり使用し、そのようなメモリのページのメモリアクセスを通常どおり実行する。いくつかの実施形態では、非移行中のページに関する移行状態情報は、非移行中のページが移行状態600にあることを示すように設定される。しかしながら、非移行中のメモリのページの特定のメモリアクセスは、順序付けの理由及び/又はメモリのページの移行に基づく他の理由のために保留され得るが、概して、メモリ内の非移行中のメモリのページ及びそれぞれのページテーブルエントリが正しいままである限りは進行し得る。
【0090】
いくつかの実施形態では、機能ブロック、デバイス及びソフトウェアエンティティは、異なる順序で移行状態間を遷移し得る。例えば、いくつかの実施形態では、移行状態間の細い矢印線によって示されるように、移行状態がスキップされ得る。例えば、いくつかの実施形態では、プロセッサにのみアクセス可能である(したがって、IOデバイスにアクセス可能でない)メモリのページは、移行状態600から移行状態606に直接遷移され得る。これらの実施形態では、プロセッサは、メモリのページの欠落を処理するためのページフォールト機構を含み、ソフトウェアエンティティ及び/又はページ移行エンジンは、単に、メモリのページをそれぞれのページテーブルエントリにおいて欠落しているものとしてマークし、メモリのページの移行を進行させ得る。いくつかの実施形態では、プロセッサは、IOMMUとは異なるページテーブルを使用し、したがって、メモリのページは、プロセッサのページテーブルにおいて移行中に「欠落」としてマークされ、これにより、メモリのページは、プロセッサのページフォールト機構を使用してプロセッサによって処理される。しかしながら、いくつかの実施形態では、プロセッサ及びIOMMUで利用可能なインジケータは異なるものの、プロセッサは、IOMMUと同じページテーブルを使用する。これらの実施形態では、プロセッサの利用可能なインジケータは、プロセッサのページフォールト機構を使用してプロセッサによってメモリのページが処理されるように設定され得るが、メモリのページは、本明細書に記載されるように、IOMMUが(メモリアクセスのストール等を介して)処理するために「利用可能」のままである。
【0091】
図6に示される例では、単一のメモリのページのみが移行されるが、いくつかの実施形態では、複数のメモリのページを移行するための準備及び/又は複数のメモリのページの移行が並行して行われ得る。言い換えれば、メモリのページごとに上述した移行状態情報を使用して、2つ以上のメモリのページを移行するための準備及び/又は2つ以上のメモリのページの移行は、同じ又は同様の時間に、同時に等のように実行され得る。この場合の個々のメモリのページは異なる移行状態にあり、したがって、メモリのページの移行は、複数のメモリのページを移行するための準備及び/又は他のメモリのページの移行と並行して動的に開始され(例えば、ソフトウェアエンティティが、それぞれのメモリのページが移行されるものと決定した場合等)、完了され得ることに留意されたい。したがって、それぞれのメモリのページは、そのページテーブルエントリを介して、移行状態のうち何れか又は非移行状態にあるものとして個々に識別可能であり、メモリのページ及び/又はそれぞれのページテーブルエントリのアクセスを処理するための動作は、本明細書に記載されるように実行される。
【0092】
(メモリのページの移行を処理するプロセス)
説明される実施形態では、ソフトウェアエンティティ(例えば、ハイパーバイザ318、オペレーティングシステム200等)及びページ移行エンジン(例えば、ページ移行エンジン114)は、メモリのページを移行するための準備が行われている間、及び、メモリのページがメモリ(例えば、メモリ104)内で移行される間、メモリのページ及び関連するページテーブルエントリのメモリアクセスを制御するための動作を実行する。
図7は、いくつかの実施形態による、メモリのページを移行するためのプロセスを示すフロー図である。
図7は、いくつかの実施形態においてリクエスタによって実行される動作の一般的な例として提示される。しかしながら、いくつかの実施形態では、リクエスタは、異なる動作を実行し、及び/又は、異なる順序で動作を実行する。
【0093】
図7に見られるように、プロセスは、メモリ、ソフトウェアエンティティ及びページ移行エンジン内の、IOデバイスがアクセス可能なメモリのページを移行する準備をするための動作を実行している間に、実行されている動作に基づいてメモリのページに関するページテーブルエントリ内の移行状態情報を設定する場合から始まる(ステップ700)。概して、この動作のために、ソフトウェアエンティティ及びページ移行エンジンが、メモリのページ(例えば、メモリの4KiBページ)を移行する準備を行うためのそれぞれの動作を実行する場合、ソフトウェアエンティティ及びページ移行エンジンは、メモリのページに関するページテーブルエントリ内の移行情報を更新して、現在の/現時点の移行状態を示す。上述したように、移行状態602~606において、ソフトウェアエンティティ及び/又はページ移行エンジンは、メモリのページを移行する準備を行うための動作を実行し、その後、移行状態606において(上述したように、第2のタイプの既存の/未処理のメモリアクセスが完了する移行状態606Aと、メモリのページがメモリ内で移行/移動され、クリーンアップ動作が実行される移行状態606Bと、に分割され得る)、ページ移行エンジンは、メモリのページを移行するための動作を実行する。したがって、実行されている動作に基づいて、メモリのページに関するページテーブルエントリ内の移行状態情報を設定することは、メモリのページの移行状態を識別するために移行状態を設定することを伴う。例えば、メモリのページを移行する要求を受信した後、メモリのページを移行する準備を行うための初期動作を実行している間(又はその前)に、ソフトウェアエンティティは、移行状態602を示すビットシーケンス又は値を移行状態に設定すること等によって、移行状態情報を移行状態602に設定し得る。
【0094】
いくつかの実施形態では、ソフトウェアエンティティ及びIOデバイスによって実行される特定の動作は、メモリのページの現在の移行状態に依存する。例えば、いくつかの実施形態では、ソフトウェアエンティティによって実行される動作の中には、少なくとも1つのIOデバイス内のキャッシュ内のページテーブルエントリからの情報の任意の既存のコピーを(IOMMUへの対応するコマンドを介して)無効化するための動作がある。いくつかの実施形態において、ソフトウェアエンティティは、移行状態602においてこの動作を実行する。別の例として、いくつかの実施形態では、ページ移行エンジンによって実行される動作の中には、IOMMU内のキャッシュ内のページテーブルエントリからの情報の任意の既存のコピーを無効化するための動作がある。いくつかの実施形態では、ページ移行エンジンは、移行状態604においてこの動作を実行する。更に別の例として、いくつかの実施形態では、ページ移行エンジンによって実行される動作の中には、メモリのページを移行する前に、IOMMUによってストールされない、メモリのページへの任意のメモリアクセスを完了するための動作がある。いくつかの実施形態では、ページ移行エンジンは、移行状態602~606においてこれらの動作を実行する。これらの動作がソフトウェアエンティティ及びページ移行エンジンによって実行される特定のシーケンス/順序は、
図6に関して上述されている。
【0095】
IOMMUは、ページテーブルエントリ内の移行状態情報に基づいて、ページテーブルエントリからの情報の使用を制御する(ステップ702)。この動作のために、IOMMU(又はむしろIOMMUテーブルウォーカ)は、テーブルウォークを実行すると、移行状態情報を取得し、移行状態情報の現在値をチェックする。移行状態情報が、メモリのページを移行するための準備が行われていること、及び/又は、メモリのページが移行されていることを示す場合、IOMMUは、ページテーブルからの情報の使用を制限する。例えば、移行状態602~606において、IOMMUは、IOMMU自体又はIOデバイス内のキャッシュ内にページテーブルエントリからの情報のコピーをキャッシュすることを防止し得る。対照的に、移行状態600等の移行状態情報が、ページが移行されていないことを示す場合、IOMMUは、ページテーブルからの情報を通常どおり使用し得る。したがって、非移行移行状態では、IOMMU自体がページテーブルエントリからの情報のコピーをキャッシュすることができ、IOデバイスにページテーブルエントリからの情報のコピーを(任意の他の既存のアクセス制限に従って)提供することができる。
【0096】
また、IOMMUは、ページテーブルエントリ内の移行状態情報に基づいて、メモリのページのメモリアクセスの実行を制御する(ステップ704)。この動作のために、IOMMUは、上述したように、ページテーブルエントリから移行状態情報を取得し、移行状態情報の現在値をチェックする。移行状態情報が、メモリのページを移行するための準備が行われていること、及び/又は、メモリのページが移行されていることを示す場合、IOMMUは、メモリのページへのメモリアクセスを制限し得る。例えば、移行状態604~606において、IOMMUは、メモリのページへの指定された新たに遭遇したメモリアクセスをストールし得るが、既存のメモリアクセスは、メモリのページが移行される前に完了まで進行することが許容される。対照的に、移行状態情報が、ページが移行状態600~602等の他の移行状態にあることを示す場合、IOMMUは、メモリのページへの全てのメモリアクセスが通常どおり進行することを許可し得る。したがって、これらの移行状態では、IOMMUは、任意の他の既存のアクセス制限に従って、典型的な方法でメモリのページへのメモリアクセスを実行する。
【0097】
図7は、メモリのページを移行するための準備が行われる場合に状態情報を設定及び使用する例を提示するが、いくつかの実施形態では、移行状態情報は、概して、ページテーブルエントリ内に存在し、他の場合(すなわち、他の移行状態)には、メモリのページ及びそれぞれのページテーブルエントリ内の情報のアクセスを「制御する」ために使用される。例えば、
図7で説明した準備が完了し、メモリのページが実際に移行されている(すなわち、メモリ内の1つの位置から別の位置に移動される過程にある)メモリのページについて、移行状態情報は、メモリのページ及びそれぞれのページテーブルエントリ内の情報のアクセスを制御するためにIOMMUによって使用される。いくつかの実施形態では、メモリのページの移行は、移行状態606において、それぞれのページテーブルエントリ内のメモリのページ及び情報のアクセスに対する上述した制御を伴って実行される。別の例として、移行されておらず、したがってメモリのページを移行するための準備が行われていないメモリのページについて、移行状態情報は、メモリのページ及びそれぞれのページテーブルエントリ内の情報のアクセスを制御するためにIOMMUによって使用される。いくつかの実施形態では、非移行中のメモリのページに対する動作は、移行状態600において、メモリのページ及びそれぞれのページテーブルエントリ内の情報のアクセスに対する上述した制御(又はその欠如)を伴って実行される。
【0098】
いくつかの実施形態では、少なくとも1つの電子デバイス(例えば、電子デバイス100等)は、非一時的なコンピュータ可読記憶媒体に記憶されたコード及び/又はデータを使用して、本明細書に記載の動作のうちいくつか又は全てを実行する。より詳細には、少なくとも1つの電子デバイスは、コンピュータ可読記憶媒体からコード及び/又はデータを読み取り、記載の動作を実行する場合にコードを実行し及び/又はデータを使用する。コンピュータ可読記憶媒体は、電子デバイスによって使用されるコード及び/又はデータを記憶する任意のデバイス、媒体、又は、それらの組み合わせであり得る。例えば、コンピュータ可読記憶媒体は、フラッシュメモリ、ランダムアクセスメモリ(例えば、eDRAM、RAM、SRAM、DRAM、DDR4 SDRAM等)、不揮発性RAM(例えば、位相変化メモリ、強誘電性ランダムアクセスメモリ、スピントランスファーランダムアクセスメモリ、磁気抵抗ランダムアクセスメモリ等)、読み取り専用メモリ(read-only memory、ROM)、及び/又は、磁気若しくは光学記憶媒体(例えば、ディスクドライブ、磁気テープ、CD、DVD等)を含む、揮発性及び/又は不揮発性メモリを含むことができるが、これらに限定されない。
【0099】
いくつかの実施形態では、1つ以上のハードウェアモジュールが、本明細書に記載の動作を実行する。例えば、ハードウェアモジュールとしては、1つ以上の中央演算処理装置(CPU)/CPUコア、グラフィック処理ユニット(GPU)/GPUコア、特定用途向け集積回路(application-specific integrated circuit、ASIC)チップ、フィールドプログラマブルゲートアレイ(field-programmable gate array、FPGA)、コンプレッサ又はエンコーダ、計算ユニット、埋め込みプロセッサ、加速処理ユニット(accelerated processing unit、APU)、コントローラ、リクエスタ、コンプリータ、ネットワーク通信リンク、及び/又は、他の機能ブロックが挙げられ得るが、これらに限定されない。そのようなハードウェアモジュール内の回路構成(例えば、集積回路素子、ディスクリート回路素子等)がアクティブ化されると、回路構成は、動作の一部又は全部を実行する。幾つかの実施形態において、ハードウェアモジュールは、命令(例えば、プログラムコード、ファームウェア等)の実行時に動作を実行する実行パイプライン、計算又は処理ユニット等の汎用回路を含む。いくつかの実施形態では、ハードウェアモジュールは、動作を実行する特定用途向け又は専用の回路構成を含み、場合によっては、命令を実行することなく「ハードウェア内の」動作の一部又は全部を実行する回路構成を含む。
【0100】
いくつかの実施形態では、本明細書に記載の機能ブロック及び回路要素(例えば、電子デバイス100又はそのいくつかの部分)の一部又は全部を表すデータ構造は、電子デバイスによって読み取られ、機能ブロック及び回路要素を含むハードウェアを加工するための直接的又は間接的に使用され得るデータベース又は他のデータ構造を含む非一時的なコンピュータ可読記憶媒体に記憶される。例えば、データ構造は、Verilog又はVHDL等の高レベル設計言語(high-level design language、HDL)におけるハードウェア機能の行動レベルの記述又はレジスタ転送レベル(register-transfer level、RTL)の記述であり得る。記述は、記述を合成して、上記の機能ブロック及び回路要素を含むハードウェアの機能を表す合成ライブラリからのトランジスタ/回路素子のリストを含むネットリストを生成することができる合成ツールによって読み取られ得る。ネットリストは、次いで、マスクに適用される幾何学的形状を記述するデータセットを生成するために配置され、ルーティングされ得る。マスクは、次いで、上記の機能ブロック及び回路要素に対応する半導体回路又は回路(例えば、集積回路)を製造するために、様々な半導体加工ステップで使用され得る。代替的に、コンピュータアクセス可能記憶媒体上のデータベースは、所望に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット、又は、グラフィックデータシステム(Graphic Data System、GDS)IIデータであり得る。
【0101】
この記載では、変数又は不特定の値(すなわち、値の特定の例を含まない値の一般的な説明)は、N、M及びX等の文字によって表される。本明細書で使用されるように、この記載において異なる場所で類似の文字を使用する可能性があるにもかかわらず、各場合における変数及び不特定の値は、必ずしも同じではなく、すなわち、一般的な変数及び不特定値のいくつか又は全てに対して意図される変数及び値が存在し得る。言い換えれば、Nの特定の値の例、並びに、この記載における変数及び指定されていない値を表すために使用される任意の他の文字は、必ずしも互いに関連しない。
【0102】
本明細書で使用される場合、「その他」又は「等」という表現は、1つの及び/又は事例、すなわち、その他が関連付けられるリスト内の要素「のうち少なくとも1つ」の等価物を提示することが意図される。例えば、「電子デバイスが第1の動作、第2の動作等を実行する」という記述では、電子デバイスは、第1の動作、第2の動作及び他の動作のうち少なくとも1つを実行する。加えて、1つ等に関連付けられたリスト内の要素は、一組の例の中からの例に過ぎず、実施例の少なくともいくつかは、いくつかの実施形態では現れない場合がある。
【0103】
実施形態の上記の説明は、例示及び説明の目的でのみ提示されている。それらは、網羅的であること、又は、実施形態を開示された形態に限定することを意図するものではない。したがって、多くの修正及び変形が当業者には明らかであろう。更に、上記の開示は、実施形態を限定することを意図するものではない。実施形態の範囲は、添付の特許請求の範囲によって定義される。
【国際調査報告】