(57)【要約】  メインメモリから、第１のデータページの第１の部分内に含まれる第１のページサイズを有するデータにアクセスするためのリクエストを受信することと、第１のデータページがメインメモリ内に記憶されていないという決定に基づき、ページフォールトを初期化することと、前記第１のページサイズに等しいメインメモリの一部を割り当てることと、第１のデータページ全体を転送することなく、第１のデータページの第１の部分をセカンダリメモリからメインメモリの割り当てられた一部に転送することと、第１のデータページの第１の部分に関連付けられた第１のページテーブルエントリを、第１のデータページの第１の部分が転送されたメインメモリの割り当てられた一部の位置を指すように更新することを備える、方法、システム、および装置。
2019532450.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装方法であって、
メインメモリから、第１のデータページの第１の部分内に含まれるデータにアクセスするためのリクエストを受信することを備え、前記第１のデータページは、第１のページサイズを有し、前記第１の部分は、前記第１のページサイズよりも少ない第２のページサイズを備え、前記方法はさらに、
前記第１のデータページが前記メインメモリ内に記憶されておらずセカンダリメモリ内に記憶されているという決定に基づき、ページフォールトを初期化することと、
前記ページフォールトを初期化したことに応答して、前記第１のページサイズに等しい前記メインメモリの一部を割り当てることと、
前記第１のデータページ全体を転送することなく、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することとを備え、前記第１のデータページの残りの量は、前記セカンダリメモリ内に記憶されたままであり、前記方法はさらに、
前記第１のデータページの前記第１の部分に関連付けられた第１のページテーブルエントリを、前記第１のデータページの前記第１の部分が転送された前記メインメモリの前記割り当てられた一部の位置を指すように更新することを備える、方法。
【請求項２】
前記第１のデータページの前記残りの量を前記セカンダリメモリから前記メインメモリに転送することをさらに備える、請求項１に記載の方法。
【請求項３】
前記第１のデータページの前記残りの量を転送することは、
前記第１のデータページ全体が前記メインメモリ内に記憶されるまで、前記第２のページサイズに対応する前記第１のデータページのそれぞれの部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に繰り返し転送することと、
前記第１のデータページの前記それぞれの部分の各々に対するそれぞれのページテーブルエントリを、前記メインメモリ内の前記第１のデータページの前記それぞれの部分のそれぞれの位置を指すように更新することとを備える、請求項２に記載の方法。
【請求項４】
一旦前記第１のデータページ全体が前記メインメモリ内に記憶されると、前記第１のデータページを、前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送された前記第１のデータページの前記それぞれの部分から再組み立てすることと、
前記メインメモリ内の前記再組み立てされた第１のデータページの位置を指すように、前記第１のデータページに関連付けられたページテーブルエントリを更新することをさらに備える、請求項３に記載の方法。
【請求項５】
前記第１のデータページの前記残りの部分を前記セカンダリメモリから前記メインメモリに転送する前に、アクセスされることをリクエストされた前記第１のデータページの前記第１の部分が前記メインメモリに転送されたことを示すことをさらに備える、請求項２または請求項３に記載の方法。
【請求項６】
アクセスビットがページテーブルの各ページテーブルエントリに対して設定されているかをページテーブルスキャナを用いた前記ページテーブルのスキャンに基づき決定することをさらに備え、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間にアクセスされたかを示し、前記第１のページサイズを有する少なくとも１つのページは、前記第２のページサイズのページへと分割されるとともに、前記ページテーブル内の前記第２のページサイズの前記ページの各々に対するページテーブルエントリは、スキャンされ、前記方法はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリに対して設定されていないと決定したことに応答して、各ページに対してカウントを増やすことと、
前記アクセスビットが各ページテーブルエントリに対して設定されているかを決定した後に、前記アクセスビットをリセットすることと、
前記第２のページサイズの前記ページを前記第１のページサイズを有する分割された前記ページへと再組み立てすることとを備える、上述の請求項に記載の方法。
【請求項７】
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができない場合に、前記第１のページサイズを有する最も使用されていないページを各ページに対する前記カウントに基づき決定し、前記最も使用されていないページを前記セカンダリメモリへと解放することと、前記第１のページサイズに等しい前記メインメモリの一部を前記解放された最も使用されていないページの位置において割り当てることと、
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができる場合に、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することをさらに備える、請求項６に記載の方法。
【請求項８】
前記第１のページサイズを有する前記第１のデータページのメモリ構造を前記第１のページサイズよりも少ない前記第２のページサイズを有する複数のデータページへと変化させることをさらに備える、上述の請求項に記載の方法。
【請求項９】
システムであって、
１つまたは複数のプロセッサと、
メインメモリとセカンダリメモリとを備えるメモリであって、メモリは、動作可能な命令を記憶し、前記命令が実行されると１つまたは複数のプロセッサに動作を行わせ、前記動作は、
前記メインメモリから、第１のデータページの第１の部分内に含まれるデータにアクセスするためのリクエストを受信することを備え、前記第１のデータページは、第１のページサイズを有し、前記第１の部分は、前記第１のページサイズよりも少ない第２のページサイズを備え、前記動作はさらに、
前記第１のデータページが前記メインメモリ内に記憶されておらず前記セカンダリメモリ内に記憶されているという決定に基づき、ページフォールトを初期化することと、
前記ページフォールトを初期化したことに応答して、前記第１のページサイズに等しい前記メインメモリの一部を割り当てることと、
前記第１のデータページ全体を転送することなく、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することとを備え、前記第１のデータページの残りの量は、前記セカンダリメモリ内に記憶されたままであり、前記動作はさらに、
前記第１のデータページの前記第１の部分に関連付けられた第１のページテーブルエントリを、前記第１のデータページの前記第１の部分が転送された前記メインメモリの前記割り当てられた一部の位置を指すように更新することを備える、システム。
【請求項１０】
前記動作は、
前記第１のデータページの前記残りの量を前記セカンダリメモリから前記メインメモリに転送することをさらに備える、請求項９に記載のシステム。
【請求項１１】
前記第１のデータページの前記残りの量を転送することは、
前記第１のデータページ全体が前記メインメモリ内に記憶されるまで、前記第２のページサイズに対応する前記第１のデータページのそれぞれの部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に繰り返し転送することと、
前記第１のデータページの前記それぞれの部分の各々に対するそれぞれのページテーブルエントリを、前記メインメモリ内の前記第１のデータページの前記それぞれの部分のそれぞれの位置を指すように更新することとを備える、請求項１０に記載のシステム。
【請求項１２】
前記動作は、
一旦前記第１のデータページ全体が前記メインメモリ内に記憶されると、前記第１のデータページを、前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送された前記第１のデータページの前記それぞれの部分から再組み立てすることと、
前記メインメモリ内の前記再組み立てされた第１のデータページの位置を指すように、前記第１のデータページに関連付けられたページテーブルエントリを更新することをさらに備える、請求項１１に記載のシステム。
【請求項１３】
前記動作は、
前記第１のデータページの前記残りの部分を前記セカンダリメモリから前記メインメモリに転送する前に、アクセスされることをリクエストされた前記第１のデータページの前記第１の部分が前記メインメモリに転送されたことを示すことをさらに備える、請求項１０または請求項１１に記載のシステム。
【請求項１４】
前記動作は、
アクセスビットがページテーブルの各ページテーブルエントリに対して設定されているかをページテーブルスキャナを用いた前記ページテーブルのスキャンに基づき決定することをさらに備え、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間にアクセスされたかを示し、前記第１のページサイズを有する少なくとも１つのページは、前記第２のページサイズのページへと分割されるとともに、前記ページテーブル内の前記第２のページサイズの前記ページの各々に対するページテーブルエントリは、スキャンされ、前記動作はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリに対して設定されていないと決定したことに応答して、各ページに対してカウントを増やすことと、
前記アクセスビットが各ページテーブルエントリに対して設定されているかを決定した後に、前記アクセスビットをリセットすることと、
前記第２のページサイズの前記ページを前記第１のページサイズを有する分割された前記ページへと再組み立てすることとを備える、請求項９〜請求項１３のいずれか１項に記載のシステム。
【請求項１５】
前記動作は、
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができない場合に、前記第１のページサイズを有する最も使用されていないページを各ページに対する前記カウントに基づき決定し、前記最も使用されていないページを前記セカンダリメモリへと解放することと、前記第１のページサイズに等しい前記メインメモリの一部を前記解放された最も使用されていないページの位置において割り当てることと、
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができる場合に、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することをさらに備える、請求項１４に記載のシステム。
【請求項１６】
前記動作は、
前記第１のページサイズを有する前記第１のデータページのメモリ構造を前記第１のページサイズよりも少ない前記第２のページサイズを有する複数のデータページへと変化させることをさらに備える、請求項９〜請求項１５のいずれか１項に記載のシステム。
【請求項１７】
１つまたは複数のプロセッサによって実行可能な命令を記憶するコンピュータ可読記憶装置であって、前記命令は、実行されると前記１つまたは複数のプロセッサに動作を行わせ、前記動作は、
メインメモリから、第１のデータページの第１の部分内に含まれるデータにアクセスするためのリクエストを受信することを備え、前記第１のデータページは、第１のページサイズを有し、前記第１の部分は、前記第１のページサイズよりも少ない第２のページサイズを備え、前記動作はさらに、
前記第１のデータページが前記メインメモリ内に記憶されておらずセカンダリメモリ内に記憶されているという決定に基づき、ページフォールトを初期化することと、
前記ページフォールトを初期化したことに応答して、前記第１のページサイズに等しい前記メインメモリの一部を割り当てることと、
前記第１のデータページ全体を転送することなく、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することとを備え、前記第１のデータページの残りの量は、前記セカンダリメモリ内に記憶されたままであり、前記動作はさらに、
前記第１のデータページの前記第１の部分に関連付けられた第１のページテーブルエントリを、前記第１のデータページの前記第１の部分が転送された前記メインメモリの前記割り当てられた一部の位置を指すように更新することを備える、記憶装置。
【請求項１８】
前記動作は、
前記第１のデータページの前記残りの量を前記セカンダリメモリから前記メインメモリに転送することをさらに備える、請求項１７に記載の記憶装置。
【請求項１９】
前記第１のデータページの前記残りの量を転送することは、
前記第１のデータページ全体が前記メインメモリ内に記憶されるまで、前記第２のページサイズに対応する前記第１のデータページのそれぞれの部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に繰り返し転送することと、
前記第１のデータページの前記それぞれの部分の各々に対するそれぞれのページテーブルエントリを、前記メインメモリ内の前記第１のデータページの前記それぞれの部分のそれぞれの位置を指すように更新することと、
一旦前記第１のデータページ全体が前記メインメモリ内に記憶されると、前記第１のデータページを、前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送された前記第１のデータページの前記それぞれの部分から再組み立てすることと、
前記メインメモリ内の前記再組み立てされた第１のデータページの位置を指すように、前記第１のデータページに関連付けられたページテーブルエントリを更新することをさらに備える、請求項１８に記載の記憶装置。
【請求項２０】
前記動作は、
アクセスビットがページテーブルの各ページテーブルエントリに対して設定されているかをページテーブルスキャナを用いた前記ページテーブルのスキャンに基づき決定することとをさらに備え、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間にアクセスされたかを示し、前記第１のページサイズを有する少なくとも１つのページは、前記第２のページサイズのページへと分割されるとともに、前記ページテーブル内の前記第２のページサイズの前記ページの各々に対するページテーブルエントリは、スキャンされ、前記動作はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリに対して設定されていないと決定したことに応答して、各ページに対してカウントを増やすことと、
前記アクセスビットが各ページテーブルエントリに対して設定されているかを決定した後に、前記アクセスビットをリセットすることと、
前記第２のページサイズの前記ページを前記第１のページサイズを有する分割された前記ページへと再組み立てすることと、
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができない場合に、前記第１のページサイズを有する最も使用されていないページを各ページに対する前記カウントに基づき決定し、前記最も使用されていないページを前記セカンダリメモリへと解放することと、前記第１のページサイズに等しい前記メインメモリの一部を前記解放された最も使用されていないページの位置において割り当てることと、
前記第１のページサイズに等しい前記メインメモリの前記一部が割り当てられることができる場合に、前記第１のデータページの前記第１の部分を前記セカンダリメモリから前記メインメモリの前記割り当てられた一部に転送することをさらに備える、上述の請求項に記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
分野
本明細書は一般にメモリシステムに関する。
【背景技術】
【０００２】
背景
多種多様なメモリデバイスは、さまざまなコンピュータおよび同様のシステムのためのデータおよび命令を保持し保存するために使用されることができる。従来型のコンピューティングシステムでは、高速動作用途のためのコンピュータのダイナミックメモリを動作させるために、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）技術が典型的に用いられてきた。しかし、コンピュータシステム内のメインメモリとして使用されるＤＲＡＭは、もはや従来ほど急速にスケーリングされない。結果として、ＤＲＡＭストレージは、コンピューティング環境内の限定されたリソースとなった。
【０００３】
概要
ディスクベースメモリ、ＮＡＮＤフラッシュメモリ、スピン注入磁気メモリ（ＳＴＴ−ＭＲＡＭ）、抵抗変化型メモリ（ＲｅＲＡＭ）などといった第２ティアのメモリが使用され得る。第２ティアのメモリは、メモリまたはＩＯバスにわたってローカルに、または高速ネットワークにわたってリモートにアクセスされ得る。しかし、アプリケーションは、データ配置を明示的に管理する必要があり、またはシステムは、データをメモリティア間で透過的に移動する自動管理を提供しなければならない。加えて、互換的に使用される用語である、巨大ページまたは大規模ページまたはスーパーページは、大部分のワークロードおよび特にクラウドベースで供されるアプリケーションに対して著しいパフォーマンスの向上を提供することが示されており、巨大ページは、プロセッサアーキテクチャに依存して、４ＫＢであり得る典型的なページよりも、たとえば、８ＫＢ、６４ＫＢ、２５６ＫＢ、１ＭＢ、２ＭＢ、４ＭＢ、１６ＭＢ、２５６ＭＢ、５１２ＭＢ、または１ＧＢといった、大きなサイズのメモリのブロックである。このため、新たな技術は、既存の技術の不十分さを克服するために、パフォーマンスへの最小の影響を有しつつ自動管理を行うために必要とされる。
【発明の概要】
【課題を解決するための手段】
【０００４】
この明細書で説明される主題の１つの局面は、システムおよび方法であって、メインメモリから、第１のデータページの第１の部分内に含まれるデータにアクセスするためのリクエストを受信することを含み、第１のデータページは、第１のページサイズを有し、第１の部分は、第１のページサイズよりも少ない第２のページサイズを備え、システムおよび方法はさらに、第１のデータページがメインメモリ内に記憶されておらずセカンダリメモリ内に記憶されているという決定に基づき、ページフォールトを初期化することと、ページフォールトを初期化したことに応答して、第１のページサイズに等しいメインメモリの一部を割り当てることと、第１のデータページ全体を転送することなく、第１のデータページの第１の部分をセカンダリメモリからメインメモリの割り当てられた一部に転送することとを含み、第１のデータページの残りの量は、セカンダリメモリ内に記憶されたままであり、システムおよび方法はさらに、第１のデータページの第１の部分に関連付けられた第１のページテーブルエントリを、第１のデータページの第１の部分が転送されたメインメモリの割り当てられた一部の位置を指すように更新することを含む、システムおよび方法において具体化される。
【０００５】
ある実装では、第１のデータページの残りの量は、セカンダリメモリからメインメモリに転送される。第１のデータページの残りの量を転送することは、第１のデータページ全体がメインメモリ内に記憶されるまで、第２のページサイズに対応する第１のデータページのそれぞれの部分をセカンダリメモリからメインメモリの割り当てられた一部に繰り返し転送することと、第１のデータページのそれぞれの部分の各々に対するそれぞれのページテーブルエントリを、メインメモリ内の第１のデータページのそれぞれの部分のそれぞれの位置を指すように更新することとを含み得る。
【０００６】
ある実装では、一旦第１のデータページ全体がメインメモリ内に記憶されると、第１のデータページは、セカンダリメモリからメインメモリの割り当てられた一部に転送された第１のデータページのそれぞれの部分から再組み立てされ、 第１のデータページに関連付けられたページテーブルエントリは、メインメモリ内の再組み立てされた第１のデータページの位置を指すように更新される。
【０００７】
この明細書で説明される主題の別の局面は、システムおよび方法であって、第１のデータページの残りの部分をセカンダリメモリからメインメモリに転送する前に、アクセスされることをリクエストされた第１のデータページの第１の部分がメインメモリに転送されたことを示すことをさらに含む、システムおよび方法において具体化される。
【０００８】
この明細書で説明される主題の別の局面は、システムおよび方法であって、アクセスビットがページテーブルの各ページテーブルエントリに対して設定されているかをページテーブルスキャナを用いたページテーブルのスキャンに基づき決定することとをさらに含み、アクセスビットは、ページテーブルエントリに関連付けられたページが最後のスキャン期間にアクセスされたかを示し、第１のページサイズを有する複数のページのうちの少なくとも１つは、第２のページサイズのページへと分割されるとともに、ページテーブル内の第２のページサイズのページの各々に対するページテーブルエントリは、スキャンされ、方法およびシステムはさらに、アクセスビットがページに関連付けられたページテーブルエントリに対して設定されていないと決定したことに応答して、各ページに対してカウントを増やすことと、アクセスビットが各ページテーブルエントリに対して設定されているかを決定した後に、アクセスビットをリセットすることとを含む。
【０００９】
ある実装では、第１のページサイズに等しいメインメモリの一部が割り当てられることができない場合に、第１のページサイズを有する最も使用されていないページの１つが各ページに対するカウントに基づき決定され、最も使用されていないページの１つをセカンダリメモリへと解放し、第１のページサイズに等しいメインメモリの一部が解放された最も使用されていないページの１つの位置において割り当てられ、第１のページサイズに等しいメインメモリの一部が割り当てられることができる場合に、第１のデータページの第１の部分がセカンダリメモリからメインメモリの割り当てられた一部に転送される。
【００１０】
これらの局面の他の実施形態は、コンピュータ記憶装置上にエンコードされた方法の動作を実行するように構成された対応するシステム、装置、およびコンピュータプログラムを含む。
【００１１】
本明細書において説明される主題の特定の実施形態は、以下の利点のうちの１つまたは複数を実現するように実装されることができる。たとえば、メモリ内のページの使用状況またはアクセス統計は、ソフトウェアおよびサンプリング技法を含む現在の方法よりも正確かつ高精度であり得るが、これは、アクセス統計が単なるページレベルではなくサブページレベルで決定され得るためである。さらに、最初にアクセスが要求されたページの全データページではなく特定の部分を転送することによって、ページにアクセスするリクエストに応答してページを転送することによって引き起こされる遅延が減らされ得、その結果、実行されているアプリケーションまたはプロセスの実行を速くし得る。別の利点は、ページテーブルのレベルが少ないためメモリアクセスパフォーマンスが向上し、変換ルックアサイドバッファ（ＴＬＢ）のカバレッジが向上するなど、システムが巨大ページの利点を活用でき、かつ依然として小さいページユニットでページングを実行できるということであり、このことは、小さなページを転送するだけでよいページフォールトの処理待ち時間を減らすため、ページフォルトパフォーマンスを向上させる。したがって、巨大ページのメモリアクセスの利点と小さなページのデマンドページングの利点の両方が達成されることができる。さらに、小さなページサイズに従って必要なデータのみが転送され得、その結果、メインメモリ内にホットデータを、またセカンダリメモリ内にコールドデータを、巨大ページを直接ページングするのに比べてより良好に維持するので、メインメモリは不要なデータで占有されない。
【００１２】
本発明の１つまたは複数の実施形態の詳細は、添付の図面および以下の説明に記載される。本発明の他の特徴および利点は、説明、図面、および特許請求の範囲から以下で明らかになる。
【図面の簡単な説明】
【００１３】
【図１】本開示の実装に従う、メモリデバイスを含むシステムの例を図示する。
【図２】本開示の実装に従う、メモリデバイスを含むシステムの例を図示する。
【図３Ａ】本開示の実装に従う、仮想メモリを物理メモリにマッピングするためのページテーブルの例を図示する。
【図３Ｂ】本開示の実装に従う、割り当てられたメモリの一部の例を図示する。
【図４】本開示の実装に従う、メモリ管理のためのプロセスの例のフローチャートを図示する。
【発明を実施するための形態】
【００１４】
さまざまな図面における同様の参照番号および符号は同様の要素を示す。
詳細な説明
巨大ページは、大部分のワークロードに対して、特にクラウドベースに供する用途に対して、著しいパフォーマンスの向上を提供することが示されている。「巨大ページ」という用語がここに使用され得るが、この用語は、特定のアーキテクチャが処理できる最も小さなサイズのページ、すなわち、小さなページ、またはその標準的なページサイズよりも大きい任意のページのサイズに適用される。たとえば、特定のアーキテクチャに対する最も小さなページサイズまたは標準的なページサイズは、４ＫＢであり得、巨大ページは、２ＭＢであり得る。その他の実装では、たとえば、巨大ページは、８ＫＢ、６４ＫＢ、２５６ＫＢ、１ＭＢ、２ＭＢ、４ＭＢ、１６ＭＢ、２５６ＭＢ、５１２ＭＢ、または１ＧＢ、またはそれ以上、またはその間の任意のサイズであり得る。たとえば、巨大ページは、４ＫＢの任意の整数倍ｎ、すなわち、ｎ×４ＫＢであり得、ある実装では標準的なページサイズの２の任意の累乗の形態であり得るであり得る。本開示の実施形態は、メインメモリ（例えば、ＤＲＡＭキャッシュ）にアクセスするために巨大ページを使用しながら、（時にはセカンダリメモリと呼ばれる）第２ティアの低速メモリにページングするために従来の小さなページを使用することができるきる新しいスキームを導入する。ある実施形態は、より低速のメモリにアクセスするために使用される相互接続の種類に基づいて変形され得る。たとえば、カスタマイズされたカーネルドライバに基づくソフトウェアベースのソリューションが、ＩＯ相互接続のために実装され得る。さらに、たとえば、巨大ページを管理するためのハードウェアソリューションが、キャッシュコヒーレント相互接続のために実装され得る。
【００１５】
したがって、本開示の実施形態は、メモリまたはＩＯバスにわたってローカルにまたはネットワークにわたってリモートにのいずれかで利用可能なセカンダリメモリの高パフォーマンスの自動管理のためのシステムを提供する。セカンダリメモリは、ディスクベースであり得、不揮発性で本質的に永続的なコンピュータメモリであり得る。セカンダリメモリは、プロセッサによって直接アクセスされなくてもよく、プライマリまたはメインメモリより遅くあり得る。プライマリメモリ、プライマリストレージ、内部メモリまたは第１ティアメモリとも称されるメインメモリは、ＣＰＵが直接アクセス可能であり得る。以下により詳細に説明されるように、最適化されたカーネルドライバは、たとえば、第２ティアのメモリへの高速経路を提供し、メモリ管理ハードウェアとのすべての通信を処理し得る。そのプロセスは、同期、メモリ管理、ブロックＩＯ転送などに多大なコストがかかる、ページングのためのカーネルを通した既存の経路と比較して有利である。
【００１６】
これら特徴および追加の特徴は、以下により詳細に説明される。
図１は、本開示の実装に従うメモリデバイスを含むシステム１００の例を図示する。中央処理ユニット（ＣＰＵ）１１０は、ＤＲＡＭ１２０の形態のメインメモリと、メモリ管理ユニット（ＭＭＵ）１５０と通信し得る。システム１００は、ネットワークにわたってアクセスされ得るリモートメモリ１３０の形態のセカンダリメモリをさらに含み得る。ＭＭＵ１５０は、メモリの管理において動作し得る。加えて、ページテーブルウォーカ１６０および変換ルックアサイドバッファ（ＴＬＢ）１６５は、ＭＭＵ１５０の一部であり得るか、それとともに実装され得る。システム１００は、物理メモリとしてＤＲＡＭ１７０を追加的に備えてもよい。
【００１７】
ＭＭＵ１５０は、それを通して渡されるメモリ参照を有し得るハードウェアユニットであり、仮想メモリアドレスの物理アドレスに対する変換を行い、キャッシュコントロールを処理する。たとえば、ＭＭＵ１５０は、ページテーブルをページ毎に１つのページテーブルエントリ（ＰＴＥ）を包含するインメモリテーブルとして使用して、仮想ページ番号をメインメモリ内の物理ページ番号にマップし得る。ＰＴＥの連想キャッシュとしての変換ルックアサイドバッファ１６５は、仮想アドレスがマップされる度にメインメモリにアクセスする必要性を避けるために使用され得る。たとえば非物理ランダムアクセスメモリがその仮想ページに対して割り当てられているためなどにより、ＰＴＥが仮想ページへのアクセスを禁止するときに、ＭＭＵ１５０は、ページフォールトをＣＰＵ１１０へと送信し得る。
【００１８】
ＣＰＵ１１０は、プロセッサに内蔵された少量の高速メモリであり得るキャッシュを有し得、これは、処理待ち時間を減らすためにデータの一時的な複製を包含するように構成され得る。ＴＬＢ１６５は、最近使用されたページの固定サイズのアレイであり得、ＣＰＵ１１０はこれを各メモリアクセスにおいてチェックし得る。ＴＬＢ１６５は、ＤＲＡＭ１７０内の物理ページが現在割り当てられている仮想アドレス範囲をリスト化し得る。このため、たとえば、ＴＬＢ１６５は、ＭＭＵ１５０のためのキャッシュとして機能し得る。このようにして、ＴＬＢ１６５内でリスト化される仮想アドレスへのアクセスは、関連付けられた物理メモリ、たとえば、ＤＲＡＭ１７０に直接進み得る。加えて、ＴＬＢ１６５内でリスト化されない仮想アドレスへのアクセス、すなわちＴＬＢミスは、ページテーブルルックアップをトリガし得、これは、ハードウェアによって、またはページフォールトハンドラによって行われ得る。
【００１９】
図２は、本開示の実装に従うメモリデバイスを含むシステム２００の例を図示する。システム２００は、ＣＰＵ２２０および物理アドレス空間２４０を含み得る。ＭＭＵ２３０は、仮想アドレスを対応する物理アドレスを識別するために解釈し得る。たとえば、メモリを仮想アドレスにおいて読み、書き、または実行する試みは、対応する物理アドレスに変換され得るか、割り込み、すなわちページフォールトが生成され、ソフトウェアが試みられたアクセスに応答することを可能とし得るかのいずれかである。物理メモリアドレスは、所与の読み書き動作に関連付けられた物理メモリを構成する特定のメモリセルまたはストレージハードウェアのピース内の一部を識別し得る。仮想メモリは、ソフトウェア制御されたメモリアドレスのセット、たとえば、仮想アドレス空間を提供し得、各プロセス、たとえば、プロセスＡ２０５およびプロセスＢ２１０が、カーネル空間およびユーザ空間を含み得るそれ自体の仮想メモリアドレス範囲を有することを可能とし得る。仮想アドレスは、仮想アドレス範囲を関連付けられた記憶内容にマップし得るページテーブルを使用してＭＭＵ２３０によって解釈され得る。プロセッサがアドレス指定可能な最も小さな単位は、バイトまたはワードであり得るが、ＭＭＵ２３０は、メモリをページにおいて管理し得る。
【００２０】
図３Ａは、本開示の実装に従い仮想メモリ３１０を物理メモリ３３０にマッピングするためのページテーブル３２０の例を図示する。ページテーブル３２０は、プロセスのためのメモリマッピングのリストを包含するデータ構造であり得、関連付けられたリソースを追跡するために使用され得る。たとえば、各プロセスは、それ自体のページテーブルのセットを有し得る。仮想アドレスが空間、たとえば、仮想メモリ３１０は、特定のサイズのアドレスの連続スパンであり得るページへと分割され得る。ページは、ページの開始アドレスがページサイズの倍数であるように構成され得る。上述のように、ＭＭＵ２３０は、ページテーブル３２０を仮想メモリ３１０からページの仮想アドレスを解釈し、物理メモリ３３０内のページフレームの対応する物理アドレスを識別するために使用し得る。加えて、ページテーブルは、階層的またはマルチレベル、ハッシュベースなどであり得、これは、巨大ページのための利点を提供し、階層が高いほど、ページテーブルウォークが高速化される。
【００２１】
先に参照したように、ディスクベースメモリまたはその他の第２ティアメモリといったセカンダリメモリまたは第２ティアのメモリは、ＤＲＡＭといったメインメモリまたはプライマリメモリより遅くあり得る。ある実装に従い、カスタマイズされたカーネルドライバは、巨大ページを有する第２ティアのメモリを管理し得る。カーネルドライバは、ＤＲＡＭ内のキャッシュのために物理メモリを巨大ページの倍数である連続領域において予約し得る。アプリケーションが追加のメモリを必要とするとき、カーネルドライバは、巨大ページの倍数、すなわち、巨大ページのサイズの倍数において空間を割り当て得る。カーネルドライバは、ページ置換ポリシーを実装し得、置換のためのデータが選択されたとき、巨大ページは第２ティアのメモリにページアウトされ得る。そのプロセスは、メモリ内のデータにアクセスすることをリクエストした実行中のアプリケーションとは非同期に起こり得る。
【００２２】
アプリケーションが第２ティアのメモリ内に存在するデータにアクセスすることに失敗すると、ページフォールトハンドラは、第２ティアからメインメモリ、たとえばＤＲＡＭに、リクエストされたキャッシュラインを包含するメモリの単一の小さなページのみを転送し得る。しかし、ある実装に従い、巨大ページを構成する各小さなページの状態は、追跡され得る。このため、たとえば、カーネルドライバが巨大ページ内のすべてのまたは予め定められた量の小さなページにフォールトしたとき、任意の残りの小さなページをページインするという決定がされ得、既存のＰＴＥを巨大ページのための単一のＰＴＥに置換し任意の関連するＴＬＢエントリをＴＬＢ１６５からフラッシュすることによって、小さなページを再びＤＲＡＭ内の巨大ページへと合体するまたは再組み立てする。
【００２３】
したがって、ＤＲＡＭ内に存在するデータのための巨大ページの利点が維持されつつ、小さなページを転送した後にフォールトハンドラプロセスを完了することによってページフォールトのコストもまた減らされ得る。たとえば、より大きな粒度でデータを追跡することが、より少ないエントリを有するより小さいページテーブルを可能とするため、巨大ページを使用することは、リソースオーバヘッドを減少させる利点を提供し得る。しかし、巨大ページを使用することは、システムが巨大ページを第２ティアのメモリに常時書き出す場合、書き込み帯域幅全体を増加させ得る。また、「ホット」な、たとえば、頻繁に使用されるかまたは最近使用された巨大ページ内の小さなページがセカンダリ、より遅いメモリにページアウトされ得る可能性があり、その「ホット」データについて追加的フォールトにつながり得る。ある実装に従い、これらの問題は、カーネルドライバが巨大ページをいつ分割するか合体するかを巨大ページおよび小さなページの統計に基づき動的に決定することによって軽減され得る。たとえば、以下により詳細に説明されるように、巨大ページは、ＰＴＥアクセスビットを通して、巨大ページ内の小さなページについて統計を収集するために、周期的に分割され得る。さらに、巨大ページ内の予め定められた数の小さなページが「ホット」であるか頻繁にアクセスされるか最近アクセスされたときに、小さなページが巨大ページに移動されマージされ得るように、ドライバは、巨大ページおよび小さなページの両方を保持し得る。逆に、巨大ページ内に「コールド」なサブページ、すなわち、小さなページが多すぎる場合、巨大ページは、分割され小さなページとして処理され得る。
【００２４】
ある実装に従い、メインメモリ内に記憶されないデータにアクセスする試みがなされ、ページフォールトが起こる場合、巨大ページ全体は、メインメモリへと転送され得ないが、むしろより小さいデータの塊、たとえばアクセスがリクエストされたデータを含む小さなページは、セカンダリメモリからメインメモリに転送され得る。このため、アプリケーションは、リクエストされたデータにアクセスし実行を継続し得る。その後、巨大ページの残りは、バックグランドにおいてメインメモリへと転送され得、ページテーブルエントリは、それに従って更新され得る。このようにして、リクエストされたデータは、より迅速にアクセスされ得、システムは巨大ページを管理する利点を依然として享受し得る。換言すると、巨大ページをセカンダリメモリから読み込み巨大ページをメインメモリに書き込むために必要とされる時間は、小さなページを読み書きするために必要とされる時間よりも大きい。このため、アクセスされるべきことをリクエストされたデータを含む小さなページのみを読み込むことは、アプリケーションまたはプロセススレッドが中断される時間またはデータがセカンダリメモリからメインメモリに転送されるのを待つ時間を減らす。このため、メインメモリから転送さるデータがバックグランドにおいて典型的に動作性能に全くまたはほぼ影響せずに転送される「コールド」データのページである一方、メインメモリへと転送されるデータがアプリケーションまたはプロセススレッド実行を遅延させ得るので、データをセカンダリメモリに戻すように転送する時間よりも、データをメインメモリへと転送するための処理待ち時間を減少させることがパフォーマンスにとって重大性を有しより重要である。
【００２５】
上述のように、ページフォールトはスレッドまたは実行プログラムが仮想アドレス空間へとマップされるが、メインメモリへと実際にロードされていないメモリページにアクセスするときに起こり得る。ＭＭＵ１５０またはページフォールトハンドラは、ページフォールトを検出し得、ページフォールトが検出されたとき、メモリ内に空きページがあるかどうかの決定が行われ得る。空きページがある場合、ページデータは、セカンダリストレージからメモリ内の空きページ位置に複製され得る。空きページがない場合、ページは、たとえば、キュー内のメモリ内のすべてのページを追跡し得る、最近到着したものが後にあり、最も古く到着したものが前にあるＦＩＦＯキューから引き出され得る。そのページがダーティ、すなわち、変更されている場合、システムはページをセカンダリメモリに書き込み得る。ページをメインメモリからセカンダリメモリに転送する際に、ページに関連付けられたページテーブルエントリは、無効化され得、ページに関連付けられた任意のエントリに対してＴＬＢシャットダウンが実行され得、たとえば、ＴＬＢエントリをその他のプロセッサに対してフラッシュさせる。そのページがもはや空きであるので、ページデータは、セカンダリストレージから空きページ位置に複製され得る。ページのメインメモリ内の位置を指すように、ページテーブルは、ページに関連付けられたＰＴＥを更新することによって有効なＰＴＥを作成するために更新され得る。一旦ページフォールトが処理されると、スレッドまたは実行プログラムは、それがアクセスすることをリクエストされた今やメインメモリ内にあるデータを用いて再開し得る。
【００２６】
図３Ｂは、本開示の実装に従い割り当てられたメモリ３０５の一部の例を図示する。デマンドページングを用いて、たとえば、ある閾値アクセスレートよりも少ないレートにおいてアクセスされたデータまたは特定の期間アクセスされていないデータである「コールド」データページは、セカンダリストレージに書き出されることを要し、アプリケーションがデータにアクセスすることを試み、ページフォールトが起こるときに、データページは、メインメモリに転送され返されることを要する。ある実装に従い、メインメモリへのページインおよびそこからのページアウトのプロセスは、プロセッサの視点からシステムが巨大ページのみを用いて作動しているかのように起こる。換言すると、巨大ページは、コールドである、すなわち、頻繁に使用されないか最近使用されないときに、メインメモリから転送され得、ページがメインメモリへと転送されることを要するときに、メモリの巨大ページ全体は、割り当てられ得るが、そうであっても、巨大ページの一部のみ、たとえば、小さなページのみが初期的に転送され得る。このため、割り当てられたメモリ３０５は、巨大ページと対応し得、巨大ページに対応する連続メモリは、物理メモリ３２５および仮想メモリ３１５内に割り当てられ得る。
【００２７】
たとえば、ページフォールトが起こり、データページがメインメモリへと転送されることを要するときに、メモリの巨大ページは、まず割り当てられ得る。そして、アクセスされることをリクエストされたデータを包含する巨大ページ全体を転送するよりもむしろ、アクセスされることをリクエストされたデータを含むサブページまたは小さなデータページのみがアプリケーションによってメインメモリへと初期的に転送され得る。たとえば、アプリケーションは、バイトまたはワードにアクセスすることのみを要し得、このため、巨大ページ全体は、アプリケーションが継続するために必要とされないので、システムは、メインメモリへと、アプリケーションが実行継続に要するデータを含むデータのより小さい部分、たとえば、小さなページのみを転送し得る。その小さなページの転送の際に、リクエストされたデータがメインメモリへと転送されたか、メインメモリからアクセスされ今利用できるようになっているかを、アプリケーションに対して示すことができる。
【００２８】
その後、巨大ページ全体がメインメモリへと転送されなかったので、巨大ページの残りの部分は、メインメモリへとバックグランドにおいて転送され得る。代替的に、たとえばアクセス統計に基づき、巨大ページを小さなページへと分割することが有利であるということが決定され得、これによりページングデータ構造を単一の巨大ページからの構成要素の小さなページに変更する。アプリケーションがメインメモリへと転送されていない任意の残りの小さなページに引き続きアクセスする場合、これらの小さなページは、その時点、すなわち、ページフォールトが発生した状態でアクセスされることをリクエストされたときに、転送され得る。
【００２９】
巨大ページの残りの部分を転送し合体するか巨大ページを小さなページへと分割するかどうかに関する決定を行うために、アクセス統計は、ページの「温度」、たとえば、巨大ページ内のいくつかのページのうちの「ホット」ページおよび「コールド」ページを識別するために収集され得る。このため、ある実装に従い、メモリは、巨大ページの塊内で割り当てられ予約されるが、巨大ページは、より小さいページの塊を扱うために小さなページへと分割され得る。巨大ページが小さなページへと分割されるとき、ページテーブルは、各小さなページのためのそれぞれのＰＴＥを有して更新され得る。巨大ページが再組み立てされるとき、ページテーブルは、各々小さなページのためのそれぞれのＰＴＥを完全な巨大ページのための１つのエントリで置換することによって更新され得る。
【００３０】
ページに対するアクセス統計を収集することは、たとえば、「コールド」ページおよび「ホット」ページを決定することといった、ページのアクセスを決定する任意のプロセスまたは手段を通して達成され得る。たとえば、プロセスは、周期的に巨大ページを小さなページへと分割することと、小さなページが最後にアクセスされた時間または小さなページがアクセスされた頻度またはどれほど最近に小さなページがアクセスされたかを決定するために、ページのセットをスキャンしアクセスビットを読み込むこととと、そして一旦アクセス統計が収集されると小さなページを巨大ページへと戻すように再組み立てすることとを含み得る。このようにして、小さなページへのアクセスについての統計的データを取得するために、たとえば、サブページまたは巨大ページ内の小さなページへのアクセスのサンプルが使用され得る。
【００３１】
より詳細に、ＣＰＵオーバヘッドを要するソフトウェアは、メモリアクセスおよび処理を遅くし、そうでなければ有用ないくつかのキャッシュ情報を廃棄することになるので、ある実装では、ページテーブルスキャニング、すなわち、ページテーブルを通したスキャンは、ＣＰＵオーバヘッドを要するソフトウェアよりもむしろ、ハードウェアを介して行われ得る。一般に、ページデータのアクセスの頻度、たとえば、どのページデータがその他のページデータに比べて頻繁にアクセスされたかと、どのページデータがその他のページデータに比べて低頻度にアクセスされたかは、ページテーブルをスキャニングすることによって決定され得る。ページテーブル内にマップされる各ページ、たとえば、各ＰＴＥは、ページがアクセスされたときにはいつでも設定され、その後にＣＰＵがページテーブルをスキャニングした後に消される得るフラグまたはアクセスビットを有し得る。
【００３２】
このハードウェアは、ページテーブルウォーカ１６０またはＭＭＵ１５０を付加することによって実装され得、これは、１つまたは複数のページテーブルウォーカ、たとえば、ページテーブルを読み、自動的に仮想対物理変換をＴＬＢ１６５へとロードするための内蔵ハードウェアを含み得る。このため、ハードウェアは、プロセッサ内でページテーブルスキャニング機構を使用するプロセッサアーキテクチャの一部であり得る。たとえば、ハードウェアは、最後にスキャンされた後に各ＰＴＥにおいてアクセスビットが設定されているかを決定するために、ページテーブルを通してスキャンするためのルーチン、ＰＴＥのスキャニングを実装し得る。アクセスビットが設定されていることを決定した後に、アクセスビットは消され得、そして動作は、ページテーブルの次のスキャンまで進み得る。スキャニングは、周期的に、たとえば、スキャン間の予め定められた時間間隔を有して起こり得るか、スキャニングは、何らかの外部イベントによってトリガされ得る。アクセスビットまたはフラグが設定されていると決定される度に、各ページ対するカウントはそれぞれ増やされ得る。代替的に、アクセスビットまたはフラグが設定されていないと決定される度に、各ページそれぞれに対するカウントは増やされ得る。
【００３３】
時間を経て、スキャニングからプロファイルが作成され得、プロファイルはどれぐらいの頻度でおよび／またはどれぐらい最近に各ページがアクセスされたかを示し得る。たとえば、ハードウェアは、たとえば、設定されたアクセスビットまたはフラグのカウント等の使用状況統計を維持するために、各ページに対する１つまたは複数のカウンタまたはブルームフィルタを含み得、または結果は、２レベルのメモリといったメモリ内に記憶され得、たとえば、最も使用されているページと最も使用されていないページ、またはより高頻度でアクセスされたページとより低頻度でアクセスされたページとを、ソーティングおよびフィルタリング可能とする。より詳細に、ハードウェアは、どれほど最近にページがアクセスされたかを決定するためにページ毎カウンタを保持し得、各カウンタは、それぞれのＰＴＥがスキャンされるときに更新され得る。ページ毎カウンタは、高速アクセスのためのオンチップＳＲＡＭ内に提供され得る。代替的に、セカンダリメモリのサイズが大きく、カウンタの領域コストをより高くし得るので、ページのセットについてのアクセス統計を維持するためにブルームフィルタのカウントが使用され得、これによって領域を節約する。代替的に、ハードウェアは、少量のプライベートなＤＲＡＭを使用し得るか、カウンタをシステムＤＲＡＭ内に保存し得る。
【００３４】
したがって、たとえばアクセス統計に基づき、ページは、最も使用されたからものから最も使用されていないものへと、またはその逆に順序づけられ得る。ページフォールトが供給されるとき、メインメモリＤＲＡＭ１７０内に空きページがない場合、ページングプロセスは、最も使用されていないページのうちの１つを解放またはセカンダリメモリへと書き戻し得、新たなページをメインメモリへと転送するためにその最も使用されていないページの位置を使用し得る。
【００３５】
図４は、本開示の実装に従うメモリ管理のためのプロセス４００の例のフローチャートを図示する。プロセス４００は、４１０において、メインメモリから、第１のデータページの第１の部分内に含まれるデータにアクセスするためのリクエストを受信することを含み得る。第１のデータページは、第１のページサイズ、たとえば、巨大ページを有し得、第１の部分は、第２のページサイズ、たとえば、第１のページサイズよりも少ない小さなページを有し得る。４２０において、ページフォールトは、第１のデータページがメインメモリ内に記憶されておらずセカンダリメモリ内に記憶されているという決定に基づき、初期化され得る。さらに、ページフォールトを初期化したことに応答して、第１のページサイズ、たとえば、巨大ページに等しいメインメモリの一部は、４３０において割り当てられ得る。第１のデータページの第１の部分は、４４０において、セカンダリメモリからメインメモリの割り当てられた一部に、第１のデータページ全体を転送することなく転送され得る。このため、第１のデータページの残りの量は、セカンダリメモリ内に記憶されたままであり得る。４５０において、第１のデータページの第１の部分に関連付けられた第１のページテーブルエントリは、メインメモリの割り当てられた一部の位置を指すように更新され得、そこに第１のデータページの第１の部分が転送される。その後、第１のデータページの残りの量は、セカンダリメモリからメインメモリに、たとえば、アプリケーションが実行を継続する間にバックグランドにおいて転送され得る。
【００３６】
第１のデータページの残りの量を転送するために、第２のページサイズに対応する第１のデータページのそれぞれの部分は、セカンダリメモリからメインメモリの割り当てられた一部に第１のデータページ全体がメインメモリ内に記憶されるまで転送され得る。さらに、第１のデータページのそれぞれの部分の各々のためのそれぞれのページテーブルエントリは、メインメモリ内の第１のデータページのそれぞれの部分のそれぞれの位置を指すように更新され得る。またさらに、一旦第１のデータページ全体がメインメモリ内に記憶されると、第１のデータページは、合体され得るかセカンダリメモリからメインメモリの割り当てられた一部に転送された第１のデータページのそれぞれの部分から再組み立てされ得る。再組み立てに従って、第１のデータページに関連付けられたページテーブルエントリは、メインメモリ内の再組み立てされた第１のデータページの位置を指すように更新され得る。
【００３７】
ある実装では、第１のデータページの残りの部分をセカンダリメモリからメインメモリに転送する前に、システムは、アクセスされることをリクエストされた第１のデータページの第１の部分がメインメモリに転送されたことを示し得、これによりアクセスすることをリクエストされたアプリケーションまたはスレッドは、メインメモリ内のリクエストされたデータにアクセスすることによって実行を継続し得る。
【００３８】
メモリ管理のためのプロセスの例はまた、ページテーブルスキャナを用いたページテーブルのスキャンに基づき、ページテーブルの各ページテーブルエントリに対してアクセスビットが設定されているかを決定することを含み得る。そのようなプロセスでは、アクセスビットは、ページに関連付けられたページテーブルエントリが最後のスキャン期間内にアクセスされたかを示し得る。上述のように、少なくとも第１のページサイズを有するページうちの１つ、たとえば、巨大ページは、第２のページサイズのページ、たとえば、小さなページへと分割され得るとともに、ページテーブル内の第２のページサイズのページの各々に対してページテーブルエントリがスキャンされる。ある実装では、各ページに対するカウントは、ページに関連付けられたページテーブルエントリに対してアクセスビットが設定されていないことを決定したことに応答して増やされ得る。その後、各ページテーブルエントリに対してアクセスビットが設定されているかを決定した後に、アクセスビットはリセットされ得る。
【００３９】
ある実装では、第１のページサイズに等しいメインメモリの一部が割り当てられることができない場合に、第１のページサイズを有する最も使用されていないページの１つが各ページに対するカウントに基づき決定され得、決定された最も使用されていないページは、セカンダリメモリへと解放され得る。したがって、第１のページサイズに等しいメインメモリの一部は、解放された最も使用されていないページの１つの位置において割り当てられ得る。逆に、第１のページサイズに等しいメインメモリの一部が割り当てられることができる場合、第１のデータページの第１の部分は、セカンダリメモリからメインメモリの割り当てられた一部に転送され得る。
【００４０】
より詳細に、たとえば、メインメモリが空きページを有さずページ転送を受信できない場合、メインメモリ内の最も使用されていないページの１つが各ページに対するカウントに基づき決定され得る。ページフォールトハンドラまたはコントローラは、ページ転送を管理し得、決定された最も使用されていないページの１つは、解放され得るか、セカンダリメモリへと書き戻される。さらに、アクセスがリクエストされたデータページは、セカンダリメモリからメインメモリに解放された最も使用されていないページの１つの位置において転送され得る。代替的に、メインメモリが空きページを有し、ページ転送を受信できる場合、ページフォールトハンドラまたはコントローラは、セカンダリメモリからメインメモリにページデータを転送することを管理し得る。
【００４１】
ある実装形態では、ページフォールトが初期化されたとき、スレッドの実行または実行プログラムが開始されると同時に、データ転送は、上述のようにページフォールトを供給するように管理される。その後、スレッドは、ページフォールトが供給された後にメインメモリ内のページにアクセスするために解放され得る。
【００４２】
ある実装では、セカンダリメモリ内のどのページが「ホット」になりつつあるか、すなわち、アクセス頻度が増加しているかを決定するだけでなく、メインメモリＤＲＡＭ内のどのページが「コールド」になりつつあるか、すなわち、アクセス頻度を減らしているか決定することが有利である。換言すると、メインメモリよりも遅くあり得るセカンダリメモリ内でどのページがより高頻度でアクセスされたかを決定することと、メインメモリ内でどのページがより低頻度でアクセスされたかを決定することである。メインメモリ内でどのページがより低頻度でアクセスされたかを決定するための１つのプロセスが、設定されているアクセスビットのカウントに基づくＤＲＡＭ等のメインメモリに対する使用状況またはアクセス統計等を参照し上述された。システムは、メインメモリに対して上述されたアクセス統計に基づきいつデータをメインメモリからセカンダリメモリに移動すべきかと、いつデータをセカンダリメモリからメインメモリに移動すべきかとを決定し得る。
【００４３】
加えて、より詳細に上述されたように、コールドになりつつある、またはより低頻度でアクセスされたページは、ＰＴＥを監視することによって決定され得る。たとえば、ページに対するアクセス時間間隔がアクセス時間間隔閾値を満たすとき、システムは、ページに関連付けられたＰＴＥを無効化することによって、メインメモリからセカンダリメモリへのページの転送を初期化し得、ページに関連付けられた任意のエントリに対してＴＬＢシャットダウンを実行し、ページをメインメモリからセカンダリメモリへと転送する。
【００４４】
ある実装に従い、キャッシュコヒーレント相互接続を用いて、ＤＲＡＭキャッシュおよび第２ティアのメモリは、コヒーレントメモリのオーナーとしておよびコヒーレントメモリのユーザの両方として機能し得るハードウェアによって管理され得る。換言すると、ＤＲＡＭは、最適な性能のための構成可能な粒度におけるページングのために、ハードウェアによって管理されるキャッシュとして機能する。最適なパフォーマンスのための構成可能な粒度は、アプリケーションローカリティおよび第２ティアのメモリのパフォーマンスに依存し得る。
【００４５】
カスタマイズされたカーネルドライバは、上述のように、ハードウェアによって所有されたアドレス空間を巨大ページのみにマップし得る。このようにして、システムは、システムがこのメモリの領域にアクセスするときにはいつでも、より大きなＴＬＢ到達範囲による改善されたパフォーマンスといった巨大ページの利点を達成し得る。ハードウェアは、ページがメインメモリ内に存在するかをチェックするためにキャッシュルックアップ構造を保持し得る。ホストからメモリアクセスが受信されたときに、このルックアップ構造は、問い合わせされ得る。ページが存在する場合、読み書きは直接メインメモリ内で行われ得る。ページが存在しない場合、データはセカンダリメモリからＤＲＡＭ等のメインメモリへとフェッチされ得る。ある実装では、パフォーマンスの考慮のため、キャッシュは、退避を非同期に行い得、たとえば、「コールド」データは、到来ページに供給される最小数の空きページを保持するためにセカンダリストレージにバックグランドにおいて書き戻され得る。一般に、このプロセスは、ページングのためのキャッシュがキャッシュコヒーレント相互接続を用いて提供され得るように、ページレベルにおいてキャッシング機構を提供し得る。
【００４６】
ある実装では、キャッシュ最適化が適用され得る。たとえば、ページフォールトが起こり、ページがセカンダリストレージからメインメモリに転送されるときに、システムは、ページをメインメモリ内に保つべきか、またはページが非一時的である場合に、所与のアクセスのためにページをストリーミングしそれを一度読み込むべきか、現在フェッチされているページがアクセスされたことに応答して次のページをフェッチすることを決定することによって事前フェッチングを行うべきかを決定し得る。ある実装では、アプリケーションがメモリをどのように使用しているかに関してフラグが設定され得、これらのフラグに基づき事前フェッチングのための決定が行われ得る。
【００４７】
いくつかの実装が説明されてきた。しかし、本開示の精神および範囲から逸脱することなくさまざまな変形がなされ得ることが理解されるであろう。例えば、ステップの順序を変えたり、追加したり、削除したりして、上に示したさまざまな形式のフローが使用され得る。
【００４８】
本発明の実装および本明細書に開示されたすべての機能動作は、本明細書に開示された構造およびそれらの構造上の均等物またはそれらの１つまたは複数の組み合わせを含むデジタル電子回路、ファームウェア、またはハードウェアにおいて実装されることができる。本発明の実装は、データ処理装置による実行のためにまたはその動作を制御するためのコンピュータ可読媒体上に符号化された１つまたは複数のプログラム製品、すなわちコンピュータプログラム命令の１つまたは複数のモジュールとして実行されることができる。コンピュータ可読媒体は、機械可読記憶装置、機械可読記憶基板、メモリデバイス、またはそれらのうちの１つまたは複数の組合せとされることができる。「データ処理装置」という用語は、例としてプログラマブルプロセッサ、コンピュータ、または複数のプロセッサもしくは複数のコンピュータを含む、データを処理するためのすべての装置、デバイス、および機械を包含する。装置は、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を作成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの１つまたは複数の組み合わせを構成するコードを含むことができる。
【００４９】
本開示は多くの詳細を含むが、これらは、本発明の範囲または特許請求され得るものに対する限定として解釈されるべきではなく、むしろ本発明の特定の実装に特有の機能の説明として解釈されるべきである。本明細書において別々の実装の文脈で説明されている特定の機能は、単一の実装において組み合わせて実装されることもできる。逆に、単一の実施形態の文脈で説明されているさまざまな機能は、別々に複数の実施形態でまたは任意の適切なサブコンビネーションで実施されることもできる。さらに、機能は、特定の組み合わせで作用するものとして上に記載され当初にそのように特許請求の範囲に記載され得るが、主張された組み合わせからの１つまたは複数の機能は、時には組み合わせから除外されることができ、特許請求の範囲に記載された組み合わせは、サブコンビネーションまたはサブコンビネーションの変形に向けられ得る。
【００５０】
同様に、動作は特定の順序で図面に描かれているが、望ましい結果を達成するためにそのような動作が示された特定の順序または順番に実行されること、または示されたすべての動作が実行されることを必要とすると理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利な場合があり得る。さらに、上述の実装におけるさまざまなシステム構成要素の分離は、すべての実装においてそのような分離を必要とすると理解されるべきではなく、説明されるプログラム構成要素およびシステムは、一般に単一のソフトウェア製品に統合されるかまたは複数のソフトウェア製品へとパッケージ化されることができる。
【００５１】
このように、本開示の特定の実装が説明された。その他の実施形態は、以下の特許請求の範囲内にある。たとえば、請求項に記載されている動作は、異なる順序で実行されても依然として望ましい結果を達成することができる。いくつかの実装が説明された。しかし、本開示の精神および範囲から逸脱することなくさまざまな変形がなされ得ることが理解されるであろう。例えば、ステップの順序を変えたり、追加したり、削除したりして、上に示したさまざまな形式のフローを使用がされ得る。したがって、他の実装は、以下の特許請求の範囲内にある。
【図１】
2019532450.tif 000003
【図２】
2019532450.tif 000004
【図３Ａ】
2019532450.tif 000005
【図３Ｂ】
2019532450.tif 000006
【図４】
2019532450.tif 000007
【国際調査報告】
2019532450.tif 000008
2019532450.tif 000009
2019532450.tif 000010