(57)【要約】【課題】実行中のアプリケーションまたはプロセスをより高速で実行するための方法、システムおよび装置を提供する。【解決手段】ページテーブルエントリに関連付けられたページが最後のスキャン期間にアクセスされたか否かを示すアクセスビットがページテーブルの各ページテーブルエントリ毎に設定されているか否かを少なくとも１つのページテーブルウォーカでのページテーブルのスキャンに基づいて判断し、アクセスビットがページに関連付けられたページテーブルエントリ毎に設定されているとの判断に応じて各ページ毎にカウントをインクリメントし、アクセスビットが各ページテーブルエントリ毎に設定されているか否かの判断後にアクセスビットをリセットし、データの第１のページへのアクセス要求をメインメモリから受取り、データの第１のページがメインメモリに格納されていないとの判断に基づいてページフォルトを開始し、ＤＭＡエンジンでページフォルトを処理する。【選択図】図１
2020009492.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実現される方法であって、
ページテーブルスキャナでのページテーブルのスキャンに基づいて、アクセスビットが前記ページテーブルの各ページテーブルエントリ毎に設定されているかどうかを、プロセッサで判断するステップを含み、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間においてアクセスされたかどうかを示しており、前記方法はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリ毎に設定されていないと判断したことに応じて、各ページ毎にカウントをインクリメントするステップと、
前記アクセスビットが各ページテーブルエントリ毎に設定されているかどうかを前記プロセッサで判断した後、前記アクセスビットをリセットするステップと、
データの第１のページにアクセスするようにとの要求をメインメモリから受取るステップと、
前記データの第１のページが前記メインメモリに格納されていないと判断したことに基づいて、ページフォルトを開始するステップと、
ダイレクトメモリアクセス（ＤＭＡ）エンジンを用いて前記ページフォルトを処理するステップとを含み、
ＤＭＡエンジンを用いて前記ページフォルトを処理する前記ステップは、
前記メインメモリがページ転送を受取ることができないと判断したことに応じて、各ページ毎の前記カウントに基づいて特定のページを決定し、前記二次メモリに前記特定のページをリリースし、前記リリースされた特定のページの位置において、前記データの第１のページを前記二次メモリから前記メインメモリに転送するステップを含む、方法。
【請求項２】
前記特定のページは、各ページ毎の前記カウントに基づいて、使用頻度が最も低いページのうちの１つであると判断される、請求項１に記載の方法。
【請求項３】
前記ページフォルトを開始する前記ステップは、前記ページフォルトが処理されている間、スレッドの実行をストールさせるステップと、
前記ページフォルトが処理された後、前記メインメモリにアクセスするために前記スレッドをリリースするステップとを含む、請求項１に記載の方法。
【請求項４】
各ページ毎の前記カウントは、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される、請求項１に記載の方法。
【請求項５】
システムであって、
１つ以上のプロセッサと、
メインメモリおよび二次メモリを含むメモリとを含み、前記メモリは、実施可能な命令を格納しており、前記命令は、実行されると、前記１つ以上のプロセッサに以下の動作を実行させ、前記以下の動作は、
ページテーブルスキャナでのページテーブルのスキャンに基づいて、アクセスビットが前記ページテーブルの各ページテーブルエントリ毎に設定されているかどうかを、プロセッサで判断する動作を含み、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間においてアクセスされたかどうかを示しており、前記以下の動作はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリ毎に設定されていないと判断したことに応じて、各ページ毎にカウントをインクリメントする動
作と、
前記アクセスビットが各ページテーブルエントリ毎に設定されているかどうかを前記プロセッサで判断した後、前記アクセスビットをリセットする動作と、
データの第１のページにアクセスするようにとの要求をメインメモリから受取る動作と、
前記データの第１のページが前記メインメモリに格納されていないと判断したことに基づいて、ページフォルトを開始する動作と、
ダイレクトメモリアクセス（ＤＭＡ）エンジンを用いて前記ページフォルトを処理する動作とを含み、
ＤＭＡエンジンを用いて前記ページフォルトを処理する前記動作は、
前記メインメモリがページ転送を受取ることができないと判断したことに応じて、各ページ毎の前記カウントに基づいて特定のページを決定し、前記特定のページを前記二次メモリにリリースし、前記リリースされた特定のページの位置において、前記データの第１のページを前記二次メモリから前記メインメモリに転送する動作を含む、システム。
【請求項６】
前記特定のページは、各ページ毎の前記カウントに基づいて、使用頻度が最も低いページのうちの１つであると判断される、請求項５に記載のシステム。
【請求項７】
前記ページフォルトを開始する前記動作は、
前記ページフォルトが処理されている間、スレッドの実行をストールさせる動作と、
前記ページフォルトが処理された後、前記メインメモリにアクセスするために前記スレッドをリリースする動作とを含む、請求項５に記載のシステム。
【請求項８】
各ページ毎の前記カウントは、
スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される、請求項５に記載のシステム。
【請求項９】
コンピュータによって実現される方法であって、
少なくとも１つのページテーブルウォーカでのページテーブルのスキャンに基づいて、アクセスビットが前記ページテーブルの各ページテーブルエントリ毎に設定されているかどうかを判断するステップを含み、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間においてメインメモリにおいてアクセスされたかどうかを示しており、前記方法はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリ毎に設定されていないと判断したことに応じて、前記メインメモリにおける各ページ毎に一次カウントをインクリメントするステップと、
前記アクセスビットが各ページテーブルエントリ毎に設定されているかどうかを判断した後、前記アクセスビットをリセットするステップと、
ホームエージェントが二次メモリにおけるページにアクセスするようにとの要求を受取ったことに基づいて、前記二次メモリにおける前記ページがアクセスされるかどうかを判断するステップと、
前記ホームエージェントが前記二次メモリにおける前記ページにアクセスするようにとの要求を受取ったことに基づいて、前記二次メモリにおける前記ページがアクセスされると判断したことに応じて、前記二次メモリにおける各ページ毎に二次カウントをインクリメントするステップと、
前記二次カウントに基づいて、前記二次メモリにおける特定のページを頻繁にアクセスされるものとして識別するステップと、
頻繁にアクセスされるものとして識別された前記特定のページを前記二次メモリから前
記メインメモリに移行するステップとを含む、方法。
【請求項１０】
前記メインメモリにおける或るページを、前記一次カウントに基づいて、希にしかアクセスされないものとして識別するステップと、
希にしかアクセスされないものとして識別された前記或るページを、前記メインメモリから前記二次メモリに移行するステップとをさらに含む、請求項９に記載の方法。
【請求項１１】
希にしかアクセスされないものとして識別された前記或るページを移行する前記ステップは、前記或るページに関連付けられた前記ページテーブルエントリを無効にし、前記或るページに関連付けられたいずれかのエントリのためにトランスレーション・ルックアサイド・バッファ・シュートダウンを実行し、前記或るページを前記メインメモリから前記二次メモリに転送するステップを含む、請求項１０に記載の方法。
【請求項１２】
前記メインメモリにおける各ページ毎の前記一次カウントおよび前記二次メモリにおける各ページ毎の前記二次カウントの各々は、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される、請求項９に記載の方法。
【請求項１３】
前記一次カウントに基づいて、前記メインメモリにおける或るページを、希にしかアクセスされないものとして識別するステップは、前記或るページについての相互アクセス時間が相互アクセス時間しきい値を満たすと判断するステップを含む、請求項１０に記載の方法。
【請求項１４】
前記或るページについての前記相互アクセス時間が前記相互アクセス時間しきい値を満たすと判断したことに応じて、希にしかアクセスされないものとして識別された前記或るページが、前記メインメモリから前記二次メモリに移行される、請求項１３に記載の方法。
【請求項１５】
システムであって、
１つ以上のプロセッサと、
メインメモリおよび二次メモリを含むメモリとを含み、前記メモリは、実施可能な命令を格納しており、前記命令は、実行されると、前記１つ以上のプロセッサに以下の動作を実行させ、前記以下の動作は、
少なくとも１つのページテーブルウォーカでのページテーブルのスキャンに基づいて、アクセスビットが前記ページテーブルの各ページテーブルエントリ毎に設定されているかどうかを判断する動作を含み、前記アクセスビットは、前記ページテーブルエントリに関連付けられたページが最後のスキャン期間においてメインメモリにおいてアクセスされたかどうかを示しており、前記以下の動作はさらに、
前記アクセスビットが前記ページに関連付けられた前記ページテーブルエントリ毎に設定されていないと判断したことに応じて、前記メインメモリにおける各ページ毎に一次カウントをインクリメントする動作と、
前記アクセスビットが各ページテーブルエントリ毎に設定されているかどうかを判断した後、前記アクセスビットをリセットする動作と、
ホームエージェントが二次メモリにおけるページにアクセスするようにとの要求を受取ったことに基づいて、前記二次メモリにおける前記ページがアクセスされるかどうかを判断する動作と、
前記ホームエージェントが前記二次メモリにおける前記ページにアクセスするようにとの要求を受取ったことに基づいて、前記二次メモリにおける前記ページがアクセスされると判断したことに応じて、前記二次メモリにおける各ページ毎に二次カウントをインクリ
メントする動作と、
前記二次カウントに基づいて、前記二次メモリにおける特定のページを頻繁にアクセスされるものとして識別する動作と、
頻繁にアクセスされるものとして識別された前記特定のページを前記二次メモリから前記メインメモリに移行する動作とを含む、システム。
【請求項１６】
前記動作はさらに、
前記一次カウントに基づいて、前記メインメモリにおける或るページを、希にしかアクセスされないものとして識別する動作と、
希にしかアクセスされないものとして識別された前記或るページを、前記メインメモリから前記二次メモリに移行する動作とを含む、請求項１５に記載のシステム。
【請求項１７】
希にしかアクセスされないものとして識別された前記或るページを移行する前記動作は、
前記或るページに関連付けられた前記ページテーブルエントリを無効にし、前記或るページに関連付けられたいずれかのエントリのためのトランスレーション・ルックアサイド・バッファ・シュートダウンを実行し、前記或るページを前記メインメモリから前記二次メモリに転送する動作を含む、請求項１６に記載のシステム。
【請求項１８】
前記メインメモリにおける各ページ毎の前記一次カウントおよび前記二次メモリにおける各ページ毎の前記二次カウントの各々は、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される、請求項１５に記載のシステム。
【請求項１９】
前記一次カウントに基づいて、前記メインメモリにおける或るページを、希にしかアクセスされないものとして識別する動作は、前記或るページについての相互アクセス時間が相互アクセス時間しきい値を満たすと判断する動作を含む、請求項１６に記載のシステム。
【請求項２０】
前記或るページについての前記相互アクセス時間が前記相互アクセス時間しきい値を満たすと判断したことに応じて、希にしかアクセスされないものとして識別された前記或るページが、前記メインメモリから前記二次メモリに移行される、請求項１９に記載のシステム。
【請求項２１】
コンピュータによって実現される方法であって、
データのページの第１のキャッシュラインにアクセスするようにとの要求をメインメモリから受取るステップと、
前記第１のキャッシュラインが前記メインメモリに格納されず、二次メモリに格納されていると判断するステップと、これに応じて、
データのページ全体を転送することなく、前記データのページの前記第１のキャッシュラインを前記二次メモリから前記メインメモリに転送するステップとを含み、前記データのページの残余部分は前記二次メモリに格納されたままであり、前記方法はさらに、
前記データのページに関連付けられたページテーブルエントリを更新して、前記メインメモリにおける前記データのページの位置を示すステップと、
前記データのページの前記残余部分を前記二次メモリから前記メインメモリに転送するステップとを含む、方法。
【請求項２２】
キャッシュ・コヒーレンシ・メカニズムは、前記データのページの第２のキャッシュラインのアクセスを処理するために、前記データのページの前記残余部分を前記二次メモリ
から前記メインメモリに転送する間に、実現される、請求項２１に記載の方法。
【請求項２３】
前記キャッシュ・コヒーレンシ・メカニズムは、
前記データのページにおけるキャッシュラインの所有権についての要求を、キャッシュエージェントによって発行するステップと、
前記キャッシュラインが前記二次メモリから前記メインメモリに転送されていることに応じて各キャッシュラインの所有権をリリースするステップとを含む、請求項２２に記載の方法。
【請求項２４】
前記キャッシュエージェントのキャッシュに前記データのページのキャッシュラインを格納するステップをさらに含む、請求項２３に記載の方法。
【請求項２５】
前記データのページのキャッシュラインに関連付けられたタグおよびコヒーレンス状態ビットを格納するステップをさらに含む、請求項２３に記載の方法。
【請求項２６】
前記データのページの前記残余部分が転送されている間に、前記データのページの前記第２のキャッシュラインにアクセスするようにとの要求に応じて、前記第２のキャッシュラインについてのスヌープ要求を認識し、前記第２のキャッシュラインが前記二次メモリから転送されると前記スヌープ要求に応じて前記第２のキャッシュラインを戻すステップをさらに含む、請求項２３に記載の方法。
【請求項２７】
前記メインメモリがページ転送を受取ることができない場合、前記メインメモリに格納された使用頻度が最も低いページのうちの１ページを決定し、前記使用頻度が最も低いページのうちの前記１ページを前記二次メモリにリリースし、前記使用頻度が最も低いページのうちリリースされた前記１ページの位置において、前記データのページを前記二次メモリから前記メインメモリに転送するステップをさらに含む、請求項２１に記載の方法。
【請求項２８】
システムであって、
１つ以上のプロセッサと、
実施可能な命令を格納する１つ以上の記憶装置とを備え、前記命令は、前記１つ以上のプロセッサによって実行されると、前記１つ以上のプロセッサに以下の動作を実行させ、前記以下の動作は、
データのページの第１のキャッシュラインにアクセスするようにとの要求をメインメモリから受取る動作と、
前記第１のキャッシュラインが前記メインメモリに格納されず、二次メモリに格納されていると判断する動作と、
データのページ全体を転送することなく、前記データのページの前記第１のキャッシュラインを前記二次メモリから前記メインメモリに転送する動作とを含み、前記データのページの残余部分は前記二次メモリに格納されたままであり、前記以下の動作はさらに、
前記データのページに関連付けられたページテーブルエントリを更新して、前記メインメモリにおける前記データのページの位置を示す動作と、
前記データのページの前記残余部分を前記二次メモリから前記メインメモリに転送する動作とを含む、システム。
【請求項２９】
キャッシュ・コヒーレンシ・メカニズムは、前記データのページの第２のキャッシュラインのアクセスを処理するために、前記データのページの前記残余部分を前記二次メモリから前記メインメモリに転送する間に、実現される、請求項２８に記載のシステム。
【請求項３０】
前記キャッシュ・コヒーレンシ・メカニズムは、
前記データのページにおけるキャッシュラインの所有権についての要求をキャッシュエ
ージェントによって発行することと、
前記キャッシュラインが前記二次メモリから前記メインメモリに転送されていることに応じて各キャッシュラインの所有権をリリースすることとを含む、請求項２９に記載のシステム。
【請求項３１】
前記動作はさらに、
前記キャッシュエージェントのキャッシュに前記データのページのキャッシュラインを格納することを含む、請求項３０に記載のシステム。
【請求項３２】
前記動作はさらに、
前記データのページのキャッシュラインに関連付けられたタグおよびコヒーレンス状態ビットを格納することを含む、請求項３０に記載のシステム。
【請求項３３】
前記動作はさらに、
前記データのページの前記残余部分が転送されている間に、前記データのページの前記第２のキャッシュラインにアクセスするようにとの要求に応じて、前記第２のキャッシュラインについてのスヌープ要求を認識し、前記第２のキャッシュラインが前記二次メモリから転送されると前記スヌープ要求に応じて前記第２のキャッシュラインを戻すことを含む、請求項３０に記載のシステム。
【請求項３４】
前記動作はさらに、
前記メインメモリがページ転送を受取ることができない場合、前記メインメモリに格納された使用頻度が最も低いページのうちの１ページを決定し、前記使用頻度が最も低いページのうちの前記１ページを前記二次メモリにリリースし、前記使用頻度が最も低いページのうちリリースされた前記１ページの位置において、前記データのページを前記二次メモリから前記メインメモリに転送することを含む、請求項２８に記載のシステム。
【請求項３５】
１つ以上のプロセッサによって実行可能な命令を格納しているコンピュータ読取可能記憶装置であって、前記命令は、実行されると、前記１つ以上のプロセッサに以下の動作を実行させ、前記以下の動作は、
データのページの第１のキャッシュラインにアクセスするようにとの要求をメインメモリから受取ることと、
前記第１のキャッシュラインが前記メインメモリに格納されず、二次メモリに格納されていると判断することと、
データのページ全体を転送することなく、前記データのページの前記第１のキャッシュラインを前記二次メモリから前記メインメモリに転送することとを含み、前記データのページの残余部分は前記二次メモリに格納されたままであり、前記以下の動作はさらに、
前記データのページに関連付けられたページテーブルエントリを更新して、前記メインメモリにおける前記データのページの位置を示すことと、
前記データのページの前記残余部分を前記二次メモリから前記メインメモリに転送することとを含む、コンピュータ読取可能記憶装置。
【請求項３６】
キャッシュ・コヒーレンシ・メカニズムは、前記データのページの第２のキャッシュラインのアクセスを処理するために、前記データのページの前記残余部分を前記二次メモリから前記メインメモリに転送する間に、実現される、請求項３５に記載のコンピュータ読取可能記憶装置。
【請求項３７】
前記キャッシュ・コヒーレンシ・メカニズムは、
前記データのページにおけるキャッシュラインの所有権についての要求を、キャッシュエージェントによって発行することと、
前記キャッシュラインが前記二次メモリから前記メインメモリに転送されていることに応じて各キャッシュラインの所有権をリリースすることとを含む、請求項３６に記載のコンピュータ読取可能記憶装置。
【請求項３８】
前記動作はさらに、
（ｉ）前記キャッシュエージェントのキャッシュにおける前記データのページのキャッシュライン、または、（ｉｉ）前記データのページのキャッシュラインに関連付けられたタグおよびコヒーレンス状態ビット、のうち１つを格納することを含む、請求項３７に記載のコンピュータ読取可能記憶装置。
【請求項３９】
前記動作はさらに、
前記データのページの前記残余部分が転送されている間に、前記データのページの前記第２のキャッシュラインにアクセスするようにとの要求に応じて、前記第２のキャッシュラインについてのスヌープ要求を認識し、前記第２のキャッシュラインが前記二次メモリから転送されると前記スヌープ要求に応じて前記第２のキャッシュラインを戻すことを含む、請求項３７に記載のコンピュータ読取可能記憶装置。
【請求項４０】
前記動作はさらに、
前記メインメモリがページ転送を受取ることができない場合、前記メインメモリに格納された使用頻度が最も低いページのうちの１ページを決定し、前記使用頻度が最も低いページのうちの前記１ページを前記二次メモリにリリースし、前記使用頻度が最も低いページのうちリリースされた前記１ページの位置において、前記データのページを前記二次メモリから前記メインメモリに転送することを含む、請求項３５に記載のコンピュータ読取可能記憶装置。
【請求項４１】
請求項１から４、９から１３、および２１から２７のいずれか一項に記載の前記方法をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
分野
本明細書は、概してメモリシステムに関する。
【背景技術】
【０００２】
背景
さまざまなコンピュータおよび同様のシステムのためのデータおよび命令を維持して格納するために、多種多様なメモリデバイスを用いることができる。従来のコンピューティングシステムにおいては、典型的には、アプリケーションを高速で動作させるために、コンピュータのダイナミックメモリを動作させるためのダイナミックランダムアクセスメモリ（Dynamic Random Access Memory：ＤＲＡＭ）技術が用いられてきた。しかしながら、コンピュータシステムにおいてメインメモリとして用いられるＤＲＡＭは、もはや、過去におけるほど速やかに基準化されていない。結果として、ＤＲＡＭストレージはコンピューティング環境においては限られたリソースになっている。
【０００３】
ＤＲＡＭとＮＡＮＤフラッシュなどのより低速の技術との間の性能のギャップを埋める不揮発性メモリなどの二番手のメモリが用いられる可能性もある。この二番手のメモリは、メモリもしくはＩＯバスを介してローカルにアクセスされ得るか、または高速ネットワークを介して遠隔でアクセスされ得る。しかしながら、アプリケーションがデータ配置を明確に管理する必要があるか、または、システムが、メモリ層同士の間でデータをトランスペアレントに移動させる自動管理を行なわなければならなくなる。このため、より低速の記憶装置のために設計された既存の技術の不備点を克服するために、性能に対する影響を最小限に抑えた自動管理のための新しい技術が必要とされている。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
この明細書に記載される主題の革新的な一局面が具体化されるシステムおよび方法は、プロセッサの少なくとも１つのページテーブルウォーカでのページテーブルのスキャンに基づいて、アクセスビットがページテーブルの各ページテーブルエントリ毎に設定されているかどうかを、プロセッサで判断することを含む。アクセスビットは、ページテーブルエントリに関連付けられたページが最後のスキャン期間においてアクセスされたかどうかを示している。当該システムおよび方法はさらに、アクセスビットがページに関連付けられたページテーブルエントリ毎に設定されていないと判断したことに応じて、各ページ毎にカウントをインクリメントすることと、アクセスビットが各ページテーブルエントリ毎に設定されているかどうかをプロセッサで判断した後、アクセスビットをリセットすることと、データの第１のページにアクセスするようにとの要求をメインメモリから受取ることと、データの第１のページがメインメモリに格納されていないと判断したことに基づいて、ページフォルトを開始することと、ダイレクトメモリアクセス（direct memory access：ＤＭＡ）エンジンを用いてページフォルトを処理することとを含む。
【０００５】
いくつかの実現例においては、ＤＭＡエンジンを用いてページフォルトを処理することは、メインメモリがページ転送を受取ることができない場合、各ページ毎のカウントに基づいて使用頻度が最も低いページのうちの１つを決定し、使用頻度が最も低いページのうちの１つを二次メモリにリリースし、使用頻度が最も低いページのうちリリースされた１つのページの位置において、第１のページデータを二次メモリからメインメモリに転送することと、メインメモリがページ転送を受取ることができる場合、第１のページデータを
二次メモリからメインメモリに転送することとを含む。
【０００６】
いくつかの実現例においては、ページフォルトを開始することは、ページフォルトが処理されている間にスレッドの実行をストールさせることと、ページフォルトが処理された後、メインメモリにアクセスするためにスレッドをリリースすることとを含む。さらに、いくつかの実現例においては、各ページ毎のカウントは、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される。
【０００７】
この明細書に記載される主題の革新的な一局面が具体化されるシステムおよび方法は、少なくとも１つのページテーブルウォーカでのページテーブルのスキャンに基づいて、アクセスビットがページテーブルの各ページテーブルエントリ毎に設定されているかどうかを判断することを含む。アクセスビットは、ページテーブルエントリに関連付けられたページが最後のスキャン期間においてメインメモリにおいてアクセスされたかどうかを示している。当該システムおよび方法はさらに、アクセスビットがページに関連付けられたページテーブルエントリ毎に設定されていないと判断したことに応じて、メインメモリにおける各ページ毎に一次カウントをインクリメントすることと、アクセスビットが各ページテーブルエントリ毎に設定されているかどうかを判断した後、アクセスビットをリセットすることと、ホームエージェントが二次メモリにおけるページにアクセスするようにとの要求を受取ったことに基づいて、二次メモリにおけるページがアクセスされるかどうかを判断することと、ホームエージェントが二次メモリにおけるページにアクセスするようにとの要求を受取ったことに基づいて、二次メモリにおけるページがアクセスされると判断したことに応じて、二次メモリにおける各ページ毎に二次カウントをインクリメントすることと、二次カウントに基づいて、二次メモリにおける特定のページを頻繁にアクセスされるものとして識別することと、頻繁にアクセスされるものとして識別された特定のページを二次メモリからメインメモリに移行する（migrating）こととを含む。
【０００８】
この明細書に記載される主題の別の局面が具体化され得るシステムおよび方法は、メインメモリにおける或るページを、一次カウントに基づいて、希にしかアクセスされないものとして識別することと、希にしかアクセスされないものとして識別された或るページをメインメモリから二次メモリに移行することとを含む。加えて、希にしかアクセスされないものとして識別された或るページを移行することは、或るページに関連付けられたページテーブルエントリを無効にし、或るページに関連付けられたいずれかのエントリのためにトランスレーション・ルックアサイド・バッファのシュートダウンを実行し、或るページをメインメモリから二次メモリに転送することを含む。
【０００９】
いくつかの実現例においては、メインメモリにおける各ページ毎の一次カウントおよび二次メモリにおける各ページ毎の二次カウントの各々は、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタ、カウンティング・ブルーム・フィルタ、または、ダイナミックランダムアクセスメモリに格納された各ページ毎のカウンタ、のうち少なくとも１つによって維持される。
【００１０】
いくつかの実現例においては、一次カウントに基づいて、メインメモリにおける或るページを希にしかアクセスされないものとして識別することは、或るページについての相互アクセス時間が相互アクセス時間しきい値を満たすと判断することを含む。加えて、いくつかの実現例においては、或るページについての相互アクセス時間が相互アクセス時間しきい値を満たすと判断したことに応じて、希にしかアクセスされないものとして識別された或るページがメインメモリから二次メモリに移行される。
【００１１】
この明細書に記載される主題の別の革新的な局面が具体化されるシステム、方法および装置は、データのページの第１のキャッシュラインにアクセスするようにとの要求をメインメモリから受取ることと、第１のキャッシュラインがメインメモリに格納されているのではなく二次メモリに格納されていると判断することとを含む。第１のキャッシュラインがメインメモリに格納されているのではなく二次メモリに格納されていると判断したことに応じて、データのページ全体を転送することなく、データのページの残余部分が二次メモリに格納されたままで、データのページの第１のキャッシュラインを二次メモリからメインメモリに転送することと、データのページに関連付けられたページテーブルエントリを更新して、メインメモリにおけるデータのページの位置を示すことと、データのページの残余部分を二次メモリからメインメモリに転送することとを含む。
【００１２】
いくつかの実現例においては、キャッシュ・コヒーレンシ・メカニズムは、データのページの第２のキャッシュラインのアクセスを処理するために、データのページの残余部分を二次メモリからメインメモリに転送している間に、実現される。
【００１３】
いくつかの実現例においては、キャッシュ・コヒーレンシ・メカニズムは、データのページにおけるキャッシュラインの所有権についての要求を、キャッシュエージェントによって発行することと、キャッシュラインが二次メモリからメインメモリに転送されていることに応じて、各キャッシュラインの所有権を解放することとを含む。
【００１４】
いくつかの実現例においては、システム、方法および装置は、キャッシュエージェントのキャッシュにデータのページのキャッシュラインを格納することを含む。いくつかの実現例においては、システム、方法および装置は、データのページのキャッシュラインに関連付けられたタグおよびコヒーレンス状態ビットを格納することを含む。
【００１５】
この明細書に記載される主題の別の局面が具体化され得るシステム、方法および装置は、データのページの残余部分が転送されている間にデータのページの第２のキャッシュラインにアクセスするようにとの要求に応じて、第２のキャッシュラインについてのスヌープ要求を認識し、第２のキャッシュラインが二次メモリから転送されるとスヌープ要求に応じて第２のキャッシュラインを戻すことを含む。
【００１６】
この明細書に記載される主題のさらに別の局面が具体化され得るシステム、方法および装置は、メインメモリがページ転送を受取ることができない場合、メインメモリに格納された使用頻度が最も低いページのうちの１つを決定し、使用頻度が最も低いページのうちの１つを二次メモリに解放して、使用頻度が最も低いページのうち解放された１つのページの位置において、データのページを二次メモリからメインメモリに転送することを含む。
【００１７】
これらの局面の他の実施形態は、上記方法の動作を実行するように構成された対応するシステムと、装置と、コンピュータ記憶装置上で符号化されるコンピュータプログラムとを含む。
【００１８】
この明細書に記載される主題の特定の実施形態は以下の利点のうち１つ以上を達成するように実現することができる。たとえば、ハードウェアによって決定されるメモリ内のページについての使用統計またはアクセス統計は、ソフトウェアおよびサンプリング技術を必要とする現在の方法よりも精密かつ正確であり得る。さらに、データの全ページではなく、最初にアクセスが要求される特定のキャッシュラインを転送することにより、ページにアクセスするようにとの要求に応じてページを転送することによって生じる遅延が少なくなる可能性があり、結果として、実行されているアプリケーションまたはプロセスがより高速で実行されることになり得る。
【００１９】
本発明の１つ以上の実施形態の詳細を添付の図面および以下の記載において説明する。本発明の他の特徴および利点は、以下の記載、添付の図面および添付の特許請求の範囲から明らかになるだろう。
【００２０】
添付のさまざまな図面における同様の参照番号および符号は同様の要素を示している。
【図面の簡単な説明】
【００２１】
【図１】本開示の実現例に従ったメモリデバイスを含むシステムの一例を示す図である。
【図２】本開示の実現例に従ったメモリデバイスを含むシステムの一例を示す図である。
【図３Ａ】本開示の実現例に従った、ページフォルトを処理するためのプロセスの一例を示すフローチャートである。
【図３Ｂ】本開示の実現例に従った、ライトバックスレッドのためのプロセスの一例を示すフローチャートである。
【図４】本開示の実現例に従った、ページの使用頻度をハードウェアで判断し、ＤＭＡエンジンを用いてページフォルトを処理するためのプロセスの一例を示すフローチャートである。
【図５】本開示の実現例に従った、ページの使用頻度をハードウェアで判断し、判断された使用頻度に基づいてページマイグレーション（page migration）を実行するためのプロセスの一例を示すフローチャートである。
【図６】本開示の実現例に従った、重要なキャッシュラインを最初に転送することによってページフォルトを処理するためのプロセスの一例を示すフローチャートである。
【発明を実施するための形態】
【００２２】
詳細な説明
新しい不揮発性メモリ技術は、メモリもしくはＩＯバスを介してローカルにアクセスされ得るか、または高速ネットワークを介して遠隔でアクセスされ得る。これらの技術の性能は２つの重要な意味合いを持っている。第１に、これらの技術は、アクセスするためのソフトウェアオーバーヘッドを最小限にしなければならないほどに高速であり、第２に、これらの技術は、ＤＲＡＭが典型的にキャッシュとして用いられ得るほどに十分に低速である。これらのタイプの不揮発性メモリの利点を利用するために、アプリケーションがデータ配置を明確に管理する必要があるか、または、システムが、メモリのさまざまな部分同士の間でデータをトランスペアレントに移動させる自動管理を実行しなければならない。
【００２３】
したがって、本開示の実施形態は、メモリもしくはＩＯバスを介してローカルに利用可能であるか、またはネットワークを介して遠隔に利用可能である二次メモリを高性能に自動管理するためのシステムを提供する。二次メモリは、本質的に、不揮発性かつ持続的なコンピュータメモリであってもよい。二次メモリは、プロセッサによって直接アクセスされなくてもよく、一次メモリまたはメインメモリよりも低速であってもよい。メインメモリは、一次メモリ、一次ストレージ、内部メモリまたは第１層メモリとも称されており、ＣＰＵに直接アクセス可能であり得る。以下により詳細に記載されるように、ハードウェアは、最新のプロセッサベースのシステムにおけるキャッシュコヒーレンスプロトコルおよび相互接続を利用して、アクセスレイテンシを減らして一貫性を維持する。加えて、最適化されたカーネルドライバは、たとえば、二番手のメモリに高速経路を提供し、メモリ管理ハードウェアとの通信をすべて処理し得る。このプロセスは、同期、メモリ管理およびブロックＩＯ転送などのためにコストが高くなってしまう、ページング用のカーネルを介する既存の経路と比べて、有利である。
【００２４】
これらの特徴および追加の特徴を以下においてより詳細に記載する。
図１は、本開示の実現例に従ったメモリデバイスを含むシステム１００の一例を示す。中央処理装置（central processing unit：ＣＰＵ）１１０は、ＤＲＡＭ１２０およびメ
モリ管理ユニット（memory management unit：ＭＭＵ）１５０と通信し得る。システム１００はさらに、ネットワークを介してアクセスされ得るリモートメモリ１３０を含んでもよい。キャッシュエージェント１４０およびホームエージェント１４５は、メモリを管理しているＭＭＵ１５０と共に動作し得る。キャッシュエージェントという語は、キャッシュデータを格納し、メモリ要求を開始することができる処理ユニットエージェントを指している。言いかえれば、キャッシュエージェントという語は、コヒーレントメモリへのトランザクションを開始し得るエンティティであって、それ自体のキャッシュ構造にコピーを保持し得るエンティティを表わし得る。ホームエージェント１４５はたとえばメモリコントローラであってもよい。ホームエージェントという語は、メモリの一領域または一部分を管理または所有する処理ユニットエージェントを指している。言いかえれば、ホームエージェントという語は、コヒーレントトランザクションを処理する（services）エンティティ、コヒーレントメモリの一部を監視するエンティティ、および／または、さまざまなキャッシュエージェント間で生じる可能性のある矛盾を管理するエンティティを表わし得る。加えて、ページテーブルウォーカ１６０およびトランスレーション・ルックアサイド・バッファ（translation lookaside buffer：ＴＬＢ）１６５は、ＭＭＵ１５０の一部であり得るか、またはＭＭＵ１５０で実現され得る。
【００２５】
ＭＭＵ１５０は、その内部にわたってメモリ参照され得るハードウェアユニットであって、仮想メモリアドレスを物理アドレスに翻訳し、キャッシュ制御を処理する。たとえば、ＭＭＵ１５０は、メインメモリにおいて仮想ページ番号を物理ページ番号にマッピングするために、１ページ毎に１つのページテーブルエントリ（page table entry：ＰＴＥ）を収納しているインメモリテーブルとしてページテーブルを用いてもよい。ＰＴＥの連想型キャッシュとしてトランスレーション・ルックアサイド・バッファ１６５を用いることにより、仮想アドレスがマッピングされるたびにメインメモリにアクセスする必要性をなくし得る。ＰＴＥが仮想ページへのアクセスを禁止すると、たとえば、その仮想ページにはどの物理的なランダムアクセスメモリも割当てられていないので、ＭＭＵ１５０は、ＣＰＵ１１０にページフォルトを信号で知らせ得る。図１を参照して、システム１００は、付加的に、不揮発性メモリ１８０を含んでもよく、任意には、専用のＤＲＡＭ１７０を含んでもよい。
【００２６】
図２は、本開示の実現例に従ったメモリデバイスを含むシステム２００の一例を示す。システム２００はＣＰＵ２１０およびＤＲＡＭ２２０を含み得る。システム２００はさらに、ダイレクトメモリアクセス（ＤＭＡ）エンジン２３０および二次ストレージ２４０を含み得る。ＣＰＵ２１０、ＤＲＡＭ２２０、ＤＭＡエンジン２３０および二次ストレージ２４０は、１つ以上のバス２１５、２２５または他のデータ通信手段を介してデータ通信してもよい。
【００２７】
動作の際、ページフォルトの処理、ライトバック（write backs）の処理またはページ
マイグレーションのためにＤＭＡエンジン２３０が用いられてもよい。二次ストレージ２４０は、ＣＰＵ２１０によって直接アクセスされない可能性もある二番手のメモリとして機能するメモリデバイスであってもよい。ＤＭＡエンジン２３０は、ＣＰＵ２１０に直接接続されてもよく、またはキャッシュエージェントなどの別個のエンティティの一部であってもよい。ＣＰＵ２１０がメインメモリ（すなわち第１層のメモリまたは一次メモリ）として、ＤＲＡＭ２２０からページにアクセスしようと試みて、そのページがページアウトされており二次ストレージ２４０に存在している場合、ページフォルトが発生する可能性がある。ページフォルトは、オペレーティングシステム（operating system：ＯＳ）が
二次ストレージ２４０からメインメモリ、ＤＲＡＭ２２０にページを移動させる必要があることを示し得る。この明細書中に記載される実施形態に従うと、ハードウェアＤＭＡエンジン２３０は、ページフォルトを管理して、メインメモリＤＲＡＭ２２０にはないページにアクセスしようとする試みを検出する。これに応じて、ページフォルトが処理されている間、スレッドの実行はストールされている。次いで、メインメモリＤＲＡＭ２２０にアクセスするためにスレッドがリリースされて、実行が継続され得る。
【００２８】
この態様では、ハードウェアは、ＤＭＡエンジン２３０を用いてページフォルトを処理することによって、ページ転送を開始し得る。したがって、ページフォルトを処理し、汚染されたページをライトバックし、ページを移行する際にページ転送を加速するためのプログラマブルなＤＭＡエンジン２３０が存在する。ＤＭＡエンジン２３０は、複数の同時発生的な要求の処理を管理し得る。ＤＭＡエンジン２３０の要求は、共有メモリのための相互接続であり得るコヒーレントな相互接続を介する低オーバーヘッド・コマンドおよび応答インターフェイスを用いて、開始および終了され得る。ＤＭＡエンジン２３０は、メモリコヒーレンスプロトコルを用いて、コヒーレントなメモリのユーザとなるように構成され得るので、このＤＭＡエンジン２３０は、プロセッサまたはＣＰＵ２１０の最終レベルのキャッシュに直接データを転送し得る。
【００２９】
図３Ａは、本開示の実現例に従った、ページフォルトを処理するためのプロセス３００の一例のフローチャートを示す。上述のとおり、ページフォルトは、仮想アドレス空間にマッピングされているが実際にはメインメモリにロードされていないメモリページにスレッドまたは実行プログラムがアクセスしたときに、発生する可能性がある。プロセッサのＭＭＵ１５０はページフォルトを検出し得る。ページフォルトが３１０において検出されると、３２０において、空きページがあるかどうかについての判断がなされ得る。空きページがある「yes」である場合、３３０において、ページデータが二次ストレージまたは
バッキングストアから空きページ位置にコピーされ得る。空きページがない「no」である場合、３６０において、ページがＦＩＦＯ待ち行列から引出されてよく、最も新しく到着したものが後ろに配置され最も古く到着したものが前に配置されている状態で、待ち行列にあるメモリ内の全ページを追跡し得る。そのページが汚染されている場合、すなわち、変更されていた場合、３７０において、システムは二次メモリまたはバッキングストアにページを書き込んでもよい。ページをメインメモリから二次メモリに転送する際、３８０において、ページに関連付けられたページテーブルエントリが無効にされてもよく、ページに関連付けられたいずれかのエントリのためのＴＬＢシュートダウンが実行されてもよく、たとえば、他のプロセッサのためにＴＬＢエントリがフラッシュされてもよい。このときそのページが空いていれば、３３０において、ページデータが二次ストレージまたはバッキングストアから空きページ位置にコピーされ得る。ページに関連付けられたＰＴＥを更新してページのメインメモリにおける位置を指し示すことによって有効なＰＴＥを作成するために、３４０において、ページテーブルが更新されてもよい。ページフォルトが処理されると、スレッドまたは実行プログラムが３５０において再開され得る。
【００３０】
図３Ｂは、本開示の実現例に従った、ライトバックスレッドのためのプロセス３０５の一例のフローチャートを示す。３１５においてウェイクアップすると、空きページの数が、（所与のアーキテクチャが処理するように構成されている任意のページ数であり得る）しきい値ページ数を満たしているかどうかが判断され得る。たとえば、３２５において、空きページの数がしきい値以下であるかどうかについて判断がなされてもよい。空きページの数がしきい値を満たさない（「no」である）場合、たとえば、しきい値よりも大きい場合、３３５において、スレッドがスリープになり得る。しかしながら、３２５において、空きページの数がしきい値を満たす（「yes」である）と判断された場合、３４５にお
いて、システムが、ＦＩＦＯ待ち行列にある次のページを判断し得る。３７０において、そのページが汚染されている場合、すなわち変更されていた場合、システムは二次メモリ
またはバッキングストアにページを書き込み得る。メインメモリから二次メモリにページを転送する際、３８０において、ページに関連付けられたページテーブルエントリが無効にされ得るとともに、ページに関連付けられたいずれかのエントリのためのＴＬＢシュートダウンが実行され得る。そのページが空きページであれば、３２５において、空きページの数がしきい値を満たしているかどうかが、再度、判断され得る。
【００３１】
ページテーブルスキャン（すなわちページテーブル全体にわたるスキャン）は、ＣＰＵオーバーヘッドを必要とするソフトウェアではなくハードウェアによって実行されてもよく、結果として、しばしば、メモリアクセスがより低速になってしまい、他の有用なキャッシュ情報が処理されて廃棄されてしまうこととなる。一般に、ページデータへのアクセスの頻度は、たとえば、データの他のページと比べてどのページデータが頻繁にアクセスされているか、および、データの他のページと比べてどのページデータが希にしかアクセスされていないかを表わすものであるが、ページテーブルをスキャンすることによって判断され得る。ページテーブルにおいてマッピングされた各ページ（たとえば各々のＰＴＥ）は、ページがアクセスされるたびに設定され得るとともにページテーブルのスキャン後にＣＰＵによってクリアされ得る、フラグまたはアクセスビットを有してもよい。
【００３２】
このハードウェアは、ページテーブルを読み込んで仮想−物理翻訳を自動的にＴＬＢにロードするために１つ以上のページテーブルウォーカ（たとえば内蔵されたハードウェア）を含み得るページテーブルウォーカまたはＭＭＵを増強することによって実現されてもよい。このため、ハードウェアは、プロセッサ内のページテーブルスキャンメカニズムを用いるプロセッサアーキテクチャの一部であってもよい。たとえば、ハードウェアは、最後にスキャンがなされてからアクセスビットが各ＰＴＥにおいて設定されたかどうかを判断するために、ページテーブル全体わたってスキャンする（すなわち、ＰＴＥのスキャン）ルーチンを実現してもよい。アクセスビットは、当該アクセスビットが設定されたかどうかを判断した後にクリアされてもよく、次いで、ページテーブルの次のスキャンが行なわれるまで動作が進められてもよい。スキャンは定期的に（たとえば、スキャンの合間に所定の期間を空けて）行なわれてもよく、または、スキャンは何らかの外部イベントが引き金となってトリガされてもよい。アクセスビットまたはフラグが設定されていないと判断されるたびに、カウントが各ページ毎にインクリメントされてもよい。
【００３３】
時間の経過とともに、スキャンからプロファイルが作成されてもよく、当該プロファイルは、各ページがどのくらいの頻度でアクセスされているか、および／または、どのくらい最近アクセスされたかを示す。たとえば、ハードウェアは、使用統計（たとえば未設定のアクセスビットもしくはフラグのカウント）を維持するために各ページ毎に１つ以上のカウンタもしくは複数のブルームフィルタを含み得るか、または、使用頻度が最も高いページおよび使用頻度が最も低いページもしくはアクセス頻度のより高いページおよびアクセス頻度のより低いページをソートおよびフィルタリングすることを可能にするために、結果がメモリ（たとえば２レベルのメモリ）に格納され得る。より詳細には、ハードウェアは、ページがどれくらい最近アクセスされたかを判断するためにページ毎のカウンタを維持してもよく、各々のカウンタは、それぞれのＰＴＥがスキャンされたときに更新されてもよい。ページ毎のカウンタは、高速アクセスを得るためにオンチップＳＲＡＭに設けられてもよい。代替的には、二次メモリのサイズが大型であるせいで、カウンタの面積コストがより高くなる可能性があるので、カウンティング・ブルーム・フィルタを用いてページの設定についてのアクセス統計を維持することにより、面積を節約することもできる。代替的には、ハードウェアは、少量の専用のＤＲＡＭを用いてもよく、またはシステムＤＲＡＭにカウンタを格納してもよい。
【００３４】
いくつかの実施形態においては、アクセス統計を収集するためのページテーブルスキャンは、プロセッサのページテーブルウォーカに格納されているかもしくは当該ページテー
ブルウォーカと密に結合されたハードウェアモジュールで実現されてもよく、または、ＭＭＵにおいて実現されてもよい。なぜなら、ＭＭＵは、ＩＯ装置において既に利用可能な１つ以上のページテーブルウォーカを有し得るからである。したがって、上述したように、そのハードウェアはページテーブルをスキャンし得るとともに、各ＰＴＥのアクセスビットを用いて、最後のスキャンがなされて以来アクセスビットが設定されたかどうかの判断に基づいて、各ページの各々の古さを判断し得る。たとえば、アクセスビットが設定されているのであれば、最後のスキャン期間内にそのページにクセスされていたこととなる。そうではなく、アクセスビットが設定されていない場合、ページにはアクセスされておらず、コールド（「cold」）である（たとえば最後のスキャン期間中にはアクセスされていない）と判断される可能性がある。有利には、ハードウェアによって判断されるこれらの使用統計またはアクセス統計は、ソフトウェアおよびサンプリング技術を必要とする現在の方法よりも精密かつ正確であり得る。
【００３５】
このため、メインメモリの場合、アクセスビットが設定されていなかった回数は、コールドページ（cold page）を識別するために各ページ毎にカウントされてもよく、この場
合、たとえば、ページ毎のカウントが大きくなればなるほど、ページは、よりコールドになる。ページがアクセスされ、アクセスビットが設定されると、そのカウントはゼロにリセットされ得る。ページテーブルはアクセスビットに対する変更を検出するために定期的にスキャンされてもよく、すべてのアクセスビットは各スキャン毎にクリアされてもよい。このため、カウントは、ページの古さを表わし得る。すなわち、ページがどのくらいの期間アクセスされていなかったかを表わし得る。
【００３６】
上述のとおり、ＤＭＡエンジン２３０はページフォルトを処理するのに用いられてもよい。いくつかの実施形態においては、アクセス統計を用いることにより、ページ転送の宛先を判断し得るか、または、どのページを転送するかとそれらのページをいつ転送するかとを識別するために実現され得るポリシーを決定し得る。たとえば、アクセス統計に基づいて、ページが使用頻度の最も高いものから使用頻度の最も低いものへと順序付けされてもよく、またはこれとは逆に順序付けされてもよい。ＤＭＡエンジン２３０を用いてページフォルトが処理されると、メインメモリＤＲＡＭ２２０に空きページがない場合、ハードウェア支援型のページングプロセスは、使用頻度が最も低いページのうちの１つを二次メモリにリリースするかまたはライトバックし得るとともに、その使用頻度が最も低いページの位置を用いて新しいページをメインメモリに転送し得る。
【００３７】
図４は、本開示の実現例に従った、ハードウェアでページの使用頻度を判断し、ＤＭＡエンジンを用いてページフォルトを処理するためのプロセス４００の一例のフローチャートを示す。プロセス４００は、４１０において、ページテーブルスキャナでページテーブルをスキャンしたことに基づいて、ページテーブルの各ＰＴＥ毎にアクセスビットが設定されているかどうかを、プロセッサを用いて判断するステップを含む。たとえば、プロセッサにおける少なくとも１つのページテーブルウォーカは、アクセスビットが設定されているかどうかについてページテーブルをスキャンするために変更されてもよい。たとえば、ページテーブルをスキャンするためにスレッドがページテーブルウォーカに追加されてもよく、または、スキャンは、ハードウェアによってページテーブルウォーカとは別個に行なわれてもよい。アクセスビットは、ＰＴＥに関連付けられたページが、たとえば、ページテーブルにおける最後のスキャンと現在のスキャンとの間で、最後のスキャン期間内にアクセスされたかどうかを示し得る。
【００３８】
４２０において、各ページ毎のカウントは、アクセスビットがページに関連付けられたＰＴＥ毎に設定されていないと判断されたことに応じてインクリメントされてもよい。アクセスビットが各ＰＴＥ毎に設定されているかどうかを判断した後、４３０において、プロセッサがアクセスビットをリセットしてもよい。各ページ毎のカウントは、スタティッ
クランダムアクセスメモリに格納された各ページ毎のカウンタによって維持されてもよく、または、カウンティング・ブルーム・フィルタが、ページの設定についてのアクセス統計を維持してもよい。代替的には、各ページ毎のカウンタは、ダイナミックランダムアクセスメモリ（たとえば、少量の専用のＤＲＡＭまたはシステムＤＲＡＭ）に格納されてもよい。
【００３９】
プロセス４００はさらに、４４０において、データのページにアクセスするようにとの要求をメインメモリから受取るステップを含む。４５０において、ページフォルトが、アクセスが要求されているデータのページがメインメモリに格納されていないと判断したことに基づいて、開始され得る。４６０において、ページフォルト・ハンドラが、ページフォルトを検出し得るとともに、ＤＭＡエンジン２３０を用いてページフォルトを処理し得る。
【００４０】
たとえば、メインメモリが空きページを有しておらず、ページ転送を受取ることができない場合、４７０において、メインメモリ内の特定のページ（たとえば、メインメモリ内の使用頻度が最も低いページのうち１つ）が、各ページ毎のカウントに基づいて決定され得る。４７０において、ＤＭＡエンジン２３０がページ転送を管理し得るとともに、これらのページのうち決定された１ページが二次メモリにリリースされ得るかまたはライトバックされ得る。さらに、４７０において、アクセスが要求されているデータのページは、使用頻度が最も低いページのうちリリースされた１ページの位置において、二次メモリからメインメモリに転送され得る。代替的には、４８０において、メインメモリが空きページを有しており、ページ転送を受取ることができる場合、ＤＭＡエンジン２３０は、二次メモリからメインメモリへのページデータの転送を管理し得る。
【００４１】
いくつかの実施形態においては、ページフォルトが開始されると、上述のとおり、ＤＭＡエンジン２３０がページフォルトを処理するためにデータ転送を管理している間、スレッドの実行または実行中のプログラムがストールされてもよい。スレッドは、ページフォルトが処理された後、メインメモリ内のページにアクセスするためにリリースされてもよい。
【００４２】
データにアクセスするようにとのＩＯ要求や、二次メモリからページデータを転送するためにページフォルトを開始する代わりに、いくつかのシステムにおいては、二次メモリは、ページマイグレーションを用いて、負荷および記憶装置を備えたプロセッサによって直接アクセスされてもよい。これらのシステムにおいては、データは、ページ粒度でアクセスされる必要がないかもしれない。しかしながら、データが「ホット（hot）」または
「コールド（cold）」であるかどうか（すなわち、どれくらい最近アクセスされたか、どれくらいの頻度でアクセスされたか、または、再びアクセスされる可能性があるかどうか）に基づいて、自動的にデータを移行するために、上述の使用統計またはアクセス統計を利用することが有益であるかもしれない。
【００４３】
概して、二次メモリにおけるデータが、物理アドレス空間の或る領域（たとえばその領域におけるすべての二次メモリ）に関与しているホームエージェント１４５に関連付けられ得るキャッシュ・コヒーレンス・アーキテクチャの特徴を利用して、ホームエージェント１４５は、当該ホームエージェントが関与しているメモリへのすべてのアクセスを維持し得るとともに、その識別を用いてアクセス統計を維持し得る。二次メモリに関連付けられたホームエージェント１４５は、どのページがアクセスされているかと、それらのページがいつアクセスされているかとについてのデータを維持し得る。アクセスの頻度に基づいて、たとえば、アクセスの頻度がしきい値を満たしている場合、ホームエージェント１４５は、頻繁にアクセスされたデータが二次メモリからメインメモリＤＲＡＭ１２０に転送され得ると判断してもよい。
【００４４】
そのマイグレーションを実行するために、二次メモリ内のページが「ホット（hot）」
になりつつあること（すなわちアクセスの頻度の増大）を判断するだけではなく、メインメモリＤＲＡＭ内のどのページが「コールド（cold）」になりつつあるか（すなわち、アクセスの頻繁の減少）を判断することも有利である。言いかえれば、メインメモリよりも低速であり得る二次メモリにおいてどのページがより頻繁にアクセスされているかを判断すること、および、メインメモリにおいてどのページへのアクセス頻度がより低いかを判断することである。メインメモリにおいてどのページへのアクセス頻度がより低いかを判断する１つのプロセスは、たとえば、未設定であるアクセスビットのカウントに基づいて、メインメモリＤＲＡＭについての使用統計またはアクセス統計に関連付けて上述したとおりである。システムは、いつデータをメインメモリＤＲＡＭから二次メモリに移動させるべきかと、メインメモリについて上述されたアクセス統計に基づいて、いつデータを二次メモリからメインメモリＤＲＡＭに移動させるべきかとを判断し得るとともに、二次メモリに連結されたホームエージェントを利用して、二次メモリについてのアクセス統計を判断し得る。
【００４５】
このため、ハードウェアは、メインメモリ（たとえば、ＤＲＡＭ２２０）と二次メモリ（たとえば、二次ストレージ２４０）との間でページをいつ移行するかを判断し得る。たとえば、ハードウェアは、ホームエージェントでのキャッシュ・コヒーレンス・メッセージとアクセスビットでのＰＴＥとの組合せを用いて、データの「温度」を判断し得る。すなわち、どの程度「ホット」であるかまたは或るデータへのアクセスがどれくらい頻繁であるかと、どの程度「コールド」であるかまたは或るデータへのアクセスがどれくらい希であるかとを判断し得る。したがって、アクセス頻度が増大する割合を有するページが二次メモリからメインメモリに移行される。上述のとおり、「昇温している（warming）」
かまたはより頻繁にアクセスされているそれらのページは、これらのアクセスを検出するホームエージェントを介して二次メモリへのメモリアクセスを管理するハードウェアによって判断されてもよい。なぜなら、物理アドレス範囲がホームエージェントによって所有されているからである。それらの判断されたアクセスに基づいて、ページ毎のアクセスカウンタが、たとえばオンチップＳＲＡＭにおいて維持されてもよい。代替的には、二次メモリのサイズが大きいせいで、カウンタのハードウェア面積コストがより高くなる可能性があるので、カウンティング・ブルーム・フィルタを用いて、ページの設定についてのアクセス統計を維持することによって、面積を節約し得る。代替的には、ハードウェアは少量の専用のＤＲＡＭを用いてもよく、または、システムＤＲＡＭにカウンタを格納してもよい。
【００４６】
加えて、より詳細に上述したように、クーリングオフしているページ、またはアクセス頻度のより低いページは、ＰＴＥを監視することによって判断され得る。たとえば、ページについての相互アクセス時間が相互アクセス時間しきい値を満たすと、システムは、ページに関連付けられたＰＴＥを無効にし、ページに関連付けられたいずれかのエントリのためのＴＬＢシュートダウンを実行し、メインメモリＤＲＡＭから二次メモリにページを転送することによって、メインメモリＤＲＡＭから二次メモリへのページの転送を開始し得る。
【００４７】
図５は、本開示の実現例に従った、ハードウェアでのページの使用頻度を判断し、判断された使用頻度に基づいてページマイグレーションを実行するためのプロセス５００の一例のフローチャートを示す。プロセス５００は、５１０において、プロセッサのページテーブルスキャナでのページテーブルのスキャンに基づいて、アクセスビットがページテーブルの各ＰＴＥ毎に設定されているかどうかを判断するステップを含む。アクセスビットは、ＰＴＥに関連付けられたページが、たとえば、ページテーブルのうち最後のスキャンと現在のスキャンとの間で、最後のスキャン期間内にアクセスされたかどうかを示し得る
。５２０において、メインメモリにおける各ページ毎のカウントは、アクセスビットがページに関連付けられたＰＴＥ毎に設定されていないと判断したことに応じて、インクリメントされ得る。代替的には、メインメモリにおける各ページ毎のカウントは、アクセスビットがページに関連付けられたＰＴＥ毎に設定されていると判断したことに応じて、インクリメントされ得る。アクセスビットが各ＰＴＥ毎に設定されているかどうかを判断した後、５３０において、プロセッサはアクセスビットをリセットし得る。メインメモリにおける各ページ毎のカウントは、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタによって維持されてもよく、または、カウンティング・ブルーム・フィルタが、ページの設定についてのアクセス統計を維持してもよい。代替的には、各ページ毎のカウンタは、ダイナミックランダムアクセスメモリ（たとえば少量の専用のＤＲＡＭまたはシステムＤＲＡＭ）において格納されてもよい。
【００４８】
プロセス５００はさらに、５４０において、二次メモリにおけるページが、二次メモリにおけるページにアクセスするようにとの要求をホームエージェントが受取ったことに基づいて、アクセスされるかどうかを判断するステップを含み得る。加えて、二次メモリにおける各ページ毎のカウントは、５４０において、二次メモリにおけるページが、二次メモリにおけるページにアクセスするようにとの要求をホームエージェントが受取ったことに基づいてアクセスされていると判断したことに応じて、インクリメントされてもよい。そのカウントに基づいて、二次メモリにおけるページは、５５０において、頻繁にアクセスされるものとして識別され得る。さらに、頻繁にアクセスされるものとして識別されたそのページは、５５０において、二次メモリからメインメモリに移行され得る。いくつかの実施形態においては、メモリのページまたは部分のグループは、頻繁にアクセスされるものとして識別され、二次メモリからメインメモリに移行され得る。
【００４９】
プロセス５００はさらに、５６０において、メインメモリにおける或るページを、メインメモリにおける各ページ毎のカウントに基づいて、希にしかアクセスされないものとして識別するステップを含み得る。希にしかアクセスされないものとして識別されたそのページは、５６０において、メインメモリから二次メモリに移行され得る。いくつかの実施形態においては、メモリのページまたは部分のグループは、希にしかアクセスされないものして識別され、メインメモリから二次メモリに移行され得る。５６０において、メインメモリにおける或るページを、カウントに基づいて、希にしかアクセスされないものとして識別するステップは、ページについての相互アクセス時間（すなわち、アクセス間の時間）が、相互アクセス時間しきい値を満たしている（たとえば、ページについての相互アクセス時間が相互アクセス時間しきい値より大きいかまたは相互アクセス時間しきい値以上である）と判断するステップを含み得る。これにより、希にしかアクセスされないものとして識別されたページまたはページのグループは、ページまたはページのグループについての相互アクセス時間が相互アクセス時間しきい値を満たしていると判断したことに応じて、メインメモリから二次メモリに移行され得る。
【００５０】
５６０において、希にしかアクセスされないものとして識別されたページを移行するプロセスは、ページまたはページのグループに関連付けられたＰＴＥまたは複数のＰＴＥを無効にし、ページまたはページのグループに関連付けられたいずれかのエントリのためのトランスレーション・ルックアサイド・バッファ・シュートダウンを実行し、ページまたはページのグループをメインメモリから二次メモリに転送するステップを含み得る。二次メモリにおける各ページ毎のカウントは、スタティックランダムアクセスメモリに格納された各ページ毎のカウンタによって維持されてもよく、または、カウンティング・ブルーム・フィルタが、ページの設定についてのアクセス統計を維持してもよい。代替的には、各ページ毎のカウンタは、ダイナミックランダムアクセスメモリ（たとえば、少量の専用のＤＲＡＭまたはシステムＤＲＡＭ）に格納されてもよい。
【００５１】
上述のとおり、たとえば、アプリケーションがメモリ（たとえばページ）にアクセスしようと試みて、ページがメインメモリに存在していない場合、ページフォルトが発生する。ページフォルトは、二次メモリからメインメモリＤＲＡＭへのページ全体の転送をトリガしてもよく、次いで、そのアプリケーションが実行を継続し得る。しかしながら、そのプロセスはページのデータを読取る間に遅延を引起こす可能性がある。たとえば、４ＫＢサイズのページの場合、４ＫＢ全体が転送される可能性があり、これにより、４ＫＢのデータを読取る間に遅延を引起こす可能性がある。この明細書中に記載される実施形態に従うと、この遅延が有利に減じられる可能性があり、これにより、結果として、実行中のアプリケーションまたはプロセスがより高速で実行されることになり得る。
【００５２】
ページ全体（たとえば、上述の例における４ＫＢ全体）を転送するのではなく、システムは、アプリケーションがどのキャッシュライン（たとえばデータブロック）にアクセスしようと試みたかを識別し、最初に、そのキャッシュラインだけを二次メモリからメインメモリに転送する。アクセスが要求されていたキャッシュラインが転送されていれば、アプリケーションは、そのデータの読出しおよび書き込みを行って、実行を継続し得る。ページ全体を転送することなく、その重要なキャッシュラインが転送された後、ページの残余部分（たとえば４ＫＢの残余部分）がバックグラウンドにおいて転送され得る。
【００５３】
いくつかの実施形態においては、重要なキャッシュラインがＣＰＵに提供され得るとともに、キャッシュ・コヒーレンシ・メカニズムまたはプロトコルが使用され得る。このプロセスはページフォルトを処理するために、より高速の性能を実現する。たとえば、動作の際に、アプリケーションは、ページから１本または２本のキャッシュラインにアクセスすることを要求するだけであってもよく、重要なキャッシュラインはページ全体が転送されるのを待つことなく提供され得る。次いで、その実行を継続するために、要求されたデータ（たとえば重要なキャッシュライン）がアプリケーションに提供された後、ページの残余部分がバックグラウンドにおいて転送されてもよい。
【００５４】
これにより、ハードウェアが重要なキャッシュラインを最初に配信することによって、ページフォルト待ち時間が減らされる可能性がある。ハードウェアは、要求されたキャッシュラインを二次メモリから、たとえばプロセッサのキャッシュおよびホストＤＲＡＭに転送してもよい。したがって、要求されたデータが提供されてから、要求されたページにおけるキャッシュラインの残りが転送される可能性がある。さらに、たとえば、カスタム・ページフォルト・ハンドラまたはハードウェアは、ＰＴＥを更新して、ホストＤＲＡＭにおける新しいページを示し得る。結果として、他のプロセッサは、ページにおけるキャッシュラインに対して、それらのキャッシュラインがメインメモリに実際に存在する前に、アクセスし得ることとなる。
【００５５】
いくつかの実施形態においては、メモリの一貫したビューを維持するために、キャッシュエージェント１４０は、ページにおけるキャッシュライン上で所有権の要求（request-for-ownership：ＲＦＯ）を実行することにより、ページ転送が行なわれている間それら
を排他的に保持し得る。ハードウェアがキャッシュラインを転送し終えた後、キャッシュエージェント１４０は、そのキャッシュラインの所有権をリリースしてもよく、これにより、将来の要求がホストのキャッシュまたはホストＤＲＡＭから提供され得ることとなる。さらに、たとえば、ページが転送されている間に、ホストがページ内の他のキャッシュラインのうちの１つにアクセスしようと試みたとき、ハードウェアは、キャッシュ・コヒーレンス・メカニズムに従って、その他のキャッシュラインのためのスヌープ要求（たとえば、プロセッサ間キャッシュコヒーレンシ動作）を認識し得るとともに、他のキャッシュラインが二次メモリから転送されたときには、スヌープ要求に応じて他のキャッシュラインを提供し得る。
【００５６】
いくつかの実施形態においては、ハードウェアは、送信中のページについてのキャッシュラインを実際にはキャッシュエージェントのキャッシュに格納しない可能性がある。むしろ、それらのラインについてのタグおよびコヒーレンス状態ビットが格納される可能性があり、次いで、ホストＤＲＡＭまたはより低速のメモリからの要求についてのデータが転送される可能性がある。いずれの構成においても、転送されているページをキャッシュに入れるのに必要なオンチップＳＲＡＭを減らすことができる。
【００５７】
図６は、本開示の実現例に従った、重要なキャッシュラインを最初に転送することによってページフォルトを処理するためのプロセス６００の一例のフローチャートを示す。プロセス６００は、６１０において、データのページのキャッシュラインにアクセスするようにとの要求をメインメモリから受取るステップを含み得る。６２０において、要求されたキャッシュラインがメインメモリに格納されておらず、二次メモリに格納され得ると判断され得る。二次メモリからの、データのページについての要求されたキャッシュライン（たとえばデータブロック）が、６３０において、データのページ全体を転送することなく、メインメモリに転送され得る。これにより、要求されたキャッシュラインが提供され、要求されたキャッシュライン以外のデータのページの残余部分が二次メモリに格納されたままになり得る。
【００５８】
プロセス６００はさらに、６４０において、データのページに関連付けられたＰＴＥを更新して、メインメモリにおけるデータのページの位置を示し得る。６５０において、データのページの残余部分は、キャッシュラインにアクセスするようにとの要求に応じて、要求されたキャッシュラインが提供された後、バックグラウンドにおいて二次メモリからメインメモリに転送され得る。
【００５９】
いくつかの実施形態においては、キャッシュ・コヒーレンシ・メカニズムは、要求された第１のキャッシュラインとは異なるデータのページの第２のキャッシュラインのアクセスを処理するために、６５０において、二次メモリからメインメモリにデータのページの残余部分を転送している間に、実現され得る。キャッシュ・コヒーレンシ・メカニズムは、キャッシュエージェント１４０によって、データのページにおけるキャッシュラインのＲＦＯを発行することと、キャッシュラインが二次メモリからメインメモリに転送されていることに応じて各キャッシュラインの所有権をリリースすることとを含み得る。キャッシュ・コヒーレンシ・メカニズムに従って、データのページのキャッシュラインがキャッシュエージェント１４０のキャッシュに格納されてもよい。代替的には、データのページのそれらのキャッシュラインに関連付けられたタグおよびコヒーレンス状態ビットが格納されてもよい。さらに、６５０において、データのページの残余部分が転送されている間に、データのページの第２のキャッシュラインにアクセスするようにとの要求に応じて、スヌープ要求が第２のキャッシュラインについて認識され得るとともに、第２のキャッシュラインが二次メモリから転送されたときにスヌープ要求に応じて第２のキャッシュラインを戻し得る。メインメモリがページ転送を受取ることができない場合、たとえば、空きページがない場合、メインメモリに格納された使用頻度が最も低いページのうちの１ページが、上述の使用統計に基づいて決定されてもよく、使用頻度が最も低いページのうちの１ページが、二次メモリにリリースまたはライトバックされてもよい。したがって、データのページは、使用頻度が最も低いページのうちリリースされた１ページの位置において、二次メモリからメインメモリに転送され得る。
【００６０】
いくつかの実現例が記載されてきた。しかしながら、本開示の精神および範囲から逸脱することなく、さまざまな変更が実施され得ることが理解されるだろう。たとえば、上述のフローは、ステップが順序付けられるか、追加されるかまたは削除されたさまざまな形式で用いられてもよい。
【００６１】
この明細書に記載された本発明の実現例および機能的動作のすべては、この明細書に開示された構造、およびそれらの構造的な同等例、またはそれらのうち１つ以上の組合せを含むデジタル電子回路、ファームウェアまたはハードウェアにおいて実現することができる。本発明の実現例は、１つ以上のコンピュータプログラムプロダクトとして、すなわち、データ処理装置によって、またはデータ処理装置の動作を制御することによって、実行されるべきコンピュータ読取可能媒体上において符号化されるコンピュータプログラム命令の１つ以上のモジュールとして、実現することができる。コンピュータ読取可能媒体は、機械読取可能な記憶装置、機械読取可能な記憶基板、メモリデバイス、またはそれらの１つ以上の組合せであってもよい。「データ処理装置」という語は、一例として、プログラマブルプロセッサ、コンピュータまたは複数のプロセッサもしくはコンピュータを含む、データを処理するためのすべての装置、デバイスおよび機械を包含する。装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を作成するコード、たとえば、プロセッサ・ファームウェア、プロトコル・スタック、データベース管理システム、オペレーティングシステムまたはそれらの１つ以上の組合せを構成するコード、を含み得る。
【００６２】
この開示は多くの詳細を含んでいるが、これらは、本発明の範囲に対する限定、または本発明によって主張され得るものに対する限定として解釈されるべきでなく、本発明の特定の実現例に特有の特徴の記述として解釈されるべきである。別個の実現例の文脈においてこの明細書に記載されているいくつかの特徴は、また、単一の実現例における組合せで実現することができる。逆に、単一の実現例の文脈において記載されているさまざまな特徴は、また、複数の実現例において別個に、またはいずれかの好適な副次的組合わせで実現することができる。さらに、いくつかの組合せで、最初に主張されたように機能するものとしていくつかの特徴が上述されているかもしれないが、主張された組合せからの１つ以上の特徴を、場合によってはその組合せから排除することができ、さらに、主張された組合せは、副次的組合わせまたは副次的組合わせの変形例に誘導される可能性もある。
【００６３】
同様に、動作が特定の順序で添付の図面に示されているが、これは、望ましい結果を達成するために、このような動作が図示された特定の順序もしくは連続的順序で実行されること、または、図示されたすべての動作が実行されることを必要とするものとして理解されるべきではない。いくつかの環境においては、マルチタスクおよび並列処理が有利である可能性もある。さらに、上述の実現例においてさまざまなシステム構成要素が分離されているが、すべての実現例においてこのような分離が必要になるものと理解されるべきではなく、記載されたプログラムコンポーネントおよびシステムが、一般には、単一のソフトウェアプロダクトにともに一体化され得るかまたは複数のソフトウェアプロダクトにパッケージングされ得ることが理解されるべきである。
【００６４】
このように、本開示の特定の実現例が記載されてきた。他の実現例も添付の特許請求の範囲内にある。たとえば、請求項において記載される動作は、異なる順序で実行されても、依然として望ましい結果を達成することができる。いくつかの実現例が記載されてきた。しかしながら、開示の精神および範囲から逸脱することなく、さまざまな変更がなされ得ることが理解されるだろう。たとえば、上述のフローは、ステップが順序付けられるか、追加されるかまたは削除されたさまざまな形式で用いられてもよい。したがって、他の実現例は添付の特許請求の範囲内である。
【００６５】
主題の他の革新的な局面が、データのページの第１のキャッシュラインにアクセスするようにとの要求をメインメモリから受取り、第１のキャッシュラインがメインメモリに格納されずに、二次メモリに格納されていると判断し、これに応じて、データのページの残余部分が二次メモリに格納されたままの状態で、データのページ全体を転送することなく、データのページの第１のキャッシュラインを二次メモリからメインメモリに転送し、デ
ータのページに関連付けられたページテーブルエントリを更新して、メインメモリにおけるデータのページの位置を示し、データのページの残余部分を二次メモリからメインメモリに転送するための方法、システムおよび装置に向けられている。
【符号の説明】
【００６６】
１１０  ＣＰＵ、１２０  ＤＲＡＭ、１３０  リモートメモリ、１４０  キャッシュエージェント、１４５  ホームエージェント、１５０  メモリ管理ユニット、１６０  ページテーブルウォーカ、１６５  トランスレーション・ルックアサイド・バッファ、１７０
ＤＲＡＭ、１８０  不揮発性メモリ。
【図１】
2020009492.tif 000003
【図２】
2020009492.tif 000004
【図３Ａ】
2020009492.tif 000005
【図３Ｂ】
2020009492.tif 000006
【図４】
2020009492.tif 000007
【図５】
2020009492.tif 000008
【図６】
2020009492.tif 000009
【外国語明細書】
2020009492000001.pdf