IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

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