(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-01
(45)【発行日】2022-08-09
(54)【発明の名称】ハイブリッドメモリにおける書き込み及びフラッシュ支援のためのメモリモジュール及びその動作方法
(51)【国際特許分類】
G06F 12/0804 20160101AFI20220802BHJP
【FI】
G06F12/0804 100
G06F12/0804 105
(21)【出願番号】P 2018084819
(22)【出願日】2018-04-26
【審査請求日】2021-02-26
(32)【優先日】2017-05-09
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-08-04
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】張 牧 天
(72)【発明者】
【氏名】牛 迪 民
(72)【発明者】
【氏名】鄭 宏 忠
(72)【発明者】
【氏名】南 喜 鉉
(72)【発明者】
【氏名】趙 永 進
(72)【発明者】
【氏名】林 スン ヨン
【審査官】北村 学
(56)【参考文献】
【文献】特開2017-045379(JP,A)
【文献】米国特許出願公開第2011/0055458(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F12/08-12/128
(57)【特許請求の範囲】
【請求項1】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じてキャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント書き込みコマンドを受信し、
前記ホストレイヤーを通じて前記パーシスタント書き込みコマンドに関連するデータを受信し、
前記パーシスタント書き込みコマンドに応答して、
前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込み、
第2書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納し、
有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行をアップデートすることを特徴とするメモリモジュール。
【請求項2】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第1書き込みグループテーブル及び前記第2書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第0書き込みグループテーブルを更に格納することを特徴とする請求項1に記載のメモリモジュール
【請求項3】
前記ロジックコアは、更に、
前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第0書き込みグループテーブルの行ビットマップを検索し、
前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの1つのバッファが利用可能な空間を有するか否かを判断し、
前記複数のバッファのうちの1つのバッファが利用可能な空間を有すると判断された場合、前記1つのバッファを前記選択されたバッファとして選択し、
前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、
前記第2書き込みグループテーブルに利用可能なバッファがあるか否かを判断し、
前記第2書き込みグループテーブルに利用可能なバッファがあると判断された場合、
前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートし、
前記利用可能なバッファを前記選択されたバッファとして選択することを特徴とする請求項2に記載のメモリモジュール。
【請求項4】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記ロジックコアは、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを特徴とする請求項1に記載のメモリモジュール。
【請求項5】
キャッシュメタデータメモリを更に含み、
前記ロジックコアは、前記第2書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納することを特徴とする請求項1に記載のメモリモジュール。
【請求項6】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記ロジックコアは、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断し、
前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、
前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止することを特徴とする請求項5記載のメモリモジュール。
【請求項7】
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール(NVDIMM)であることを特徴とする請求項1に記載のメモリモジュール。
【請求項8】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じて書き込みグループ識別子を含むフラッシュコマンドを受信し、
各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの1つ以上の行を検索し、
各々のバッファが前記第1書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを特徴とするメモリモジュール。
【請求項9】
前記ロジックコアは、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートすることを特徴とする請求項8に記載のメモリモジュール。
【請求項10】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じてフラッシュコマンドを受信し、
各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第1書き込みグループテーブルの各々の行に対して、前記第2書き込みグループテーブルの対応するバッファを検索し、
前記第2書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、
前記第2書き込みグループテーブルの対応するバッファを空けるために、前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートすることを特徴とするメモリモジュール。
【請求項11】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記動作方法は、
前記メモリコントローラー
により、
キャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント書き込みコマンドを受信するステップと、
前記パーシスタント書き込みコマンドに関連するデータを受信するステップと、
前記パーシスタント書き込みコマンドに応答して、
前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込むステップと、
第2書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納するステップと、
有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行をアップデートするステップと、
を有することを特徴とする方法。
【請求項12】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第1書き込みグループテーブル及び前記第2書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第0書き込みグループテーブルを更に含むことを特徴とする請求項1
1に記載の方法。
【請求項13】
前記動作方法は、
前記メモリコントローラー
により、
前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第0書き込みグループテーブルの行ビットマップを検索するステップと、
前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの1つのバッファが利用可能な空間を有するか否かを判断するステップと、
前記複数のバッファのうちの1つのバッファが利用可能な空間を有すると判断された場合、前記1つのバッファを前記選択されたバッファとして選択するステップと、
前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、
前記第2書き込みグループテーブルに利用可能なバッファがあるか否かを判断するステップと、
前記第2書き込みグループテーブルに利用可能なバッファがあると判断された場合、
前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートするステップと、
前記利用可能なバッファを前記選択されたバッファとして選択するステップと、
を更に含むことを特徴とする請求項12に記載の方法。
【請求項14】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記動作方法は、
前記メモリコントローラー
により、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
を更に含むことを特徴とする請求項11に記載の方法。
【請求項15】
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、
前記メモリコントローラーが、前記第2書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納するステップと、を更に含むことを特徴とする請求項11に記載の方法。
【請求項16】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記動作方法は、
前記メモリコントローラー
により、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断するステップと、
前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止するステップと、
を更に含むことを特徴とする請求項15に記載の方法。
【請求項17】
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール(NVDIMM)であることを特徴とする請求項11に記載の方法。
【請求項18】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記動作方法は、
前記メモリコントローラー
により、
書き込みグループ識別子を含むフラッシュコマンドを受信するステップと、
各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの1つ以上の行を検索するステップと、
各々のバッファが前記第1書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
を含むことを特徴とする方法。
【請求項19】
前記メモリコントローラーが、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を更に含むことを特徴とする請求項18に記載の方法。
【請求項20】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記動作方法は、
前記メモリコントローラー
により、
フラッシュコマンドを受信するステップと、
各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第1書き込みグループテーブルの各々の行に対して、前記第2書き込みグループテーブルの対応するバッファを検索するステップと、
前記第2書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
前記第2書き込みグループテーブルの対応するバッファを空けるために、前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、
を含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリコントローラーに関し、より詳細には、揮発性及び不揮発性の構成要素を含むハイブリッドコンピュータメモリのためのメモリモジュール及びその動作方法に関する。
【背景技術】
【0002】
パーシスタントメモリ(永続メモリ)を含む不揮発性デュアルインラインメモリモジュール(NVDIMM-P:Non-Volatile Dual In-line Memory Module with Persistent memory)は、電源が切られた場合、コンテンツを失う揮発性部分と電源が切られても(例えば、予測できない停電、システムの衝突、又は一般的なシャットダウン)コンテンツを維持する不揮発性部分を含むコンピュータシステムのためのランダムアクセスメモリ(Random-Access Memory)の類型である。いくつかの場合において、NVDIMM-Pは不揮発性メモリとしてメモリにマッピングされたフラッシュメモリ(例えば、NANDフラッシュ又はZNANDフラッシュ)及び揮発性メモリとしてダイナミックランダムアクセスメモリ(DRAM:Dynamic Random Access Memory)を含む。いくつかの場合において、スタティックランダムアクセスメモリ(SRAM:Static Random Access Memory)は揮発性部分として作用し、及び/又は相変化メモリ(PCM:Phase-Change Memory)は不揮発性部分として作用する。NVDIMM-Pモジュールに格納されたデータは、「パーシスタント(Persistent)DRAM」(例えば、バイト毎にアドレス指定が可能)としてアクセスされるか、又はコンピュータシステムが、ソリッドステートドライブ(SSD:Solid State Drive)のようなパーシスタントストレージデバイスのデータのみならず、ハードドライブ及び光学ドライブのような回転メディアのデータにアクセスする方式と類似したブロック単位のアクセスを通じてアクセスされる。
【0003】
NVDIMM-Pデバイスに対する標準は、JEDECソリッドステート技術業界(Solid State Technology Association)(又はJEDEC)によって定義される。このような標準は、NVDIMM-Pに従うデバイスにアクセスするための多数の命令を含む。
【先行技術文献】
【特許文献】
【0004】
【文献】米国特許第8,700,840号明細書
【文献】米国特許第9,223,642号明細書
【文献】米国特許第9,262,333号明細書
【文献】米国特許第9,378,142号明細書
【文献】米国特許第9,535,827号明細書
【文献】米国特許第9,552,176号明細書
【文献】米国特許出願公開第2014/0304475号明細書
【文献】米国特許出願公開第2016/0011802号明細書
【文献】米国特許出願公開第2016/0342487号明細書
【文献】米国特許出願公開第2017/0010817号明細書
【文献】米国特許出願公開第2017/0060706号明細書
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、ホストプロセッサから受信されたコマンドに応答してパーシスタントメモリ(永続メモリ)を含む不揮発性デュアルインラインメモリモジュール(NVDIMM-P)の揮発性及び不揮発性部分に書き込まれるデータを管理するメモリモジュール及びその動作方法方法を提供することにある。
【課題を解決するための手段】
【0006】
上記目的を達成するためになされた本発明の一態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディア(Media)レイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じてキャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント(Persistent)書き込みコマンドを受信し、前記ホストレイヤーを通じて前記パーシスタント書き込みコマンドに関連するデータを受信し、前記パーシスタント書き込みコマンドに応答して、前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込み、第2書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納し、有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行をアップデートする。
【0007】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第1書き込みグループテーブル及び前記第2書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第0書き込みグループテーブルを更に格納し得る。
前記ロジックコアは、更に、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第0書き込みグループテーブルの行ビットマップを検索し、前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの1つのバッファが利用可能な空間を有するか否かを判断し、前記複数のバッファのうちの1つのバッファが利用可能な空間を有すると判断された場合、前記1つのバッファを前記選択されたバッファとして選択し、前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、前記第2書き込みグループテーブルに利用可能なバッファがあるか否かを判断し、前記第2書き込みグループテーブルに利用可能なバッファがあると判断された場合、前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートし、前記利用可能なバッファを前記選択されたバッファとして選択し得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグ(Persist Flag)を更に含み、前記ロジックコアは、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み得る。
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、前記ロジックコアは、前記第2書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納し得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、前記ロジックコアは、前記パーシストフラッグが設定されたか否か判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断し、前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止し得る。
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール(NVDIMM:Non-Volatile Dual In-line Memory Module)であり得る。
【0008】
上記目的を達成するためになされた本発明の他の態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じて書き込みグループ識別子を含むフラッシュ(Flush)コマンドを受信し、各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ(Head Pointer)及びテールポインタ(Tail Pointer)を含む、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの1つ以上の行を検索し、各々のバッファが前記第1書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み得る。
【0009】
前記ロジックコアは、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートし得る。.
【0010】
上記目的を達成するためになされた本発明の更に他の態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じてフラッシュ(Flush)コマンドを受信し、各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第1書き込みグループテーブルの各々の行に対して、前記第2書き込みグループテーブルの対応するバッファを検索し、前記第2書き込みグループテーブルの対応するバッファの有効なエントリの各々対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートし得る。
【0011】
上記目的を達成するためになされた本発明の一態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記動作方法は、前記メモリコントローラーにより、キャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント(Persistent)書き込みコマンドを受信するステップと、前記パーシスタント書き込みコマンドに関連するデータを受信するステップと、前記パーシスタント書き込みコマンドに応答して、前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込むステップと、第2書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納するステップと、有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行をアップデートするステップと、を有する。
【0012】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第1書き込みグループテーブル及び前記第2書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第0書き込みグループテーブルを更に含み得る。
【0013】
前記動作方法は、前記メモリコントローラーにより、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第0書き込みグループテーブルの行ビットマップを検索するステップと、前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの1つのバッファが利用可能な空間を有するか否かを判断するステップと、前記複数のバッファのうちの1つのバッファが利用可能な空間を有すると判断された場合、前記1つのバッファを前記選択されたバッファとして選択するステップと、前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、前記第2書き込みグループテーブルに利用可能なバッファがあるか否かを判断するステップと、前記第2書き込みグループテーブルに利用可能なバッファがあると判断された場合、前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートするステップと、前記利用可能なバッファを前記選択されたバッファとして選択するステップと、を更に含み得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグ(Persist Flag)を更に含み、前記動作方法は、前記メモリコントローラーにより、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を更に含み得る。
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、前記方法は、前記メモリコントローラーが、前記第2書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納するステップと、を更に含み得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、前記動作方法は、前記メモリコントローラーにより、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断するステップと、前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止するステップと、を更に含み得る。
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール(NVDIMM:Non-Volatile Dual In-line Memory Module)であり得る。
【0014】
上記目的を達成するためになされた本発明の他の態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記動作方法は、前記メモリコントローラーにより、書き込みグループ識別子を含むフラッシュ(Flush)コマンドを受信するステップと、各々の行が第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの1つ以上の行を検索するステップと、各々のバッファが前記第1書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに1つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第2書き込みグループテーブルの1つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記1つ以上のバッファの1つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を含む。
【0015】
前記方法は、前記メモリコントローラーが、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を更に含み得る。
【0016】
上記目的を達成するためになされた本発明の更に他の態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第1書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記動作方法は、前記メモリコントローラーにより、フラッシュ(Flush)コマンドを受信するステップと、各々の行が前記第2書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記第1書き込みグループテーブルの各々の行に対して、前記第2書き込みグループテーブルの対応するバッファを検索するステップと、前記第2書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、前記第2書き込みグループテーブルの対応するバッファを空けるために、前記第1書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を含む。
【発明の効果】
【0017】
本発明によると、揮発性メモリから不揮発性メモリにデータが重複してフラッシュされることを避け、書き込みグループによって揮発性メモリから不揮発性メモリにデータをフラッシュする性能を向上させることができる。
【図面の簡単な説明】
【0018】
【
図1】本発明の一実施形態によるホストシステムとインターフェースするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールの構成図である。
【
図2A】本発明の一実施形態によるホストシステムとインターフェースするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールのブロック図である。
【
図2B】本発明の一実施形態によるロジックコア及び揮発性メモリを含むNVMDIMM-Pの一部分のブロック図である。
【
図3A】本発明の一実施形態による第1書き込みグループテーブル及び第2書き込みグループテーブルの構成図である。
【
図3B】本発明の一実施形態による第1書き込みグループテーブル及び第2書き込みグループテーブルの構成図である。
【
図4】本発明の一実施形態による第1書き込みグループテーブル及び第2書き込みグループテーブルにおける「レコード」動作に対する構成図である。
【
図5】本発明の一実施形態による「レコード」動作のフローチャートである。
【
図6A】本発明の一実施形態による「フラッシュ」動作のフローチャートである。
【
図6B】本発明の一実施形態による「ライトバック」動作のフローチャートである。
【
図7】本発明の一実施形態によるパーシスタント書き込みコマンドの実行のフローチャートである。
【
図8】本発明の一実施形態によるフラッシュコマンドの実行のフローチャートである。
【
図9】本発明の一実施形態による第0書き込みグループテーブル、第1書き込みグループテーブル、及び第2書き込みグループテーブルの構成図である。
【
図10】本発明の一実施形態による第0書き込みグループテーブル、第1書き込みグループテーブル、及び第2書き込みグループテーブルを含むシステムにおける「レコード」動作の実行のフローチャートである。
【
図11】本発明の一実施形態による第0書き込みグループテーブル、第1書き込みグループテーブル、及び第2書き込みグループテーブルを含むシステムにおける「フラッシュ」動作の実行のフローチャートである。
【発明を実施するための形態】
【0019】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。図で、同じ参照符号は同じ要素を称する。しかし、本発明は、多様な形態で具現され、本明細書で説明する実施形態に限られるものと解釈してはならない。むしろ、このような実施形態は、本発明が徹底且つ完璧に成るような例示として提供され、当業者に本発明の特徴と様相を十分に伝達するためのものである。従って、本発明の特徴と様相の完璧な理解のために当業者に必要としないプロセス、要素、そして技術は説明しないこともある。他に言及しない限り、同じ参照符号は、図面及び発明の詳細な説明で同じ要素を表し、従って、これに対する説明は繰り返さない。
【0020】
本明細書で「第0」、「第1」、「第2」、「第3」等の用語が多様な要素、構成要素、及び/又はセクションを説明するために使用されるとしても、このような要素、構成要素、及び/又はセクションは、このような用語によって制限されてはならない。このような用語は、1つの要素、構成要素、又はセクションを他の要素、構成要素、又はセクションと区別するために使用される。従って、本発明の思想及び範囲を逸脱しない限り、下記で説明する第1要素、第1構成要素、又は第1セクションは、第2要素、第2構成要素、又は第2セクションと称することができる。
【0021】
本明細書で使用する用語は、単に特定の実施形態を説明するための目的であり、本発明を制限する意図はない。本明細書で使用する通り、文脈が明確に異なるものを指さない限り、単数形態は、複数形態を含むものと意図される。「含む」、「含み」の用語は、本明細書で使用する場合、記述する特徴、整数、ステップ、動作、要素、及び/又は構成要素の存在を明示するが、1つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、及び/又はその組み合わせの存在又は追加をできないようにするものではない。本明細書で使用する通り、「及び/又は」の用語は、1つ以上の関連する項目及び全ての組み合わせを含む。「少なくとも1つ」のような表現は、要素のリストの前にある場合、要素の全てのリストを修正し、個別要素のリストを修正しない。
【0022】
本明細書で使用する通り、「非常に」、「約」、そして類似する用語は、近似の用語として使用され、程度の用語としては使用されず、通常の技術者によって認識され、測定されるか又は計算された値で固有の偏差を説明するために意図される。なお、本明細書の実施形態を説明する場合、「できる」の使用は、「本発明の1つ以上の実施形態を」称する。本明細書で使用する通り、「使用」、「使用する」、そして「使用され」の用語は、それぞれ「活用」、「活用する」、そして「活用され」の用語と同意語として考慮される。なお、「例示的な」用語は、説明又は例示を称するためのものと意図される。
【0023】
本明細書で説明する本発明の実施形態による電子又は電気デバイス及び/又は他に関連するデバイス又は構成要素は、任意の適切なハードウェア、ファームウェア(例えば、特定用途向け集積回路(ASIC))、ソフトウェア、又はソフトウェア、ファームウェア、及びハードウェアの組み合わせを活用して具現される。例えば、このようなデバイスの多様な構成要素は1つの集積回路(IC)チップ又は別途のICチップで形成される。なお、このようなデバイスの多様な構成要素は、フレキシブル印刷フィルム、テープキャリアパッケージ(TCP:Tape Carrier Package)、印刷回路基板(PCB)で具現されるか又は1つの基板で形成される。
【0024】
図1は、本発明の一実施形態によるホストシステムとインターフェースをするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュール(NVDIMM-P)の構成図であり、
図2Aは、本発明の一実施形態によるホストシステムとインターフェースをするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールのブロック図である。
【0025】
図1及び
図2Aに示す通り、NVDIMM-P100は、揮発性メモリ110、不揮発性メモリ(又はパーシスタントメモリ)120、そして揮発性メモリ110及び不揮発性メモリ120の両方にデータを書き込み、両方からデータを読み込むメモリコントローラー130を含む。メモリコントローラー130は、ホストプロセッサ200とインターフェースをするホストレイヤー132(例えば、行アドレスストローブ(Strobe)-列アドレスストローブ、又はRAS-CASインターフェース)、NVDIMM-Pモジュールを制御するロジックコア134、そして不揮発性メモリ120とインターフェースをするメディアレイヤー136を含む。いくつかの実施形態で、メモリコントローラー130は、例えばフィールドプログラマブルゲートアレイ(FPGA:Field Programmable Gate Array)、特定用途向け集積回路(ASIC)、又はマイクロコントローラーで具現される。
【0026】
以下では、揮発性メモリ110は「キャッシュ(Cache)」と称し、ロジックコア134は「キャッシュレイヤー(Cache Layer)」と称する。例えば、スタティックランダムアクセスメモリ(SRAM)(揮発性メモリ110)は、相変化メモリ(PCM)(不揮発性メモリ120)に対する書き込みバッファとして作用する。他の例として、ダイナミックランダムアクセスメモリ(DRAM)キャッシュは、度々使用されるか又は最近使用されたデータを読み込み/書きみする場合、性能を向上させるためにフラッシュメモリ(例えば、Z-NAND)に連結される。
【0027】
図2Bは、本発明の一実施形態によるロジックコア134及び揮発性メモリ110を含むNVDIMM-Pの一部分のブロック図である。
図2Bに示す通り、ロジックコア134は、ホストレイヤー132に対するインターフェース134h、メディアレイヤー136に対するインターフェース134m、キャッシュコントローラー134c、プリフェッチャー(Prefetcher)134p、メタデータキャッシュ134md(ロジックコア134内のスタティックランダムアクセスメモリ又はSRAMとして具現されるか、或いはスタティックランダムアクセスメモリ又はSRAMに格納される)、L1プリフェッチ(Prefetch)バッファ134L1(ロジックコア134内のSRAMに格納されることで具現される)、及び揮発性メモリ110(例えば、ロジックコア134の外部のダイナミックランダムアクセスメモリ又はDRAM)とインターフェースをする揮発性メモリコントローラー134dを含む。
【0028】
図2Bは、一実施形態として、揮発性メモリ110に格納される多様な類型のデータを示す。このようなデータは、キャッシュされたデータ112、キャッシュメタデータ114、L2読み込み/書き込みキャッシュ116、及びL3書き込みバッファ118を含む。
【0029】
NVDIMM-P100、特にメモリコントローラー130は、メモリコントローラー130のホストレイヤー132に連結されたバス250(
図1及び
図2A参照)を通じてホストプロセッサ200と通信する。メモリコントローラー130は、ホストレイヤー132を通じて、NVDIMM-Pにデータを書き込みNVDIMM-Pからデータを読み込むためにホストプロセッサ200からコマンド及びデータを受信する。メモリコントローラー130は、例えば揮発性メモリ110及び/又は不揮発性メモリ120にデータを書き込むか又は揮発性メモリ110及び/又は不揮発性メモリ120からデータを読み込んで、バス250を通じてホストプロセッサ200にデータを提供することでコマンドに応答する。データは、「パーシスタントDRAM」としてアクセスされるか又はブロック基盤のドライブアクセスインターフェースを通じてアクセスされるキャッシュラインインターフェース(例えば、メモリにマッピングされたフラッシュ及びDRAM)を通じて、キャッシュラインユニットにあるNVDIMM-P100に書き込み/読み込みされる。
【0030】
データ持続性に関するNVDIMM-P標準に定義されたコマンドは、パーシスタント書き込みコマンド(例えば、NVDIMM-P標準によるPWRITEコマンド)及びフラッシュコマンド(例えば、NVDIMM-P標準によるFLUSHコマンド)を含む。PWRITEコマンドのパラメータは、データが書き込まれるキャッシュラインアドレス(又はメモリアドレス)、書き込みグループ識別子(WGID)、及び「パーシスト(Persist)」フラッグ(Flag)を含む。「オフ(Off)」(例えば、zero又は0)に設定された「パーシスト(Persist)」フラッグを含むPWRITEコマンドに応答して、メモリコントローラー130は、関連するデータをNVDIMM-P100の揮発性メモリ110に格納し、コマンドによって書き込まれたデータの持続性を保証しない。
【0031】
「オン(On)」(例えば、one又は1)に設定された「パーシスト(Persist)」フラッグを含むPWRITEコマンドに応答して、メモリコントローラー130は、関連するデータをNVDIMM-P100の不揮発性メモリ120に格納(「フラッシュ」)して、PWRTIEコマンドで提要された書き込みグループ識別子(WGID)を含む他の全てのデータ(例えば、以前にPWRITEコマンドを使用してNVDIMM-P100に書き込まれたデータ及び同じWGIDを有するデータ)を揮発性メモリ110から不揮発性メモリ120に格納(例えば、書き込み又はフラッシュ)する。NVDIMM-P100は、「オン(On)」に設定されたパーシストフラッグを含むPWRTIEコマンドが完了した場合に、ホストプロセッサ200に確認応答をする。
【0032】
FLUSHコマンドのパラメータは、不揮発性メモリ120に全ての書き込み(例えば、揮発性メモリ110に書き込まれた全てのデータ)をフラッシュするか、全てのパーシスタント書き込み(例えば、0として設定されたパーシストビットを含むPWRITEコマンドを用いて実行された全ての書き込み)をフラッシュするか、又は与えられたWGIDに関する全てのパーシスタント書き込み(例えば、PWRITEコマンドと類似するが、追加データのない書き込み)をフラッシュするかを示す設定を含む。FLUSH動作が完了した場合、NVDIMM-P100はホストプロセッサ200に確認を提供する。
【0033】
「オン(On)」に設定された「パーシスト(Persist)」を含むPWRITEコマンドに応答してデータをフラッシュする場合、又はWGIDに基づいてFLUSHコマンドに応答してデータをフラッシュする場合、メモリコントローラー130は、揮発性メモリ110でフラッシュされるデータ、即ち与えられたWGIDに関する全てのデータを識別する。
【0034】
揮発性メモリ110が小さい場合、揮発性データに対する検索はマッチングするWGIDを有する全てのデータに対して揮発性メモリ110の全てをスキャンすることで達成される。例えば、SRAM書き込みバッファ(例えば、L3書き込みバッファ118)は、約256個のキャッシュエントリ(Entries)を含み、これは現在のメモリ技術に基づいて合理的な時間内(例えば、相当するレイテンシ(Latency)又は相当する性能オーバーヘッド(OverHead)なし)にスキャンするのに十分に小さい。
【0035】
しかし、揮発性メモリ110が大きい場合、全ての揮発性データをスキャンすることは実用的ではない。例えば、8ギガバイト(GB)DRAMキャッシュは、約4百万キャッシュラインエントリを有し、全ての4百万キャッシュラインエントリをスキャンするのに要求される時間は非常に長くなり、NVDIMM-P100で相当なレイテンシを発生する(例えば、メモリコントローラー130は、スキャンが完了するまで活性化を抑えるか又は待機する。従って、受信され且つメモリコントローラー130のコマンドキュー(Queue)で待機される次のコマンドを実行するためのレイテンシを増加させる)。
【0036】
このように、本実施形態は、例えば1に設定されたパーシストビットを有するPWRITEコマンド又は特定WGIDに対するFLUSHコマンドに応答して、不揮発性メモリ120にフラッシュされる揮発性メモリ110のエントリを識別するオーバーヘッドを減少させるためのシステム及び方法に関する。これは、不揮発性メモリ120に書き込みグループをフラッシュするために必要な時間を減少させることで、NVDIMM-P100の応答速度を十分に向上させる。また、データのフラッシュを加速化させることで、処理量を向上させ、コマンドキューで次のコマンドのブロッキング(Blocking)を減少させる。
【0037】
いくつかの実施形態は、揮発性メモリ110で書き込まれたデータの状態を追跡するための特殊なデータ構造の使用に関する。他の実施形態は、非常に減少した計算オーバーヘッドを有するPWRITE及びFLUSHコマンドを支援するためのデータ構造に格納されたデータを活用するシステム及び方法に関する。従って、PWRITE及びFLUSHのようなNVDIMM-Pコマンドの効率的な実行を可能にする。
【0038】
一実施形態において、データ構造は、第1書き込みグループテーブル(L1WGT)及び第2書き込みグループテーブル(L2WGT)を含む。
【0039】
図3A及び
図3Bは、本発明の一実施形態による第1書き込みグループテーブル(L1WGT)304及び第2書き込みグループテーブル(L2WGT)306の構成図である。
図3A及び
図3Bに示す通り、データ構造は各書き込みグループ識別子(WGID)に属するキャッシュラインを追跡するために使用され、これによって任意に与えられたWGIDに関連するキャッシュラインの識別を単純にする。
【0040】
第1書き込みグループテーブル(L1WGT)は、メモリコントローラー130内のスタティックランダムアクセスメモリ(SRAM)に格納され、WGID(例えば、64ビット値)によってページ(Page)エントリ(例えば、第2書き込みグループテーブル(L2WGT)内のエントリのビットマップ(Map))にマッピングする。第1書き込みグループテーブル(L1WGT)は、より速やかなアクセスのためにSRAMに基づくが、本実施形態はこれに限定されない。第2書き込みグループテーブル(L2WGT)は、L2読み込み/書き込みキャッシュ116のように、NVDIMM-P100の揮発性メモリ110(又はメモリコントローラー130の別途の動的メモリ(DRAM))に格納され、ページエントリからNVDIMM-P100の揮発性メモリ110内のキャッシュラインアドレス(又はデータアドレス)にマッピングする。いくつかの実施形態で、第2書き込みグループテーブル(L2WGT)は、費用考慮事項、性能要求事項、及び容量要求事項(例えば、SRAMはDRAMよりもより高速でより高価であり、例えばFPGA又はASIC内で利用可能なメモリの量が制限される)に基づいて、静的メモリ(SRAM)に格納される。いくつかの実施形態で、第2書き込みグループテーブル(L2WGT)がメモリアドレス又は揮発性メモリ110のキャッシュメタデータ114領域内の位置にマッピングされる間接指定(Indirection)の追加ステップがあり、キャッシュメタデータ114領域は、キャッシュラインアドレスを格納する。
【0041】
図3Bは、一実施形態による第1書き込みグループテーブル(L1WGT)及び第2書き込みグループテーブル(L2WGT)の詳細な構成図である。
図3Bに示す例で、第1書き込みグループテーブル(L1WGT)は64個のエントリを含み、エントリは0~63まで(WGID[0]、WGID[1]、…、WGID[63])番号が付けられた各書き込みグループ識別子(WGID)に関する。
図3Bの第1書き込みグループテーブル(L1WGT)の各エントリは、第2書き込みグループテーブル(L2WGT)の行のうちの1つに対応し、対応する第2書き込みグループテーブル(L2WGT)の行内にあるヘッド(Head)エントリ(ヘッドポインタ(Pointer))に対するポインタ及びテール(Tail)エントリ(テールポインタ)に対するポインタを含む(例えば、第1書き込みグループテーブル(L1WGT)の各エントリは、対応する第2書き込みグループテーブル(L2WGT)の行のエントリ[0]のメモリ位置に対応する暗黙のオフセット(Offset)を含み、ヘッド及びテールの特定位置はポインタ算出演算で計算される)。
【0042】
上述した通り、第2書き込みグループテーブル(L2WGT)は、速度及び容量のような性能要求事項に基づいて、SRAM又はDRAMに格納される。いくつかの実施形態で、第2書き込みグループテーブル(L2WGT)は多数のリングバッファを含み、それぞれのリング(Ring)バッファは対応する書き込みグループに関連する。
図3Bに示す例で、64個のリングバッファがあり、各リングバッファは、WGID[0]~WGID[63]で示された64個の書き込みグループのうちの異なる1つに対応する。各リングバッファは多数のエントリを含み(
図3Bに示す実施形態で、各リングバッファは65個のエントリを含む(エントリ[0]~エントリ[64]))、各エントリはキャッシュラインアドレス(例えば、28ビットアドレス)を格納する。図示した実施形態で、有効なエントリは、ヘッド及びデールによって境界が出来上がる(例えば、ヘッドからテール-1までの範囲外のエントリは有効でないものと見なされる)。
【0043】
例えば、
図3Bに示す第0書き込みグループ(WGID[0])を検討すると、第1書き込みグループテーブル(L1WGT)は1のヘッドポインタ及び3のテールポインタを格納し、これはリングバッファでエントリがエントリ[1]から始まりエントリ[3]で終了することを示す。対応する第2書き込みグループテーブル(L2WGT)の行を検討すると、エントリ[1]でヘッドエントリは0x0000000キャッシュラインアドレスを格納し、エントリ[2]で次のエントリは0x0000001キャッシュラインアドレスを格納し、エントリ[3]でその次のエントリはリングバッファのテールである。
【0044】
他の実施形態で、第2書き込みグループテーブル(L2WGT)はヘッドエントリがいつも第0番目要素(例えば、エントリ[0])であり、第1書き込みグループテーブル(L1WGT)はテールの位置のみを格納するアレイ(Array)を用いて具現される。
【0045】
本発明が64個の書き込みグループ(例えば、64個のWGID)を含む実施形態について説明するが、本実施形態はこれに限定されず、64個の書き込みグループよりも少ないか又は64個の書き込みグループよりも多いもので具現される。例えば、いくつかの実施形態は255個の書き込みグループ又は256個の書き込みグループを含む。
【0046】
<エントリの状態に対する情報の格納>
【0047】
ホストプロセッサ200が揮発性メモリ110から不揮発性メモリ120にキャッシュラインをフラッシュするためにNVDIMM-Pにコマンドを伝達するが、NVDIMM-P100は、ホストプロセッサ200に知らせることなく、不揮発性メモリ120にキャッシュラインを既に書き込みしている場合(例えば、キャッシュがフル(Full)になった場合のキャッシュ明け渡しによる)、キャッシュラインをフラッシングすることは必要ないかもしれない。これが、誤った結果を招かないこともあるが、関係のない動作は性能を低下させることもあり、関係のない書き込みは不揮発性メモリ120の寿命を減少させる(例えば、フラッシュメモリの制限された書き込みサイクル(Cycle)の回数を不必要に消耗することで)。このように、いくつかの実施形態で、メモリコントローラー130は、追加の書き込みが必要であるか否かを判断するために追加メタデータを格納し、このデータはメモリコントローラー130が不揮発性メモリ120に既に書き込まれたデータを識別するようにする。従って、メモリコントローラー130は、不揮発性メモリ120に不必要な書き込みを行うことを防止し、不揮発性メモリ120の寿命を増加させる。
【0048】
いくつかの実施形態で、メモリコントローラー130は、揮発性メモリ110のキャッシュメタデータ114に各エントリに対する「パーシスト状態」を格納する。パーシスト状態は、対応するキャッシュラインが未だパーシスタントに作られたものではないが(例えば、不揮発性メモリ120にフラッシュすることで)、パーシスタントとしてマークされているかを示す(例えば、PWRITEコマンドによって)。例えば、これは0に設定されたパーシストを含むPWRITEコマンドによって書き込まれたデータに対応する。
【0049】
表1は、揮発性メモリ110に格納されたデータの多様な可能な状態を示しており、メモリコントローラー130が、キャッシュ明け渡し(WRITE又はFLUSHコマンドによるものではない)及びPWRITE又はFLUSHコマンドに応答して、揮発性メモリ110から不揮発性メモリ120(ライトバックを行う)にデータを書き込んだか否かを示す。
【0050】
【0051】
表1のように、キャッシュラインが「有効ではない(Invalid)」状態である場合、メモリコントローラー130は、不揮発性メモリ120に有効ではないデータを書き込む必要がないため、明け渡し又はPWRITE又はFLUSHに応答して不揮発性メモリ120にライトバックしない。
【0052】
状態が「クリーン(Clean)」である場合、揮発性メモリ110のデータは、対応する不揮発性メモリ120のデータに一致する(即ち、同じデータ)。このように、メモリコントローラー130は、揮発性メモリ110から不揮発性メモリ120にデータをライトバックする必要がない。
【0053】
状態が「ダーティ(Dirty)」である場合、揮発性メモリ110のデータは、変更され、不揮発性メモリ120に一致しない。このように、データがキャッシュ(揮発性メモリ110)から明け渡された場合、メモリコントローラー130は、データ損失を防止するために、不揮発性メモリ120にデータを書き込みする。しかし、データがパーシスタントとしてマークされていないため、PWRITE又はFLUSHコマンドに応答してデータをライトバックしない。
【0054】
状態が「パーシスト(Persist)」である場合、データは、キャッシュ明け渡しである場合(そうでない場合、パーシストされたデータが損失されるため)及びPWRITE又はFLUSHコマンドである場合に、不揮発性メモリ120に書き込まれる。パーシスタントとしてマークされたデータが不揮発性メモリ120に書き込まれた後に、次のPWRITE又はFLUSHコマンドによって、データが再びライトバックされないように、データはメタデータ内で「クリーン(Clean)」状態に設定される。
【0055】
上記の表1で示した4つの異なる状態があるため、いくつかの実施形態で、メモリコントローラー130は、例えば3つのビットを使用して4つの状態(有効ではない、クリーン、ダーティ、パーシスト)を追跡する。表2は、異なる状態の符号化を示し、一実施形態によると、これらの状態は、L2読み込み/書き込みキャッシュ116及びL3書き込みバッファ118のためのキャッシュメタデータ114内に格納される。
【0056】
【0057】
表2に示す通り、4つの状態は、1つ以上の「有効」ビット、「ダーティ」ビット、及び「パーシスト」ビットの組み合わせを使用して示される。例えば、読み込み/書き込みキャッシュ(RWC)の場合、1つの有効ビット、1つのダーティビット[有効、ダーティ]、及び1つのパーシストビットは4つの状態を示す。[0、X、X]は「有効ではない」状態(「X」は、値が無視されることを示し、例えば0又は1、即ち有効ビットが0であることは状態が「有効ではない」ことを示すのに十分である)を示し、[1、0、0]は、「クリーン」状態を示し、[1、1、0]は、「ダーティ」であるが、「パーシスト」ではない状態を示し、[1、1、1]は、「パーシスト」又は「ダーティ及びパーシスト」状態を示す。
【0058】
同様に、書き込みバッファ(WB)の場合、状態は、多数の有効ビット(例えば、32ビット)、ダーティビット、パーシストビットから類推される。全ての有効ビットが0である場合、データは「有効ではない」状態である。全ての有効ビットが1であり、ダーティビットが0であり、パーシスとビットが0である場合、データは「クリーン」状態である。全ての有効ビットが0ではなく、ダーティビットが1、パーシストビットが0である場合、データは「ダーティ」状態である。全ての有効ビットが0ではなく、ダーティビットが1、パーシストビットが1である場合、データは「パーシスト」状態である。
【0059】
上述した通り、データがキャッシュから明け渡された後、例えばメタデータの値を適切に修正することで、データの状態はクリーンに変更される。例えば、L2読み込み/書き込みキャッシュ116の場合、「パーシスト」状態からデータ明け渡しを行った後、メタデータ値は、[1、1、1](「パーシスト」状態)から[1、0、0](「クリーン」状態)に変更される。
【0060】
<4つの関数を用いてPWRITE及びFLUSHを実行する>
【0061】
本実施形態は、書き込みグループテーブル及びキャッシュラインメタデータと共に、PWRITE及びFLUSHコマンドの実行を支援するために使用される4つの関数により指図される。
【0062】
Record(WGID、Address)-書き込みグループテーブルにあるキャッシュラインアドレスを記録
【0063】
Flush(WGID)-特定のWGIDに関連するキャッシュラインをフラッシュ
【0064】
FlushPersist()-全てのパーシスタントキャッシュライン(例えば、「パーシスト状態」に設定されたキャッシュライン)をフラッシュ
【0065】
FlushAll()-全てのキャッシュライン(例えば、パーシスタントであるか又はパーシスタントでない)をフラッシュ
【0066】
図4は、本発明の一実施形態による第1書き込みグループテーブル及び第2書き込みグループテーブルにおける「レコード(Record)」動作に対する構成図である。特に、
図4は書き込みグループ識別子に対するWGID[1]パラメータ及びアドレス(キャッシュラインアドレス)に対する0x0000004を有するRecord(WGID、Address)関数を呼出す効果を示す。
図3Bに示した状態に比べて、変更された書き込みグループテーブルの部分は、暗い色又は黒い色の背景で示す。
【0067】
図5は、本発明の一実施形態による「レコード(Record)」動作500のフローチャートである。また、
図5は、多様な動作がどうやって行われるかを示すCのような擬似コード(Pseudocode)のラインを含む。
【0068】
図4及び
図5を参照すると、レコード動作は、書き込みグループ識別子(WGID)及びキャッシュラインアドレスと共に呼出される。502ステップにおいて、メモリコントローラーは、第1書き込みグループテーブル(L1WGT)で、与えられた書き込みグループ識別子(WGID)に対応するヘッド及びテール値を検索する。
図4に示す例で、WGID[1]に対するヘッドはL1WGTの位置402に格納され、テールはL1WGTの位置404に格納される。
図3Bを参照すると、WGID[1]に対するヘッドは0であり、テールは1であった。
【0069】
504ステップで、メモリコントローラー130は、与えられた書き込みグループ識別子(WGID)に関連するバッファがフルであるか否かを判断する。例えば、テールの位置がヘッドの位置のすぐ前である場合、リングバッファはフルであると判断される((tail+1)%ring_buf_size==headによって計算される)。
【0070】
バッファがフルになった場合、506ステップで、メモリコントローラー130は、レコード動作が失敗したことを指す偽(False)返し、レコード動作は終了する。
【0071】
バッファがフルでない場合、508ステップで、メモリコントローラー130は、与えられた書き込みグループに対応する第2書き込みグループテーブル(L2WGT)の行のテール位置に、与えられたアドレスを格納する。擬似コード(Pseudocode)で、これはL2WGT[WGID][tail]=addressであり、
図4に示す例で、これはアドレス0x0000004をWGID[1]に対応する第2書き込みグループテーブル(L2WGT)の列にあるテール(Entry[1])に対応する位置406に書き込むことに対応する。
【0072】
510ステップで、メモリコントローラー130は、第1書き込みグループテーブル(L1WGT)のテールの位置を増加させる。このように、
図4の位置404に示すテールは、1から2に増加され、それに相応して、テールは
図4の位置408に示すEntry[2]に位置する。
【0073】
512ステップで、メモリコントローラー130は、レコード動作が成功したことを指す真(True)を返してレコード動作は終了する。
【0074】
図6Aは、本発明の一実施形態による「フラッシュ(Flush)」動作600のフローチャートである。
図6Aに示す通り、「Flush」関数は、書き込みグループ識別子(WGID)を入力として取り込み、ライトバック動作を用いてWGIDに関連する全てのキャッシュラインをフラッシュしてバッファをクリアする。より詳しくは、一実施形態として、610ステップにおいて、メモリコントローラー130は、第1書き込みグループテーブル(L1WGT)で、与えられたWGIDに対するヘッド及びテール値を検索する。620ステップで、メモリコントローラー130は、ヘッドからテールまでの値に対して繰り返すループ(Loop)を開始する。ループで現在の位置は「Pos」で表示される。上述した通り、いくつかの実施形態で、バッファはリングバッファとして具現され、テール位置はヘッドよりも小さい値で示される。このような場合、610ステップにおける繰り返しは、バッファ内の全ての有効な値に対して繰り返すため、これを考慮する。
【0075】
630ステップで、メモリコントローラー130は、バッファの現在の位置(Pos)で、アドレスに対するメタデータにパーシスト状態が設定されたか否かを判断する。パーシスト状態が設定された場合、640ステップで、メモリコントローラー130は、アドレスのデータを不揮発性メモリ120に書き込む(ライトバックを行う)。パーシスト状態が設定されない場合(例えば、偽(False))、メモリコントローラー130は、アドレスのデータを不揮発性メモリ120に書き込まない(例えば、不揮発性メモリ120にデータが既に格納されているため)。いずれの場合でも、660ステップで、メモリコントローラーは、評価するバッファの位置が更にあるか否かを判断する(例えば、Posがテールより小さい)。バッファの位置が更にある場合、メモリコントローラーは、ヘッドからテールまで、次の位置を識別するために620ステップを継続する。全ての位置が評価された場合、670ステップで、メモリコントローラーは、ヘッド及びテールを同じ値に設定することでバッファを空ける(例えば、与えられた書き込みグループ識別子(WGID)に対応する第1書き込みグループテーブル(L1WGT)の行のヘッド及びテールの値を0に設定)。
【0076】
書き込みグループテーブルが各書き込みグループ識別子(WGID)に関連する全てのデータのメモリ位置を格納することから、メモリコントローラー130は、どのデータが与えられた書き込みグループに属するかを確認するために揮発性メモリ110の全体をスキャンする必要がない。代わりに、与えられた書き込みグループに関連する全てのデータを確認することは、単に書き込みグループに関連する書き込みグループテーブルに格納されたアドレスの集まりを検索することのみを含む。
【0077】
図6Bは、本発明の一実施形態による「ライトバック」動作640のフローチャートである。キャッシュラインアドレスが与えられると、メモリコントローラー130は、データを確認し、確認されたデータを不揮発性メモリ120に書き込み、そして修正されたデータの状態に関連するメタデータをアップデートすることで、キャッシュラインアドレスに関連するデータのライトバックを行う。
図6Bに示さなくても、いくつかの実施形態で、キャッシュラインアドレスはメタデータアドレスに変更され、メタデータアドレスに位置するメタデータは、揮発性メモリ110内の対応するデータの位置及び不揮発性メモリ120内の対応する位置の確認のみならず、キャッシュラインに関連するメタデータの状態(又は「ビット」)(例えば、1つ以上の有効状態、ダーティ状態、及びパーシスト状態)を識別する。
【0078】
642ステップにおいて、メモリコントローラー130は、アドレス(Address)で任意の有効ではないデータがあるか否かを判断するためにメタデータを確認する(例えば、1つ以上の有効ビットのうちのいずれか1つでも偽(False)に設定されたか)。有効ではないデータがある場合、644ステップで、揮発性メモリ110内のデータは不揮発性メモリ120からのデータにアップデートされる。全て有効の場合、646ステップで、メモリコントローラー130は、アドレスのデータを揮発性メモリ110から不揮発性メモリ120に移動し、648ステップで、メモリコントローラー130は、有効状態を真(例えば、全て1)、ダーティ状態を偽(例えば、0)、そしてパーシスト状態を偽(例えば、0)に設定するためにメタデータをアップデートする。
【0079】
いくつかの実施形態は、下記で詳しく説明する通り、Record(WGID、Address)及びFlush(WGID)関数に関して、上述した技法及び動作に基づいてPWRITE及びFLUSHコマンドを実行する。
【0080】
図7は、本発明の一実施形態によるパーシスタント書き込み(PWRITE)コマンドの実行のフローチャートである。メモリコントローラー130がPWRITEコマンドを受信する場合、メモリコントローラー130がメタデータ内の与えられたアドレスを「パーシスト」状態に設定してRecord関数がPWRITEを書き込みグループテーブルに記録するために使用されるものを除外した全ての動作は通常の書き込み(XWRITE)と実質的に同じである。一実施形態で、PWRITEコマンドは、アドレス(Address)、書き込みグループ識別子(WGID)、パーシスト(Persist)フラッグ、及びいくつかの関連するデータ(Data)を含む。702ステップで、メモリコントローラー130は、データをアドレスに書き込む(通常のXWRITEコマンドのように)。704ステップで、メモリコントローラー130は、アドレスに対応するメタデータをパーシスト状態に設定する(例えば、パーシスト状態を真(例えば、1)に設定するか、或いは読み込み/書き込みキャッシュの場合、上記の表2に示した通り、有効及びダーティ状態をそれぞれ0及び1に設定)。706ステップで、メモリコントローラーは、上記の
図5で説明したレコード動作500を用いてPWRITEを書き込みグループテーブル(例えば、L1WGT及びL2WGT)に記録する。708ステップで、メモリコントローラー130は、PWRITEコマンドでパーシストフラッグが設定されたか否かを判断する。パーシストフラッグが設定された場合、710ステップで、メモリコントローラー130は、与えられたWGIDに関連する全てのデータを不揮発性メモリ120にフラッシュするために、上記の
図6Aで説明したフラッシュ動作600を用いる。パーシストフラッグが設定されたか否かに拘らず全ての場合に、コマンドは終了する(例えば、パーシストフラッグがPWRITEコマンドで設定されてない場合、フラッシュ動作を行う必要はない)。
【0081】
図8は、本発明の一実施形態によるフラッシュ(FLUSH)コマンドの実行のフローチャートである。
図8に示す通り、FLUSHコマンドに提供されたパラメータに基づいて、FLUSHコマンドは、特定の書き込みグループ識別子(WGID)に関連する全てのデータをフラッシュし、設定(例えば、真に設定)されたパーシスト状態を有する全てのデータをフラッシュするか又は揮発性メモリ110の全てのデータをフラッシュする。802ステップで、メモリコントローラー130は、パラメータから、FLUSHコマンドが特定の書き込みグループをフラッシュするためのものであるか(wgid)、パーシストにマークされた全てのデータをフラッシュするためのものであるか(persist)、又は揮発性メモリ110の全てのデータをフラッシュするためのものであるか(all)を判断する。
【0082】
メモリコントローラー130がFLUSHコマンドを特定の書き込みグループをフラッシュするためのもの(wgid)と判断すると、804ステップで、メモリコントローラーは、
図6Aで説明したFlush関数を用いて、特定された書き込みグループをフラッシュし、FLUSHコマンドの実行は終了する。
【0083】
メモリコントローラー130がFLUSHコマンドをパーシストにマークされたデータをフラッシュするもの(persist)と判断すると、メモリコントローラーは、書き込みグループテーブル(例えば、L1WGT)で、全ての書き込みグループ識別子(WGID_i)に対して繰り返すループを開始する。808ステップで、メモリコントローラー130は、
図6Aで説明したFlush関数を用いて、現在の書き込みグループ(例えば、現在のWGID_i)をフラッシュする。810ステップで、メモリコントローラー130は、処理する書き込みグループが更にあるか否かを判断する。処理する書き込みグループがある場合、メモリコントローラー130は、次の書き込みグループを選択するために806ステップを繰り返す。処理する書き込みグループがない場合、FLUSHコマンドの実行は終了する。
【0084】
メモリコントローラー130が、FLUSHコマンドが揮発性メモリ110に格納された全てのデータをフラッシュするもの(all)と判断すると、812ステップで、メモリコントローラー130は、メタデータのエントリに対して繰り返すことで、全ての揮発性メモリ110に対して繰り返すループを開始する。メタデータの各エントリについて、メモリコントローラー130は、814ステップで、対応するデータがダーティであるか否かを判断する。対応するデータがダーティである場合、816ステップで、メモリコントローラー130は、
図6Bで説明した通り、i番目のデータに対してライトバック動作640を行う。818ステップで、メモリコントローラー130は、処理するメタデータのエントリが更にあるか否かを判断する。処理するメタデータのエントリがある場合、メモリコントローラー130は、次のエントリを選択するために812ステップに戻って繰り返す。処理するエントリがない場合(例えば、メタデータの全てのエントリが処理された後)、820ステップで、メモリコントローラー130は、このような全てのエントリを削除するために書き込みグループテーブルのエントリに対してループを開始する(全てのデータが不揮発性メモリ120にフラッシュされたため)。特に、822ステップで、メモリコントローラー130は、例えばL1WGTのヘッド及びテールを同じ値に設定することで(例えば、全て0に設定)、現在の書き込みグループに対するバッファを空ける。824ステップで、メモリコントローラー130は、バッファを空ける書き込みグループが更にあるか否かを判断する。バッファを空ける書き込みグループがある場合、メモリコントローラーは、次の書き込みグループを選択するために820ステップに戻って繰り返す。エントリがもういない場合(例えば、全ての書き込みグループのバッファが空けられた後)、FLUSHコマンドの実行は終了する。
【0085】
このように、本実施形態は、揮発性メモリ110に格納されたデータのパーシスト状態に対する情報を格納するメタデータ及び各書き込みグループに関連するキャッシュラインアドレスに対する情報を格納する書き込みグループテーブルの使用を通じて、JEDEC NVDIMM-PスペックのPWRITE及びFLUSHコマンドの効率的な実行を可能にする。従って、書き込みグループに関連するデータの識別を含むコマンドの実行を加速化でき、オーバーヘッドを減少させる。
【0086】
いくつかの実施形態は、書き込みグループテーブルが一致しないようにすることを引き起こすレース(Race)条件の防止に関する。いくつかの実施形態で、メモリコントローラー130は同時に多数のコマンドを処理する。しかし、2つの書き込みが同時に行われた場合、書き込みグループテーブルは、書き込み動作の多様な部分が実行される場合の特定順に依存して、実際のデータと一致しない状態で維持される。このような、いくつかのレース条件は、メモリコントローラー130がライトバック動作640を行う間、揮発性メモリ110を閉じることで(例えば、書き込みコマンドを待機させることで)防止される。このように、いくつかの実施形態において、メモリコントローラー130は、データを揮発性メモリ110から不揮発性メモリ120に移動させ、データが不揮発性メモリ120に移動されたことを指すメタデータをアップデートするライトバック動作640(例えば、
図6Bに示した通り)を行う間、ライトバック動作640が完了するまで、他の全ての書き込みコマンド(例えば、XWRITE及びPWRITEコマンド)を遅延させる。
【0087】
一実施形態において、メモリコントローラー130は、ライトバック動作640を行う間、他のコマンド(例えば、読み込みコマンド又は書き込みではない他のコマンド)に応答することを持続する。ホストプロセッサ200から受信された全てのコマンドは、実行されるまでにメモリコントローラー130のコマンドキューに格納される。通常的な条件の下で、メモリコントローラー130は、コマンドバッファで最も先に受信されたコマンドを先に実行する先入先出(FIFO)方式によってコマンドを実行する。しかし、ライトバック動作の間、揮発性メモリのロックを実行するために、メモリコントローラー130は、ライトバック動作の間、コマンドバッファから単に書き込みではないコマンド(例えば、読み込みコマンド)のみを実行する。ライトバック動作が完了した後、メモリコントローラー130は、ライトバック動作の間、実行されなかったコマンドバッファにある任意の書き込みコマンドを実行する。
【0088】
他の実施形態は、特定の書き込みグループに対するバッファがフルである場合(例えば、第2書き込みグループテーブルの行がフルである場合)又はフラグメンテーション(例えば、多くの書き込みグループが使用中であるが、第2書き込みグループテーブル(L2WGT)で、いくつかの書き込みグループは、開けられた多数のスロット(Slots)を有する)によって書き込みグループテーブルが埋まることで、特定の書き込みグループに関連するキャッシュラインを不揮発性メモリ120に予めフラッシュすること(又はガベージコレクション(Garbage Collecting))に関する。例えば、これは、WGIDに関連するバッファがフルである場合、Flush(wgid)を実行することで誘発される。より詳しくは、いくつかの実施形態において、メモリコントローラー130は、バッファがフルになるや否やバッファをフラッシュするように構成される。例えば、エントリをバッファに追加して、第1書き込みグループテーブル(L1WGT)がテールの新たな位置を識別するようにアップデートした後にテールがヘッドのすぐ前に位置する場合(例えば、(Tail+1) % ring_buf_size == Head)、バッファはフルになる。この場合、フルになったバッファを不揮発性メモリ120にフラッシュするためにFlush(wgid)動作600は直ちに誘発される。いくつかの実施形態において、メモリコントローラー130は、第1書き込みグループテーブル(L1WGT)のエントリに対して、繰り返して且つフルになったバッファが検索された場合、関連するバッファをフラッシュすることでフルになったバッファ(例えば、(Tail+1) % ring_buf_size == Head)があるか否かを周期的に判断する。このような実施形態において、PWRTIEコマンドはメモリコントローラー130が新たなエントリを既にフルになったバッファに記録するように試みることを引き起こす。この場合、メモリコントローラー130は、新たな書き込みを記録する前に、先ずバッファをフラッシュする(バッファを空けるために)。
【0089】
<L0WGTを有する書き込みグループテーブルの拡張>
【0090】
上述した実施形態において、各書き込みグループに対するバッファは同じ大きさであった。他の実施形態によると、バッファの大きさにおいて、柔軟性を増加させるために、第2書き込みグループテーブル(L2WGT)の第0以上の行は、任意の与えられた書き込みグループに割り当てられる。このように、特定の書き込みグループに関連するエントリの個数は、第2書き込みグループテーブル(L2WGT)の任意に与えられた行の個数(例えば、
図3Bに示した通り、65個のエントリ)よりも大きくなる。
【0091】
一実施形態は、第0書き込みグループテーブル(L0WGT)を含む。一実施形態において、第0書き込みグループテーブル(L0WGT)は、速やかなアクセスを提供するために、スタティックランダムアクセスメモリ(SRAM)に格納される。第0書き込みグループテーブル(L0WGT)は、書き込みグループ識別子(WGID)によって索引される。各書き込みグループ識別子(WGID)は、第1及び/又は第2書き込みグループテーブル(L1WGT及びL2WGT)のどの行が当該WGIDにマッピングされるかを示すビットマップ(Bitmap)に関連する。
【0092】
図9は、本発明の一実施形態による第0書き込みグループテーブル(L0WGT)902、第1書き込みグループテーブル(L1WGT)904、及び第2書き込みグループテーブル906(L2WGT)の構成図である。例えば、ビットマップの各位置は、第1及び第2書き込みグループテーブル(L1WGT及びL2WGT)の異なる行に対応する。
図9に示す例において、WGID[0]はビットマップ64b1100_…_000(「_…_」は、0に設定された間のビットを指す)に関連し、第0及び第1位置の2つの1は、行0及び1がWGID[0]にマッピングされたことを示す。他の例として、WGID[1]は、行2がWGID[1]にマッピングされたことを示すビットマップ64b0010_…_0000に関連する。第3の例として、WGID[2]は、最後の行(行63)がWGID[2]にマッピングされたことを示すビットマップ64b0000_…._0001に関連する。第4の例として、WGID[63]は、WGID[63]にマッピングされた行がないことを示すビットマップ64b0000_…_0000に関連する。
【0093】
一実施形態において、第1及び第2書き込みグループテーブルの各行は、最大でも1つの書き込みグループにマッピングされる(例えば、各行は正確に0個又は1個の書き込みグループにマッピングされ、2個以上の書き込みグループにマッピングされる行はない)。第1及び第2書き込みグループテーブル(L1WGT及びL2WGT)の行のうちの使用中の行を追跡するために、一実施形態において、グローバル(Global)ビットマップ908は、対応するグローバルビットマップ908の位置を1に設定することで、第1及び第2書き込みグループテーブル(904及び906)のどの行が書き込みグループに割り当てられたかを追跡するために使用される。書き込みグループに割り当てられない行は0に設定された対応するグローバルビットマップの位置を有する。
図9に示す例で、第0及び第1行はWGID[0]に割り当てられ、第2行はWGID[1]に割り当てられ、第63行はWGID[2]に割り当てられるため、グローバルビットマップは64b1110_…_0001の形態を有し、これは、ビット毎の排他的論理和(XOR)又は全ての個々のビットマップの総和でもある。
【0094】
いくつかの実施形態は、
図9に示す通り、第0書き込みグループテーブル(L0WGT)を使用するために調整されたレコード及びフラッシュ動作の修正されたバージョンに関する。
【0095】
より詳しくは、第0書き込みグループテーブル902を含む場合、Record関数は当該WGIDにマッピングされたリングバッファを検索するために、先ず第0書き込みグループテーブル(L0WGT)にアクセスする。このような各リングバッファのヘッド及びテールは、利用可能な空間を有するバッファを探すために確認される。全ての割り当てられたバッファがフルになると、追加バッファは、当該WGIDに割り当てられ(例えば、グローバルビットマップで割り当てられていない行を検索することにより)、当該WGIDに関連するビットマップを含む第0書き込みグループテーブル及びWGIDに対する行の割り当てを示すグローバルビットマップをアップデートする。
【0096】
図10は、本発明の一実施形態による第0書き込みグループテーブル、第1書き込みグループテーブル、及び第2書き込みグループテーブルを含むシステムにおける「レコード(Record)」動作の実行のフローチャートである。
図10に示す通り、レコード動作は、パラメータとして書き込みグループ識別子(WGID)及びアドレス(Address)を有する。1002ステップにおいて、メモリコントローラー130は、第0書き込みグループテーブル(L0WGT)で、与えられたWGIDに対応する行ビットマップを検索する。1004ステップで、メモリコントローラー130は、ビットマップの0ではない位置によって識別された通りに、書き込みグループに割り当てられた第1及び第2書き込みグループテーブルの行に対して繰り返すループを開始する。1006ステップで、メモリコントローラー130は、
図5に関して上述したRecord関数500と実質的に同じであるが、書き込みグループの代わりに行番号を扱うように調整されたRecord関数を用いて、与えられたアドレスを、割り当てられた行の現在の行に記録することを試みる。
図5に示した通り、Record関数500はブーリアン値(例えば、真又は偽)を返す(ここで、真はレコード動作の成功を示し、偽はレコード動作の失敗を示す)。レコード動作が成功した場合(例えば、アドレスが現在の行に記録された場合)、追加の装置を必要とせず、メモリコントローラー130は、1008ステップで、レコード動作の成功を示す真を返す。
【0097】
しかし、レコード動作が失敗した場合(例えば、行がフルのため)、メモリコントローラー130は、1010ステップで、考慮すべき更に割り当てられた行があるか否かを判断する。割り当てられた行がある場合、メモリコントローラー130は、次の行を選択し、再びレコードを試みるために1004ステップに戻る。このように、Record関数500は特定された書き込みグループ識別子(WGID)に関連する第2書き込みグループテーブル(L2WGT)のバッファのうちの1つが、与えられたアドレスに対して利用可能な空間を有するか否かを判断し、バッファのうちの1つが利用可能な空間を有すると判断した場合、与えられたアドレスを、識別されたバッファに記録(格納)する。
【0098】
しかし、試みるための更に割り当てられた行がない場合(例えば、割り当てられた全ての行がフルであるか又は割り当てられた行がない場合)、メモリコントローラーは、利用可能な空間を有する割り当てられた行がないと判断する。このように、1012ステップで、メモリコントローラー130は、グローバルビットマップを確認することで、任意の割り当てられない行があるか否かを判断する。任意の割り当てられない行がない場合、レコード動作は失敗し、1014ステップで、メモリコントローラー130は、偽を返す。しかし、少なくとも1つの利用可能な行がある場合(例えば、グローバルビットマップで0によって識別された通り、任意の書き込みグループにまだ割り当てられない行又はバッファがある場合)、1016ステップで、メモリコントローラー130は、このような利用可能な行の1つ(例えば、最も低い番号を有する行又はバッファ)を「new_row」として選択する。1018ステップで、メモリコントローラー130は、選択された行に対応するビットを1に設定することで、現在の書き込みグループに対する行ビットマップをアップデートする。従って、選択された行(「new_row」)が書き込みグループに割り当てられる。1020ステップで、メモリコントローラー130は、選択された行に対応するグローバルビットマップの位置を1にアップデートすることで、選択された行が使用中であることを示す。1022ステップで、メモリコントローラー130は、実質的に同一のRecord関数500を使用してアドレスを選択された行に記録し、結果を返す。
【0099】
同様に、第0書き込みグループテーブル(L0WGT)に対してFlush(WGID)関数を実行する場合、メモリコントローラー130は、当該WGIDに割り当てられたバッファを探すために、先ずL0WGTにアクセスして、各値に対するライトバック動作を行うためにこれらのバッファの各々に格納された値を繰り返す。なお、メモリコントローラー130は、書き込みグループから書き込みグループテーブルの空き行の割り当てを解除するためにバッファの割り当てが解除される場合(例えば、フラッシュ動作によって、バッファが空けられる場合)第0書き込みグループテーブル(L0WGT)をアップデートする(例えば、フラッシュされたWGIDに対するビットマップとグローバルビットマップとの間のビット毎のXORを行い、フラッシュされたWGIDに対する全てのビットマップのビットを0に設定することでアップデートされる)。
【0100】
図11は、本発明の一実施形態による第0書き込みグループテーブル、第1書き込みグループテーブル、及び第2書き込みグループテーブルを含むシステムにおける「フラッシュ(Flush)」動作の実行のフローチャートである。1102ステップにおいて、メモリコントローラー130は、第0書き込みグループテーブル(L0WGT)で、与えられたWGIDに対応する行ビットマップを検索する。1104ステップで、メモリコントローラー130は、ビットマップの0ではない位置によって識別された通りに、書き込みグループに割り当てられた第1及び第2書き込みグループテーブルの行に対して繰り返すループを開始する。1106ステップで、メモリコントローラー130は、書き込みグループに割り当てられた現在の行に対してフラッシュ動作を行う。フラッシュ動作は、
図6Aに示したフラッシュ動作600の若干修正されたバージョンであり、フラッシュは、パラメータとして書き込みグループ識別子(WGID)によって行番号を取得する。1108ステップで、メモリコントローラー130は、処理される任意の追加行があるか否かを判断する。追加行がある場合、メモリコントローラー130は、書き込みグループに割り当てられた次の行を選択するために1104ステップに戻る。追加行がない場合、メモリコントローラー130は、現在の書き込みグループで、前に現在の書き込みグループに割り当てられた行を今回利用可能なものとして示すために、グローバルビットマップをアップデートする。1112ステップで、書き込みグループのフラッシュが完了した後、メモリコントローラー130は、現在の書き込みグループに割り当てられた行がないことを示すために、第0書き込みグループテーブル(L0WGT)で、現在の書き込みグループの行ビットマップの全てのビットを0に設定する。
【0101】
このように、本実施形態は、特定された書き込みグループを有するNVDIMM-Pモジュールに書き込まれたデータを関連付けて、与えられた特定の書き込みグループにマッチングするデータに対して、全ての揮発性メモリをスキャンすることを避け、不揮発性メモリにデータが既に書き込まれた場合に、不揮発性メモリにデータが重複してフラッシュさせることを避けることで、書き込みグループによって揮発性メモリから不揮発性メモリにデータをフラッシュする性能を向上させるためのシステム及び方法に関する。
【0102】
特に定義しない限り、本明細書で使用した全ての用語(技術用語及び科学用語を含む)は、本発明が属する技術分野の当業者にとって一般的に理解されるものと同じ意味を持つ。なお、一般的に使用される辞典で定義された用語と同じ用語は、関連技術及び/又は本明細書に関連してその意味と一致する意味を持つものと解釈されるべきであり、理想的であるか又は極めて形式的な意味として解釈されるべきではない。
【0103】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、、本発明の技術範囲から逸脱しない範囲で多様に変更実施することが可能である。
【符号の説明】
【0104】
100 NVDIMM-P
110 揮発性メモリ
112 キャッシュされたデータ
114 キャッシュメタデータ
116 L2読み込み/書き込みキャッシュ
118 L3書き込みバッファ
120 不揮発性メモリ
130 メモリコントローラー
132 ホストレイヤー
134 ロジックコア
134c キャッシュコントローラー
134d 揮発性メモリコントローラー
134h ホストレイヤーに対するインターフェース
134L1 L1プリフェッチ(Prefetch)バッファ
134m メディアレイヤーに対するインターフェース
134md メタデータキャッシュ
134p プリフェッチャー(Prefetcher)
134s SRAM
136 メディアレイヤー
200 ホストプロセッサ
250 バス
304、904 第1書き込みグループテーブル(L1WGT)
306、906 第2書き込みグループテーブル(L2WGT)
402、404 L1WGTの位置
406 テール(Entry[1])に対応する位置
408 テール(Entry[2])に対応する位置
500 レコード動作、Record関数
600 フラッシュ動作
640 ライトバック動作
902 第0書き込みグループテーブル(L0WGT)
908 グローバルビットマップ