(57)【要約】  本発明は、メモリシステム、メモリアクセス要求を処理するための方法、およびコンピュータシステムを開示する。本メモリシステムは、異なる種類であり、プロセッサの動作データを記憶するように別々に構成された第1の種類のメモリおよび第2の種類のメモリと、第1の種類のメモリに位置するデータユニットブロックのフェッチアドレスを記憶するメモリインデキシングテーブルと、メモリコントローラのメモリアクセス要求を受信し、フェッチアドレスに対応するデータユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを判断し、判断されたメモリにおいてメモリアクセス要求のフェッチ動作を完了させるバッファスケジューラと、データユニットブロックのアクセス情報を更新し、データユニットブロックのアクセス情報に従って、第2の種類のメモリ内のデータユニットブロックを第1の種類のメモリへと移動させるか否かを判断し、移動後にメモリインデキシングテーブルを更新するように構成された移動スケジューラとを備える。
2016520233.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサの動作データを別々に記憶する種類の異なる第1の種類のメモリおよび第2の種類のメモリと、
前記第1の種類のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラによって送信されたメモリアクセス要求を受信し、前記フェッチアドレスおよび前記メモリインデキシングテーブルに従って、前記フェッチアドレスに対応するデータユニットブロックが前記第1の種類のメモリまたは前記第2の種類のメモリのどちらに記憶されているかを判断し、該判断された第1の種類のメモリまたは第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を達成し、前記メモリアクセス要求の前記フェッチ動作の結果を前記メモリコントローラへと返すバッファスケジューラと
を備えるメモリシステム。
【請求項２】
前記バッファスケジューラは、前記フェッチアドレスに対応するデータユニットブロックが前記第2の種類のメモリに記憶されていると判断される場合に、該データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記移動スケジューラによって送信された通知を受信して、前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記第2の種類のメモリ内のデータユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断し、移動後に前記メモリインデキシングテーブルを更新する移動スケジューラ
をさらに備える請求項1に記載のメモリシステム。
【請求項３】
前記バッファスケジューラは、前記データユニットブロックが前記第1の種類のメモリに位置すると判断される場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2の種類のメモリに位置すると判断される場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求を完了させるように特に構成されている請求項1または2に記載のメモリシステム。
【請求項４】
前記バッファスケジューラは、前記データユニットブロックが前記第1の種類のメモリに位置すると判断される場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2の種類のメモリに位置すると判断される場合に、前記第2の種類のメモリ内の前記データユニットブロックを前記第1の種類のメモリへと移動させ、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させるように特に構成されている請求項1または2に記載のメモリシステム。
【請求項５】
前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、前記フェッチアドレスおよび前記フェッチ動作を含むメモリアクセス要求を抽出する解析モジュールと、
前記第1の種類のメモリにアクセスするメモリアクセス要求を記憶する第1の要求待ち行列と、
前記第2の種類のメモリにアクセスするメモリアクセス要求を記憶する第2の要求待ち行列と、
前記フェッチアドレスを使用することによって前記メモリインデキシングテーブルを照会して、メモリアクセス要求によって要求されたデータユニットブロックが第1の種類のメモリ内にあるか否かを判断し、該データユニットブロックが前記第1の種類のメモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記第1の種類のメモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶する判断モジュールと、
前記第1の種類のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶する第1の返送待ち行列と、
前記第2の種類のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶する第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記第1の種類のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記第2の種類のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行するスケジューリングモジュールと、
複数のメモリアクセス要求のフェッチ動作の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すパッケージングモジュールと
を備える請求項1から4のいずれか一項に記載のメモリシステム。
【請求項６】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するレジスタと、
前記アクセス動作の量を前記移動しきい値と比較し、比較結果に応じて、前記第2の種類のメモリ内のデータユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断する移動判断ロジカルモジュールと、
前記移動判断ロジカルが移動が必要であるとの結果を出力するときに移動コマンドを記憶するコマンドバッファと、
前記第2の種類のメモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新する更新モジュールと
を備える請求項1から5のいずれか一項に記載のメモリシステム。
【請求項７】
前記第1の種類のメモリは、揮発メモリモジュールであり、前記第2の種類のメモリは、不揮発メモリモジュールである請求項1から6のいずれか一項に記載のメモリシステム。
【請求項８】
前記第1の種類のメモリのアクセス速度は、前記第2の種類のメモリのアクセス速度よりも高速である請求項1から6のいずれか一項に記載のメモリシステム。
【請求項９】
プロセッサの動作データを別々に記憶する揮発メモリおよび不揮発メモリと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを示しているタグテーブルを記憶するバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、前記フェッチアドレスを使用することによって前記タグテーブルを照会することで、前記データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを判断し、該判断された揮発メモリまたは不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリコントローラへと返すバッファスケジューラと
を備えるメモリシステム。
【請求項１０】
前記バッファスケジューラは、前記データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記通知を受信して、前記タグテーブル内の前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記不揮発メモリ内のデータユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新する移動スケジューラ
をさらに備える請求項9に記載のメモリシステム。
【請求項１１】
前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、メモリアクセス要求を抽出する解析モジュールと、
前記揮発メモリにアクセスするメモリアクセス要求を記憶する第1の要求待ち行列と、
前記不揮発メモリにアクセスするメモリアクセス要求を記憶する第2の要求待ち行列と、
前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、各々のメモリアクセス要求によってアクセスされるデータユニットブロックが前記揮発メモリ内にあるか否かを判断し、該データユニットブロックが前記揮発メモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記揮発メモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶し、該データユニットブロックの前記アクセス情報の更新の通知を送信する判断モジュールと、
前記揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶する第1の返送待ち行列と、
前記不揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶する第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記不揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行するスケジューリングモジュールと、
複数のメモリアクセス要求の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すパッケージングモジュールと
を備える請求項9または10に記載のメモリシステム。
【請求項１２】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するレジスタと、
前記アクセス動作の量を前記移動しきい値と比較して、前記不揮発メモリ内のページを前記揮発メモリへと移動させるか否かを判断する移動判断ロジカルモジュールと、
前記移動判断ロジカルが移動が必要であるとの結果を出力するときに移動コマンドを記憶するコマンドバッファと、
前記不揮発メモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新するタグ更新モジュールと
を備える請求項9から11のいずれか一項に記載のメモリシステム。
【請求項１３】
前記揮発メモリは、DRAM（ダイナミック・ランダム・アクセス・メモリ、dynamic random access memory）であり、前記不揮発メモリは、NVM（不揮発メモリ、non-volatile memory）である請求項9から12のいずれか一項に記載のメモリシステム。
【請求項１４】
メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
前記メモリアクセス要求内の前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、該アクセス要求に対応するデータユニットブロックが第1の種類のメモリまたは該第1の種類のメモリとは異なる種類の第2の種類のメモリのどちらに記憶されているかを判断し、移動スケジューラに対して前記データユニットブロックのアクセス情報の更新を指示するステップと、
前記データユニットブロックが前記第1の種類のメモリに記憶されている場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法。
【請求項１５】
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記第1の種類のメモリへと移動させ、次いで前記第1の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項14に記載の方法。
【請求項１６】
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項14に記載の方法。
【請求項１７】
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2の種類のメモリ内に位置する前記データユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断するステップ
をさらに含む請求項14から16のいずれか一項に記載の方法。
【請求項１８】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2の種類のメモリ内に位置する前記データユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断するステップは、
前記移動スケジューラによって、記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む請求項17に記載の方法。
【請求項１９】
前記移動スケジューラによって、移動が必要であると判断される場合に前記メモリインデキシングテーブルの情報を更新するステップ
をさらに含む請求項18に記載の方法。
【請求項２０】
メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、前記メモリアクセス要求内の前記フェッチアドレスを使用することによって照会して、該アクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断するステップと、
前記データユニットブロックが前記揮発メモリに記憶されている場合に、前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法。
【請求項２１】
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記揮発メモリへと移動させ、次いで前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項20に記載の方法。
【請求項２２】
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項20に記載の方法。
【請求項２３】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断するステップは、
記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む請求項20から22のいずれか一項に記載の方法。
【請求項２４】
前記タグテーブル内の前記データユニットブロックのアクセス情報を更新するステップと、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するステップと
をさらに含む請求項20から23のいずれか一項に記載の方法。
【請求項２５】
メモリアクセス要求を開始するメモリコントローラを備えているマルチコアプロセッサと、
請求項1から13のいずれか一項に記載のメモリシステムと
を備えるコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータストレージ技術の分野に関し、特にメモリシステム、メモリアクセス要求を処理するための方法、およびコンピュータシステムに関する。
【背景技術】
【０００２】
プロセッサの処理速度およびデータストレージの読出し速度の要件が、コンピュータ技術の急速な発達につれて増大している。マルチコアプロセッサは、2つ以上の完結した演算エンジン（コア）が1つのプロセッサへと統合されていることを指す。図1を参照すると、マルチコアマルチメモリ（multi-core multi-memory）のコンピュータアーキテクチャが、CPU 100およびストレージモジュール110を備えており、CPUは、複数のプロセッサコアおよびキャッシュを備えており、メモリコントローラが、I/Oインターフェイスによってストレージモジュールへと接続され、ストレージモジュールは、複数のメモリモジュールを備えている。
【０００３】
データセンタ（Data Center）における処理を必要とするデータが増えるにつれて、可能な限り多くのデータをメモリに記憶することによって処理速度を高めるために、メモリ容量に関するデータセンタの要件も増大する。1つ以上のメモリチャネルが、従来からのメモリシステムに存在でき、これらのメモリチャネルは、メモリコントローラによって管理される。各々のメモリチャネルは、1つ以上のメモリスロットをサポートすることができ、メモリモジュールは、各々のメモリスロットに取り付けられる。やりとりのための経路が、メモリコントローラと1つのメモリチャネルとの間、およびメモリチャネルとメモリモジュールとの間に存在する。種々のメモリチャネルは、互いに独立しており、種々のメモリモジュールは、互いに独立している。伝統的なメモリは、同期のタイミングにもとづくDDRx（DDR3など）プロトコルのDRAMを使用するが、DRAMは、ビット密度が低い、待機時の電力消費が大きい（DRAMは定期的なリフレッシュを必要とするため）、などの欠点を有しており、データセンタにおいてメモリが消費する電力消費は、システム全体の合計の電力消費の25%超を占めることが、研究によって示されている。近年において、相変化メモリ（Phase Change Memory、PCM）、磁気ランダムアクセスメモリ（Magnetic Random Access Memory、MRAM）、およびフラッシュメモリ（Flash）などの不揮発メモリ（Non-Volatile Memory、NVM）など、複数の新規なメモリ材料が現れてきている。これらのNVMは、ビット密度が高い、待機時の電力消費が少ない、などの利点を有するとともに、電源の異常の場合であっても、データを保持することができる（不揮発である）。一部のNVM（PCMなど）の読出しアクセスのレイテンシは、DRAMと比べてわずかに劣るだけかもしれないが、それらの書込みアクセスのレイテンシは、DRAMよりもはるかに大きく、NVMの書込み耐久性は限られている。これらの欠点ゆえに、NVMは、DRAMを完全に置き換えるメモリとしてよりもむしろ、DRAMの拡張メモリとして役に立つ。拡張メモリは、これに限られるわけではないがNVMを含み、他の種類のストレージも含む。
【０００４】
DRAMと拡張メモリとのハイブリッドメモリを使用することが、将来の傾向となっており、DRAMが通常は拡張メモリのためのキャッシュ（Cache）として使用され、頻繁にアクセスされるデータが、アクセスのレイテンシを小さくするために、DRAMに配置される。しかしながら、従来からのDDR同期フェッチタイミングは、この種の混成の非一様なフェッチのレイテンシを直接処理することができず、処理を担当するソフトウェア（オペレーティングシステムOSまたは仮想マシンモニタVMMなど）を必要とする。ハイブリッドメモリは、ソフトウェアにとって透過的（transparent）でない。
【０００５】
従来からのDDRメモリの同期アクセスインターフェイスは、アクセスコマンドが固有のレイテンシを有することを必要とし、したがってDDRメモリは、ハイブリッドメモリによってもたらされるこの種の非一様なフェッチのレイテンシ特性を直接処理することができず、非一様なレイテンシの処理を担当するソフトウェア（オペレーティングシステムまたは仮想マシンモニタなど）を必要とする。図2が、ソフトウェアがハイブリッドメモリへのアクセスの要求を処理するプロセスを示している。ここでは、OS（オペレーティングシステム）が例として使用され、VMM（仮想マシンモニタ）は、OSの機構と同様の機構を有する。この場合、下位層（underlying layer）におけるハイブリッドメモリは、OSにとって透過的でない。OSは、どのページ（Page）が現時点においてDRAM内に存在し、どのページが拡張メモリにのみ存在するのかを、維持する必要がある。これは、通常は、ページテーブルのエントリにフラグバイトを追加することによって実現される。メモリアクセス要求の受信時に、OSは、最初にページテーブルを照会し、アクセスすべきデータがDRAM内に存在するのかどうかを学習する。存在する場合、DRAMへの直接のアクセスが行われ、存在しない場合、ページフォルト（Page Fault）を生成する必要があり、最初にページが拡張メモリからDRAMへと移動させられ、対応するページテーブルのエントリのフラグバイトが更新され、最終的にメモリアクセス要求をDRAMへと送信することができる。
【０００６】
性能を最適化するために、ソフトウェアは、ページのアクセス頻度情報の収集をさらに担当し、頻度情報は、通常は、ページの移動の戦略を案内するために、ページテーブルのエントリに記憶され、例えば書込みが頻繁に行われるページがDRAMに記憶される場合、ソフトウェアのオーバヘッドが比較的大きい。さらに、ハイブリッドメモリを使用する大規模なシステムにおいては、マシンの状態を拡張メモリへと再び書き込むために、チェックポイント保護（Checkpoint protection）をソフトウェアにおいて定期的に実行することがさらに必要である。
【発明の概要】
【課題を解決するための手段】
【０００７】
本発明の実施形態の目的は、メモリアクセス速度を改善するために、メモリシステムおよびメモリアクセス要求のための方法を提供することにある。
【０００８】
第1の態様によれば、
プロセッサの動作データを記憶するように別々に構成された種類の異なる第1の種類のメモリおよび第2の種類のメモリと、
前記第1の種類のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するように構成されたバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラによって送信されたメモリアクセス要求を受信し、前記フェッチアドレスおよび前記メモリインデキシングテーブルに従って、前記フェッチアドレスに対応するデータユニットブロックが前記第1の種類のメモリまたは前記第2の種類のメモリのどちらに記憶されているかを判断し、該判断された第1の種類のメモリまたは第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を達成し、前記メモリアクセス要求の前記フェッチ動作の結果を前記メモリコントローラへと返すように構成されたバッファスケジューラと
を備えるメモリシステムが提供される。
【０００９】
第1の考えられる実施のやり方において、
前記バッファスケジューラは、前記フェッチアドレスに対応するデータユニットブロックが前記第2の種類のメモリに記憶されていると判断される場合に、該データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記移動スケジューラによって送信された通知を受信して、前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記第2の種類のメモリ内のデータユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断し、移動後に前記メモリインデキシングテーブルを更新するように構成された移動スケジューラ
をさらに備える。
【００１０】
第1の態様または第1の態様の第1の考えられる実施のやり方に関連し、第2の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックが前記第1の種類のメモリに位置すると判断される場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2の種類のメモリに位置すると判断される場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求を完了させるように特に構成される。
【００１１】
第1の態様または第1の態様の第1の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックが前記第1の種類のメモリに位置すると判断される場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2の種類のメモリに位置すると判断される場合に、前記第2の種類のメモリ内の前記データユニットブロックを前記第1の種類のメモリへと移動させ、前記第1の種類のメモリにおいて前記メモリアクセス要求を完了させるように特に構成される。
【００１２】
第1の態様あるいは第1の態様の第2の考えられる実施のやり方または第1の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、前記フェッチアドレスおよび前記フェッチ動作を含むメモリアクセス要求を抽出するように構成された解析モジュールと、
前記第1の種類のメモリにアクセスするメモリアクセス要求を記憶するように構成された第1の要求待ち行列と、
前記第2の種類のメモリにアクセスするメモリアクセス要求を記憶するように構成された第2の要求待ち行列と、
前記フェッチアドレスを使用することによって前記メモリインデキシングテーブルを照会して、メモリアクセス要求によって要求されたデータユニットブロックが第1の種類のメモリ内にあるか否かを判断し、該データユニットブロックが前記第1の種類のメモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記第1の種類のメモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶するように構成された判断モジュールと、
前記第1の種類のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶するように構成された第1の返送待ち行列と、
前記第2の種類のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶するように構成された第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記第1の種類のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記第2の種類のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュールと、
複数のメモリアクセス要求のフェッチ動作の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すように構成されたパッケージングモジュールと
を備える。
【００１３】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、または第1の態様の第4の考えられる実施のやり方に関連し、第5の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するように構成されたレジスタと、
前記アクセス動作の量を前記移動しきい値と比較し、比較結果に応じて、前記第2の種類のメモリ内のデータユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断するように構成された移動判断ロジカルモジュールと、
前記移動判断ロジカルが移動が必要であるとの結果を出力するときに移動コマンドを記憶するように構成されたコマンドバッファと、
前記第2の種類のメモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するように構成されたデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新するように構成された更新モジュールと
を備える。
【００１４】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、第1の態様の第4の考えられる実施のやり方、または第1の態様の第5の考えられる実施のやり方に関連し、第6の考えられる実施のやり方において、前記第1の種類のメモリは、揮発メモリモジュールであり、前記第2の種類のメモリは、不揮発メモリモジュールである。
【００１５】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、第1の態様の第4の考えられる実施のやり方、または第1の態様の第5の考えられる実施のやり方に関連し、第7の考えられる実施のやり方において、前記第1の種類のメモリのアクセス速度は、前記第2の種類のメモリのアクセス速度よりも高速である。
【００１６】
第2の態様によれば、
プロセッサの動作データを記憶するように別々に構成された揮発メモリおよび不揮発メモリと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを示しているタグテーブルを記憶するように構成されたバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、前記フェッチアドレスを使用することによって前記タグテーブルを照会することで、前記データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを判断し、該判断された揮発メモリまたは不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリコントローラへと返すように構成されたバッファスケジューラと
を備えるメモリシステムが提供される。
【００１７】
第2の態様の第1の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記通知を受信して、前記タグテーブル内の前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記不揮発メモリ内のデータユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するように構成された移動スケジューラ
をさらに備える。
【００１８】
第2の態様の第2の考えられる実施のやり方において、前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、メモリアクセス要求を抽出するように構成された解析モジュールと、
前記揮発メモリにアクセスするメモリアクセス要求を記憶するように構成された第1の要求待ち行列と、
前記不揮発メモリにアクセスするメモリアクセス要求を記憶するように構成された第2の要求待ち行列と、
前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、各々のメモリアクセス要求によってアクセスされるデータユニットブロックが前記揮発メモリ内にあるか否かを判断し、該データユニットブロックが前記揮発メモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記揮発メモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶し、該データユニットブロックの前記アクセス情報の更新の通知を送信するように構成された判断モジュールと、
前記揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶するように構成された第1の返送待ち行列と、
前記不揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶するように構成された第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記不揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュールと、
複数のメモリアクセス要求の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すように構成されたパッケージングモジュールと
を備える。
【００１９】
第2の態様または第2の態様の第1の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するように構成されたレジスタと、
前記アクセス動作の量を前記移動しきい値と比較して、前記不揮発メモリ内のページを前記揮発メモリへと移動させるか否かを判断するように構成された移動判断ロジカルモジュールと、
前記移動判断ロジカルが移動が必要であるとの結果を出力するときに移動コマンドを記憶するように構成されたコマンドバッファと、
前記不揮発メモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するように構成されたデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新するように構成されたタグ更新モジュールと
を備える。
【００２０】
第2の態様、あるいは第2の態様の第1の考えられる実施のやり方、第2の態様の第2の考えられる実施のやり方、または第2の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、前記揮発メモリは、DRAM（ダイナミックランダム・アクセス・メモリ、dynamic random access memory）であり、前記不揮発メモリは、NVM（不揮発メモリ、non-volatile memory）である。
【００２１】
第3の態様によれば、メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
前記メモリアクセス要求内の前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、該アクセス要求に対応するデータユニットブロックが第1の種類のメモリまたは該第1の種類のメモリとは異なる種類の第2の種類のメモリのどちらに記憶されているかを判断し、移動スケジューラに対して前記データユニットブロックのアクセス情報の更新を指示するステップと、
前記データユニットブロックが前記第1の種類のメモリに記憶されている場合に、前記第1の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法が提供される。
【００２２】
第1の考えられる実施のやり方において、前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記第1の種類のメモリへと移動させ、次いで前記第1の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２３】
第2の考えられる実施のやり方において、前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2の種類のメモリに記憶されている場合に、前記第2の種類のメモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２４】
第3の態様、あるいは第3の態様の第1の考えられる実施のやり方または第3の態様の第2の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、当該方法は、
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2の種類のメモリ内に位置する前記データユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断するステップ
をさらに含む。
【００２５】
第3の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2の種類のメモリ内に位置する前記データユニットブロックを前記第1の種類のメモリへと移動させるか否かを判断するステップは、
前記移動スケジューラによって、記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む。
【００２６】
第3の態様の第4の考えられる実施のやり方に関連し、第5の考えられる実施のやり方において、当該方法は、
前記移動スケジューラによって、移動が必要であると判断される場合に前記メモリインデキシングテーブルの情報を更新するステップ
をさらに含む。
【００２７】
第4の態様によれば、メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、前記メモリアクセス要求内の前記フェッチアドレスを使用することによって照会して、該アクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断するステップと、
前記データユニットブロックが前記揮発メモリに記憶されている場合に、前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法が提供される。
【００２８】
第1の考えられる実施のやり方において、前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記揮発メモリへと移動させ、次いで前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２９】
第2の考えられる実施のやり方において、前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００３０】
第4の態様、あるいは第4の態様の第1の考えられる実施のやり方、または第4の態様の第2の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断するステップは、
記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む。
【００３１】
第4の態様、あるいは第4の態様の第1の考えられる実施のやり方、第4の態様の第2の考えられる実施のやり方、または第4の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、当該方法は、
前記タグテーブル内の前記データユニットブロックのアクセス情報を更新するステップと、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するステップと
をさらに含む。
【００３２】
第5の態様によれば、
メモリアクセス要求を開始するように構成されたメモリコントローラを備えているマルチコアプロセッサと、
第1の態様または第2の態様のいずれかの考えられる実施のやり方に従ってもたらされるメモリシステムと
を備えるコンピュータシステムが提供される。
【００３３】
本発明の実施形態において、異なる種類のメモリの管理が、ハードウェアによって実行される。種類が異なる第1の種類のメモリおよび第2の種類のメモリが、メモリシステムに存在する。メモリアクセス要求を、第1の種類のメモリおよび第2の種類のメモリにおいて別々に完了させることができ、これはOSにとって透過的であり、ページフォルトを引き起こすことがなく、メモリアクセス速度を改善することができる。
【００３４】
本発明の実施形態または先行技術における技術的解決策をより明瞭に説明するために、実施形態または先行技術の説明に必要な添付の図面を、以下で簡単に紹介する。当然ながら、添付の図面は、以下の説明において、あくまでも本発明のいくつかの実施形態を示すにすぎず、当業者であれば、依然として、創造的な活動を必要とすることなくこれらの添付の図面から他の図を導き出すことが可能である。
【図面の簡単な説明】
【００３５】
【図１】マルチコアマルチメモリコンピュータのアーキテクチャの概略図である。
【図２】ハイブリッドメモリへのアクセスを処理するソフトウェアの概略のフロー図である。
【図３】本発明によるメモリシステムの実施形態の概略の構造図である。
【図４】本発明によるバッファスケジューラの実施形態の概略の構造図である。
【図５】本発明による移動スケジューラの実施形態の概略の構造図である。
【図６】本発明によるメモリシステムの別の実施形態の概略の構造図である。
【図７】本発明によるバッファスケジューラの別の実施形態の概略の構造図である。
【図８】本発明によるメモリアクセス要求を処理するバッファスケジューラの概略のフロー図である。
【図９】本発明によるタグテーブルの実施形態の概略の構造図である。
【図１０】本発明による移動スケジューラの別の実施形態の概略の構造図である。
【図１１】本発明によるページの移動の要否を判断する移動スケジューラの概略のフロー図である。
【図１２】本発明の実施形態によるコンピュータシステムの実施形態の概略の構造図である。
【図１３】本発明の実施形態によるコンピュータシステムの別の実施形態の概略の構造図である。
【図１４】本発明の実施形態によるメモリアクセス要求を処理するための方法の実施形態の概略のフロー図である。
【図１５】本発明の実施形態によるメモリアクセス要求を処理するための方法の別の実施形態の概略のフロー図である。
【発明を実施するための形態】
【００３６】
以下は、本発明の実施形態における技術的解決策を、本発明の実施形態における添付の図面を参照して、明瞭かつ充分に説明する。当然ながら、説明される実施形態は、あくまでも本発明の一部の実施形態であり、すべての実施形態ではない。当業者が本発明の実施形態にもとづいて創造的な活動を必要とすることなく得ることができるすべての他の実施形態は、本発明の保護の範囲に含まれる。
【００３７】
本発明の技術的解決策の理解を容易にするために、本発明の実施形態において現れるいくつかの技術用語を、最初に説明する。本発明の実施形態において言及されるCPU（Central Processing Unit、中央演算処理装置）は、プロセッサの一種であり、プロセッサは、ASIC（Application Specific Integrated Circuit、特定用途向け集積回路）または本発明の実施形態を実行するように構成された1つ以上の他の集積回路であってもよい。当業者であれば、プロセッサの別の実施のやり方で本発明の実施形態におけるCPUを置き換えてもよいことを、理解できるであろう。
【００３８】
メモリコントローラは、メモリモジュール（あるいは、メモリと称される）の制御ならびにコンピュータシステムの内部のメモリとプロセッサとの間のデータ交換のための重要な一部分である。現時点において、一般的なやり方は、CPUにメモリコントローラを埋め込むことである。しかしながら、メモリコントローラおよびCPUは、別個独立に実現され、接続を使用することによって通信してもよい。
【００３９】
メモリモジュールは、プロセッサ（例えば、CPU）の動作データを記憶するように構成される。一般に、メモリモジュールは、1つ以上のストレージユニット（あるいは、メモリチップと称される）を備える。メモリチャネルインターフェイスが、メモリモジュール上に位置し、メモリチャネルの接続に用いられるインターフェイスである。メモリチャネルは、メモリモジュールをメモリコントローラへと接続するチャネルである。
【００４０】
いくつかの一般的に用いられるメモリモジュールが、以下で例として説明される。DIMM（Dual Inline Memory Modules、デュアル・インライン・メモリ・モジュール）が、Pentium(登録商標) CPUの発売後に現れた新規なメモリモジュールである。DIMMは、64ビットのデータチャネルを提供し、したがってPentium(登録商標)のマザーボードにおいて単独で使用することができる。DIMMは、SIMM（single in-line memory module、シングル・インライン・メモリ・モジュール）のスロットよりも長く、DIMMは、新たな168ピンのEDORAM（Extended Data Output RAM、拡張データ出力RAM）メモリもサポートする。DRAM（Dynamic Random Access Memory、ダイナミック・ランダム・アクセス・メモリ）が、最も一般的なメモリチップであり、DIMMまたはSIMMは、1つ以上のDRAMを備えることができる。DRAMは、きわめて短い時間だけしかデータを保持することができない。データを保持するために、DRAMは、ストレージ用コンデンサを使用し、したがって或る時間期間のたびにリフレッシュが必要であり、ストレージユニットがリフレッシュされない場合、記憶された情報は失われる。DRAMに記憶されたデータは、電源オフまたは電源の異常の場合にも失われてしまう。NVM（Non-Volatile Memory、不揮発メモリ）は、メモリチップとして使用することができる別の種類のメモリグラニュール（memory granule）であり、DIMMまたはSIMMは、1つ以上のNVMを備えることができる。一般に、NVMは、プログラムおよびデータを記憶するために使用され、NVMに記憶されたデータは、電源オフまたは電源の異常の場合も失われることがなく、これがDRAMの特徴からの違いである。メモリがデータの読出しまたは書込みを行うたびに、特定のデータユニットにもとづく動作が実行され、ここでデータユニットは、通常は4ｋのデータを表すページまたはメモリページ（Page）である。
【００４１】
さらに、本発明の実施形態において説明される「接続」が、2つ以上の仮想のモジュールの間、2つ以上の実在のモジュールの間、または実在のモジュールと仮想のモジュールとの間に通信接続が存在することを示しており、その具体的な手段が、1つ以上の通信ラインまたは信号線であってよいことに、注意すべきである。特に指定されない限り、「接続」は、直接接続であってよく、インターフェイスまたはポートを使用することによる接続であってよく、あるいは別の仮想のモジュールまたは実在のモジュールを使用することによる接続であってよい。特に指定されない限り、本発明の実施形態における「第1」および「第2」は、区別のためのものにすぎず、特定の順番を示すためのものではない。
【００４２】
図3を参照すると、図3は、
プロセッサの動作データを記憶するように構成された第1の種類のメモリ301と、
プロセッサの動作データを記憶するように構成され、第1の種類のメモリとは種類が異なる第2の種類のメモリ302と、
第1の種類のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するように構成されたバッファ303と、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、フェッチアドレスおよびメモリインデキシングテーブルに従って、フェッチアドレスに対応するデータユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを判断し、判断された第1の種類のメモリまたは第2の種類のメモリにおいてメモリアクセス要求を達成し、メモリアクセス要求の結果をメモリコントローラへと返すように構成されたバッファスケジューラ304と
を備えるメモリシステムの実施形態を示している。
【００４３】
さらに、一実施形態において、バッファスケジューラは、フェッチアドレスに対応するデータユニットブロックが第2の種類のメモリに記憶されていると判断されるときに、データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成される。メモリシステムは、移動スケジューラ305をさらに備え、移動スケジューラは、移動スケジューラによって送信される通知を受信して、データユニットブロックのアクセス情報を更新し、データユニットブロックのアクセス情報に従って、第2の種類のメモリ内のデータユニットブロックを第1の種類のメモリへと移動させるか否かを判断し、移動後にメモリインデキシングテーブルを更新するように構成される。
【００４４】
第1の種類のメモリおよび第2の種類のメモリは、個別にメモリモジュールであってよく、あるいは個別に少なくとも1つのメモリチップであってよく、プロセッサの動作データを記憶できる限りにおいて、それらの粒度（granularities）に制約はない。第1の種類のメモリおよび第2の種類のメモリは、種類が異なっており、種類の相違は、2つのメモリの記憶媒体の種類の相違、または2つのメモリの記憶速度の相違であってよい。一実施形態においては、第1の種類のメモリが、揮発メモリモジュールであり、第2の種類のメモリが、不揮発メモリモジュールである（第1の種類のメモリの読出し／書込み速度が、第2の種類のメモリの読出し／書込み速度よりも高速である）。別の実施形態においては、第1の種類のメモリおよび第2の種類のメモリの両方が、揮発メモリモジュールであり、第1の種類のメモリの読出し／書込み速度が、第2の種類のメモリの読出し／書込み速度よりも高速である。別の実施形態においては、第1の種類のメモリおよび第2の種類のメモリの両方が、不揮発メモリモジュールであり、第1の種類のメモリの読出し／書込み速度が、第2の種類のメモリの読出し／書込み速度よりも高速である。
【００４５】
一実施形態において、バッファスケジューラは、第2の種類のメモリにおいてメモリアクセス要求を直接達成することができる。具体的には、バッファスケジューラは、データユニットブロックが第1の種類のメモリに位置すると判断される場合に、第1の種類のメモリにおいてメモリアクセス要求を達成し、データユニットブロックが第2の種類のメモリに位置すると判断される場合に、第2の種類のメモリにおいてメモリアクセス要求を達成するように構成される。
【００４６】
別の実施形態において、バッファスケジューラは、第2の種類のメモリにおいてメモリアクセス要求を直接達成することがない。具体的には、バッファスケジューラは、データユニットブロックが第1の種類のメモリに位置すると判断される場合に、第1の種類のメモリにおいてメモリアクセス要求を達成し、データユニットブロックが第2の種類のメモリに位置すると判断される場合に、第2の種類のメモリ内のデータユニットブロックを第1の種類のメモリへと移動させ、第1の種類のメモリにおいてメモリアクセス要求を達成するように構成される。一実施形態においては、データユニットブロックを第1の種類のメモリへと複製し、その後にアクセスの完了後に削除することができる。
【００４７】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、移動スケジューラが、記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するように特に構成される。移動しきい値を、必要に応じて設定することができる。
【００４８】
メモリインデキシングテーブルが、第1の種類のメモリ内のデータユニットブロックを示すために使用される。一実施形態において、メモリインデキシングテーブルは、第1の種類のメモリに位置するデータユニットブロックのフェッチアドレスだけを記憶する。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含み、ここでメモリ位置は、データユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを示す。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、データユニットブロックのフェッチアドレス、メモリ位置、フェッチ動作の量、およびデータ更新フラグを含み、ここでメモリ位置は、データユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを示し、データ更新フラグは、データユニットブロックの内容が更新されたことを示す。受け取ったメモリアクセス要求のフェッチ動作が書込み動作である場合、データユニットブロックの内容が更新される。当然ながら、メモリインデキシングテーブルは、他の情報も記憶することができる。メモリインデキシングテーブルを記憶するバッファを、SRAMおよびDRAMなどの記憶媒体を使用することによって物理的に実現することができる。SRAMが、アクセス速度がより速いがゆえに推奨される。物理的な位置に関して、バッファは、バッファスケジューラの内部または外部に位置することができ、あるいは移動スケジューラの内部または外部に位置することができる。
【００４９】
図4を参照すると、一実施形態において、バッファスケジューラは、
メモリコントローラによって送信されたメモリアクセス要求パケットを解析してメモリアクセス要求を抽出するように構成された解析モジュール401と、
第1の種類のメモリのアクセスのためのメモリアクセス要求を記憶するように構成された第1の要求待ち行列402と、
第2の種類のメモリのアクセスのためのメモリアクセス要求を記憶するように構成された第2の要求待ち行列403と、
メモリアクセス要求内のフェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、各々のメモリアクセス要求が要求するデータユニットブロックが第1の種類のメモリ内にあるかどうかを判断し、データユニットブロックが第1の種類のメモリ内にある場合にメモリアクセス要求を第1の要求待ち行列に記憶し、データユニットブロックが第1の種類のメモリ内にない場合にメモリアクセス要求を第2の要求待ち行列に記憶するように構成された判断モジュール404と、
第1の要求待ち行列内のメモリアクセス要求を第1の種類のメモリへとスケジュールして、メモリアクセス要求に対応するフェッチ動作を実行し、第2の要求待ち行列内のメモリアクセス要求を第2の種類のメモリへとスケジュールして、メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュール405と、
第1の種類のメモリにアクセスするメモリアクセス要求の結果を記憶するように構成された第1の返送待ち行列406と、
第2の種類のメモリにアクセスするメモリアクセス要求の結果を記憶するように構成された第2の返送待ち行列407と、
少なくとも1つのメモリアクセス要求の結果をパケットへとパッケージし、パケットをメモリコントローラへと返送するように構成されたパッケージングモジュール408と
を備える。
【００５０】
図5を参照すると、一実施形態においては、アクセス情報がアクセス動作の量を含み、移動スケジューラが、
移動しきい値を記憶するように構成されたレジスタ501と、
アクセス動作の量を移動しきい値と比較し、第2の種類のメモリ内のページを第1の種類のメモリへと移動させるか否かを判断するように構成された移動判断ロジカル502と、
移動判断ロジカルが移動が必要であるとの結果を出力するときに、移動コマンドを記憶するように構成されたコマンドバッファ503と、
第2の種類のメモリに記憶されたデータであって、移動コマンドに対応するデータユニットブロックのデータを、一時的に記憶するように構成されたデータバッファ504と、
データユニットブロックに対応するアクセス動作の量を更新し、移動判断ロジカルが移動が必要であるとの結果を出力するときに、メモリインデキシングテーブルを更新するように構成された更新モジュール505と
を備える。
【００５１】
アクセス動作の量が移動しきい値以上である場合、移動判断ロジカル503は、第2の種類のメモリ内のページを第1の種類のメモリへと移動させる必要があるとの結果を出力し、アクセス動作の量が移動しきい値未満である場合、移動判断ロジカル503は、第2の種類のメモリ内のページを第1の種類のメモリへと移動させる必要がないとの結果を出力する。
【００５２】
メモリインデキシングテーブルが第1の種類のメモリ内に位置するデータユニットブロックのフェッチアドレスだけを記憶する場合、移動スケジューラは、データユニットブロックの動作情報を記憶するように構成された第2のレジスタをさらに備え、この動作情報は、アクセス動作の量を含む。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、移動スケジューラは、メモリインデキシングテーブル内のデータユニットブロックのアクセス動作の量を直接更新する。当然ながら、レジスタおよび第2のレジスタは、物理的には1つのユニットまたは2つのユニットであってよく、コマンドバッファおよびデータバッファも、物理的には1つのユニットまたは2つのユニットであってよい。レジスタは、物理的には、移動判断ロジカルの内部または外部に位置することができる。
【００５３】
アクセス動作は、読出し動作および書込み動作を含む。レジスタは、読出し動作の移動しきい値および書込み動作の移動しきい値を別々に記憶することができる。第2のレジスタは、データユニットブロックの読出し動作の量および書込み動作の量を別々に記憶することができる。判断時に、移動判断ロジカル503は、読出し動作および書込み動作を別々に判断することができる。
【００５４】
以上の実施形態における「移動」は、メモリ内のデータが或るメモリモジュールから別のメモリモジュールへと動かされることを指し、本明細書における「移動」を、「動かすこと」または「複製」で置き換えることも可能である。以上の実施形態における「データユニットブロック」は、メモリモジュールによって記憶されるデータの単位を指し、あるいはメモリにおけるデータの移動の最小単位を指す。一実施形態において、データユニットブロックは、ページ（page）であり、通常はページは4kのメモリデータを表す。
【００５５】
以上の実施形態において、異種混交性を実行するためにハードウェアを使用するメモリシステムは、異なる種類のメモリの管理を実行する。異なる種類の第1の種類のメモリおよび第2の種類のメモリが、メモリシステムに存在し、メモリアクセス要求を、第1の種類のメモリおよび第2の種類のメモリのそれぞれにおいて達成することができ、それがOSまたは処理のための他のソフトウェアを必要とせず、ページフォルトを引き起こすことがなく、メモリアクセス速度を改善でき、ハードウェアによる実行は、ソフトウェアのオーバヘッドを減らすことができる。
【００５６】
図6を参照すると、図6は、
プロセッサの動作データを記憶するように構成された揮発メモリ601と、
プロセッサの動作データを記憶するように構成された不揮発メモリ602と、
データユニットブロックのアクセス情報を示すために使用されるタグ（tag）テーブルを記憶し、さらにデータユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を記憶するように構成され、メモリ位置はデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているバッファ603と、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、フェッチアドレスを使用することによってタグテーブルを照会することで、フェッチアドレスに対応するページが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断し、判断された揮発メモリまたは不揮発メモリにおいてメモリアクセス要求のフェッチ動作を達成し、メモリアクセス要求の結果をメモリコントローラへと返すように構成されたバッファスケジューラ604と
を備えるメモリシステムの別の実施形態を示している。
【００５７】
さらに、別の実施形態において、バッファスケジューラは、データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成される。メモリシステムは、通知を受信して、タグテーブル内のデータユニットブロックのアクセス情報を更新し、データユニットブロックのアクセス情報に従って、不揮発メモリ内のデータユニットブロックを揮発メモリへと移動させるか否かを判断し、移動後にタグテーブルを更新するように構成された移動スケジューラ605をさらに備える。
【００５８】
この実施形態において、タグテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶する。一実施形態において、タグテーブルは、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含み、ここでメモリ位置は、データユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを示す。別の実施形態において、タグテーブルは、データユニットブロックのフェッチアドレス、メモリ位置、フェッチ動作の量、およびデータ更新フラグを含み、ここでメモリ位置は、データユニットブロックが第1の種類のメモリまたは第2の種類のメモリのどちらに記憶されているかを示し、データ更新フラグは、データユニットブロックの内容が更新されたことを示す。受け取ったメモリアクセス要求のフェッチ動作が書込み動作である場合、データユニットブロックの内容が更新される。当然ながら、タグテーブルは、他の情報も記憶することができる。タグテーブルを記憶するバッファを、物理的には、SRAMおよびDRAMなどの記憶媒体を使用することによって実現することができる。SRAMが、アクセス速度がより速いがゆえに推奨される。物理的な位置に関して、バッファは、独立して存在でき、あるいはバッファスケジューラの内部または外部に位置することができ、もしくは移動スケジューラの内部または外部に位置することができる。
【００５９】
一実施形態において、データユニットブロックは、ページである。
【００６０】
上述の実施形態と比べて、この実施形態においては、第1の種類のメモリが、具体的には揮発メモリであり、第2の種類のメモリが、具体的には不揮発メモリであり、メモリインデキシングテーブルが、具体的にはタグテーブルであり、データユニットブロックが、具体的にはページである。当然ながら、揮発メモリおよび不揮発メモリは、別々にメモリモジュールであってよく、あるいは別々に少なくとも1つのメモリチップであってよく、それらの粒度に制約はない。上述の実施形態におけるバッファスケジューラおよび移動スケジューラの実施形態を、この実施形態においても使用することができ、相違点は、上述の実施形態における第1の種類のメモリが、この実施形態においては特に揮発メモリであり、上述の実施形態における第2の種類のメモリが、この実施形態においては特に不揮発メモリであり、上述の実施形態におけるデータユニットブロックが、この実施形態においては特にページである点にある。
【００６１】
一実施形態において、揮発メモリはDRAMであり、不揮発メモリはNVMである。
【００６２】
この実施形態において、ハイブリッドメモリの管理は、メモリシステム内のハードウェアを使用することによって実行される。動作が頻繁なページが、揮発メモリに記憶され、動作が頻繁でないページが、不揮発メモリに記憶される。メモリアクセス要求を、良好な参照の局在性を有するページのアクセス性能への無作為にアクセスされるページからの干渉を減らすように、揮発メモリおよび不揮発メモリのそれぞれにおいて達成することができ、したがってメモリアクセス速度を改善でき、不揮発メモリから揮発メモリへのページの移動を実行できることで、アクセス性能が改善される。
【００６３】
図7を参照すると、揮発メモリがDRAMであり、不揮発メモリがNVMであり、データユニットブロックが特にページであり、メモリアクセス要求がフェッチ要求メッセージである場合が、例として使用される。図7は、パケット解析モジュールと、パッケージングモジュールと、判断モジュールと、スケジューリングモジュールと、要求待ち行列と、返送待ち行列とを備えるバッファスケジューラの実施形態を示している。要求待ち行列および返送待ち行列は、異なる記憶媒体に従って別々に管理され、この実施形態においてはDRAM要求待ち行列、NVM要求待ち行列、DRAM返送待ち行列、およびNVM返送待ち行列を含む。パケット解析モジュールは、メモリコントローラによって送信されたメモリアクセス要求パケットの解析を担当し、メモリアクセス要求を抽出する。パケットが複数の読出し／書込み要求を含むことができ、メモリアクセス要求が、フェッチアドレス、フェッチ粒度、フェッチ動作（読出し動作または書込み動作）、および優先度などの情報を含むことに、注意すべきである。各々のメモリアクセス要求に関して、判断モジュールは、フェッチアドレスを使用することによってタグテーブルを照会して、アクセス対象のページがDRAM内にあるか否かを判断し、アクセス対象のページがDRAM内にある場合にメモリアクセス要求をDRAM要求待ち行列に配置し、アクセス対象のページがDRAM内にない場合は要求をNVM要求待ち行列に配置する。スケジューリングモジュールは、要求待ち行列内のメモリアクセス要求のスケジューリングを担当し、それぞれの物理的なインターフェイスを使用することによって要求を実行のために対応するメモリチップへとスケジューリングし、すなわちDRAMにおける要求をDRAMの物理的なインターフェイスを使用することによってスケジューリングし、NVMの要求をNVMの物理的なインターフェイスを使用することによってスケジューリングする。読出し要求の完了後に、返送されるデータは、対応する返送待ち行列に配置され、最終的に全体返送待ち行列に配置され、パッケージングモジュールが、複数の要求によって返送されるデータをパケットへとパッケージし、パケットをメモリコントローラへと返送するために使用される。
【００６４】
図8を参照すると、バッファスケジューラがメモリアクセス要求を処理する手順は、以下を含む。
（1）メモリアクセス要求パケットを受信した後に、バッファスケジューラがパケットを解析し、メモリアクセス要求のアドレスおよび読出し／書込み情報を得る。
（2）バッファスケジューラが、アドレスを使用することによってタグテーブルを照会し、アクセス対象のページがDRAM内にあるか否かを判断する。DRAM内にある場合、（3）へと進み、DRAM内にない場合、（4）へと進む。
（3）バッファスケジューラが、メモリアクセス要求をDRAMへと送信し、移動スケジューラに対してページのアクセス情報の更新を指示する。DRAMからのデータの取得後に、バッファスケジューラは、データをパケットへとカプセル化し、パケットをプロセッサへと返送する。要求の処理が終了する。
（4）バッファスケジューラが、メモリアクセス要求をNVMへと送信する。この場合、データがNVMからバッファスケジューラへと直接返され、次いでパケットへとカプセル化され、プロセッサへと返送される。同時に、バッファスケジューラは、移動スケジューラに対してページのアクセス情報の更新を指示する。次いで、移動スケジューラが、ページをNVMからDRAMへと移動させる必要があるか否かを判断する。必要がない場合、メモリアクセス要求の処理は終わり、必要である場合、（5）へと進む。
（5）移動スケジューラが、ページ移動動作を開始し、タグテーブルを更新する。DRAM内に依然として空きが存在する場合、移動スケジューラは、NVMからのページをDRAMへと直接配置し、DRAM内に空きが存在しない場合、移動スケジューラは、DRAMから置き換えられるべきページを選択し、新たなページをDRAMへと配置する。ここでのページ移動およびデータをNVMから返す処理が、同時に実行されてもよいことに注意すべきである。
【００６５】
タグテーブルに記憶される情報は、ページのアドレス、ページがどのメモリに位置しているか、およびページアクセスの量を含む。さらに、タグテーブルの主要な機能が含まれてよく、ここで主要な機能は、どの物理的なアドレス空間が現時点においてDRAM内に位置しているかを維持すること、および各ページのアクセスカウントを維持することである。タグテーブルは、直接アドレス指定を使用することができ、あるいはサーチ処理の加速および空間のオーバヘッドの削減のために、ハッシュテーブルなどの別のやり方を使用することができる。タグテーブルの更新は、ソフトウェア（例えば、OSまたはハイパーバイザ）にとって完全に透過的な移動スケジューラによって達成される。
【００６６】
図9は、タグテーブルの実施の例であり、ハッシュテーブルが、各ページの情報を維持するために使用される。フェッチアドレスが、ハッシュ動作において、ハッシュテーブルのインデックスを得るために使用される。複数のページが同じ場所へとハッシュされる場合（ハッシュの衝突と称される）、リンクリスト（linked list）が、複数のページの情報を接続するために使用される。ハッシュテーブルの各エントリは、対応するページのアクセス情報を含み、TAGは、アドレス全体であり、Pは、現在のページがDRAM内にあるか否かを示す存在ビットであり、Pが1である場合、現在のページがDRAM内にあることを示しており、0は、現在のページがDRAM内にないことを示しており、Dは、ページが書き換えられたか否かを示すダーティビットであり、Countは、ページのアクセスの回数を示しており、ページの移動を案内するために使用される。新たなメモリアクセス要求の受信時に、バッファスケジューラは、ハッシュ動作を実行してインデックスを取得し、指定のページに一致する情報が見つかるまでインデックスをリンクリスト内のTAGと1つずつ比較する。
【００６７】
図10を参照すると、揮発メモリがDRAMであり、不揮発メモリがNVMである場合が、例として使用され、移動スケジューラの実施形態が、移動判断ロジカル、タグテーブル更新モジュール、コマンドバッファ、およびデータバッファを備える。移動判断ロジカルは、アクセス対象のNVMページをDRAMへと移動させる必要があるか否かを判断するように構成される。移動判断ロジカルは、読出し／書込みアクセスの量についての移動しきい値を記憶するように構成されたレジスタを備える。コマンドバッファは、NVMページを移動させるためのコマンド（主として、移動を必要とするページのアドレスおよびページがDRAMにおいて配置されるアドレス）を記憶し、データバッファは、NVMとDRAMとの間のデータ移動のためのエージェント（agent）として機能する。バッファスケジューラがNVMへのアクセスの要求を受信したとき（タグテーブルの照会後に、アクセス要求のページがDRAM内に存在しない場合）、一方では、バッファスケジューラが、要求をスケジューリングを待つためのNVM要求待ち行列に追加すると同時に、要求を移動スケジューラへと入力する。移動判断ロジカルは、タグテーブルにおいてページのアクセス情報を照会し、移動しきい値（しきい値は、移動判断ロジカルの内部のレジスタに記憶され、設定可能である）を超えるか否かを判断し、ここでアクセス情報は、主として読出しアクセスおよび書込みアクセスの量の情報である。移動しきい値を超える場合、ページをNVMからDRAMへと移動させるためのコマンドが、コマンドバッファに追加される。移動スケジューラは、最初にデータをNVMからデータバッファへと抽出し、次いでデータをデータバッファから目標のDRAMへと配置する。移動の完了後に、対応するページの情報を、タグテーブルにおいて更新する必要がある。
【００６８】
図11を参照すると、図11は、移動スケジューラがページをNVMからDRAMへと移動させる必要があるか否かを判断する手順を示している。単純な移動の方針を設定することができる。最近の時間期間におけるページの読出しアクセスおよび書込みアクセスの量の統計が収集され、読出しアクセスしきい値および書込みアクセスしきい値が、それぞれTrおよびTwに設定される。最近の時間期間におけるページの読出しアクセスの量が、Trを超える場合、または最近の時間期間におけるページの書込みアクセスの量が、Twを超える場合に、ページは移動候補として選択される。
（1）NVMへと送信されたフェッチ要求について、フェッチ要求が読出し要求であるか否かを判断する。読出し要求である場合、（2）へと進み、読出し要求でない場合、（3）へと進む。
（2）最近の時間期間におけるページの読出しアクセスの量が、読出ししきい値Trを超えるか否かを判断する。超えない場合、移動は不要であり、処理は終了し、超える場合には、（4）へと進む。
（3）最近の時間期間におけるページの書込みアクセスの量が、書込みしきい値Twを超えるか否かを判断する。超えない場合、移動は不要であり、処理は終了し、超える場合には、（4）へと進む。
（4）ページを移動候補として選択し、ページをDRAM内の置き換えられるべきページとさらに比較する。ページのアクセスの量の方が多い場合、ページの移動を開始し、タグテーブルの情報を更新する。
【００６９】
当然ながら、段階（2）および（3）において書込みアクセスまたは書込みアクセスがしきい値を超えると判断される場合に、段階（4）を実行しなくてもよく、ページの移動が直接開始され、タグテーブルの情報が更新される。当然ながら、別の移動の方針も設定できる。
【００７０】
ソフトウェアにとって透過的なチェックポイント（checkpoint）保護を、以上の実施形態におけるメモリシステムについてさらに実行することができ、例えば移動スケジューラが、DRAM内の書き換えられたデータをNVMへと定期的にバックアップする。NVM内の領域の一部を、チェックポイントを特に記憶するために予約することができる。DRAM内の各々のページについて、ページが書き換えられたか否かを示すために、フラグバイトのダーティが、タグにおいて相応に設定される。移動スケジューラは、DRAM内のページを定期的に調べ、DRAM内の書き換えられたデータだけをDRAMへとバックアップする。
【００７１】
さらに、チェックポイントのオーバヘッドを減らすために、チェックポイントを、DRAMがリフレッシュ（Refresh）されているとき、またはバックグラウンドのエラースキャニング（ECCスクラブ（ECC Scrubbing））が実行されているときに、実行することができる。DRAMがリフレッシュされているとき、バッファスケジューラは、データをDRAMから行バッファ（Row Buffer）へと読み出し、その後にデータを書き戻す必要がある。バックグラウンドのエラースキャニングが実行されているとき、データをバッファスケジューラへと読み出す必要があり、エラーチェックが実行され、エラーが発見された後に、補正されたデータがDRAMへと書き戻される。これら2つの動作は、どちらもDRAMからのデータの読出しを必要とし、ここで読み出されたデータを、DRAMの通常の動作に影響を及ぼすことなくオーバヘッドを減らすために、定期的なチェックポイントの実行に使用することができる。
【００７２】
DRAMおよびNVMを含むハイブリッドメモリにおいて、DRAMについてのハードウェアプリフェッチ（Prefetch）をバッファスケジューラにおいて実行することも可能である。ハードウェアは、性能を改善するために、ページアクセスモードを学習し、プリフェッチコマンドを生成し、短時間のうちにアクセスされると予測されるページを前もってDRAMへと移動させる。また、バッファスケジューラにおいてハードウェアヴィクティム（Victim）を実行することも可能である。DRAMから追い出されたページは、短時間のうちに再びアクセスされる可能性がきわめて高いため、追い出されたページをヴィクティムバッファに配置することで、性能を改善することができる。
【００７３】
さらに本発明は、マルチコアプロセッサとメモリシステムとを備えるコンピュータシステムをさらに開示し、ここでマルチコアプロセッサは、メモリアクセス要求を開始するように構成されたメモリコントローラを備え、メモリシステムは、例えば図3〜図11に対応する実施形態など、上述の実施形態および上述の実施形態の内部モジュール構成要素における任意のメモリシステムであってよい。例えば、図12を参照すると、メモリシステムは、メモリインデキシングテーブル、移動スケジューラ、バッファスケジューラ、第1の種類のメモリ、および第2の種類のメモリを備える。モジュールの機能および分割については、上述の実施形態を参照されたい。例えば、図13を参照すると、メモリシステムは、タグテーブル、移動スケジューラ、バッファスケジューラ、DRAM、およびNVMを備える（当然ながら、別の実施形態においては、DRAMおよびNVMがそれぞれ揮発メモリおよび不揮発メモリであってよい）。モジュールの機能および分割については、上述の実施形態を参照されたい。
【００７４】
図14を参照すると、図14は、メモリアクセス要求を処理するための方法の実施形態を示しており、本方法は、以下を含む。
【００７５】
S1401：メモリアクセス要求パケットを受信し、要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得する。
【００７６】
S1402：メモリアクセス要求内のフェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、アクセス要求に対応するデータユニットブロックが第1の種類のメモリまたは第1の種類のメモリとは異なる種類の第2の種類のメモリのどちらに記憶されているかを判断し、移動スケジューラに対してデータユニットブロックのアクセス情報の更新を指示する。
【００７７】
S1403：データユニットブロックが第1の種類のメモリに記憶されている場合、第1の種類のメモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元（initiator）へと返送する。
【００７８】
S1404：データユニットブロックが第2の種類のメモリに記憶されている場合、第2の種類のメモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００７９】
一実施形態において、ステップS1404は、
データユニットブロックが第2の種類のメモリに記憶されている場合に、アクセス対象のデータユニットブロックを第1の種類のメモリへと移動させ、次いで第1の種類のメモリにおいてメモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００８０】
別の実施形態において、ステップS1404は、
データユニットブロックが第2の種類のメモリ内にある場合に、第2の種類のメモリに直接アクセスして、メモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００８１】
一実施形態において、本方法は、以下をさらに含む。
【００８２】
S1405：移動スケジューラが、データユニットブロックのアクセス情報を更新する。
【００８３】
S1406：移動スケジューラが、データユニットブロックのアクセス情報に従って、第2の種類のメモリ内に位置するデータユニットブロックを第1の種類のメモリへと移動させるか否かを判断する。
【００８４】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、ステップS1405が、
移動スケジューラによって、記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するステップ
を含む。随意により、ステップS1405は、移動が必要であると判断されたときに、移動スケジューラによってメモリインデキシングテーブルの情報を更新するステップをさらに含む。
【００８５】
この実施形態において、異なる種類の第1の種類のメモリおよび第2の種類のメモリを含むメモリシステムの管理が実行される。メモリアクセス要求を、処理を中断することなく第1の種類のメモリおよび第2の種類のメモリのそれぞれにおいて達成できるため、メモリアクセス速度を改善することができる。
【００８６】
図15を参照すると、図15は、別の実施形態に従ってメモリアクセス要求を処理するための方法の別の実施形態を示しており、本方法は、以下を含む。
【００８７】
S1501：メモリアクセス要求パケットを受信し、要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得する。
【００８８】
S1502：データユニットブロックのアクセス情報を示すために使用され、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、メモリ位置はデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、メモリアクセス要求内のフェッチアドレスを使用することによって照会して、アクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているか否かを判断する。
【００８９】
S1503：データユニットブロックが揮発メモリに記憶されている場合に、揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００９０】
S1504：データユニットブロックが不揮発メモリに記憶されている場合に、不揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００９１】
一実施形態において、ステップS1504は、
データユニットブロックが不揮発メモリに記憶されている場合に、アクセス対象のデータユニットブロックを揮発メモリへと移動させ、次いで揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００９２】
別の実施形態において、ステップS1504は、
データユニットブロックが不揮発メモリ内にある場合に、不揮発メモリに直接アクセスして、メモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００９３】
さらに、一実施形態において、メモリアクセス要求を処理するための方法は、以下をさらに含む。
【００９４】
S1505：タグテーブル内のデータユニットブロックのアクセス情報を更新する。
【００９５】
S1506：データユニットブロックのアクセス情報に従って、不揮発メモリ内に位置するデータユニットブロックを揮発メモリへと移動させるか否かを判断し、移動後にタグテーブルを更新する。
【００９６】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、ステップS1506が、
記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するステップ
を含む。
【００９７】
移動が必要であると判断される場合、不揮発メモリに記憶されたデータユニットブロックを揮発メモリへと移動させる動作を実行し、移動後にタグテーブルを更新する。
【００９８】
一実施形態において、データユニットブロックは、ページである。
【００９９】
この実施形態において、揮発メモリおよび不揮発メモリを含むメモリシステムの管理が実行される。メモリアクセス要求を、処理を中断することなく揮発メモリおよび不揮発メモリのそれぞれにおいて達成できるため、メモリアクセス速度を改善することができる。
【０１００】
当業者であれば、実施形態における方法の工程のすべてまたは一部を、関連のハードウェアに対して指示を行うコンピュータプログラムによって実行できることを、理解できるであろう。プログラムを、コンピュータにとって読み取り可能な記憶媒体に保存することができる。プログラムの動作時に、実施形態における方法の工程が実行される。上述の記憶媒体として、磁気ディスク、光ディスク、読出し専用メモリ（Read-Only Memory、ROM）、またはランダムアクセスメモリ（Random Access Memory、RAM）を挙げることができる。
【０１０１】
以上は、あくまでも本発明の典型的な実施形態にすぎない。当業者であれば、本発明の技術的思想および技術的範囲から離れることなく、本発明に対する種々の改良および変種を作り出すことができる。
【符号の説明】
【０１０２】
301  メモリ
302  メモリ
303  バッファ
304  バッファスケジューラ
305  移動スケジューラ
401  解析モジュール
402  行列
403  行列
404  判断モジュール
405  スケジューリングモジュール
406  行列
407  行列
408  パッケージングモジュール
501  レジスタ
502  移動判断ロジカル
503  コマンドバッファ
504  データバッファ
505  更新モジュール
601  揮発メモリ
602  不揮発メモリ
603  バッファ
604  バッファスケジューラ
605  移動スケジューラ
RAM  拡張データ出力
Tr  読出ししきい値
Tw  書込みしきい値
【図１】
2016520233.tif 000003
【図２】
2016520233.tif 000004
【図３】
2016520233.tif 000005
【図４】
2016520233.tif 000006
【図５】
2016520233.tif 000007
【図６】
2016520233.tif 000008
【図７】
2016520233.tif 000009
【図８】
2016520233.tif 000010
【図１０】
2016520233.tif 000011
【図１１】
2016520233.tif 000012
【図１２】
2016520233.tif 000013
【図１３】
2016520233.tif 000014
【図１４】
2016520233.tif 000015
【図１５】
2016520233.tif 000016
【図９】
2016520233.tif 000017
【手続補正書】
【提出日】平成28年1月7日(2016.1.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサの動作データを別々に記憶する種類の異なる第1のメモリおよび第2のメモリと、
前記第1のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラによって送信されたメモリアクセス要求を受信し、前記フェッチアドレスおよび前記メモリインデキシングテーブルに従って、前記フェッチアドレスに対応するデータユニットブロックが前記第1のメモリまたは前記第2のメモリのどちらに記憶されているかを判断し、該判断された第1のメモリまたは第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を達成し、前記メモリアクセス要求の前記フェッチ動作の結果を前記メモリコントローラへと返すバッファスケジューラと
を備えるメモリシステム。
【請求項２】
前記バッファスケジューラは、前記フェッチアドレスに対応するデータユニットブロックが前記第2のメモリに記憶されていると判断される場合に、該データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記バッファスケジューラによって送信された通知を受信して、前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記第2のメモリ内のデータユニットブロックを前記第1のメモリへと移動させるか否かを判断し、移動後に前記メモリインデキシングテーブルを更新する移動スケジューラ
をさらに備える請求項1に記載のメモリシステム。
【請求項３】
前記バッファスケジューラは、前記データユニットブロックが前記第1のメモリに位置すると判断される場合に、前記第1のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2のメモリに位置すると判断される場合に、前記第2のメモリにおいて前記メモリアクセス要求を完了させるように構成されている請求項1または2に記載のメモリシステム。
【請求項４】
前記バッファスケジューラは、前記データユニットブロックが前記第1のメモリに位置すると判断される場合に、前記第1のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2のメモリに位置すると判断される場合に、前記第2のメモリ内の前記データユニットブロックを前記第1のメモリへと移動させ、前記第1のメモリにおいて前記メモリアクセス要求を完了させるように構成されている請求項1または2に記載のメモリシステム。
【請求項５】
前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、前記フェッチアドレスおよび前記フェッチ動作を含むメモリアクセス要求を抽出する解析モジュールと、
前記第1のメモリにアクセスするメモリアクセス要求を記憶する第1の要求待ち行列と、
前記第2のメモリにアクセスするメモリアクセス要求を記憶する第2の要求待ち行列と、
前記フェッチアドレスを使用することによって前記メモリインデキシングテーブルを照会して、メモリアクセス要求によって要求されたデータユニットブロックが第1のメモリ内にあるか否かを判断し、該データユニットブロックが前記第1のメモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記第1のメモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶する判断モジュールと、
前記第1のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶する第1の返送待ち行列と、
前記第2のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶する第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記第1のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記第2のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行するスケジューリングモジュールと、
少なくとも1つのメモリアクセス要求のフェッチ動作の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すパッケージングモジュールと
を備える請求項1から4のいずれか一項に記載のメモリシステム。
【請求項６】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するレジスタと、
前記アクセス動作の量を前記移動しきい値と比較し、比較結果に応じて、前記第2のメモリ内のデータユニットブロックを前記第1のメモリへと移動させるか否かを判断する移動判断ロジカルモジュールと、
前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに移動コマンドを記憶するコマンドバッファと、
前記第2のメモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新する更新モジュールと
を備える請求項1から5のいずれか一項に記載のメモリシステム。
【請求項７】
前記第1のメモリは、揮発メモリモジュールであり、前記第2のメモリは、不揮発メモリモジュールである請求項1から6のいずれか一項に記載のメモリシステム。
【請求項８】
前記第1のメモリのアクセス速度は、前記第2のメモリのアクセス速度よりも高速である請求項1から6のいずれか一項に記載のメモリシステム。
【請求項９】
プロセッサの動作データを別々に記憶する揮発メモリおよび不揮発メモリと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを示しているタグテーブルを記憶するバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、前記フェッチアドレスを使用することによって前記タグテーブルを照会することで、前記データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを判断し、該判断された揮発メモリまたは不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリコントローラへと返すバッファスケジューラと
を備えるメモリシステム。
【請求項１０】
前記バッファスケジューラは、前記データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記通知を受信して、前記タグテーブル内の前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記不揮発メモリ内のデータユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新する移動スケジューラ
をさらに備える請求項9に記載のメモリシステム。
【請求項１１】
前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、メモリアクセス要求を抽出する解析モジュールと、
前記揮発メモリにアクセスするメモリアクセス要求を記憶する第1の要求待ち行列と、
前記不揮発メモリにアクセスするメモリアクセス要求を記憶する第2の要求待ち行列と、
前記フェッチアドレスを使用することによって前記タグテーブルを照会して、各々のメモリアクセス要求によって要求されるデータユニットブロックが前記揮発メモリ内にあるか否かを判断し、該データユニットブロックが前記揮発メモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記揮発メモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶し、該データユニットブロックの前記アクセス情報の更新の通知を送信する判断モジュールと、
前記揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶する第1の返送待ち行列と、
前記不揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶する第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記不揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行するスケジューリングモジュールと、
少なくとも1つのメモリアクセス要求のフェッチ動作の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すパッケージングモジュールと
を備える請求項9または10に記載のメモリシステム。
【請求項１２】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するレジスタと、
前記アクセス動作の量を前記移動しきい値と比較して、前記不揮発メモリ内のページを前記揮発メモリへと移動させるか否かを判断する移動判断ロジカルモジュールと、
前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに移動コマンドを記憶するコマンドバッファと、
前記不揮発メモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに前記タグテーブルを更新するタグ更新モジュールと
を備える請求項9から11のいずれか一項に記載のメモリシステム。
【請求項１３】
前記揮発メモリは、DRAM（ダイナミック・ランダム・アクセス・メモリ、dynamic random access memory）であり、前記不揮発メモリは、NVM（不揮発メモリ、non-volatile memory）である請求項9から12のいずれか一項に記載のメモリシステム。
【請求項１４】
メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
前記メモリアクセス要求内の前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、該メモリアクセス要求に対応するデータユニットブロックが第1のメモリまたは該第1のメモリとは異なる種類の第2のメモリのどちらに記憶されているかを判断し、前記データユニットブロックのアクセス情報を更新するステップと、
前記データユニットブロックが前記第1のメモリに記憶されている場合に、前記第1のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法。
【請求項１５】
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記第1のメモリへと移動させ、次いで前記第1のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項14に記載の方法。
【請求項１６】
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項14に記載の方法。
【請求項１７】
前記データユニットブロックの前記アクセス情報に従って、前記第2のメモリ内に位置する前記データユニットブロックを前記第1のメモリへと移動させるか否かを判断するステップ
をさらに含む請求項14から16のいずれか一項に記載の方法。
【請求項１８】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、移動スケジューラによって、前記第2のメモリ内に位置する前記データユニットブロックを前記第1のメモリへと移動させるか否かを判断するステップは、
記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む請求項17に記載の方法。
【請求項１９】
移動が必要であると判断される場合に前記メモリインデキシングテーブルの情報を更新するステップ
をさらに含む請求項18に記載の方法。
【請求項２０】
メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、前記メモリアクセス要求内の前記フェッチアドレスを使用することによって照会して、該メモリアクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断するステップと、
前記データユニットブロックが前記揮発メモリに記憶されている場合に、前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法。
【請求項２１】
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記揮発メモリへと移動させ、次いで前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項20に記載の方法。
【請求項２２】
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む請求項20に記載の方法。
【請求項２３】
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断するステップは、
記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む請求項20から22のいずれか一項に記載の方法。
【請求項２４】
前記タグテーブル内の前記データユニットブロックのアクセス情報を更新するステップと、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するステップと
をさらに含む請求項20から23のいずれか一項に記載の方法。
【請求項２５】
メモリアクセス要求を開始するメモリコントローラを備えているマルチコアプロセッサと、
請求項1から13のいずれか一項に記載のメモリシステムと
を備えるコンピュータシステム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータストレージ技術の分野に関し、特にメモリシステム、メモリアクセス要求を処理するための方法、およびコンピュータシステムに関する。
【背景技術】
【０００２】
プロセッサの処理速度およびデータストレージの読出し速度の要件が、コンピュータ技術の急速な発達につれて増大している。マルチコアプロセッサは、2つ以上の完結した演算エンジン（コア）が1つのプロセッサへと統合されていることを指す。図1を参照すると、マルチコアマルチメモリ（multi-core multi-memory）のコンピュータアーキテクチャが、CPU 100およびストレージモジュール110を備えており、CPUは、複数のプロセッサコアおよびキャッシュを備えており、メモリコントローラが、I/Oインターフェイスによってストレージモジュールへと接続され、ストレージモジュールは、複数のメモリモジュールを備えている。
【０００３】
データセンタ（Data Center）における処理を必要とするデータが増えるにつれて、可能な限り多くのデータをメモリに記憶することによって処理速度を高めるために、メモリ容量に関するデータセンタの要件も増大する。1つ以上のメモリチャネルが、従来からのメモリシステムに存在でき、これらのメモリチャネルは、メモリコントローラによって管理される。各々のメモリチャネルは、1つ以上のメモリスロットをサポートすることができ、メモリモジュールは、各々のメモリスロットに取り付けられる。やりとりのための経路が、メモリコントローラと1つのメモリチャネルとの間、およびメモリチャネルとメモリモジュールとの間に存在する。種々のメモリチャネルは、互いに独立しており、種々のメモリモジュールは、互いに独立している。伝統的なメモリは、同期のタイミングにもとづくDDRx（DDR3など）プロトコルのDRAMを使用するが、DRAMは、ビット密度が低い、待機時の電力消費が大きい（DRAMは定期的なリフレッシュを必要とするため）、などの欠点を有しており、データセンタにおいてメモリが消費する電力消費は、システム全体の合計の電力消費の25%超を占めることが、研究によって示されている。近年において、相変化メモリ（Phase Change Memory、PCM）、磁気ランダムアクセスメモリ（Magnetic Random Access Memory、MRAM）、およびフラッシュメモリ（Flash）などの不揮発メモリ（Non-Volatile Memory、NVM）など、複数の新規なメモリ材料が現れてきている。これらのNVMは、ビット密度が高い、待機時の電力消費が少ない、などの利点を有するとともに、電源の異常の場合であっても、データを保持することができる（不揮発である）。一部のNVM（PCMなど）の読出しアクセスのレイテンシは、DRAMと比べてわずかに劣るだけかもしれないが、それらの書込みアクセスのレイテンシは、DRAMよりもはるかに大きく、NVMの書込み耐久性は限られている。これらの欠点ゆえに、NVMは、DRAMを完全に置き換えるメモリとしてよりもむしろ、DRAMの拡張メモリとして役に立つ。拡張メモリは、これに限られるわけではないがNVMを含み、他の種類のストレージも含む。
【０００４】
DRAMと拡張メモリとのハイブリッドメモリを使用することが、将来の傾向となっており、DRAMが通常は拡張メモリのためのキャッシュ（Cache）として使用され、頻繁にアクセスされるデータが、アクセスのレイテンシを小さくするために、DRAMに配置される。しかしながら、従来からのDDRは、同期フェッチタイミングに基づいていて、この種の混成の非一様なフェッチのレイテンシを直接処理することができず、処理を担当するソフトウェア（オペレーティングシステムOSまたは仮想マシンモニタVMMなど）を必要とする。ハイブリッドメモリは、ソフトウェアにとって透過的（transparent）でない。
【０００５】
従来からのDDRメモリの同期アクセスインターフェイスは、アクセスコマンドが固有のレイテンシを有することを必要とし、したがってDDRメモリは、ハイブリッドメモリによってもたらされるこの種の非一様なフェッチのレイテンシ特性を直接処理することができず、非一様なレイテンシの処理を担当するソフトウェア（オペレーティングシステムまたは仮想マシンモニタなど）を必要とする。図2が、ソフトウェアがハイブリッドメモリへのアクセスの要求を処理するプロセスを示している。ここでは、OS（オペレーティングシステム）が例として使用され、VMM（仮想マシンモニタ）は、OSの機構と同様の機構を有する。この場合、下位層（underlying layer）におけるハイブリッドメモリは、OSにとって透過的でない。OSは、どのページ（Page）が現時点においてDRAM内に存在し、どのページが拡張メモリにのみ存在するのかを、維持する必要がある。これは、通常は、ページテーブルのエントリにフラグバイトを追加することによって実現される。メモリアクセス要求の受信時に、OSは、最初にページテーブルを照会し、アクセスすべきデータがDRAM内に存在するのかどうかを学習する。データがDRAM内に存在する場合、DRAMへの直接のアクセスが行われ、データがDRAM内に存在しない場合、ページフォルト（Page Fault）を生成する必要があり、最初にページが拡張メモリからDRAMへと移動させられ、対応するページテーブルのエントリのフラグバイトが更新され、最終的にメモリアクセス要求をDRAMへと送信することができる。
【０００６】
性能を最適化するために、ソフトウェアは、ページのアクセス頻度情報の収集をさらに担当し、頻度情報は、通常は、ページの移動の戦略を案内するために、ページテーブルのエントリに記憶され、例えば書込みが頻繁に行われるページがDRAMに記憶される場合、ソフトウェアのオーバヘッドが比較的大きい。さらに、ハイブリッドメモリを使用する大規模なシステムにおいては、マシンの状態を拡張メモリへと再び書き込むために、チェックポイント保護（Checkpoint protection）をソフトウェアにおいて定期的に実行することがさらに必要である。
【発明の概要】
【課題を解決するための手段】
【０００７】
本発明の実施形態の目的は、メモリアクセス速度を改善するために、メモリシステムおよびメモリアクセスを処理するための方法を提供することにある。
【０００８】
第1の態様によれば、
プロセッサの動作データを記憶するように別々に構成された種類の異なる第1のメモリおよび第2のメモリと、
前記第1のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するように構成されたバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラによって送信されたメモリアクセス要求を受信し、前記フェッチアドレスおよび前記メモリインデキシングテーブルに従って、前記フェッチアドレスに対応するデータユニットブロックが前記第1のメモリまたは前記第2のメモリのどちらに記憶されているかを判断し、該判断された第1のメモリまたは第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を達成し、前記メモリアクセス要求の前記フェッチ動作の結果を前記メモリコントローラへと返すように構成されたバッファスケジューラと
を備えるメモリシステムが提供される。
【０００９】
第1の考えられる実施のやり方において、
前記バッファスケジューラは、前記フェッチアドレスに対応するデータユニットブロックが前記第2のメモリに記憶されていると判断される場合に、該データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記バッファスケジューラによって送信された通知を受信して、前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記第2のメモリ内のデータユニットブロックを前記第1のメモリへと移動させるか否かを判断し、移動後に前記メモリインデキシングテーブルを更新するように構成された移動スケジューラ
をさらに備える。
【００１０】
第1の態様または第1の態様の第1の考えられる実施のやり方に関連し、第2の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックが前記第1のメモリに位置すると判断される場合に、前記第1のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2のメモリに位置すると判断される場合に、前記第2のメモリにおいて前記メモリアクセス要求を完了させるように特に構成される。
【００１１】
第1の態様または第1の態様の第1の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックが前記第1のメモリに位置すると判断される場合に、前記第1のメモリにおいて前記メモリアクセス要求を完了させ、前記データユニットブロックが前記第2のメモリに位置すると判断される場合に、前記第2のメモリ内の前記データユニットブロックを前記第1のメモリへと移動させ、前記第1のメモリにおいて前記メモリアクセス要求を完了させるように特に構成される。
【００１２】
第1の態様あるいは第1の態様の第2の考えられる実施のやり方または第1の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、前記フェッチアドレスおよび前記フェッチ動作を含むメモリアクセス要求を抽出するように構成された解析モジュールと、
前記第1のメモリにアクセスするメモリアクセス要求を記憶するように構成された第1の要求待ち行列と、
前記第2のメモリにアクセスするメモリアクセス要求を記憶するように構成された第2の要求待ち行列と、
前記フェッチアドレスを使用することによって前記メモリインデキシングテーブルを照会して、メモリアクセス要求によって要求されたデータユニットブロックが第1のメモリ内にあるか否かを判断し、該データユニットブロックが前記第1のメモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記第1のメモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶するように構成された判断モジュールと、
前記第1のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶するように構成された第1の返送待ち行列と、
前記第2のメモリにアクセスする前記メモリアクセス要求のフェッチ動作の結果を記憶するように構成された第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記第1のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記第2のメモリへとスケジュールし、該メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュールと、
少なくとも1つのメモリアクセス要求のフェッチ動作の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すように構成されたパッケージングモジュールと
を備える。
【００１３】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、または第1の態様の第4の考えられる実施のやり方に関連し、第5の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するように構成されたレジスタと、
前記アクセス動作の量を前記移動しきい値と比較し、比較結果に応じて、前記第2のメモリ内のデータユニットブロックを前記第1のメモリへと移動させるか否かを判断するように構成された移動判断ロジカルモジュールと、
前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに移動コマンドを記憶するように構成されたコマンドバッファと、
前記第2のメモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するように構成されたデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新するように構成された更新モジュールと
を備える。
【００１４】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、第1の態様の第4の考えられる実施のやり方、または第1の態様の第5の考えられる実施のやり方に関連し、第6の考えられる実施のやり方において、前記第1のメモリは、揮発メモリモジュールであり、前記第2のメモリは、不揮発メモリモジュールである。
【００１５】
第1の態様、あるいは第1の態様の第2の考えられる実施のやり方、第1の態様の第3の考えられる実施のやり方、第1の態様の第4の考えられる実施のやり方、または第1の態様の第5の考えられる実施のやり方に関連し、第7の考えられる実施のやり方において、前記第1のメモリのアクセス速度は、前記第2のメモリのアクセス速度よりも高速である。
【００１６】
第2の態様によれば、
プロセッサの動作データを記憶するように別々に構成された揮発メモリおよび不揮発メモリと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを示しているタグテーブルを記憶するように構成されたバッファと、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、前記フェッチアドレスを使用することによって前記タグテーブルを照会することで、前記データユニットブロックが前記揮発メモリまたは前記不揮発メモリのどちらに記憶されているかを判断し、該判断された揮発メモリまたは不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリコントローラへと返すように構成されたバッファスケジューラと
を備えるメモリシステムが提供される。
【００１７】
第2の態様の第1の考えられる実施のやり方において、前記バッファスケジューラは、前記データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成され、
当該メモリシステムは、
前記通知を受信して、前記タグテーブル内の前記データユニットブロックのアクセス情報を更新し、前記データユニットブロックのアクセス情報に従って、前記不揮発メモリ内のデータユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するように構成された移動スケジューラ
をさらに備える。
【００１８】
第2の態様の第2の考えられる実施のやり方において、前記バッファスケジューラは、
前記メモリコントローラによって送信されたメモリアクセス要求パケットを解析して、メモリアクセス要求を抽出するように構成された解析モジュールと、
前記揮発メモリにアクセスするメモリアクセス要求を記憶するように構成された第1の要求待ち行列と、
前記不揮発メモリにアクセスするメモリアクセス要求を記憶するように構成された第2の要求待ち行列と、
前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、各々のメモリアクセス要求によってアクセスされるデータユニットブロックが前記揮発メモリ内にあるか否かを判断し、該データユニットブロックが前記揮発メモリ内にある場合に前記メモリアクセス要求を前記第1の要求待ち行列に記憶し、該データユニットブロックが前記揮発メモリ内にない場合に前記メモリアクセス要求を前記第2の要求待ち行列に記憶し、該データユニットブロックの前記アクセス情報の更新の通知を送信するように構成された判断モジュールと、
前記揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶するように構成された第1の返送待ち行列と、
前記不揮発メモリにアクセスする前記メモリアクセス要求の結果を記憶するように構成された第2の返送待ち行列と、
前記第1の要求待ち行列内の前記メモリアクセス要求を前記揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行し、前記第2の要求待ち行列内の前記メモリアクセス要求を前記不揮発メモリへとスケジュールして、該メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュールと、
少なくとも1つのメモリアクセス要求の結果をパケットへとパッケージし、該パケットを前記メモリコントローラへと返すように構成されたパッケージングモジュールと
を備える。
【００１９】
第2の態様または第2の態様の第1の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、前記アクセス情報は、アクセス動作の量を含んでおり、
前記移動スケジューラは、
移動しきい値を記憶するように構成されたレジスタと、
前記アクセス動作の量を前記移動しきい値と比較して、前記不揮発メモリ内のページを前記揮発メモリへと移動させるか否かを判断するように構成された移動判断ロジカルモジュールと、
前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに移動コマンドを記憶するように構成されたコマンドバッファと、
前記不揮発メモリ内に記憶された前記移動コマンドに対応するデータユニットブロックのデータを一時的に記憶するように構成されたデータバッファと、
前記データユニットブロックに対応する前記アクセス動作の量を更新し、前記移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに前記メモリインデキシングテーブルを更新するように構成されたタグ更新モジュールと
を備える。
【００２０】
第2の態様、あるいは第2の態様の第1の考えられる実施のやり方、第2の態様の第2の考えられる実施のやり方、または第2の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、前記揮発メモリは、DRAM（ダイナミックランダム・アクセス・メモリ、dynamic random access memory）であり、前記不揮発メモリは、NVM（不揮発メモリ、non-volatile memory）である。
【００２１】
第3の態様によれば、メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
前記メモリアクセス要求内の前記フェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、該メモリアクセス要求に対応するデータユニットブロックが第1のメモリまたは該第1のメモリとは異なる種類の第2のメモリのどちらに記憶されているかを判断し、移動スケジューラに対して前記データユニットブロックのアクセス情報の更新を指示するステップと、
前記データユニットブロックが前記第1のメモリに記憶されている場合に、前記第1のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法が提供される。
【００２２】
第1の考えられる実施のやり方において、前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記第1のメモリへと移動させ、次いで前記第1のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２３】
第2の考えられる実施のやり方において、前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記第2のメモリに記憶されている場合に、前記第2のメモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２４】
第3の態様、あるいは第3の態様の第1の考えられる実施のやり方または第3の態様の第2の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、当該方法は、
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2のメモリ内に位置する前記データユニットブロックを前記第1のメモリへと移動させるか否かを判断するステップ
をさらに含む。
【００２５】
第3の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記データユニットブロックの前記アクセス情報に従って、前記移動スケジューラによって、前記第2のメモリ内に位置する前記データユニットブロックを前記第1のメモリへと移動させるか否かを判断するステップは、
前記移動スケジューラによって、記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を含む。
【００２６】
第3の態様の第4の考えられる実施のやり方に関連し、第5の考えられる実施のやり方において、当該方法は、
前記移動スケジューラによって、移動が必要であると判断される場合に前記メモリインデキシングテーブルの情報を更新するステップ
をさらに含む。
【００２７】
第4の態様によれば、メモリアクセス要求を処理するための方法であって、
メモリアクセス要求パケットを受信し、該要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得するステップと、
データユニットブロックのアクセス情報を示すために用いられ、該データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、前記メモリ位置は該データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、前記メモリアクセス要求内の前記フェッチアドレスを使用することによって照会して、該メモリアクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断するステップと、
前記データユニットブロックが前記揮発メモリに記憶されている場合に、前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップと
を含む方法が提供される。
【００２８】
第1の考えられる実施のやり方において、前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、アクセス対象の前記データユニットブロックを前記揮発メモリへと移動させ、次いで前記揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００２９】
第2の考えられる実施のやり方において、前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリにおいて前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップは、
前記データユニットブロックが前記不揮発メモリに記憶されている場合に、前記不揮発メモリに直接アクセスして前記メモリアクセス要求の前記フェッチ動作を完了させ、前記メモリアクセス要求の結果を前記メモリアクセス要求の生成元へと返すステップ
を含む。
【００３０】
第4の態様、あるいは第4の態様の第1の考えられる実施のやり方、または第4の態様の第2の考えられる実施のやり方に関連し、第3の考えられる実施のやり方において、
前記アクセス情報は、アクセス動作の量を含んでおり、
前記方法は、
記録された前記データユニットブロックのアクセス動作の量を移動しきい値と比較し、前記アクセス動作の量が前記移動しきい値以上である場合に移動が必要であると判断し、前記アクセス動作の量が前記移動しきい値未満である場合に移動は不要であると判断するステップ
を更に含む。
【００３１】
第4の態様、あるいは第4の態様の第1の考えられる実施のやり方、第4の態様の第2の考えられる実施のやり方、または第4の態様の第3の考えられる実施のやり方に関連し、第4の考えられる実施のやり方において、当該方法は、
前記タグテーブル内の前記データユニットブロックのアクセス情報を更新するステップと、
前記データユニットブロックの前記アクセス情報に従って、前記不揮発メモリ内に位置する前記データユニットブロックを前記揮発メモリへと移動させるか否かを判断し、移動後に前記タグテーブルを更新するステップと
をさらに含む。
【００３２】
第5の態様によれば、
メモリアクセス要求を開始するように構成されたメモリコントローラを備えているマルチコアプロセッサと、
第1の態様または第2の態様のいずれかの考えられる実施のやり方に従ってもたらされるメモリシステムと
を備えるコンピュータシステムが提供される。
【００３３】
本発明の実施形態において、異なる種類のメモリの管理が、ハードウェアによって実行される。種類が異なる第1のメモリおよび第2のメモリが、メモリシステムに存在する。メモリアクセス要求を、第1のメモリおよび第2のメモリにおいて別々に完了させることができ、これはOSにとって透過的であり、ページフォルトを引き起こすことがなく、メモリアクセス速度を改善することができる。
【００３４】
本発明の実施形態または先行技術における技術的解決策をより明瞭に説明するために、実施形態または先行技術の説明に必要な添付の図面を、以下で簡単に紹介する。当然ながら、添付の図面は、以下の説明において、あくまでも本発明のいくつかの実施形態を示すにすぎず、当業者であれば、依然として、創造的な活動を必要とすることなくこれらの添付の図面から他の図を導き出すことが可能である。
【図面の簡単な説明】
【００３５】
【図１】マルチコアマルチメモリコンピュータのアーキテクチャの概略図である。
【図２】ハイブリッドメモリへのアクセスを処理するソフトウェアの概略のフロー図である。
【図３】本発明によるメモリシステムの実施形態の概略の構造図である。
【図４】本発明によるバッファスケジューラの実施形態の概略の構造図である。
【図５】本発明による移動スケジューラの実施形態の概略の構造図である。
【図６】本発明によるメモリシステムの別の実施形態の概略の構造図である。
【図７】本発明によるバッファスケジューラの別の実施形態の概略の構造図である。
【図８】本発明によるメモリアクセス要求を処理するバッファスケジューラの概略のフロー図である。
【図９】本発明によるタグテーブルの実施形態の概略の構造図である。
【図１０】本発明による移動スケジューラの別の実施形態の概略の構造図である。
【図１１】本発明によるページの移動の要否を判断する移動スケジューラの概略のフロー図である。
【図１２】本発明の実施形態によるコンピュータシステムの実施形態の概略の構造図である。
【図１３】本発明の実施形態によるコンピュータシステムの別の実施形態の概略の構造図である。
【図１４】本発明の実施形態によるメモリアクセス要求を処理するための方法の実施形態の概略のフロー図である。
【図１５】本発明の実施形態によるメモリアクセス要求を処理するための方法の別の実施形態の概略のフロー図である。
【発明を実施するための形態】
【００３６】
以下は、本発明の実施形態における技術的解決策を、本発明の実施形態における添付の図面を参照して、明瞭かつ充分に説明する。当然ながら、説明される実施形態は、あくまでも本発明の一部の実施形態であり、すべての実施形態ではない。当業者が本発明の実施形態にもとづいて創造的な活動を必要とすることなく得ることができるすべての他の実施形態は、本発明の保護の範囲に含まれる。
【００３７】
本発明の技術的解決策の理解を容易にするために、本発明の実施形態において現れるいくつかの技術用語を、最初に説明する。本発明の実施形態において言及されるCPU（Central Processing Unit、中央演算処理装置）は、プロセッサの一種であり、プロセッサは、ASIC（Application Specific Integrated Circuit、特定用途向け集積回路）または本発明の実施形態を実行するように構成された1つ以上の他の集積回路であってもよい。当業者であれば、プロセッサの別の実施のやり方で本発明の実施形態におけるCPUを置き換えてもよいことを、理解できるであろう。
【００３８】
メモリコントローラは、メモリモジュール（あるいは、メモリと称される）の制御ならびにコンピュータシステムの内部のメモリとプロセッサとの間のデータ交換のための重要な一部分である。現時点において、一般的なやり方は、CPUにメモリコントローラを統合することである。しかしながら、メモリコントローラおよびCPUは、別個独立に実現され、接続を使用することによって通信してもよい。
【００３９】
メモリモジュールは、プロセッサ（例えば、CPU）の動作データを記憶するように構成される。一般に、メモリモジュールは、1つ以上のストレージユニット（あるいは、メモリチップと称される）を備える。メモリチャネルインターフェイスが、メモリモジュール上に位置し、メモリチャネルの接続に用いられるインターフェイスである。メモリチャネルは、メモリモジュールをメモリコントローラへと接続するチャネルである。
【００４０】
いくつかの一般的に用いられるメモリモジュールが、以下で例として説明される。DIMM（Dual Inline Memory Module、デュアル・インライン・メモリ・モジュール）が、Pentium(登録商標) CPUの発売後に現れた新規なメモリモジュールである。DIMMは、64ビットのデータチャネルを提供し、したがってPentium(登録商標)のマザーボードにおいて単独で使用することができる。DIMMは、SIMM（single in-line memory module、シングル・インライン・メモリ・モジュール）のスロットよりも長く、DIMMは、新たな168ピンのEDORAM（Extended Data Output RAM、拡張データ出力RAM）メモリもサポートする。DRAM（Dynamic Random Access Memory、ダイナミック・ランダム・アクセス・メモリ）が、最も一般的なメモリチップであり、DIMMまたはSIMMは、1つ以上のDRAMを備えることができる。DRAMは、きわめて短い時間だけしかデータを保持することができない。データを保持するために、DRAMは、ストレージ用コンデンサを使用し、したがって或る時間期間のたびにリフレッシュが必要であり、ストレージユニットがリフレッシュされない場合、記憶された情報は失われる。DRAMに記憶されたデータは、電源オフまたは電源の異常の場合にも失われてしまう。NVM（Non-Volatile Memory、不揮発メモリ）は、メモリチップとして使用することができる別の種類のメモリグラニュール（memory granule）であり、DIMMまたはSIMMは、1つ以上のNVMを備えることができる。一般に、NVMは、プログラムおよびデータを記憶するために使用され、NVMに記憶されたデータは、電源オフまたは電源の異常の場合も失われることがなく、これがDRAMの特徴からの違いである。メモリがデータの読出しまたは書込みを行うたびに、特定のデータユニットにもとづく動作が実行され、ここでデータユニットは、通常は4ｋのデータを表すページまたはメモリページ（Page）である。
【００４１】
さらに、本発明の実施形態において説明される「接続」が、2つ以上の仮想のモジュールの間、2つ以上の実在のモジュールの間、または実在のモジュールと仮想のモジュールとの間に通信接続が存在することを示しており、その具体的な手段が、1つ以上の通信ラインまたは信号線であってよいことに、注意すべきである。特に指定されない限り、「接続」は、直接接続であってよく、インターフェイスまたはポートを使用することによる接続であってよく、あるいは別の仮想のモジュールまたは実在のモジュールを使用することによる接続であってよい。特に指定されない限り、本発明の実施形態における「第1」および「第2」は、区別のためのものにすぎず、特定の順番を示すためのものではない。
【００４２】
図3を参照すると、図3は、
プロセッサの動作データを記憶するように構成された第1のメモリ301と、
プロセッサの動作データを記憶するように構成され、第1のメモリとは種類が異なる第2のメモリ302と、
第1のメモリに位置するデータユニットブロックのフェッチアドレスを含むメモリインデキシングテーブルを記憶するように構成されたバッファ303と、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、フェッチアドレスおよびメモリインデキシングテーブルに従って、フェッチアドレスに対応するデータユニットブロックが第1のメモリまたは第2のメモリのどちらに記憶されているかを判断し、判断された第1のメモリまたは第2のメモリにおいてメモリアクセス要求を達成し、メモリアクセス要求の結果をメモリコントローラへと返すように構成されたバッファスケジューラ304と
を備えるメモリシステムの実施形態を示している。
【００４３】
さらに、一実施形態において、バッファスケジューラは、フェッチアドレスに対応するデータユニットブロックが第2のメモリに記憶されていると判断されるときに、データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成される。メモリシステムは、移動スケジューラ305をさらに備え、移動スケジューラは、バッファスケジューラによって送信される通知を受信して、データユニットブロックのアクセス情報を更新し、データユニットブロックのアクセス情報に従って、第2のメモリ内のデータユニットブロックを第1のメモリへと移動させるか否かを判断し、移動後にメモリインデキシングテーブルを更新するように構成される。
【００４４】
第1のメモリおよび第2のメモリは、個別にメモリモジュールであってよく、あるいは個別に少なくとも1つのメモリチップであってよく、プロセッサの動作データを記憶できる限りにおいて、それらの粒度（granularities）に制約はない。第1のメモリおよび第2のメモリは、種類が異なっており、種類の相違は、2つのメモリの記憶媒体の種類の相違、または2つのメモリの記憶速度の相違であってよい。一実施形態においては、第1のメモリが、揮発メモリモジュールであり、第2のメモリが、不揮発メモリモジュールである（第1のメモリの読出し／書込み速度が、第2のメモリの読出し／書込み速度よりも高速である）。別の実施形態においては、第1のメモリおよび第2のメモリの両方が、揮発メモリモジュールであり、第1のメモリの読出し／書込み速度が、第2のメモリの読出し／書込み速度よりも高速である。別の実施形態においては、第1のメモリおよび第2のメモリの両方が、不揮発メモリモジュールであり、第1のメモリの読出し／書込み速度が、第2のメモリの読出し／書込み速度よりも高速である。
【００４５】
一実施形態において、バッファスケジューラは、第2のメモリにおいてメモリアクセス要求を直接達成することができる。具体的には、バッファスケジューラは、データユニットブロックが第1のメモリに位置すると判断される場合に、第1のメモリにおいてメモリアクセス要求を達成し、データユニットブロックが第2のメモリに位置すると判断される場合に、第2のメモリにおいてメモリアクセス要求を達成するように構成される。
【００４６】
別の実施形態において、バッファスケジューラは、第2のメモリにおいてメモリアクセス要求を直接達成することがない。具体的には、バッファスケジューラは、データユニットブロックが第1のメモリに位置すると判断される場合に、第1のメモリにおいてメモリアクセス要求を達成し、データユニットブロックが第2のメモリに位置すると判断される場合に、第2のメモリ内のデータユニットブロックを第1のメモリへと移動させ、第1のメモリにおいてメモリアクセス要求を達成するように構成される。一実施形態においては、データユニットブロックを第1のメモリへと複製し、その後にアクセスの完了後に削除することができる。
【００４７】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、移動スケジューラが、記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するように特に構成される。移動しきい値を、必要に応じて設定することができる。
【００４８】
メモリインデキシングテーブルが、第1のメモリ内のデータユニットブロックを示すために使用される。一実施形態において、メモリインデキシングテーブルは、第1のメモリに位置するデータユニットブロックのフェッチアドレスだけを記憶する。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含み、ここでメモリ位置は、データユニットブロックが第1のメモリまたは第2のメモリのどちらに記憶されているかを示す。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、データユニットブロックのフェッチアドレス、メモリ位置、フェッチ動作の量、およびデータ更新フラグを含み、ここでメモリ位置は、データユニットブロックが第1のメモリまたは第2のメモリのどちらに記憶されているかを示し、データ更新フラグは、データユニットブロックの内容が更新されたことを示す。受け取ったメモリアクセス要求のフェッチ動作が書込み動作である場合、データユニットブロックの内容が更新される。当然ながら、メモリインデキシングテーブルは、他の情報も記憶することができる。メモリインデキシングテーブルを記憶するバッファを、SRAMおよびDRAMなどの記憶媒体を使用することによって物理的に実現することができる。SRAMが、アクセス速度がより速いがゆえに推奨される。物理的な位置に関して、バッファは、バッファスケジューラの内部または外部に位置することができ、あるいは移動スケジューラの内部または外部に位置することができる。
【００４９】
図4を参照すると、一実施形態において、バッファスケジューラは、
メモリコントローラによって送信されたメモリアクセス要求パケットを解析してメモリアクセス要求を抽出するように構成された解析モジュール401と、
第1のメモリのアクセスのためのメモリアクセス要求を記憶するように構成された第1の要求待ち行列402と、
第2のメモリのアクセスのためのメモリアクセス要求を記憶するように構成された第2の要求待ち行列403と、
メモリアクセス要求内のフェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、各々のメモリアクセス要求が要求するデータユニットブロックが第1のメモリ内にあるかどうかを判断し、データユニットブロックが第1のメモリ内にある場合にメモリアクセス要求を第1の要求待ち行列に記憶し、データユニットブロックが第1のメモリ内にない場合にメモリアクセス要求を第2の要求待ち行列に記憶するように構成された判断モジュール404と、
第1の要求待ち行列内のメモリアクセス要求を第1のメモリへとスケジュールして、メモリアクセス要求に対応するフェッチ動作を実行し、第2の要求待ち行列内のメモリアクセス要求を第2のメモリへとスケジュールして、メモリアクセス要求に対応するフェッチ動作を実行するように構成されたスケジューリングモジュール405と、
第1のメモリにアクセスするメモリアクセス要求の結果を記憶するように構成された第1の返送待ち行列406と、
第2のメモリにアクセスするメモリアクセス要求の結果を記憶するように構成された第2の返送待ち行列407と、
少なくとも1つのメモリアクセス要求の結果をパケットへとパッケージし、パケットをメモリコントローラへと返送するように構成されたパッケージングモジュール408と
を備える。
【００５０】
図5を参照すると、一実施形態においては、アクセス情報がアクセス動作の量を含み、移動スケジューラが、
移動しきい値を記憶するように構成されたレジスタ501と、
アクセス動作の量を移動しきい値と比較し、第2のメモリ内のページを第1のメモリへと移動させるか否かを判断するように構成された移動判断ロジカルモジュール502と、
移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに、移動コマンドを記憶するように構成されたコマンドバッファ503と、
第2のメモリに記憶されたデータであって、移動コマンドに対応するデータユニットブロックのデータを、一時的に記憶するように構成されたデータバッファ504と、
データユニットブロックに対応するアクセス動作の量を更新し、移動判断ロジカルモジュールが移動が必要であるとの結果を出力するときに、メモリインデキシングテーブルを更新するように構成された更新モジュール505と
を備える。
【００５１】
アクセス動作の量が移動しきい値以上である場合、移動判断ロジカルモジュール502は、第2のメモリ内のページを第1のメモリへと移動させる必要があるとの結果を出力し、アクセス動作の量が移動しきい値未満である場合、移動判断ロジカルモジュール502は、第2のメモリ内のページを第1のメモリへと移動させる必要がないとの結果を出力する。
【００５２】
メモリインデキシングテーブルが第1のメモリ内に位置するデータユニットブロックのフェッチアドレスだけを記憶する場合、移動スケジューラは、データユニットブロックの動作情報を記憶するように構成された第2のレジスタをさらに備え、この動作情報は、アクセス動作の量を含む。別の実施形態において、メモリインデキシングテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶し、移動スケジューラは、メモリインデキシングテーブル内のデータユニットブロックのアクセス動作の量を直接更新する。当然ながら、レジスタおよび第2のレジスタは、物理的には1つのユニットまたは2つのユニットであってよく、コマンドバッファおよびデータバッファも、物理的には1つのユニットまたは2つのユニットであってよい。レジスタは、物理的には、移動判断ロジカルモジュールの内部または外部に位置することができる。
【００５３】
アクセス動作は、読出し動作および書込み動作を含む。レジスタは、読出し動作の移動しきい値および書込み動作の移動しきい値を別々に記憶することができる。第2のレジスタは、データユニットブロックの読出し動作の量および書込み動作の量を別々に記憶することができる。判断時に、移動判断ロジカルモジュール502は、読出し動作および書込み動作を別々に判断することができる。
【００５４】
以上の実施形態における「移動」は、メモリ内のデータが或るメモリモジュールから別のメモリモジュールへと動かされることを指し、本明細書における「移動」を、「動かすこと」または「複製」で置き換えることも可能である。以上の実施形態における「データユニットブロック」は、メモリモジュールによって記憶されるデータの単位を指し、あるいはメモリ間のデータの移動の最小単位を指す。一実施形態において、データユニットブロックは、ページ（page）であり、通常はページは4kのメモリデータを表す。
【００５５】
以上の実施形態において、異種混交性を実行するためにハードウェアを使用するメモリシステムは、異なる種類のメモリの管理を実行する。異なる種類の第1のメモリおよび第2のメモリが、メモリシステムに存在し、メモリアクセス要求を、第1のメモリおよび第2のメモリのそれぞれにおいて達成することができ、それがOSまたは処理のための他のソフトウェアを必要とせず、ページフォルトを引き起こすことがなく、メモリアクセス速度を改善でき、ハードウェアによる実行は、ソフトウェアのオーバヘッドを減らすことができる。
【００５６】
図6を参照すると、図6は、
プロセッサの動作データを記憶するように構成された揮発メモリ601と、
プロセッサの動作データを記憶するように構成された不揮発メモリ602と、
データユニットブロックのアクセス情報を示すために使用されるタグ（tag）テーブルを記憶し、さらにデータユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を記憶するように構成され、メモリ位置はデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているバッファ603と、
フェッチアドレスおよびフェッチ動作を含むメモリコントローラのメモリアクセス要求を受信し、フェッチアドレスを使用することによってタグテーブルを照会することで、フェッチアドレスに対応するページが揮発メモリまたは不揮発メモリのどちらに記憶されているかを判断し、判断された揮発メモリまたは不揮発メモリにおいてメモリアクセス要求のフェッチ動作を達成し、メモリアクセス要求の結果をメモリコントローラへと返すように構成されたバッファスケジューラ604と
を備えるメモリシステムの別の実施形態を示している。
【００５７】
さらに、別の実施形態において、バッファスケジューラは、データユニットブロックのアクセス情報の更新の通知を送信するようにさらに構成される。メモリシステムは、通知を受信して、タグテーブル内のデータユニットブロックのアクセス情報を更新し、データユニットブロックのアクセス情報に従って、不揮発メモリ内のデータユニットブロックを揮発メモリへと移動させるか否かを判断し、移動後にタグテーブルを更新するように構成された移動スケジューラ605をさらに備える。
【００５８】
この実施形態において、タグテーブルは、すべてのメモリアクセス要求に対応するデータユニットブロックのフェッチアドレスを記憶する。一実施形態において、タグテーブルは、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含み、ここでメモリ位置は、データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示す。別の実施形態において、タグテーブルは、データユニットブロックのフェッチアドレス、メモリ位置、フェッチ動作の量、およびデータ更新フラグを含み、ここでメモリ位置は、データユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示し、データ更新フラグは、データユニットブロックの内容が更新されたことを示す。受け取ったメモリアクセス要求のフェッチ動作が書込み動作である場合、データユニットブロックの内容が更新される。当然ながら、タグテーブルは、他の情報も記憶することができる。タグテーブルを記憶するバッファを、物理的には、SRAMおよびDRAMなどの記憶媒体を使用することによって実現することができる。SRAMが、アクセス速度がより速いがゆえに推奨される。物理的な位置に関して、バッファは、独立して存在でき、あるいはバッファスケジューラの内部または外部に位置することができ、もしくは移動スケジューラの内部または外部に位置することができる。
【００５９】
一実施形態において、データユニットブロックは、ページである。
【００６０】
上述の実施形態と比べて、この実施形態においては、第1のメモリが、具体的には揮発メモリであり、第2のメモリが、具体的には不揮発メモリであり、メモリインデキシングテーブルが、具体的にはタグテーブルであり、データユニットブロックが、具体的にはページである。当然ながら、揮発メモリおよび不揮発メモリは、別々にメモリモジュールであってよく、あるいは別々に少なくとも1つのメモリチップであってよく、それらの粒度に制約はない。上述の実施形態におけるバッファスケジューラおよび移動スケジューラの実施形態を、この実施形態においても使用することができ、相違点は、上述の実施形態における第1のメモリが、この実施形態においては特に揮発メモリであり、上述の実施形態における第2のメモリが、この実施形態においては特に不揮発メモリであり、上述の実施形態におけるデータユニットブロックが、この実施形態においては特にページである点にある。
【００６１】
一実施形態において、揮発メモリはDRAMであり、不揮発メモリはNVMである。
【００６２】
この実施形態において、ハイブリッドメモリの管理は、メモリシステム内のハードウェアを使用することによって実行される。動作が頻繁なページが、揮発メモリに記憶され、動作が頻繁でないページが、不揮発メモリに記憶される。メモリアクセス要求を、良好な参照の局在性を有するページのアクセス性能への無作為にアクセスされるページからの干渉を減らすように、揮発メモリおよび不揮発メモリのそれぞれにおいて達成することができ、したがってメモリアクセス速度を改善でき、不揮発メモリから揮発メモリへのページの移動を実行できることで、アクセス性能が改善される。
【００６３】
図7を参照すると、揮発メモリがDRAMであり、不揮発メモリがNVMであり、データユニットブロックが特にページであり、メモリアクセス要求がフェッチ要求メッセージである場合が、例として使用される。図7は、パケット解析モジュールと、パッケージングモジュールと、判断モジュールと、スケジューリングモジュールと、要求待ち行列と、返送待ち行列とを備えるバッファスケジューラの実施形態を示している。要求待ち行列および返送待ち行列は、異なる記憶媒体に従って別々に管理され、この実施形態においてはDRAM要求待ち行列、NVM要求待ち行列、DRAM返送待ち行列、およびNVM返送待ち行列を含む。パケット解析モジュールは、メモリコントローラによって送信されたメモリアクセス要求パケットの解析を担当し、メモリアクセス要求を抽出する。パケットが複数の読出し／書込み要求を含むことができ、メモリアクセス要求が、フェッチアドレス、フェッチ粒度、フェッチ動作（読出し動作または書込み動作）、および優先度などの情報を含むことに、注意すべきである。各々のメモリアクセス要求に関して、判断モジュールは、フェッチアドレスを使用することによってタグテーブルを照会して、アクセス対象のページがDRAM内にあるか否かを判断し、アクセス対象のページがDRAM内にある場合にメモリアクセス要求をDRAM要求待ち行列に配置し、アクセス対象のページがDRAM内にない場合は要求をNVM要求待ち行列に配置する。スケジューリングモジュールは、要求待ち行列内のメモリアクセス要求のスケジューリングを担当し、それぞれの物理的なインターフェイスを使用することによって要求を実行のために対応するメモリチップへとスケジューリングし、すなわちDRAMにおける要求をDRAMの物理的なインターフェイスを使用することによってスケジューリングし、NVMの要求をNVMの物理的なインターフェイスを使用することによってスケジューリングする。読出し要求の完了後に、返送されるデータは、対応する返送待ち行列に配置され、最終的に全体返送待ち行列に配置され、パッケージングモジュールが、複数の要求によって返送されるデータをパケットへとパッケージし、パケットをメモリコントローラへと返送するために使用される。
【００６４】
図8を参照すると、バッファスケジューラがメモリアクセス要求を処理する手順は、以下を含む。
（1）メモリアクセス要求パケットを受信した後に、バッファスケジューラがパケットを解析し、メモリアクセス要求のアドレスおよび読出し／書込み情報を得る。
（2）バッファスケジューラが、アドレスを使用することによってタグテーブルを照会し、アクセス対象のページがDRAM内にあるか否かを判断する。アクセス対象のページがDRAM内にある場合、（3）へと進み、アクセス対象のページがDRAM内にない場合、（4）へと進む。
（3）バッファスケジューラが、メモリアクセス要求をDRAMへと送信し、移動スケジューラに対してページのアクセス情報の更新を指示する。DRAMからのデータの取得後に、バッファスケジューラは、データをパケットへとカプセル化し、パケットをプロセッサへと返送する。要求の処理が終了する。
（4）バッファスケジューラが、メモリアクセス要求をNVMへと送信する。この場合、データがNVMからバッファスケジューラへと直接返され、次いでパケットへとカプセル化され、プロセッサへと返送される。同時に、バッファスケジューラは、移動スケジューラに対してページのアクセス情報の更新を指示する。次いで、移動スケジューラが、ページをNVMからDRAMへと移動させる必要があるか否かを判断する。移動スケジューラが、ページをNVMからDRAMへと移動させる必要がないと判断した場合、メモリアクセス要求の処理は終わり、移動スケジューラが、ページをNVMからDRAMへと移動させる必要があると判断した場合、（5）へと進む。
（5）移動スケジューラが、ページ移動動作を開始し、タグテーブルを更新する。DRAM内に依然として空きが存在する場合、移動スケジューラは、NVMからのページをDRAMへと直接配置し、DRAM内に空きが存在しない場合、移動スケジューラは、DRAMから置き換えられるべきページを選択し、新たなページをDRAMへと配置する。ここでのページ移動およびデータをNVMから返す処理が、同時に実行されてもよいことに注意すべきである。
【００６５】
タグテーブルに記憶される情報は、ページのアドレス、ページがどのメモリに位置しているか、およびページアクセスの量を含む。さらに、タグテーブルの主要な機能が含まれてよく、ここで主要な機能は、どの物理的なアドレス空間が現時点においてDRAM内に位置しているかを維持すること、および各ページのアクセスカウントを維持することである。タグテーブルは、直接アドレス指定を使用することができ、あるいはサーチ処理の加速および空間のオーバヘッドの削減のために、ハッシュテーブルなどの別のやり方を使用することができる。タグテーブルの更新は、ソフトウェア（例えば、OSまたはハイパーバイザ）にとって完全に透過的な移動スケジューラによって達成される。
【００６６】
図9は、タグテーブルの実施の例であり、ハッシュテーブルが、各ページの情報を維持するために使用される。フェッチアドレスが、ハッシュ動作において、ハッシュテーブルのインデックスを得るために使用される。複数のページが同じ場所へとハッシュされる場合（ハッシュの衝突と称される）、リンクリスト（linked list）が、複数のページの情報を接続するために使用される。ハッシュテーブルの各エントリは、対応するページのアクセス情報を含み、TAGは、アドレス全体であり、Pは、現在のページがDRAM内にあるか否かを示す存在ビットであり、Pが1である場合、現在のページがDRAM内にあることを示しており、0は、現在のページがDRAM内にないことを示しており、Dは、ページが書き換えられたか否かを示すダーティビットであり、Countは、ページのアクセスの回数を示しており、ページの移動を案内するために使用される。新たなメモリアクセス要求の受信時に、バッファスケジューラは、ハッシュ動作を実行してインデックスを取得し、指定のページに一致する情報が見つかるまでインデックスをリンクリスト内のTAGと1つずつ比較する。
【００６７】
図10を参照すると、揮発メモリがDRAMであり、不揮発メモリがNVMである場合が、例として使用され、移動スケジューラの実施形態が、移動判断ロジカルモジュール、タグテーブル更新モジュール、コマンドバッファ、およびデータバッファを備える。移動判断ロジカルモジュールは、アクセス対象のNVMページをDRAMへと移動させる必要があるか否かを判断するように構成される。移動判断ロジカルモジュールは、読出し／書込みアクセスの量についての移動しきい値を記憶するように構成されたレジスタを備える。コマンドバッファは、NVMページを移動させるためのコマンド（主として、移動を必要とするページのアドレスおよびページがDRAMにおいて配置されるアドレス）を記憶し、データバッファは、NVMとDRAMとの間のデータ移動のためのエージェント（agent）として機能する。バッファスケジューラがNVMへのアクセスの要求を受信したとき（タグテーブルの照会後に、メモリアクセス要求のページがDRAM内に存在しない場合）、一方では、バッファスケジューラが、要求をスケジューリングを待つためのNVM要求待ち行列に追加すると同時に、要求を移動スケジューラへと入力する。移動判断ロジカルモジュールは、タグテーブルにおいてページのアクセス情報を照会し、移動しきい値（しきい値は、移動判断ロジカルモジュールの内部のレジスタに記憶され、設定可能である）を超えるか否かを判断し、ここでアクセス情報は、主として読出しアクセスおよび書込みアクセスの量の情報である。移動しきい値を超える場合、ページをNVMからDRAMへと移動させるためのコマンドが、コマンドバッファに追加される。移動スケジューラは、最初にデータをNVMからデータバッファへと抽出し、次いでデータをデータバッファから目標のDRAMへと配置する。移動の完了後に、対応するページの情報を、タグテーブルにおいて更新する必要がある。
【００６８】
図11を参照すると、図11は、移動スケジューラがページをNVMからDRAMへと移動させる必要があるか否かを判断する手順を示している。単純な移動の方針を設定することができる。最近の時間期間におけるページの読出しアクセスおよび書込みアクセスの量の統計が収集され、読出しアクセスしきい値および書込みアクセスしきい値が、それぞれTrおよびTwに設定される。最近の時間期間におけるページの読出しアクセスの量が、Trを超える場合、または最近の時間期間におけるページの書込みアクセスの量が、Twを超える場合に、ページは移動候補として選択される。
（1）NVMへと送信されたフェッチ要求について、フェッチ要求が読出し要求であるか否かを判断する。フェッチ要求が読出し要求である場合、（2）へと進み、フェッチ要求が読出し要求でない場合、（3）へと進む。
（2）最近の時間期間におけるページの読出しアクセスの量が、読出ししきい値Trを超えるか否かを判断する。最近の時間期間におけるページの読出しアクセスの量が、読出ししきい値Trを超えない場合、移動は不要であり、処理は終了し、最近の時間期間におけるページの読出しアクセスの量が、読出ししきい値Trを超える場合には、（4）へと進む。
（3）最近の時間期間におけるページの書込みアクセスの量が、書込みしきい値Twを超えるか否かを判断する。最近の時間期間におけるページの書込みアクセスの量が、書込みしきい値Twを超えない場合、移動は不要であり、処理は終了し、最近の時間期間におけるページの書込みアクセスの量が、書込みしきい値Twを超える場合には、（4）へと進む。
（4）ページを移動候補として選択し、ページをDRAM内の置き換えられるべきページとさらに比較する。ページのアクセスの量の方が多い場合、ページの移動を開始し、タグテーブルの情報を更新する。
【００６９】
当然ながら、段階（2）および（3）において書込みアクセスの量または読出しアクセスの量がしきい値を超えると判断される場合に、段階（4）を実行しなくてもよく、ページの移動が直接開始され、タグテーブルの情報が更新される。当然ながら、別の移動の方針も設定できる。
【００７０】
ソフトウェアにとって透過的なチェックポイント（checkpoint）保護を、以上の実施形態におけるメモリシステムについてさらに実行することができ、例えば移動スケジューラが、DRAM内の書き換えられたデータをNVMへと定期的にバックアップする。NVM内の領域の一部を、チェックポイントを特に記憶するために予約することができる。DRAM内の各々のページについて、ページが書き換えられたか否かを示すために、フラグバイトのダーティが、タグにおいて相応に設定される。移動スケジューラは、DRAM内のページを定期的に調べ、DRAM内の書き換えられたデータだけをNVMへとバックアップする。
【００７１】
さらに、チェックポイントのオーバヘッドを減らすために、チェックポイントを、DRAMがリフレッシュ（Refresh）されているとき、またはメモリスクラブ（Memory Scrubbing）が実行されているときに、実行することができる。DRAMがリフレッシュされているとき、バッファスケジューラは、データをDRAMから行バッファ（Row Buffer）へと読み出し、その後にデータを書き戻す必要がある。メモリスクラブが実行されているとき、データをバッファスケジューラへと読み出す必要があり、エラーチェックが実行され、エラーが発見された後に、補正されたデータがDRAMへと書き戻される。これら2つの動作は、どちらもDRAMからのデータの読出しを必要とし、ここで読み出されたデータを、DRAMの通常の動作に影響を及ぼすことなくオーバヘッドを減らすために、定期的なチェックポイントの実行に使用することができる。
【００７２】
DRAMおよびNVMを含むハイブリッドメモリにおいて、DRAMについてのハードウェアプリフェッチ（Prefetch）をバッファスケジューラにおいて実行することも可能である。ハードウェアは、性能を改善するために、ページアクセスモードを学習し、プリフェッチコマンドを生成し、短時間のうちにアクセスされると予測されるページを前もってDRAMへと移動させる。また、バッファスケジューラにおいてハードウェアヴィクティム（Victim）を実行することも可能である。DRAMから追い出されたページは、短時間のうちに再びアクセスされる可能性がきわめて高いため、追い出されたページをヴィクティムバッファに配置することで、性能を改善することができる。
【００７３】
さらに本発明は、マルチコアプロセッサとメモリシステムとを備えるコンピュータシステムをさらに開示し、ここでマルチコアプロセッサは、メモリアクセス要求を開始するように構成されたメモリコントローラを備え、メモリシステムは、例えば図3〜図11に対応する実施形態など、上述の実施形態および上述の実施形態の内部モジュール構成要素における任意のメモリシステムであってよい。例えば、図12を参照すると、メモリシステムは、メモリインデキシングテーブル、移動スケジューラ、バッファスケジューラ、第1のメモリ、および第2のメモリを備える。モジュールの機能および分割については、上述の実施形態を参照されたい。例えば、図13を参照すると、メモリシステムは、タグテーブル、移動スケジューラ、バッファスケジューラ、DRAM、およびNVMを備える（当然ながら、別の実施形態においては、DRAMおよびNVMがそれぞれ揮発メモリおよび不揮発メモリであってよい）。モジュールの機能および分割については、上述の実施形態を参照されたい。
【００７４】
図14を参照すると、図14は、メモリアクセス要求を処理するための方法の実施形態を示しており、本方法は、以下を含む。
【００７５】
S1401：メモリアクセス要求パケットを受信し、要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得する。
【００７６】
S1402：メモリアクセス要求内のフェッチアドレスを使用することによってメモリインデキシングテーブルを照会して、メモリアクセス要求に対応するデータユニットブロックが第1のメモリまたは第1のメモリとは異なる種類の第2のメモリのどちらに記憶されているかを判断し、移動スケジューラに対してデータユニットブロックのアクセス情報の更新を指示する。
【００７７】
S1403：データユニットブロックが第1のメモリに記憶されている場合、第1のメモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元（initiator）へと返送する。
【００７８】
S1404：データユニットブロックが第2のメモリに記憶されている場合、第2のメモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００７９】
一実施形態において、ステップS1404は、
データユニットブロックが第2のメモリに記憶されている場合に、アクセス対象のデータユニットブロックを第1のメモリへと移動させ、次いで第1のメモリにおいてメモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００８０】
別の実施形態において、ステップS1404は、
データユニットブロックが第2のメモリ内にある場合に、第2のメモリに直接アクセスして、メモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００８１】
一実施形態において、本方法は、以下をさらに含む。
【００８２】
S1405：移動スケジューラが、データユニットブロックのアクセス情報を更新する。
【００８３】
S1406：移動スケジューラが、データユニットブロックのアクセス情報に従って、第2のメモリ内に位置するデータユニットブロックを第1のメモリへと移動させるか否かを判断する。
【００８４】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、ステップS1405が、
移動スケジューラによって、記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するステップ
を含む。随意により、ステップS1405は、移動が必要であると判断されたときに、移動スケジューラによってメモリインデキシングテーブルの情報を更新するステップをさらに含む。
【００８５】
この実施形態において、異なる種類の第1のメモリおよび第2のメモリを含むメモリシステムの管理が実行される。メモリアクセス要求を、処理を中断することなく第1のメモリおよび第2のメモリのそれぞれにおいて達成できるため、メモリアクセス速度を改善することができる。
【００８６】
図15を参照すると、図15は、別の実施形態に従ってメモリアクセス要求を処理するための方法の別の実施形態を示しており、本方法は、以下を含む。
【００８７】
S1501：メモリアクセス要求パケットを受信し、要求パケットからメモリアクセス要求のフェッチアドレスおよびフェッチ動作を取得する。
【００８８】
S1502：データユニットブロックのアクセス情報を示すために使用され、データユニットブロックのフェッチアドレス、メモリ位置、およびフェッチ動作の量を含んでおり、メモリ位置はデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているかを示しているタグテーブルを、メモリアクセス要求内のフェッチアドレスを使用することによって照会して、メモリアクセス要求に対応するデータユニットブロックが揮発メモリまたは不揮発メモリのどちらに記憶されているか否かを判断する。
【００８９】
S1503：データユニットブロックが揮発メモリに記憶されている場合に、揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００９０】
S1504：データユニットブロックが不揮発メモリに記憶されている場合に、不揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了し、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送する。
【００９１】
一実施形態において、ステップS1504は、
データユニットブロックが不揮発メモリに記憶されている場合に、アクセス対象のデータユニットブロックを揮発メモリへと移動させ、次いで揮発メモリにおいてメモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００９２】
別の実施形態において、ステップS1504は、
データユニットブロックが不揮発メモリ内にある場合に、不揮発メモリに直接アクセスして、メモリアクセス要求のフェッチ動作を完了させ、メモリアクセス要求の結果をメモリアクセス要求の生成元へと返送するステップ
を含む。
【００９３】
さらに、一実施形態において、メモリアクセス要求を処理するための方法は、以下をさらに含む。
【００９４】
S1505：タグテーブル内のデータユニットブロックのアクセス情報を更新する。
【００９５】
S1506：データユニットブロックのアクセス情報に従って、不揮発メモリ内に位置するデータユニットブロックを揮発メモリへと移動させるか否かを判断し、移動後にタグテーブルを更新する。
【００９６】
一実施形態においては、アクセス情報が、アクセス動作の量を含み、ステップS1506が、
記録されたデータユニットブロックのアクセス動作の量を移動しきい値と比較し、アクセス動作の量が移動しきい値以上である場合に、移動が必要であると判断し、アクセス動作の量が移動しきい値未満である場合に、移動は不要であると判断するステップ
を含む。
【００９７】
移動が必要であると判断される場合、不揮発メモリに記憶されたデータユニットブロックを揮発メモリへと移動させる動作を実行し、移動後にタグテーブルを更新する。
【００９８】
一実施形態において、データユニットブロックは、ページである。
【００９９】
この実施形態において、揮発メモリおよび不揮発メモリを含むメモリシステムの管理が実行される。メモリアクセス要求を、処理を中断することなく揮発メモリおよび不揮発メモリのそれぞれにおいて達成できるため、メモリアクセス速度を改善することができる。
【０１００】
当業者であれば、実施形態における方法の工程のすべてまたは一部を、関連のハードウェアに対して指示を行うコンピュータプログラムによって実行できることを、理解できるであろう。プログラムを、コンピュータにとって読み取り可能な記憶媒体に保存することができる。プログラムの動作時に、実施形態における方法の工程が実行される。上述の記憶媒体として、磁気ディスク、光ディスク、読出し専用メモリ（Read-Only Memory、ROM）、またはランダムアクセスメモリ（Random Access Memory、RAM）を挙げることができる。
【０１０１】
以上は、あくまでも本発明の典型的な実施形態にすぎない。当業者であれば、本発明の技術的思想および技術的範囲から離れることなく、本発明に対する種々の改良および変種を作り出すことができる。
【符号の説明】
【０１０２】
301  メモリ
302  メモリ
303  バッファ
304  バッファスケジューラ
305  移動スケジューラ
401  解析モジュール
402  行列
403  行列
404  判断モジュール
405  スケジューリングモジュール
406  行列
407  行列
408  パッケージングモジュール
501  レジスタ
502  移動判断ロジカルモジュール
503  コマンドバッファ
504  データバッファ
505  更新モジュール
601  揮発メモリ
602  不揮発メモリ
603  バッファ
604  バッファスケジューラ
605  移動スケジューラ
RAM  拡張データ出力
Tr  読出ししきい値
Tw  書込みしきい値
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2016520233.tif 000018
【手続補正４】
【補正対象書類名】図面
【補正対象項目名】図３
【補正方法】変更
【補正の内容】
【図３】
2016520233.tif 000019
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図４
【補正方法】変更
【補正の内容】
【図４】
2016520233.tif 000020
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図５
【補正方法】変更
【補正の内容】
【図５】
2016520233.tif 000021
【手続補正７】
【補正対象書類名】図面
【補正対象項目名】図６
【補正方法】変更
【補正の内容】
【図６】
2016520233.tif 000022
【手続補正８】
【補正対象書類名】図面
【補正対象項目名】図１０
【補正方法】変更
【補正の内容】
【図１０】
2016520233.tif 000023
【手続補正９】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2016520233.tif 000024
【国際調査報告】
2016520233.tif 000025
2016520233.tif 000026
2016520233.tif 000027
2016520233.tif 000028
2016520233.tif 000029
2016520233.tif 000030
2016520233.tif 000031