IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022050016
(43)【公開日】2022-03-30
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/06 20060101AFI20220323BHJP
   G06F 12/00 20060101ALI20220323BHJP
【FI】
G06F12/06 515H
G06F12/00 597U
【審査請求】未請求
【請求項の数】42
【出願形態】OL
(21)【出願番号】P 2020156369
(22)【出願日】2020-09-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】齊藤 貴樹
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160AA08
5B160AA14
5B160AB26
(57)【要約】
【課題】書き込み性能を向上させることが可能なメモリシステムを提供することにある。
【解決手段】実施形態に係るメモリシステムにおいて、コントローラは、不揮発性メモリに書き込むべきデータ及び論理アドレスが指定された書き込みコマンドがホストから受信された場合に、コントローラの内部状態または不揮発性メモリの状態に基づいてデータの書き込み方式を決定し、第1方式が決定された場合、第1方式でデータを不揮発性メモリの第1メモリ領域に書き込み、第2方式が決定された場合、第2方式でデータを不揮発性メモリの第2メモリ領域に書き込む。第1方式は、書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスにデータを書き込む書き込み方式である。第2方式は、論理アドレスとは関係なくデータの書き込み先としてコントローラによって指定されている物理アドレスにデータを書き込む書き込み方式である。
【選択図】図21
【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムにおいて、
不揮発性メモリと、
前記不揮発性メモリを制御するコントローラと
を具備し、
前記不揮発性メモリは、第1及び第2メモリ領域を有し、
前記コントローラは、
前記不揮発性メモリに書き込むべきデータ及び前記ホストが前記データにアクセスするための論理アドレスが指定された書き込みコマンドが前記ホストから受信された場合に、前記コントローラの内部状態または前記不揮発性メモリの状態に基づいて前記データを書き込む書き込み方式を決定し、
前記書き込み方式として第1方式が決定された場合、前記第1方式で前記データを前記第1メモリ領域に書き込み、
前記書き込み方式として第2方式が決定された場合、前記第2方式で前記データを前記第2メモリ領域に書き込む
ように構成されており、
前記第1方式は、前記データが前記第2メモリ領域に書き込まれる時点で前記書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスに前記データを書き込む書き込み方式であり、
前記第2方式は、前記データが前記第2メモリ領域に書き込まれる時点で前記論理アドレスとは関係なく前記データの書き込み先として前記コントローラによって指定されている物理アドレスに前記データを書き込む書き込み方式である
メモリシステム。
【請求項2】
前記コントローラは、前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記第1メモリ領域内の物理アドレスとの対応関係を第1アドレス変換データを用いて管理し、前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を第2アドレス変換データを用いて管理する請求項1記載のメモリシステム。
【請求項3】
前記第1アドレス変換データにおいて管理される対応関係は、第1管理単位で管理され、
前記第2アドレス変換データにおいて管理される対応関係は、前記第1管理単位よりも小さい第2管理単位で管理される
請求項2記載のメモリシステム。
【請求項4】
前記第2管理単位は、前記ホストの前記メモリシステムに対するアクセス単位に基づいて定められる請求項3記載のメモリシステム。
【請求項5】
前記不揮発性メモリは、前記不揮発性メモリの外部から並列してアクセスされる単位で区画される複数のバンクを有し、
前記第1及び第2メモリ領域の各々は、前記複数のバンクに跨って確保されている
請求項1~4のいずれか一項に記載のメモリシステム。
【請求項6】
前記不揮発性メモリは、複数の不揮発性メモリチップを備え、
前記第2メモリ領域は、前記第1メモリ領域とは異なる不揮発性メモリチップに確保されている
請求項1~5のいずれか一項に記載のメモリシステム。
【請求項7】
前記第2メモリ領域は、前記物理アドレスにデータが書き込まれた回数に基づいて前記論理アドレスと前記物理アドレスとの対応関係を変更するウェアレベリング処理を実行する単位に基づいて定められる請求項1~6のいずれか一項に記載のメモリシステム。
【請求項8】
前記コントローラは、前記第2メモリ領域内の前記データの書き込み先として前記コントローラによって指定されている物理アドレスをリングバッファ方式で管理する請求項1~7のいずれか一項に記載のメモリシステム。
【請求項9】
前記コントローラは、前記不揮発性メモリの外部から並列してアクセスされる単位で区画されるバンク内に1以上の前記第2メモリ領域を設け、前記第2メモリ領域の各々の前記データの書き込み先として前記コントローラによって指定されている物理アドレスをそれぞれリングバッファ方式で管理する請求項8記載のメモリシステム。
【請求項10】
前記第1メモリ領域及び前記第2メモリ領域は、前記不揮発性メモリの外部から並列してアクセスされる単位で区画されるバンクを有し、
前記コントローラは、前記書き込みコマンドにおいて指定されているデータを前記第2メモリ領域に書き込む場合、前記データが書き込まれる前記第1メモリ領域のバンクとは異なるバンクを、書き込み先として選択する
請求項1~9のいずれか一項に記載のメモリシステム。
【請求項11】
前記コントローラは、前記書き込みコマンドにおいて指定されているデータを前記第1メモリ領域に書き込む際にリードモディファイライト処理を実行する必要がある場合、前記書き込み方式として第2方式を決定する請求項1~10のいずれか一項に記載のメモリシステム。
【請求項12】
前記コントローラは、所定時間内に書き込みコマンドが発生する回数が予め定められている値未満である場合、前記書き込み方式として第1方式を決定する請求項1~10のいずれか一項に記載のメモリシステム。
【請求項13】
前記コントローラは、前記書き込みコマンドにおいて指定されているデータが書き込まれる前記第1メモリ領域がビジー状態にある場合、前記書き込み方式として第2方式を決定する請求項1~10のいずれか一項に記載のメモリシステム。
【請求項14】
前記コントローラは、前記書き込みコマンドにおいて指定されている論理アドレスが近い過去に他の書き込みコマンドにおいて指定されている場合、前記書き込み方式として第2方式を決定する請求項1~10のいずれか一項に記載のメモリシステム。
【請求項15】
前記コントローラは、
前記ホストが前記メモリシステムにアクセスする際に使用した論理アドレスと前記第1メモリ領域内の物理アドレスとの対応関係を管理するための第1アドレス変換データの一部をキャッシュし、
前記書き込みコマンドにおいて指定されている論理アドレスがキャッシュミスと判定された場合、前記書き込み方式として第2方式を決定する
請求項1~10のいずれか一項に記載のメモリシステム。
【請求項16】
前記コントローラは、
前記書き込みコマンドにおいて指定されているデータをバッファ領域に格納し、
前記バッファ領域に格納されているデータが前記第1または第2メモリ領域に書き込まれる前に前記メモリシステムが電源から遮断されたことが検知された場合、前記バッファ領域に格納されているデータを前記第2方式で前記第2メモリ領域に書き込む
請求項1~15のいずれか一項に記載のメモリシステム。
【請求項17】
前記コントローラは、
前記第2メモリ領域内のデータの書き込みまたは読み出しができない不良領域の位置を管理し、
前記書き込みコマンドにおいて指定されているデータを前記第2メモリ領域に書き込む場合、前記不良領域を回避する
請求項1~16のいずれか一項に記載のメモリシステム。
【請求項18】
前記コントローラは、前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係が管理される第2管理単位のデータを複数パッキングして誤り訂正用のパリティを生成するECC回路を含む請求項1~17のいずれか一項に記載のメモリシステム。
【請求項19】
前記コントローラは、前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係が管理される第2管理単位のデータ毎に誤り訂正用のパリティを生成するECC回路を含む請求項1~17のいずれか一項に記載のメモリシステム。
【請求項20】
前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係は、セットアソシアティブ方式で管理される請求項1~19のいずれか一項に記載のメモリシステム。
【請求項21】
前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係は、リスト方式で管理される請求項1~19のいずれか一項に記載のメモリシステム。
【請求項22】
前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記第1メモリ領域内の物理アドレスとの対応関係が同一の管理単位として管理される複数のデータが格納される第2メモリ領域内の物理アドレスと前記論理アドレスとの対応関係は、同一のインデックスに対応づけて管理される請求項20または21記載のメモリシステム。
【請求項23】
前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係は、前記論理アドレスを用いて計算されるハッシュ値を用いて管理される請求項20~22のいずれか一項に記載のメモリシステム。
【請求項24】
前記コントローラは、前記不揮発性メモリから読み出すべきデータにアクセスするための論理アドレスが指定された読み出しコマンドが前記ホストから受信された場合、前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を管理するための第2アドレス変換データを参照して、前記読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得する請求項20または21に記載のメモリシステム。
【請求項25】
前記コントローラは、前記第2アドレス変換データを参照して前記読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得することができない場合、前記論理アドレスと前記第1メモリ領域内の物理アドレスとの対応関係を管理するための第1アドレス変換データを参照して、前記読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得する請求項24記載のメモリシステム。
【請求項26】
前記コントローラは、
前記論理アドレスと前記第1メモリ領域内の物理アドレスとの対応関係を管理する第1アドレス変換データ及び前記第2アドレス変換データを並列に参照し、
前記読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスが前記第2アドレス変換データにおいて管理されている場合、前記第2アドレス変換データから前記物理アドレスを取得し、
前記読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスが前記第2アドレス変換データにおいて管理されていない場合、前記第1アドレス変換データから前記物理アドレスを取得する
請求項24記載のメモリシステム。
【請求項27】
前記コントローラは、前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す請求項1~26のいずれか一項に記載のメモリシステム。
【請求項28】
前記コントローラは、前記第2メモリ領域に書き込まれたデータのうち有効なデータを前記第1メモリ領域に書き戻す請求項27記載のメモリシステム。
【請求項29】
前記コントローラは、前記第2メモリ領域に書き込まれているデータが前記第1メモリ領域に書き戻される場合、前記不揮発性メモリの外部から並列してアクセスされる単位で区画されるバンクに書き込まれている有効なデータの数または前記バンク内に設けられるリンクバッファで管理されている有効なデータの数に基づいて前記第1メモリ領域に書き戻されるデータを選択する請求項27または28記載のメモリシステム。
【請求項30】
前記コントローラは、前記第1メモリ領域に対して実行されるパトロール・リフレッシュ処理時に前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す請求項27~29のいずれか一項に記載のメモリシステム。
【請求項31】
前記コントローラは、前記不揮発性メモリからデータを読み出すための読み出しコマンドが前記ホストから受信された場合に前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す請求項27~30のいずれか一項に記載のメモリシステム。
【請求項32】
前記コントローラは、前記物理アドレスにデータが書き込まれた回数に基づいて前記論理アドレスと前記物理アドレスとの対応関係を変更するウェアレベリング処理時に前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す請求項27~31のいずれか一項に記載のメモリシステム。
【請求項33】
前記コントローラは、前記メモリシステムの再起動時に、前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す請求項27~32のいずれか一項に記載のメモリシステム。
【請求項34】
前記コントローラは、
前記書き込みコマンドにおいて指定されているデータをバッファ領域に格納し、
前記バッファ領域に格納されているデータが前記第2メモリ領域に書き込まれた場合、前記データが前記バッファ領域に格納されている状態を維持し、
前記第2メモリ領域に書き込まれたデータを前記第1メモリ領域に書き戻す場合、前記バッファ領域に格納されているデータを前記第1メモリ領域に書き込む
請求項27~33のいずれか一項に記載のメモリシステム。
【請求項35】
前記コントローラは、前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を管理する第2アドレス変換データを更新する際に、前記更新に関する更新ログを生成して前記不揮発性メモリに書き込む請求項1~34のいずれか一項に記載のメモリシステム。
【請求項36】
前記コントローラは、前記不揮発性メモリ内に前記第2アドレス変換データの一部毎に前記更新ログの格納領域を設け、前記第2アドレス変換データの一部を更新したときに生成された更新ログを、前記第2アドレス変換データの一部に対応する格納領域に書き込む請求項35記載のメモリシステム。
【請求項37】
前記コントローラは、前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を管理する第2アドレス変換データの少なくとも更新された一部を前記不揮発性メモリに書き込む請求項1~36のいずれか一項に記載のメモリシステム。
【請求項38】
前記コントローラは、前記第2アドレス変換データの更新された一部が前記不揮発性メモリに書き込まれた後、前記不揮発性メモリに書き込まれた前記更新された一部に関する更新ログを破棄する請求項37記載のメモリシステム。
【請求項39】
前記コントローラは、前記メモリシステムの再起動時に、前記ホストが前記メモリシステムにアクセスする際に使用する論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を管理する第2アドレス変換データ及び前記第2アドレス変換データの一部を更新したときに生成された更新ログを前記不揮発性メモリから読み出し、前記更新ログに基づいて前記第2アドレス変換データを更新する請求項1~38のいずれか一項に記載のメモリシステム。
【請求項40】
前記コントローラは、
前記論理アドレスと前記第2メモリ領域内の物理アドレスとの対応関係を第2アドレス変換データを用いて管理し、
前記第2メモリ領域に書き込まれているデータと同一の論理アドレスのデータが前記第1メモリ領域または前記第2メモリ領域に書き込まれた場合、前記第2アドレス変換データにおいて管理されている前記論理アドレス及び前記第2メモリ領域内の物理アドレスとの対応関係を無効化する
請求項1~39のいずれか一項に記載のメモリシステム。
【請求項41】
前記第2メモリ領域のサイズは前記メモリシステムの外部から指定される請求項1~40のいずれか一項に記載のメモリシステム。
【請求項42】
前記外部から指定可能である前記第2メモリ領域のサイズは、パーティションまたはネームスペース毎に指定される請求項41記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【0002】
近年では、ストレージクラスメモリ(以下、SCMと表記)と称される不揮発性メモリを備えるメモリシステム(SCMモジュール)を備えるコンピュータシステムが知られている。
【0003】
このようなメモリシステムは、DRAM(Dynamic Random Access Memory)等のメインメモリ(主記憶装置)とSSD(Solid State Drive)等のストレージ装置との中間的な性質を有するため、メインメモリとして用いることも可能であるし、ストレージ装置として用いることも可能である。
【0004】
しかしながら、SCMはCPUによって指定されたアドレスに基づいて不連続な順序でデータを書き込むランダムライト(Random Write)時のレイテンシが長く、当該SCMに対する書き込み性能を向上させることが求められている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2018-156263号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
そこで、本発明が解決しようとする課題は、書き込み性能を向上させることが可能なメモリシステムを提供することにある。
【課題を解決するための手段】
【0007】
実施形態によれば、ホストに接続可能なメモリシステムが提供される。前記メモリシステムは、不揮発性メモリと、前記不揮発性メモリを制御するコントローラとを具備する。前記不揮発性メモリは、第1及び第2メモリ領域を有する。前記コントローラは、前記不揮発性メモリに書き込むべきデータ及び前記ホストが前記データにアクセスするための論理アドレスが指定された書き込みコマンドが前記ホストから受信された場合に、前記コントローラの内部状態または前記不揮発性メモリの状態に基づいて、前記データを書き込む書き込み方式を決定し、前記書き込み方式として第1方式が決定された場合、前記第1方式で前記データを前記第1メモリ領域に書き込み、前記書き込み方式として第2方式が決定された場合、前記第2方式で前記データを前記第2メモリ領域に書き込むように構成されている。前記第1方式は、前記データが前記第1メモリ領域に書き込まれる時点で前記書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスに前記データを書き込む書き込み方式である。前記第2方式は、前記データが前記第2メモリ領域に書き込まれる時点で前記論理アドレスとは関係なく前記データの書き込み先として前記コントローラによって指定されている物理アドレスに前記データを書き込む書き込み方式である。
【図面の簡単な説明】
【0008】
図1】実施形態に係るメモリシステムを備えるコンピュータシステムの構成の一例を示す図。
図2】実施形態の比較例におけるSCMモジュールの構成の一例を示すブロック図。
図3】実施形態の比較例におけるSCMの内部構造の一例について説明するための図。
図4】実施形態の比較例におけるアドレス変換テーブルについて説明するための図。
図5】実施形態の比較例において論理アドレスの上位ビットをインデックスとして用いることを示す図。
図6】実施形態の比較例においてSCMに格納されるデータのデータ構造について説明するための図。
図7】実施形態の比較例においてSCMに格納されるデータの物理的な配置の一例を示す図。
図8】実施形態の比較例における第1バッファ管理テーブルの一例を示す図。
図9】実施形態の比較例における第2バッファ管理テーブルの一例を示す図。
図10】実施形態の比較例に係るSCMモジュールの処理手順の一例を示すフローチャート。
図11】実施形態の比較例における書き込み処理の処理手順の一例を示すフローチャート。
図12】実施形態の比較例におけるバッファ管理処理の処理手順の一例を示すフローチャート。
図13】実施形態の比較例における不揮発化処理の処理手順の一例を示すフローチャート。
図14】実施形態の比較例における読み出し処理の処理手順の一例を示すフローチャート。
図15】実施形態の比較例における書き込み回数管理テーブルの一例を示す図。
図16】実施形態の比較例におけるウェアレベリング処理の概要について説明するための図。
図17】実施形態の比較例におけるウェアレベリング処理の処理手順の一例を示すフローチャート。
図18】実施形態の比較例におけるパトロール・リフレッシュ処理の処理手順の一例を示すフローチャート。
図19】実施形態の比較例における電源断検知処理の処理手順の一例を示すフローチャート。
図20】実施形態の比較例に係るSCMモジュールの動作の概要を示す図。
図21】実施形態に係るSCMモジュールの動作の概要を示す図。
図22】実施形態に係るSCMモジュールの構成の一例を示すブロック図。
図23】実施形態におけるSCMの内部構造の一例について説明するための図。
図24】実施形態における第2メモリ領域の空き領域の管理について具体的に説明するための図。
図25】実施形態における空き領域管理テーブルの一例を示す図。
図26】実施形態における第2アドレス変換テーブルの一例を示す図。
図27】実施形態において論理アドレスの下位ビットをインデックス、上位ビットをタグとして用いることを示す図。
図28】実施形態における書き込み処理の処理手順の一例を示すフローチャート。
図29】実施形態における書き込み先選択処理の処理手順の一例を示すフローチャート。
図30】実施形態における第2メモリ領域に対する不揮発化処理の処理手順の一例を示すフローチャート。
図31】実施形態における書き戻し処理の処理手順の一例を示すフローチャート。
図32】実施形態における第2アドレス変換テーブルを不揮発化する処理の処理手順の一例を示すフローチャート。
図33】実施形態におけるテーブル更新ログの管理方式について説明するための図。
図34】実施形態におけるテーブル更新ログを用いた第2アドレス変換テーブルの更新の概要を示す図。
図35】実施形態におけるウェアレベリング処理の処理手順の一例を示すフローチャート。
図36】実施形態におけるパトロール・リフレッシュ処理の処理手順の一例を示すフローチャート。
図37】実施形態における電源断検知処理の処理手順の一例を示すフローチャート。
図38】実施形態におけるSCMの内部構造の別の例について説明するための図。
図39】実施形態におけるHeadポインタ及びTailポインタについて説明するための図。
図40】実施形態におけるチャンク管理テーブルの一例を示す図。
図41】実施形態におけるSCMの内部構造の更に別の例について説明するための図。
図42】実施形態におけるチャンク管理テーブルの別の例を示す図。
図43】実施形態における第2メモリ領域の空き領域の管理方式の別の例について説明するための図。
図44】実施形態における空き領域管理テーブルの別の例を示す図。
図45】実施形態に係るSCMモジュールの構成の別の例を示すブロック図。
図46】実施形態において第2メモリ領域を確保するためのSCMチップを追加する構成について説明するための図。
図47】64Byteのデータ毎にECCパリティを生成する構成について説明するための図。
図48】実施形態において論理アドレスの上位ビット及び下位ビットをタグとして用い、タグとして用いる以外の部分をインデックスとして用いることを示す図。
図49】実施形態における第2アドレス変換テーブルの別の例を示す図。
図50】実施形態における第2アドレス変換テーブルの更に別の例を示す図。
図51】実施形態における第2アドレス変換テーブルの更に別の例を示す図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態について説明する。
図1は、本実施形態に係るメモリシステムを備えるコンピュータシステムの構成の一例を示す。
【0010】
図1に示すように、コンピュータシステム1は、CPU10、DRAM20、SCMモジュール30、ストレージ装置40、アクセラレータ50及びネットワークインタフェース60等を備える。なお、本実施形態に係るメモリシステムは、図1に示すSCMモジュール30として実現されている。
【0011】
CPU10は、コンピュータシステム1全体の動作を制御し、例えばSCMモジュール30及びストレージ装置40等に対してホストとして動作する。なお、CPU10は、例えばパーソナルコンピュータ、サーバ装置、携帯電話、撮像装置、携帯端末(タブレットコンピュータまたはスマートフォン等)、ゲーム機器または車載端末(カーンナビゲーションシステム等)に搭載されていてもよい。なお、図1においては1つのCPU10のみが示されているが、当該CPU10は他の複数のCPUと接続されていてもよい。
【0012】
DRAM20は、CPU10とメモリバスを介して接続され、コンピュータシステム1においてメインメモリとして用いられる。
【0013】
SCMモジュール30は、ストレージクラスメモリ(SCM)と称される不揮発性メモリを備えるメモリシステムである。SCMモジュール30は、DRAM20とストレージ装置40との中間的な性能を有する。具体的には、SCMモジュール30の記憶容量はDRAMよりも大きく、SCMモジュール30に対するアクセス速度はストレージ装置40よりも高速である。また、SCMモジュール30は、DRAM20とは異なり不揮発性を有する。このような性能を有することから、SCMモジュール30は、メインメモリとして使用することも可能であるし、補助記憶装置として使用することも可能である。図1において、SCMモジュール30は、メモリバスを介してCPU10と接続されているが、例えば他のバス、スイッチまたはネットワークを介してCPU10と接続されていてもよい。
【0014】
本実施形態においては、CPU10からSCMモジュール30に対して書き込みコマンド(ライト要求)及び読み出しコマンド(リード要求)等が発行されるが、当該CPU10からのSCMモジュール30に対するアクセス単位は64Byteとする。なお、SCMモジュール30の構成の詳細については後述する。
【0015】
ストレージ装置40は、例えばSSDとして実現される補助記憶装置であり、CPU10とPCI Expressバス等を介して接続される。
【0016】
アクセラレータ50は、コンピュータシステム1における処理速度を向上(加速)させる機器である。
【0017】
ネットワークインタフェース60は、ネットワークを介してコンピュータシステム1が外部の機器等と通信を実行するためのインタフェースである。
【0018】
なお、図1に示すコンピュータシステム1の構成は一例であり、当該コンピュータシステム1は、少なくとも一部の構成要素が省略されていてもよいし、他の構成要素が追加されていてもよい。
【0019】
以下、本実施形態に係るSCMモジュール(メモリシステム)30について説明する前に、本実施形態の比較例に係るSCMモジュールについて説明する。
【0020】
図2は、本実施形態の比較例に係るSCMモジュール(メモリシステム)30´の構成の一例を示すブロック図である。
【0021】
図2に示すように、SCMモジュール30´は、SCMコントローラ31´、SCM32´及びDRAM33´を備える。
【0022】
SCMコントローラ31´は、CPUインタフェース(I/F)311´、制御部312´、データ転送部313´、バッファ314´、バッファ管理部315´、アドレス変換部316´、ECCエンコーダ317´、ECCデコーダ318´、SCMインタフェース(I/F)319´及びDRAMインタフェース(I/F)320´を含む。
【0023】
なお、本実施形態の比較例におけるSCMコントローラ31´に含まれる機能部の全部または一部は、例えばハードウェアによって実現されてもよいし、ソフトウェアによって実現されてもよいし、ハードウェア及びソフトウェアの組み合わせ構成によって実現されてもよい。
【0024】
CPUインタフェース311´は、CPU10とSCMモジュール30´との間の通信を実行するように構成されたインタフェース回路である。具体的には、CPUインタフェース311´は、CPU10からの各種コマンドを受信する。CPU10からの各種コマンドには、上記した書き込みコマンド及び読み出しコマンド等が含まれる。
【0025】
制御部312´は、SCMモジュール30´の動作を司る機能を有する。制御部312´は、例えばCPU等を含み、DRAM33´にロードされた制御プログラム(ファームウェア)を実行する。制御部312´の動作は、この制御プログラムによって制御される。
【0026】
ここで、上記したCPUインタフェース311´によって書き込みコマンドが受信された場合には、当該書き込みコマンドに基づいてSCM32´にデータが書き込まれるが、データ転送部313´は、SCMインタフェース319´を介して当該データをSCM32´に転送する。また、CPUインタフェース311´によって読み出しコマンドが受信された場合には、当該読み出しコマンドに基づいてSCM32´からデータが読み出されるが、データ転送部313´は、CPUインタフェース311´を介して当該データをCPU10に転送する。
【0027】
なお、書き込みコマンドに基づいてSCM32´に書き込まれるデータ及び読み出しコマンドに基づいてSCM32´から読み出されたデータは、一時的にバッファ314´に格納(バッファ)される。本実施形態において、バッファ314´は、SCM32´と比較して高速なアクセスが可能な揮発性を有する記憶装置によって実現されているものとする。なお、バッファ314´は、DRAM33´によって実現されていてもよい。
【0028】
バッファ管理部315´は、バッファ314´が有する記憶領域(以下、バッファ領域と表記)の割り当て及び解放や当該バッファ314´に格納されたデータの管理等(以下、バッファ管理と表記)を行う。
【0029】
ここで、CPU10(ホスト)がSCMモジュール30´にアクセスする(データを書き込むまたは読み出す)際には論理アドレスが指定されるが、このようにCPU10によって指定される論理アドレス(つまり、CPU10がSCMモジュール30´にアクセスする際に使用する論理アドレス)と当該論理アドレスを使用してアクセスされるSCM32´内の物理的な位置を示す物理アドレスとの対応関係は、アドレス変換テーブルを用いて管理される。
【0030】
なお、本実施形態及び本実施形態の比較例において、「アドレス変換テーブル」とは、論理アドレスと物理アドレスとの対応関係を管理するためのデータであればよく、テーブル形式とは異なるデータ構造(ツリー構造等)を有していてもよい。本実施形態及び本実施形態の比較例においてテーブルと称される他のデータについても同様である。
【0031】
アドレス変換部316´は、例えば書き込み要求または読み出し要求においてCPU10によって指定されている論理アドレスを、アドレス変換テーブルを参照して物理アドレスに変換する。SCMモジュール30´においては、このようにアドレス変換部316´によって変換された物理アドレスに基づいてSCM32´にアクセスすることができる。
【0032】
なお、SCMセル(メモリセル)はデータの書き込みを繰り返すと疲弊する。このため、SCMモジュール30´の製品寿命を延ばすために、後述するウェアレベリング処理が実行される。この場合、論理アドレスと物理アドレスとの対応関係が変更されるがこのような対応関係の変更はアドレス変換テーブルにおいて管理される。
【0033】
ECCエンコーダ317´及びECCデコーダ318´は、データに含まれるエラーの検出及び訂正を行うためのECC(Error Correcting Code)回路を構成する。ECCエンコーダ317´は、SCM32´にデータが書き込まれる際に、当該データに対して誤り訂正用のパリティ(ECCパリティ)を生成する処理(ECCエンコード処理)を実行する。ECCデコーダ318´は、SCM32´からデータが読み出される際に、当該データに対して生成されたパリティに基づいて当該データに含まれるエラーを検出し、当該検出されたエラーを訂正する処理(ECCデコード処理)を実行する。
【0034】
また、例えばECCデコード処理による誤り訂正処理が失敗するような場合があり得るが、その場合における処理等については、本実施形態及び本実施形態の比較例においてはその詳しい説明を省略する。
【0035】
SCMインタフェース319´は、SCM32´を制御するように構成されたメモリ制御回路である。SCMコントローラ31´は、SCMインタフェース319´を介してSCM32´と電気的に接続される。
【0036】
DRAMインタフェース(I/F)320´は、DRAM33´を制御するように構成されたDRAM制御回路である。
【0037】
SCM32´は複数のSCMチップを備え、当該SCMチップの各々には複数のメモリセル(記憶素子)が含まれる。SCM32´は、2次元構造を有するSCMであってもよいし、3次元構造を有するSCMであってもよい。なお、本比較例においては、SCM32´は2次元構造を有するSCMであるものとして説明する。以下に説明する本実施形態においても同様である。
【0038】
ここで、図2に示す例において、SCM32´は、SCM0~SCM2s-1の2s個のSCMチップを備えている。この場合、SCMコントローラ31´にはs個のSCMインタフェース319´が含まれており、当該SCMインタフェース319´の各々にはそれぞれ2つのSCMチップが接続されている。
【0039】
なお、ここではSCM32´が複数のSCMチップを備える構成であるものとして説明したが、当該SCM32´は、複数のSCMパッケージを備える構成であってもよい。また、SCMチップまたはSCMパッケージは単数であってもよいが、本比較例等においては、複数のSCMチップ(SCMパッケージ)が並んで配置されているものとして説明する。
【0040】
DRAM33´は、揮発性メモリであり、例えばSCMコントローラ31´(制御部312´)において実行されるソフトウェアの一時的なバッファ等として用いられる。また、DRAM33´には、アドレス変換テーブルが格納(キャッシュ)されてもよい。この場合、DRAM33´にはアドレス変換テーブルの全体が格納されてもよいし、当該アドレス変換テーブルの一部が格納されてもよいが、本比較例等においては、便宜的に、アドレス変換テーブルの全体がDRAM33´に格納されるものとして説明する。なお、SCMモジュール30´は、DRAM33´の代わりにSRAM(Static Random Access Memory)等を備える構成であってもよい。
【0041】
また、SCMモジュール30´は、図2に示すように電源断検知部34´及びバッテリ35´を更に備えていてもよい。
【0042】
電源断検知部34´は、SCMモジュール30´が外部からの電源が遮断されたこと(以下、電源断と表記)を検知する。なお、電源断検知部34´によって検知される電源断には、予期せず、SCMモジュール30´が不正に電源から遮断されたこと(不正電源断)が含まれる。
【0043】
電源断検知部34´によって電源断が検知された場合、バッテリ35は、SCMモジュール30´に対して電力を供給する。これにより、SCMモジュール30´は、電源断が発生した場合であっても継続して動作することが可能となる。
【0044】
次に、図3を参照して、図2に示すSCM32´の内部構造の一例について説明する。図3においては、SCM32´に備えられる1つのSCMチップの内部構造について説明するが、他のSCMチップについても同様の内部構造を有している。
【0045】
SCM32´は、SCMコントローラ31´(SCM32´の外部)から並列してアクセスされる単位で区画される複数のBankを有する。図3に示す例では、SCM32´(1つのSCMチップ)は、Bank0~BankB-1を有している。
【0046】
また、SCM32´が有するBank0~BankB-1は、それぞれ複数のPage(ページ)に分割される。図3に示す例では、Bank0~BankB-1の各々は、それぞれP個のPage(Page0~P-1)に分割されている。
【0047】
このPageの中にはメモリセル(記憶素子)が含まれており、SCMモジュール30´(またはSCM32´)においては、このPage単位でデータが書き込まれる。なお、1つのPageに書き込むことが可能なデータのサイズは例えば8Byte、16Byteまたは32Byte等である。Page単位でデータを書き込む際には、SCMチップ番号、Bank番号(Bankを識別するための識別子)及びPage番号(Pageを識別するための識別子)が指定される。
【0048】
また、Page単位で書き込まれたデータにアクセスする際も同様に、SCMチップ番号、Bank番号(Bankを識別するための識別子)及びPage番号(Pageを識別するための識別子)が指定される。
【0049】
なお、上記したSCM32´においては、In-Place Update(Write)方式でデータを書き込むことができる。In-Place Update方式とは、所望のPageにデータを書き込むことが可能な方式であり、具体的には、例えば書き込みコマンドに基づくデータがSCM32´に書き込まれる時点で当該書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスに当該データを書き込む(上書きする)書き込み方式である。
【0050】
以下、図4を参照して、アドレス変換テーブルについて説明する。図4に示すように、アドレス変換テーブルにおいては、インデックスに対応づけて物理アドレス(SCM物理アドレス)及びValidが格納されている。
【0051】
インデックスは、CPU10によって指定される論理アドレスから導出される値である。また、ネームスペースやパーティションが指定可能なSCMモジュールの場合、インデックスは、CPU10によって指定されるネームスペースやパーティションと論理アドレスとから導出される値であってもよい。具体的には、CPU10は、SCMモジュール30にアクセスする際に、論理アドレスとネームスペースやパーティションの識別番号とを指定する。SCMモジュール30は、各ネームスペースや各パーティションの先頭インデックス番号を管理し、CPU10によって指定されたネームスペースやパーティションの識別番号を用いて、先頭インデックス番号を取得する。更に、この先頭インデックス番号に、CPU10によって指定される論理アドレスから導出されたインデックスのオフセットを加算することによって、アドレス変換テーブルにおいて用いられるインデックスを導出する。
【0052】
物理アドレスは、対応づけられているインデックスに基づいてアクセスされるSCM32´内の物理アドレスである。なお、物理アドレスによれば、アクセスすべきSCMチップ番号、Bank番号及びPage番号を把握することができる。
【0053】
Validは、アドレス変換テーブルの各エントリの情報の有効または無効を示す。なお、Valid「1」はエントリの情報が有効であることを示し、Valid「0」はエントリの情報が無効であることを示す。エントリの情報が無効とは、インデックス(論理アドレス)に対応するデータがSCM32´にないことをいう。
【0054】
上記したアドレス変換テーブルによれば、CPU10によって指定される論理アドレスをインデックスとして参照することによって物理アドレス(SCM物理アドレス)を取得することができる。
【0055】
ここで、上記したようにCPU10のアクセス単位が64Byteであるものとすると、当該CPU10のアクセス単位(64Byte単位)で論理アドレスと物理アドレスとの対応関係を管理することが好ましい。しかしながら、このように64Byte単位で論理アドレスと物理アドレスとの対応関係を管理した場合には、アドレス変換テーブルのサイズ(容量)が巨大化する。
【0056】
なお、アドレス変換テーブルはSCM32´に格納されて不揮発化されているが、当該アドレス変換テーブルを参照する場合、当該アドレス変換テーブルは例えばDRAM33´にキャッシュされる。このような場合においてアドレス変換テーブルのサイズが巨大化すると、大容量のDRAM33´(メモリ)が必要となり、SCMモジュール30´のコストに与える影響が大きい。更に、大容量化のために例えば複数のDRAMパッケージを実装しようとしたとしても、基板に搭載できない場合もある。
【0057】
このため、本実施形態の比較例に係るSCMモジュール30´においては、アドレス変換テーブルにおける論理アドレスと物理アドレスとの対応関係を、より大きい単位で管理する。ここでは、64Byte単位ではなく256Byte単位で管理する。なお、アドレス変換テーブルの管理単位は、後述するウェアレベリングの単位である。
【0058】
この場合、図5に示すCPU10によって指定される論理アドレス(64Byte単位のアドレス)の上位ビット(下位2ビットのオフセット以外の部分)をアドレス変換テーブルにおけるインデックスとして用いる。
【0059】
これによれば、アドレス変換テーブルの1つのエントリで、インデックス及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスと物理アドレスとの対応関係を管理する(つまり、256Byteのデータ毎に論理アドレスと物理アドレスとの対応関係を管理する)ことができる。
【0060】
なお、図4において説明した論理アドレス(から導出されるインデックス)及び物理アドレスは一例であり、以下の説明においては、当該論理アドレス及び物理アドレスを、適宜、簡略化して示す場合がある。
【0061】
ここで、図6を参照して、SCM32´に格納されるデータ(ECCフレーム)のデータ構造について簡単に説明する。
【0062】
本実施形態の比較例では、論理アドレスと物理アドレスとの対応関係を256Byte単位で管理しており、ECCフレームのサイズも同じサイズに合わせる。当該256Byteのデータは、メタデータ及びECCパリティが付加された単一のECCフレームとしてSCM32´に格納される。
【0063】
256Byteのデータは、CPU10のアクセス単位である64Byteのデータ×4から構成される。
【0064】
メタデータは、ECCフレームを構成する256Byteのデータに関するデータであり、例えば当該256Byteのデータが書き込まれる際にアドレス変換テーブルにおいて参照したインデックス(CPU10によって指定される論理アドレスのうちのオフセット以外の部分)等を含む。また、メタデータには、例えばECCフレームを構成する256Byteのデータのうちの4つの64Byteのデータの各々が有効であるか否かの情報等が含まれていてもよい。
【0065】
ECCパリティは、ECCフレームを構成する256Byteのデータ及びメタデータに対して生成された誤り訂正用のパリティである。
【0066】
SCM32´においては様々な要因(例えば、データが書き込まれた後、長時間放置しておいた等)によりデータを正しく読み出すことができない場合があるため、ECCパリティを付加することにより、4つの64Byteのデータ及びメタデータに対してECC保護を実施する。なお、ECCパリティを用いた訂正を行うためには、256Byteのデータ、メタデータ及びECCパリティを含むECCフレーム全体を読み出す必要がある。そのため、例えば64Byteのデータのみをリードする場合もECCフレーム全体を読み出す。また、64Byteのみにライトする場合は後述するリードモディファイライト(Read Modify Write)処理が必要である。
【0067】
なお、上記したECCフレーム(4つの64Byteのデータ、メタデータ及びECCパリティ)は、例えば図7に示すように、Bank番号(ここでは、0)及びPage番号(ここでは、5)が共通するSCM0~SCMn内の領域(つまり、Bank0のPage5)に書き込まれるものとする。単一のECCフレームをこのような物理的な配置とした(つまり、SCM32´に備えられる複数のSCMチップ内のPageにインタリーブさせて配置した)場合には、当該4つの64Byteのデータ、メタデータ及びECCパリティを一斉に読み出してECCフレームを取得するようなことが可能となる。
【0068】
ここで、上記したアドレス変換テーブルに格納されている物理アドレスによれば、例えばSCM0~SCMnの各々のBank0のPage5にECCフレーム(4つの64Byteのデータ、メタデータ及びECCパリティ)が書き込まれていることを把握することができるが、CPU10によって指定される論理アドレスは実際には64Byte単位である。この場合、SCM0~SCMnのBank0のPage5に書き込まれているECCフレーム(256Byteのデータ)の中のCPU10がアクセスすべき64Byteのデータは、当該論理アドレスの下位2ビット(オフセット)によって特定可能である。
【0069】
なお、図7において説明したデータの物理的な配置は一例であり、単一のECCフレームが書き込まれているPageのグループが適切に把握されるのであれば、他の配置を採用してもよい。
【0070】
また、上記したようにSCM32´には書き込みコマンドにおいてCPU10によって指定されているデータが書き込まれるが、当該SCM32´には、このようなデータ以外にシステム管理情報も格納される。システム管理情報には、上記したアドレス変換テーブル、ファームウェア及びSCMコントローラ31´に含まれる各機能部(機能ブロック)のパラメータ設定値等が含まれる。なお、システム管理情報は、SCM32´の予め定められた領域(固定領域)に格納されていればよい。
【0071】
次に、本実施形態の比較例におけるバッファ管理の概要について説明する。本実施形態の比較例において、例えば書き込みコマンドがCPU10から受信された場合には、当該書き込みコマンドに基づいてSCM32´に書き込まれるデータは一時的にバッファ314´に格納される。同様に、例えば読み出しコマンドがCPU10から受信された場合には、当該読み出しコマンドに基づいてSCM32´から読み出されたデータは一時的にバッファ314´に格納される。
【0072】
このようにバッファ314´にデータを格納するためにはバッファ領域の割り当て及び解放を適切に行う必要があるが、このようなバッファ領域(バッファ314´の空き領域)は、図8に示す第1バッファ管理テーブルを用いて管理される。
【0073】
図8に示すように、第1バッファ管理テーブルは、バッファ領域エントリ番号に対応づけて使用中フラグを格納する。
【0074】
バッファ領域エントリ番号は、バッファ領域に付されている番号である。なお、本実施形態の比較例においては、1つのバッファ領域エントリ番号が付されているバッファ領域には64Byteのデータが格納される。換言すれば、バッファ314´においては、64Byte単位でデータが管理される。
【0075】
使用中フラグは、対応するバッファ領域エントリ番号が付されているバッファ領域が使用中であるか否かを示すフラグである。なお、図8に示す例では、使用中フラグ「1」はバッファ領域が使用中であることを示し、使用中フラグ「0」はバッファ領域が使用中でないことを示している。
【0076】
このような第1バッファ管理テーブルによれば、書き込みコマンドまたは読み出しコマンドがCPU10から受信された場合に、使用中フラグ「0」に対応づけられているバッファ領域エントリ番号が付されているバッファ領域(つまり、空き領域)を当該コマンドに応じたデータに割り当てることができる。
【0077】
なお、例えば書き込みコマンドに基づいて一時的にバッファ314´(内のバッファ領域)に格納されたデータがSCM32´に書き込まれた場合または読み出しコマンドに基づいて一時的にバッファ314´(内のバッファ領域)に格納されたデータがCPU10に送信された場合、当該データが格納されていたバッファ領域は解放され、他のデータに割り当てられる。ここで、バッファ領域エントリ番号の数(つまり、エントリ数)が多い場合には、第1バッファ管理テーブルから解放されたバッファ領域(空き領域)を探索するのに時間がかかる。このようなバッファ領域の割り当てのレイテンシを短縮するために、解放されたバッファ領域に付されているバッファ領域エントリ番号をキューイングしておく構成としてもよい。これによれば、バッファ領域の割り当ての際にキューの先頭からバッファ領域エントリ番号を取得し、当該取得されたバッファ領域エントリ番号が付されているバッファ領域を割り当てることができる。
【0078】
上記したようにバッファ314´の空き領域は第1バッファ管理テーブルを用いて管理されるが、当該バッファ314´に格納されたデータは、図9に示す第2バッファ管理テーブルを用いて管理される。なお、第2バッファ管理テーブルにおいては、バッファ314´に格納されるデータを、上記したECCフレームに合わせて256Byte単位で管理する。
【0079】
図9に示すように、第2バッファ管理テーブルは、Valid、論理アドレス上位ビット及びデータ管理番号0~3を対応づけて格納する。
【0080】
Validは、当該Validを含む第2バッファ管理テーブルのエントリが有効(使用中)であるか無効(未使用)であるかを示す。なお、Valid「1」はエントリが有効であることを示し、Valid「0」はエントリが無効であることを示す。
【0081】
論理アドレス上位ビットは、上記したアドレス変換テーブルに格納されているインデックスに相当する。すなわち、論理アドレス上位ビットは、当該論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスを表している。
【0082】
データ管理番号0~3は、それぞれ論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスを使用してアクセスされるデータ(つまり、4つの64Byteのデータ)の各々に対応している。すなわち、データ管理番号0~3は、CPU10によって指定される論理アドレスの下位2ビット(オフセット)に相当する。
【0083】
具体的には、データ管理番号0は、論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスのうちの先頭の論理アドレスを使用してアクセスされるデータに対応している。データ管理番号1は、論理アドレス上位ビット及び2ビットのオフセットによって表される4つのアライメントの揃った連続する論理アドレスのうちの2番目の論理アドレスを使用してアクセスされるデータに対応している。データ管理番号2は、論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスのうちの3番目の論理アドレスを使用してアクセスされるデータに対応している。データ管理番号3は、論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスのうちの4番目の論理アドレスを使用してアクセスされるデータに対応している。
【0084】
また、データ管理番号0~3の各々は、それぞれReady及びバッファ領域エントリ番号と対応づけられている。Readyは、データ管理番号0~3の各々に対応するデータがReady状態であるか否かを示す。なお、Ready「1」はデータ管理番号0~3の各々に対応するデータがReady状態にあることを示し、Ready「0」はデータ管理番号0~3の各々に対応するデータがReady状態にない(つまり、NotReady状態にある)ことを示す。なお、Ready状態とは、データ管理番号0~3の各々に対応するデータがバッファ領域に格納されており、当該データにアクセス可能な状態をいう。
【0085】
バッファ領域エントリ番号は、データ管理番号0~3の各々に対応するデータが格納されているバッファ領域に付されている番号である。
【0086】
ここで、例えば論理アドレス上位ビット及び2ビットのオフセットによって表されるアライメントの揃った4つの連続する論理アドレスを使用してアクセスされるデータのうちの先頭の論理アドレスを使用してアクセスされるデータがバッファ領域エントリ番号「0x00」が付されているバッファ領域に格納された場合、第2バッファ管理テーブルにおいては、当該論理アドレス上位ビットに対応づけられているデータ管理番号0のReadyに「1」が設定され、当該データ管理番号0のバッファ領域エントリ番号に「0x00」が設定される。
【0087】
一方、アライメントの揃った4つの連続する論理アドレスを使用してアクセスされるデータのうちの先頭の論理アドレスを使用してアクセスされるデータ以外のデータがバッファ領域に格納されていないものとすると、当該論理アドレス上位ビットに対応づけられているデータ管理番号1~3のReadyには「0」が設定されている。
【0088】
なお、図9に示す第2バッファ管理テーブルにおいて、同一の論理アドレス上位ビットを含むエントリの数は最大で1つであるものとする。
【0089】
以下、図10のフローチャートを参照して、本実施形態の比較例に係るSCMモジュール30´の処理手順の一例について説明する。なお、ここでは説明を簡単にするために、SCMコントローラ31´は1つずつコマンドを処理していくものとする。
【0090】
まず、CPU10からコマンドが送信された場合、当該コマンドは、CPUインタフェース311´によって受信される。CPUインタフェース311´によって受信されたコマンドは、例えば制御部312´によって受理される(ステップS1)。
【0091】
ここで、制御部312´によって受理されるコマンド(つまり、CPU10から送信されるコマンド)には、例えば書き込みコマンド及び読み出しコマンド等が含まれる。
【0092】
このため、制御部312´は、ステップS1において受理されたコマンドが書き込みコマンドであるか否かを判定する(ステップS2)。
【0093】
ステップS1において受理されたコマンドが書き込みコマンドであると判定された場合(ステップS2のYES)、SCMコントローラ31´においては、例えば制御部312´による制御の下、当該書き込みコマンドに基づく書き込み処理が実行される(ステップS3)。なお、ステップS3において実行される書き込み処理の詳細については後述する。
【0094】
一方、ステップS1において受理されたコマンドが書き込みコマンドでないと判定された場合(ステップS2のNO)、制御部312´は、受理されたコマンドが読み出しコマンドであるか否かを判定する(ステップS4)。
【0095】
ステップS1において受理されたコマンドが読み出しコマンドであると判定された場合(ステップS4のYES)、SCMコントローラ31´においては、例えば制御部312´による制御の下、当該読み出しコマンドに基づく読み出し処理が実行される(ステップS5)。なお、ステップS5において実行される読み出し処理の詳細については後述する。
【0096】
一方、ステップS1において受理されたコマンドが読み出しコマンドでないと判定された場合(ステップS4のNO)、SCMコントローラ31´においては、例えば制御部312´による制御の下、当該コマンド(つまり、書き込みコマンド及び読み出しコマンド以外の他のコマンド)に基づく処理が実行される。なお、書き込みコマンド及び読み出しコマンド以外のコマンドとしては、例えばSCMモジュール30´における各種設定の変更を指示するコマンド(以下、設定変更コマンドと表記)がある。ステップS1において受理されたコマンドが設定変更コマンドである場合には、SCMコントローラ31´においては、例えば制御部312´による制御の下、当該設定変更コマンドに基づく設定変更処理が実行される。なお、設定変更処理においては、例えばファームウェアの更新及びSCMモジュール30´の動作モードの変更等が実施される。
【0097】
次に、図11のフローチャートを参照して、本実施形態の比較例に係るSCMモジュール30´において実行される書き込み処理(図10に示すステップS3の処理)の処理手順の一例について説明する。
【0098】
書き込み処理は図10に示すステップS1において受理されたコマンドが書き込みコマンドである場合に実行されるが、バッファ管理部315´は、当該書き込みコマンドにおいて指定されているデータ(以下、書き込み対象データと表記)に対してバッファ領域を割り当てる(ステップS11)。
【0099】
具体的には、バッファ管理部315´は、上記した第1バッファ管理テーブルを参照し、使用中フラグ「0」に対応づけて当該第1バッファ管理テーブルに格納されているバッファ領域エントリ番号(つまり、未使用状態のエントリ)を検索する。バッファ管理部315´は、検索されたバッファ領域エントリ番号に対応づけて第1バッファ管理テーブルに格納されている使用中フラグを「1(つまり、使用中の状態)」に設定する。
【0100】
なお、ここでは書き込みコマンドが受理された後に実行される書き込み処理においてバッファ領域を割り当てるものとして説明したが、CPU10から書き込みコマンドが受理されてからバッファ領域(空き領域)を探索すると時間がかかるため、例えばコマンドが受理される前に複数のバッファ領域をまとめて割り当てておくような構成とすることも可能である。
【0101】
次に、データ転送部313´は、書き込み対象データをバッファ314´に転送する(ステップS12)。このステップS12の処理が実行されることにより、書き込み対象データは、ステップS11において割り当てられたバッファ領域(つまり、第1バッファ管理テーブルから検索されたバッファ領域エントリ番号が付されているバッファ領域)に格納される。
【0102】
ステップS12の処理が実行されると、バッファ管理部315´は、バッファ領域に格納された書き込み対象データを第2バッファ管理テーブルにおいて管理するための処理(以下、バッファ管理処理と表記)を実行する(ステップS13)。なお、このバッファ管理処理の詳細については後述する。
【0103】
ステップS13の処理が実行されると、制御部312´は、図10に示すステップS1において受理された書き込みコマンドに対する応答(完了応答)をCPU10に送信する(ステップS14)。なお、ステップS14の処理が実行された後は、SCMモジュール30´においてCPU10からの他のコマンドを受理(または処理)することが可能となる。
【0104】
ここで、バッファ314´は上記したように揮発性を有するため、当該バッファ314´に格納されたデータは、SCM32´に格納することによって不揮発化する必要がある。
【0105】
このため、バッファ314´に格納されているデータを不揮発化するか否かが判定される(ステップS15)。このステップS15においては、例えばバッファ314´の空き領域(の容量)が予め定められた値未満である場合に、バッファ314´に格納されているデータを不揮発化すると判定される。なお、バッファ領域の空き領域は、第1バッファ管理テーブルを参照することによって把握することができる。
【0106】
また、ステップS15においては、例えば第2バッファ管理テーブルに格納されているValid「1」を含むエントリの数が予め定められた数以上である場合に、バッファ314´に格納されているデータを不揮発化すると判定されてもよい。更に、ステップS15においては、同一の論理アドレス上位ビットに対応づけて第2バッファ管理テーブルに格納されているデータ管理番号0~3に対応するデータの全てがバッファ314´に格納されている(つまり、第2バッファ管理テーブルにおいて管理されている256Byteのデータが揃っている)場合に、当該バッファ314´に格納されているデータを不揮発化すると判定されてもよい。また、ステップS15においては、CPU10からのSCMモジュール30´に対するアクセス負荷が低いタイミングでバッファ314´に格納されているデータを不揮発化すると判定されてもよい。
【0107】
バッファ314´に格納されているデータを不揮発化すると判定された場合(ステップS15のYES)、当該データを不揮発化する処理(以下、不揮発化処理と表記)が実行される(ステップS16)。なお、この不揮発化処理の詳細については後述する。
【0108】
一方、バッファ314´に格納されているデータを不揮発化しないと判定された場合(ステップS15のNO)、図11に示す書き込み処理は終了される。
【0109】
図11に示す例においては、ステップS15においてバッファ314´に格納されているデータを不揮発化すると判定された場合にステップS16の処理が実行されるものとして説明したが、バッファ314´に格納されているデータを直ぐに不揮発化するような場合には、ステップS15の処理は省略されてもよい。
【0110】
次に、図12のフローチャートを参照して、上記したバッファ管理処理(図11に示すステップS13の処理)の処理手順の一例について説明する。
【0111】
まず、第2バッファ管理テーブルのエントリの割り当てを行う。この場合、バッファ管理部315´は、図10に示すステップS1において受理された書き込みコマンドにおいて指定されている論理アドレス(以下、対象論理アドレスと表記)に基づいて、第2バッファ管理テーブルに格納されているエントリを検索する処理を実行する(ステップS21)。このステップS21においては、Valid「1」及び対象論理アドレスの上位ビットを含むエントリ(つまり、Validが「1」であり、対象論理アドレスの上位ビットと一致する論理アドレス上位ビットを含むエントリ)が第2バッファ管理テーブルから検索される。
【0112】
ステップS21の処理が実行された結果に基づいて、エントリが第2バッファ管理テーブルに存在しているか否かが判定される(ステップS22)。ステップS22においては、ステップS21においてエントリが発見された(ヒットした)場合にはエントリが第2バッファ管理テーブルに存在していると判定され、当該ステップS21においてエントリが発見されない(ヒットしない)場合にはエントリが第2バッファ管理テーブルに存在していないと判定される。
【0113】
エントリが存在していないと判定された場合(ステップS22のNO)、バッファ管理部315´は、Valid「0」を含むエントリ(つまり、未使用状態のエントリ)を第2バッファ管理テーブルから検索する(ステップS23)。
【0114】
ステップS23の処理が実行されると、バッファ管理部315´は、当該ステップS23において検索されたエントリを使用中状態に変更する(ステップS24)。この場合、ステップS23において検索されたエントリに含まれるValidに「1」、論理アドレス上位ビットに対象論理アドレスの上位ビットが設定される。
【0115】
なお、ステップS23において検索されたエントリにはデータ管理番号0~3が含まれており、当該データ管理番号0~3の各々にはReadyが対応づけられているが、当該データ管理番号0~3の各々に対応づけられている全てのReadyには初期値として「0」が設定される。これにより、対象論理アドレスの上位ビット(論理アドレス上位ビット)に対応づけられている全てのデータ管理番号0~3(に対応するデータ)がNotReady状態に設定される(ステップS25)。
【0116】
一方、エントリが存在していると判定された場合(ステップS22のYES)、上記したステップS23~S25の処理は実行されない。
【0117】
すなわち、上記した第2バッファ管理テーブルのエントリの割り当てにおいては、ステップS21においてエントリ(該当エントリ)が発見されれば当該エントリを用い、当該ステップS21においてエントリが検索されない場合には新たなエントリを割り当てるような処理が実行される。
【0118】
次に、上記した図11に示すステップS12の処理が実行されることによってバッファ領域に格納された書き込み対象データを、第2バッファ管理テーブルに登録する処理を実行する。
【0119】
ここで、上記した書き込みコマンドにおいて指定されている対象論理アドレスの下位ビット(2ビットのオフセット)によれば、ステップS21またはS23において発見されたエントリに含まれるデータ管理番号0~3のうち、書き込み対象データ(当該書き込みコマンドにおいて指定されているデータ)に対応するデータ管理番号を特定することができる。
【0120】
この場合、バッファ管理部315´は、書き込み対象データに対応するデータ管理番号に対応づけられているReadyが「1」である(つまり、当該データ管理番号に対応するデータがReady状態にある)か否かを判定する(ステップS26)。
【0121】
書き込み対象データに対応するデータ管理番号に対応づけられているReadyが「1」であると判定された場合(ステップS26のYES)、当該データ管理番号に対応づけられているバッファ領域エントリ番号が付されているバッファ領域にはデータが格納されている(つまり、当該データがReady状態にある)。
【0122】
ここで、書き込み対象データに対応するデータ管理番号に対応づけられているReadyが「1」であるということは、当該データ管理番号に対応づけられているバッファ領域のデータを上書きすることを意味する。この場合、バッファ領域に格納されているデータ(つまり、既にバッファされているデータ)は不要であり、破棄してよい。よって、バッファ管理部315´は、上記したデータ管理番号に対応づけられているバッファ領域エントリ番号が付されているバッファ領域を解放する(ステップS27)。この場合、バッファ管理部315´は、書き込み対象データに対応するデータ管理番号に対応づけられているバッファ領域エントリ番号に対応づけて第1バッファ管理テーブルに格納されている使用中フラグに「0」を設定する(つまり、当該バッファ領域エントリ番号を含むエントリを未使用状態に設定する)。
【0123】
ステップS27の処理が実行されると、バッファ管理部315´は、上記した図11に示すステップS12の処理が実行されることによって書き込み対象データが格納されたバッファ領域に付されているバッファ領域エントリ番号を、当該書き込み対象データに対応するデータ管理番号に対応づけられているバッファ領域エントリ番号に登録する(ステップS28)。
【0124】
一方、書き込み対象データに対応するデータ管理番号に対応づけられているReadyが「1」でない(つまり、Readyが「0」である)と判定された場合(ステップS26のNO)、バッファ管理部315´は、上記した図11に示すステップS12の処理が実行されることによって書き込み対象データが格納されたバッファ領域に付されているバッファ領域エントリ番号を、当該データ管理番号に対応づけられているバッファ領域エントリ番号に登録する(ステップS29)。
【0125】
また、バッファ管理部315´は、書き込み対象データに対応するデータ管理番号に対応づけられているReadyに「1」を設定する(ステップS30)。これにより、バッファ314´(バッファ領域)に格納された書き込み対象データがReady状態に設定される。
【0126】
上記した図12に示すバッファ管理処理によれば、書き込みコマンドにおいて指定されているデータ(つまり、CPU10からのデータ)は常に最新のデータであるため、当該データは無条件で第2バッファ管理テーブルに登録される。
【0127】
次に、図13のフローチャートを参照して、上記した不揮発化処理(図11に示すステップS16の処理)の処理手順の一例について説明する。なお、不揮発化処理とは、バッファ314´に格納されているデータをSCM32´に書き込む処理をいう。
【0128】
まず、バッファ管理部315´は、第2バッファ管理テーブルを参照して、不揮発化の対象となるデータ(以下、不揮発化対象データと表記)を選択する(ステップS41)。
【0129】
なお、ステップS41においては、例えばバッファ314´に格納されているデータのうち最初にバッファ314´に格納されたデータ(つまり、最も古いデータ)を不揮発化対象データとして選択することができる。
【0130】
また、ステップS41においては、SCM32において管理される256Byteのデータが揃っているエントリが存在する場合には、当該256Byteのデータを不揮発化対象データとして選択してもよい。なお、「256Byteのデータが揃っているエントリ」とは、Validが「1」であり、同一の論理アドレス上位ビットに対応づけられているデータ管理番号0~3の全てのReadyが「1」であるエントリをいう。
【0131】
次に、アドレス変換部316´は、上記した図4に示すようなアドレス変換テーブルを参照して、対象論理アドレス(図10に示すステップS1において受理された書き込みコマンドにおいて指定されている論理アドレス)を物理アドレスに変換する(ステップS42)。この場合、アドレス変換部316´は、対象論理アドレスの上位ビット(つまり、インデックス)に対応づけてアドレス変換テーブルに格納されている物理アドレス(以下、対象物理アドレスと表記)を取得する。
【0132】
ステップS42の処理が実行されると、制御部312´は、対象データをSCM32´に書き込む際にリードモディファイライト処理が必要であるか否かを判定する(ステップS43)。
【0133】
ここで、本実施形態の比較例においては、In-Place Update方式でSCM32´にデータが書き込まれるが、上記したようにアドレス変換テーブルにおいてはアライメントの揃った4つの連続する論理アドレスを使用してアクセスされる256Byteのデータ単位で管理されており、当該256Byteのデータは、メタデータ及びECCパリティが付加されたECCフレームとしてSCM32´に格納されている。なお、このECCフレーム中のECCパリティは、当該ECCフレーム中の256Byteのデータ及びメタデータに対して生成されている。
【0134】
このため、例えば単に対象論理アドレスから変換された対象物理アドレスを使用することによって64Byteの不揮発化対象データがSCM32´に書き込まれた場合、当該SCM32´において管理されている256Byteのデータが変更されることになり、ECCフレーム中のECCパリティによる誤り訂正性能を維持することができない。
【0135】
この場合、ステップS42において対象論理アドレスから変換された対象物理アドレスを使用して同一のECCフレームを構成する256Byteのデータを読み出し(リードし)、当該256Byteのデータの一部(64Byteのデータ)を不揮発化対象データに変更して新たなメタデータ及びECCパリティを付与する。すなわち、64Byteの不揮発化対象データをSCM32´に書き込む(つまり、不揮発化する)ためには、新たなメタデータ及びECCパリティが付された256Byteのデータ単位でSCM32´に書き込む必要がある。このように256Byteのデータを読み出して、ECCフレームを再構成して、SCM32´に書き込む処理をリードモディファイライト処理という。
【0136】
よって、例えばECCフレームを構成するアライメントの揃った4つの連続する論理アドレスを使用してアクセスされる256Byteのデータの一部のデータを不揮発化するような場合には、ステップS43においてリードモディファイライト処理が必要であると判定される。
【0137】
一方、対象データがECCフレームを構成するアライメントの揃った4つの連続する論理アドレスを使用してアクセスされる256Byteのデータ(つまり、4つの64Byteのデータ)であるような場合には、SCM32´からデータを読み出すことなく、当該256ByteのデータからECCフレームを構成してSCM32´に書き込むことができるため、リードモディファイライト処理は必要ない。
【0138】
リードモディファイライト処理が必要であると判定された場合(ステップS43のYES)、バッファ管理部315´は、ステップS42において対象論理アドレスから変換された対象物理アドレスを使用して読み出される256Byteのデータ(同一のECCフレームを構成する256Byteのデータ)に対してバッファ領域を割り当てる(ステップS44)。なお、バッファ領域を割り当てる処理については上記した図11に示すステップS11の処理と同様であるため、ここではその詳しい説明を省略する。
【0139】
次に、制御部312´は、対象物理アドレスを使用して同一のECCフレームを構成する256ByteのデータをSCM32´から読み出す(ステップS45)。
【0140】
ステップS45においては、SCMインタフェース319´を介してSCM32´からデータが読み出されるが、当該データは、制御部312´による制御の下、ECCデコーダ318´によってECCデコード処理が実行され、データ転送部313´によってSCM32´からバッファ314´に転送される。これにより、SCM32´から読み出されたデータがステップS44において割り当てられたバッファ領域に格納される。
【0141】
なお、ステップS45の処理が実行される時点で対象物理アドレスに該当するBankがBusy状態にある場合には、当該BankがReady状態になるまで待機した後にステップS45の処理が実行される。なお、「BankがBusy状態にある」とは、例えば当該Bank(のPage)に対して他のデータを書き込む処理または読み出す処理が実行されている等の理由により、当該Bank(のPage)に対してデータを書き込む処理または読み出す処理を実行することができない状態等をいうが、少なくとも外部からの書き込みコマンドまたは読み出しコマンドを受理することができない状態であればよい。一方、「BankがReady状態にある」とは、当該Bank(のPage)に対してデータを書き込む処理または読み出す処理を実行することができる(書き込みコマンドまたは読み出しコマンドを受理することができる)状態をいう。
【0142】
次に、バッファ管理部315´は、バッファ領域に格納された不揮発化対象データを第2バッファ管理テーブルに登録する処理を実行する。この場合、バッファ314´に格納されているデータはCPU10からの最新のデータに相当するため、当該データをSCM32´に書き込まれている古いデータで上書きすることを避ける必要がある。
【0143】
この場合、ステップS45においてSCM32´から読み出された256Byteのデータに含まれる64Byteのデータ毎に以下のステップS46~S49の処理が実行される。以下、ステップS45においてSCM32´から読み出された256Byteのデータに含まれる4つの64Byteのデータを第1~第4データと称する。なお、第1~第4データは、第2バッファ管理テーブルに格納されているデータ管理番号0~3に対応しているものとする。
【0144】
まず、バッファ管理部315´は、対象論理アドレスの上位ビット(と一致する論理ビット上位アドレス)に対応づけて第2バッファ管理テーブルに格納されているデータ管理番号0に対応づけられているReadyが「1」であるか否かを判定する(ステップS46)。
【0145】
Readyが「1」でない(つまり、Readyが「0」である)と判定された場合(ステップS46のNO)、バッファ管理部315´は、上記したステップS45の処理が実行されることによって第1データが格納されたバッファ領域に付されているバッファ領域エントリ番号を、第2バッファ管理テーブルにおいて対象論理アドレスの上位ビット及びデータ管理番号0に対応づけられているバッファ領域エントリ番号に登録する(ステップS47)。
【0146】
また、バッファ管理部315´は、第2バッファ管理テーブルにおいて対象論理アドレスの上位ビット及びデータ管理番号0に対応づけられているReadyに「1」を設定する。これにより、バッファ314´(バッファ領域)に格納された第1データがReady状態に設定される。
【0147】
一方、Readyが「1」であると判定された場合(ステップS46のYES)、バッファ管理部315´は、第2バッファ管理テーブルにおいて対象論理アドレスの上位ビット及びデータ管理番号0に対応づけられているバッファ領域エントリ番号が付されているバッファ領域を解放する(ステップS49)。なお、バッファ領域を解放する処理については上記した図12に示すステップS27の処理と同様であるため、ここではその詳しい説明を省略する。
【0148】
なお、上記したステップS46~S49の処理は、SCM32´から読み出された第1データが有効である場合(つまり、過去にCPU10から書き込まれたことがある場合)に実行されるが、当該第1データが無効である場合(過去にCPU10から書き込まれたことがない場合)には、当該ステップS46の処理が実行されることなく当該第1データを破棄してよい。第1データが有効であるか無効であるかはECCフレームに含まれるメタデータに基づいて判別することができる。
【0149】
ここでは、第1データに対してステップS46~S49の処理が実行される場合について説明したが、当該処理は第2~第4データについても同様に実行される。なお、対象データ(書き込みコマンドにおいて指定されているデータ)で上書きされるデータに対してステップS46~S49の処理が実行される場合は、当該対象データは図11に示すステップS12の処理が実行されることによって既にバッファ314´(バッファ領域)に格納されているため、ステップS46においてReadyが「1」であると判定され、ステップS49の処理が実行される。
【0150】
このような処理が実行されることによって、第1~第4データは、同一の論理アドレスを使用してアクセスされるデータがバッファ314´に格納されていないという条件を満たす場合に限り、第2バッファ管理テーブルに登録される。
【0151】
次に、制御部312´は、対象論理アドレスの上位ビットに対応づけて第2バッファ管理テーブルに格納されているデータ管理番号0~3に対応づけられているバッファ領域エントリ番号が付されているバッファ領域に格納されている256Byteのデータ(対象データを含む4つの64Byteのデータ)を対象物理アドレスを使用してSCM32´に書き込む(ステップS50)。
【0152】
ステップS50においては、SCMインタフェース319´を介してSCM32´にデータが書き込まれるが、当該データは、制御部312´による制御の下、ECCエンコーダ317´によってECCエンコード処理が実行され、データ転送部313´によってバッファ314´からSCM32´に転送される。
【0153】
なお、ステップS50の処理が実行される時点で対象物理アドレスに該当するBankがBusy状態にある場合には、当該SCMチップまたはBankがReady状態になるまで待機した後にステップS50の処理が実行される。
【0154】
ステップS50の処理が実行されると、バッファ管理部315´は、第2バッファ管理テーブルのエントリを解放する(ステップS51)。このステップS51においては、第2バッファ管理テーブルにおいて対象論理アドレスの上位ビットを含むエントリのValidが「0」に設定される。
【0155】
なお、ステップS51の処理が実行された場合、当該ステップS51において解放されたエントリに含まれるデータ管理番号0~3に対応づけられているバッファ領域エントリ番号が付されているバッファ領域が全て解放される。
【0156】
一方、上記したステップS43においてリードモディファイライト処理が必要でないと判定された場合(ステップS43のNO)、ステップS41において選択された不揮発化対象データに対してステップS50及びS51の処理が実行されればよい。
【0157】
上記した書き込み処理において、SCMモジュール30´(SCMコントローラ31´)は、書き込みコマンドにおいて指定されているデータをバッファ314´に格納して当該書き込みコマンドに対する応答をCPU10に送信するとともに、必要に応じてリードモディファイライト処理を実行するように動作する。これによれば、書き込みコマンドにおいて指定されているデータを適切に不揮発化することが可能となる。
【0158】
次に、図14のフローチャートを参照して、本実施形態の比較例に係るSCMモジュール30´において実行される読み出し処理(図10に示すステップS5の処理)の処理手順の一例について説明する。
【0159】
読み出し処理は図10に示すステップS1において受理されたコマンドが読み出しコマンドである場合に実行されるが、バッファ管理部315´は、当該読み出しコマンドにおいて指定されている論理アドレス(以下、対象論理アドレスと表記)を使用してアクセスされるデータ(以下、読み出し対象データと表記)がバッファ314´に格納されているか否かを判定する(ステップS61)。
【0160】
以下、ステップS61の処理について具体的に説明する。まず、バッファ管理部315´は、Valid「1」及び対象論理アドレスの上位ビットと一致する論理アドレス上位ビットを含むエントリを第2バッファ管理テーブルから検索する。このようなエントリが検索された場合、バッファ管理部315´は、対象論理アドレスの下位2ビット(オフセット)に基づいて当該エントリに含まれるデータ管理番号0~3のうちの1つのデータ管理番号を特定し、当該特定されたデータ管理番号に対応づけられているReadyが「1」であるか否かを判定する。この特定されたデータ管理番号に対応づけられているReadyが「1」である場合、バッファ管理部315´は、読み出し対象データがバッファ314´に格納されていると判定する。
【0161】
一方、Valid「1」及び対象論理アドレスの上位ビットと一致する論理アドレス上位ビットを含むエントリが第2バッファ管理テーブルに存在しない(つまり、当該エントリが第2バッファ管理テーブルから検索されない)場合、または対象論理アドレスの下位2ビットから特定されたデータ管理番号に対応づけられているReadyが「1」でない(つまり、「0」である)場合には、読み出し対象データがバッファ314´に格納されていないと判定される。
【0162】
上記したように読み出し対象データがバッファ314´に格納されていないと判定された場合(ステップS61のNO)、アドレス変換部316´は、アドレス変換テーブルを参照して、対象論理アドレスを物理アドレス(以下、対象物理アドレスと表記)に変換する(ステップS62)。なお、この対象論理アドレスを対象物理アドレスに変換する処理については上記した図13に示すステップS42の処理と同様であるため、ここではその詳しい説明を省略する。
【0163】
ステップS62の処理が実行されると、バッファ管理部315´は、ステップS62において対象論理アドレスから変換された対象物理アドレスを使用して読み出される256Byteのデータ(同一のECCフレームを構成する256Byteのデータ)に対してバッファ領域を割り当てる(ステップS63)。なお、バッファ領域を割り当てる処理について上記した図11に示すステップS11の処理と同様であるため、ここではその詳しい説明を省略する。
【0164】
次に、制御部312´は、対象物理アドレスを使用して同一のECCフレームを構成する256ByteのデータをSCM32´から読み出す(ステップS64)。データをSCM32´から読み出す処理については図13に示すステップS45の処理と同様であるため、ここではその詳しい説明を省略する。
【0165】
ここで、ステップS64の処理が実行された場合、当該ステップS64においてSCM32´から読み出された256Byteのデータ(4つの64Byteのデータ)はバッファ314´に格納されるが、データ転送部313´は、当該256Byteのデータの中から対象論理アドレスの下位2ビットに基づいて特定される64Byteのデータ(つまり、読み出し対象データ)をバッファ314´から取得する。この場合、データ転送部313´は、CPU10にバッファ314´から取得されたデータを転送するとともに、完了応答をCPU10に送信する(ステップS65)。なお、読み出し対象データは、CPUインタフェース311´を介してCPU10に転送(送信)される。
【0166】
ステップS65の処理が実行されると、バッファ管理部315´は、上記したステップS64においてSCM32´から読み出された256Byteのデータが格納されたバッファ領域を解放する。なお、バッファ領域を解放する処理については上記した図12に示すステップS27の処理と同様であるため、ここではその詳しい説明を省略する。ステップS66の処理が実行されると、読み出し処理は終了される。
【0167】
一方、読み出し対象データがバッファ314´に格納されていると判定された場合(ステップS61のYES)、当該読み出し対象データは、Valid「1」及び対象論理アドレスの上位ビットを含むエントリに含まれる当該対象論理アドレスの下位2ビットから特定されたデータ管理番号に対応づけられているバッファ領域エントリ番号が付されているバッファ領域に格納されている。このため、データ転送部313´は、このようなバッファ領域に格納されている読み出し対象データをバッファ314´から取得する。この場合、データ転送部313´は、CPU10にバッファ314´から取得されたデータを転送するとともに、完了応答をCPU10に送信する(ステップS67)。ステップS67の処理が実行されると、読み出し処理は終了される。
【0168】
上記したように読み出し処理において、SCMモジュール30´(SCMコントローラ31´)は、CPU10からの読み出しコマンドに対して最新のデータ(64Byteのデータ)を返すように動作する。すなわち、読み出し対象データ(読み出しコマンドにおいて指定されている論理アドレスを使用してアクセスされるデータ)がバッファ314´に格納されている場合には当該バッファ314´に格納されている読み出し対象データがCPU10に返され、当該読み出し対象データがバッファ314´に格納されていない場合にはSCM32´から読み出された読み出し対象データがCPU10に返される。
【0169】
なお、本実施形態の比較例においては省略されているが、例えばDRAM33´にキャッシュ領域が設けられている場合であって、読み出しデータが当該キャッシュ領域に格納されている場合においては、当該読み出し対象データを当該キャッシュ領域(リードキャッシュ)からCPU10に返すようにしてもよい。
【0170】
また、図14においては説明を省略したが、読み出し対象データがバッファ314´及びSCM32´のいずれにも存在しない(つまり、対象論理アドレスに対して過去にCPU10からデータが書き込まれていない)場合には、CPU10にエラーが返されるような処理が実行されればよい。
【0171】
ここで、SCM32´の特定のPageに対するデータの書き込みを繰り返すと当該Pageに含まれるメモリセルが疲弊することが知られている。このような疲弊が蓄積したメモリセルに書き込まれたデータは、正しく読み出すことができなくなる。
【0172】
このため、例えばCPU10からのデータの書き込み(ライトアクセス)の局所性が高い場合には、特定のPageに含まれるメモリセルが疲弊し、SCMモジュール30´の製品寿命が短くなる要因となる。
【0173】
そこで、本実施形態の比較例においては、SCMモジュール30´の耐久性の改善及び長寿命化を図るために、物理アドレス(Page)にデータが書き込まれた回数に基づいて論理アドレスと物理アドレスとの対応関係を変更するウェアレベリング処理を実行する。
【0174】
以下、図15及び図16を参照して、ウェアレベリング処理の概要について説明する。図15は、物理アドレス(SCMチップ番号、Bank番号及びPage番号によって特定されるPage)毎のデータの書き込み回数を管理するための書き込み回数管理テーブルの一例を示している。書き込み回数管理テーブルは、例えばシステム管理情報としてSCM32´に格納されている。
【0175】
図15に示す例によれば、例えばSCM0/Bank0/Page2(つまり、SCMチップ番号0、Bank番号0及びPage番号2によって特定されるPage)のデータの書き込み回数は3000回であり、当該Pageに対するデータの書き込み回数(頻度)は他のPageよりも多い。
【0176】
この場合、図16に示すようにデータの書き込み回数が多いSCM0/Bank0/Page2を他のPageと交換する。図15に示す例ではSCM0/Bank0/Page8に対するデーの書き込み回数が少ないため、図16においては、SCM0/Bank0/Page2をSCM0/Bank0/Page8と交換することが示されている。なお、図示されていないが、SCM0/Bank0/Page2が他のPageと交換される場合には、SCMx/Bank0/Page2(例えば、SCM1/Bank0/Page2及びSCM2/Bank0/Page2等)も同様に他のPageと交換される。
【0177】
なお、例えば「第1Pageと第2Pageとを交換する」とは、第1Page(物理アドレス)と第1論理アドレスとが対応しており、第2Page(物理アドレス)と第2論理アドレスとが対応している場合において、当該第1Pageと第2論理アドレスとが対応し、当該第2Pageと第1論理アドレスとが対応するように対応関係を変更する(アドレス変換テーブルを更新する)ことを意味する。
【0178】
この場合、例えばSCM0/Bank0/Page2が第1論理アドレスと対応しており、SCM0/Bank0/Page8が第2論理アドレスと対応している場合においては、SCM0/Bank0/Page2を第2論理アドレスと対応させ、SCM0/Bank0/Page8を第1論理アドレスと対応させるようにアドレス変換テーブルが更新される。
【0179】
これによれば、第1論理アドレスが高い頻度でCPU10によって指定されたことによってSCM0/Bank0/Page2のデータの書き込み回数が多くなっていたところ、論理アドレスと物理アドレスとの対応関係を変更し、Pageを交換したことによって、同じような頻度で第1論理アドレスがCPU10によって指定されたとしてもSCM0/Bank0/Page8にデータが書き込まれるようになるため、SCM0/Bank0/Page2のデータの書き込み回数の増加を抑制することが可能となる。
【0180】
なお、ここでは説明の便宜のためにPage単位でウェアレベリング処理が実行される(つまり、1つのPageが他のPageと交換される)場合について説明したが、当該ウェアレベリング処理の単位は複数Pageであってもよい。
【0181】
次に、図17のフローチャートを参照して、ウェアレベリング処理の処理手順の一例について説明する。なお、ウェアレベリング処理は、例えば上記した書き込み処理の時に実行されてもよいし、当該書き込み処理の後に実行されてもよいし、予め定められたタイミングで実行されてもよい。本実施形態の比較例におけるウェアレベリング処理(図17に示す処理)は、書き込み処理の後に実行されるものとする。また、ウェアレベリング処理は、図8に示すバッファ領域や図9に示すバッファ管理テーブルに十分な空きがある前提で実行(開始)される。これらに空きがない場合は、空きができるまで待機するか、SCM32´にバッファ内のデータを書き込むことによって空きを確保する。後述するパトロール・リフレッシュ処理においても同様である。以下に説明する本実施形態においても同様である。
【0182】
まず、制御部312´は、ウェアレベリング処理の対象となる2つの領域(以下、第1及び第2ウェアレベリング対象領域と表記)を決定する(ステップS71)。第1及び第2ウェアレベリング対象領域は、それぞれ単一の領域(Page)であってもよいし、複数の領域(複数のPage)であってもよい。第1及び第2ウェアレベリング対象領域は、例えば上記した書き込み回数管理テーブルを参照して決定することができる。ステップS71において決定される第1ウェアレベリング対象領域は例えばデータの書き込み回数が多いPageであり、第2ウェアレベリング対象領域は例えばデータの書き込み回数が少ないPageである。
【0183】
ここで、ステップS71において決定された第1及び第2ウェアレベリング対象領域を交換する場合、第1ウェアレベリング対象領域に書き込まれているデータと第2ウェアレベリング対象領域に書き込まれているデータも交換する必要がある。
【0184】
この場合、SCMコントローラ31´においては、第2バッファ管理テーブルのエントリの割り当てが実行される(ステップS72)。なお、ステップS72の処理は、図12に示すステップS21~S25の処理に相当する処理であるため、ここではその詳しい説明を省略する。
【0185】
次に、SCMコントローラ31´においては、SCM32´からのデータの読み出し及びバッファ管理が実行される(ステップS73)。なお、このステップS73の処理は、図13に示すステップS44~S49の処理に相当する処理であるため、ここではその詳しい説明を省略する。ステップS72及びS73の処理は、第1及び第2ウェアレベリング対象領域の各々に対して実行される。
【0186】
次に、制御部312´は、アドレス変換テーブルを更新する(ステップS74)。なお、アドレス変換テーブルは例えばシステム管理情報としてSCM32´に格納されているが、当該アドレス変換テーブルを参照する場合には、当該アドレス変換テーブルは例えばDRAM33´に転送(キャッシュ)されている。このため、ステップS74において、アドレス変換テーブルは、当該DRAM33´上で更新(変更)される。この場合、制御部312´は、第1ウェアレベリング対象領域に格納されているデータから構成されるECCフレームのメタデータを参照し、論理アドレスを取得する。同様に、制御部312´は、第2ウェアレベリング対象領域に格納されているデータから構成されるECCフレームのメタデータを参照し、論理アドレスを取得する。制御部312´は、このように取得された2つの論理アドレスに基づいて、アドレス変換テーブルのエントリを参照し、互いの物理アドレスを交換する。すなわち、ステップS74においては、第1及び第2ウェアレベリング対象領域の各々に対応づけられている物理アドレスが交換されるようにアドレス変換テーブルが更新される。
【0187】
ステップS74の処理が実行されると、図13に示すステップS50及びS51の処理に相当するステップS75及びS76の処理が実行される。
【0188】
なお、上記したステップS73、S75及びS76の処理は、2つのウェアレベリング対象領域(第1及び第2ウェアレベリング対象領域)に書き込まれているデータをSCM32´から読み出して、当該SCM32´に書き込む処理に相当する。
【0189】
ただし、最新のデータがバッファされている場合があり、このような場合には必要に応じてリードモディファイライト処理を実行する。なお、図13に示す不揮発化処理において説明したように、例えば第1ウェアレベリング対象領域に書き込まれているデータと論理アドレスが共通するデータがバッファ314´に書き込まれている場合には、当該バッファ314´に書き込まれているデータ(つまり、最新のデータ)が第2ウェアレベリング対象領域に書き込まれる。同様に、例えば第2ウェアレベリング対象領域に書き込まれているデータと論理アドレスが共通するデータがバッファ314´に書き込まれている場合には、当該バッファ314´に書き込まれているデータ(つまり、最新のデータ)が第1ウェアレベリング対象領域に書き込まれる。
【0190】
ステップS76の処理が実行されると、上記したステップS74においてDRAM33上で更新(変更)されたアドレス変換テーブルを不揮発化するために、制御部312´は、当該アドレス変換テーブルをSCM32´に書き込む(ステップS77)。
【0191】
上記したウェアレベリング処理によれば、例えば特定の論理アドレスに応じてアクセスされる書き込み回数の多い物理アドレス(Page)を書き込み回数の少ない物理アドレス(Page)と交換することが可能であるため、当該書き込み回数の多い物理アドレスへの更なる疲弊の蓄積を回避することが期待できる。また、この結果として、SCMモジュール30´の製品寿命の長寿命化も期待できる。
【0192】
上記したように高い頻度でデータの書き込みが繰り返されるSCM32´の特定のPageに含まれるメモリセルが疲弊した場合には当該メモリセル(Page)に書き込まれたデータを正しく読み出すことができなくなるが、SCM32´は、データが書き込まれた後、当該データが書き込まれた状態で長時間放置されることによっても当該データを正しく読み出すことができなくなる。
【0193】
このため、本実施形態の比較例においては、所定のタイミングPageからデータを読み出し、同一のPageにデータを再度書き込むことで、当該Pageに書き込まれたデータを正しく読み出すことができるようにする。このような処理は、パトロール・リフレッシュ処理と称される。
【0194】
以下、図18のフローチャートを参照して、パトロール・リフレッシュ処理の処理手順の一例について説明する。
【0195】
なお、パトロール・リフレッシュ処理は、例えばCPU10からのコマンド(アクセス要求)とは関係なく、SCMモジュール30´内で所定のタイミングで実行される。
【0196】
まず、制御部312´は、パトロール・リフレッシュ処理の対象となるPage(以下、パトロール・リフレッシュ対象Pageと表記)を決定する(ステップS81)。
【0197】
次に、SCMコントローラ31´においてはステップS82~S85の処理が実行されるが、当該処理は図17に示すステップS72、S73、S75及びS76の処理に相当する処理であるため、ここではその詳しい説明を省略する。
【0198】
なお、上記したステップS82~S85の処理は、パトロール・リフレッシュ対象Pageに書き込まれているデータをSCM32´から読み出して、当該SCM32´に書き込む処理に相当するが、当該S82~S85の処理においては、必要に応じてリードモディファイライト処理が実行される。
【0199】
なお、図18においては省略されているが、パトロール・リフレッシュ処理は、SCM32´の全てのPageに対するデータの読み出し及び再度の書き込みが完了するまで繰り返し実行される。すなわち、ステップS85の処理が実行された際に全てのPageについて図18に示す処理が実行されていない場合には、ステップS81に戻って処理が繰り返される。このように図18に示す処理が繰り返される場合、ステップS81において、パトロール・リフレッシュ対象Pageは、例えばSCM32´のPage(物理アドレス)の中からシーケンシャルに決定されればよい。なお、パトロール・リフレッシュ対象Pageは、論理アドレスをシーケンシャルにパトロールした後に、その他のシステム管理情報全体をパトロールするように決定されてもよい。
【0200】
また、例えばステップS84の処理が実行された後にCPU10から受信された新たな書き込みコマンドが処理され、その後にステップS85の処理が実行された場合を想定する。この場合、新たな書き込みコマンドにおいて指定されているデータはバッファ314´に格納されるが、当該バッファ314´に格納されたデータ(最新のデータ)はステップS85の処理が実行されることによって失われることになる。このため、上記したパトロール・リフレッシュ対象Pageに格納されているデータにアクセスするための論理アドレスを管理しておき、当該論理アドレスが指定された書き込みコマンドが受信された場合、当該書き込みコマンドの処理は待機させるものとする。具体的には、パトロール・リフレッシュ処理中に書き込みコマンドが受信された場合、当該書き込みコマンドにおいて指定されているデータはバッファ314´に格納されるが、第2バッファ管理テーブルへの登録は待機する。これによれば、パトロール・リフレッシュ処理が終了した後に第2バッファ管理テーブルへの登録を行うことができ、書き込みコマンドにおいて指定されたデータがステップS85の処理によって失われることを回避することができる。
【0201】
なお、パトロール・リフレッシュ処理は、書き込みコマンドにおいてCPU10によって指定されたデータが書き込まれる領域のみではなく、システム管理情報が格納されている領域をも対象とする。
【0202】
ここで、例えば上記したように書き込みコマンドにおいて指定されているデータは一旦バッファ314´に格納され、不揮発化する所定のタイミングでSCM32´に書き込まれるが、バッファ314´は揮発性を有する記憶装置であるため、データが例えばバッファ314´に書き込まれた後、SCM32´に書き込まれる前にSCMモジュール30´が電源から遮断された場合には、バッファ314´に格納されている当該データを失う可能性がある。
【0203】
このため、本実施形態の比較例においては、このようなバッファ314´に格納されているデータの消失を回避するために、電源断が発生した場合にバッテリ35´からの電源供給が開始され、当該バッファ314´に格納されているデータ(つまり、不揮発化が未完了のデータ)を不揮発化する処理(以下、電源断検知処理と表記)が更に実行されるものとする。
【0204】
以下、図19のフローチャートを参照して、電源断検知処理の処理手順の一例について説明する。
【0205】
ここで、SCMモジュール30´(またはコンピュータシステム1)に対する電源断(予期しない不正電源断)が発生した場合を想定する。この場合、電源断検知部34´は、電源断を検知することができる。
【0206】
このため、制御部312´は、電源断検知部34´による検知結果に基づいて、電源断が発生したか否かを判定する(ステップS91)。
【0207】
電源断が発生したと判定された場合(ステップS91のYES)、制御部312´は、バッテリ35´からSCMモジュール30´に電力を供給する(ステップS92)。このバッテリ35´からの電力により、SCMモジュール30´は継続して動作可能となる。
【0208】
次に、制御部312´は、SCMモジュール30´を、CPU10からのコマンドを受理しない状態(コマンド不受理状態)に設定する(ステップS93)。
【0209】
ステップS93の処理が実行された場合、図11のステップS16の処理に相当するステップS94の処理が実行される。このステップS94の処理においては、必要に応じてリードモディファイライト処理を実行しながら、バッファ314´に格納されている全てのデータがSCM32´に書き込まれる(つまり、不揮発化される)。
【0210】
次に、制御部312´は、不揮発化が必要なシステム管理情報を生成する(ステップS95)。なお、ステップS95において生成されるシステム管理情報には、例えば上記した書き込み回数管理テーブル等が含まれる。
【0211】
ステップS95の処理が実行されると、制御部312´は、当該ステップS95において生成されたシステム管理情報をSCM32´に書き込む(ステップS96)。なお、システム管理情報は、ユーザデータと同様に、ECCエンコード処理が実行された後にSCM32´に書き込まれる。また、システム管理情報が書き込まれるSCM32´の物理アドレスは、例えば固定アドレス等で構わない。ステップS96の処理が実行されると、SCMモジュール30´はシャットダウンされる。
【0212】
上記した電源断検知処理によれば、電源断が発生した際にバッファ314´に格納されている全てのデータをSCM32´に書き込む(不揮発化する)ことが可能であるため、当該データが消失することを回避することができる。
【0213】
なお、上記したステップS91において電源断が発生していないと判定された場合(ステップS91のNO)、ステップS92~S96の処理は実行されず、電源断検知処理は終了される。
【0214】
ここで、図20は、上記した本実施形態の比較例に係るSCMモジュール30´の動作の概要を示している。なお、図20においては、上記した図2と比較して、便宜的に簡易な構成が示されている。
【0215】
ここで、図20においては、SCMモジュール30´は、CPU10とCPUインタフェース311´を介して接続されるSCMコントローラ31´及び当該SCMコントローラとSMインタフェース319´を介して接続されるSCM32´を備えることが示されている。また、SCMコントローラ31は、バッファ314´及びアドレス変換テーブルを有している。また、SCM32´には図6に示すECCフレームのデータが多数格納されており、図20には、そのうちの1つのECCフレームが論理アドレス「@0x200」から始まるアライメントの揃った4つの64Byteのデータ、メタデータ及びECCパリティから構成されていることが示されている。
【0216】
図20に示すように、本実施形態の比較例においては、例えば64Byteのデータ及び論理アドレス(例えば、「@0x240」)を指定した書き込みコマンドがCPU10から受信された場合、当該データはバッファ314´に一旦格納(バッファ)された後に、SCM32´に書き込まれる。図20に示す「@0x数値」の表現は、CPU10からのコマンドにおいて指定される論理アドレスまたはデータの論理アドレスを表している。
【0217】
なお、本実施形態の比較例においては、256Byte単位で論理アドレスと物理アドレスとの対応関係が管理されており、4つの64Byteのデータは、256Byteアラインとなるように配置され、ECCフレームとしてSCM32´に書き込まれている。
【0218】
このため、上記したようにバッファ314´に格納されている64ByteのデータをSCM32´に書き込む際には、ECCフレームを構成する256ByteのデータをSCM32´から読み出して、ECCデコード処理を実行し、当該256Byteのデータの一部をバッファ314´に格納されている64Byteのデータに書き換えて、ECCフレーム(メタデータ及びECCパリティ)を再構成して、SCM32´に書き込むリードモディファイライト処理を実行する必要がある。
【0219】
これによれば、例えば異なるECCフレームを構成する64Byteのデータが指定された書き込みコマンド毎に、SCM32´に対してリードモディファイライト処理を実行することになり、SCM32´に対する書き込み性能(ランダムライト性能)が低い。
【0220】
更に、CPU10において指定されたデータをSCM32´に書き込む際に当該データが書き込まれるSCM32´内の物理アドレス(Page)に該当するBankがBusy状態にある場合には、当該Busy状態が解消する(つまり、Ready状態に遷移する)まで待機する必要があり、高速な書き込み処理を実行することができない場合がある。
【0221】
また、本実施形態の比較例において電源断が発生した場合には、バッテリ35´から電力が供給されている間にバッファ314´に格納されている全てのデータを不揮発化する必要があるが、当該不揮発化においてもリードモディファイライト処理が実行されるため、当該不揮発化に係る時間が長くなり、バッテリの容量を多く確保しておかなければならない。
【0222】
そこで、本実施形態に係るSCMモジュール30(メモリシステム)においては、図21に示すように、SCM32内のメモリ領域を第1メモリ領域32a及び第2メモリ領域32bに分割管理し、書き込み先となるメモリ領域と当該メモリ領域にデータを書き込む書き込み方式とを動的に切り替える構成を採用する。
【0223】
具体的には、本実施形態においては、第1メモリ領域32aにデータを書き込む場合にはIn-place Update方式を用い、第2メモリ領域32bにデータを書き込む場合にはAppend Write方式を用いる。なお、In-Place Update方式は、上記したように書き込みコマンドに基づくデータが第1メモリ領域32aに書き込まれる時点で当該書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスに当該データを書き込む(上書きする)方式である。一方、Append Write方式は、書き込みコマンドに基づくデータが第2メモリ領域32bに書き込まれる時点で当該で書き込みコマンドにおいて指定されている論理アドレスとは関係なく当該データの書き込み先としてコントローラ31によって指定されている物理アドレスに当該データを書き込む(つまり、追記する)方式である。Append Write方式は、上記した本実施形態の比較例において説明したリードモディファイライト処理を実行することなくデータをSCM32(第2メモリ領域32b)に書き込むことができる。
【0224】
なお、詳細については後述するが、第2メモリ領域32bに書き込まれたデータは、所定のタイミングで第1メモリ領域32aに書き戻される。これにより、第2メモリ領域32bに空き領域を確保し、CPU10からの後続の書き込みコマンドに備えることができる。
【0225】
本実施形態においては、上記した構成により、SCMモジュール30(メモリシステム)における書き込み性能の向上を図る。
【0226】
なお、図21に示すように、第1メモリ領域32aには256Byteのデータから構成されるECCフレームが書き込まれるが、第2メモリ領域32bにおいても256Byteのデータ(4つの64Byteのデータがパックされたデータ)から構成されるECCフレームが書き込まれる。この第1メモリ領域32a及び第2メモリ領域32bに書き込まれるデータ(ECCフレーム)の相違については後述する。
【0227】
以下、本実施形態に係るSCMモジュール30について詳細に説明する。まず、図22は、本実施形態に係るSCMモジュール30の構成の一例を示すブロック図である。
【0228】
図22に示すように、SCMモジュール30は、SCMコントローラ31、SCM32及びDRAM33を備える。なお、SCMモジュール30に含まれるSCMコントローラ31、SCM32及びDRAM33は、図2に示すSCMコントローラ31´、SCM32及びDRAM33に相当する。
【0229】
また、SCMコントローラ31は、CPUインタフェース(I/F)311、制御部312、データ転送部313、バッファ(領域)314、バッファ管理部315、第1アドレス変換部316、ECCエンコーダ317、ECCデコーダ318、SCMインタフェース(I/F)319、DRAMインタフェース(I/F)320、第2アドレス変換部321及び第2メモリ領域管理部322を含む。
【0230】
なお、SCMコントローラ31に含まれるCPUインタフェース311、制御部312、データ転送部313、バッファ314、バッファ管理部315、第1アドレス変換部316、ECCエンコーダ317、ECCデコーダ318、SCMインタフェース319、DRAMインタフェース320は、図2に示すCPUインタフェース311´、制御部312´、データ転送部313´、バッファ(領域)314´、バッファ管理部315´、アドレス変換部316´、ECCエンコーダ317´、ECCデコーダ318´、SCMインタフェース319´及びDRAMインタフェース320´に相当する。
【0231】
以下の説明においては、前述した本実施形態の比較例に係るSCMモジュール30´と同様の部分についてはその詳しい説明を省略し、当該SCMモジュール30´と異なる部分について主に述べる。
【0232】
なお、本実施形態の比較例におけるSCMコントローラ31´と同様に、本実施形態におけるSCMコントローラ31に含まれる機能部の全部または一部は、例えばハードウェアによって実現されてもよいし、ソフトウェアによって実現されてもよいし、ハードウェア及びソフトウェアの組み合わせ構成によって実現されてもよい。
【0233】
第1アドレス変換部316は、例えば書き込みコマンドまたは読み出しコマンドにおいてCPU10によって指定されている論理アドレスを第1アドレス変換テーブルを参照して物理アドレスに変換する。SCMモジュール30においては、このように第1アドレス変換部316によって変換された物理アドレスに基づいてSCM32が有する第1メモリ領域32aにアクセスすることができる。
【0234】
すなわち、本実施形態において、CPU10がSCMモジュール30にアクセスする際に使用する論理アドレスと第1メモリ領域32a内の物理アドレスとの対応関係は、第1アドレス変換テーブルを用いて管理される。
【0235】
第2アドレス変換部321は、例えば書き込みコマンドまたは読み出しコマンドにおいてCPU10によって指定されている論理アドレスを第2アドレス変換テーブルを参照して物理アドレスに変換する。SCMモジュール30においては、このように第2アドレス変換部321によって変換された物理アドレスに基づいてSCM32が有する第2メモリ領域32bにアクセスすることができる。
【0236】
すなわち、本実施形態において、CPU10がSCMモジュール30にアクセスする際に使用する論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係は、第2アドレス変換テーブルを用いて管理される。
【0237】
第2メモリ領域管理部322は、SCM32が有する第2メモリ領域32bの空き領域を管理する。
【0238】
本実施形態におけるSCM32は、第1メモリ領域32a及び第2メモリ領域32bを有する(つまり、第1メモリ領域32a及び第2メモリ領域32bに分割されている)点が前述した本実施形態の比較例におけるSCM32´とは異なる。
【0239】
なお、前述した本実施形態の比較例においては、アドレス変換テーブルにおける論理アドレスと物理アドレスとの対応関係は256Byte単位で管理するものとして説明したが、本実施形態においては、上記した第1アドレス変換テーブルにおける論理アドレスと物理アドレス(第1メモリ領域32a内の物理アドレス)との対応関係は、前述した本実施形態の比較例と同様に256Byte単位で管理する。換言すれば、第1メモリ領域32aは、CPU10のアクセス単位(64Byte)よりも大きい単位でデータを管理するメモリ領域(本実施形態の比較例において説明したSCM32´と同様のメモリ領域)である。
【0240】
一方、上記した第2アドレス変換テーブルにおける論理アドレスと物理アドレス(第2メモリ領域32b内の物理アドレス)との対応関係は、CPU10のアクセス単位に等しい64Byte単位で管理する。換言すれば、第2メモリ領域32bは、CPU10のアクセス単位(64Byte)でデータを管理するメモリ領域である。
【0241】
なお、前述した本実施形態の比較例においてはSCMモジュール30´が電源断検知部34´及びバッテリ35´を備えていてもよいとして説明したが、本実施形態においても、SCMモジュール30は、当該電源断検知部34´及びバッテリ35´に相当する電源断検知部34及びバッテリ35を備えているものとする。
【0242】
次に、図23を参照して、図22に示すSCM32の内部構造の一例について説明する。図23においては、SCM32に備えられる1つのSCMチップの内部構造について説明するが、他のSCMチップについても同様の内部構造を有している。
【0243】
SCM32は、前述したSCM32´と同様に、Bank0~B-1を有している。また、SCM32が有するBank0~B-1は、それぞれP個のPage(Page0~P-1)に分割されている。
【0244】
ここで、SCM32が有するメモリ領域は、上記したように第1メモリ領域32a及び第2メモリ領域32bに分割されている。図23に示す例では、第1メモリ領域32aには、Bank0~B-1のPage0~P-9が割り当てられている。一方、第2メモリ領域32bには、Bank0~B-1のPageP-8~P-1が割り当てられている。
【0245】
図23に示す第1メモリ領域32a及び第2メモリ領域32bは一例であるが、上記したように第1アドレス変換テーブル(つまり、第1メモリ領域32a)における論理アドレス及び物理アドレスとの対応関係は256Byte単位で管理され、第2アドレス変換テーブル(つまり、第2メモリ領域32b)における論理アドレス及び物理アドレスとの対応関係は64Byte単位で管理されるため、第1メモリ領域32a及び第2メモリ領域32bが同程度のサイズである場合には、第1アドレス変換テーブルは第2アドレス変換テーブルよりもサイズが大きくなる。このため、本実施形態においては、第2アドレステーブルのサイズが大きくなることを抑制するために、第1メモリ領域32aには、例えば少なくとも第2メモリ領域32bよりも多い記憶領域が割り当てられていてもよい。
【0246】
なお、本実施形態において第1メモリ領域32a及び第2メモリ領域32bは、固定されているものとして説明するが、動的に変更されてもよい。
【0247】
ここで、上記した第2メモリ領域32bの空き領域は第2メモリ領域管理部322によって管理されるが、図24を参照して、当該第2メモリ領域32bの空き領域の管理について具体的に説明する。
【0248】
上記したように第2メモリ領域32bにおいてはAppend Write方式を用いてデータが追記されるが、本実施形態においては、第2メモリ領域32bの空き領域はリングバッファ方式で管理される。
【0249】
具体的には、第2メモリ領域32bの空き領域は、Headポインタ32c及びTailポインタ32dを含む空き領域管理情報を用いて管理される。
【0250】
Headポインタ32cは、第2メモリ領域32bの空き領域のうち、次にデータが書き込まれる領域(Page)を示す。なお、Headポインタ32cは、例えばBank番号及びPage番号を含む。Headポインタ32cは、第2メモリ領域32bにデータが書き込まれると、次にデータが書き込まれるPageを示すように移動する(更新される)。
【0251】
この場合、Headポインタ32cは、図24に示す矢印のように、Bankを跨ぐ方向に移動し、全てのBankの同一Page番号(のPage)にデータが書き込まれると、最初のBankに戻って次のPage番号にデータが書き込まれる。具体的には、図24に示すように例えばHeadポインタ32cがBank0のPageP-4を示しており、当該Bank0のPageP-4にデータが書き込まれたものとすると、Headポインタ32cは、Bank1のPageP-4に移動する。このように順次Headポインタ32cが移動していき、例えばBankB-1のPageP-4にデータが書き込まれると、Headポインタ32cは、Bank0のPageP-3に移動する。
【0252】
なお、例えばHeadポインタ32cによって示されるPageにデータを書き込む際に当該Pageに該当するBankがBusy状態にある場合には、当該Pageへのデータの書き込みをスキップし、当該Headポインタ32cが次に移動する先のPageにデータを書き込むようにしてもよい。
【0253】
ここで、上記したように第2メモリ領域32bに書き込まれたデータは第1メモリ領域32aに書き戻されるが、Tailポインタ32dは、当該第2メモリ領域32bに書き込まれているデータのうち、次に第1メモリ領域32aに書き戻されるデータが書き込まれている領域(Page)を示す。なお、Tailポインタ32dは、Headポインタ32cと同様に、Bank番号及びPage番号を含む。
【0254】
Tailポインタ32dは、第2メモリ領域32bに書き込まれているデータが第1メモリ領域32aに書き戻されると、次に第1メモリ領域32aに書き戻されるデータが書き込まれているPageを示すように移動する(更新される)。なお、Tailポインタ32dの移動方向は、Headポインタ32cと同様である。また、Tailポインタ32dは少なくともと第2メモリ領域32bのデータが書き込まれているPageを示すため、当該Tailポインタ32dがHeadポインタ32cを追い越すことはない。つまり、第2メモリ領域32bに書き込まれているデータが全て第1メモリ領域32aに書き戻された状態となった場合には、Headポインタ32c及びTailポインタ32dは同一のPageを示すことになる。
【0255】
このようなHeadポインタ32c及びTailポインタ32dによれば、第2メモリ領域32bの空き領域を適切に管理することが可能となる。図24に示す例において、Headポインタ32cは、Bank0のPageP-4を示している。一方、TailポインタBank1のPageP-7を示している。これによれば、図24においてハッチングが付されていないPageが空き領域であり、ハッチングが付されている領域が有効なデータ(つまり、第1メモリ領域32aに書き戻されるべきデータ)が書き込まれている領域であることを把握することができる。
【0256】
なお、本実施形態に係るSCMモジュール30(SCMコントローラ31)において、Headポインタ32c及びTailポインタ32d(を含む空き領域管理情報)は、例えば図25に示す空き領域管理テーブル(リングバッファ管理テーブル)において管理されるものとする。
【0257】
次に、本実施形態において用いられるアドレス変換テーブルについて説明する。なお、第1メモリ領域32aに書き込まれるデータの論理アドレス及び物理アドレスの対応関係を管理するための第1アドレス変換テーブルについては、前述した本実施形態の比較例において説明した通りであるため、ここではその詳しい説明を省略する。ここでは、第2アドレス変換テーブルについて主に説明する。
【0258】
図26は、第2メモリ領域32bに書き込まれるデータの論理アドレス及び物理アドレスの対応関係を管理するための第2アドレス変換テーブルのデータ構造の一例を示す。本実施形態において、第2アドレス変換テーブルにおける論理アドレス及び物理アドレスの対応関係の管理には、セットアソシアティブ管理方式を採用する。
【0259】
この場合、第2アドレス変換テーブルは各インデックスに対応づけて複数のエントリを有し、当該複数のエントリの各々は、Valid、タグ及び物理アドレス(SCM物理アドレス)を含む。このような第2アドレス変換テーブルにおいては、1つのエントリ(Valid、タグ及び物理アドレス)で1つの64Byteのデータを管理することができる。
【0260】
Validは、当該エントリが有効であるか無効であるかを示す。なお、Valid「1」はエントリ(つまり、論理アドレスと物理アドレスとの対応関係)が有効であることを示し、Valid「0」はエントリが無効であることを示す。
【0261】
ここで、前述した本実施形態の比較例において説明したアドレス変換テーブル(つまり、第1アドレス変換テーブル)においては、CPU10によって指定される論理アドレスの上位ビットをインデックスとして用いるものとして説明したが、第2アドレス変換テーブルにおいては、図27に示すようにCPU10によって指定される論理アドレスの下位ビットをインデックス、当該論理アドレスの上位ビットをタグとして用いる。
【0262】
また、第1アドレス変換テーブルに格納されている物理アドレスは256Byteのデータが格納されている物理アドレスに相当するが、第2アドレス変換テーブルにおける物理アドレスは、64Byteのデータが格納されている位置を示す必要があるため、第1アドレス変換テーブルに格納されている物理アドレスと比較して2ビット多いアドレスである。
【0263】
また、第2アドレス変換テーブルにおいては、インデックスに対応づけて登録数が格納されている。この登録数は、インデックスに対応づけられているValidが「1」であるエントリの数を示す。
【0264】
ここで、第2アドレス変換テーブルの基本的な動作について説明する。まず、第2メモリ領域32bに64Byteのデータが書き込まれた場合、当該データにアクセスする際に使用される論理アドレス及び当該データが書き込まれた第2メモリ領域32b内の物理アドレスの対応情報(対応関係)を第2メモリ領域32bに登録する。なお、第2メモリ領域32bに同一論理アドレスのデータが書き込まれた場合、論理アドレス及び物理アドレスの対応情報は更新される。
【0265】
一方、第2メモリ領域32bに書き込まれている64Byteのデータが無効化された場合、第2アドレス変化テーブルから該当するエントリが削除される。なお、データの無効化は、CPU10からの最新の64Byteのデータが第1メモリ領域32aに書き込まれた場合及び当該データが第2メモリ領域32bから第1メモリ領域32aに書き戻された場合等に行われる。
【0266】
このような第2アドレス変換テーブルによれば、例えば書き込みコマンドまたは読み出しコマンドにおいてCPU10によって指定された論理アドレスを対応する物理アドレスに変換することが可能となる。
【0267】
具体的には、書き込みコマンドまたは読み出しコマンドにおいてCPU10によって指定された論理アドレスの下位ビットに基づいてインデックスを参照する。このように参照されたインデックスに対応づけられている複数のエントリの各々に登録されているタグと、論理アドレスの上位ビットとを比較する。論理アドレスの上位ビットと一致するタグが存在する場合、ヒットと判定し、当該タグが登録されているエントリのSCM物理アドレスを取得する。これにより、論理アドレスから物理アドレスへの変換が完了する。
【0268】
なお、第2アドレス変換テーブルはインデックス毎に複数のエントリを有するが、特定のインデックスの論理アドレス対するデータの書き込みが多い場合、第2アドレス変換テーブルにおける当該特定のインデックスへの登録に偏りが生じる。このようにインデックス間に偏りがある場合、当該インデックスに対応づけられているエントリのValidが全て「1」となっており、新たな論理アドレスと物理アドレスとの対応関係を登録することができない場合がある。このような事態を回避するためには、第2アドレス変換テーブルが有するエントリの数を増加させる、またはインデックスの数を増加させる等の対策をとることができる。なお、ここではインデックス数及びエントリ数が固定されている場合を想定している。
【0269】
また、CPU10上で実行されるアプリケーションプログラムは、アラインメントの揃っている論理アドレスに対してアクセスすることが多いため、例えばインデックスの小さいエントリが埋まりやすい(登録されやすい)傾向にある。このため、例えばハッシュ関数を用いて論理アドレスのハッシュ値を計算し、当該ハッシュ値の上位ビットをタグ、下位ビットをインデックスとして用いる(つまり、当該ハッシュ値を用いて論理アドレスと物理アドレスとの対応関係を管理する)構成とすることで、単に論理アドレスの下位ビットをインデックスとして用いる場合に生じるインデックス間の偏りを解消するようにしてもよい。ただし、上記したハッシュ値を計算する際に用いられるハッシュ関数は、複数の異なる論理アドレスから計算されるハッシュ値が衝突しないものであることを要する。例えば、CPU10が指定する論理アドレス「0x0000001」及び「0x0000002」のハッシュ値を計算した結果、両ハッシュ値とも「0x0000003」となった場合を考える。本来であれば、論理アドレス「0x0000001」及び「0x0000002」を物理アドレスに変換すると、異なる物理アドレスが取得されるはずであるが、ハッシュ値が衝突することで、第2アドレス変換テーブルの同一エントリを参照することになるため、同一の物理アドレスが取得されてしまい、意図する動作を行うことができない。すなわち、論理アドレスと当該論理アドレスから計算されるハッシュ値とは1対1の関係でなければならない。
【0270】
なお、例えば上記したハッシュ値を用いたとしてもインデックス間の偏りの解消が困難であるような場合には、登録数が多いインデックスに対応づけられているエントリの物理アドレスに書き込まれているデータ(つまり、第2メモリ領域32bに書き込まれているデータ)を優先的に第1メモリ領域32aに書き戻すようにしてもよい。
【0271】
また、上記した第2アドレス変換テーブルはSCM32に格納されて不揮発化されているが、当該第2アドレス変換テーブルを参照する場合、当該第2アドレス変換テーブルは例えばDRAM33に転送(キャッシュ)されている。この場合、第2アドレス変換テーブルは例えば第2メモリ領域32bに対するデータの書き込みに応じてDRAM33上で更新されるが、当該更新された第2アドレス変換テーブルは、システム管理情報として所定のタイミングでSCM32に書き込まれる(つまり、不揮発化される)。
【0272】
以下、本実施形態に係るSCMモジュール30の動作について説明する。なお、以下の説明では、本実施形態の比較例と同様の部分についてはその詳しい説明を省略し、本実施形態の比較例と異なる部分について主に述べる。
【0273】
CPU10からコマンドが送信された場合には、SCMモジュール30においては、前述した図10に示す処理が実行される。以下、本実施形態に係るSCMモジュール30において実行される書き込み処理及び読み出し処理について詳細に説明する。
【0274】
まず、図28のフローチャートを参照して、書き込み処理の処理手順の一例について説明する。
【0275】
書き込み処理においては、前述した図11に示すステップS11~S15の処理に相当するステップS101~S105の処理が実行される。
【0276】
ステップS105においてバッファ314に格納されているデータを不揮発化すると判定された場合(ステップS105のYES)、制御部312は、当該データを書き込む書き込み先を選択する処理(以下、書き込み先選択処理と表記)を実行する(ステップS106)。このステップS106においては、例えばコントローラ31の内部状態または不揮発性メモリの状態に基づいて、データの書き込み先として第1メモリ領域32a(つまり、256Byte単位でデータが管理されるメモリ領域)及び第2メモリ領域32b(つまり、64Byte単位でデータが管理されるメモリ領域)の一方が選択される。
【0277】
なお、上記したように第1メモリ領域32aに対してデータはIn-Place Update方式で書き込まれ、第2メモリ領域32bに対してデータはAppend Write方式で書き込まれることから、ステップS106において書き込み先を選択することは、データの書き込み方式を選択(決定)することに相当する。この書き込み先選択処理の詳細については後述する。
【0278】
次に、ステップS106において第2メモリ領域32bが選択された否かが判定される(ステップS107)。
【0279】
第2メモリ領域32bが選択されたと判定された場合(ステップS107のYES)、バッファ314に格納されているデータを第2メモリ領域32bに対して不揮発化する処理(第2メモリ領域32bに対する不揮発化処理)が実行される(ステップS108)。なお、第2メモリ領域32bに対する不揮発化処理の詳細については後述する。
【0280】
一方、第2メモリ領域32bが選択されていない(つまり、第1メモリ領域32aが選択された)と判定された場合(ステップS107のNO)、バッファ314に格納されているデータを第1メモリ領域32aに対して不揮発化する処理(第1メモリ領域32aに対する不揮発化処理)が実行される(ステップS109)。なお、このステップS109においては、前述した図11に示すステップS16と同様の処理が実行される。
【0281】
次に、図29のフローチャートを参照して、上記した書き込み先選択処理(図28に示すステップS106の処理)の処理手順の一例について説明する。この書き込み先選択処理においては、バッファ314の状態及びSCM32の状態等に応じて、第1メモリ領域32a(つまり、In-Place Update方式)及び第2メモリ領域32b(つまり、Append Write方式)の一方を書き込み先として選択する。
【0282】
まず、制御部312は、バッファ314に格納されているデータを第2メモリ領域32bに書き込むことが可能であるか否かを判定する(ステップS111)。
【0283】
このステップS111において、制御部312は、例えば第2メモリ領域32bにデータを書き込むことが可能な空き領域がない場合にはデータを第2メモリ領域32bに書き込むことが可能でないと判定する。なお、第2メモリ領域32bの空き領域は、上記した空き領域管理テーブルにおいて管理されているHeadポインタ32c及びTailポインタ32dに基づいて把握することができる。
【0284】
また、上記したように第2メモリ領域32bにおける論理アドレスと物理アドレスとの対応関係は第2アドレス変換テーブルにおいて管理されるが、ステップS111においては、当該第2アドレス変換テーブルに空きエントリがない(つまり、バッファ314に格納されているデータが第2メモリ領域32bに書き込まれたとしても当該データの論理アドレスと物理アドレスとの対応関係を管理することができない)場合には、データを第2メモリ領域32bに書き込むことが可能でないと判定してもよい。
【0285】
第2メモリ領域32bに書き込むことが可能であると判定された場合(ステップS111のYES)、制御部312は、予め定められている複数の条件に基づいて書き込み先を選択する。
【0286】
具体的には、制御部312は、第1条件が満たされているか否かを判定する(ステップS112)。
【0287】
ここで、前述した本実施形態の比較例において説明したようにデータを不揮発化するためのリードモディファイライト処理はデータの書き込みに時間を要する。このため、書き込みコマンドが発生する頻度が高い(つまり、書き込みコマンドの数が多い)場合に第1メモリ領域32aへの書き込み処理を実行すると、リードモディファイライト処理に時間を要し、効率的に書き込みコマンドを処理することが困難となる。
【0288】
そこで、本実施形態において、書き込み先を選択するための第1条件は、第1メモリ領域32aにデータを書き込む際にリードモディファイライト処理が実行されると効率的に書き込みコマンドを処理することができない程度に当該書き込みコマンドの発生頻度(CPU10からの書き込みアクセス頻度)が高いことを含む。
【0289】
なお、リードモディファイライト処理が必要であるか否かは、図13に示すステップS43に相当する処理が実行されることによって判定可能である。また、「書き込みコマンドの発生頻度が高い」とは、所定時間内に発生する書き込みコマンドの数が予め定められた値以上であること等をいう。
【0290】
第1条件が満たされていると判定された場合(ステップS112のYES)、制御部312は、バッファ314に格納されているデータの書き込み先として第2メモリ領域32b(つまり、書き込み方式としてAppend Write方式)を選択する(ステップS113)。
【0291】
書き込みコマンドが発生する回数が予め定められている値未満であり、第1条件が満たされていないと判定された場合(ステップS113のNO)、制御部312は、第2条件が満たされているか否かを判定する(ステップS114)。
【0292】
ここで、バッファ314に格納されているデータを第1メモリ領域32aに書き込むとした場合に当該データが書き込まれる第1メモリ領域32a内の物理アドレスに該当するBankがBusy状態にある場合には、当該Busy状態が解消する(つまり、Ready状態に遷移する)まで待機する必要があり、高速な書き込み処理を実行することができない(つまり、書き込み性能が低下する)。
【0293】
このため、本実施形態において、書き込み先を選択するための第2条件は、バッファ314に格納されているデータにアクセスするための論理アドレスに対応する第1メモリ領域32a内の物理アドレスに該当するBankがBusy状態にあることを含む。
【0294】
第2条件が満たされていると判定された場合(ステップS114のYES)、上記したステップS113の処理が実行される(つまり、書き込み先として第2メモリ領域32bが選択される)。
【0295】
第2条件が満たされていないと判定された場合(ステップS114のNO)、制御部312は、第3条件が満たされているか否かを判定する(ステップS115)。
【0296】
ここで、上記したように例えばバッファ314に格納されているデータにアクセスするための論理アドレスが近い過去に頻繁にCPU10によって指定される(つまり、当該データが頻繁に書き込まれるデータである)場合には、当該論理アドレスに対応する第1メモリ領域32a内の物理アドレス(Page)に含まれるメモリセルが疲弊する。
【0297】
このため、本実施形態において、書き込み先を選択するための第3条件は、バッファ314に格納されているデータが近い過去に頻繁に書き込まれるデータ(Hotデータ)であることを含む。
【0298】
なお、ステップS115においては、例えばバッファ314に格納されているデータにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルに格納されている場合に、当該論理アドレスを使用してアクセスされるデータが近い過去に書き込まれているとして、第3条件が満たされていると判定されるものとする。
【0299】
第3条件が満たされていると判定された場合(ステップS115のYES)、上記したステップS113の処理が実行される(つまり、書き込み先として第2メモリ領域32bが選択される。
【0300】
なお、上記した第3条件を満たすか否かの判定において第2アドレス変換テーブルを参照するのは、バッファ314に格納されているデータが頻繁に書き込まれるデータである場合、この第3条件によって当該データが第2メモリ領域32bに書き込まれるからである。
【0301】
第3条件が満たされていないと判定された場合(ステップS115のNO)、制御部312は、第4条件が満たされているか否かを判定する(ステップS116)。
【0302】
ここで、本実施形態に係るSCMモジュール30においては第1アドレス変換テーブルがSCM32にシステム管理情報として格納されているが、書き込みコマンドまたは読み出しコマンドにおいて指定されている論理アドレスに応じて当該第1アドレス変換テーブルの一部(つまり、当該論理アドレスと物理アドレスとの対応関係)が例えばDRAM33等にキャッシュされる構成を採用していてもよい。この場合、バッファ314に格納されているデータにアクセスするための論理アドレスと物理アドレスとの対応関係がキャッシュされている(つまり、キャッシュヒットした)場合には、当該キャッシュされている対応関係(つまり、第1アドレス変換テーブルの一部)を参照して高速に当該論理アドレスを物理アドレスに変換することができる。しかしながら、バッファ314に格納されているデータにアクセスするための論理アドレスと物理アドレスとの対応関係がキャッシュされていない(つまり、キャッシュミスした)場合には、当該論理アドレスを物理アドレスに変換するためには第1アドレス変換テーブルをSCM32から読み出す必要があり(つまり、リフィル処理が必要であり)、書き込み性能が低下する。
【0303】
このため、本実施形態において、書き込み先を選択するための第4条件は、バッファ314に格納されているデータにアクセスするための論理アドレスがキャッシュミスする(つまり、当該論理アドレスと物理アドレスとの対応関係がキャッシュされていない)ことを含む。
【0304】
第4条件が満たされていると判定された場合(ステップS116のYES)、上記したステップS113の処理が実行される(つまり、書き込み先として第2メモリ領域32bが選択される)。
【0305】
第4条件が満たされていないと判定された場合(ステップS116のNO)、制御部312は、バッファ314に格納されているデータの書き込み先として第1メモリ領域32a(つまり、書き込み方式としてIn-Place Update方式)を選択する(ステップS117)。
【0306】
上記した書き込み先選択処理においては、第1~第4条件のうちの少なくとも1つが満たされる場合には書き込み先として第2メモリ領域32bが選択される。
【0307】
なお、図29に示す処理は、バッファ314に格納されているデータの全てを対象として実行されてもよいし、当該データの一部のみを対象として実行されてもよい。
【0308】
また、図29に示す例では、書き込み先を選択するための条件として第1~第4条件について説明したが、当該第1~第4条件のうちの少なくとも1つを用いる構成であってもよいし、当該第1~第4条件以外の条件を用いて書き込み先を選択する構成としても構わない。具体的には、例えばバッファ314に格納されているデータを第1メモリ領域32aに書き込むとした場合に、リードモディファイライト処理が必要であるという条件を満たす場合には、第2メモリ領域32bを書き込み先として選択するようにしてもよい。また、リードモディファイライト処理が必要である場合であっても、第1条件を満たさない(書き込みコマンドの発生頻度が高くない)場合には、書き込み先として第1メモリ領域32aを選択するようにしてもよい。
【0309】
また、図29に示す例では、第1~第4条件のうちの少なくとも1つが満たされる場合に書き込み先として第2メモリ領域32bが選択されるものとして説明したが、例えば第1~第4条件のうちの2つ以上の条件が満たされた場合に第2メモリ領域32bが選択される構成としても構わない。すなわち、本実施形態において、書き込み先は第1~第4条件を適宜組み合わせて判定する構成としてもよい。
【0310】
次に、図30のフローチャートを参照して、上記した第2メモリ領域32bに対する不揮発化処理(図28に示すステップS108の処理)の処理手順の一例について説明する。
【0311】
まず、バッファ管理部315は、第2バッファ管理テーブルを参照して、不揮発化の対象となるデータ(不揮発化対象データ)を選択する(ステップS121)。
【0312】
なお、ステップS121においては、例えばバッファ314に格納されているデータのうち最初にバッファ314に格納されたデータ(つまり、最も古いデータ)を不揮発化対象データとして選択することができる。
【0313】
また、ステップS121においては、第1メモリ領域32aにおいて管理される256Byteのデータが揃っていないエントリが存在する場合には、当該256Byteのデータの一部に相当する64Byteのデータを不揮発化対象データとして選択してもよい。
【0314】
なお、ステップS121においては、不揮発化対象データとして4つの64Byteのデータが選択されるものとする。不揮発化対象データとして4つの64Byteのデータを選択することができない(例えば、4つの64Byteのデータを揃えることができない)場合、4つの64Byteのデータのうちの1つは空のデータ(例えば、全ビットが0のデータ)としてもよい。
【0315】
次に、制御部312は、ステップS121において選択された不揮発化対象データを不揮発化する(ステップS122)。
【0316】
以下、ステップS122の処理について具体的に説明する。ステップS122において、制御部312は、上記したリングバッファ管理テーブルにおいて管理されているHeadポインタ32cに基づいて、不揮発化対象データが書き込まれる第2メモリ領域32b内の物理アドレス(Page)を決定(導出)する。
【0317】
次に、制御部312は、不揮発化対象データ(4つの64Byteのデータ)を、256Byte(のデータ)にパッキングする。
【0318】
制御部312は、このように4つの64Byteのデータがパッキングされた256Byteのデータを、上記したようにHeadポインタ32cに基づいて決定された第2メモリ領域32b内の物理アドレスを使用してSCM32が有する第2メモリ領域32bに書き込む。
【0319】
この場合、SCMインタフェース319を介してSCMにデータが書き込まれるが、当該データは、制御部312による制御の下、ECCエンコーダ317によってECCエンコード処理が実行され、データ転送部313によってバッファからSCM32(が有する第2メモリ領域32b)に転送される。
【0320】
ここで、上記した図21に示すように、第2メモリ領域32bに書き込まれる256Byteのデータにはメタデータ及びECCパリティが付されており、当該第2メモリ領域32bには、前述した本実施形態の比較例において説明したECCフレームと同様のデータ構造を有するECCフレームが書き込まれる。
【0321】
しかしながら、前述した本実施形態の比較例において説明したECCフレームを構成する256Byteのデータに含まれる4つの64Byteのデータは連続する4つの論理アドレスを使用してアクセスされるデータでなければならないが、本実施形態における第2メモリ領域32bにおいては64Byte単位でデータが管理され、かつ、Append Write方式でデータが書き込まれるため、当該第2メモリ領域32bに書き込まれるECCフレームを構成する256Byteのデータの各々にアクセスするための論理アドレスは連続していなくてもよい。
【0322】
すなわち、本実施形態において第2メモリ領域32bにデータを書き込む際には、論理アドレスに依存することなく、任意の4つの64Byteのデータをパッキングして、メタデータ及びECCパリティを付加して第2メモリ領域32bに追記することができるため、第1メモリ領域32aに書き込む(つまり、リードモディファイライト処理を実行する)場合と比較して書き込み性能を向上させることができる。
【0323】
ステップS122の処理が実行されると、第2アドレス変換テーブルが更新される(ステップS123)。
【0324】
この場合、例えばSCM32に書き込まれた不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて既に管理されている(つまり、当該論理アドレスが第2アドレス変換テーブルにおいてヒットする)か否かが判定される。
【0325】
不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて既に管理されていると判定された場合、制御部312は、当該物理アドレスを当該不揮発化対象データが書き込まれた物理アドレスに更新する。
【0326】
一方、不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されていないと判定された場合、制御部312は、当該論理アドレスの下位ビット(インデックス)に基づいて第2アドレス変換テーブルが有するエントリを割り当てる。制御部312は、割り当てられたエントリに含まれるValidを「1」に設定し、当該エントリに含まれるタグに当該論理アドレスの上位ビットを設定し、当該エントリに含まれる物理アドレスに不揮発化対象データが書き込まれた物理アドレスを設定する。
【0327】
なお、ステップS123の処理が実行された場合、制御部312は、第2アドレス変換テーブルの更新に関するログ(以下、テーブル更新ログと表記)をSCMコントローラ31内の所定の領域(以下、テーブル更新ログ領域と表記)に追記(蓄積)しておくものとする。なお、このテーブル更新ログには、例えば論理アドレスと物理アドレスとの対応関係と、当該対応関係が有効であるか無効であるかを示すフラグ(無効化フラグ)が含まれているものとする。
【0328】
ステップS123の処理が実行されると、前述した図13に示すステップS51の処理に相当するステップS124の処理が実行される。なお、ここではバッファされた任意の4つの64Byteのデータが不揮発化対象データであるため、ステップS124においては、第2バッファ管理テーブルの1以上のエントリが解放される。
【0329】
次に、第2メモリ領域管理部322は、上記した空き領域管理情報を更新する(ステップS125)。この場合、第2メモリ領域管理部322は、空き領域管理テーブルにおいて管理されているHeadポインタ32cを、不揮発化データが書き込まれたPageの次のPage(つまり、上記した第2メモリ領域32bにおいてデータが書き込まれる順番に従って次にデータが書き込まれるPage)を示すように更新する。
【0330】
ここで、制御部312は、第2メモリ領域32bに書き込まれているデータを第1メモリ領域32aに書き戻すか否かを判定する(ステップS126)。
【0331】
なお、ステップS126においては、例えば第2メモリ領域32bの空き領域(の容量)が予め定められた値未満である場合に、第2メモリ領域32bに書き込まれているデータを第1メモリ領域32aに書き戻すと判定される。なお、第2メモリ領域32bの空き領域は、上記した空き領域管理テーブルにおいて管理されている空き領域管理情報(Headポインタ32c及びTailポインタ32d)に基づいて特定することができる。
【0332】
第2メモリ領域32bに書き込まれているデータを第1メモリ領域32aに書き戻すと判定された場合、当該データの書き戻し処理が実行される(ステップS127)。
【0333】
一方、第2メモリ領域32bに書き込まれているデータを第1メモリ領域32aに書き戻さないと判定された場合、ステップS127の処理は実行されず、図30の処理は終了される。
【0334】
次に、図31のフローチャートを参照して、上記した書き戻し処理(図30に示すステップS127の処理)の処理手順の一例について説明する。
【0335】
なお、書き戻し処理においては、第2メモリ領域32b(64Byte単位でデータが管理されているメモリ領域)に書き込まれている例えば64Byteのデータが第1メモリ領域32a(256Byte単位でデータが管理されているメモリ領域)に書き戻される。この場合、第1メモリ領域32aにおいて管理されている256Byteのデータのうちの書き戻される64Byteのデータ以外のデータ(192Byteのデータ)が第1メモリ領域32a、第2メモリ領域32b及びバッファ314のいずれに書き込まれているかを考慮して、当該書き戻されるデータに対してリードモディファイライト処理が実行される。
【0336】
まず、制御部312は、第2メモリ領域32bに書き込まれているデータの中から第2メモリ領域32bから第1メモリ領域32aに書き戻されるデータ(以下、書き戻し対象データと表記)を決定する(ステップS131)。
【0337】
なお、書き戻し対象データは、第2メモリ領域32bに書き込まれている同一のECCフレームを構成する256Byteのデータであり、上記した空き領域管理テーブルにおいて管理されている空き領域管理情報に含まれるTailポインタ32dに基づいて決定される。
【0338】
また、図26に示す第2アドレス変換テーブルにおいて登録に偏りが生じている場合には、登録数(エントリの数)が多いインデックスを優先的に選択して書き戻し対象データとしてもよい。具体的には、第2アドレス変換テーブルで登録数が多いインデックスの中の1エントリを選択して当該エントリで管理されているデータを書き戻し対象データとして決定する。この場合、Tailポインタ32dは更新される必要はない。
【0339】
なお、ステップS131において決定される書き戻し対象データは、256Byte以上のデータであってもよい。
【0340】
次に、バッファ管理部315は、ステップS131において決定された書き戻し対象データ(256Byteのデータ)に対してバッファ領域を割り当てる(ステップS132)。なお、バッファ領域を割り当てる処理については前述した図11に示すステップS11の処理と同様であるため、ここではその詳しい説明を省略する。
【0341】
ステップS132の処理が実行されると、制御部312は、ステップS131において決定された書き戻し対象データを第2メモリ領域32bから読み出す(ステップS133)。なお、ステップS133の処理は、前述した図13に示すステップS45の処理に相当する処理であるため、ここではその詳しい説明を省略する。
【0342】
ステップS133において第2メモリ領域32bから読み出された書き戻し対象データは、ステップS132において割り当てられたバッファ領域に格納される。
【0343】
以下のステップS134以降の処理は、ステップS131において決定された書き戻し対象データ(つまり、ステップS133において第2メモリ領域32bから読み出された書き戻し対象データ)に含まれる64Byteのデータ毎に実行される。以下の説明では、ステップS134以降の処理が実行される64Byteのデータを書き戻し対象64Byteデータと称する。
【0344】
ここで、例えば特定の論理アドレスを使用してアクセスされる64Byteの第1データが第2メモリ領域32b内の第1物理アドレスに書き込まれた後に、当該特定の論理アドレスを使用してアクセスされる64Byteの第2データが第2メモリ領域32b内の第2物理アドレスに書き込まれた場合を想定する。
【0345】
この場合において、第1物理アドレスに書き込まれている第1データが書き戻し対象64Byteデータであるものとすると、当該第1データは特定の論理アドレスを使用してアクセスすべき最新のデータではない(つまり、第1データは有効なデータではなく、第2データが有効なデータである)ため、当該第1データを第1メモリ領域32aに書き戻す必要はない。
【0346】
そこで、本実施形態においては、上記した第1データの有効性を判定するために、上記した図30に示すステップS122において第1データ(不揮発化対象データ)を第2メモリ領域32bに対して不揮発化する際に、当該第1データが第2メモリ領域32bに書き込まれたことを示すログ(以下、書き込みログと表記)を残しておくものとする。
【0347】
この書き込みログは、例えば第1データが書き込まれた第2メモリ領域32b内の物理アドレスと当該第1データにアクセスするための論理アドレスとを含み、上記したECCデータを構成するメタデータとして第2メモリ領域32bに書き込まれる。
【0348】
本実施形態においては、このようにメタデータとして第2メモリ領域32bに書き込まれる書き込みログに基づいて、書き戻し対象64Byteデータの有効性を判定する処理(有効性判定処理)が実行されるものとする(ステップS134)。
【0349】
以下、ステップS134において実行される有効性判定処理について説明する。まず、制御部312は、書き戻し対象64Byteデータを含む256Byteデータから構成されるECCフレームから書き込みログ(メタデータ)を取得する。なお、この書き込みログには、書き戻し対象64Byteデータが書き込まれている物理アドレスと当該書き戻し対象64Byteデータにアクセスするための論理アドレスが含まれている。
【0350】
次に、第2アドレス変換部321は、第2アドレス変換テーブルを参照して、書き戻し対象データにアクセスするための論理アドレス(書き込みログに含まれる論理アドレス)を物理アドレスに変換する。
【0351】
制御部312は、書き込みログに含まれている物理アドレスと第2アドレス変換テーブルを参照して論理アドレスから変換された物理アドレスとを比較し、両者が一致している場合には書き戻し対象64Byteデータが有効であると判定する。一方、書き込みログに含まれている物理アドレスと第2アドレス変換テーブルを参照して論理アドレスから変換された物理アドレスとが一致しない場合には、制御部312は、書き戻し対象64Byteデータが有効でない(つまり、無効である)と判定する。
【0352】
なお、上記した有効性判定処理において書き戻し対象64Byteデータが有効であると判定された場合であっても、第2アドレス変換テーブルにおいて当該書き戻し対象64Byteデータにアクセスするための論理アドレスと物理アドレスとの対応関係(エントリ)が無効化されている場合には、当該書き戻し対象64Byteデータは、有効でないと判定される。「論理アドレスと物理アドレスとの対応関係が無効化されている」とは、当該論理アドレスの下位ビット(インデックス)に対応づけられているエントリであって、当該論理アドレスの上位ビットを含むエントリに含まれるValidに「0」が設定されていることをいう。
【0353】
以下、有効性判定処理について具体例を用いて説明する。ここでは、まず、論理アドレス=0x1000の第1データ(64Byteのデータ)が第2メモリ領域32b内の物理アドレス=0xA000に書き込まれた場合を想定する。この場合、第2アドレス変換テーブルには、論理アドレス「0x1000」と物理アドレス「0xA000」との対応関係が格納される。更に、第1データを含む256ByteのデータがECCフレームとして第2メモリ領域32bに書き込まれる際には、当該256Byteのデータには物理アドレス「0xA000」と論理アドレス「0x1000」とを含む書き込みログがメタデータとして付加される。
【0354】
次に、論理アドレス=0x1000の第2データ(64Byteのデータ)が第2メモリ領域32b内の物理アドレス=0xB000に書き込まれた場合を想定する。この場合、第2アドレス変換テーブルにおいては、論理アドレス「0x1000」に対応する物理アドレスが「0xA000」から「0xB000」に変更(更新)される。更に、第2データを含む256ByteのデータがECCフレームとして第2メモリ領域32bに書き込まれる際には、当該256Byteのデータには物理アドレス「0xB000」と論理アドレス「0x1000」とを含む書き込みログがメタデータとして付加される。
【0355】
この場合において、先に第2メモリ領域32bに書き込まれた第1データが書き戻し対象64Byteデータであるものとすると、当該第1データを含む256Byteのデータから構成されるECCフレームから書き込みログが取得される。この書き込みログには、物理アドレス「0xA000」と論理アドレス「0x1000」とが含まれている。また、この書き込みログに含まれる論理アドレス「0x1000」に対応する物理アドレスが第2アドレス変換テーブルから取得されるが、当該物理アドレスは更新されているため、当該物理アドレスとしては「0xB000」が取得される。
【0356】
この場合、書き込みログに含まれる物理アドレス「0xA000」は、第2アドレス変換テーブルから取得された物理アドレス「0xB000」と一致しない。これによれば、書き戻し対象64Byteデータである第1データは、有効でないと判定される。
【0357】
一方、第2データが書き戻し対象64Byteデータである場合には、第2データを含む256Byteのデータから構成されるECCフレームから書き込みログが取得される。この書き込みログには、物理アドレス「0xB000」と論理アドレス「0x1000」とが含まれている。また、この書き込みログに含まれる論理アドレス「0x1000」に対応する物理アドレスとして「0xB000」が第2アドレス変換テーブルから取得される。
【0358】
この場合、書き込みログに含まれる物理アドレス「0xB000」は、第2アドレス変換テーブルから取得された物理アドレス「0xB000」と一致する。これによれば、書き戻し対象64Byteデータである第2データは、有効であると判定される。
【0359】
次に、ステップS134において実行された有効性判定処理の結果が有効であるか否かが判定される(ステップS135)。
【0360】
有効性判定処理の結果が有効であると判定された場合(ステップS135のYES)、前述した図17に示すステップS72、S73及びS75の処理に相当するステップS136~S138の処理が実行される。
【0361】
次に、制御部312は、第2アドレス変換テーブルのエントリを無効化する(ステップS139)。このステップS138においては、書き戻し対象64Byteデータにアクセスするための論理アドレスの下位ビットであるインデックスに対応づけられているエントリであって、当該論理アドレスの上位ビットをタグとして含むエントリが第2アドレス変換テーブルから検索され、当該検索されたエントリに含まれるValidに「0」が設定される。
【0362】
ステップS139の処理が実行されると、図13に示すステップS51(図17に示すステップS76)の処理に相当するステップS140の処理が実行される。
【0363】
なお、上記したステップS137~S138及びS140の処理は、第2メモリ領域32bに書き込まれている書き戻し対象64Byteデータを第1メモリ領域32aに書き込む(書き戻す)ためのリードモディファイライト処理に相当する。
【0364】
一方、ステップS135において有効性判定処理の結果が有効でない(つまり、無効である)と判定された場合(ステップS135のNO)、バッファ管理部315は、書き込み対象64Byteデータが格納されているバッファ領域を解放する(ステップS141)。
【0365】
ステップS131において決定された書き戻し対象データに含まれる64Byteのデータ毎に上記したステップS134~S141の処理が実行された場合、第2メモリ領域管理部322は、空き領域管理情報を更新する(ステップS142)。この場合、第2メモリ領域管理部322は、空き領域管理テーブルにおいて管理されているTailポインタ32dを、書き戻し対象データが書き込まれているPageの次のPage(つまり、上記した第2メモリ領域32bに書き込まれているデータが書き戻される順番に従って次に書き戻されるデータが書き込まれているPage)を示すように更新する。
【0366】
ここでは、図30及び図31を参照して、図28に示す第2メモリ領域32bに対する不揮発化処理について詳細に説明したが、当該図28に示すステップS107において第2メモリ領域32bが選択されていないと判定された場合には、第1メモリ領域32aに対する不揮発化処理が実行される。この第1メモリ領域32aに対する不揮発化処理は、上記したように前述した本実施形態の比較例における不揮発化処理(図11に示すステップS16の処理)と同様の処理である。しかしながら、例えばバッファ314に格納されているデータ(不揮発化対象データ)が第1メモリ領域32aに対して不揮発化される際に、当該不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されている場合には、当該対応関係(エントリ)を無効化する処理が第1メモリ領域32aに対する不揮発化処理において更に実行されるものとする。
【0367】
この場合、不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されている(つまり、当該論理アドレスが第2アドレス変換テーブルにおいてヒットする)か否かが判定される。
【0368】
不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて既に管理されていると判定された場合、当該エントリに含まれるValidに「0」を設定する。
【0369】
このように不揮発化対象データにアクセスするための論理アドレスと物理アドレスとの対応関係を第2アドレス変換テーブルにおいて無効化することによって、例えば読み出しコマンドがCPU10から送信された際に、当該読み出しコマンドにおいて指定されている論理アドレスを、古いデータが格納された物理アドレスではなく、最新のデータが格納されている物理アドレスに変換することができる。
【0370】
更に、CPU10からの最新のデータ(バッファ314に格納されているデータ)が第1メモリ領域32aに書き込まれた後に、当該データが第2メモリ領域32bに書き込まれていた古いデータで上書きされてしまうことを回避することも可能である。
【0371】
具体的には、第1メモリ領域32aに対する不揮発化処理において不揮発化対象データが第1メモリ領域32aに書き込まれる際にはリードモディファイライト処理が実行される場合があるが、第1メモリ領域32aにおいて当該不揮発化対象データと同一のECCフレームを構成する他の64Byteのデータ(最新のデータ)が第2メモリ領域32bに書き込まれている場合がある。
【0372】
このため、第1メモリ領域32aに対する不揮発化処理においてリードモディファイライト処理が実行される場合には、第2アドレス変換テーブルを参照する必要がある。これにより、不揮発化対象データと同一のECCフレームを構成する他の64Byteのデータにアクセスするために使用される論理アドレスが当該第2アドレス変換テーブルにおいてヒットする場合には、当該第2アドレス変換テーブルにおいて管理されている当該論理アドレスに対応する物理アドレスを用いて第2メモリ領域32bから64Byteのデータを取得し、当該64Byteのデータ及び不揮発化対象データから構成されるECCフレームが第1メモリ領域32aに書き込まれる。この場合、第1メモリ領域32aに書き込まれた64Byteのデータにアクセスするために使用される論理アドレスと物理アドレスとの対応関係は、第2アドレス変換テーブルにおいて無効化される。
【0373】
ここで、上記したように第2メモリ領域32bに対する不揮発化処理が実行される(つまり、第2メモリ領域32bにデータが書き込まれる)と第2アドレス変換テーブルは更新されるが、当該第2アドレス変換テーブルは例えばDRAM33にキャッシュされており、当該第2アドレス変換テーブルの更新は当該DRAM33上で実行される場合が多い。この場合、DRAM33は揮発性メモリであるため、当該DRAM33上で更新された第2アドレス変換テーブルは、所定のタイミングで不揮発化する(つまり、SCM32に書き込まれる)必要がある。
【0374】
以下、図32のフローチャートを参照して、第2アドレス変換テーブルを不揮発化する処理の処理手順の一例について説明する。なお、図32に示す処理は所定のタイミングで実行されるものとする。
【0375】
ここで、例えば第2メモリ領域32bの容量次第では、第2アドレス変換テーブルのサイズも大きくなり、不揮発化コストが高い。しかしながら、SCMモジュール30における第2アドレス変換テーブルの不揮発化による影響を低減する(つまり、SCMモジュール30の性能を維持する)ために、当該第2アドレス変換テーブルの不揮発化頻度を下げてしまうと、例えば電源断が発生した際に必要なバッテリ容量が増大する。
【0376】
そこで、本実施形態においては、上記した第2アドレス変換テーブルを更新する際にテーブル更新ログをテーブル更新ログ領域に追記(蓄積)し、当該第2アドレス変換テーブルの不揮発化に当該テーブル更新ログを利用する。
【0377】
なお、テーブル更新ログは図33に示すように論理アドレス及び物理アドレスの対応関係と無効化フラグとを含むが、当該テーブル更新ログ(が追記されるテーブル更新ログ領域)は、リングバッファ方式で管理される。なお、テーブル更新ログは、最初はSCMコントローラ31内に設けられたバッファに蓄えられ、SCM32内のリングバッファに書き込まれるものとする。このようなテーブル更新ログは、次にテーブル更新ログが追記されるエントリを示すHeadポインタを用いて管理される。
【0378】
ここで、第2アドレス変換テーブルが不揮発化されると、リングバッファ内のテーブル更新ログは全て不要になる(つまり、破棄される)ため、当該テーブル更新ログが破棄された場合には、リングバッファの先頭領域からテーブル更新ログが書き込まれればよい。このため、テーブル更新ログを管理するためのTailポインタは必ずしも必要ない。しかしながら、この場合にはリングバッファの先頭領域が疲弊する(つまり、疲弊に偏りが生じる)ため、当該疲弊の偏りを回避するためにTailポインタを用いてもよい。
【0379】
本実施形態において、テーブル更新ログは上記したHeadポインタ及びTailポインタを用いて管理されるものとして説明する。すなわち、本実施形態においては、このようなHeadポインタ及びTailポインタによって管理されているテーブル更新ログを参照することによって不揮発化されている第2アドレス変換テーブルとの差分(情報)を把握することができる。なお、例えば第2アドレス変換テーブルが不揮発化された場合には、この差分(情報)は全て破棄してよい。
【0380】
まず、制御部312は、第2アドレス変換テーブルを不揮発化するか否かを判定する(ステップS151)。このステップS151においては、例えば第2アドレス変換テーブルが不揮発化された後の当該第2アドレス変換テーブルの更新回数が予め定められた回数以上である場合に、第2アドレス変換テーブルを不揮発化すると判定される。なお、第2アドレス変換テーブルの更新回数は、上記したテーブル更新ログを参照することによって特定することができる。なお、ステップS151の処理は、例えば第2アドレス変換テーブルにおいて更新されているエントリの数(更新エントリ数)に基づいて実行されても構わない。
【0381】
第2アドレス変換テーブルを不揮発化しないと判定された場合(ステップS151のNO)、制御部312は、テーブル更新ログを不揮発化するか否かを判定する(ステップS152)。このステップS152においては、予め定められた量(例えば、256Byte)のテーブル更新ログが蓄積されている場合に、テーブル更新ログを不揮発化すると判定する。
【0382】
ステップS152の処理が実行されると、制御部312は、テーブル更新ログをSCM32に書き込む(ステップS153)。これにより、テーブル更新ログの不揮発化が完了する。
【0383】
一方、テーブル更新ログを不揮発化しないと判定された場合(ステップS152のNO)、ステップS153の処理は実行されず、図32に示す処理は終了される。
【0384】
また、上記したステップS151において第2アドレス変換テーブルを不揮発化すると判定された場合(ステップS151のYES)、制御部312は、テーブル更新ログを管理するためのTailポインタを更新する(ステップS154)。このステップS155によれば、第2アドレス変換テーブルに反映すべきテーブル更新ログ(エントリ)が破棄されるようにTailポインタが更新される。具体的には、Tailポインタは、Headポインタと同じ位置を示すように更新される。
【0385】
ステップS154の処理が実行されると、制御部312は、第2アドレス変換テーブルをSCM32に書き込む(ステップS155)。これにより、第2アドレス変換テーブルの不揮発化が完了する。
【0386】
なお、Headポインタ及びTailポインタは、例えばSCMモジュール30の電源が切断される際に不揮発化されればよいが、図32に示すステップS153またはS155の処理が実行される際にSCM32に書き込まれてもよい。
【0387】
上記した図32に示す処理によれば、テーブル更新ログを不揮発化することによって、サイズの大きい第2アドレス変換テーブルを不揮発化する頻度を低下させることができるため、SCMモジュール30における性能低下の影響を小さくすることができる。
【0388】
なお、上記したようにテーブル更新ログを不揮発化した場合には、後で当該テーブル更新ログに基づいて第2アドレス変換テーブルを更新する必要がある。このようなテーブル更新ログを用いた第2アドレス変換テーブルの更新は、例えばSCMモジュール30(またはコンピュータシステム1)の再起動時等に実行されればよい。
【0389】
図34は、SCMモジュール30の再起動時等に実行されるテーブル更新ログを用いた第2アドレス変換テーブルの更新の概要を示している。図34に示すように、第2アドレス変換テーブル(更新前)に対してテーブル更新ログを順次参照しながら反映していくことにより、当該第2アドレス変換テーブルを最新状態にすることができる。具体的には、図34に示す例では、テーブル更新ログに基づいて、論理アドレス「0x2000」に対応する物理アドレス「0xB000」が物理アドレス「0xBCDE」に更新されるとともに、論理アドレス「0x3000」に対応する物理アドレス「0xC000」が無効化されている。
【0390】
なお、第2アドレス変換テーブルは図26に示すようなデータ構造を有するが、図34においては、便宜的に、論理アドレスと物理アドレスの対応関係のみが把握できるように簡略化して示している。
【0391】
また、第2アドレス変換テーブルは例えばシステム管理情報としてSCM32に格納されるが、当該SCM32のシステム管理情報が格納される領域には、テーブル更新ログを格納するための領域も確保されているものとする。
【0392】
ここで、上記したステップS155においては第2アドレス変換テーブルの全てがSCM32に書き込まれるものとして説明したが、当該第2アドレス変換テーブルの全てをSCM32に書き込む場合には不揮発化のための処理負荷が高いため、例えば論理アドレスと物理アドレスとの対応関係が更新されたエントリ(以下、更新エントリと表記)を含む第2アドレス変換テーブルの一部(つまり、更新された一部)のみがSCM32に書き込まれる構成としてもよい。
【0393】
また、例えばテーブル更新ログが書き込まれるSCM32内の領域(リングバッファ)をインデックス毎に分割して割り当て、特定のインデックスに割り当てられている領域が枯渇する可能性が高い場合に、第2アドレス変換テーブルにおいて当該特定のインデックスに対応づけられているエントリのみを不揮発化するような構成としてもよい。この場合、特定のインデックスに割り当てられている領域内のテーブル更新ログは破棄することができる。なお、SCM32内の領域は単一のインデックス毎に割り当ててもよいし、複数のインデックス毎に割り当ててもよい。更に、単一のインデックスを複数に分割し、当該分割されたインデックスの各々にSCM32内の領域を割り当てるようにしてもよい。
【0394】
次に、本実施形態に係るSCMモジュール30において実行される読み出し処理(図10に示すステップS5の処理)の処理手順の一例について説明する。ここでは、便宜的に、前述した図14に示すフローチャートを参照して説明する。
【0395】
まず、図14に示すステップS61の処理が実行される。ステップS61において対象データがバッファ314に格納されていないと判定された場合(ステップS61のNO)、対象論理アドレス(読み出しコマンドにおいて指定されている論理アドレス)が物理アドレスに変換される(ステップS62)。
【0396】
ここで、前述した本実施形態の比較例においては、第1アドレス変換テーブルに相当するアドレス変換テーブルを参照して、対象論理アドレスを物理アドレスに変換するが、本実施形態においては、第2アドレス変換テーブルを参照して対象論理アドレスが物理アドレスに変換される。
【0397】
第2アドレス変換テーブルを参照して対象論理アドレスが物理アドレスに変換された(つまり、当該対象論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されていた)場合には、当該物理アドレスを用いて、第2メモリ領域32bから読み出し対象データを読み出すようにステップS63以降の処理が実行される。
【0398】
一方、第2アドレス変換テーブルを参照して対象論理アドレスが物理アドレスに変換されない(つまり、当該論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されていない)場合には、第1アドレス変換テーブルを参照して対象論理アドレスが物理アドレスに変換される。この場合、第1アドレス変換テーブルを参照して対象論理アドレスから変換された物理アドレスを用いて、第1メモリ領域32aから読み出し対象データを読み出すようにステップS63以降の処理が実行される。
【0399】
すなわち、本実施形態において実行される読み出し処理においては、バッファ、第2メモリ領域32b及び第1メモリ領域32aの順に読み出し対象データが格納されているか否かを検索し、最初に検索された読み出し対象データをCPU10に返すように動作する。
【0400】
本実施形態においては、対象論理アドレスに対応する物理アドレスを取得するために、第2アドレス変換テーブル及び第1アドレス変換テーブルを必要に応じて逐次的に参照するものとして説明したが、当該第2アドレス変換テーブル及び第1アドレス変換テーブルを並列に参照する構成としてもよい。このような構成であっても、第2アドレス変換テーブルでヒットした場合の当該第2アドレス変換テーブルから取得される物理アドレスを用いて読み出し対象データを第2メモ領域32bから読み出し、第2アドレス変換テーブルでミスした場合は第1アドレス変換テーブルから取得される物理アドレスを用いて読み出し対象データを第1メモリ領域32aから読み出すことができる。これによれば、ステップS62におけるアドレス変換処理にかかるレイテンシが短縮され、結果的にCPU10からの読み出しコマンドのレイテンシを短縮することができる。
【0401】
なお、本実施形態において実行される読み出し処理は上記したステップS62の処理以外は前述した図14において説明した通りであるため、ここではその詳しい説明を省略する。
【0402】
次に、図35のフローチャートを参照して、本実施形態において実行されるウェアレベリング処理の処理手順の一例について説明する。ここでは、前述した本実施形態の比較例において実行されるウェアレベリング処理と異なる点について主に説明する。なお、本実施形態におけるウェアレベリング処理においては、第2メモリ領域32b内の全てのPageが第1メモリ領域32a内のPageと交換される。
【0403】
まず、前述した図17に示すステップS71の処理に相当するステップS161の処理が実行される。ステップS161においては、第1及び第2ウェアレベリング対象領域が決定されたものとする。
【0404】
なお、第2メモリ領域32bはデータが追記される(つまり、Append Write方式で書き込まれる)メモリ領域であるため、ウェアレベリング対象領域の一方(例えば、第1ウェアレベリング対象領域)は、少なくとも第1メモリ領域32a内の領域である。
【0405】
上記したように第1ウェアレベリング対象領域が第1メモリ領域32a内の領域であるものとすると、制御部312は、ステップS161において決定された第2ウェアレベリング対象領域が第2メモリ領域32b内の領域であるか否かを判定する(ステップS162)。すなわち、ステップS162においては、第1及び第2ウェアレベリング対象領域が第1メモリ領域32a内の領域と第2メモリ領域32b内の領域との組み合わせであるか否かが判定される。
【0406】
第2ウェアレベリング対象領域が第2メモリ領域32b内の領域であると判定された場合(ステップS162のYES)、図30に示すステップS127の処理(図31に示す処理)に相当するステップS163の処理が実行される。このステップS163の処理においては、第2メモリ領域32bに書き込まれている全てのデータが第1メモリ領域32aに書き戻されるものとする。
【0407】
ステップS163の処理が実行されると、Page交換処理が実行される(ステップS164)。このPage交換処理は、図17に示すステップS72~S77の処理に相当する。これにより、例えば特定の論理アドレスが指定されることによってアクセスされることが多い第1メモリ領域32a内の第1ウェアレベリング対象領域(Page)を、第2メモリ領域32b内の第2ウェアレベリング対象領域と交換することができる。この場合、第1ウェアレベリング対象領域(第1メモリ領域32a)に格納されているデータは第2ウェアレベリング対象領域(第2メモリ領域32b)に書き込まれる。一方、第2ウェアレベリング対象領域に格納されているデータは、既に第1メモリ領域32aに書き戻されているため、第1ウェアレベリング対象領域に書き込まれる必要はない。
【0408】
ステップS164の処理が実行されると、第2メモリ領域管理部322は、空き領域管理情報を更新する(ステップS165)。上記したようにステップS163においては第2メモリ領域32bに書き込まれている全てのデータが第1メモリ領域32aに書き戻されるため、ステップS165においては、第2メモリ領域32bの全てが空き領域となるように空き領域管理情報(Headポインタ32c及びTailポインタ32d)が更新される。
【0409】
一方、第2ウェアレベリング対象領域が第2メモリ領域32b内の領域でないと判定された場合(ステップS162のYES)、前述した本実施形態の比較例において説明した図17に示すステップS72~S77の処理に相当するPage交換処理が実行される(ステップS166)。
【0410】
上記した本実施形態において実行されるウェアレベリング処理においては、第1メモリ領域32a内の第1ウェアレベリング対象領域(Page)と第2メモリ領域32b内の第2ウェアレベリング対象領域(Page)とを交換する場合、当該交換は、第2メモリ領域32bに書き込まれているデータが第1メモリ領域32aに書き戻された後に実行される。これによれば、別途書き戻し処理を実行する時間を省略することができる。
【0411】
なお、図35に示すウェアレベリング処理においては書き戻し処理が実行されるものとして説明したが、第1メモリ領域32a内の第1ウェアレベリング対象領域(Page)と第2メモリ領域32b内の第2ウェアレベリング対象領域(Page)とをそのまま交換するように動作する構成であってもよい。
【0412】
次に、図36のフローチャートを参照して、本実施形態において実行されるパトロール・リフレッシュ処理の処理手順の一例について説明する。ここでは、前述した本実施形態の比較例において実行されるパトロール・リフレッシュ処理と異なる点について主に述べる。
【0413】
まず、前述した図18に示すステップS81~S83の処理に相当するステップS171~S173の処理が実行される。なお、ステップS171において決定されたパトロール・リフレッシュ対象Pageは、第1メモリ領域32a内のPageであるものとする。
【0414】
ここで、上記した第1メモリ領域32aに対する不揮発化処理の場合と同様に、パトロール・リフレッシュ処理においてリードモディファイライト処理が実行される場合には、パトロール・リフレッシュ対象Pageに書き込まれているデータの最新のデータが第2メモリ領域32bに書き込まれている場合がある。
【0415】
このため、パトロール・リフレッシュ対象Pageにアクセスするための論理アドレスが第2アドレス変換テーブルにおいてヒットする(つまり、当該論理アドレスと物理アドレスとの対応関係が第2アドレス変換テーブルにおいて管理されている)か否かが判定される(ステップS174)。
【0416】
論理アドレスが第2アドレス変換テーブルにおいてヒットすると判定された場合(ステップS174のYES)、当該第2アドレス変換テーブルにおいて当該論理アドレスに対応づけられている第2メモリ領域32b内の物理アドレス(Page)に書き込まれているデータを書き戻し対象データとして、図31に示すステップS137~S140及びS142の処理に相当するステップS175~S179の処理が実行される。このステップS175~S179の処理によれば、上記したように第2メモリ領域32bに書き込まれているデータ(第2アドレス変換テーブルにおいてヒットした論理アドレスに対応する物理アドレスに書き込まれているデータ)を第1メモリ領域32aに書き戻すことができる。
【0417】
ここでは、パトロール・リフレッシュ対象Pageにアクセスするための論理アドレスが第2アドレス変換テーブルにおいてヒットする場合について説明したが、第1メモリ領域32aにおいてパトロール・リフレッシュ対象Pageと同一のECCフレームを構成する他の64Byteのデータが第2メモリ領域32bに書き込まれている場合には、当該64Byteのデータも第1メモリ領域32aに書き戻されるものとする。
【0418】
一方、論理アドレスが第2アドレス変換テーブルにおいてヒットしないと判定された場合(ステップS174のNO)、前述した図18に示すステップS84及びS85の処理に相当するステップS180及びS181の処理が実行される。
【0419】
ここでは、ステップS171において決定されたパトロール・リフレッシュ対象Pageが第1メモリ領域32a内のPageであるものとして説明したが、当該パトロール・リフレッシュ対象Pageは、第2メモリ領域32a内のPageであってもよい。
【0420】
この場合には、パトロール・リフレッシュ対象Pageに書き込まれているデータ以外の64Byteのデータが第2メモリ領域32bに書き込まれていないかを確認し、当該64Byteのデータがあれば当該データが第2メモリ領域32bから読み出され、他のデータについては必要に応じて第1メモリ領域32aから読み出される。これによれば、これらのデータ(256Byteのデータ)からECCフレームを構築することができるため、当該ECCフレームが第1メモリ領域32に書き戻される。
【0421】
上記した本実施形態において実行されるパトロール・リフレッシュ処理においては、前述した本実施形態の比較例において実行されるパトロール・リフレッシュ処理中に第2メモリ領域32bに書き込まれているデータを第1メモリ領域32aに書き戻すことができる。これによれば、別途書き戻し処理を実行する時間を省略することができる。
【0422】
なお、本実施形態において実行されるパトロール・リフレッシュ処理中に書き込みコマンドが受信された場合の動作については、前述した本実施形態の比較例と同様である。
【0423】
ここでは、図35に示すウェアレベリング処理及び図36に示すパトロール・リフレッシュ処理において書き戻し処理が実行されることについて説明したが、SCMモジュール30の再起動時に書き戻し処理が実行されても構わない。
【0424】
以下、SCMモジュール30の再起動時に実行される書き戻し処理について説明する。まず、SCMモジュール30が再起動されると、SCM32に格納されている第2アドレス変換テーブルとテーブル更新ログが当該SCM32から読み出される。
【0425】
次に、上記した図34において説明したように、SCMコントローラ31内の第2アドレス変換テーブルを最新の状態に更新する。
【0426】
SCMに格納されている第2メモリ領域32bを管理するためのHeadポインタ32c及びTailポインタ32dを読み出す。
【0427】
次に、図36に示すステップS172以降の処理と同様の処理が実行される。具体的には、バッファエントリを割り当て、Tailポインタによって示される領域に書き込まれているデータを読み出し、第2アドレス変換テーブルでヒットするか否かが判定される。第2アドレス変換テーブルでヒットすると判定された場合には、データが書き戻され、第2アドレス変換テーブルの該当エントリは無効化され、第2バッファ管理テーブルのエントリ(及びバッファ領域)が解放される。一方、第2アドレス変換テーブルでヒットしない(ミスした)と判定された場合、無効なデータであるため、当該データを破棄する。
【0428】
なお、このような処理は、第2メモリ領域32b内の全データに対して繰り返し実行される。
【0429】
上記した処理が完了すると、第2メモリ領域内に有効データはなく、第2アドレス変換テーブルには論理アドレスと物理アドレスとの対応関係(対応情報)が登録されていない状態となる。この場合、第2メモリ領域32bの空き領域管理情報が更新され、当該第2メモリ領域32bが空の状態となる。
【0430】
次に、図37のフローチャートを参照して、本実施形態において実行される電源断検知処理の処理手順の一例について説明する。ここでは、前述した本実施形態の比較例において実行される電源断検知処理と異なる点について主に説明する。
【0431】
まず、前述した図19に示すステップS91~S93の処理に相当するステップS191~S193の処理が実行される。
【0432】
ここで、本実施形態において実行される電源断検知処理においては、バッファ314に格納されているデータが第2メモリ領域32b(データが64Byte単位で管理されるメモリ領域)に書き込まれるものとする。
【0433】
この場合、前述した図28に示すステップS108の処理に相当するステップS194の処理(第2メモリ領域32bに対する不揮発化処理)が実行される。なお、第2メモリ領域32bに対する不揮発化処理については図30を用いて詳細に説明したが、ステップS194において実行される第2メモリ領域32bに対する不揮発化処理においては、図30に示すステップS126及びS127は実行されない(つまり、ステップS121~S125の処理のみが実行される)。このステップS194の処理が実行された場合、バッファ314に格納されている全てのデータが第2メモリ領域32bに書き込まれる。
【0434】
ステップS194の処理が実行される(つまり、第2メモリ領域32bにデータが書き込まれる)と第2アドレス変換テーブルが更新されるが、制御部312は、当該第2アドレス変換テーブルの更新に関するテーブル更新ログをテーブル更新ログ領域に追記する(ステップS195)。
【0435】
なお、図37においては、便宜的にステップS194の処理が実行された後にステップS195の処理が実行されるものとして示されているが、当該ステップS195の処理は、ステップS194において第2アドレス変換テーブルが更新された後に実行されればよい。
【0436】
ステップS195において追記されたテーブル更新ログは上記したようにHeadポインタ及びTailポインタを用いて管理されるが、当該テーブル更新ログが新しく追記されたため、制御部312は当該Headポインタを更新する(ステップS196)。
【0437】
また、第2メモリ領域管理部322は、空き領域管理情報を更新する(ステップS197)。上記したようにステップS194においてはバッファ314に格納されているデータが第2メモリ領域32bに書き込まれるため、ステップS197においては、当該第2メモリ領域32bに書き込まれたデータに応じて空き領域管理情報に含まれるHeadポインタ32cが更新される。
【0438】
次に、制御部312は、不揮発化が必要なシステム管理情報を生成する(ステップS198)。このステップS198において生成されるシステム管理情報には、例えばステップS195において追記されたテーブル更新ログ、ステップS196において更新されたテーブル更新ログを管理するためのHeadポインタ及びステップS197において更新された空き領域管理情報等が含まれる。なお、テーブル更新ログを管理するためのTailポインタが不揮発化されていない場合、ステップS198において生成されるシステム管理情報には、当該Tailポインタも含まれる。また、ステップS198において生成されるシステム管理情報には、他の情報(例えば、電源断が発生したことを示すログまたは書き込み回数管理テーブル等)が含まれていてもよい。
【0439】
ステップS198の処理が実行されると、制御部312は、当該ステップS198において生成されたシステム管理情報をSCM32に書き込む(ステップS199)。
【0440】
上記したように本実施形態において実行される電源断検知処理においては、不揮発化が未完了のデータ(第2バッファ管理テーブルで管理されているバッファ領域内のデータ)は全て第2メモリ領域32bに書き込まれる。このような電源断検知処理によれば、バッファ314に格納されているデータを第1メモリ領域32aに書き込む際に実行する必要があるリードモディファイライト処理を実行することなく当該データの不揮発化を実現することができるため、不揮発化を完了するまでの時間を低減することができ、バッテリの容量を削減することができる。
【0441】
また、上記したように第2アドレス変換テーブルは例えばDRAM33上で更新されるため、本実施形態において実行される電源断検知処理においては、当該第2アドレス変換テーブルも不揮発化する必要がある。この場合、第2アドレス変換テーブル自体を不揮発化するのではなく、上記したようにテーブル更新ログを不揮発化する構成とすることにより、当該不揮発化に要する時間を低減することが可能となる。なお、例えば電源断が解消し、SCMモジュール30が次回起動された場合には、SCM32に格納されている第2アドレス変換テーブル及びテーブル更新ログを用いて最新の第2アドレス変換テーブルを得ることができる。
【0442】
なお、上記したような電源断検知処理を予期できない不正電源断時に実行するためには、第2メモリ領域32bには少なくともバッファ314の全容量に相当する空き領域(つまり、バッファ314に格納されている全てのデータを書き込むことができる空き容量)を常に確保しておく必要がある。すなわち、本実施形態において第2メモリ領域32bにデータは、バッファ314の全容量に相当する空き領域を当該第2メモリ領域32bに確保しておくことができるように、第1メモリ領域32aに書き戻されるものとする。
【0443】
また、ここでは不正電源断が発生した場合について説明したが、SCMモジュール30(またはコンピュータシステム1)の電源を正常に遮断する(例えば、シャットダウンする)場合には、バッファ314に格納されているデータ及び必要なシステム管理情報が不揮発化されればよい。この場合、バッファ314に格納されているデータは、第1メモリ領域32aに書き込まれてもよいし、第2メモリ領域32bに書き込まれてもよい。また、この場合には、テーブル更新ログではなく、第2アドレス変換テーブルが不揮発化されるように動作してもよい。
【0444】
上記したように本実施形態においては、SCM32(不揮発性メモリ)が第1メモリ領域32a及び第2メモリ領域32bを有し、SCMコントローラ31は、書き込みコマンドがCPU10(ホスト)から受信された場合に当該データの書き込む書き込み方式を決定し、当該書き込み方式としてIn-Place Update方式(第1方式)が決定された場合には当該In-Place Update方式でデータを第1メモリ領域32aに書き込み、当該書き込み方式としてAppend Write方式が決定された場合には当該Append Write方式でデータを第2メモリ領域32bに書き込む。なお、In-Place Update方式は、書き込みコマンドに基づくデータが第1メモリ領域32aに書き込まれる時点で当該書き込みコマンドにおいて指定されている論理アドレスに対応づけられている物理アドレスにデータを書き込む書き込み方式である。また、Append Write方式は、書き込みコマンドに基づくデータが第2メモリ領域32bに書き込まれる時点で当該書き込みコマンドにおいて指定されている論理アドレスとは関係なく当該データの書き込み先として指定されている物理アドレスにデータを書き込む書き込み方式である。
【0445】
本実施形態においては、このような構成により、SCM32に対する書き込み性能を向上させることが可能となる。
【0446】
具体的には、前述した本実施形態の比較例において連続しない論理アドレスが指定された書き込みコマンドがCPU10から4回受信された場合には、当該書き込みコマンドの各々において指定されている4つのデータに対してそれぞれリードモディファイライト処理を実行する必要があるが、本実施形態においては、連続しない論理アドレスが指定された書き込みコマンドがCPU10から4回受信された場合には、当該書き込みコマンドの各々において指定されているデータをパッキングして第2メモリ領域32bに1回書き込めばよい。これによれば、第2メモリ領域32b(Append Write方式でデータが書き込まれるメモリ領域)が枯渇するまでは、ランダムライト性能を向上させることが可能となる。
【0447】
また、前述した本実施形態の比較例においては書き込みコマンドにおいて指定されているデータにアクセスするための論理アドレスに対応する物理アドレス(Bank)がBusy状態にある場合には、当該Busy状態が解消するまで待機する必要があったが、本実施形態においては、例えば書き込みコマンドにおいて指定されているデータにアクセスするための論理アドレスに対応する第1メモリ領域32a内の物理アドレスがBusy状態にある場合には、第2メモリ領域32bにデータを書き込むことができるため、データの高速な書き込みを実現することができる。
【0448】
また、本実施形態において、SCMコントローラ31は、CPU10がSCMモジュール30(メモリシステム)にアクセスする際に使用する論理アドレスと第1メモリ領域32a内の物理アドレスとの対応関係を第1アドレス変換テーブルを用いて管理し、当該論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係を第2アドレス変換テーブルを用いて管理する。この場合、第1アドレス変換テーブルにおいて管理される対応関係は例えば256Byte単位(第1管理単位)で管理され、第2アドレス変換テーブルにおいて管理される対応関係は64Byte(つまり、第1管理単位よりも小さい第2管理単位)で管理される。また、第2アドレス変換テーブルにおいてデータを管理する単位である64Byteは、CPU10のSCMモジュール30に対するアクセス単位である。ここでは、第2アドレス変換テーブルにおいて対応関係が64Byteで管理されるものとして説明したが、当該第2アドレス変換テーブルにおいてデータを管理する単位は、CPU10のSCMモジュール30に対するアクセス単位に基づいて定められていればよい(例えば、当該アクセス単位の約数等であってもよい)。
【0449】
本実施形態においては、このような構成により、第1メモリ領域32aに対するIn-Place Update方式での書き込み処理及び第2メモリ領域32bに対するAppend Write方式での書き込み処理を動的に選択し、書き込み性能の向上を実現することができる。
【0450】
また、本実施形態においては、書き込みコマンドがCPU10から受信された場合に当該書き込みコマンドにおいて指定されているデータを書き込む書き込み方式(書き込み先)を決定するが、例えば当該データを管理するために第1メモリ領域32aに対してリードモディファイライト処理を実行する必要がある場合には、Append Write方式を書き込み方式として決定するものとする。これによれば、リードモディファイライト処理を実行することなく第2メモリ領域32bにデータを書き込むため、当該デーの不揮発化に要する時間を短縮し、書き込み性能を向上させることができる。
【0451】
なお、例えば特定の論理アドレスが指定された書き込みコマンドの数(つまり、当該論理アドレスに対する書き込み回数)が多い場合において、当該書き込みコマンドにおいて指定されているデータが毎回当該論理アドレスに対応する第1メモリ領域32a内の物理アドレスに書き込まれると、当該物理アドレスに含まれるメモリセルが急速に疲弊する可能性がある。そこで、例えば書き込みコマンドにおいて指定されている論理アドレスに対する書き込み頻度(回数)が予め定められている値以上である場合には、書き込み方式としてAppend Write方式を決定するようにしてもよい。
【0452】
本実施形態においては、第1メモリ領域32aに対してリードモディファイライト処理を実行する必要がある、または、書き込みコマンドにおいて指定されている論理アドレスに対する書き込み頻度が予め定められている値以上である場合に書き込み方式としてAppend Write方式が決定されるものとして説明したが、リードモディファイライト処理を実行する必要があり、かつ、当該論理アドレスに対する書き込み頻度が予め定められている値以上である場合にAppend Write方式が決定されるようにしてもよい。
【0453】
また、本実施形態においては、書き込みコマンドにおいて指定されているデータが書き込まれる第1メモリ領域32a(当該第1メモリ領域32a内の物理アドレスに該当するBank)がBusy状態にある場合、書き込み方式としてAppend Write方式が決定されるようにしてもよい。
【0454】
更に、本実施形態においては、書き込みコマンドにおいて指定されている論理アドレスが近い過去に他の書き込みコマンドにおいて指定されている場合、書き込み方式としてAppend Write方式が決定されるようにしてもよい。
【0455】
また、本実施形態に係るSCMモジュール30が第1アドレス変換テーブルの一部をキャッシュする構成である場合において、書き込みコマンドにおいて指定されている論理アドレスがキャッシュミスと判定された場合に、書き込み方式としてAppend Write方式が決定されるようにしてもよい。
【0456】
ここでは、書き込み方式(書き込み先)を決定するためのいくつかの条件について説明したが、本実施形態においては、これらの条件に基づいて書き込み先を決定することによって、SCM32の状態に応じた適切な書き込み先にデータを書き込むことが可能となり、書き込み性能を向上させることができる。
【0457】
なお、ここで説明した書き込み方式を決定するための条件は一例であり、書き込み方式は他の条件を用いて決定されてもよいし、これらの条件を適宜組み合わせて書き込み方式を決定する構成とすることも可能である。
【0458】
また、上記したように例えば64Byte単位で論理アドレスと物理アドレスとを管理した場合にはアドレス変換テーブルのサイズが巨大化することから、本実施形態においては、第2メモリ領域32bよりも第1メモリ領域32aの方が大きなメモリ領域となるように当該第1メモリ領域32a及び第2メモリ領域32bが確保されていてもよい。また、本実施形態においては、第2メモリ領域32bに書き込まれたデータを所定のタイミングで第1メモリ領域32aに書き戻す書き戻し処理が実行される。
【0459】
なお、上記した書き戻し処理が実行された場合、第2アドレス変換テーブルにおいて管理されている当該書き戻されたデータの論理アドレスと物理アドレスとの対応関係は無効化される。なお、このような論理アドレスと物理アドレスとの対応関係の無効化は、CPU10から最新のデータが第1メモリ領域32aまたは第2メモリ領域32bに書き込まれた場合にも行われる。
【0460】
また、書き戻し処理は、例えば第2メモリ領域32bの空き領域が予め定められた値未満である場合等に実行されるが、図35において説明したようにウェアレベリング処理時に実行されてもよいし、図36において説明したようにパトロール・リフレッシュ処理時に実行されてもよい。このような構成によれば、ウェアレベリング処理及びパトロール・リフレッシュ処理と別に書き戻し処理を実行する必要がないため、SCMモジュール30の効率的な動作を実現することができる。
【0461】
また、本実施形態においては、書き込みコマンドにおいて指定されているデータは一旦バッファ領域(バッファ314)に格納されるが、当該データが第1メモリ領域32aまたは第2メモリ領域32bに書き込まれる前にSCMモジュール30に対する電源断が検知された場合、当該バッファ領域に格納されているデータはAppend Write方式で第2メモリ領域32bに書き込まれる。
【0462】
本実施形態においては、このような構成により、リードモディファイライト処理を実行しながら第1メモリ領域32aにデータを書き込むよりも高速に当該データを不揮発化することが可能であるため、電源断の発生時にSCMモジュール30に対して電力を供給するバッテリ35の容量を削減することが可能となる。
【0463】
また、本実施形態においては、SCM32から読み出すべきデータにアクセスするための論理アドレスが指定された読み出しコマンドがCPU10から受信された場合、当該論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係を管理するための第2アドレス変換テーブルを参照して、当該読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得する。この場合、第2アドレス変換テーブルを参照して取得された物理アドレスに基づいて第2メモリ領域32bからデータを読み出すことができる。
【0464】
更に、第2アドレス変換テーブルを参照して読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得することができない(つまり、第2アドレス変換テーブルに当該論理アドレスが格納されていないまたは第2アドレス変換テーブルにおいて当該論理アドレスが無効化されている)場合、当該論理アドレスと第1メモリ領域内の物理アドレスとの対応関係を管理するための第1アドレス変換テーブルを参照して、読み出しコマンドにおいて指定されている論理アドレスに対応する物理アドレスを取得する。この場合には、第1アドレス変換テーブルを参照して取得された物理アドレスに基づいて第1メモリ領域32aからデータを読み出すことができる。
【0465】
本実施形態においては、このように第2メモリ領域32b及び第1メモリ領域32aの順に論理アドレスを検索し、当該検索結果に応じて第2メモリ領域32bまたは第1メモリ領域32aからデータを返すことができる。
【0466】
なお、読み出しコマンドにおいて指定されている論理アドレスを使用してアクセスされるデータがバッファ314(またはリードキャッシュ)に格納されている場合、当該データはバッファ314(またはリードキャッシュ)から返される。
【0467】
また、本実施形態における読み出し処理においては説明を省略したが、当該読み出し処理において読み出し対象データが第2メモリ領域32bに書き込まれている場合には、当該読み出しデータ(つまり、第2メモリ領域32bに書き込まれているデータ)を第1メモリ領域32aに書き戻す書き戻し処理が実行されるような構成とすることも可能である。
【0468】
ここで、本実施形態においては、図23において説明したように、SCM32がCPU10から並列してアクセスされる単位で区画される複数のBankを有し、第1メモリ領域32a及び第2メモリ領域32bの各々が複数のBankに跨って確保されているものとして説明したが、図23とは異なるように当該第1メモリ領域32a及び第2メモリ領域32bを確保してもよい。
【0469】
この場合、例えば第2メモリ領域32bは、自由な位置に確保することが可能であるが、例えばウェアレベリングの単位(以下、チャンクと表記)に基づいて定められてもよい。図38においては、チャンクが4つのPageであり、第2メモリ領域32bが2つのチャンクから構成される例が示されている。このような構成によれば、第2メモリ領域32bを細かい粒度でウェアレベリングすることが可能となる。
【0470】
なお、第2メモリ領域32bが図38に示されるように離れて確保されている場合であっても、当該第2メモリ領域32b(の空き領域)はHeadポインタ及びTailポインタを用いて管理される。
【0471】
この場合、Headポインタ及びTailポインタは上記した図25に示す空き領域管理テーブルにおいて管理されるが、当該Headポインタ及びTailポインタは、図39に示すような上位ビット、オフセット及びBank番号を含む。
【0472】
ここで、図38に示す第2メモリ領域32bのうち、Bank0~B-1に跨るPageP-4~P-1からなるメモリ領域を第1サブメモリ領域と称し、Bank0~B-1に跨るPage4~7からなるメモリ領域を第2サブメモリ領域と称する。この場合、Headポインタ及びTailポインタの上位ビットは、第1または第2サブメモリ領域を示す。一方、Headポインタ及びTailポインタのオフセットは、第1または第2サブメモリ領域を構成するPageのうちの1つを示す。なお、上記したようにチャンクが4つのPageである場合、オフセットは2ビットとなる。チャンクが1つのPageであれば、オフセットは0ビットである。Bank番号は、Bankを識別するための識別子(識別番号)である。
【0473】
このようなHeadポインタ及びTailポインタを1進める場合は、Bank番号に1を加算する。これにより、Headポインタ及びTailポインタはBank方向に進む。一方、Bank番号がBankの数以上となった場合には、当該Bank番号を0にして、オフセットを加算する。これにより、Headポインタ及びTailポインタの位置が繰り上げられる。更に、オフセットがチャンクのPage数以上となった場合には、当該オフセットを0にして、上位ビットに1を加算する。これにより、異なるチャンクにHeadポインタ及びTailポインタを移動することができる。
【0474】
上記したHeadポインタ及びTailポインタによれば、当該Headポインタ及びTailポインタの上位ビットと一致するチャンク番号を図40に示すチャンク管理テーブルにおいて参照することによって、チャンク(第1または第2サブメモリ領域)の先頭Page番号を取得することができる。このように取得された先頭Page番号、Headポインタ及びTailポインタのオフセット及びBnak番号に基づいて、当該Headポインタ及びTailポインタによって示される領域(アクセスすべき物理アドレス)を導出することができる。
【0475】
具体的には、例えばHeadポインタの上位ビット(チャンク番号)が「0x01」であり、オフセットが「2」であり、Bank番号が「0」である場合を想定する。この場合において図40に示すチャンク管理テーブルを参照すると、チャンクの先頭Page番号が「Page4」であることがわかり、この先頭Page番号にオフセットを加算すれば、アクセスすべき物理アドレスがBank0のPage6であることが導出される。
【0476】
上記したチャンクに基づいてウェアレベリング処理が実行された場合には、図40に示すチャンク管理テーブル(チャンクの先頭Page番号)は更新される。
【0477】
なお、第2メモリ領域32bは、例えば図41に示すように確保されていてもよい。すなわち、第2メモリ領域32bは複数のBankを跨がるように確保されていなくてもよい。このような構成によれば、Bank間のセルの疲弊を考慮しながらウェアレベリング処理を実行することが可能となる。この場合におけるチャンク管理テーブルにおいては、図42に示すようにチャンクの先頭Page番号がBank毎に管理されればよい。
【0478】
また、本実施形態においては、図24において説明したようにHeadポインタ32c(及びTailポインタ32d)がBankを跨ぐ方向に移動するリングバッファ方式で第2メモリ領域32bの空き領域を管理するものとして説明したが、例えばHeadポインタ32cによって示されるPageに該当するBankがBusy状態にある場合に、当該Busy状態が解消するまで待機する構成とすると、第2メモリ領域32bに対する書き込み性能が低下する。また、このような場合に、Busy状態にあるBankのPageをスキップする構成も考えられるが、このような構成の場合には例えばCPU10からのアクセス負荷が高いときにデータが書き込まれないPageが頻出し、効率的な書き込みが阻害される。
【0479】
そこで、本実施形態においては、図43に示すように、Bank毎にHeadポインタ及びTailポインタを用意し、当該Bank毎にリングバッファ方式で第2メモリ領域32bの空き領域を管理する構成としてもよい。この場合には、Headポインタ及びTailポインタは図44に示すような空き領域管理テーブルにおいて管理されており、図43に示す矢印のようにBank毎にHeadポインタ及びTailポインタを移動させることによって第2メモリ領域32bの空き領域を管理することができる。
【0480】
図43においては上記した図23に示すように第2メモリ領域32bが確保されている場合にBank毎に空き領域を管理する場合を示しているが、上記した図38及び図41に示すように第2メモリ領域32bが確保されている場合であっても同様に、Bank毎に空き領域を管理する構成を適用することは可能である。また、図43では、Bank毎にリングバッファを1つ設けているが、Bank内に複数のリングバッファ(つまり、Bank内の領域毎にリングバッファ)を設けてもよい。その場合、図44に示すようにBank毎に管理されたHeadポインタ及びTailポインタや図40または図42に示すようにBank毎に管理されたチャンクの先頭Page番号は、各Bankのリングバッファ毎に管理される。
【0481】
また、上記したようにBank毎またはリングバッファ毎に空き領域を管理する構成の場合、当該Bank毎の次にデータが書き込まれる領域(Page)は当該Bank毎に管理されているHeadポインタによって決定することができるが、当該データが書き込まれるBank(以下、書き込み位置と表記)も決定する必要がある。この場合、例えば空き領域が多いBankを書き込み位置として決定する。なお、Bank毎の空き領域はHeadポインタ及びTailポインタによって管理されているところ、空き領域が多いBankとは、Headポインタ(によって示されるPage)とTailポインタ(によって示されるPage)との位置の差が小さいBankに相当する。また、書き込み位置は、Busy状態にないBankの中から決定されるようにしてもよい。
【0482】
また、書き込み位置は、データが書き込まれる第1メモリ領域32a内の物理アドレス(Bank)とは異なるBankを選択するようにしてもよい。このように異なるBankにデータを書き込むようにすることにより、例えば第2メモリ領域32bから第1メモリ領域32aにデータを書き戻す(リードモディファイライト処理を実行する)際に、第1メモリ領域32aと第2メモリ領域32bとで異なるBankからデータを読み出すことになるため、当該データの読み出しを並列に行うことができる。
【0483】
具体的には、例えば第1メモリ領域32aに同一のECCフレームとして管理される256Byteのデータのうち、論理アドレス「0x0000000」の64Byteのデータが第2メモリ領域32bに書き込まれており、論理アドレス「0x0000001」~「0x0000003」の各々の64Byteのデータが第1メモリ領域32aに書き込まれており、論理アドレス「0x0000000」の64Byteデータを第1メモリ領域32aに書き戻す場合を想定する。
【0484】
この場合において、これらのデータが同一のBankに書き込まれているものとすると、まず、第2メモリ領域32bに書き込まれている論理アドレス「0x0000000」の64Byteのデータ(を含むECCフレーム)を読み出した後に、第1メモリ領域32aに書き込まれている論理アドレス「0x0000001」~「0x0000003」の各々の64Byteのデータ(を含むECCフレーム)を読み出す(つまり、同一のBankに対して逐次的に2回読み出し処理を行う)必要がある。
【0485】
これに対して、論理アドレス「0x0000000」の64Byteのデータ(第2メモリ領域32bのデータ)及び論理アドレス「0x0000001」~「0x0000003」の各々の64Byteのデータ(第1メモリ領域32aのデータ)が異なるBankに書き込まれているものとすると、論理アドレス「0x0000000」の64Byteのデータと論理アドレス「0x0000001」~「0x0000003」の各々の64Byteのデータとを並列にSCM32から読み出すことができる。
【0486】
本実施形態において、上記した構成を採用した場合には、第2メモリ領域32bから第1メモリ領域32aへのデータの書き戻し処理のレイテンシを短くすることができる。
【0487】
なお、図22においては省略されていたが、図45に示すようにSCMコントローラ31は書き込み位置決定部323を更に含み、上記したデータの書き込み位置を決定する処理は、当該書き込み位置決定部323によって実行されるものとする。
【0488】
また、図45に示すように、SCMコントローラ31は、不良管理部324を更に含む構成であってもよい。不良管理部324は、例えば第2メモリ領域32b内のデータの書き込みまたは読み出しができない不良領域(Page)の位置を管理する。なお、不良管理部324によって位置が管理される不良領域は、例えばSCMモジュール30の出荷時に不良領域として認識されているPageであってもよいし、メモリセルが疲弊することによって不良領域となったPageであってもよい。このような不良管理部324によれば、例えば書き込みコマンドにおいて指定されているデータを第2メモリ領域32bに書き込む際に不良領域を回避することができる。
【0489】
また、上記したようにBank毎またはリングバッファ毎に空き領域を管理する構成の場合、書き戻し元(つまり、第1メモリ領域32aに書き戻されるデータ)を決定する必要がある。この場合、例えば有効な64Byteのデータが少ないリングバッファを選択するようにしてもよい。なお、有効なデータの数は、リングバッファ毎に予め管理されていればよい。具体的には、有効なデータの数は、データを追記した際に1を加算し、データを無効化した際に1を減算するようにカウントすることで管理可能である。このように有効なデータが少ないリングバッファを書き戻し元として選択することにより、書き戻し対象データのデータ量を減らし、第2メモリ領域32bの空き領域を短時間で確保することができる。結果として、SCMモジュール30の書き込み性能を向上させることができる。
【0490】
なお、本実施形態においては、例えばSCM32が図22に示すSCM0~SCM2s-1の2s個のSCMチップを備え、当該2s個のSCMチップが有するメモリ領域を第1メモリ領域32a及び第2メモリ領域32bに分割して管理するものとして説明したが、この場合には、CPU10が実質的に使用可能なメモリ領域(容量)が減ることになる。このため、例えばSCM32が2s個のSCMチップを備えている場合には、図46に示すように当該2s個のSCMチップが有するメモリ領域は第1メモリ領域32aとして使用し、第2メモリ領域32bを確保するためのSCMチップ(例えば、SCM2s及び2s+1)を別途追加するようにしてもよい。このような構成によれば、CPU10が実質的に使用可能なメモリ領域(容量)が削減されることを回避することができる。なお、図46においては、第1メモリ領域32a及び第2メモリ領域32bが異なるSCMチップに割り当てられているが、上記したようにSCMチップが別途追加された場合であっても、同一のSCMチップ内に第1メモリ領域32a及び第2メモリ領域32bが割り当てられていてもよい。
【0491】
すなわち、上記した本実施形態において、第1メモリ領域32a及び第2メモリ領域32bは、同一のSCMチップが有するメモリ領域を分割することによって確保されていてもよいし、互いに異なるSCMチップに確保されてもよい。
【0492】
なお、第2メモリ領域32b(として確保されるメモリ領域)の容量(サイズ)は、例えばSCMモジュール30の外部(例えば、CPU10)から指定されても構わない。この第2メモリ領域32bの容量が外部から指定される場合、当該第2メモリ領域32bの容量が直接的に指定されてもよいし、第2メモリ領域32bに容量を追加または第2メモリ領域32bから容量を削減する際に当該追加または削減する容量が指定されてもよい。なお、「第2メモリ領域32bに容量を追加する」とは第1メモリ領域32aの一部を第2メモリ領域32bに割り当てることを含み、「第2メモリ領域32bから容量を削減する」とは第2メモリ領域32bの一部を第1メモリ領域32aに割り当てることを含む。また、必要に応じて、SCMモジュール30(SCM32)が有するメモリ領域が区分け(分割)されたパーティションまたはネームスペースを指定してもよい。このような第2メモリ領域32bの容量の指定に関する処理は、例えば図10に示すステップS6において実行することができる。
【0493】
また、上記したように第2メモリ領域32bの容量が外部から指定されると、当該第2メモリ領域32bに書き込まれているデータは全て第1メモリ領域32aに書き戻されるものとする。これにより、第2メモリ領域32b及び第2アドレス変換テーブルは空の状態となり、図25に示す空き領域管理テーブルにおいて、Headポインタ32c及びTailポインタ32dは第2メモリ領域32bが空である(データが書き込まれていない)ことを示す状態となる。
【0494】
更に、上記した外部からの指定により、第2メモリ領域32bに容量が追加され、第1メモリ領域32aの容量が削減される場合には、これに合わせて図4に示す第1アドレス変換テーブルのエントリ数を削減する。また、第2メモリ領域32bに容量が追加されるため、Headポインタ32c及びTailポインタ32dの制御方法を更新してもよい。具体的には、第2メモリ領域32bとして追加された部分(領域)に関してもHeadポインタ32c及びTailポインタ32dが示すことができるような制御方法とする。また、図26に示す第2アドレス変換テーブルにおけるインデックス数及びエントリ数も増加させる。なお、第2アドレス変換テーブルにおいてインデックス数を増加する場合は、図27に示す上位ビット及び下位ビットのビット数も併せて変更する。なお、本実施形態においては、第1メモリ領域32aから削減された領域に書き込まれていたデータは保証されないものとする。すなわち、削減された領域のデータに対して後からCPU10が読み出しコマンドを発行したとしても当該データを返すことはできない。また、削減された領域の論理アドレスを指定した書き込みコマンドを発行したとしても書き込み処理を実行することはできない。このような場合、SCMモジュール30は、CPU10に対してエラー応答を返す。
【0495】
一方、第2メモリ領域32bの容量が削減され、第1メモリ領域32aの容量が追加される場合には、これに合わせて図4に示す第1アドレス変換テーブルのエントリ数を増加する。また、第2メモリ領域32bの容量が削減されるため、Headポインタ32c及びTailポインタ32dの制御方法を更新してもよい。具体的には、第2メモリ領域32bから削減された部分(領域)をHeadポインタ32c及びTailポインタ32dが示すことがないような制御方法とする。また、図26に示す第2アドレス変換テーブルにおけるインデックス及びエントリ数も減少させる。なお、第2アドレス変換テーブルにおいてインデックス数を減少させる場合は、図27に示す上位ビット及び下位ビットのビット数も併せて変更する。
【0496】
以上の処理が完了したら、SCMモジュール30の外部(例えば、CPU10)に対して完了応答を返す。
【0497】
なお、SCMモジュール30の外部からの第2メモリ領域32bの容量の指定は、当該外部からのコマンドでパーティションまたはネームスペースを生成するときに行われても構わない。しかしながら、外部から指定されたパーティションまたはネームスペースの容量と当該外部から指定される第2メモリ領域32bの容量との合計が、SCMモジュール30が有する第1メモリ領域32a及び第2メモリ領域32bの合計よりも大きい場合がある。この場合は実現不可能なため、SCMモジュール30の外部に対してはエラー応答が返される。
【0498】
また、本実施形態において、SCMコントローラ31は、第2アドレス変換テーブルにおける管理単位(64Byte単位)の4つのデータ(256Byteのデータ)及びメタデータに対してECCパリティ(誤り訂正用のパリティ)を付加して第2メモリ領域32bに書き込む。本実施形態においては、このような構成により、第2メモリ領域32bに書き込まれるデータの信頼性を向上させることができる。
【0499】
なお、本実施形態においては、64Byteのデータを4つパッキングした256Byteのデータ及びメタデータに対してECCパリティが生成されるものとして説明したが、当該ECCパリティ及びメタデータは、64Byteのデータ(つまり、第2アドレス変換テーブルにおける管理単位のデータ)毎に生成されてもよい。
【0500】
すなわち、上記した図6においては4つの64Byteのデータ及びメタデータに対してECCパリティを生成し、4つの64Byteのデータ、メタデータ及びECCパリティというECCフレームが構築されていたが、図47に示すように、1つの64Byteのデータ及びメタデータに対してECCパリティを生成し、1つの64Byteのデータ、メタデータ及びECCパリティというECCフレームが構築されてもよい。
【0501】
このような構成によれば、上記した256Byteのデータから構成されるECCフレームと比較してECCフレーム長が短くなるため、当該256Byteのデータから構成されるECCフレームのときと比較して、アクセスするSCMチップ(またはパッケージ)の数が少ない。具体的には、256ByteのデータでECCフレームを構築していた際には、例えば図7に示すSCM0~SCMnの各々のBank0からデータを読み出す必要があるが、図47に示すECCフレームの場合には、例えばSCM0及びSCM1にアクセスする(SCM0及びSCM1からデータを読み出す)のみでよい。この場合、SCM2~SCMnのBank0にはBusy状態ではないため、当該SCM2~SCMnのBank0に対する後続の読み出し処理を実行することができる。
【0502】
よって、上記した図47に示すようにECCフレームを構成した場合には、読み出し性能(リード性能)を向上させることができる。なお、図47に示すECCフレームは、図6において説明したECCフレームと比較してECCフレーム長が短くなるため、ECCの訂正能力は低下する。この場合において、ECCの訂正能力を維持するためには、ECCパリティのサイズを大きくすればよい。
【0503】
また、本実施形態においては第2アドレス変換テーブル(論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係)がセットアソシアティブ方式で管理され、論理アドレスの下位ビットをインデックス、当該論理アドレスの上位ビットをタグとして用いるものとして説明したが、このような第2アドレス変換テーブルを参照して、第1アドレス変換テーブルにおいて管理されている256Byteのデータの論理アドレス(アライメントの揃った64Byte単位の4つの連続する論理アドレス)に対応する物理アドレスを取得する場合を想定する。具体的には、例えばCPU10から論理アドレスがシーケンシャルである複数の読み出しコマンドが送信され、第2メモリ領域32b内の4つの物理アドレスを取得する場合、第2メモリ領域32bから第1メモリ領域32aにデータを書き戻す際に、第2メモリ領域32b内の4つの物理アドレスを取得する場合、またはウェアレベリング処理またはパトロール・リフレッシュ処理時に、第2メモリ領域32b内の4つの物理アドレスを取得する場合等を想定する。なお、この場合におけるアライメントの揃った4つの連続する論理アドレスが例えば、「0b0000」、「0b0001」、「0b0010」、「0b0011」であるものとする。これらの「0bxxxx」は、論理アドレスを2進数表記したものである。
【0504】
この場合において、上記したように論理アドレスの下位ビットをインデックスとして用いるものとすると、当該インデックスはそれぞれ「00」、「01」、「10」、「11」となる。これによれば、論理アドレス「0b0000」、「0b0001」、「0b0010」、「0b0011」に対応する物理アドレスを取得するためには、それぞれ異なるインデクッスに対応づけられているエントリを検索する必要があり、非効率である。
【0505】
そこで、第2アドレス変換テーブルにおいては、図48に示すように論理アドレスの上位ビット及び下位2ビットをタグとして用い、当該タグとして用いる以外の部分をインデックスとして用いる構成としてもよい。このような構成によれば、第1アドレス変換テーブルにおいて管理されている256Byteのデータ(つまり、同一の管理単位として管理される複数のデータ)の論理アドレス(64Byte単位の4つの連続する論理アドレス)を含むエントリが第2アドレス変換テーブルにおいて同一のインデックスに対応づけられるようになる。具体的には、4つの連続する論理アドレスが上記したように「0b0000」、「0b0001」、「0b0010」、「0b0011」であるものとすると、当該論理アドレスのインデックスは全て「00」となる。これによれば、4つの連続する論理アドレスに対応する物理アドレスを1つのインデックス「00」を参照するのみで取得(検索)することができるため、第2アドレス変換テーブル(例えば、DRAM33)へのアクセス効率を向上させることができる。
【0506】
なお、第2アドレス変換テーブルにおいて論理アドレス全体に対するハッシュ値をインデックスとして用いてもよいことについて上記したが、ここでは、図48のように3つに分割して、タグ下位ビット以外の部分のハッシュ値を計算し、これを元に第2アドレス変換テーブルを参照するようにしてもよい。
【0507】
また、本実施形態においては、第2アドレス変換テーブル(論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係)がセットアソシアティブ方式で管理されるものとして説明したが、例えばN-ウェイのセットアソシアティブ方式の場合には、同一のインデックスにN個のエントリ(64Byteのデータ)しか登録することができない。例えば上記した第2メモリ領域32bに対する不揮発化処理において第2アドレス変換テーブルにエントリを登録することができない(空きエントリがない)場合には、データを第2メモリ領域32bに書き込むことができず、SCMモジュール30における書き込み性能を向上させることができない。
【0508】
すなわち、本実施形態において説明したセットアソシアティブ方式で第2アドレス変換テーブルを管理する場合には、第2メモリ領域32bに書き込まれるデータにアクセスするための論理アドレスの偏りによって、書き込み性能の向上が妨げられる場合がある。
【0509】
そこで、本実施形態に係る第2アドレス変換テーブル(論理アドレスと第2メモリ領域32b内の物理アドレスとの対応関係)は、図49に示すようなリスト方式で管理されても構わない。このような第2アドレス変換テーブルによれば、同一のインデックスに対応づけられるエントリ(つまり、論理アドレス)に偏りが生じた場合であっても、当該エントリを適宜追加することによって当該偏りに対応することが可能となる。
【0510】
更に、本実施形態においては第2メモリ領域32bに書き込まれたデータを当該第2メモリ領域32bから第1メモリ領域32aに書き戻すものとして説明したが、例えばバッファ314に格納されているデータが第2メモリ領域32bに書き込まれた場合であっても、当該データをバッファ314から解放せず、当該バッファ314から第1メモリ領域32aに当該データを書き戻すようにしてもよい。このような構成によれば、バッファ314へのアクセス速度は第2メモリ領域32bへのアクセス速度よりも高速であるため、書き戻し処理をより高速に実行することが可能となる。
【0511】
なお、このような構成の場合には、第2アドレス変換テーブルにおいて、論理アドレス及び物理アドレスとの対応関係とともに、当該論理アドレスを使用してアクセスされるデータが格納されているバッファ領域が管理されるものとする。この場合、第2アドレス変換テーブルには、図50及び図51に示すように、例えばバッファ領域(に格納されているデータ)が有効であるか無効であるかを示すバッファValid及び当該バッファ領域に付されているバッファ領域エントリ番号が追加されていればよい。なお、図50は、図26に示すセットアソシアティブ方式で管理される第2アドレス変換テーブルにバッファValid及びバッファ領域エントリ番号が追加された例を示している。図51は、図49に示すリスト方式で管理される第2アドレス変換テーブルにバッファValid及びバッファ領域エントリ番号が追加された例を示している。
【0512】
詳しい説明については省略するが、このような第2アドレス変換テーブルによれば、第2メモリ領域32bに書き込まれたデータを第1メモリ領域32aに書き戻す場合に、当該データが書き込まれている第2メモリ領域32b内の物理アドレス及び当該データが有効であることを示すバッファValidに対応づけられているバッファ領域エントリ番号を取得し、当該バッファ領域エントリ番号が付されているバッファ領域に格納されているデータを第1メモリ領域32aに転送する(つまり、SCM32に書き込む)ことができる。
【0513】
以下、本実施形態に係るSCMモジュール30と本実施形態の比較例に係るSCMモジュール30´との主な差異を簡単に説明する。
【0514】
上記した本実施形態に係るSCMモジュール30は、本実施形態の比較例に係るSCMモジュール30´とは異なり、第1メモリ領域32a(256Byte管理領域)及び第2メモリ領域32b(64Byte管理領域)を有する。
【0515】
このため、本実施形態に係るSCMモジュール30は、書き込み処理において書き込み方式(書き込み先)を決定し、第2メモリ領域32bにAppend Write方式でデータが書き込まれた場合には第2アドレス変換テーブル(64Byte領域アドレス変換テーブル)を更新する。なお、更新された第2アドレス変換テーブルは所定のタイミングで不揮発化される(SCM32に書き込まれる)
また、本実施形態の比較例に係るSCMモジュール30´においては読み出し処理において256Byte単位で論理アドレスと物理アドレスとの対応関係を管理するアドレス変換テーブルのみを参照するが、本実施形態に係るSCMモジュール30は、当該アドレス変換テーブルに相当する第1アドレス変換テーブル以外に、第2アドレス変換テーブル(64Byte単位で論理アドレスと物理アドレスとの対応関係を管理するアドレス変換テーブル)を参照する点が当該SCMモジュール30´とは異なる。
【0516】
また、本実施形態に係るSCMモジュール30は、本実施形態の比較例に係るSCMモジュール30´とは異なり、第2メモリ領域32bに書き込まれたデータを第1メモリ領域32aに書き戻す書き戻し処理を所定のタイミングで実行する。
【0517】
本実施形態に係るSCMモジュール30は、このような本実施形態の比較例に係るSCMモジュール30´との差異を含む構成により、当該SCMモジュール30´と比較したSCM32における書き込み性能の向上を実現することができる。
【0518】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【0519】
10…CPU、20…DRAM、30…SCMモジュール(メモリシステム)、31…SCMコントローラ、32…SCM(不揮発性メモリ)、33…DRAM、34…電源断検知部、35…バッテリ、40…ストレージ装置、50…アクセラレータ、60…ネットワークインタフェース、311…CPUインタフェース、312…制御部、313…データ転送部、314…バッファ、315…バッファ管理部、316…第1アドレス変換部、317…ECCエンコーダ、318…ECCデコーダ、319…SCMインタフェース、320…DRAMインタフェース、321…第2アドレス変換部、322…第2メモリ領域管理部、323…書き込み位置決定部、324…不良管理部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25
図26
図27
図28
図29
図30
図31
図32
図33
図34
図35
図36
図37
図38
図39
図40
図41
図42
図43
図44
図45
図46
図47
図48
図49
図50
図51