JP2022509906A - ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス - Google Patents

ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス Download PDF

Info

Publication number
JP2022509906A
JP2022509906A JP2021518693A JP2021518693A JP2022509906A JP 2022509906 A JP2022509906 A JP 2022509906A JP 2021518693 A JP2021518693 A JP 2021518693A JP 2021518693 A JP2021518693 A JP 2021518693A JP 2022509906 A JP2022509906 A JP 2022509906A
Authority
JP
Japan
Prior art keywords
memory
host
entry
virtual
entries
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2021518693A
Other languages
English (en)
Other versions
JPWO2020106533A5 (ja
Inventor
バク,エフゲニー
イイグン,メフメト
ユー. キシャン,アルン
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/198,620 external-priority patent/US10901911B2/en
Application filed by マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2022509906A publication Critical patent/JP2022509906A/ja
Publication of JPWO2020106533A5 publication Critical patent/JPWO2020106533A5/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • G06F12/0882Page mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • G06F12/1063Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache the data cache being concurrently virtually addressed
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1052Security improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/151Emulated environment, e.g. virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/651Multi-level translation tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/652Page size control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/654Look-ahead translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/683Invalidation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

仮想マシン環境のゲスト物理メモリがホストコンピューティングデバイス上で実行されている1つ以上のプロセスに割り当てられた仮想メモリによって支援されているメモリアクセスの一部として、第2層アドレステーブル(SLAT)の階層レベルがトラバースされる速度を増加させるため、SLAT内の1つ以上の階層のテーブルレベルをスキップされるか、または参照されないことができる。SLATは、階層的に上位のテーブルレベルでメモリ相関を設定されることができるが、ホストコンピューティングデバイスの仮想メモリの提供をサポートする、ホストコンピューティングデバイスのページテーブルは、階層的に最下位のテーブルレベルで、対応する連続したメモリ相関のセットを維持することができ、これにより、ホストコンピューティングデバイスが、メモリの小さいチャンクをページアウト、または操作することが可能になる。そのような操作が発生した場合、SLATは、階層的に最下位のテーブルレベルで、メモリ相関を再設定されることができる。【選択図】図7

Description

最新のコンピューティングデバイスは、ランダムアクセスメモリ(RAM)の形式で高速揮発性メモリからコンピュータ実行可能命令を実行することによって動作し、そのようなコンピュータ実行可能命令の実行は、RAMからのデータの読み取りを伴うことがよくある。コスト、物理サイズの限定、所要動力、およびその他の同様の制約のため、コンピューティングデバイスは、典型的には、そのようなコンピューティングデバイスで典型的に実行される、プロセスによって必要とされるRAMよりも少ないRAMを備える。そのような制約に対応するために、仮想メモリは、利用され、それによって、コンピューティングデバイス上で実行されるプロセスに利用可能であるように見えるメモリは、物理メモリ回路が提供するよりも大きい。仮想メモリと物理メモリとの間の関係は、典型的には、1つ以上の仮想メモリアドレスと、対応するデータ、物理メモリ内、または何らかの形式のストレージメディア上のいずれかの場所との間の関係を叙述する情報を持つ「ページテーブル」を実装、維持、および/または参照する、1つ以上のメモリマネージャーによって管理される。最新のコンピューティングデバイス、およびそこで実行されるプロセスに関連するメモリの量に対応するために、最新のページテーブルは、典型的には、複数の階層レベルのテーブルが備えられ、階層的に上位のテーブルレベルには、各々が異なる階層的に下位のレベルテーブルを識別するエントリーがあり、階層的に最下位のレベルテーブルには、さらに別のテーブルを識別せず、メモリアドレス自体を識別するエントリーが含まれる。
コンピューティングデバイスによって実行されることができるプロセスの中には、コンピューティングデバイスの基盤となるハードウェアを仮想化または抽象化するプロセスがある。そのようなプロセスは、そのような仮想マシンによって提供される仮想化されたコンピューティングコンテキスト内で実行されるプロセスに対して完全に基盤となるコンピューティングデバイスをシミュレートすることができる、仮想マシンを含む。ハイパーバイザー、または同様のコンピュータ実行可能命令のセットは、そのようなハイパーバイザーをホストする物理コンピューティングデバイスの基盤となるハードウェアを仮想化、または抽象化することによって、仮想マシンの提供を容易にすることができる。ハイパーバイザーは、前述のページテーブルと同様の方法で階層的に配置されることができる、第2層アドレステーブル(SLAT)を維持することができる。SLATは、物理メモリの場所のように見える1つ以上のメモリアドレスと、基盤となるコンピューティングハードウェアの仮想化がハイパーバイザーによって容易になる仮想マシンのコンテキスト内で実行されるプロセスと、実際の物理メモリ自体のメモリ位置とを含む、ハイパーバイザー上で実行されるプロセスとの間の関係を叙述する、情報を維持することができる。
例えば、仮想マシンのコンテキスト内で実行されているプロセスがメモリにアクセスするときに、2つの異なるルックアップは、実行されることができる。1つのルックアップは、要求された仮想メモリアドレスを物理メモリアドレスと相関するように、仮想マシンコンテキスト自体の中で実行されることができる。そのようなルックアップは、仮想マシンのコンテキスト自体の中で実行されるため、識別された物理メモリアドレスは、仮想マシンのコンテキスト内で実行されているプロセスによって認識される物理メモリアドレスにすぎない。そのようなルックアップは、仮想マシンのコンテキスト内で実行するメモリマネージャーによって実行されることができ、仮想マシンのコンテキスト内に存在するページテーブルを参照して作ることができる。その後、第2のルックアップは、仮想マシンのコンテキスト外で実行されることができる。より具体的には、第1のルックアップによって識別された(仮想マシンのコンテキスト内の)物理メモリアドレスは、実際の物理メモリアドレスに相関されることができる。そのような第2のルックアップは、認識された物理メモリアドレスを実際の物理メモリアドレスと相関させることができる、SLATを参照するコンピューティングデバイスの1つ以上の処理装置を伴うことができる。
示されているように、ページテーブルおよびSLATの両方は、テーブルの異なる階層レベルの階層配置にされることができる。したがって、テーブルルックアップの性能は、ページテーブルを参照してメモリマネージャーによって実行されるか、またはSLATを参照してハイパーバイザーによって実行されるかにかかわらず、最上位の階層テーブルレベル内で適切なテーブルエントリーを判断すること、そのテーブルエントリーによって識別される階層的に下位のテーブルレベルを参照すること、その階層的に下位のテーブルレベル内の適切なテーブルエントリーを判断すること、そのテーブルエントリーによって識別される階層的にさらに下位のテーブルレベルを参照することなどを必要とすることができ、最下位の階層までレベルテーブルに到達するまで、その最下位の階層レベルテーブルの個々のエントリーが、さらに別のテーブルを識別することになっているように、メモリ自体の1つ以上の特定のアドレスまたはアドレスの範囲を識別する。階層的に下位のテーブルレベルへの各参照は、プロセッササイクルを消費し、メモリアクセスの期間を増加させる。
例えば、仮想マシンのコンテキスト内で実行されているプロセスからのメモリアクセスの場合において、そのようなメモリアクセスの期間は、仮想マシンのコンテキストにおいて、メモリマネージャーによって実行される、ページテーブルの階層レベルのトラバースと、ハイパーバイザーによって実行されるSLATの階層レベルのトラバースとの両方を含むことができる。SLATを参照して、ハイパーバイザーによって実行されるルックアップによって導入される追加の遅延は、仮想マシンのコンテキスト内で実行されているプロセス、または実際には、より直接的にメモリにアクセスするプロセスと比較して、より非効率的である、ハイパーバイザーを通じてメモリにアクセスする、プロセスからのメモリアクセスを与える。そのような非効率性は、ハイパーバイザーを通じてメモリにアクセスすることによってもたらされる、セキュリティ上の利点およびその他の利点を達成することをユーザに思いとどまらせることができる。
ホストコンピューティングデバイス上で実行される仮想マシンプロセスによるメモリ利用の効率を高めるために、それらの仮想マシンプロセスは、ホスト仮想メモリによって支援されることができ、これにより、従来の仮想メモリ効率を、そのような仮想マシンプロセスによって消費されるメモリに適用するのを可能にする。仮想マシン環境のゲスト物理メモリがホストコンピューティングデバイス上で実行されている1つ以上のプロセスに割り当てられた仮想メモリによって支援されているような環境において、メモリアクセスの一部として第2層アドレステーブル(SLAT)の階層レベルがトラバースされる速度を増加させるため、SLAT内の1つ以上の階層のテーブルレベルをスキップされるか、または参照されないことができ、これにより、より効率的なSLATトラバーサルおよび、より効率的なメモリアクセスという結果をもたらす。SLATは、階層的に上位のテーブルレベルでメモリ相関を設定されることができるが、ホストコンピューティングデバイスの仮想メモリの提供をサポートする、ホストコンピューティングデバイスのページテーブルは、階層的に最下位のテーブルレベルで、対応する連続したメモリ相関のセットを維持することができ、これにより、ホストコンピューティングデバイスが、メモリの小さいチャンクをページアウト、または操作することが可能になる。そのような操作が発生した場合、SLATは、階層的に最下位のテーブルレベルで、メモリ相関を再設定されることができる。逆に、ホストが、十分に大きい連続した小さいページのセットを再アセンブルすることができる場合、SLATは、階層的に上位のテーブルレベルで、相関を再び設定されることができ、これにより、再びSLATトラバーサルがより効率的になり、メモリアクセスがより効率的になる。このようにして、より効率的なSLATトラバーサルは、ホストコンピューティングデバイスの仮想メモリで仮想マシンプロセスを支援することによるメモリ利用効率の利点を維持しながら、達成することができる。
この概要は、以下の発明を実施するための形態でさらに説明される選定された概念を簡略化された形式で紹介するために提供される。この概要は、特許請求される主題の主要な特徴または本質的な特徴を特定することを意図しておらず、特許請求される主題の範囲を制限するために使用されることも意図していない。
追加の特徴および利点は、添付の図面を参照することで進行する、以下の詳細な記載から明らかになるであろう。
以下の詳細な記載は、添付の図面と併せて取り入れるときに、最もよく理解され得る。
例示的なコンピューティングデバイスのブロック図である。 例示的なハードウェアおよびソフトウェアコンピューティングシステムのシステム図である。 本明細書で利用する用語を示すブロック図である。 ゲスト物理メモリをホスト仮想メモリで支援するための例示的な方法を示す流れ図である。 ホスト仮想メモリによって支援された、ゲスト物理メモリ内のデータのライフサイクルにおける様々な例示的なアクションを示す流れ図である。 ゲスト物理メモリをホスト仮想メモリで支援するための例示的なメカニズムを示すブロック図である。 ゲスト物理メモリをホスト仮想メモリで支援しながら、ゲスト物理メモリとホスト物理メモリとの間をより効率的に変換するための例示的なメカニズムを示すブロック図である。 ゲスト物理メモリをホスト仮想メモリで支援しながら、ゲスト物理メモリとホスト物理メモリとの間をより効率的に変換するための例示的な方法を示す流れ図である。
以下の記載は、仮想マシンコンピューティング環境を提供する、1つ以上の仮想マシンプロセスをホストするコンピューティングデバイス上でより効率的なメモリ利用を同時に提供しながら、メモリアクセスの効率を高めることに関する。ホストコンピューティングデバイス上で実行される仮想マシンプロセスによるメモリ利用の効率を高めるために、これらの仮想マシンプロセスは、ホストの仮想メモリによって支援されることができ、これにより、従来の仮想メモリ効率を、そのような仮想マシンプロセスによって消費されるメモリに適用するのを可能にする。仮想マシン環境のゲスト物理メモリがホストコンピューティングデバイス上で実行されている1つ以上のプロセスに割り当てられた仮想メモリによって支援されているような環境において、メモリアクセスの一部として第2層アドレステーブル(SLAT)の階層レベルがトラバースされる速度を増加させるため、SLAT内の1つ以上の階層のテーブルレベルをスキップされるか、または参照されないことができ、これにより、より効率的なSLATトラバーサルおよび、より効率的なメモリアクセスという結果をもたらす。SLATは、階層的に上位のテーブルレベルでメモリ相関を設定されることができるが、ホストコンピューティングデバイスの仮想メモリの提供をサポートする、ホストコンピューティングデバイスのページテーブルは、階層的に最下位のテーブルレベルで、対応する連続したメモリ相関のセットを維持することができ、これにより、ホストコンピューティングデバイスが、メモリの小さなチャンクをページアウト、または操作することが可能になる。そのような操作が発生した場合、SLATは、階層的に最下位のテーブルレベルで、メモリ相関を再設定されることができる。逆に、ホストが、十分に大きい連続した小さいページのセットを再アセンブルすることができる場合、SLATは、階層的に上位のテーブルレベルで、相関を再び設定されることができ、これにより、再びSLATトラバーサルがより効率的になり、メモリアクセスがより効率的になる。このようにして、より効率的なSLATトラバーサルは、ホストコンピューティングデバイスの仮想メモリで仮想マシンプロセスを支援することによるメモリ利用効率の利点を維持しながら、達成することができる。
必須ではないが、以下の記載は、コンピューティングデバイスによって実行される、プログラムモジュールなどのコンピュータ実行可能命令の一般的なコンテキストになる。より具体的には、記載は、特に明記しない限り、1つ以上のコンピューティングデバイスまたは周辺機器によって実行される、動作および作動の記号表現を参照する。そのように、コンピュータ実行と呼ばれることもある、そのような動作および作動は、構造化された形式においてデータを表す電気信号の処理装置による操作を含むことが理解されよう。この操作は、データを変換するか、またはメモリ内の場所でそれを維持し、当業者によく理解されている方法で、コンピューティングデバイスまたは周辺機器の作動を再構成または変更する。データが維持されるデータ構造は、データの形式によって画定された特定の特性を有する、物理的場所である。
概して、プログラムモジュールは、特定のタスクを行うか、または特定の抽象的なデータ型を実装する、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。さらに、当業者は、コンピューティングデバイスが従来のパーソナルコンピュータに限定される必要はなく、サーバー、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な民生用電子機器、ネットワークPC、ミニコンピュータ、メインフレームコンピュータなどを含む他のコンピューティング構成を含むことを理解するであろう。同様に、このメカニズムは、通信ネットワークを通じてリンクされた、リモート処理デバイスによってタスクが実行される、分散コンピューティング環境においても実施され得るため、コンピューティングデバイスは、スタンドアロンコンピューティングデバイスに限定される必要がない。分散コンピューティング環境において、プログラムモジュールは、ローカルおよびリモートメモリストレージデバイスの両方に配置され得る。
上で参照されたメモリ割り当ておよびアクセスメカニズムの詳細な記載に進行する前に、以下の記載のコンテキストを提供する、例示的なホストコンピューティングデバイスの詳細な記載が、図1に示される例示的なコンピューティングデバイス100を参照して提供される。例示的なコンピューティングデバイス100は、1つ以上の中央処理装置(CPU)120と、システムメモリ130と、システムメモリを含む様々なシステムコンポーネントを処理装置120に結合するシステムバス121とを含むことができるが、これらに限定されない。システムバス121は、メモリバスまたはメモリコントローラと、周辺バスと、様々なバスアーキテクチャのいずれかを使用するローカルバスとを含む、いくつかのタイプのバス構造のいずれかであり得る。コンピューティングデバイス100は、任意選択で、グラフィックスハードウェアインターフェース160と、タッチセンサー式、またはマルチタッチ感知式のディスプレイデバイスなどの、タッチベースのユーザ入力を受信することを可能とするディスプレイデバイスを含むことができる、ディスプレイデバイス161とを含むが、これらに限定されない、グラフィックスハードウェアを含むことができる。特定の物理的実装に応じて、1つ以上のCPU120、システムメモリ130、およびコンピューティングデバイス100の他のコンポーネントは、単一のチップ上など、物理的に同じ場所に配置されることができる。そのような場合において、システムバス121の一部またはすべては、単一チップ構造内のシリコン経路にすぎず、図1における例証は、例証の目的のための表記上の便宜にすぎない可能性がある。
コンピューティングデバイス100はまた、典型的には、コンピューティングデバイス100によってアクセスされることができる、任意の利用可能な媒体を含むことができる、コンピュータ可読媒体を含み、揮発性および不揮発性媒体ならびにリムーバブルおよび非リムーバブル媒体の両方を含む。限定ではなく例として、コンピュータ可読媒体は、コンピュータ記憶媒体および通信媒体を備え得る。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどのコンテンツを記憶するための任意の方法または技術で実装された媒体を含む。コンピュータ記憶媒体は、RAM、ROM、EEPROM、フラッシュメモリもしくは他のメモリ技術、CD-ROM、デジタル多用途ディスク(DVD)もしくは他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶もしくは他の磁気記憶デバイス、または所望のコンテンツを格納するために使用することができ、コンピューティングデバイス100によってアクセスされることができる、任意の他の媒体が含むが、これらに限定されない。しかしながら、コンピュータの記憶媒体は、通信媒体を含まない。通信媒体は、典型的には、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータを、搬送波または他の輸送メカニズムなどの変調されたデータ信号に具体化し、任意のコンテンツ配信媒体を含む。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体と、音響、RF、赤外線および他の無線媒体などの無線媒体とを含む。上記の任意の結合も、コンピュータ可読媒体の範囲内に含まれる。
システムメモリ130は、読み取り専用メモリ(ROM)131およびランダムアクセスメモリ(RAM)132などの揮発性および/または不揮発性メモリの形態におけるコンピュータ記憶媒体を含む。起動中など、コンピューティングデバイス100内の要素間でコンテンツを転送するのを助ける、基本的なルーチンを含む基本的な入出力システム133(BIOS)は、典型的には、ROM131に格納される。RAM132は、典型的には、処理装置120によって即座にアクセス可能である、および/または現在操作されている、データおよび/またはプログラムモジュールを含む。限定ではなく例として、図1は、オペレーティングシステム134と、他のプログラムモジュール135と、プログラムデータ136とを示している。
コンピューティングデバイス100はまた、他の取り外し可能/取り外し不可能、揮発性/不揮発性コンピュータ記憶媒体を含み得る。例としてのみ、図1は、取り外し不可能な不揮発性磁気媒体からの読み取りまたは書き込みを行う、ハードディスクドライブ141を示している。例示的なコンピューティングデバイスとともに使用されることができる、他の取り外し可能/取り外し不可能、揮発性/非揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、ソリッドステートRAM、ソリッドステートROM、および上記で画定および叙述されたその他のコンピュータ記憶媒体を含むが、これらに限定されない。ハードディスクドライブ141は、典型的には、インターフェース140などの不揮発性メモリインターフェースを通じてシステムバス121に接続されている。
上記で論じられ、図1に示されたドライブおよびそれらに関連するコンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、およびコンピューティングデバイス100のための他のデータの記憶を提供する。図1において、例えば、ハードディスクドライブ141は、オペレーティングシステム144と、他のプログラムモジュール145と、プログラムデータ146とを格納するものとして示されている。これらのコンポーネントは、オペレーティングシステム134、他のプログラムモジュール135およびプログラムデータ136と同じであっても、または異なっていてもよいことに留意されたい。オペレーティングシステム144、他のプログラムモジュール145、およびプログラムデータ146は、少なくとも、それらが異なるコピーであることを示すために、異なる番号が与えられている。
コンピューティングデバイス100は、1つ以上のリモートコンピュータへの論理接続を使用して、ネットワーク化された環境で動作し得る。コンピューティングデバイス100は、ネットワークインターフェースまたはアダプタ150を通じて(ネットワーク190への)一般的なネットワーク接続151に接続され、次に、システムバス121に接続されるように示されている。ネットワーク環境において、コンピューティングデバイス100、またはその一部もしくは周辺機器に関連して示されるプログラムモジュールは、一般的なネットワーク接続161を通じてコンピューティングデバイス100に通信可能に結合される、1つ以上の他のコンピューティングデバイスのメモリに格納され得る。示されているネットワーク接続が例示的なものであり、コンピューティングデバイス間の通信リンクを確立する他の手段が使用できることが理解されよう。
単一の物理デバイスとして記載されているが、例示的なコンピューティングデバイス100は、CPU120、システムメモリ130、ネットワークインターフェース160、および他の同様のコンポーネントなどの上記の物理的コンポーネントの機能が、コンピュータ実行可能命令によって提供されることができる場合における、仮想コンピューティングデバイスであることができる。そのようなコンピュータ実行可能命令は、単一の物理コンピューティングデバイス上で実行することができ、または、そのようなコンピュータ実行可能命令をホストする特定の物理コンピューティングデバイスが、必要性および利用可能性に応じて時間とともに動的に変化することができるように、動的な方法で複数の物理コンピューティングデバイスに分散されることを含む、複数の物理コンピューティングデバイスに分散されることができる。例示的なコンピューティングデバイス100が仮想化デバイスである状況において、そのような仮想化コンピューティングデバイスをホストする基礎となる物理コンピューティングデバイスは、それ自体、上で記載のものと同様の物理コンポーネントを備えることができ、同様の方法で動作する。さらに、仮想コンピューティングデバイスは、ある仮想コンピューティングデバイスが別の仮想コンピューティングデバイスの構成内で実行される複数の層で利用されることができる。したがって、本明細書で利用される「コンピューティングデバイス」という用語は、物理コンピューティングデバイス、または、その中で、コンピュータ実行可能命令が、物理コンピューティングデバイスによる実行と一致する方法で実行されることができる、仮想コンピューティングデバイスを含む仮想化コンピューティング環境のいずれかを意味する。同様に、本明細書で利用される、コンピューティングデバイスの物理コンポーネントを指す用語は、同じまたは同等の機能を実行するそれらの物理コンポーネントまたはその仮想化のいずれかを意味する。
図2に目を向けると、そこに示されているシステム200は、コンピューティングデバイスハードウェアと、その上で実行されているプロセスの両方を含むコンピューティングシステムを示している。より具体的には、図2に示される例示的なシステム200は、前述の例示的なコンピューティングデバイス100の一部として示される、前述の処理装置120およびRAM132などのコンピューティングデバイスハードウェア自体を含む。さらに、例示的なシステム200は、コンピューティングデバイス100が例示的なハイパーバイザー210に関連する機能を実行するのを可能にする、例示的なコンピューティングデバイス100によって実行される、コンピュータ実行可能命令が備えられることができる、例示的なハイパーバイザー210などのハイパーバイザーを含む。以下でさらに詳細に記載するように、例示的なハイパーバイザー210は、例示的なSLAT220などの、第2層アドレステーブル(SLAT)を含むことができ、または参照することができる。
例示的なハイパーバイザー210は、コンピューティングデバイス100のハードウェアと釣り合っているか、または、プロセッサのタイプおよび/または容量の相違、RAMの数量および/またはタイプの相違、記憶媒体の数量および/またはタイプの相違、ならびにその他の同様の相違を含む、それとは異なることができる、コンピューティングハードウェアのセットを仮想化することができる。そのような仮想化は、とりわけ、例示的な仮想マシンプロセス260および250などの、1つ以上の仮想マシンプロセスを可能にすることができる。ハイパーバイザー210は、それらの仮想マシンのコンテキスト内で実行されているプロセスと、ハイパーバイザー上で実行されている他のプロセスの両方に、コンピューティングデバイスハードウェア110上で直接実行されているように見える。図2に示される例示的なシステム200は、例示的なハイパーバイザー210上で実行される例示的なオペレーティングシステム240などのオペレーティングシステムを示す。次に、例示的なシステム200によって示されるように、例示的なオペレーティングシステム240は、前述の仮想マシンプロセス260および250などの、1つ以上のコンピュータ実行可能アプリケーションプログラムをその上で実行することができる。
例示的なオペレーティングシステム240は、以下の記載に関連する様々なコンポーネント、サブコンポーネント、またはそれらの態様を備えることができる。図2において視覚的に区別できる要素として示されているが、そのような視覚的な描写は、プロセス境界、独立したメモリサイロ、またはその他の同様の計算描写など、特定の計算上の独立性を伝えることを意図したものではない。オペレーティングシステム240の一態様は、例示的なメモリマネージャー241などの、メモリマネージャーであることができる。より具体的には、例示的なメモリマネージャー241は、1つ以上のコンピュータ可読記憶媒体からコードまたはデータを読み取ることができ、そのようなコードまたはデータを、RAM132によってサポートされることができる、メモリの中にコピーすることができる。
本明細書で利用されるように、「仮想メモリ」という用語は、仮想マシンを参照して作られたのではなく、むしろアプリケーションプログラム、またはRAM132において物理的に存在するよりも大量のメモリにアクセスしているように見える、コンピューティングデバイス上で実行される他のプロセスに提示するという概念を指す。したがって、例えば、オペレーティングシステム240によって提供される仮想メモリ機能は、最終的には物理メモリ132などの物理メモリによってサポートされるが、その量が物理メモリよりも多いメモリへのコードおよび/またはデータのロードを可能にすることができる。オペレーティングシステム240の一部として実行される、メモリマネージャー241は、1つ以上の仮想メモリアドレスと1つ以上の物理メモリアドレスとの間の相関を説明するように、ページテーブル250を維持、変更、および/または利用することができる。より具体的には、ページテーブル250は、1つのメモリアドレス指定スキームと別の異なるメモリアドレス指定スキームとの間のアドレス変換を提供する。これを達成するために、ページテーブル250は、1つのメモリアドレス指定スキーム、すなわち仮想メモリアドレスによる1つ以上のメモリアドレスを、別の異なるメモリアドレス指定スキーム、すなわち物理メモリアドレスによる1つ以上のメモリアドレスに相関させることができる、以下でさらに詳しく記載される、テーブルの複数の階層レベルを含むことができる。
図2に示される例示的なシステム200は、オペレーティングシステム240上で実行されるアプリケーションプログラムを示している。特に、そのようなアプリケーションプログラムは、例示的な仮想マシンプロセス260および270などの、仮想マシンプロセスを例示することができる、仮想マシンアプリケーションプログラムであることができる。各仮想マシンプロセスは、独自のオペレーティングシステム、アプリケーションプログラム、およびコンピューティングデバイス100によって提示されるような、物理コンピューティング環境によってホストされることができる、他の同様の機能をホストすることができる、仮想コンピューティング環境を作成することができる。図2に示される例示的なシステム200内で、例示的な仮想マシンプロセス260は、仮想マシン環境261を作成するものとして示され、例示的な仮想マシンプロセス270は、仮想マシン環境271を作成するものとして示される。例示的な仮想マシン環境271は、例示的なオペレーティングシステム240に類似することができる、または異なるタイプのオペレーティングシステムであり得る、例示的なオペレーティングシステム281の形態において、オペレーティングシステムをホストするものとして示されている。例証の目的のために、例示的な仮想マシン環境271内で実行される、例示的なオペレーティングシステム281は、メモリマネージャー、すなわち例示的なメモリマネージャー282を備えるものとして示され、これは次に、仮想マシン環境271内に仮想メモリを提供するように、ページテーブル、すなわち例示的なページテーブル283を参照する。仮想マシン環境271内のそのような仮想メモリは、例示的な仮想マシン環境271内でも実行されるものとして図2に示される、例示的なプロセス291および292などの、例示的なオペレーティングシステム281上で実行されるプロセスによって利用されることができる。
メモリマネージャー241および282によって実装されるのと同様の方法において、ハイパーバイザー210は、メモリを含むコンピューティングハードウェアの仮想セットの提示を容易にする際に、メモリアドレスをあるメモリアドレス指定スキームから別の異なるメモリアドレス指定スキームに同様に変換することができる。より具体的には、ハイパーバイザー210は、ハイパーバイザー210によって物理メモリアドレスとして提示されたメモリアドレスを、例えば、メモリ132内の物理的位置を識別する、メモリアドレスなどの、実際の物理メモリアドレスに変換することができる。そのような変換は、別の階層的に編成されたテーブル、すなわちSLAT220を参照して実行することができ、これはまた、1つのメモリアドレス指定スキーム、すなわち、この場合、実際の物理メモリアドレスと、別の異なるメモリアドレス指定スキーム、この場合、ハイパーバイザー210上で実行されているプロセスによって物理メモリアドレスとして認識されるアドレスとの間のメモリアドレス変換のために提供することができる。
一態様によれば、オペレーティングシステム240によって提供される仮想メモリは、ホストコンピューティングデバイス上でページングされていない物理メモリ割り当てを使用するのではなく、仮想マシンの物理メモリを支援するように利用されることができる。これは、メモリマネージャー241が、ゲスト物理メモリに関連付けられたホスト物理メモリを管理することを可能にする。特に、メモリマネージャー241など、ホスト上にすでに存在する、メモリ管理ロジックは、ゲスト仮想マシンの物理メモリを管理するように、活用されることができるようになる。これは、例示的なハイパーバイザー210などの、ハイパーバイザーを実装するように使用されるコードの量に関して、より小さいハイパーバイザーの使用を可能にすることができる。悪用される可能性のあるコードまたはエラーが発生する可能性のあるコードが少ないため、ハイパーバイザーが小さいほど安全性が高くなる。さらに、これは、仮想マシンを実装するのに利用されることができるホスト物理メモリが少なくなるため、ホスト上の仮想マシンの密度を高めることができる。例えば、以前は、仮想マシンプロセスが非ページメモリを必要としたので、例示的なコンピューティングデバイス100が3GBのRAM132が備えられる場合、それは、2GBのRAMを有する仮想マシンを作成した、1つの仮想マシンプロセスしかホストできなかった。対照的に、例示的な仮想マシンプロセス270などの、仮想マシンプロセスによって消費されるメモリが、オペレーティングシステム240のメモリマネージャー241によって提供されるものなどの仮想メモリである場合、4GBの仮想メモリ空間は、2つの仮想マシンプロセスをサポートし、それぞれが2GBのRAMを有する仮想マシンを作成することができる。そのような方法において、例示的なコンピューティングデバイス100は、1つだけではなく2つの仮想マシンプロセスをホストすることができ、それによって、例示的なコンピューティングデバイス100上で実行される仮想マシンプロセスの密度を増加させる。
その他の利点は、システム(ホストおよび仮想マシン)上のすべてのメモリを管理する単一のメモリ管理コードベースを含む。したがって、1つのコードベースにおける改善、修正、および/または調整は、すべての人に利益をもたらす。さらに、これは、1つのコードベースを維持するだけで済むため、エンジニアリングコストを削減する結果をもたらすことができる。別の利点の例は、仮想マシンがページング、ページ共有、ワーキングセットのエージングおよびトリミング、障害クラスタリングなどの密度の改善からすぐに恩恵を受けることができる。別の利点の例は、仮想メモリおよび物理メモリの消費制限を他のプロセスと同じように仮想マシンに設定できるため、管理者がシステムの動作を制御できる。別の利点の例は、ホストメモリマネージャーに追加機能を追加して、仮想マシンの性能、密度、および機能を向上させることができることである(また、他の非仮想マシンのワークロードもこれらの利点を享受する可能性がある)。
図3に目を向けると、システム300は、図2に示されるシステム200に適用可能である、複数レベルのページテーブルおよび対応するメモリアドレス指定スキームを指すように、本明細書で利用される用語を示す。より具体的には、仮想マシン環境271内で、例示的なメモリマネージャー282は、仮想マシン環境271のコンテキスト内の仮想メモリアドレスを、再び、仮想マシン環境271のコンテキスト内の物理メモリアドレスに相関させるように、ページテーブル283を参照することができる。以前に示したように、「仮想メモリ」という用語は、仮想マシン環境内のメモリを指すのではなく、物理メモリの容量によってサポートされているが、それよりも大きい、コンピューティングデバイス上で実行されるプロセスに対して利用可能であるメモリの量を指す。したがって、仮想マシン環境内の仮想メモリと、非仮想化または「ベアメタル」コンピューティング環境内の仮想メモリとを名目上区別するために、形容詞「ゲスト」が仮想マシンコンピューティング環境を示し、形容詞「ホスト」がベアメタルコンピューティング環境を示す、形容詞「ゲスト」および「ホスト」は、仮想マシン環境を提供する仮想マシンプロセスを実行するために利用される。
そのように、およびシステム301に示されているように、「ゲスト仮想メモリ」311アドレス指定スキーム内のアドレスは、図2に示された、仮想マシン環境271内のページテーブル283によって「ゲスト物理メモリ」312アドレス指定スキーム内のアドレスに相関させられることができる。同様に、「ホスト仮想メモリ」321アドレス指定スキーム内のアドレスは、非仮想コンピューティング環境において実行されているものとして図2に示された、例示的なオペレーティングシステム240の一部である、ページテーブル250によって「ホスト物理メモリ」322アドレス指定スキーム内のアドレスに相関させられることができる。図3における例示的なシステム301によっては図示されていないが、一態様によれば、および以下でさらに詳述されるように、仮想マシン環境のゲスト物理メモリ312は、ホスト仮想メモリ321によって支援されることができ、それによって前述の利点を提供する。ホスト仮想メモリ321でのゲスト物理メモリ312のそのような支援は、例示的なシステム301によって示されるように、「ゲスト物理メモリ」312アドレス指定スキームと「ホスト物理メモリ」322アドレス指定スキームとの間の変換のために提供する、SLAT220の変更を伴うことができる。
図3にも示されている、システム302に目を向けると、テーブルの階層的配置は、例示的なページテーブル250、例示的なページテーブル283、および/または例示的なSLAT220を実装するように利用されることができるように、示されている。モデムコンピューティングデバイスおよびアプリケーションプログラムプロセスに適用可能なメモリの量に対応するために、ページテーブル250、283および/またはSLAT220は、複数の、典型的には4つのレベルの階層テーブルを有する。しかしながら、例証を容易にするために、システム302は、階層テーブルの2つのレベルのみを示している。階層的に上位のテーブルレベル340は、例示的なテーブルエントリー341、342、343および344などの、複数のテーブルエントリーを含むことができる。例えば、階層的に上位のテーブルレベル340は、4KBのサイズであることができ、各々が8バイトのサイズであることができる、512個の個別のテーブルエントリーを含むことができる。各テーブルエントリーは、例示的な階層的に下位のテーブルレベル350および360のうちの1つなどの、階層的に下位のテーブルレベルのポインタ、または他の同様の識別子を含むことができる。したがって、例えば、例示的なテーブルエントリー341は、矢印371によって示されるように、例示的な階層的に下位のテーブルレベル350の識別を含むことができる。階層的に上位のテーブルレベル340の4KBのサイズであり、各テーブルエントリーの8バイトのサイズであった場合、それらの8バイトのデータの少なくとも一部は、階層的に下位のテーブルレベル350のポインタまたは他の同様の識別子であることができる。例示的なテーブルエントリー342は、同様の方法で、矢印372によって示されるように、階層的に下位のテーブルレベル360の識別を含むことができる。例示的な階層的に上位のテーブルレベル340の残りの個別のテーブルエントリーの各々は、同様に、一意の階層的に下位のテーブルレベルを識別することができる。したがって、階層的に上位のテーブルレベル340の4KBのサイズであり、各々が8バイトのサイズの512個のテーブルエントリーが備えられる例において、そのような階層的に上位のテーブルレベル340は、例示的な階層的に下位のテーブルレベル350および360などの、512個の一意の階層的に下位レベルテーブルの512個の識別を含むことができる。
階層的に下位のテーブルレベルの各々は、同様の方法で、個々のテーブルエントリーを含むことができる。例えば、例示的な階層的に下位のテーブルレベル350は、例示的なテーブルエントリー251、352、353および354を含むことができる。同様に、例示的な階層的に下位のテーブルレベル360は、テーブルエントリー361、362、363および364を含むことができる。一例として、階層的に下位のテーブルレベルの各々は、階層的に上位のテーブルレベル340と同等のサイズおよび構造であることができる。したがって、例示的な階層的下位のテーブルレベル350は、4KBのサイズであることができ、各々が8バイトのサイズであることができる、例示的なテーブルエントリー351、352、353および354などの、512個のテーブルエントリーを含むことができる。システム302によって示される例において、例えば、例示的な階層的に下位のテーブルレベル350の例示的なテーブルエントリー351、352、353および354などの階層的に下位のテーブルレベルのケーブルエントリーは、各々、連続する範囲のメモリアドレスを識別することができる。例えば、例示的なテーブルエントリー351は、矢印391によって示されるように、メモリアドレス371の範囲を識別することができる。メモリアドレス371の範囲は、メモリの「ページ」を備えることができ、個別に管理可能な最小のメモリ量にすることができる。したがって、インストールされている物理メモリの量よりも多い、仮想メモリの量を有効化する一環として、揮発性メモリに一時的に格納されている情報を不揮発性記憶媒体に、またはその逆に移動するなどのアクションは、ページごとに実行されることができる。追加的に、アクセス許可は、ページごとに確立されることができる。例えば、メモリ371の範囲は、テーブルエントリー351によって単独で識別されるので、アクセス許可は、メモリ371の範囲内のすべてのメモリアドレスに適用することができる。逆に、メモリ371の範囲内のメモリアドレスのアクセス許可は、メモリ372の範囲に対して確立されたアクセス許可から独立することができ、矢印392によって示されるように、異なるテーブルエントリー、すなわちテーブルエントリー352によって一意に識別されることができる。
メモリ371の範囲などの、単一のメモリページにおけるメモリの量は、プロセッサ設計および他のハードウェア要因、ならびに通信接続などを含む、様々な要因に依存することができる。一例において、メモリ371の範囲によって表されるような、メモリのページは、4KBのサイズであることができる。
1つ以上のメモリアドレスによって識別されるメモリ位置へアクセスする要求を受信すると、階層的に上位のテーブルレベルにおけるテーブルエントリーは、アクセスされる、メモリアドレスを含む、メモリアドレスの範囲に対応して、識別されることができる。例えば、アクセスされるメモリアドレスがメモリ371によって表されるメモリを含む場合、テーブルエントリー341は、階層的に上位のテーブルレベル340において識別されることができる。次に、テーブルエントリー341の識別は、階層的に下位のテーブルレベル350の識別をもたらすことができる。階層的に下位のテーブルレベル350内で、アクセスされるメモリアドレスは、テーブルエントリー351によって識別される、メモリの一部であると判断されることができる。その後、テーブルエントリー351の情報は、アクセスされようとしているメモリ371を識別することができる。
階層的に下位レベルのページテーブルのこのような各トラバースは、メモリへアクセスする要求を受信することと、そのメモリへのアクセスを返すこととの間の遅延を長くすることができる。一態様によれば、例えば、階層的に上位のテーブルレベル340の例示的なテーブルエントリー341などの、階層的に上位のテーブルレベルのテーブルエントリーは、例示的な階層的に下位のテーブルレベル350のような階層的に下位のテーブルレベルではなく、階層的に下位のテーブルレベルのテーブルエントリーによって識別されたであろうメモリの全範囲に対応することができる、メモリのページを識別することができる。したがって、例えば、階層的に下位のテーブルレベル350の個々のテーブルエントリー351、352、および353によって識別されるメモリ371、372、および373の各ページの4KBのサイズである場合、その後、例示的な階層的に下位のテーブルレベル350が512個のテーブルエントリーを含むことができるので、2MBのサイズのメモリの範囲は、階層的に下位のテーブルレベル350の個々のテーブルエントリーのすべての結合量によって識別することができ、各々が4KBのサイズのメモリの範囲を識別する。そのような例において、すべての2MBのメモリが単一の2MBメモリページとして扱われる場合、そのような単一の大容量メモリページは、階層的に上位のテーブルレベル340の例示的なテーブルエントリー341によって直接識別されることができる。そのような場合、例示的なテーブルエントリー341は、例示的な2MBメモリページ370などの単一の2MBメモリページを直接識別し、階層的に下位のテーブルレベルを識別しないので、階層的に下位のテーブルレベルを参照する必要はない。例えば、ページテーブルまたはSLATが4つの階層レベルが備えられる場合、例示的な大容量メモリページ370などの、大容量メモリページを利用することは、それらの階層のテーブルレベルのうちの1つがスキップされ、参照されないようにすることを可能にし、それにより、4つではなく、3つの階層のテーブルレベルのみを参照することによって、仮想メモリと物理メモリとの間のメモリアドレス変換を提供し、メモリアクセスがより効率的に、すなわち、25%効率的に提供する。ページが個別に管理可能なメモリの最小量であるため、2MBサイズのメモリページが使用される場合、例えば、メモリアクセス許可は、その後、そのような大容量メモリページにおけるすべての2MBのメモリに対して同じにすることができる。
さらなる例として、上での例示的なテーブル340である階層的に配置されたテーブルがあった場合、エントリー341、342、343、および344などの、例示的なテーブル340における各エントリーは、例示的な2MBメモリページ370などの、2MBメモリページをアドレス指定することができ、その後、そのようなテーブルエントリーの512個が集約されると、1GBのメモリをアドレス指定することができる。単一の1GBページのメモリが使用された場合、テーブル340への参照、および例示的なテーブル350などの、階層的に下位のテーブルレベルへのその後の参照の両方は、回避されることができる。ページテーブルまたはSLATが4つの階層レベルを備える例に戻ると、そのような巨大なメモリページを利用することは、それらの階層のテーブルレベルのうち2つがスキップされ、参照されないようにすることを可能にし、それにより、4つではない、階層のテーブルレベルのみを参照することによって、仮想メモリと物理メモリとの間のメモリアドレス変換を提供し、およそ半分の時間でメモリアクセスを提供する。再び、ページが個別に管理可能なメモリの最小量であるため、1GBサイズのメモリページが使用される場合、例えば、メモリアクセス許可は、その後、そのような巨大なメモリページにおけるすべての1GBメモリに対して同じにすることができる。
本明細書で利用される「大容量メモリページ」という用語は、階層的に最下位レベルでの単一のテーブルによって識別されたであろう、ならびに、階層的に最下位のテーブルレベルの1つ上の階層レベルでのテーブルの単一のテーブルエントリーによって、一意および直接識別されることができる、メモリのすべての範囲を包含するようなサイズである、連続したメモリの範囲を意味する。上で提供された特定のサイジングの例において、「大容量メモリページ」は、その用語が本明細書で画定されているように、2MBのサイズのメモリページになる。しかしながら、示されているように、「大容量メモリページ」という用語は、特定のサイズを指すのではなく、むしろ「大容量メモリページ」のメモリ量は、ページテーブル自体の階層設計、およびページテーブルの階層的に最下位レベルでの各テーブルエントリーによって参照されるメモリ量に依存する。
同様に、本明細書で利用される「巨大メモリページ」という用語は、階層的に第2の下位レベルでの単一のテーブルによって識別されたであろう、ならびに、階層的に第2の下位のレベルテーブルの1つ上の階層レベルでのテーブルの単一のテーブルエントリーによって、一意および直接識別されることができる、メモリのすべての範囲を包含するようなサイズである、連続したメモリの範囲を意味する。上で提供された特定のサイジングの例において、「巨大メモリページ」は、その用語が本明細書で利用されているように、1GBのサイズのメモリページになる。再び、示されているように、「巨大メモリページ」という用語は、特定のサイズを指すのではなく、むしろ「巨大メモリページ」のメモリ量は、ページテーブル自体の階層設計、およびページテーブルの階層的に最下位レベルでの各テーブルエントリーによって参照されるメモリ量に依存する。
図2に戻ると、(ホストコンピューティングデバイスの)ホスト仮想メモリが(仮想マシンの)ゲスト物理メモリを支援するように利用されることできることによるメカニズムの記載は、図2に示される例示的な仮想化スタック230などの、仮想化スタックを参照して提供される。ユーザモードプロセスは、ゲスト仮想マシンを支援するための仮想メモリを提供するように、ホストコンピューティングデバイスで実行されることができる。1つのそのようなユーザモードプロセスは、ゲストマシンごとに作成されることができる。代替的に、単一のユーザモードプロセスは、複数の仮想マシンのために使用されることができ、または複数のプロセスは、単一の仮想マシンのために使用され得る。代替的に、仮想メモリは、以下に示すように、ユーザモードプロセスを使用する以外の方法で実装されることもできる。例証の目的のために、仮想マシンプロセス270に割り当てられた仮想メモリは、仮想マシン環境271において仮想マシンプロセス270によって提示されたゲスト物理メモリを支援するように、利用されることができ、同様に、仮想マシンプロセス260に割り当てられた仮想メモリは、仮想マシン環境261において仮想マシンプロセス260によって提示されたゲスト物理メモリを支援するように、利用されることができる。図2の例示的なシステム200において、そのように示されているが、前述のユーザモードプロセスは、例示的な仮想マシンプロセス260および270などの、仮想マシンプロセスから分離することができる。
一態様によれば、例示的な仮想化スタック230などの、仮想化スタックは、例示的な仮想マシンプロセス260または270などの、仮想マシンをホストする指定されたユーザモードプロセスのアドレス空間においてホスト仮想メモリを割り当てることができる。ホストメモリマネージャー241は、このメモリを他の仮想割り当てとして扱うことができ、これは、ページングが可能であり、システムの他の場所での連続したメモリ割り当てを満たす目的でそれを支援する物理ページを変更でき、物理ページを共有できることを意味する、別のプロセスで別の仮想割り当てを使用する(これは、別の仮想マシンの支援割り当てまたはシステム上の他の割り当てにすることができる)。同時に、ホストメモリマネージャーが仮想マシンの支援仮想割り当てを必要に応じて特別に処理するように、多くの最適化は、可能である。また、仮想化スタック230が密度よりも性能を優先することを選択した場合、仮想マシンがそれらの部分のページングを経験しないことを保証するためにメモリにおけるページをロックするなど、オペレーティングシステムメモリマネージャー241によってサポートされる多くの作動を実行することができる。同様に、大きいページは、以下で詳しく説明するように、仮想マシンのためのさらなる性能を提供するように使用されることができる。
特定の仮想マシンは、ホスト仮想メモリによって支援されたゲスト物理メモリにおけるすべてのゲスト物理メモリアドレスを有することができ、または、ホスト仮想メモリによって支援されたゲスト物理メモリにおける、および、ホスト物理メモリから行われる非ページ物理メモリの割り当てなど、レガシーメカニズムによって一部支援されたゲスト物理メモリにおけるゲスト物理メモリアドレスの一部を有することができる。
新しい仮想マシンが作成されるときに、仮想化スタック230は、仮想メモリ割り当てをホストして、ゲスト物理メモリを支援するように、ユーザモードプロセスを使用することができる。これは、新しく作成された空のプロセス、複数の仮想マシンをホストする既存のプロセス、または仮想マシン自体には表示されない他の仮想マシン関連の仮想割り当て(仮想化スタックデータ構造など)を含む仮想マシンごとのプロセスであることができる。仮想マシンを支援するように、カーネル仮想アドレス空間を使用することも可能である。そのようなプロセスが見つかるか作成されると、仮想化スタック230は、仮想マシンが有するべきゲスト物理メモリの量に対応するアドレス空間におけるプライベートメモリ仮想割り当て(またはセクション/ファイルマッピング)を行うことができる。具体的には、仮想メモリは、プライベート割り当て、ファイルマッピング、ページファイルに支援されたセクションマッピング、またはホストメモリマネージャー241によってサポートされる任意の他のタイプの割り当てであることができる。これは、1つの連続した割り当てである必要はないが、以下で詳述するように、そのような割り当ては、アクセス速度の利点を提供することができる。代わりに、そのような割り当ては、任意の数の割り当てにすることができる。
仮想メモリの割り当てが行われると、それらは、例示的な仮想マシン環境271などの、仮想マシンの物理アドレス空間を管理するコンポーネントで登録されることができ、それを、ホストメモリマネージャー241が仮想メモリ割り当てを支援するように選択する、ホスト物理メモリページで同期させておく。これらのコンポーネントは、ホストカーネルおよび/またはドライバの一部として実装されることができる、ハイパーバイザー210および仮想化スタック230であることができる。ハイパーバイザー210は、SLAT220を利用することによって、ゲスト物理メモリアドレス範囲と対応するホスト物理メモリアドレス範囲との間の変換を管理することができる。特に、仮想化スタック230は、対応するゲスト物理メモリページを支援しているホスト物理メモリページでSLAT220を更新することができる。ハイパーバイザー210は、特定のアクセスタイプが例示的な仮想マシン271などのゲスト仮想マシンによって実行されたときに、仮想化スタック230がインターセプトを受信する能力を、所与のゲスト物理メモリアドレスに公開することができる。例えば、仮想化スタック230は、特定の物理アドレスがゲスト仮想マシン271によって書き込まれたときに、インターセプトを受信するように要求することができる。
一態様によれば、例示的な仮想マシン271などの仮想マシンが最初に作成されるときに、そのような仮想マシンのゲスト物理メモリアドレス(以下に示すように、いくつかの実施形態において、SLAT220は、仮想マシン271の作成時またはほぼ同時に、いくつかのゲスト物理メモリアドレスのために事前入力されることができる)を支援するように、ホスト物理メモリアドレスが割り当てられていない可能性があるため、SLAT220は、そのような仮想マシンに対応する有効なエントリーを含まない可能性がある。ハイパーバイザー210は、仮想マシン27によって利用されるゲスト物理メモリアドレス範囲を認識することができるが、これらのいずれも、この時点でホスト物理メモリによって支援される必要はない。仮想マシンプロセス270が実行を開始するときに、それは、その(ゲスト)物理メモリページへのアクセスを開始することができる。新しい物理メモリアドレスにアクセスするたびに、対応するSLATエントリーに対応するホスト物理メモリアドレスがまだ入力されていないため、適切なタイプ(読み取り/書き込み/実行)のインターセプトを生成することができる。ハイパーバイザー210は、ゲストアクセスインターセプトを受信し、それを仮想化スタック230に転送することができる。次に、仮想化スタック230は、要求されたゲスト物理メモリアドレス範囲(および、例示的な仮想マシンプロセス270などから、支援が割り当てられた仮想アドレス空間を有するホストプロセス)に対応する、ホスト仮想メモリアドレス範囲を見つけるように、仮想化スタック230によって維持されるデータ構造を参照することができる。その時点で、仮想化スタック230は、インターセプトを生成したゲスト物理メモリアドレスに対応する、特定のホスト仮想メモリアドレスを知ることができる。
その後、仮想化スタック230は、仮想マシンプロセス270などの、仮想アドレス範囲をホストするプロセスのコンテキストにおいて、ホストメモリマネージャー241に仮想障害を発行することができる。仮想障害は、仮想マシン271がゲスト物理メモリにおいてその物理アドレスにアクセスされたたときに発生した、元のインターセプトの対応するアクセスタイプ(読み取り/書き込み/実行)で発行されることができる。仮想障害は、指定された仮想アドレスを有効化して、ホストCPUによってアクセス可能であるようにするために、通常のページフォールトが取るのと同様の、または同一のコードパスを実行することができる。1つの相違は、仮想障害コードパスが、メモリマネージャー241が仮想アドレスを有効にするように使用された、物理ページ番号を返すことができるということであることができる。この物理ページ番号は、ホスト仮想アドレスを支援しているホスト物理メモリアドレスであることができ、次に、これは、ハイパーバイザー210においてアクセスインターセプトを最初に生成したゲスト物理メモリアドレスを支援している。この時点で、仮想化スタック230は、ホスト物理メモリアドレスおよびホストにおいて仮想アドレスを有効にするために使用された、アクセスタイプ(読み取り/書き込み/実行)でインターセプトを生成した、元のゲスト物理メモリアドレスに対応するSLAT220においてテーブルエントリーを生成または更新することができる。これが行われると、ゲスト物理メモリアドレスは、ゲスト仮想マシン271へのそのアクセスタイプで即座にアクセス可能であることができる。例えば、ゲスト仮想マシン271における並列仮想プロセッサは、インターセプトに当たることなく、そのようなアドレスに即座にアクセスすることができる。元のインターセプト処理は、完了されることができ、インターセプトを生成した元の仮想プロセッサは、要求されたゲスト物理アドレスを対応するホスト物理メモリアドレスと相関することができる、テーブルエントリーをSLATが含んでいるため、その命令を再試行して、メモリへのアクセスに進行することができる。
ホストメモリマネージャー241が、仮想障害を介して有効にされたホスト仮想アドレスのホスト物理アドレス支援を変更する可能性がある、または変更するであろうアクションを実行することを決定した場合、および/またはそのときに、そのホスト仮想アドレスに対してトランスレーションバッファ(TLB)フラッシュを実行することができる。ホストメモリマネージャー241がホスト上のハードウェアCPUとで有することができる既存の契約に準拠するために、それは、そのようなアクションをすでに実行することができる。仮想化スタック230は、そのようなTLBフラッシュをインターセプトし、任意の仮想マシンにおける任意のゲスト物理メモリアドレスを支援している、フラッシュされる任意のホスト仮想アドレスの対応するSLATエントリーを無効化することができる。TLBフラッシュ呼び出しは、フラッシュされている仮想アドレスの範囲を識別することができる。その後、仮想化スタック230は、そのデータ構造に対してフラッシュされているホスト仮想アドレスを検索することができ、これは、ホスト仮想アドレスによって索引付けされて、所与のホスト仮想アドレスによって支援され得るゲスト物理範囲を見つけることができる。そのような範囲が見つかった場合、それらのゲスト物理メモリアドレスに対応するSLATエントリーは、無効化されることができる。追加的に、ホストメモリマネージャーは、TLBフラッシュ動作を最適化するように、必要または要求に応じて仮想メモリを支援する仮想割り当てを異なる方法で処理することができる(例えば、SLAT無効化時間、後続のメモリインターセプトなどを削減するように)。
仮想化スタック230は、SLAT220の更新を、ホストによって実行されるTLBフラッシュ(メモリマネージャー241によって発行される)に対して、仮想障害から返される(メモリマネージャー241によってサービスされる)ホスト物理メモリページ番号と注意深く同期させることができる。これは、ホストメモリマネージャー241と仮想化スタック230との間に複雑な同期を追加することを回避するために行われことができる。仮想障害によって返される物理ページ番号は、仮想化スタック230に返される時間によって古くなり得る。例えば、仮想アドレスは、すでに無効化されていることがあり得る。ホストメモリマネージャー241からのTLBフラッシュコールをインターセプトすることによって、仮想化スタック230は、この競合がいつ発生したかを知ることができ、更新された物理ページ番号を取得するように仮想障害を再試行することができる。
仮想化スタック230がSLATエントリーを無効化するときに、仮想マシン271によるそのゲスト物理メモリアドレスへの任意のその後のアクセスは、次に、仮想化スタック230に転送されて、上で記載のように解決される、ハイパーバイザー210へのインターセプトを再び生成する。ゲスト物理メモリアドレスが最初に読み取られ、後に書き込まれるときに、同じプロセスは、繰り返されることができる。SLATエントリーが「読み取り」アクセスタイプでのみ有効にされることができるため、書き込みは、個別のインターセプトを生成する。そのインターセプトは、通常通り仮想化スタック230に転送されることができ、「書き込み」アクセスを伴う仮想障害は、適切な仮想アドレスについてホストメモリマネージャー241に発行されることができる。ホストメモリマネージャー241は、ホスト物理メモリページが現在ダーティであることを示すように、その内部状態(典型的には、ページテーブルエントリー(すなわち「PTE」)における)を更新することができる。これは、仮想マシンがそのゲスト物理メモリアドレスに書き込むことを許可する前になされることができ、それにより、データの損失および/または破損を回避する。ホストメモリマネージャー241がその仮想アドレスをトリミングすることを決定した場合、および/またはそのときに(これは、TLBフラッシュを実行し、結果として対応するSLATエントリーを無効化する)、ホストメモリマネージャー241は、ページが汚れていることを知ることができ、再利用される前に、ハードディスクドライブ上のページファイルなどの、不揮発性のコンピュータ可読記憶媒体に書き込まれる必要がある。そのような方法において、上で記載のシーケンスは、ホストコンピューティングデバイス100上で実行されている任意の他のプロセスのための通常のプライベート仮想割り当てに対して起こることと異ならない。
1つの最適化として、ホストメモリマネージャー241は、そのメモリ120のすべてに対してページコーミング(combing)パスを実行することを選択することができる。これは、ホストメモリマネージャー241がすべてのプロセスにわたって同一のページを見つけ、それらをすべてのプロセスが共有するページの1つの読み取り専用コピーに結合する作動であることができる。結合された仮想アドレスのいずれかが書き込まれる場合、および/またはそのときに、メモリマネージャー241は、書き込みを進行するように、コピーオンライト作動を実行することができる。そのような最適化は、仮想マシン間で同一のページを結合することによって所与のコンピューティングデバイス上で実行される仮想マシンの密度を高めように、例示的な仮想マシン261および271などの、仮想マシン間で透過的に機能することができ、それによって、メモリ消費を削減する。ページ結合が発生するときに、ホストメモリマネージャー241は、影響を受ける仮想アドレスをマッピングする、PTEを更新することができる。この更新中に、ホスト物理メモリアドレスがそれらの仮想アドレスに対して一意のプライベートページから共有ページに変更されることができるため、TLBフラッシュを実行することができる。この一部として、上で記載のように、仮想化スタック230は、対応するSLATエントリーを無効化することができる。仮想アドレスが共有ページを指すように結合された、ゲスト物理メモリアドレスが読み取られた場合、および/またはそのときに、仮想障害解決は、インターセプト処理中に共有ページの物理ページ番号を返すことができ、SLAT220は、共有ページを指すように更新されることができる。
結合されたゲスト物理メモリアドレスのいずれかが仮想マシンによって書き込まれる場合、書き込みアクセスを伴う仮想障害は、コピーオンライト作動を実行することができ、新しいプライベートホスト物理メモリページ番号は、SLAT220において返され、更新されることができる。例えば、仮想化スタック230は、ホストメモリマネージャー241に、ページ結合パスを実行するように指示することができる。いくつかの実施形態において、仮想化スタック230が、コーミングのためにメモリのどの部分がスキャンされるのか、またはどのプロセスがスキャンされるべきかを指定することが可能である。例えば、仮想化スタック230は、そのホスト仮想メモリ割り当てが、対応する仮想マシン、すなわち、例示的な仮想マシン261および271のゲスト物理メモリを支援している、例示的な仮想マシンプロセス260および270などのプロセスを、結合のためにスキャンされるプロセスとして識別することができる。
SLAT220が、書き込みのために実行されている仮想障害による書き込みアクセスを許可するように更新された場合でも、ハイパーバイザー210は、仮想化スタック230によって要求された場合に、そのようなSLATエントリーへの書き込みのインターセプトのトリガーをサポートすることができる。仮想化スタック230が、これらの書き込みが発生することがホストメモリマネージャー241に許容可能であるという事実に関係なく、いつ書き込みが発生するかを知り得るので、これは有用であり得る。例えば、仮想マシンのライブマイグレーションまたは仮想マシンのスナップショットは、仮想化スタック230の監視書き込みを必要とすることができる。仮想化スタック230は、例えば、PTEがすでにダーティとしてマークされている場合など、書き込みに応じてホストメモリマネージャーの状態がすでに更新されている場合でも、書き込みが発生したときに通知されることができる。
ホストメモリマネージャー241は、他のプロセスアドレス空間に割り当てられた通常のホスト仮想ページの場合と同様に、ゲスト物理メモリアドレス空間を支援する各ホスト仮想ページの正確なアクセス履歴を維持することができる。例えば、PTEの「アクセスされたビット」は、メモリインターセプトの処理の一部として実行される仮想障害中に更新されることができる。ホストメモリマネージャーが任意のPTEでアクセスされたビットをクリアするときに、メモリの破損を回避するようにTLBをすでにフラッシュすることができる。前に記載されたように、このTLBフラッシュは、対応するSLATエントリーを無効化することができ、仮想マシンがそのゲスト物理メモリアドレスに再びアクセスすると、アクセスインターセプトが生成されることができる。インターセプトを処理する一環として、ホストメモリマネージャー241における仮想障害処理は、アクセスされたビットを再び設定することができ、したがって、ページのための適切なアクセス履歴を維持する。代替的に、ハイパーバイザー210におけるアクセスインターセプトを可能な限り回避するなどの性能上の理由で、ホストメモリマネージャー241は、基礎となるハードウェアによってサポートされる場合、SLATエントリーから収集されたハイパーバイザー210から直接ページアクセス情報を消費することができる。ホストメモリマネージャー241は、仮想化スタック230と協力して、SLAT220(ゲスト物理メモリアドレスによって編成される)におけるアクセス情報を、それらのゲスト物理メモリアドレスを支援するホスト仮想メモリアドレスに変換して、どのアドレスがアクセスされたかを知ることができる。
ページの正確なアクセス履歴を有することによって、ホストメモリマネージャー241は、プロセスのワーキングセットの通常のインテリジェントなエージングおよびトリミングアルゴリズムを実行することができる。これにより、ホストメモリマネージャー241は、システム全体の状態を検査し、必要に応じてまたは他の理由でメモリプレッシャーを軽減するように、どのアドレスをトリムおよび/またはディスクにページアウトするか、または他の同様の作動についてインテリジェントな選択を行うことができる。
いくつかの実施形態において、仮想メモリおよび物理メモリの制限は、システム上の他のプロセスと同様に、ホストメモリマネージャー241によって仮想マシンで課されることができる。これは、システム管理者のサンドボックスを支援するか、そうでなければ、例示的な仮想マシン261および271などの、仮想マシンを制約または有効化することができる。ホストシステムは、ネイティブプロセスの場合と同じメカニズムを使用して、これを実現することができる。例えば、より高い性能が必要ないくつかの実施形態において、仮想マシンは、そのゲスト物理メモリ全体を、ホスト物理メモリによって直接支援されることができる。代替的に、一部は、ホスト仮想メモリによって支援され、他の部分は、ホスト物理メモリ120によって支援され得る。さらに別の例として、性能の低下が許容可能である場合、仮想マシンは、主にホスト仮想メモリによって支援されることができ、ホスト仮想メモリは、ホスト物理メモリによる完全な支援よりも少なく制限されることができる。例えば、例示的な仮想マシン271などの、仮想マシンは、4GBのサイズのゲスト物理メモリを提示することができ、これは、次に、上で記載のプロセスを利用して、4GBのホスト仮想メモリによって支援され得る。しかしながら、ホスト仮想メモリは、2GBのホスト物理メモリのみによって支援されるように制約され得る。これは、ディスクへのページング、またはその他の性能障害を行い得るが、管理者がサービスレベルに基づいて調整したり、または仮想マシンの展開にその他の制御を加えたりする方法になり得る同様に、一定の一貫したレベルの性能を提供するように、ホストメモリマネージャーによってサポートされているように、仮想マシンに対して一定量の物理メモリが保証され得る(仮想マシンをホスト仮想メモリによって支援されることを可能にする)。
仮想マシン環境内で提示されるゲスト物理メモリの量は、動的に変更されることができる。ゲスト物理メモリが追加される必要があるときに、別のホスト仮想メモリアドレス範囲は、前述のように割り当てられることができる。仮想化スタック230がメモリ上のアクセスインターセプトを処理する準備ができたら、ゲスト物理メモリアドレス範囲は、仮想マシン環境に追加されることができる。ゲスト物理メモリアドレスを削除するときに、削除されたゲスト物理メモリアドレスを支援するホスト仮想アドレス範囲の部分は、ホストメモリマネージャー241によって解放されることができる(および仮想化スタック230データ構造において、それに応じて更新される)。代替的に、または追加して、さまざまなホストメモリマネージャーAPIは、ホスト仮想アドレス空間を解放せずに、ホスト物理メモリページを解放するように、ホスト仮想アドレス範囲のそれらの部分で呼ばれることができる。代替的に、いくつかの実施形態において、ホストメモリマネージャー241が、実施においては、もはやアクセスされないので、これらのページがワーキングセットから最終的にトリミングされ、ページファイルなどのディスクにそれらを最終的に書き込むことができるので、何もしないことが可能である。
一態様によれば、SLAT220は、ホスト物理メモリアドレスマッピングへのゲスト物理メモリアドレスの一部またはすべてを事前入力することができる。これは、仮想マシンの初期化時に実行される障害処理作動の数を減らすことができる。しかしながら、仮想マシンが動作すると、SLAT220におけるエントリーは、さまざまな理由で無効化されることができ、上で記載の障害処理は、ゲスト物理メモリアドレスをホスト物理メモリアドレスに再度相関するように、使用されることができる。SLATエントリーは、仮想コンピューティング環境の起動前、または実行時に事前入力されることができる。追加的に、SLAT220全体またはその一部のみは、事前入力され得る。
別の最適化は、ホスト物理メモリに、ホスト仮想メモリの追加部分をプリフェッチして、以前にページアウトされたゲスト物理メモリを支援することであり、これにより、後続のメモリインターセプトが到着したときに、データを読み取るためにディスクに移動する必要がないため、仮想障害をより迅速に満たすことができる。
図4に目を向けると、方法400は、上で詳細に記載されたメカニズムの概要を提供するように示されている。方法400は、ゲスト物理メモリをホスト仮想メモリで支援するための動作を含むことができる。この方法は、ホストコンピューティングデバイス上で実行される仮想マシンから、ゲスト物理メモリアクセスを使用してゲスト物理メモリにアクセスすることを試みることを含む(動作402)。例えば、図2に示されている、仮想マシン環境271は、仮想マシン環境271内で実行されているプロセスにとって、実際の物理メモリとして見えるゲスト物理メモリにアクセスし得る。
方法400は、ゲスト物理メモリアクセスが、ゲスト物理メモリアドレスをホスト物理メモリアドレスと相関させるデータ構造において有効なエントリーを有しないゲスト物理メモリアドレスを参照することを判断することをさらに含むことができる(動作404)。例えば、図2に示されている、SLAT220において有効なエントリーがないとの、判断がなされ得る。
結果として、方法400は、ゲスト物理メモリアドレスに対応するホスト仮想メモリアドレスを識別すること、およびホスト仮想メモリアドレスに対応するホスト物理メモリアドレスを識別することを含むことができる(動作406)。例えば、図2に示されている、仮想化スタック230は、ゲスト物理メモリアドレスに対応するホスト仮想メモリアドレスを識別することができ、図2に示されている、メモリマネージャー241はまた、ホスト仮想メモリアドレスに対応するホスト物理メモリアドレスを識別することができる。
方法400は、ゲスト物理メモリアドレスとホスト物理メモリアドレスを相関させるデータ構造を、ゲスト物理メモリアドレスと識別されたホスト物理メモリアドレスの相関で更新することをさらに含むことができる(動作408)。例えば、図2に示されている、仮想化スタック230は、同じく図2に示されている、メモリマネージャー241からホスト物理メモリアドレスを取得することができ、ゲスト物理メモリアドレスと識別されたホスト物理メモリアドレスの相関でSLAT220(図2に示されている)を更新する。
方法400は、インターセプトを行うことによって実施され得る。インターセプトは、ホスト上の仮想化スタックに転送されることができる。これは、仮想化スタックがゲスト物理メモリアドレスに対応するホスト仮想メモリアドレスを識別し、ホスト仮想メモリアドレスに対応するホスト物理メモリアドレスを取得するように、メモリマネージャーに障害を発行させることができる。その後、仮想化スタックは、ゲスト物理メモリアドレスとホスト物理メモリアドレスを相関させるデータ構造を、ゲスト物理メモリアドレスと識別されたホスト物理メモリアドレスの相関で更新することができる。
方法400は、ゲスト物理メモリアクセスのためのタイプを判断することと、ゲスト物理メモリアドレスとホスト物理メモリアドレスを相関させるデータ構造を、ゲスト物理メモリアドレスと識別されたホスト物理メモリアドレスの決定されたタイプの相関で更新することとをさらに含み得る。例えば、ゲスト物理メモリアクセスが読み取りである場合、SLATは、そのように示すように更新されることができる。
方法400は、ホスト仮想メモリアドレスを支援するホスト物理メモリアドレスを変更し得るアクションを実行することをさらに含み得る。結果として、方法は、ゲスト物理メモリアドレスをホスト物理メモリアドレスと相関させるデータ構造において、ゲスト物理メモリアドレスをホスト物理メモリアドレスと相関させるエントリーを無効化することを含み得る。これは、ゲスト物理メモリアドレスをホスト物理メモリアドレスと相関させるデータ構造を、ゲスト物理メモリアドレスを支援するホスト仮想メモリの正しい相関で更新するように使用されることができる障害を生成するように、ゲスト物理メモリアドレスへの後続のアクセスを行わせることができる。例えば、アクションは、ページ結合作動を含み得る。ページ結合は、ホスト上の仮想マシンの密度を高めるように使用され得る。
方法400は、ゲスト仮想マシンを初期化することを含み得る。ゲスト仮想マシンの初期化の一部として、方法400は、ゲスト物理メモリアドレスをホスト物理メモリアドレスと相関させるデータ構造の少なくとも一部を、ゲスト物理メモリアドレスの一部またはすべてをゲスト仮想マシンのホスト物理メモリアドレスマッピングに事前入力することを含み得る。したがって、例えば、ホスト物理メモリは、仮想マシンのために事前に割り当てられ、適切な相関は、SLATに入力されることができる。これは、ゲスト仮想マシンを初期化するのに必要とされる例外が少ない結果になる。
ここで図5を参照すると、例示的なフロー500は、例示的なゲスト物理メモリアドレス(以下、「GPA」と略す)0x1000で、いくつかのデータの存続期間の一部にわたって発生し得る様々なアクションを示している。502で示されているように、GPA0x1000のためのSLATエントリーは、その特定のGPAのためのSLATエントリーがないことを意味する、無効である。504で示されているように、仮想マシンは、GPA0x1000での読み取りが、仮想マシン(以下「VM」と略す)の読み取りインターセプトを行うことを実行するように試みる。506で示されているように、ハイパーバイザーは、インターセプトをホスト上の仮想化スタックに転送する。508で、仮想化スタックは、GPA0x1000に対応するホスト仮想メモリアドレス(VA)のための仮想化ルックアップを実行する。ルックアップは、VA0x8501000を産する。510で、仮想障害は、VA0x8501000上で読み取りアクセスのために生成される。メモリマネージャーからの仮想障害処理は、GPA0x1000でのデータが物理的に配置されているシステムメモリにおいてアドレスを画定する0x88000のシステム物理アドレス(以下「SPA」と略す)を返す。したがって、514で示されているように、SLATは、GPA0x1000をSPA0x88000と相関させ、データアクセスを「読み取り専用」としてマークするように更新される。516で、仮想化スタックは、読み取りインターセプト処理を完了し、ハイパーバイザーは、ゲスト仮想マシンの実行を再開する。
518で示されているように、時間は、経過する。520で、仮想マシンは、GPA0x1000で書き込みアクセスを試みる。522で、ハイパーバイザーは、書き込みアクセスをホスト上の仮想化スタックに転送する。524で、仮想化スタックは、GPA0x1000のためのホストVAのための仮想化ルックアップを実行する。以前に述べたように、これは、VA0x8501000にある。526で、仮想障害は、VA0x8501000上で書き込みアクセスのために発生する。528で、仮想障害は、物理メモリにおいてSPA0388000を返す。530で、GPA0x1000のためのSLATエントリーは、データアクセスが「読み取り/書き込み」であることを示すように更新される。532で、仮想化スタックは、書き込みインターセプト処理を完了する。ハイパーバイザーは、ゲスト仮想マシンの実行を再開する。
534で示されているように、いくらかの時間は、経過する。536で、ホストメモリマネージャーは、機能的に同一であるホスト物理メモリにおいて任意のページを結合するように、ページ結合パスを実行する。538で、ホストメモリマネージャーは、VA0x8501000のための結合候補と、別のプロセスにおける別の仮想アドレスとを見つける。540で、ホストは、VA0x8501000のためのTLBフラッシュを実行する。542で、仮想化スタックは、TLBフラッシュをインターセプトする。544で、GPA0x1000のためのSLATエントリーは、無効である。546で、仮想マシンのインターセプトは、GPA0x1000のために実行される。548で、VA0x8501000上での読み取りアクセスのための仮想障害は、発生する。550で、仮想障害は、536でのページ結合パスからのN個のプロセス間の共有ページである、SPA0x52000を返す。552で、GPA0x1000のためのSLATエントリーは、アクセスが「読み取り専用」に設定されて、SPA0x52000と相関するように更新される。
554で示されているように、いくらかの時間は、経過する。556で、仮想マシンの書き込みインターセプトは、GPA0x1000のために発生する。558で、VA0x8501000上での書き込みアクセスのための仮想障害は、発生する。560で、ホストメモリマネージャーは、VA0x8501000上でコピーオンライトを実行する。562で、ホストは、VA0x850100のためにTLBフラッシュを実行する。564で示されているように、これは、無効化されるようにGPA031000のためのSLATエントリーを行わせる。566で、仮想障害は、コピーオンライト後のプライベートページである、SPA0x11000を返す。568で、GPA0x1000のためのSLATエントリーは、アクセスが「読み取り/書き込み」に設定されて、SPA0x1000に更新される。570で、仮想化スタックは、読み取りインターセプト処理を完了し、ハイパーバイザーは、仮想マシンの実行を再開する。
したがって、上記のように、仮想マシン物理アドレス空間は、ホストメモリマネージャーによって定期的な仮想メモリ管理の対象となる、ホスト仮想メモリ(典型的には、ホストプロセスのユーザアドレス空間において割り当てられる)によって支援されている。仮想マシンの物理メモリを支援する仮想メモリは、ホストメモリマネージャー118によってサポートされる任意のタイプにすることができる(プライベート割り当て、ファイルマッピング、ページファイルに支援されたセクションマッピング、大きいページ割り当てなど)。ホストメモリマネージャーは、既存の操作を実行して仮想メモリにポリシーを適用し、および/または仮想メモリが必要に応じて仮想マシンの物理アドレス空間を支援していることを認識した特殊なポリシーを適用したりできる。
図6に目を向けると、そこに示される例示的なシステム600は、上で記載のように、図4に概説され、図5に詳述されるメカニズムのブロック表現を含む。より具体的には、ゲスト仮想メモリ311、ゲスト物理メモリ312、ホスト仮想メモリ321、およびホスト物理メモリ322は、幅がメモリの範囲を表す矩形ブロックとして示されている。例証を簡単にするために、矩形ブロックの幅は、ほぼ同じあるが、実際の作動において、仮想メモリの量は、そのような仮想メモリを支援する物理メモリの量を超える可能性がある。
上で詳細に記載されたように、図2に示される例示的な仮想マシンコンピューティング環境271などの、仮想マシンコンピューティング環境内で実行されるプロセスが、そのような仮想マシンコンピューティング環境内で実行されるオペレーティングシステムによって提示される仮想メモリの一部にアクセスするときに、例示的なページテーブル283などの、そのオペレーティングシステムのページテーブルは、少なくとも仮想マシンコンピューティング環境内で実行されるプロセスによって認識されるように、アクセスされた仮想メモリアドレスを物理メモリアドレスに相関させることができるPTEを含むことができる。したがって、例えば、領域611によって表される仮想メモリがアクセスされる場合、ページテーブル283の一部であることができる、PTE 631は、ゲスト仮想メモリ311の領域611をゲスト物理メモリ312の領域621に相関させることができる。上でさらに詳細に記載されたように、ゲスト物理メモリ312は、ホスト仮想メモリ321の一部によって支援されることができる。したがって、上で記載された仮想化スタック230は、ゲスト物理メモリ312の領域621をホスト仮想メモリ321の領域641に相関させることができるエントリー651を含むことができるデータ構造を含むことができる。その後、前述のページテーブル250を含む、ホストコンピューティングデバイス上で実行されるプロセスは、ホスト仮想メモリ321の領域641を、ホスト物理メモリ322の領域661に相関させることができる。また上で詳細に記載されたように、SLAT220は、ゲスト物理メモリ312の領域621をホスト物理メモリ322の領域661に相関させることができるテーブルエントリー691で更新されることができる階層的に配置されたテーブルのセットを含むことができる。より具体的には、仮想化スタック230によって実装されるようなメカニズムは、領域621と領域661との間の相関を検出することができ、アクション680によって示されるように、SLAT220内のエントリー691などの、テーブルエントリーを更新または生成して、そのような相関を含めることができる。そのような方法で、ゲスト物理メモリ312は、SLAT220を含む、既存のメカニズムが従来の方法で機能することを引き続き可能にしながら、ホスト仮想メモリ321によって支援されることができる。例えば、その仮想マシンコンピューティング環境内で実行されるプロセスの、ゲスト仮想メモリ311の領域611へのその後のアクセスは、従来の方法で2つのページテーブルルックアップ、(1)要求された領域611をゲスト物理メモリ312における対応する領域621と相関させることができる、エントリー631などのエントリーを含むことができる、ページテーブル283を参照することによって仮想マシンコンピューティング環境内で実行されるページテーブルルックアップと、(2)ゲスト物理メモリ312における領域621をホスト物理メモリ322における領域661に相関させることができる、エントリー691などのエントリーを含むことができる、SLAT220を参照することによってホストコンピューティングデバイス上で実行されるページテーブルルックアップを伴うことができ、これにより、ホストの物理メモリに格納されているような関連データへのパスが完成する。
また上で詳述したように、仮想メモリコンピューティング環境における例示的なページテーブル283、ホストコンピューティングデバイス上の例示的なページテーブル250、および例示的なSLAT220などの様々なページテーブルは、それぞれのページテーブルを利用するプロセスによって個別に、および慎重に維持および操作されることができる、最小範囲のメモリアドレスとなることができる、その用語が本明細書で明示的に画定されている、メモリの「小さいページ」を、テーブルの階層的に最下層におけるエントリーが識別することができるように、テーブルの階層的に配置された層を含むことができる。図6に示される例示的なシステム600において、様々なページテーブルエントリー(PTE)631、671、および691は、領域611、621、641、および661がメモリの小さいページであることができるように、テーブルのその最下層にあることができる。上で詳述したように、1つの一般的なマイクロプロセッサアーキテクチャにおいて、その用語が本明細書で明示的に画定されるように、メモリのそのような小さいページは、4KBの連続したメモリアドレスを含むことができる。
一態様によれば、物理メモリがホストコンピューティングデバイスの仮想メモリによって支援された、仮想マシンコンピューティング環境からのメモリアクセスの速度および効率を高めるために、SLAT220は、テーブルの階層的に上位層で相関を維持することができる。言い換えれば、SLAT220は、それらの用語が本明細書で明示的に画定されているように、メモリの「大きいページ」またはメモリの「巨大なページ」を相関させることができる。1つの一般的なマイクロプロセッサアーキテクチャにおいて、メモリの大きいページは、その用語が本明細書で明示的に画定されているように、2MBの連続したメモリアドレスを含むことができ、メモリの巨大なページは、その用語が本明細書で明示的に画定されているように、1GBの連続したメモリアドレスを含むことができる。再び、以前に示されたように、「小さいページ」、「大きいページ」および「巨大なページ」という用語は、階層的に配置された一連のページテーブル内の階層層を参照して明示的に画定され、そのようなメモリの量が、異なるマイクロプロセッサアーキテクチャ、オペレーティングシステムアーキテクチャなどの間で変化する可能性があるため、特定のメモリ量に基づいて画定されていない。
図7に目を向けると、SLAT 220において大きいページエントリーを作成し、それによって、物理メモリがホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンコンピューティング環境からのメモリアクセスの速度および効率を向上させるための、1つのメカニズムが示されている。図6のように、図7に示されるシステム700において、ゲスト仮想メモリ311、ゲスト物理メモリ312、ホスト仮想メモリ321、およびホスト物理メモリ322は、幅がメモリの範囲を表す矩形ブロックとして示されている。追加的に、領域611へのアクセスは、上記に詳述され、図6に示されている方法において進行することができる。しかしながら、SLAT220内で階層的に最下位のテーブルレベルエントリーを生成するのではなく、本明細書で記載されるメカニズムは、例示的なテーブルエントリー711などの、上位のテーブルレベルエントリーを生成することができる。上で詳述したように、そのような上位のテーブルレベルエントリーは、メモリの大きいページ、または巨大なページを相関することができる。したがって、仮想化スタック230によってテーブルエントリー711がSLAT220に入力されるときに、テーブルエントリー711は、ゲスト物理メモリ312の大きいページサイズの領域761を、ホスト物理メモリ322の大きいページサイズの領域720に相関させることができる。しかしながら、以下で詳述されるように、このような大きいページサイズの領域は、ホストコンピューティングデバイス上で実行され、ページテーブル250を利用するメモリマネージャーの観点からは大きいページではなく、結果として、このような大きいページサイズの領域は、例えば、単一の大きいページとしてページアウトされたり、またはホストコンピューティングデバイス上で実行されているメモリマネージャーによって単一の分割不可能な大きいページとして扱われたりすることはない。
反対に、効率の利点、密度の利点、および例示的なゲスト物理メモリ312などのゲスト物理メモリを例示的なホスト仮想メモリ321などのホスト仮想メモリによって支援されることを可能にする、上で記載されたメカニズムによって提供される他の利点を維持するためのように、ホスト上で実行されるページテーブル250は、SLAT220における上位のテーブルレベルエントリー711に類似した上位のテーブルレベルエントリーではなく、図7に示されている、例示的な下位のテーブルレベルエントリー671、731、および732などの、単に下位のテーブルレベルエントリーを含むことができる。より具体的には、例示的な下位のテーブルレベルエントリー671、731、732など、ページテーブル250における特定の一連の下位のテーブルレベルエントリーは、ページテーブル250における下位のテーブルレベルエントリーの同等のシーケンス全体によって識別されるホスト物理メモリ322の集約連続範囲が、SLAT220における単一の上位のテーブルレベルエントリー711と同じメモリの範囲を包含するように、ホスト物理メモリ322の連続する範囲を識別することができる。したがって、一例として、小さいページが4KBのサイズであり、大きいページが2MBのサイズであるマイクロプロセッサアーキテクチャにおいて、ページテーブル250のおける512個の連続する小さいページエントリーは、全体として、ホスト物理メモリ322の連続する2MBを識別することができる。
仮想障害は、大きいページサイズのメモリ領域よりも小さいメモリ領域のために生成され得るため、例示的な下位のテーブルレベルエントリー671、731、および732などの、下位のテーブルレベルエントリーの特定のエントリーのみは、利用され得、他方、残りの下位のテーブルレベルエントリーは、空きメモリとしてマークされたままになり得る。例えば、ゲスト物理メモリ312を利用する仮想マシンコンピューティング環境内で実行されるアプリケーションは、最初は1つの小さいページサイズのメモリのみを必要とし得る。そのような場合において、単一の上位のテーブルレベルエントリー711は、利用されているものとして、大きいページサイズの領域720などの、大きいページサイズのメモリ領域を識別し得る。しかしながら、ホストコンピューティングデバイスのメモリマネージャーの観点から、ページテーブル250を参照して、例示的な下位のテーブルレベルエントリー671などの、下位のテーブルレベルエントリーのうちの1つだけは、利用されているとして示され得、残りは、利用可能であると示され得る。他のエントリーが利用可能であるとして扱われるのを防ぐために、仮想化スタック230は、例示的な下位のテーブルレベルエントリー731、732などの、残りの下位のテーブルレベルエントリーも使用されているとして、マークすることができる。仮想マシンコンピューティング環境内で実行するアプリケーションが追加の小さいページサイズのメモリを利用する必要があるときに、仮想化スタック230は、以前に使用されたと示されたが、実際には、仮想マシンコンピューティング環境内で実行されるアプリケーションよってまだ利用されていないメモリ位置を利用して、アプリケーションのさらなるメモリニーズを満たすことができる。
一態様によれば、前述のマーキングなど、ページテーブル250における下位のテーブルレベルエントリーの同等のシーケンスの追跡は、図7におけるアクション730によって示されるように、仮想化スタック230によって調整されることができる。そのような場合において、ホスト上で実行されているメモリマネージャーがそれらの下位のテーブルレベルエントリーの1つ以上に変更を加えると、仮想化スタック230は、上位のテーブルレベルエントリー711など、SLAT220において対応するエントリーに適切な変更をトリガーすることができる。
SLAT220における上位のテーブルレベルエントリー711と同等である、ページテーブル250における下位のテーブルレベルエントリーのシーケンスは、例示的な範囲641、741、および742などの、ホスト仮想メモリ範囲のシーケンスを、それぞれ、例示的な範囲661、721および722などの、ホスト物理メモリ範囲に相関させることができる。その結果、例示的な大きいページサイズの領域751などの、ホスト仮想メモリ321の大きいページサイズの領域は、ページテーブル250における下位のテーブルレベルエントリーのシーケンス、すなわち、例示的な下位のテーブルレベルエントリー671、731、732などを通じて、例示的な大きいページサイズの領域720などの、ホスト物理メモリ322の大きいページサイズの領域に相関される。仮想化スタック230は、ホスト仮想メモリ位置をゲスト物理メモリ位置に調整することができる、階層的に配置されたテーブルなどの、データ構造を維持することができる。したがって、仮想化スタックは、ホスト仮想メモリ321の大きいページサイズの領域751をゲスト物理メモリ312の対応する大きいページサイズの領域761に相関させることができる、例示的なデータエントリー771などの、1つ以上のデータエントリーを維持することができる。データエントリー771は、単一のエントリーとして示されているが、仮想化スタック230は、領域761のサブ部分を、小さなページとしてサイズ設定されたサブ部分を含む領域751に個別に相関させることによってなど、単一のエントリーとして、またはそれらの組み合わせとして、前述の相関を維持することができる。その後、サイクルを完了するために、SLAT220における前述の上位のテーブルレベルエントリー711は、ゲスト物理メモリ312における大きいページサイズの領域761を、ホスト物理メモリ322における大きいページサイズの領域720に相関させることができる。再び、単一の上位のテーブルレベルエントリー711のみを有するSLAT220の観点から、大きいページサイズの領域720および761は、(単一の上位テーブルレベルエントリー711のように)SLATによって単一に扱われる大きいページであり、他方、ホスト、ページテーブル250、および実際には、仮想化スタック230上で実行されるメモリマネージャーの観点から、そのような領域は、単一ではなく、むしろ、例えば、ページテーブル250における下位のテーブルレベルエントリーによって識別される個別に管理可能な小さいページ領域が備えられる。
これらの用語が本明細書で画定されているように、1つ以上の大きい、または巨大なメモリページと同等である、ゲスト物理メモリ312における連続する小さいメモリページの利用可能性は、ゲスト物理メモリ312が、物理メモリであるとして、対応する仮想マシンコンピューティング環境内で実行されるプロセスによって認識されるため、単純であることができる。したがって、以下の記載は、ホスト物理メモリ322の連続性に焦点を合わせている。追加的に、ゲスト物理メモリ312は、物理メモリであると認識されるので、完全なメモリアクセス許可(「読み取り/書き込み/実行」許可など)は、ゲスト物理メモリ312の全範囲にわたって残り、したがって、ページテーブル250における下位のテーブルレベルエントリー間でメモリアクセス許可の不連続性があることは、ありそうにない。
ホストコンピューティングデバイスのページテーブル250に焦点を当てると、ホスト物理メモリ322の1つ以上の大きいページサイズの領域が未使用のままである場合、一態様によれば、上記で詳述したように、仮想障害が、未使用のままである大きいページサイズの領域に叙述されたメモリの範囲内の小さいページでトリガーされたときに、その大きいページサイズの領域内の残りの小さいページ、例示的な上位のテーブルレベルエントリー711などの、単一の上位のテーブルレベルエントリーは、SLAT220において生成されることができる。
しかしながら、上位のテーブルレベルエントリー711に対応する、大きいページ720は、ページテーブル250の観点から、例示的な小さいページ661、721、722などのような、一連の小さいページであるので、例示的な下位のテーブルレベルエントリー671、731、732などのような、下位のテーブルレベルエントリーのシーケンスのために、そのようなページテーブル250を利用するメモリ管理メカニズムは、そのような小さいページをハードディスクドライブなどの、不揮発性記憶媒体にページングすることを含むことができる、小さいページの各々を個別に扱うことができる。そのような場合において、一態様によれば、SLAT220における、上位のテーブルレベルエントリー711は、同等の一連の下位のテーブルレベルエントリーで置き換えられることができる。より具体的には、SLAT220内で生成された下位のテーブルレベルエントリーは、連続することができ、全体として、メモリマネージャーによってページアウトされたページに対応する、下位レベルのテーブルエントリーの特定のものを除いて、上位のテーブルレベルエントリー711と同じメモリアドレスの範囲を参照することができ、欠落しているか、作成されていない可能性がある。
他の態様によれば、上で詳述したように、仮想障害がトリガーされたときに、ホスト物理メモリ322の大きいページ、または巨大なページのサイズの領域が利用可能でない場合、利用可能な大きいページ、または巨大なページのサイズのホスト物理メモリの領域は、適切な量の連続した小さいページをアセンブルすることによって、インターセプトで構築されることができる。例えば、大きいページサイズの領域は、「フリーリスト」から利用可能な連続した小さいページ、または利用可能なホスト物理メモリページのその他の同様の列挙から構築されることができる。別の例として、十分な量の小さいページを1つの大きいページサイズの領域にアセンブルするために必要な連続性を確立するために、現在他のプロセスによって利用されている小さいページが必要な場合、それらの小さなページは、そのような他のプロセスから取得されることができ、そこに含まれるデータは、他の小さなページに転送するか、ディスクにページアウトされることができる。そのような大きいページサイズの領域が構築されると、仮想障害の処理は、SLAT220における例示的な上位のテーブルレベルエントリー711などの、上位のテーブルレベルエントリーの生成を含む、上記で詳述した方法において進行することができる。
いくつかの場合において、ホストコンピューティングデバイス上で実行されるメモリマネージャーは、ページテーブル250を利用する際に、利用可能な大きいページまたは巨大なページサイズの領域が十分な量の連続する小さいページから構築される背景または日和見的メカニズムを実装し得る。そのようなメカニズムが利用可能な大きいページサイズの領域をもたらす範囲で、例えば、仮想障害がトリガーされたときに、処理は、上で示された方法において進行することができる。しかしながら、そのようなメカニズムが利用可能な大きいページサイズの領域のアセンブルをまだ完了していない限り、そのような大きいページサイズの領域の構築は、より高い優先度でインターセプト時に完了されることができる。例えば、そのような大きいページサイズの領域を構築するプロセスは、より高い実行優先度を与えるか、バックグラウンドからフォアグラウンドに移動するか、またはより積極的に実行されることができる。
代替的に、仮想障害がトリガーされたときに、ホスト物理メモリの大きいページサイズの領域が使用可能でない場合、処理は、複数の小さいページを利用して上で記載されたように進行することができる。その後、大きいページサイズの領域が利用可能になるときに、(その時点で大きいページサイズの領域が利用可能でないため)以前に利用された複数の小さいページからのデータは、大きいページにコピーされることができ、以前に利用された小さいページは、その後解放される。そのような場合において、SLAT220における下位のテーブルレベルエントリーは、例示的な上位のテーブルレベルエントリー711などの、1つの上位のテーブルレベルエントリーで置き換えられることができる。
追加的に、インターセプトであろうと、または日和見的であろうと、大きいページサイズの領域が構築されるパラメータは、SLATルックアップ中にテーブルの階層層がスキップされるため、より高速なメモリアクセスと、小さいページから大きいページサイズの領域を構築する際の初期遅延とのメモリアクセスのバランスに応じて変更されることができる。そのようなパラメータの1つは、大きいページサイズの領域全体にわたって連続性を完了するために必要な他の小さいページのトレード、またはページアウトをトリガーするのに十分な連続した小さいページの量であることができる。例えば、大きいページを構築するために512個の連続した小さいページが必要であり、200個の小さいページと311個の小さいページの連続範囲が存在し、それらの間の1つの小さいページが現在別のプロセスによって利用されている場合、そのような小さいページが、ページアウトされるか、または、別の利用可能な小さいページとトレードされることができるため、512個の連続する小さいページすべては、1つの大きいページサイズの領域に構築されるように利用可能である。そのような例において、利用可能な小さいページの断片化は、非常に低くなることができる。対照的に、現在他のプロセスによって利用されている他の小さいページによって継続的に中断される20~30の小さいページの連続範囲は、非常に高い断片化を有する小さいページの範囲を記述することができる。このように非常に断片化された小さいページのセットは、大きいページサイズの領域と同等である連続範囲の小さいページを生成するように、トレード、ページアウト、またはその他の方法で再シャッフルされることができる一方、そのような作業は、かなり長い時間がかかり得る。したがって、一態様によれば、断片化閾値は、設定されることができ、これは、より高いまたはより低い小さい断片化を有する小さいページの範囲から大きいページサイズの領域を構築するための努力が行われるかどうかを叙述することができる。
一態様によれば、大きいページサイズの領域の構築は、仮想マシンコンピューティング環境のゲスト物理メモリを支援するために、メモリが利用されているプロセスによって小さいページの既存の利用の利点をとることができる。簡単な例として、200個の小さいページと311個の小さいページの連続範囲が、メモリがゲスト物理メモリ312を支援するプロセスによってすでに利用されており、それら2つの連続範囲の間の1つの小さいページだけが、大きいページと同等である小さいページの場合、ページアウトまたはトレードされるなどによって、小さいページが解放されると、コピーされる必要がある唯一のデータは、残りのデータがそのままにしておくことができる、その1つの小さなページに対応するデータであることができ、SLAT220の対応する下位のテーブルレベルエントリーを無効化され、同じメモリの範囲を含む単一の上位のテーブルレベルエントリーに置き換えられることができる。
小さいページの連続範囲からメモリの大きいページサイズの領域を再構築する必要を回避するために、全体として、SLAT220の単一の上位のテーブルレベルエントリー711と同等のメモリ範囲を包含する、ページテーブル250における連続する下位のテーブルレベルエントリーの既存のセットは、それらがページアウトされるのを回避できるようにロックされることができる。したがって、例えば、仮想化スタック230は、ホスト物理メモリ661、721、722などの対応する範囲が、ディスクにページングされることなく、それらの中で格納されたデータを保持できるように、下位のテーブルレベルエントリー671、731、732などがロックされるように要求することができる。一態様によれば、仮想化スタック230などによる、そのようなエントリーがロックされるのを要求する決定は、様々な要因に依存することができる。例えば、そのような要因の1つは、それらのメモリ範囲内に格納されたデータの利用頻度であり、使用頻度の高いデータではエントリーがロックされ、利用頻度の低いデータではエントリーのロックが解除される。システム全体のメモリ断片化の量、ホストコンピューティングデバイス上の仮想マシンコンピューティング環境の密度を高める必要性、および他の同様のもの等の、他の要因は、SLAT内の上位のテーブルレベルエントリーをサポートする、ページテーブルエントリーがロックされるように要求するかどうかを決定する際に同様に参照されることができる。
図8に目を向けると、そこに示される流れ図800は、例示的な一連のステップとして上で記載のメカニズムを示している。最初に、ステップ810で、上で詳述したように、仮想障害は、発生する可能性がある。続いて、ステップ815で、判断は、ステップ810の仮想障害が、その大きいページサイズの領域内の他のメモリは以前に仮想障害によって参照されていなかった、メモリの大きいページサイズの領域内のメモリを参照するかどうかに関して行われることができる。特に、ホスト物理メモリは、大きいページサイズのセグメントに叙述されることができる。1つの大きいページサイズの領域内のメモリを参照する第1の仮想障害は、ステップ815で肯定的な判断をもたらすことができ、それにより、処理は、ステップ835に進行することができる。
ステップ835で、単一の上位のテーブルレベルエントリーは、SLATにおいて生成されることができ、他方、対応して、ステップ840で、複数の下位のテーブルレベルエントリーは、ホストページテーブルにおいて利用されることができ、そこで、複数の下位のテーブルレベルエントリーの関連する量は、SLATにおいて生成された単一の上位のテーブルレベルエントリーと同じメモリの範囲、すなわち、ステップ810でアクセスが仮想障害を引き起こしたメモリ位置を包含するメモリの大きいページサイズの叙述領域に対応するメモリの範囲を含む。以前に示したように、ホストページテーブルは、単一の上位のテーブルレベルエントリーではなく、複数の下位のテーブルレベルエントリーを備えるため、ホストコンピューティングデバイスのメモリ管理は、そのコンテンツをディスク、1つ以上のメモリ領域、またはホストページテーブル内のそのような下位のテーブルレベルエントリーによって識別されるページにコピーすることなどによって、ページアウトすることを選択し得る。ステップ845で判断されたように、そのようなページングアウトが発生した場合、処理は、ステップ850に進行することができ、SLATにおける上位のテーブルレベルエントリーは、ページアウトされなかったホストページテーブルにおける下位のテーブルレベルエントリーによって参照されるメモリ領域に対応する複数の下位のテーブルレベルエントリーで置き換えられることができる(および、実際には、ページアウトされたホストページテーブルにおける下位のテーブルレベルエントリーによって参照されるメモリ領域に対応するそれらのテーブルレベルエントリーをSLATから除外する)。
一態様によれば、メモリの大きいページサイズの領域からの小さいページが、ステップ845でページアウトされ、SLATにおける上位のテーブルレベルエントリーが無効化され、対応する一連の下位のテーブルレベルエントリーに置き換えられた場合(ページアウトされた小さいページを参照する下位のテーブルレベルエントリーを除いて)、その後、オプションで、処理は、ステップ855に進行し、空きになるメモリの利用可能な大きいページサイズの領域を引き続きチェックすることができる。上で詳述したように、例えば、ホストコンピューティングデバイス上で実行されるメモリ管理プロセスは、利用可能なメモリの大きいページサイズの領域を日和見的に再構築することができる。ステップ855で判断されるように、そのような大きいページサイズのメモリ領域が利用可能になった場合、処理は、ステップ860に進行することができ、そこで、SLATにおける下位のテーブルレベルエントリーをSLATにおける単一の上位のテーブルレベルエントリーに置き換えることができ、必要に応じて、データは、以前の下位のテーブルレベルエントリーによって参照されていたメモリ領域から、単一の上位のテーブルレベルエントリーによって参照されているメモリ領域にコピーされることができる(メモリの2つの領域が異なる場合)。
ステップ815に戻ると、ステップ810の仮想障害が、以前に叙述された大きいページサイズの領域内のメモリを参照する第1のものではなかった場合、処理は、ステップ820に進行することができる。ステップ820で、上記で詳述した方法のように、判断は、インターセプト時に大きいページを作成すべきかどうかに関して行われることができる。より具体的には、ステップ835および840が以前にメモリの大きいページサイズの領域に対して実行され、SLATが単一の上位のテーブルレベルエントリーを含む場合、ページテーブルは、SLATにおける単一の上位のテーブルレベルエントリーによって参照されるメモリ領域のサブ部分を参照する同等の下位のテーブルレベルエントリーで構成されるが、その後、上記で詳述したように、SLATにおける単一の上位のテーブルレベルエントリーによって参照されるメモリ領域内の任意のメモリ位置に向けられた後続のメモリアクセスは、仮想障害をトリガーしない。したがって、仮想障害がステップ810でトリガーされ、ステップ815で、仮想障害が、以前に叙述された大きいページサイズのメモリ領域内のメモリ位置に最初に向けられたのではないと判断された場合、ステップ810でトリガーされた仮想障害は、ステップ835および840がその大きいページサイズの領域内のメモリ位置に対して以前に実行されたためにトリガーされた可能性が高いが、その後、ステップ845で判断されたように、メモリのその大きいページサイズの領域を備える1つ以上の小さいページがページアウトされたため、したがって、ステップ850が以前に実行された。したがって、ステップ820で、判断は、メモリの大きいページサイズの領域がインターセプト時に構築されるべきかどうかに関して行われることができる。そのような大きいページサイズの領域が構築される必要がある場合、その後、処理は、ステップ830に進行することができ、上で詳述したように、適切な量の連続する小さいページは、アセンブルされることができる。その後、処理は、前と同じようにステップ835に進行することができる。逆に、ステップ830で、利用可能なメモリの大きいページサイズの領域のそのようなオンデマンド構築が要求されない場合、処理は、図4および図5を参照して上記で詳細に記載されたメカニズムに従って、ホストページテーブルおよびSLATにおける下位のテーブルレベルエントリーを利用するように進行することができる。
上記の記載は、第1の例として、コンピュータメモリのアクセス速度を増加させる方法であって、仮想マシンコンピューティング環境において実行されている第1のプロセスから、第1のメモリの範囲に向けられた、第1のメモリアクセスを検出することと、第1のメモリアクセスを完了する必須条件として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを生成することであって、階層的に配置された第2層アドレス変換テーブルが、ホスト物理メモリアドレスをゲスト物理メモリアドレスに相関させ、第1のエントリーが、階層的に最下位のテーブルレベルよりも少なくとも1つ上の階層レベルにあり、それにより、第1のエントリーによって識別される第2のメモリの範囲が、階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、第2のメモリの範囲が第1のメモリの範囲よりも大きい、生成することと、階層的に配置された第2層アドレス変換テーブルにおいて第1のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第1の複数のエントリーを使用済みとしてマークすることであって、階層的に配置されたページテーブルが、ホスト物理メモリアドレスをホスト仮想メモリアドレスに相関させ、第1の複数のエントリーが、全体として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーと同じ第2のメモリの範囲を参照し、第1の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、マークすることとを含み、ゲスト物理メモリアドレスが、仮想マシンコンピューティング環境内で実行されるプロセスによって物理メモリへのアドレスとして認識され、ホスト物理メモリアドレスが、仮想マシンコンピューティング環境をホストするホストコンピューティングデバイスの実際の物理メモリへのアドレスであり、ホスト仮想メモリアドレスが、ホストコンピューティングデバイス上で実行されるメモリマネージャーによって提供される仮想メモリへのアドレスであり、メモリマネージャーが、仮想メモリを提供するように階層的に配置されたページテーブルを利用し、ゲスト物理メモリアドレスによって識別されるゲスト物理メモリが、ホスト仮想メモリアドレスの一部によって識別される、ホスト仮想メモリの一部によって支援される、方法を含む。
第2の例は、仮想マシンコンピューティング環境において実行されている第1のプロセスから第2のメモリアクセスを検出することであって、第2のメモリアクセスが、第1のメモリの範囲とは異なる第3のメモリの範囲に向けられる、第2のメモリアクセスを検出することと、階層的に配置されたページテーブルにおける第1の複数のエントリーの第2のサブセットを参照することによって第2のメモリアクセスを満たすことと、をさらに含み、第1のメモリアクセスが、階層的に配置されたページテーブルにおける第1の複数のエントリーの第1のサブセットを参照することによって満たされ、第1のサブセットが、階層的に配置されたページテーブルにおいて、第2のサブセットとは異なるエントリーを含む、第1の例の方法である。
第3の例は、第1のメモリアクセスが完了した後、階層的に配置されたページテーブルにおける第1の複数のエントリーの第1のサブセットが、対応するホスト物理メモリアドレスに元々格納され、その後不揮発性記憶媒体にページアウトされたデータを有することを検出することと、検出に応答して、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを無効化することと、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーの代わりに、階層的に配置された第2層アドレス変換テーブルに第2の複数のエントリーを生成することであって、第2の複数のエントリーが、全体として、第1のエントリーと同じ第2のメモリの範囲の少なくとも一部を参照し、第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、第2の複数のエントリーを生成することと、をさらに含む、第1の例の方法である。
第4の例は、第2の複数のエントリーが、第1のプロセスによって以前にアクセスされ、ページアウトされなかった第2のメモリの範囲の部分を参照する、第3の例の方法である。
第5の例は、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域を、ホスト物理メモリの単一の大きいページサイズの領域にアセンブルすること、をさらに含む、第1の例の方法である。
第6の例は、アセンブルすることが、第1のメモリアクセスを検出した後、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを生成する前に発生する、第5の例の方法である。
第7の例は、階層的に配置された第2層アドレス変換テーブルに第2のエントリーを生成することであって、第2のエントリーが、階層的に最下位のテーブルレベルより少なくとも1つ上の階層レベルにあり、それにより、第2のエントリーによって識別される第3のメモリの範囲が、階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、第3のメモリの範囲が、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域がアセンブルされた、ホスト物理メモリの単一の大きいページサイズの領域を参照する、生成することと、階層的に配置された第2層アドレス変換テーブルに第2のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第2の複数のエントリーを使用済みとしてマークすることであって、第2の複数のエントリーが、ホスト物理メモリの単一の大きいページサイズの領域にアセンブルされた、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域を参照する、マークすることと、をさらに含む、第5の例の方法である。
第8の例は、階層的に配置された第2層アドレス変換テーブルに第2のエントリーを生成することであって、第2のエントリーが、階層的に最下位のテーブルレベルより少なくとも1つ上の階層レベルにあり、それにより、第2のエントリーによって識別される第3のメモリの範囲が、階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、第3のメモリの範囲が、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域がアセンブルされた、ホスト物理メモリの単一の大きいページサイズの領域を参照する、生成することと、階層的に配置された第2層アドレス変換テーブルに第2のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第2の複数のエントリーを使用済みとしてマークすることであって、第2の複数のエントリーが、ホスト物理メモリの単一の大きいページサイズの領域にアセンブルされた、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域を参照する、マークすることと、をさらに含む、第7の例の方法である。
第9の例は、ホスト物理メモリの1つ以上の小さいページサイズの領域の第2のセットから、第1の複数の連続する小さいページサイズの領域の少なくとも一部にデータをコピーすることと、階層的に配置された第2層アドレス変換テーブルにおける第2の複数のエントリーを無効化することであって、第2の複数のエントリーが、(1)ホスト物理の1つ以上の小さいページサイズの領域の第2のセットを参照する、第1のエントリーのサブセットと、(2)ホスト物理メモリの第1の複数の連続する小さいページサイズの領域の少なくともいくつかを参照する、第2のエントリーのサブセットの両方を含み、第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、無効化することと、をさらに含み、階層的に配置された第2層アドレス変換テーブルにおける生成された第2のエントリーが、無効化された第2の複数のエントリーの代わりに利用される、第7の例の方法である。
第10の例は、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域をアセンブルすることは、第1の複数の連続する小さいページサイズの領域のうちのいくつかから、第1の複数の連続する小さいページサイズの領域とは異なる、ホスト物理メモリの他の小さいページサイズの領域にデータをコピーすることを含む、第5の例の方法である。
第11の例は、第1の複数の連続する小さいページサイズの領域のいくつかから他の小さいページサイズの領域へのデータのコピーすることは、第1の複数の連続する小さいページサイズの領域の断片化が、断片化閾値を下回る合にのみ実行される、第10の例の方法である。
第12の例は、第2のメモリの範囲のページングを防止すること、をさらに含む、第1の例の方法である。
第13の例は、第2のメモリの範囲のページングの防止が、第2のメモリの範囲の1つ以上の部分がアクセス頻度閾値よりも頻繁にアクセスされる場合にのみ実行される、第12の例の方法である。
第14の例は、第2のメモリの範囲の1つ以上の部分がアクセス頻度閾値よりも低い頻度でアクセスされる場合に、第2のメモリの範囲のページングの防止を取り除くことをさらに含む、第12の例の方法である。
第15の例は、第2のメモリの範囲が、2MBのサイズである。第1の例の方法である。
第16の例は、1つ以上の中央処理装置と、ランダムアクセスメモリ(RAM)と、1つ以上のコンピュータ可読媒体であって、コンピューティングデバイスによって実行されたときに、ホスト仮想メモリアドレスを、RAM上の場所を識別するホスト物理メモリアドレスに変換するための階層的に配置されたページテーブルを参照するメモリマネージャーを、コンピューティングデバイスに提供させるコンピュータ実行可能命令の第1のセットと、コンピューティングデバイスによって実行されたときに、コンピューティングデバイスに仮想マシンコンピューティング環境を提供させるコンピュータ実行可能命令の第2のセットであって、仮想マシンコンピューティング環境内で実行されるプロセスが、ゲスト物理メモリアドレスを物理メモリへのアドレスとして認識し、ゲスト物理メモリアドレスによって識別されるさらなるゲスト物理メモリが、ホスト仮想メモリアドレスの一部によって識別される、ホスト仮想メモリの一部によって支援される、コンピュータ実行可能命令の第2のセットと、コンピューティングデバイスによって実行されたときに、コンピューティングデバイスに、仮想マシンコンピューティング環境で実行されている第1のプロセスから、第1のメモリの範囲に向けられた第1のメモリアクセスを検出することと、第1のメモリアクセスを完了する必須条件として、階層的に配置された第2層アドレス変換テーブルに第1のエントリーを生成することであって、階層的に配置された第2層アドレス変換テーブルが、ホスト物理メモリアドレスをゲスト物理メモリアドレスに相関させ、第1のエントリーが、階層的に最下位のテーブルレベルよりも少なくとも1つ上の階層レベルにあり、それにより、第1のエントリーによって識別される第2のメモリの範囲が、階層的に最下位のテーブルレベルにおけるテーブルを参照せずに識別されることができ、第2のメモリの範囲が第1のメモリの範囲よりも大きい、生成することと、階層的に配置された第2層アドレス変換テーブルに第1のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第1の複数のエントリーを使用済みとしてマークすることであって、第1の複数のエントリーが、全体として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーと同じ第2のメモリの範囲を参照し、第1の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、マークすることと、を行わせるコンピュータ実行可能命令の第3のセットと、を備える、1つ以上のコンピュータ可読媒体と、を備える、コンピューティングデバイスである。
第17の例は、コンピュータ実行可能命令の第3のセットが、コンピューティングデバイスによって実行されるときに、コンピューティングデバイスに、第1のメモリアクセスが完了した後、階層的に配置されたページテーブルにおける第1の複数のエントリーの第1のサブセットが、対応するホスト物理メモリアドレスに元々格納され、その後不揮発性記憶媒体にページアウトされたデータを有することを検出させ、検出に応答して、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを無効化させ、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーの代わりに、階層的に配置された第2層アドレス変換テーブルに第2の複数のエントリーを生成させることであって、第2の複数のエントリーが、全体として、第1のエントリーと同じ第2のメモリの範囲の少なくとも一部を参照し、第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、第2の複数のエントリーを生成させる、さらなるコンピュータ実行可能命令を含む、第16の例のコンピューティングデバイスである。
第18の例は、コンピュータ実行可能命令の第3のセットが、コンピューティングデバイスによって実行されるときに、コンピューティングデバイスに、ホスト物理メモリの第1の複数の連続する小さいページサイズの領域を、ホスト物理メモリの単一の大きいページサイズの領域にアセンブルさせることで、第1のメモリアクセスを検出した後、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを生成する前に発生する、アセンブルさせる、さらなるコンピュータ実行可能命令を含む、第16の例のコンピューティングデバイスである。
第19の例は、コンピュータ実行可能命令の第3のセットが、コンピューティングデバイスによって実行されるときに、コンピューティングデバイスに、第2のメモリの範囲のページングを防止させる、さらなるコンピュータ実行可能命令を含む、第16の例のコンピューティングデバイスである。
第20の例は、実行されるときに、コンピューティングデバイスに、仮想マシンコンピューティング環境において実行されている第1のプロセスから、第1のメモリの範囲に向けられた、第1のメモリアクセスを検出させ、第1のメモリアクセスを完了する必須条件として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを生成させることであって、階層的に配置された第2層アドレス変換テーブルが、ホスト物理メモリアドレスをゲスト物理メモリアドレスに相関させ、第1のエントリーが、階層的に最下位のテーブルレベルよりも少なくとも1つ上の階層レベルにあり、それにより、第1のエントリーによって識別される第2のメモリの範囲が、階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、第2のメモリの範囲が第1のメモリの範囲よりも大きい、生成させ、階層的に配置された第2層アドレス変換テーブルにおいて第1のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第1の複数のエントリーを使用済みとしてマークさせることであって、階層的に配置されたページテーブルが、ホスト物理メモリアドレスをホスト仮想メモリアドレスに相関させ、第1の複数のエントリーが、全体として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーと同じ第2のメモリの範囲を参照し、第1の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、マークさせ、ゲスト物理メモリアドレスが、仮想マシンコンピューティング環境内で実行されるプロセスによって物理メモリへのアドレスとして認識され、ホスト物理メモリアドレスが、仮想マシンコンピューティング環境をホストするホストコンピューティングデバイスの実際の物理メモリへのアドレスであり、ホスト仮想メモリアドレスが、ホストコンピューティングデバイス上で実行されるメモリマネージャーによって提供される仮想メモリへのアドレスであり、メモリマネージャーが、仮想メモリを提供するように階層的に配置されたページテーブルを利用し、ゲスト物理メモリアドレスによって識別されるゲスト物理メモリが、ホスト仮想メモリアドレスの一部によって識別される、ホスト仮想メモリの一部によって支援される、コンピュータ実行可能命令を含む1つ以上のコンピュータ可読記憶媒体である。
上記の記載からわかるように、SLATを通じてメモリアクセスを高速化できるメカニズムについて記載した。本明細書に記載の主題の多くの可能な変形を考慮して、本発明として、以下の特許請求の範囲およびそれに相当するものの範囲内に入る可能性のあるすべてのそのような実施形態を請求する。

Claims (15)

  1. コンピュータメモリのアクセス速度を増加させる方法であって、
    仮想マシンコンピューティング環境において実行されている第1のプロセスから、第1のメモリの範囲に向けられた、第1のメモリアクセスを検出することと、
    前記第1のメモリアクセスを完了する必須条件として、階層的に配置された第2層アドレス変換テーブルにおける第1のエントリーを生成することであって、前記階層的に配置された第2層アドレス変換テーブルが、ホスト物理メモリアドレスをゲスト物理メモリアドレスに相関させ、前記第1のエントリーが、階層的に最下位のテーブルレベルよりも少なくとも1つ上の階層レベルにあり、それにより、前記第1のエントリーによって識別される第2のメモリの範囲が、前記階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、前記第2のメモリの範囲が前記第1のメモリの範囲よりも大きい、生成することと、
    前記階層的に配置された第2層アドレス変換テーブルにおいて前記第1のエントリーを生成することに応答して、階層的に配置されたページテーブルにおける第1の複数のエントリーを使用済みとしてマークすることであって、前記階層的に配置されたページテーブルが、前記ホスト物理メモリアドレスをホスト仮想メモリアドレスに相関させ、前記第1の複数のエントリーが、全体として、前記階層的に配置された第2層アドレス変換テーブルにおける前記第1のエントリーと同じ第2のメモリの範囲を参照し、前記第1の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、マークすることとを含み、
    前記ゲスト物理メモリアドレスが、前記仮想マシンコンピューティング環境内で実行されるプロセスによって物理メモリへのアドレスとして認識され、
    前記ホスト物理メモリアドレスが、前記仮想マシンコンピューティング環境をホストするホストコンピューティングデバイスの実際の物理メモリへのアドレスであり、
    前記ホスト仮想メモリアドレスが、前記ホストコンピューティングデバイス上で実行されるメモリマネージャーによって提供される仮想メモリへのアドレスであり、前記メモリマネージャーが、前記仮想メモリを提供するように前記階層的に配置されたページテーブルを利用し、
    前記ゲスト物理メモリアドレスによって識別されるゲスト物理メモリが、前記ホスト仮想メモリアドレスの一部によって識別される、ホスト仮想メモリの一部によって支援される、方法。
  2. 前記第1のメモリアクセスが完了した後、前記階層的に配置されたページテーブルにおける前記第1の複数のエントリーの第1のサブセットが、対応するホスト物理メモリアドレスに元々格納され、その後不揮発性記憶媒体にページアウトされたデータを有することを検出することと、
    前記検出に応答して、前記階層的に配置された第2層アドレス変換テーブルにおける前記第1のエントリーを無効化することと、
    前記階層的に配置された第2層アドレス変換テーブルにおける前記第1のエントリーの代わりに、前記階層的に配置された第2層アドレス変換テーブルに第2の複数のエントリーを生成することであって、前記第2の複数のエントリーが、全体として、前記第1のエントリーと同じ第2のメモリの範囲の少なくとも一部を参照し、前記第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、第2の複数のエントリーを生成することと、をさらに含む、請求項1に記載の方法。
  3. 前記ホスト物理メモリの第1の複数の連続する小さいページサイズの領域を、前記ホスト物理メモリの単一の大きいページサイズの領域にアセンブルすること、をさらに含む、請求項1に記載の方法。
  4. 前記階層的に配置された第2層アドレス変換テーブルに第2のエントリーを生成することであって、前記第2のエントリーが、前記階層的に最下位のテーブルレベルより前記少なくとも1つ上の階層レベルにあり、それにより、前記第2のエントリーによって識別される第3のメモリの範囲が、前記階層的に最下位のテーブルレベルのいずれのテーブルも参照せずに識別され得、前記第3のメモリの範囲が、前記ホスト物理メモリの前記第1の複数の連続する小さいページサイズの領域がアセンブルされた、前記ホスト物理メモリの前記単一の大きいページサイズの領域を参照する、生成することと、
    前記階層的に配置された第2層アドレス変換テーブルに前記第2のエントリーを生成することに応答して、前記階層的に配置されたページテーブルにおける第2の複数のエントリーを使用済みとしてマークすることであって、前記第2の複数のエントリーが、前記ホスト物理メモリの前記単一の大きいページサイズの領域にアセンブルされた、前記ホスト物理メモリの前記第1の複数の連続する小さいページサイズの領域を参照する、マークすることと、をさらに含む、請求項3に記載の方法。
  5. 前記ホスト物理メモリの第2の複数の小さいページサイズの領域から、前記第1の複数の連続する小さいページサイズの領域の少なくとも一部にデータをコピーすることであって、前記第2の複数の小さいページサイズの領域が、少なくともパーティが不連続である、コピーすることと、
    前記ホスト物理メモリの前記第2の複数の小さいページサイズの領域を参照する、前記階層的に配置された第2層アドレス変換テーブルにおける第2の複数のエントリーを無効化することであって、前記第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、無効化することと、をさらに含み、
    前記階層的に配置された第2層アドレス変換テーブルにおける前記生成された第2のエントリーが、無効化された前記第2の複数のエントリーの代わりに利用される、請求項4に記載の方法。
  6. 前記ホスト物理メモリの1つ以上の小さいページサイズの領域の第2のセットから、前記第1の複数の連続する小さいページサイズの領域の少なくとも一部にデータをコピーすることと、
    前記階層的に配置された第2層アドレス変換テーブルにおける第2の複数のエントリーを無効化することであって、前記第2の複数のエントリーが、(1)前記ホスト物理の前記1つ以上の小さいページサイズの領域の前記第2のセットを参照する、第1のエントリーのサブセットと、(2)前記ホスト物理メモリの前記第1の複数の連続する小さいページサイズの領域の少なくともいくつかを参照する、第2のエントリーのサブセットの両方を含み、前記第2の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、無効化することと、をさらに含み、
    前記階層的に配置された第2層アドレス変換テーブルにおける前記生成された第2のエントリーが、無効化された前記第2の複数のエントリーの代わりに利用される、請求項4に記載の方法。
  7. 前記ホスト物理メモリの前記第1の複数の連続する小さいページサイズの領域を前記アセンブルすることは、前記第1の複数の連続する小さいページサイズの領域のうちのいくつかから、前記第1の複数の連続する小さいページサイズの領域とは異なる、前記ホスト物理メモリの他の小さいページサイズの領域にデータをコピーすることを含む、請求項3に記載の方法。
  8. 前記第2のメモリの範囲のページングを防止すること、をさらに含む、請求項1に記載の方法。
  9. 実行されたときに、コンピューティングデバイスに請求項1に記載のステップを実行させるコンピュータ実行可能命令を含む、1つ以上のコンピュータ可読記憶媒体。
  10. コンピューティングデバイスであって、
    1つ以上の中央処理装置と、
    ランダムアクセスメモリ(RAM)と、
    1つ以上のコンピュータ可読媒体であって、
    前記コンピューティングデバイスによって実行されたときに、ホスト仮想メモリアドレスを、前記RAM上の場所を識別するホスト物理メモリアドレスに変換するための階層的に配置されたページテーブルを参照するメモリマネージャーを、前記コンピューティングデバイスに提供させるコンピュータ実行可能命令の第1のセットと、
    前記コンピューティングデバイスによって実行されたときに、前記コンピューティングデバイスに仮想マシンコンピューティング環境を提供させるコンピュータ実行可能命令の第2のセットであって、前記仮想マシンコンピューティング環境内で実行されるプロセスが、ゲスト物理メモリアドレスを物理メモリへのアドレスとして認識し、前記ゲスト物理メモリアドレスによって識別されるさらなるゲスト物理メモリが、前記ホスト仮想メモリアドレスの一部によって識別される、ホスト仮想メモリの一部によって支援される、コンピュータ実行可能命令の第2のセットと、
    前記コンピューティングデバイスによって実行されたときに、前記コンピューティングデバイスに、
    前記仮想マシンコンピューティング環境で実行されている第1のプロセスから、第1のメモリの範囲に向けられた第1のメモリアクセスを検出することと、
    前記第1のメモリアクセスを完了する必須条件として、階層的に配置された第2層アドレス変換テーブルに第1のエントリーを生成することであって、前記階層的に配置された第2層アドレス変換テーブルが、前記ホスト物理メモリアドレスを前記ゲスト物理メモリアドレスに相関させ、前記第1のエントリーが、階層的に最下位のテーブルレベルよりも少なくとも1つ上の階層レベルにあり、それにより、前記第1のエントリーによって識別される第2のメモリの範囲が、前記階層的に最下位のテーブルレベルにおけるテーブルを参照せずに識別されることができ、前記第2のメモリの範囲が前記第1のメモリの範囲よりも大きい、生成することと、
    前記階層的に配置された第2層アドレス変換テーブルに前記第1のエントリーを生成することに応答して、前記階層的に配置されたページテーブルにおける第1の複数のエントリーを使用済みとしてマークすることであって、前記第1の複数のエントリーが、全体として、前記階層的に配置された第2層アドレス変換テーブルにおける前記第1のエントリーと同じ前記第2のメモリの範囲を参照し、前記第1の複数のエントリーのエントリーが、階層的に最下位のテーブルレベルにある、マークすることと、を行わせるコンピュータ実行可能命令の第3のセットと、を備える、1つ以上のコンピュータ可読媒体と、を備える、コンピューティングデバイス。
  11. 前記仮想マシンコンピューティング環境において実行されている前記第1のプロセスから第2のメモリアクセスを検出することであって、前記第2のメモリアクセスが、前記第1のメモリの範囲とは異なる第3のメモリの範囲に向けられる、第2のメモリアクセスを検出することと、
    前記階層的に配置されたページテーブルにおける前記第1の複数のエントリーの第2のサブセットを参照することによって前記第2のメモリアクセスを満たすことと、をさらに含み、
    前記第1のメモリアクセスが、前記階層的に配置されたページテーブルにおける前記第1の複数のエントリーの第1のサブセットを参照することによって満たされ、前記第1のサブセットが、前記階層的に配置されたページテーブルにおいて、前記第2のサブセットとは異なるエントリーを含む、請求項1に記載の方法。
  12. 前記第2の複数のエントリーが、前記第1のプロセスによって以前にアクセスされ、ページアウトされなかった前記第2のメモリの範囲の部分を参照する、請求項2に記載の方法。
  13. 前記アセンブルすることが、前記第1のメモリアクセスを検出した後、前記階層的に配置された第2層アドレス変換テーブルにおける前記第1のエントリーを生成する前に発生する、請求項3に記載の方法。
  14. 前記第1の複数の連続する小さいページサイズの領域の前記いくつかから前記他の小さいページサイズの領域への前記データの前記コピーすることは、前記第1の複数の連続する小さいページサイズの領域の断片化が、断片化閾値を下回る合にのみ実行される、請求項7に記載の方法。
  15. 前記第2のメモリの範囲の1つ以上の部分がアクセス頻度閾値よりも低い頻度でアクセスされる場合に、前記第2のメモリの範囲のページングの前記防止を取り除くことをさらに含む、請求項8に記載の方法。
JP2021518693A 2018-11-21 2019-11-14 ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス Pending JP2022509906A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/198,620 US10901911B2 (en) 2018-11-21 2018-11-21 Faster computer memory access by reducing SLAT fragmentation
US16/198,620 2018-11-21
US16/423,137 US10761876B2 (en) 2018-11-21 2019-05-27 Faster access of virtual machine memory backed by a host computing device's virtual memory
US16/423,137 2019-05-27
PCT/US2019/061345 WO2020106533A1 (en) 2018-11-21 2019-11-14 Faster access of virtual machine memory backed by a host computing device's virtual memory

Publications (2)

Publication Number Publication Date
JP2022509906A true JP2022509906A (ja) 2022-01-25
JPWO2020106533A5 JPWO2020106533A5 (ja) 2022-11-17

Family

ID=68841205

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021518693A Pending JP2022509906A (ja) 2018-11-21 2019-11-14 ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス

Country Status (14)

Country Link
US (2) US10761876B2 (ja)
EP (1) EP3884392A1 (ja)
JP (1) JP2022509906A (ja)
KR (1) KR20210089150A (ja)
CN (1) CN113168379A (ja)
AU (1) AU2019384498A1 (ja)
BR (1) BR112021008419A2 (ja)
CA (1) CA3116380A1 (ja)
IL (1) IL283228B2 (ja)
MX (1) MX2021005804A (ja)
PH (1) PH12021551164A1 (ja)
SG (1) SG11202104744UA (ja)
WO (1) WO2020106533A1 (ja)
ZA (1) ZA202102321B (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021161104A1 (en) 2020-02-12 2021-08-19 Monday.Com Enhanced display features in collaborative network systems, methods, and devices
US11410129B2 (en) 2010-05-01 2022-08-09 Monday.com Ltd. Digital processing systems and methods for two-way syncing with third party applications in collaborative work systems
US11188651B2 (en) * 2016-03-07 2021-11-30 Crowdstrike, Inc. Hypervisor-based interception of memory accesses
US11698890B2 (en) 2018-07-04 2023-07-11 Monday.com Ltd. System and method for generating a column-oriented data structure repository for columns of single data types
US11436359B2 (en) 2018-07-04 2022-09-06 Monday.com Ltd. System and method for managing permissions of users for a single data type column-oriented data structure
US11526661B2 (en) 2019-11-18 2022-12-13 Monday.com Ltd. Digital processing systems and methods for integrated communications module in tables of collaborative work systems
EP4062313A1 (en) 2019-11-18 2022-09-28 Monday.com Ltd. Collaborative networking systems, methods, and devices
US11501255B2 (en) 2020-05-01 2022-11-15 Monday.com Ltd. Digital processing systems and methods for virtual file-based electronic white board in collaborative work systems
US11829953B1 (en) 2020-05-01 2023-11-28 Monday.com Ltd. Digital processing systems and methods for managing sprints using linked electronic boards
US11277361B2 (en) 2020-05-03 2022-03-15 Monday.com Ltd. Digital processing systems and methods for variable hang-time for social layer messages in collaborative work systems
GB2595479B (en) * 2020-05-27 2022-10-19 Advanced Risc Mach Ltd Apparatus and method
US11782582B2 (en) 2021-01-14 2023-10-10 Monday.com Ltd. Digital processing systems and methods for detectable codes in presentation enabling targeted feedback in collaborative work systems
US11455239B1 (en) * 2021-07-02 2022-09-27 Microsoft Technology Licensing, Llc Memory reduction in a system by oversubscribing physical memory shared by compute entities supported by the system
US11586371B2 (en) * 2021-07-23 2023-02-21 Vmware, Inc. Prepopulating page tables for memory of workloads during live migrations
US11860783B2 (en) 2022-03-11 2024-01-02 Microsoft Technology Licensing, Llc Direct swap caching with noisy neighbor mitigation and dynamic address range assignment
WO2023239671A1 (en) * 2022-06-06 2023-12-14 Onnivation Llc Virtual memory paging system and translation lookaside buffer with pagelets
US11853228B1 (en) * 2022-06-10 2023-12-26 Arm Limited Partial-address-translation-invalidation request
US11741071B1 (en) 2022-12-28 2023-08-29 Monday.com Ltd. Digital processing systems and methods for navigating and viewing displayed content
US11886683B1 (en) 2022-12-30 2024-01-30 Monday.com Ltd Digital processing systems and methods for presenting board graphics
US11893381B1 (en) 2023-02-21 2024-02-06 Monday.com Ltd Digital processing systems and methods for reducing file bundle sizes

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7428626B2 (en) * 2005-03-08 2008-09-23 Microsoft Corporation Method and system for a second level address translation in a virtual machine environment
US7653803B2 (en) 2006-01-17 2010-01-26 Globalfoundries Inc. Address translation for input/output (I/O) devices and interrupt remapping for I/O devices in an I/O memory management unit (IOMMU)
US7917725B2 (en) 2007-09-11 2011-03-29 QNX Software Systems GmbH & Co., KG Processing system implementing variable page size memory organization using a multiple page per entry translation lookaside buffer
US8352705B2 (en) 2008-01-15 2013-01-08 Vmware, Inc. Large-page optimization in virtual memory paging systems
GB2478727B (en) 2010-03-15 2013-07-17 Advanced Risc Mach Ltd Translation table control
US8364932B2 (en) 2010-10-29 2013-01-29 Vmware, Inc. System and method to prioritize large memory page allocation in virtualized systems
CN103597451B (zh) * 2011-03-31 2017-06-13 英特尔公司 用于高可用性的存储器镜像和冗余生成
US9202046B2 (en) * 2014-03-03 2015-12-01 Bitdefender IPR Management Ltd. Systems and methods for executing arbitrary applications in secure environments
EP2955634B1 (en) * 2014-06-10 2021-03-03 Deutsche Telekom AG Paravirtualization-based interface for memory management in virtual machines
US9501422B2 (en) 2014-06-11 2016-11-22 Vmware, Inc. Identification of low-activity large memory pages
US9703726B2 (en) * 2014-06-24 2017-07-11 Bitdefender IPR Management Ltd. Systems and methods for dynamically protecting a stack from below the operating system
US9792222B2 (en) * 2014-06-27 2017-10-17 Intel Corporation Validating virtual address translation by virtual machine monitor utilizing address validation structure to validate tentative guest physical address and aborting based on flag in extended page table requiring an expected guest physical address in the address validation structure
US20160299712A1 (en) 2015-04-07 2016-10-13 Microsoft Technology Licensing, Llc Virtual Machines Backed by Host Virtual Memory
US20170123996A1 (en) * 2015-11-02 2017-05-04 Microsoft Technology Licensing, Llc Direct Mapped Files in Virtual Address-Backed Virtual Machines
US10447728B1 (en) * 2015-12-10 2019-10-15 Fireeye, Inc. Technique for protecting guest processes using a layered virtualization architecture

Also Published As

Publication number Publication date
KR20210089150A (ko) 2021-07-15
AU2019384498A1 (en) 2021-05-13
CA3116380A1 (en) 2020-05-28
WO2020106533A1 (en) 2020-05-28
EP3884392A1 (en) 2021-09-29
ZA202102321B (en) 2022-06-29
CN113168379A (zh) 2021-07-23
BR112021008419A2 (pt) 2021-09-14
IL283228A (en) 2021-07-29
US11157306B2 (en) 2021-10-26
US10761876B2 (en) 2020-09-01
IL283228B2 (en) 2024-04-01
MX2021005804A (es) 2021-07-02
SG11202104744UA (en) 2021-06-29
US20200394065A1 (en) 2020-12-17
PH12021551164A1 (en) 2021-10-25
IL283228B1 (en) 2023-12-01
US20200159558A1 (en) 2020-05-21

Similar Documents

Publication Publication Date Title
JP2022509906A (ja) ホストコンピューティングデバイスの仮想メモリによって支援された仮想マシンメモリへのより高速なアクセス
JP6050262B2 (ja) 仮想ディスクストレージ技術
US9836409B2 (en) Seamless application access to hybrid main memory
US9135171B2 (en) Method for improving save and restore performance in virtual machine systems
JP5812245B2 (ja) ページング可能ゲストをサポートするコンピューティング環境のストレージの管理を容易にするためのコンピュータ可読プログラム・コード・ロジック、方法、およびシステム
US20160299712A1 (en) Virtual Machines Backed by Host Virtual Memory
CN111919201B (zh) 混合式存储器系统
KR102443600B1 (ko) 하이브리드 메모리 시스템
WO2012162420A2 (en) Managing data input/output operations
US20120278525A1 (en) Increasing granularity of dirty bit information
US10430221B2 (en) Post-copy virtual machine migration with assigned devices
US10528459B2 (en) Scalable space management using bitmap summary tree
CN111868679A (zh) 混合存储器系统
US9952984B2 (en) Erasing a storage block before writing partial data
US20230229609A1 (en) Iommu-based direct memory access (dma) tracking for enabling live migration of virtual machines (vms) using passthrough physical devices
RU2780969C1 (ru) Более быстрый доступ запоминающего устройства виртуальной машины, резервируемого виртуальным запоминающим устройством вычислительного хост-устройства
US11543988B1 (en) Preserving large pages of memory across live migrations of workloads

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221109

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221109

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240110

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240409