以下、実施形態の書き込み制御装置、ストレージ装置、ネットワークシステム、書き込み制御方法およびプログラムについて、図面を参照しながら詳細に説明する。なお、以下の説明において、同様の機能を持つ構成要素については同一の符号を付して、重複した説明を適宜省略する。
<第1実施形態>
図1は、第1実施形態に係る制御装置1のハードウェア構成例を示すブロック図である。制御装置1は、例えば、車載用、産業用、通信用、医療用、電力用の制御装置である。また、制御装置1は、クラウドやエッジに配置されるデータセンター内の制御装置であってもよい。制御装置1は、プロセッサ21とメモリ22などを含むホスト200と、ストレージ100(ストレージ装置)と、ネットワークインタフェース300とを備える。ホスト200のプロセッサ21とメモリ22はメモリバス23で接続される。ホスト200のプロセッサ21とストレージ100、ホスト200のプロセッサ21とネットワークインタフェース300は、例えばPCI Express(登録商標)などの内部バス400で接続される。
ホスト200は、ストレージ100に対してデータ書き込み要求やデータ読み出し要求を行う。ネットワークインタフェース300は、例えばイーサネット(登録商標)などのネットワークに接続するためのインタフェースである。制御装置1はこのネットワークインタフェース300を備えることにより、ネットワーク上の他の装置と通信を行うことができる。
ストレージ100は、例えば、NANDフラッシュメモリなどの不揮発性メモリを記憶部として用いたSSDなどである。不揮発性メモリには、NANDフラッシュメモリに限らず、例えば、NORフラッシュメモリ、FeRAM(強誘電体メモリ)、MRAM(強磁性体メモリ)、PRAM(相変化メモリ)、ReRAM(抵抗変化型メモリ)などを用いてもよい。ホスト200とストレージ100は、例えば、NVM Expressなどの規格で接続される。ストレージ100は、NVM Expressなどで定義されるネームスペース(名前空間)による分離機能に対応している。
図2は、ストレージ100の記憶部として用いるNANDフラッシュメモリの構造を説明する図である。図2では、1つのチップ(ダイ)の構造を示している。NANDフラッシュメモリは、ブロック単位でデータの消去を行うことができる。一方、データの読み書きは、ページと呼ばれる単位で行われる。1つのブロックは複数のページから構成され、1つのプレーンは複数のブロックから構成され、1つのチップ(ダイ)は複数のプレーンから構成される。
図3は、ストレージ100のハードウェア構成例を示すブロック図である。ストレージ100は、NANDフラッシュメモリを用いた記憶部110と、NANDコントローラ120と、ストレージコントローラ130(書き込み制御装置)とを備える。NANDコントローラ120は、NANDフラッシュメモリを制御するものであり、NANDフラッシュメモリへのアクセス機能をストレージコントローラ130に提供する。ストレージコントローラ130は、プロセッサ11や、インタフェースコントローラ12、メモリ13などを含む。メモリ13は、例えば、DRAMやSRAMなどである。
図4は、第1実施形態に係る制御装置1の機能的な構成例を示すブロック図である。ホスト200は、制御装置1の機能を実現するための複数のアプリケーション210a~210fと、プロセッサ21やメモリ22などのリソースの管理を行い、アプリケーション210a~210fやユーザに対するインタフェースを提供するオペレーティングシステムと220a,220bと、複数の仮想マシンを実現するためのハイパーバイザ230とを備える。本実施形態では、アプリケーション210a~210eがそれぞれ異なるネームスペースを使用し、アプリケーション210fはアプリケーション210eと共通のネームスペースを使用することを想定する。また、オペレーティングシステム220aは即時性が優先されるリアルタイムOS、オペレーティングシステム220bは汎用OSであり、アプリケーション210a~210cはオペレーティングシステム220a上で動作し、アプリケーション210d~210fはオペレーティングシステム220b上で動作することを想定する。ネームスペースはアプリケーションに限らず、オペレーティングシステムや、ホスト毎に使い分けてもよい。
ネットワークインタフェース300は、ネットワークを介して他の装置と通信する通信部310を備える。
ストレージ100内の記憶部110は、例えば、NANDフラッシュメモリのチップ(ダイ)を複数用いて構成される。
ストレージ100内のNANDコントローラ120は、記憶部110に対してデータとエラー訂正符号の書き込みを実行する書き込み実行部121と、記憶部110に対してブロックに含まれるデータの消去を実行する消去実行部122と、記憶部110に対してデータとエラー訂正符号の読み出しを実行する読み出し実行部123とを備える。本実施形態では、ストレージ100の内部に複数のNANDコントローラ120を備える例を想定するが、ストレージ100の内部に1つのNANDコントローラ120を備える構成であってもよい。
ストレージ100内のストレージコントローラ130は、データ種別設定受付部131と、データ種別設定記憶部132と、ブロック管理情報記憶部133と、変換テーブル記憶部134と、書き込み受付部135と、データ種別識別部136と、暗号化処理部137と、書き込み方法選択部138と、一時記憶部139と、エラー訂正符号付与部140と、読み出し受付部141と、読み出し方法選択部142と、エラー訂正処理部143と、復号処理部144と、再書き込み指示部145とを備える。
データ種別設定受付部131は、ホスト200のアプリケーション210a~210fなどから、データ種別とそのデータの書き込み方法および読み出し方法を制御するパラメータ(以下、「読み書きパラメータ」という)の設定を受け付ける。なお、本実施形態においては、ホスト200が設定するパラメータに従ってストレージ100におけるデータの書き込み方法および読み出し方法が制御されることを想定するが、データの書き込み方法のみを制御する構成であってもよい。この場合、ホスト200が設定するパラメータは、データの書き込み方法を制御するための書き込みパラメータとなる。
データ種別設定記憶部132は、設定されたデータ種別とそれに対応する読み書きパラメータの組(以下、「データ種別設定」という)を記憶する。データ種別設定の詳細は後述する。
ブロック管理情報記憶部133は、記憶部110のブロック管理情報を記憶する。ブロック管理テーブルの詳細は後述する。
変換テーブル記憶部134は、ホスト200から指定される論理アドレスと物理アドレスの変換を行うための変換テーブルを記憶する。変換テーブルの詳細は後述する。
書き込み受付部135は、ホスト200から書き込み要求を受け付ける。
データ種別識別部136は、書き込み要求されたデータ(書き込み対象データ)の種別を識別する。
暗号化処理部137は、書き込み対象データを必要に応じて暗号化する。暗号化方式は特に限定されるものではなく、任意の方式を使用できる。
書き込み方法選択部138は、データ種別識別部136で得られたデータ種別に対応するデータ種別設定とブロック管理情報と変換テーブルを参照して、書き込み対象データの記憶部110への書き込み方法を決定する。
一時記憶部139は、書き込み対象データや読み出し対象データなどを一時的に記憶する。
エラー訂正符号付与部140は、書き込み方法選択部138で指定されたエラー訂正方法とエラー訂正符号長に従ってエラー訂正符号を生成し、記憶部110に書き込まれる書き込み対象データに付与する。
読み出し受付部141は、ホスト200から読み出し要求を受け付ける。
読み出し方法選択部142は、データ種別設定と変換テーブルを参照して、読み出し対象データの種別に応じた読み出し方法を決定する。
エラー訂正処理部143は、読み出し方法選択部142から指定されたエラー訂正方法により、記憶部110から読み出したデータとエラー訂正符号からデータに対するエラー訂正処理を行う。
復号処理部144は、読み出し対象データが書き込み時に暗号化処理部137によって暗号化されている場合に、この暗号化されたデータを復号する。
再書き込み指示部145は、書き込み要求に応じて記憶部110に書き込んだデータを再度書き込む処理を行う。例えば、再書き込み指示部145は、書き込み可能なページが不足してきた場合に行うガベージコレクション処理や、書き込んでから時間の経過したデータを再度書き込むタイマ処理を行う。
上述のデータ種別設定記憶部132、ブロック管理情報記憶部133、変換テーブル記憶部134および一時記憶部139は、例えば、DRAMやSRAMなどの揮発性メモリで実現されてもよいし、NANDフラッシュメモリなどの不揮発性メモリを用いてもよい。後者の場合に、揮発性メモリをキャッシュのように用いてもよい。
上述のデータ種別設定受付部131、書き込み受付部135、データ種別識別部136、暗号化処理部137と、書き込み方法選択部138、エラー訂正符号付与部140、読み出し受付部141、読み出し方法選択部142、エラー訂正処理部143、復号処理部144および再書き込み指示部145は、例えば、プロセッサ11がメモリ13を使用しながら所定のプログラムを実行することにより実現される。なお、暗号化処理部137、復号処理部144、エラー訂正符号付与部140およびエラー訂正処理部143は、例えば、ハードウェアアクセラレータを用いて実現してもよい。これらストレージコントローラ130内に実現される機能的な各部の処理については、詳細を後述する。
図5は、ホスト200から発行されるコマンドを説明する図である。ホスト200で動作するアプリケーション210a~210fは、ストレージ100を使用する前に、ストレージ100に対して図5に示すデータ種別設定コマンドC1とネームスペース作成コマンドC2を発行することにより、データ種別および読み書きパラメータの設定とネームスペースの作成を行った後、書き込みコマンドC3や読み出しコマンドC4を発行して、データの書き込みや読み出しを要求する。データ種別設定コマンドC1とネームスペース作成コマンドC2の発行によるデータ種別および読み書きパラメータの設定とネームスペースの作成は、ストレージ100の初期設定といえる。
データ種別設定コマンドC1は、「データ種別識別情報」と「読み書きパラメータ」とを含んでいる。「データ種別識別情報」は、書き込み対象データの種別を識別するための情報であり、図5に示すように、「ネームスペース識別情報」、「アドレス領域識別情報」および「任意データ識別情報」を含んでいる。
「ネームスペース識別情報」は、NVM Expressなどで定義されるネームスペースの識別情報である。例えば、ネームスペースのID(NID)を指定できる。「アドレス領域識別情報」は、例えば、そのネームスペースにおけるLBA(Logical Block Address)の領域範囲である。「任意データ識別情報」は、位置、長さ、マスク、値によって書き込み対象データの任意のフィールドでマッチングすることができる識別情報である。位置と長さは、書き込み対象データの先頭からの位置(バイト単位)とマッチング対象とするデータの長さ(バイト単位)であり、マッチング対象のデータとマスクの論理積(AND)演算を行い、その出力値と指定された値が一致する場合にマッチする。これにより、書き込み対象データの指定された位置の値に基づいて、書き込み対象データの種別を識別することが可能となる。本実施形態では、上述の「ネームスペース識別情報」と、「アドレス領域識別情報」と、「任意データ識別情報」とを組み合わせた「データ種別識別情報」に基づいて、ストレージ100に対して書き込み対象データの種別を識別するように設定することができる。
「読み書きパラメータ」は、上述の「データ識別情報」に対応したデータ書き込み方法とデータ読み出し方法を制御するパラメータである。「読み書きパラメータ」は、図5に示すように、ホスト200からの書き込み要求に応じて記憶部110に書き込み対象データを書き込む際に用いる「書き込み要求時パラメータ」(第1パラメータ)と、ホスト200からの書き込み要求に応じて記憶部110に書き込んだデータを再度書き込む際に用いる「再書き込み時パラメータ」(第2パラメータ)とを含んでいる。
「書き込み要求時パラメータ」と「再書き込み時パラメータ」は、それぞれ、「冗長書き込み数」、「冗長書き込み先選択ポリシー」、「冗長読み出し数」、「冗長読み出し元選択ポリシー」、「多値記憶モード」、「エラー訂正方式」および「エラー訂正符号長」を含んでいる。
「冗長書き込み数」は、記憶部110に同じデータをいくつ書き込むかを指定する。「冗長書き込み先選択ポリシー」は、「冗長書き込み数」で2つ以上同じデータを書き込むことを指定した場合の書き込み先を選択する際のポリシーを指定する。これには例えば、記憶部110のうち、異なるNANDコントローラ120に接続されているNANDフラッシュメモリ、同じNANDコントローラ120の別チャネルに接続されたNANDフラッシュメモリ、同じNANDフラッシュメモリ(ダイ)の中での離れた位置、任意のNANDフラッシュメモリなどを指定することができる。
「冗長読み出し数」は、「冗長書き込み数」で2以上の数が指定され、同一のデータが記憶部110の複数の領域に重複して記憶されている場合に、それらのうちのいくつ読み出しを実行するかを指定する。「冗長読み出し元選択ポリシー」は、「冗長読み出し数」で指定された数のデータを記憶部110のどの領域から読み出すかを選択するためのポリシーである。例えば、NANDフラッシュメモリが接続されているNANDコントローラ120の負荷が低いものから選択、チャネルの負荷が低いものから選択、任意の領域から読み出すなどを指定することができる。
「多値記憶モード」は、NANDフラッシュメモリの多値記憶モードを指定するものである。例えば、MLC(Multi Level Cell)のNANDフラッシュメモリで構成される記憶部110において、pSLC(pseudo Single Level Cell)モードで書き込むなど、記録モードを指定することができる。
「エラー訂正方式」には、BCH(Bose-Chaudhuri-Hocquenghem)符号や、LDPC(Low Destiny Parity Check)符号などを指定することができる。「エラー訂正符号長」は、エラー訂正方式で指定した符号の符号長を指定することができる。
データ種別設定コマンドC1によって設定された情報(データ種別設定)は、データ種別設定記憶部132に記憶される。図6は、データ種別設定記憶部132が記憶するデータ種別設定の一例を示す図である。「データ種別識別情報」と「読み書きパラメータ」は、例えば図6に示すようなデータ種別設定として設定される。「データ種別識別情報」と「読み書きパラメータ」にはそれぞれIDが割り当てられ、これらのID(「データ種別ID」と「読み書きパラメータID」)は後述するブロック管理情報や変換テーブルで用いられる。「データ種別識別情報」の“*”は、全ての値にマッチすることを示している。例えば、データ種別IDが“0”の場合では、「ネームスペースID」が“1”の書き込みに対しては、アドレスやデータが何であれ、この読み書きパラメータが適用される。
「読み書きパラメータ」は、上述のように「書き込み要求時パラメータ」と「再書き込み時パラメータ」を含むが、「再書き込み時パラメータ」は再書き込みの回数に応じて異なるパラメータを設定できる。図6は、「再書き込み時パラメータ」として、「読み書きパラメータID」が“1”の「1回目再書き込み時パラメータ」と、「読み書きパラメータID」が“2”の「2回目再書き込み時パラメータ」とが設定された例を示している。これにより、データ再書き込みの回数に応じて使用するパラメータを変更し、異なる書き込み方法で書き込みを行うことができる。
ホスト200からのデータ種別設定コマンドC1により各データ種別とそれに対応する読み書きパラメータがストレージ100に設定されると、次にホスト200は、ネームスペース作成コマンドC2を発行し、ネームスペースの作成をストレージ100に指示する。ネームスペース作成コマンドC2は、図5に示すように、「ネームスペース識別情報」、「予備を含めたサイズ」および「サイズ」を含んでいる。「ネームスペース識別情報」は、例えば、ネームスペースの識別子であるNIDである。「予備を含めたサイズ」は、新たにデータの書き込みを行うために確保する領域を含めたサイズであり、例えばオーバープロビジョニングの量を制御することができる。一方、「サイズ」はそのネームスペースで識別されるストレージ100においてユーザが使用できる量を指定する。
なお、データ種別設定は、ホスト200から指定する以外に、ストレージ100に予め設定しておき、アプリケーション210a~210fが自身の要求に合ったデータ種別設定を選択して、所望の動作を実現する方法もある。
次に、ネームスペース作成コマンドC2に応じたネームスペース作成処理について説明する。図7は、ネームスペース作成処理の処理手順の一例を示すフローチャートである。データ種別設定受付部131は、データ種別設定コマンドC1によりホスト200からデータ種別設定がされた後、ネームスペース作成コマンドC2が発行されると、まず、ネームスペース作成コマンドC2のエラーチェックを行う(ステップS101)。例えば、「予備容量を含めたサイズ」として「サイズ」より小さい量が指定されている場合はエラーとなる。ここで、ネームスペース作成コマンドC2にエラーがあると判定した場合(ステップS101:Yes)、データ種別設定受付部131は、ホスト200にネームスペース作成のエラーを通知して(ステップS102)、処理を終了する。
一方、ネームスペース作成コマンドC2にエラーがなければ(ステップS101:No)、データ種別設定受付部131は、ネームスペース作成コマンドC2で指定されるネームスペースに対応するデータ種別のデータを書き込むためのブロックとして、ネームスペース作成コマンドC2で指定される「予備容量を含めたサイズ」分のブロックを確保し、確保したブロックを「データ種別ID」と「読み書きパラメータID」で指定される「読み書きパラメータ」に対応した物理ブロックに設定する(ステップS103)。ここでのブロックの確保は、冗長書き込み先選択ポリシーが設定されている場合、そのポリシーを満たすように適宜NANDコントローラ120や、チャネル、ダイの中の位置などを考慮して選択される。
これらの情報は、ブロック管理情報としてブロック管理情報記憶部133に記憶される。図8-1および図8-2は、ブロック管理情報記憶部133が記憶するブロック管理情報の一例を示す図である。ここでは、ブロック管理情報が図8-1に示すブロック管理テーブルと図8-2に示す書き込み可能ページテーブルとを含み、これらブロック管理テーブルと書き込み可能ページテーブルを使ってブロックの管理を行うものとして説明する。
図8-1に示すように、ブロック管理テーブルでは、物理ブロック番号に対応した「データ種別ID」、「読み書きパラメータID」、「ページ使用状況」、「読み出しエラー発生回数」、「消去回数」および「ステータス」の情報を管理する。
「物理ブロック番号」は、NANDフラッシュメモリのブロックに対して割り当てられた番号である。例えば、このブロックの番号は、ストレージ100を識別するストレージ識別ビットと、そのストレージ100内のNANDコントローラ120を識別するNANDコントローラ識別ビットと、そのNANDコントローラ120に接続されたNANDフラッシュメモリのチャネルを識別するチャンネル識別ビットと、そのチャネルに接続されているNANDフラッシュメモリ(ダイ)を識別するNAND識別ビットで構成されていてもよい。このようにすることで、その番号から接続形態を知ることができる。
「データ種別ID」と「読み書きパラメータID」は、データ種別設定記憶部132に記憶されている識別子である。これは、その物理ブロックが、「データ種別ID」と「読み書きパラメータID」で識別される読み書きパラメータでのページの書き込みに使用できることを示している。
「ページ使用状況」は、その物理ブロック内のページの使用状態を示している。例えば、ブロック内のページが未使用(書き込み可能)であれば“0”、使用中(書き込み不可)であれば“1”、使用が終わり消去待ちであれば“2”、エラーが発生して無効となっている場合には“3”として管理される。
「読み出しエラー発生回数」は、その物理ブロック内のページの読み出しにおいて、エラー訂正処理によりエラーを検知した回数を記録する。訂正可能なエラーと訂正不能なエラーは別にカウントしてもよい。「消去回数」は、その物理ブロックが、製造されてからこれまでに何回消去処理を行ったかを記録する。
「ステータス」は、その物理ブロックの状態を示している。例えば、その物理ブロック内に1つでも使用中のページがある場合には“使用中”、1つも使用中のページがなく、すぐに消去可能な場合には“消去待”、すでに消去されており、全てのページが書き込みできる状態であれば“消去済”、過去に一定以上の読み出しエラー発生が発生したり、訂正不能なエラーが発生したりした場合には、その物理ブロックの使用を禁止する“無効”といった状態を管理する。
書き込み可能ページテーブルは、図8-2に示すように、「データ種別ID」と「読み書きパラメータID」に対応する「書き込み可能ページ数」を管理する。本実施形態では、詳細を後述するガベージコレクション処理において、「データ種別ID」と「書き込みパラメータID」で指定される「読み書きパラメータ」に対応した「書き込み可能ページ数」がいくつあるかをこのテーブルで管理し、不足が予測される「読み書きパラメータ」に対応した書き込み可能な物理ブロックの確保を行う。不足の予測は、例えば、「書き込み可能ページ数」が予め決められた閾値を下回ったかどうかで判定してもよい。この閾値は、「データ種別ID」と「書き込みパラメータID」で指定される「読み書きパラメータ」毎に設定できてもよい。この場合には、データ種別設定コマンドC1にこの閾値を含めるとよい。また、図示しないが、消去対象のブロックを高速に発見するために、ページ使用率の低い物理ブロックを見つけるための情報を管理してもよい。また、上述の「冗長書き込み選択ポリシー」に対応させて、異なるNANDコントローラ120や異なるチャネル毎に管理してもよい。この場合には、「データ種別ID」と「読み書きパラメータID」に加え、NANDコントローラ120のID、NANDコントローラのチャネルのIDのフィールドが加えられる。
上述の「読み書きパラメータ」に対応した物理ブロックの設定は、ブロック管理テーブルから「ステータス」が“消去済”の物理ブロックを探索し、該物理ブロックに対応する「データ種別ID」と「読み書きパラメータID」を設定し、「ページ使用状況」を全て“0”に設定し、書き込み可能ページテーブルの該当する「データ種別ID」と「読み書きパラメータID」に対応する「書き込み可能ページ数」に、該物理ブロックに含まれるページ数を足すことで行われる。例えば、これは、「書き込み可能ページ数」が「読み書きパラメータ」毎に設定される閾値を上回るまで行うようにしてもよい。
以上の処理が完了すると、データ種別設定受付部131は、次に、変換テーブル記憶部134に記憶される変換テーブルの設定として、変換テーブルのフォーマットを決定する(ステップS104)。上述したように、データ種別設定で指定された「読み書きパラメータ」毎に「冗長書き込み数」などが異なるため、変換テーブルのフォーマットが異なる。
変換テーブルは、図9-1乃至図9-4に示すように,ネームスペース毎に管理される。各ネームスペースに対応した変換テーブルがあり、それぞれ「論理ページ番号」と、それに対応する「データ種別ID」、「読み書きパラメータID」、「書き込み時刻」、論理ページに対応するデータを得るための「物理ページ番号」やエラー訂正符号に関する情報などが格納されている。
「論理ページ番号」は、LBAに対して割り当てられるページの番号である。例えば、使用するNANDフラッシュメモリのページサイズが4KiBであれば、LBAが0~4095までのデータが論理ページ番号“0”、LBAが4096~8191までのデータが論理ページ番号“1”、というように割り当てられる。「データ種別ID」と「読み書きパラメータID」は、現在書き込みが行われている論理ページ番号のデータがどの読み書きパラメータで書き込まれているかを示している。該当する読み書きパラメータをデータ種別設定記憶部132から取得することで、この論理ページのデータを取得するための読み出し方法を知ることができる。「書き込み時刻」は、後述するタイマ処理にて、書き込みが行われてから一定時間経過したページの再書き込みを行うか否かの判定に用いられる。
各ネームスペースのフォーマットを決定するためには、データ種別設定記憶部132に記憶されているデータ種別設定を参照し、ネームスペース作成コマンドC2で指定されたネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」を取得し、その分の冗長データフィールドを用意する。次に、「多値記憶モード」を確認し、pSLCでの書き込みがあるかを確認する。pSLCで書き込みが行われる場合には、1ページに含まれるデータサイズが異なるため、1つの冗長ページに複数の物理ページを格納するためのフィールドを用意する。また、それぞれの物理ページは通常、ユーザデータ領域と冗長領域から構成される。ユーザデータ領域にホスト200などから指示されたデータを書き込み、冗長領域にはエラー訂正符号などが書き込まれる。
本実施形態では、エラー訂正符号をデータ種別によって変更することができる。物理ページに用意されている冗長領域に収まらないエラー訂正符号については、例えば図10に示すように、拡張エラー訂正符号として、異なる物理ページに、格納できなかった第2のエラー訂正符号を格納してもよい。この場合、変換テーブルには、それぞれの物理ページ番号に対応する拡張エラー訂正符号の格納されている物理ページ番号と、その物理ページにおけるエラー訂正符号の開始位置を格納するフィールドを用意する。物理ページ番号は、前述の物理ブロック番号にそのブロック内のページに対して割り振った通し番号ビットを付加したものである。このように各ネームスペースの変換テーブルのフィールドを決定し、フォーマットを決める。
例えば、NID“1”の変換テーブルは、NID“1”のネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」が“3”のため、図9-1に示すように、3つの冗長データを格納できるようになっている。また、pSLCでの書き込みを行うため、それぞれの冗長データが複数の物理ページで構成されている。また、エラー訂正符号が物理ブロックの冗長領域に収まらないため、上述の拡張エラー訂正符号の記録位置を示す物理ページ番号と、物理ページ番号中の位置を格納できるようになっている。
一方、NID“2”の変換テーブルでは、NID“2”のネームスペースに対応する「読み書きパラメータ」の中で最も大きな「冗長書き込み数」が“2”であるため、図9-2に示すように、2つの冗長データを格納するフィールドがある。NID“2”で用いられる多値記憶モードにはpSLCがあるため、各冗長データには2つの物理ページ番号が格納できるようになっている。NID“2”においては、NID“1”の場合と異なり、エラー訂正符号長が物理ページの冗長領域に収まる長さのため、拡張エラー訂正符号の情報はない。また、NID“4”および“5”の変換テーブルでは、「冗長書き込み数」が“1”で、多値記憶モードがMLCのみであり、エラー訂正符号が物理ページの冗長領域に収まるため、「物理ページ番号」のみが格納される。
以上のようにネームスペース作成コマンドC2で指定されたネームスペースのフォーマットが決定すると、変換テーブルの論理ページ番号に対応する「データ種別ID」、「読み書きパラメータID」、「書き込み時刻」および論理ページに対応するデータを得るための「物理ページ番号」やエラー訂正符号に関する情報が設定され、変換テーブルが作成される(ステップS105)。すなわち、データ種別設定受付部131は、ブロック管理情報のブロック管理テーブルを参照し、「データ種別ID」と「読み書きパラメータ」に合致するブロックの「ページ使用状況」を参照し、未使用ページを探し、変換テーブルに値を設定していく。使用したページについては、ブロック管理情報のブロック管理テーブルの「ページ使用状況」の値を、未使用を表す“0”から使用中を表す“1”に変更する。また、書き込み可能ページテーブルの該当する「書き込み可能ページ数」を減らす。このように、データ種別設定受付部131は、ネームスペース作成コマンドC2で指定されたネームスペースに対応する変換テーブルを設定し、ホスト200にネームスペース作成完了を通知する(ステップS106)。
ホスト200で動作するアプリケーション210a~210fからは、このように作成されたネームスペースに対して、書き込みコマンドC3を発行し、データの書き込み要求を行う。ホスト200からの書き込みコマンドC3には、「ネームスペース識別情報」、「アドレス情報」、「データサイズ」および「データ格納先のポインタ」が含まれている。「ネームスペース識別情報」は、ネームスペースの識別情報であり、例えばNIDである。「アドレス情報」は、書き込み対象データを書き込む記憶部110の先頭アドレスを表し、例えばLBAで指定される。「データサイズ」は、書き込み対象データのサイズを表す。「データ格納先のポインタ」は、例えば、ホスト200のメモリ22に格納された書き込み対象データの先頭アドレスを示す。
次に、ホスト200からの書き込みコマンドC3により、データ書き込み要求を受けた場合のデータ書き込み処理について説明する。本実施形態では、書き込みコマンドC3に含まれる「ネームスペース識別情報」および「アドレス範囲」と、「データ格納先のポインタ」で示される格納先から取得した書き込み対象データの指定された位置の値とに基づいて、書き込み対象データの種別を識別することができる。
図11は、データ書き込み処理の処理手順の一例を示すフローチャートである。まず、書き込み受付部135でホスト200からの書き込みコマンドC3を受け付けると、データ種別識別部136がデータ種別設定記憶部132に記憶されているデータ種別設定を参照し、書き込みコマンドC3に合致する「データ種別情報」を識別し、それに対応する「読み書きパラメータ」のうち、「書き込み要求時パラメータ」を取得する(ステップS201)。すなわち、書き込みコマンドC3に合致するデータ種別の「データ種別ID」および「読み書きパラメータID」(書き込み要求においては“0”)を取得する。
次に、暗号化処理部137で、必要に応じて書き込み対象データの暗号化を実施し(ステップS202)、書き込み対象データを一時記憶部139に記憶する(ステップS203)。このとき、書き込み対象データと一緒に「データ種別ID」と「読み書きパラメータID」を記憶する。
次に、書き込み方法選択部138が、一時記憶部139に保存されている「データ種別ID」および「読み書きパラメータID」で特定される「書き込み要求時パラメータ」に従って、書き込み対象データの書き込み方法を決定する(ステップS204)。そして、書き込み方法選択部138は、ブロック管理情報記憶部133に記憶されているブロック管理情報を参照し、「書き込み要求時パラメータ」の条件を満たし、かつ、書き込み可能なページを探索する(ステップS205)。すなわち、書き込み方法選択部138は、まず、「冗長書き込み数」を確認し、それぞれの書き込み可能なページを探索する。「書き込み要求時パラメータ」で指定される「多値記憶モード」がpSLCの場合や、「エラー訂正符号長」が物理ページの冗長領域に収まらない場合には、それぞれ必要な分の書き込み可能な物理ブロック数を探索する。この探索は、ブロック管理情報の書き込み可能ページテーブルを参照し、「データ種別ID」と「読み書きパラメータID」に対応する「書き込み可能ページ数」が必要数以上であるか否かを判定し、さらに物理ブロック番号から条件を満たす物理ブロックの書き込み可能ページがあるかを、「ページ使用状況」を用いて判定していく。この際、書き込み先選択ポリシーを考慮して、ポリシーに沿った書き込みができるように、NANDコントローラ120や、チャネル、ダイの中の位置などを考慮して判定してもよい。
ここで、条件を満たす全ての書き込み可能なページが見つからない場合には(ステップS206:No)、この条件を満たす空ブロック(書き込み可能なページのあるブロック)を生成するため、この条件を満たす使用中のブロックを対象としてガベージコレクション処理を行う(ステップS207)。ガベージコレクション処理の処理手順については詳細を後述する。このガベージコレクション処理により、書き込み可能なブロック(ページ)ができた場合には(ステップS208:Yes)、ステップS205に戻って以降の処理をやり直す。一方、ガベージコレクション処理を実行しても書き込み可能なブロックができなかった場合には(ステップS208:No)、ホスト200に書き込みエラーを通知して(ステップS209)、処理を終了する。
一方、ステップS205の探索で条件を満たす全ての書き込み可能なページが見つかった場合には(ステップS206:Yes)、それらをデータの書き込み先に決定し、即時書き込みを行うか否かを判定する(ステップS210)。例えば、データがページよりも小さい場合には、後に書き込み要求されたデータとまとめて書き込みを行うことより、NANDフラッシュメモリの書き込み回数を減らし、損傷を防ぐ効果がある。このため、本実施形態では即時書き込みを行うか否かを判定し、即時に書き込みを行わないと判断した場合には(ステップS210:No)、後に書き込み要求されたデータとまとめて書き込みを行うため、ここでは書き込みを行わずに、ステップS218に進んでホスト200に書き込み完了を通知する。
一方、即時に書き込みを行うと判断した場合には(ステップS210:Yes)、エラー訂正符号付与部140にて、「書き込み要求時パラメータ」で指定される「エラー訂正方式」および「エラー訂正符号長」に従ってエラー訂正符号を生成し、書き込み対象データに付与する(ステップS211)。そして、書き込み実行部121により、書き込み先として決定されたページに、書き込み対象データとエラー訂正符号の書き込みを行う(ステップS212)。拡張エラー訂正符号もここで書き込まれる。
その後、全てのデータの書き込みが成功したか否かを確認し(ステップS213)、いずれかのブロックで書き込みが失敗した場合には(ステップS213:No)、既定回数書き込みをリトライする。すなわち、規定回数以上書き込みが失敗したか否かを判定し(ステップS214)、書き込みが失敗した回数が規定回数に達していなければ(ステップS214:No)、ステップS212に戻って再度書き込みを行う。一方、書き込みが失敗した回数が既定回数に達した場合には(ステップS214:Yes)、ブロック管理情報のブロック管理テーブルの「ページ使用状況」を、無効を表す“3”に設定し、さらに該ブロックの「ステータス」を“無効”に設定してブロックを無効化し(ステップS214)、この物理ブロックを今後使用しないようにした上でステップS205に戻り、以降の処理をやり直す。一方、全てのデータの書き込みが成功した場合には(ステップS213:Yes)、ブロック管理情報の更新を行う(ステップS216)。
まず、ブロック管理テーブルのうち、使用した物理ブロックの「ページ使用状況」を更新する。ここでは、過去に参照していたページの使用状況を、消去待を表す“3”に設定する処理と、使用を開始したページを、未使用を表す“0”から使用中を表す“1”に設定することで行わる。ブロックに含まれる全てのページが消去待になった場合には、ブロックの「ステータス」を“使用中”から“消去待”に設定する。“消去済”のブロックのページを使用する場合には、ブロックの「ステータス」を“消去済”から“使用中”にする。また、書き込み可能ページテーブルのうち、書き込みで使用したページ数分、「書き込み可能ページ数」を減らす。
次に、変換テーブルの更新を行う(ステップS217)。ここでは、データ書き込みを行ったネームスペースの「論理ページ番号」に対応するフィールドを最新状況に更新する。すなわち、「データ種別ID」と「書き込みパラメータID」、「書き込み時刻」、データやエラー訂正符号の物理ページ番号や位置情報などを書き込んだ通りに更新する。そして、一時記憶部139に記憶していたデータを消去して(ステップS218)、ホスト200に書き込み完了を通知する(ステップS219)。ここで、今回の書き込みにより書き込み可能なページ数が一定数より少なくなった場合には(ステップS220:No)、ガベージコレクション処理をスケジュールするようにしてもよい(ステップS221)。
次に、ホスト200からの読み出しコマンドC4により、データ読み出し要求を受けた場合のデータ読み出し処理について説明する。読み出しコマンドC4は、図5に示すように、「ネームスペース識別情報」、「アドレス情報」、「データサイズ」および「データ格納先のポインタ」が含まれている。「ネームスペース識別情報」は、ネームスペースの識別情報であり、例えばNIDである。「アドレス情報」は、読み出し対象データが書き込まれている記憶部110の先頭アドレスを表し、例えばLBAで指定される。「データサイズ」は、読み出し対象データのサイズを表す。「データ格納先のポインタ」は、例えば、読み出したデータを格納するデータ格納先を指定するポインタである。「データ格納先のポインタ」は、例えば、ホスト200があらかじめ確保したホスト200のメモリ22のアドレスである。
図12は、データ読み出し処理の処理手順の一例を示すフローチャートである。まず、読み出し受付部141で読み出しコマンドC4を受け付けると、読み出し方法選択部142が、読み出しコマンドC4で指定された「ネームスペース識別情報」と「アドレス情報」と「データサイズ」を基に、変換テーブル記憶部134に記憶されている変換テーブルとデータ種別設定記憶部132に記憶されているデータ種別設定を参照して、読み出し対象データの読み出し方法を決定する(ステップS301)。
この処理では、まず、「ネームスペース識別情報」から変換テーブルのどのネームスペースのテーブルかを特定する。次に、「アドレス情報」と「データサイズ」から読み出しの対象となる「論理ページ番号」を特定する。次に、特定された「論理ページ番号」に対応する「データ種別ID」と「読み書きパラメータID」を取得し、それに対応する「読み書きパラメータ」をデータ種別設定記憶部132に記憶されているデータ種別設定から取得する。
ここで、取得した「読み書きパラメータ」の「冗長書き込み数」と「冗長読み出し数」が等しくない場合には(ステップS302:No)、記憶部110の異なる領域に重複して書き込まれている複数の読み出し対象データのうち、どの領域に書き込まれた読み出し対象データを読み出すかを選択する(ステップS303)。これは、「読み書きパラメータ」の「冗長読み出し元選択ポリシー」に従って選択される。例えば、NANDコントローラ120から、各NANDコントローラ120の負荷をチャネル毎に取得する負荷取得部(図示しない)をNANDコントローラ120毎に設けて、そこから負荷情報を取得し、冗長データの書き込まれているNANDフラッシュメモリのうち、NANDコントローラ120やチャネルの負荷が低いものを選択してもよい。どれでもよい場合には、任意に選択することを示す値が設定できてもよい。また、ページの含まれるブロックの「エラー発生回数」を調べてエラーの低いものを選択するようにしてもよい。
次に、読み出し方法選択部142は、以上のように選択した読み出し対象データが書き込まれた記憶部110の領域全てについて、読み出し実行部123に読み出し対象データとエラー訂正符号の読み出しを指示する(ステップS304)。冗長書き込みがされている場合には、重複して書き込まれている複数の読み出し対象データのうち、いずれか一つの読み出し対象データとエラー訂正符号の読み出しが完了するまで待ち(ステップS305)、読み出しが完了したら(ステップS305:Yes)、エラー訂正処理部143にてエラー訂正処理を実行する(ステップS306)。なお、冗長書き込みがされていない場合には、読み出し対象データとエラー訂正符号の読み出しが完了するまで待ち、読み出しが完了したらエラー訂正処理を実行する。
ここで、訂正不能なエラーが発生した場合には(ステップS307:Yes)、まず、エラーの発生をブロック管理情報に記録する(ステップS308)。そして、冗長読み出しを行った場合には、他に読み出しが完了していないデータとエラー訂正符号があるかどうかを判定する(ステップS309)。そして、読み出しが完了していないものがあれば(ステップS309:Yes)、そちらから訂正不能なエラーが発生せずに読み出せる可能性があるため、ステップS305に戻って、新たにデータとエラー訂正符号の読み出しが完了するまで待つ。
一方、冗長書き込みがされていない場合など、他に読み出しが完了していないデータとエラー訂正符号がなければ(ステップS309:No)、既定回数読み出しをリトライする。すなわち、規定回数以上読み出しが失敗したか否かを判定し(ステップS310)、読み出しが失敗した回数が規定回数に達していなければ(ステップS310:No)、ステップS304に戻って再度読み出しを行う。一方、読み出しが失敗した回数が既定回数に達した場合には(ステップS310:Yes)、他に読み出しを試みていない冗長データがあるかを確認する(ステップS311)。例えば、「冗長書き込み数」が“3”で「冗長読み出し数」が“2”の場合であり、まだ読み出しを行っていない冗長データがある場合には(ステップS311:Yes)、ステップS303に戻ってその冗長データの書き込み先を読み出し先として選択し、その冗長データの読み出しを試みる。一方、読み出しを試みていない冗長データがない場合には(ステップS311:No)、ホスト200に読み出しエラーを通知して(ステップS312)、処理を終了する。
一方、エラー訂正処理部143で訂正不能なエラーが検出されなかった場合は(ステップS307:No)、一時記憶部139に読み出し元の情報とエラー訂正処理を行ったデータを記憶させる(ステップS311)。そして、ホスト200からの読み出しコマンドC4に含まれる「アドレス情報」と「データサイズ」で指定された全てのデータが揃うのを待ち(ステップS314)、全てのデータが揃ったら(ステップS314:Yes)、一時記憶部139からデータを取り出して、データが暗号化されている場合には復号処理部144でデータの復号を行う(ステップS315)。そして、データをホスト200に出力し、読み出し完了をホスト200に通知する(ステップS316)。その後、一時記憶部139からデータと読み出し元の情報を消去して(ステップS317)、処理を終了する。
次に、ガベージコレクション処理について説明する。ガベージコレクション処理は、上述したように、「データ種別ID」と「読み書きパラメータID」などで識別される種別毎に管理された書き込み可能ページテーブルにおいて、「書き込み可能ページ数」が一定以下になった場合にスケジュールされる。基本的にはこのタイミングでガベージコレクション処理が行われるが、ガベージコレクション処理よりも読み書き処理が優先される場合には、ガベージコレクション処理が間に合わない場合がある。その場合は、上述したように、書き込み処理により書き込み可能なページが一定数より少なくなった時点でガベージコレクションがスケジュールされる。
図13は、ガベージコレクション処理の処理手順の一例を示すフローチャートである。ガベージコレクション処理では、まず、再書き込み指示部145が、ブロック管理情報記憶部133に記憶されているブロック管理情報を参照し、消去対象の候補となる消去対象候補ブロックを選択する(ステップS401)。消去対象候補ブロックの選択は、例えば、ブロック管理テーブルの「ステータス」が“消去待”であるものを優先する。“消去待”のものがない場合には、「ステータス」が“使用中”のもののうち、「ページ使用状況」を参照し、消去待のページが多いものを優先する。
次に、再書き込み指示部145は、消去対象候補ブロックに使用中のページがあるかどうかを確認する(ステップS402)。そして、消去対象候補ブロックに使用中のページがなければ(ステップS402:No)、消去実行部122により消去対象候補ブロックの消去を実行し(ステップS403)、ブロック管理情報の更新を行う(ステップS404)。すなわち、まず、ブロック管理情報のブロック管理テーブルの更新を行う。具体的には、消去を行った「物理ブロック番号」に対応する「データ種別ID」と「読み書きパラメータID」に、書き込み可能ページテーブルの不足した「書き込み可能ページ数」に対応する「データ種別ID」と「読み書きパラメータID」を設定し、「ステータス」を“消去済”に設定し、「ページ使用状況」を、全て未使用を表す“0”に設定する。そして、「消去回数」を1増加させる。次に、ブロック管理情報の書き込み可能ページテーブルの更新を行う。具体的には、不足した「書き込み可能ページ数」に1ブロックに含まれるページ数を加算し、処理を終了する。
一方、消去対象候補ブロックに使用中のページがあれば(ステップS402:Yes)、再書き込み指示部145は、そのページに書き込まれているデータとエラー訂正符号の読み出しを、読み出し方法選択部142を介して、読み出し実行部123に指示する(ステップS405)。そして、読み出されたデータとエラー訂正符号から、エラー訂正処理部143においてエラー訂正処理を実行する(ステップS406)。ここで、訂正不能なエラーが発生した場合には(ステップS407:Yes)、ブロック管理テーブルにエラーを記録する(ステップS408)。すなわち、ブロック管理テーブルの「読み出しエラー発生回数」を1増加させる。
その後、データ読み出し処理と同様に、既定回数読み出しをリトライする。すなわち、規定回数以上読み出しエラーが発生したか否かを判定し(ステップS409)、読み出しエラーが発生した回数が規定回数に達していなければ(ステップS409:No)、ステップS405に戻って再度読み出しを行う。一方、読み出しエラーが発生した回数が既定回数に達した場合には(ステップS409:Yes)、ホスト200にエラーを通知し(ステップS410)、ステップS401に戻って別のブロックを消去対象候補ブロックにして、以降の処理を再度試みる。一方、エラー訂正処理により訂正不能なエラーが発生しなければ(ステップS407:No)、一時記憶部139に読み出し元の情報と読み出したデータを記憶させる(ステップS411)。
次に、再書き込み指示部145は、変換テーブル記憶部134に記憶されている変換テーブルを参照し、先ほど読み出したページの「データ種別ID」と、そのページの現在の「読み書きパラメータID」を取得する。そして、データ種別設定記憶部132に記憶されているデータ種別設定(図6参照)を参照し、再書き込みを行う「読み書きパラメータ」、つまり「再書き込み時パラメータ」を取得する(ステップS412)。例えば、現在の「読み書きパラメータID」が“0”であれば、再書き込みは1回目になるため、「読み書きパラメータID」が“1”の「1回目の再書き込み時パラメータ」を取得する。また、現在の「読み書きパラメータID」が“1”であれば、再書き込みは2回目になるため、「読み書きパラメータID」が“2”の「2回目の再書き込み時パラメータ」を取得する。
なお、図6に例示したデータ種別設定では「再書き込み時パラメータ」を再書き込みの回数に応じて分けるようにしているが、例えば図14に示すように、「再書き込み時パラメータ」をガベージコレクション処理とタイマ処理で分けてもよいし、これらを併用してもよい。
次に、再書き込み指示部145は、ブロック管理情報記憶部133に記憶されているブロック管理情報を参照し、ステップS412で取得した「再書き込み時パラメータ」の条件を満たし、かつ、書き込み可能なページを探索する(ステップS413)。ここで、条件を満たす書き込み可能なページが見つからない場合には(ステップS414:No)、ステップS401に戻って別のブロックを消去対象候補ブロックにし、以降の処理を再度試みる。一方、条件を満たす書き込み可能なページが見つかった場合には(ステップS414:Yes)、そのページを再書き込み先に決定して、以降のステップS415~ステップS422において、データ書き込み処理のS211~S218(図11参照)と同様の処理を行う。ただし、ステップS415でデータに付与するエラー訂正符号は、ステップS412で取得した「再書き込み時パラメータ」で指定される「エラー訂正方式」および「エラー訂正符号長」に従って生成される。
次に、タイマ処理について説明する。タイマ処理は、書き込みから時間の経ったページのデータを読み出して他のページに書き込む処理である。タイマ処理は、タイマにより定期的に起動される。
図15は、タイマ処理の処理手順の一例を示すフローチャートである。タイマ処理では、まず、再書き込み指示部145が、変換テーブル記憶部134に記憶されている変換テーブルを参照し、「書き込み時刻」が現在時刻から所定時間以上前のページ、つまり、書き込みから所定時間経過したページがあるか否かを判定する(ステップS501)。ここで、書き込みから所定時間経過したページがなければ(ステップS501:No)、そのまま処理を終了する。
一方、書き込みから所定時間経過したページがあれば(ステップS501:Yes)、そのページに書き込まれているデータとエラー訂正符号の読み出しを、読み出し方法選択部142を介して、読み出し実行部123に指示する(ステップS502)。そして、以降のステップS503~ステップS511およびステップS514~S521において、ガベージコレクション処理のステップS406~ステップS422(図13参照)と同様の処理を行う。ただし、タイマ処理の場合は、ステップS511において書き込み可能なページが見つからなかった場合(ステップS511:No)、そのデータ種別に対応する再書き込みパラメータの条件を満たすブロックを対象にガベージコレクション処理を実行する(ステップS512)。そして、ガベージコレクション処理により書き込み可能なページができたら(ステップS513:Yes)、ステップS511の処理に移行し、書き込み可能なページができなければ(ステップS513:No)、ステップS501に戻って処理をやり直す。
なお、以上説明したタイマ処理では、変換テーブルの「書き込み時刻」を用いて所定時間経過したページを書き換えの対象としたが、これはパトロール処理のように、データの書かれているアドレスから読み出しを行い、エラーを検知したものを書き換えの対象としてもよい。
以上、具体的な例を挙げながら詳細に説明したように、本実施形態では、書き込み対象データの種別を識別し、データ種別毎に設定された「読み書きパラメータ」のうち、書き込み対象データの種別に応じた「読み書きパラメータ」を用いて、書き込み対象データの記憶部110への書き込み方法を決定するようにしている。したがって、本実施形態によれば、記憶部110に多種多様なデータを書き込むことが要求される環境であっても、それぞれのデータの種別に合せて最適な方法でデータの書き込みを行うことができる。
また、データ種別毎に設定された「読み書きパラメータ」は、「書き込み要求時パラメータ」と「再書き込み時パラメータ」とを含み、ホスト200からのデータ書き込み要求時には「書き込み要求時パラメータ」を用い、ガベージコレクション処理やタイマ処理などのデータ再書き込み時には「再書き込み時パラメータ」を用いるようにしている。したがって、同一の書き込み対象データについて、データ書き込み要求時とデータ再書き込み時とで、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
さらに、「再書き込み時パラメータ」は、再書き込みの回数に応じて異なるパラメータ(図6の例では「1回目の再書き込み時パラメータ」と「2回目の再書き込みパラメータ」)を含み、再書き込みの回数に応じて「再書き込み時パラメータ」を切り替えるようにしている。したがって、同一の書き込み対象データの再書き込み時に、再書き込みの回数に応じて最適な方法でデータ再書き込みを行うことができる。
また、本実施形態では、記憶部110からデータを読み出す際に、読み出し対象データの種別に応じた「読み書きパラメータ」を用いて、記憶部110から読み出す読み出し対象データの読み出し方法を決定するようにしている。したがって、本実施形態によれば、記憶部110に多種多様なデータを書き込むことが要求される環境であっても、それぞれのデータの種別に合せて最適な方法でデータの書き込みを行うことができる。
また、データ種別毎に設定された「読み書きパラメータ」は「冗長読み出し数」を含み、データ読み出し処理を行う場合は、読み出し対象データの種別に対応する「読み書きパラメータ」の「冗長読み出し数」に応じて読み出し数を決定し、最も応答が速いデータをホスト200に返すようにしている。したがって、読み出し対象データの種別に応じて、読み出し時の遅延(レイテンシ)を制御することができる。
また、本実施形態では、書き込み対象データの種別を、少なくとも、書き込みコマンドC3に含まれる「ネームスペース識別情報」に基づいて識別するようにしているので、ネームスペースごとに適用する「読み書きパラメータ」を切り替えて、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
また、本実施形態では、書き込み対象データの種別を、さらに、書き込みコマンドC3に含まれる「アドレス範囲」、すなわちストレージ100の論理アドレス範囲に基づいて識別するようにしているので、同じネームスペースに対応するアドレス空間内で領域に応じて異なる「読み書きパラメータ」を適用することができ、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。
また、本実施形態では、書き込み対象データの種別を、さらに、書き込み対象データの指定された位置の値に基づいて識別するようにしているので、書き込み対象データの指定された位置の値に応じて適用する「読み書きパラメータ」を切り替えて、それぞれ最適な方法で書き込み対象データの書き込みを行うことができる。例えば、書き込み対象データの指定された位置に優先度を表す値が格納されている場合、書き込み対象データの優先度に応じて最適な方法で書き込みを行うことができる。
また、データ種別毎に設定された「読み書きパラメータ」は、「エラー訂正符号長」、「多値記録モード」、「冗長書き込み数」などを含み、書き込み対象データの種別に応じて、書き込み対象データに付与するエラー訂正符号長、多値記録モード、冗長書き込み数などを変更するようにしているので、書き込み対象データの種別に応じた書込み強度で書き込みを行うことができる。
さらに、データ種別毎に設定された「読み書きパラメータ」は、「冗長書き込み先ポリシー」を含み、書き込み対象データの種別に応じて冗長書き込みを行う際の書き込み先を選択するようにしているので、書き込み対象データの種別に応じて最適な書き込み先に書き込みを行うことができる。
<第2実施形態>
上述の第1実施形態では、制御装置1の内部にストレージ100を設けた構成を説明したが、制御装置1とストレージ100がネットワーク500を介して接続されたネットワークシステムとして構成されてもよい。
図16は、第2実施形態に係るネットワークシステムのハードウェア構成例を示すブロック図である。このネットワークシステムは、制御装置1’とストレージ100’とがネットワーク500を介して接続されている。制御装置1’は、上述の第1実施形態に係る制御装置1のように内部にストレージ100を持たない。その代り、外部のストレージ100’とネットワーク500を介して接続されている。
図17は、第2実施形態に係るネットワークシステムの機能的な構成例を示すブロック図である。図4に示した第1実施形態に係る制御装置1の構成と比較して、ストレージ100’が、ネットワーク500を介して制御装置1’と通信を行うための通信部151(ネットワークインタフェース150)を備え、この通信部151を介して、データ種別設定受付部131、書き込み受付部135および読み出し受付部141がホスト200からの各種要求を受け付ける構成である点が異なる。
ホスト200からは、例えばNVM Express over fabricsなどのプロトコルで接続される。このような構成の場合、データ種別識別情報として、上述の第1実施形態で説明したものに加えて、ホスト200から送信されたフレームの情報を用いてデータ種別の識別を行うことができる。これを実現するためには、例えば、任意データ識別情報の位置を、フレームの先頭の位置と定義し直す。このように、第2実施形態によれば、例えばフレームに含まれるPCP(Priority Code Point)といった優先度の値を用いて、書き込み対象データに適用する「読み書きパラメータ」を切り替えることができる。
<第3実施形態>
上述の第2実施形態では、制御装置1’とストレージ100’が1対1で接続されることを想定したが、複数の制御装置1’や複数のストレージ100’がネットワーク500を介して接続された構成であってもよい。
図18は、第3実施形態に係るネットワークシステムのハードウェア構成例を示すブロック図である。このネットワークシステムは、複数(図18の例では2つ)の制御装置1’A,1’Bと複数(図18の例では2つ)のストレージ100’A,100’Bが、ネットワーク500を介して相互に接続されている。ネットワーク500上にはスイッチングハブ610を備えた通信装置600があり、この通信装置600のスイッチングハブ610により、制御装置1’A、制御装置1’B、ストレージ100’A、ストレージ100’B間の通信路の切り替えが行われる。
図19は、第3実施形態に係るネットワークシステムの機能的な構成例を示すブロック図である。図17に示した第2実施形態に係るネットワークシステムの構成と比較して、ストレージ100’Aが、ネットワーク500を介して他のストレージ100B’に書き込みを指示する書き込み指示部146と、ネットワーク500を介して他のストレージ100B’に読み出しを指示する読み出し指示部147とを備える点が異なる。なお、図18に示したスイッチングハブ610は、図19においては機能的に転送部620として示している。
このような構成の場合、ストレージ100’Aに設定されるデータ種別設定の「読み書きパラメータ」を、上述の第1実施形態で説明したものから少し変更を加えることで、他のストレージ100B’に書き込み対象データを書き込んだり、他のストレージ100B’から読み出し対象データを読み出したりすることができる。例えば、「読み書きパラメータ」の「冗長書き込み先選択ポリシー」で冗長書き込み先として他のストレージ100B’を選択できるようにし、「冗長読み出し元選択ポリシー」で、例えば負荷が低いストレージからデータを読み出せるようにすればよい。そして、物理ブロック番号や物理ページ番号にストレージの識別子を埋め込むことで、複数ストレージへの対応が可能となる。
なお、ストレージ100’Bは、ストレージ100A’と同じ構成であってもよいし、例えば従来の一般的なストレージ装置のように、ストレージ100A’とは異なる構成であってもよい。ストレージ100’Bをストレージ100’Aと同じ構成とした場合はストレージ100’Bは、ストレージ100A’に書き込み対象データを書き込んだり、ストレージ100A’から読み出し対象データを読み出したりすることができる。
本実施形態に係るネットワークシステムは、例えば自動車に搭載される車載ネットワークシステムに対して有効に適用することができる。図20は、車載ネットワークシステムへの適用例を説明する図である。この車載ネットワークシステム710は、自動車700内の物理的に離れた位置に配置された複数(図20の例では2つ)の制御装置1’A,1’Bと複数(図20の例では2つ)のストレージ100’A,100’Bが、ネットワーク500を介して相互に接続されている。ネットワーク500上には複数のスイッチ630が設けられ、これらスイッチ630により、制御装置1’A、制御装置1’B、ストレージ100’A、ストレージ100’B間の通信路の切り替えが行われる。
以上のように、第3実施形態に係るネットワークシステムによれば、ストレージ100A’が他のストレージ100B’への書き込みや読み出しの指示を行うことにより、物理的に離れた位置へデータを記憶させることができる。したがって、例えば車載ネットワークシステム710に適用した場合、事故などにより複数のストレージ100’A,100’Bの一方が壊れた場合にも、もう一方からデータの読み出しを可能とすることができる。
<第4実施形態>
上述の各実施形態では、データ種別に応じた書き込みや読み出しの制御をストレージ100内のストレージコントローラ130が行う構成を説明したが、データ種別に応じた書き込みや読み出しの制御をホスト200の機能として実現してもよい。
図21は、第4実施形態に係る制御装置1”の機能的な構成例を示すブロック図である。本実施形態に係る制御装置1”では、第1実施形態に係る制御装置1においてストレージ100内のストレージコントローラ130により実現されていた各機能が、ホスト200’の機能として実現されている。ストレージコントローラ130の機能は、アプリケーション210a~210fやオペレーティングシステム200a,200bによって実現されてもよい。このような構成により、例えば、Open Channel SSDのようにホスト200’側でストレージ100”の制御を行う場合においても、上述の第1実施形態と同様の効果を得ることができる。なお、上述の第2実施形態や第3実施形態と同様に、ホスト200’とストレージ100”が通信部310,151により接続され、ネットワーク500を経由して制御できるようにしてもよい。
<変形例>
なお、上述の各実施形態において、「読み書きパラメータ」の「多値記憶モード」については、冗長書き込みを行う場合に各冗長データの書き込みにおいて同じ「多値記録モード」を適用するものとしたが、冗長データ毎に「多値記憶モード」を切り替えてもよい。例えば、ある冗長データは“pSLC”で書き込みを行い、他の冗長データは“MLC”で書き込みを行うといったように、冗長データ毎の切り替えを行ってもよい。また、「多値記憶モード」の“MLC”は、TLC(Triple Level Cell)やQLC(Quadruple Level Cell)であってもよい。
以上述べた少なくとも一つの実施形態や変形例によれば、データの種別に合せて最適な方法でデータの書き込みを行うことができる。
<補足説明>
上述したデータ種別設定受付部131、書き込み受付部135、データ種別識別部136、暗号化処理部137と、書き込み方法選択部138、エラー訂正符号付与部140、読み出し受付部141、読み出し方法選択部142、エラー訂正処理部143、復号処理部144および再書き込み指示部145は、例えば、ストレージコントローラ130のプロセッサ11やホスト200のプロセッサ21にプログラムを実行させることにより実現することができる。このプログラムは、例えば、ストレージコントローラ130やホスト200に予めインストールされてもよいし、ネットワーク経由で配布され、適宜インストールされてもよい。
以上、本発明の実施形態およびその変形例を説明したが、ここで説明した実施形態および変形例は、例として提示したものであり、発明の範囲を限定することは意図していない。ここで説明した新規な実施形態および変形例は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。ここで説明した実施形態やその変形例は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。