以下に、本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージシステム、ストレージ装置、及びストレージシステムの制御方法が限定されるものではない。
図1は、ストレージシステムの概略構成図である。本実施例に係るストレージシステムは、演算処理装置であるホスト1及び記憶装置であるストレージ装置2を有する。
ストレージ装置2は、NANDコントローラ21及びNANDコントローラ21とバス23で接続されるNANDデバイス22を有する。そして、NANDコントローラ21は、NANDデバイス22を接続するバス23を4チャネル有する。すなわち、NANDコントローラ21は、4つの異なるチャネルのバス23に接続されているNANDデバイス22に独立してアクセスする。
データの読み出し及び書き込みにおける、ストレージシステムの全体的な動作の概要を説明する。ホスト1は、アプリケーションなどが動作する。そして、ホスト1は、アプリケーションなどにより指定されたデータの読み書きをストレージ装置2に対して行う。例えば、ホスト1は、データの読み出しを行う場合、読み出しの命令(以下では、「Readコマンド」という。)をストレージ装置2のNANDコントローラ21へ送信する。そして、ホスト1は、Readコマンドで指定したデータをNANDコントローラ21から受信する。
また、例えば、データの書き込みを行う場合、ホスト1は、書込データ及び書込命令(以下では、「Writeコマンド」という。)をストレージ装置2のNANDコントローラ21へ送信する。
NANDコントローラ21は、Readコマンドを受信すると、Readコマンドで指定されたNANDデバイス22に対してReadコマンドを送信する。その後、NANDコントローラ21は、Readコマンドで指定されたデータをNANDデバイス22から受信する。そして、NANDコントローラ21は、受信したデータをホスト1へ送信する。
また、NANDコントローラ21は、書込データ及びWriteコマンドを受信すると、Writeコマンドで指定されたNANDデバイス22に対してWriteコマンドと共に書込データを送信する。
NANDデバイス22は、図2に示すように内部にデータを格納するメモリセル221及びバッファであるページレジスタ222を有する。図2は、NANDデバイスの内部を説明するための図である。メモリセル221は、データの書き込み単位であるページに分かれている。そして、ページが複数集まって、データを消去する単位であるブロックが形成される。メモリセル221は、複数のブロックを有する。
NANDデバイス22は、ReadコマンドをNANDコントローラ21から受信すると、Readコマンドで指定されたデータをメモリセル221からページレジスタ222へ読み出す。NANDデバイス22は、データのセルからページレジスタ222への読み出し中は、Busy状態、すなわち、命令を受け付けない状態となる。そして、NANDデバイス22は、ページレジスタ222に読み出したデータをNANDコントローラ21へ送信する。
また、NANDデバイス22は、WriteコマンドをNANDコントローラ21から受信し、さらに、受信した書込データをページレジスタ222へ格納する。その後、NANDデバイス22は、受信した書込データをページレジスタ222から読み出し、メモリセル221へ書込む。NANDデバイス22は、データのページレジスタ222からメモリセル221への移動中は、Busy状態となる。
あるチャネルのNANDデバイス22がBusy状態となっている間、従来は、NANDコントローラ21は、NANDデバイス22がReady状態になるのを待った後、そのチャネル上のNANDデバイス22に対する他の処理を開始していた。従来は、この、Busy状態が解消されるまでの待機時間が無駄になっていた。そこで、本実施例に係るストレージシステムは、以下に説明するように、あるNANDデバイス22のBusy状態が解消される(すなわちReady状態になる)のを待たずに、同じチャネル上の他のReady状態のNANDデバイス22への処理を行うオーバラップ処理を実行する。そこで、次に、本実施例に係るストレージシステムの書き込み及び読み出しにおける処理を詳細に説明する。
図3は、実施例1に係るストレージシステムの詳細を表すブロック図である。以下の説明では、1チャネル上のNANDデバイス22に対する読み書きについて説明するので、図3ではバス23として1チャネルのみを記載する。また、バス23の1つのチャネルには、本実施例では、NANDデバイス22A〜22Dという4つのNANDデバイス22が接続されている。以下の説明では、NANDデバイス22A〜22Dを特に区別しない場合、単に「NANDデバイス22」という。
図3に示すように、本実施例に係るホスト1は、アプリ実行部11、NAND制御部12及びPCI express I/F(interface)13を有する。
アプリ実行部11は、各種アプリケーションを実行する。そして、アプリ実行部11は、アプリケーションで指定されたデータの書き込み及び読み出しをNAND制御部12へ指示する。ここで、アプリ実行部11は、NANDデバイス22へ書き込むデータが、分散して異なるNANDデバイス22に書込み且つ書込んだデータのそれぞれを独立して各NANDデバイス22から読み出すことができるデータパターンを有するか否かを判定する。書込むデータがそのようなデータパターンを有するデータの場合、アプリ実行部11は、以下で説明するオーバラップ処理の実行をNAND制御部12に指示する。そして、アプリ実行部11は、オーバラップ処理を行って書き込んだデータを記憶しておき、読み出し時には、オーバラップ処理を行ってデータを読み出す。以下では、オーバラップ処理の実行をアプリ実行部11が指示した場合を説明する。
PCI express I/F13は、NANDコントローラ21とNAND制御部12とが通信を行うためのホスト1側のインタフェースである。NAND制御部12は、PCI express I/F13を介してNANDコントローラ21と通信を行う。ここで、本実施例では、PCI expressを用いて通信を行っているが、通信規格はこれに限らず、SATAやSAS I/Fなどの他の通信規格を用いてもよい。実際には、NAND制御部12は、PCI express I/F13を介してNANDコントローラ21と通信を行うが、以下の説明では、説明の便宜上、NAND制御部12とNANDコントローラ21とが通信を行っているように説明する場合がある。
データの読み出しの場合、NAND制御部12は、アプリ実行部11からデータの読み出しのオーバラップ処理の指示を受ける。そして、NAND制御部12は、データの読出元のNANDデバイス22に対するReadコマンドをNANDコントローラ21の命令管理部212へ送信する。以下では、NAND制御部12がデータの読出元のNANDデバイス22に対するReadコマンドを命令管理部212へ送信することを、NAND制御部12によるNANDデバイス22へのReadコマンドの発行という。
その後、NAND制御部12は、命令管理部212からReadコマンド発行完了の通知を受ける。そして、同じチャネル上のNANDデバイス22に次に読み出すデータがある場合、NAND制御部12は、次のデータの読出元のNANDデバイス22へReadコマンドを発行する。このように、NAND制御部12は、同じチャネル上にある次にデータを読み出すNANDデバイス22がなくなるまで、Readコマンドの発行を繰り返す。すなわち、データの読み出しの場合、NAND制御部12は、読み出しが指定された1つのデータが分割されて格納されているNANDデバイス22の全てに対して順次Readコマンドを発行する。例えば、1つのデータを分割したデータがNANDデバイス22A〜22Dの全てに格納されている場合、NAND制御部12は、NANDデバイス22A〜22Dの全てに順次Readコマンドを発行する。
その後、NAND制御部12は、各NANDデバイス22がBusy状態かReady状態かを問い合わせる状態通知要求を状態通知部213へ定期的に送信して、状態通知要求のポーリングを行う。そして、状態通知要求に対する状態通知部213からの応答がReadyに変わると、NAND制御部12は、そのNANDデバイス22の状態がBusyからReadyに遷移したと判定する。
分割されたデータが格納されている同じチャネル上にあるNANDデバイス22の全てへReadコマンドを送信した後、NAND制御部12は、Busy状態からReady状態に遷移したNANDデバイス22があるか否かを判定する。Ready状態に遷移したNANDデバイス22がある場合、NAND制御部12は、そのNANDデバイス22のページレジスタ222からNANDコントローラ21のバッファ215へのデータ転送開始をNANDコントローラ21のデータ転送管理部214へ指示する。例えば、NANDデバイス22AがBusy状態からReady状態に遷移した場合、NAND制御部12は、NANDデバイス22Aのページレジスタ222からバッファ215へのデータ転送開始をデータ転送管理部214へ指示する。以下では、NAND制御部12がデータ転送開始をNANDデバイス22Aへ指示した場合を例に説明する。
次に、NAND制御部12は、NANDデバイス22Aの他のページからデータを読み出すか否かを判定する。他のページからデータを読み出すと判定した場合、NAND制御部12は、NANDデバイス22Aからバッファ215へのデータ転送が完了するまで待機する。そして、データ転送が完了すると、NAND制御部12は、NANDデバイス22AへReadコマンドをさらに発行する。
その後、NAND制御部12は、NANDデバイス22AへのReadコマンドの発行完了の通知を命令管理部212から受信すると、NAND制御部12は、バッファ215からホスト1へのデータ転送をデータ転送管理部214へ指示する。
そして、NAND制御部12は、バッファ215から送信されてきたデータを受信する。
バッファ215からのデータ受信完了後、NAND制御部12は、上述した処理をデータの読み出しが完了するまで繰り返す。すなわち、NAND制御部12は、Ready状態へ遷移したNANDデバイス22を検出し、検出したNANDデバイス22のページレジスタ222からバッファ215へのデータの転送を行う。さらに、NAND制御部12は、データ転送中のNANDデバイス22の他のページからのデータ読み出しの有無を判定し、Readコマンドの送信を行う。その後、NAND制御部12は、バッファ215からホスト1へのデータ転送をデータ転送管理部214に行わせる。このような処理を、NAND制御部12は繰り返す。
次に、データ書き込みの場合について説明する。NAND制御部12は、アプリ実行部11からデータの書き込みのオーバラップ処理の指示を受ける。そして、NAND制御部12は、NANDコントローラ21のバッファ215へ書き込むデータを転送する。
次に、データの書込先のNANDデバイス22に対するWriteコマンドをNANDコントローラ21の命令管理部212へ送信する。以下では、NAND制御部12がデータの書込先のNANDデバイス22に対するWriteコマンドを命令管理部212へ送信することを、NAND制御部12によるNANDデバイス22へのWriteコマンドの発行という。
その後、NAND制御部12は、命令管理部212からWriteコマンド発行完了の通知を受ける。次に、NAND制御部12は、バッファ215からデータの書込先のNANDデバイス22へのデータの転送開始をデータ転送管理部214に指示する。
その後、NAND制御部12は、書込先のNANDデバイス22へのデータの転送の完了通知をデータ転送管理部214から受信する。そして、NAND制御部12は、同じチャネル上のNANDデバイス22に次に書き込むデータがある場合、次のデータの書込先のNANDデバイス22へWriteコマンドを発行する。このように、NAND制御部12は、同じチャネル上にある次にデータを書き込むNANDデバイス22がなくなるまで、Writeコマンドの発行を繰り返す。すなわち、データの書き込みの場合、NAND制御部12は、書き込みが指定された1つのデータが分割されて格納されるNANDデバイス22の全てに対して順次Writeコマンドを発行する。例えば、1つのデータを分割したデータをNANDデバイス22A〜22Dの全てに格納する場合、NAND制御部12は、NANDデバイス22A〜22Dの全てに順次Writeコマンドを発行する。
分割されたデータを格納する同じチャネル上にあるNANDデバイス22の全てへWriteコマンドを送信した後、NAND制御部12は、Busy状態からReady状態に遷移したNANDデバイス22があるか否かを判定する。Ready状態に遷移したNANDデバイス22がある場合、NAND制御部12は、バッファ215からNANDデバイス22へのデータ転送が完了したか否かを判定する。バッファ215からのデータ転送が完了した場合、NAND制御部12は、バッファ215へ書き込むデータを転送し、書込先のNANDデバイス22へWriteコマンドを発行する。そして、NAND制御部12は、バッファ215から書込先のNANDデバイス22へのデータ転送の開始をデータ転送管理部214に指示する。
NAND制御部12は、上述した処理をデータの書き込みが完了するまで繰り返す。すなわち、NAND制御部12は、Ready状態へ遷移したNANDデバイス22を検出する。そして、NAND制御部12は、バッファ215へ書込データを転送する。次に、NAND制御部12は、検出したNANDデバイス22のページレジスタ222へバッファ215からデータを転送する。このような処理を、NAND制御部12は繰り返す。
次に、NANDコントローラ21について説明する。NANDコントローラ21は、図3に示すように、PCI express I/F211、命令管理部212、状態通知部213、データ転送管理部214、バッファ215、及びNAND I/F216を有する。
PCI express I/F211は、NAND制御部12と通信を行うためのインタフェースである。以下に説明する命令管理部212、状態通知部213、データ転送管理部214、及びバッファ215は、実際にはPCI express I/F211を介してNAND制御部12と通信を行う。ただし、以下では説明の便宜上、命令管理部212、状態通知部213、データ転送管理部214、及びバッファ215がNAND制御部12と直接通信を行っているように説明する場合がある。
NAND I/F216は、NANDコントローラ21がNANDデバイス22と通信を行うためのインタフェースである。以下に説明する命令管理部212、状態通知部213、データ転送管理部214、及びバッファ215は、実際にはNAND I/F216を介してNANDデバイス22と通信を行う。ただし、以下では説明の便宜上、命令管理部212、状態通知部213、データ転送管理部214、及びバッファ215がNANDデバイス22と直接通信を行っているように説明する場合がある。
命令管理部212は、データの読み出しの場合、ReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、Readコマンドで指定されているNANDデバイス22を特定する。その後、命令管理部212は、特定したNANDデバイス22へReadコマンドを発行する。Readコマンドの発行完了後、命令管理部212は、Readコマンド発行完了の通知をNAND制御部12へ送信する。
また、命令管理部212は、データの書き込みの場合、WriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、Writeコマンドで指定されているNANDデバイス22を特定する。その後、命令管理部212は、特定したNANDデバイス22へWriteコマンドを発行する。Writeコマンドの発行完了後、命令管理部212は、Writeコマンド発行完了の通知をNAND制御部12へ送信する。
状態通知部213は、NANDデバイス22がBusy状態であるかReady状態であるかを監視する。また、状態通知部213は、各NANDデバイス22の状態通知要求を定期的にNAND制御部12から受信する。そして、状態通知部213は、NAND制御部12から受信した状態通知要求で指定されているNANDデバイス22の状態をNAND制御部12へ通知する。
ここで、本実施例では、状態通知部213は、NAND制御部12からの状態通知要求のポーリングを受けて、指定されたNANDデバイス22の状態を通知する。ただし、状態通知は他の方法でもよく、例えば、状態通知部213は、監視するNANDデバイス22がBusy状態からReady状態に遷移したタイミングで、ホスト1に対して割り込みを行い、NANDデバイス22がReadyになったことを通知してもよい。
バッファ215は、データ読み出し時にホスト1へのデータ転送のサイズになるまでデータを蓄積する。また、バッファ215は、データ書き込み時にホスト1から送信されたデータを一時的、すなわちNANDデバイス22へ転送されるまでの間格納する。
データ転送管理部214は、データ読み出しの場合、NANDデバイス22からバッファ215へのデータ転送の開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、指定されたNANDデバイス22のページレジスタ222から指定されたデータを読み出し、バッファ215へ転送する。そして、バッファ215へのデータ転送が完了すると、データ転送管理部214は、データ転送完了をNAND制御部12へ通知する。
その後、データ転送管理部214は、バッファ215からホスト1へのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215に格納されているデータをホスト1へ送信する。
データ書き込みの場合、データ転送管理部214は、NAND制御部12から送られてきた書込データをバッファ215へ格納する。次に、データ転送管理部214は、バッファ215からNANDデバイス22へのデータ転送の開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、バッファ215からデータを読み出し、指定されたNANDデバイス22のページレジスタ222へ転送する。そして、NAND22へのデータ転送が完了すると、データ転送管理部214は、データ転送完了をNAND制御部12へ通知する。
NANDデバイス22は、メモリセル221とページレジスタ222とを有する(図2参照)。そして、NANDデバイス22は、Readコマンドを命令管理部212から受信すると、Readコマンドで指定されたデータをメモリセル221から読み出し、ページレジスタ222へ格納する。このメモリセル221から読み出したデータをページレジスタ222へ格納する期間、NANDデバイス22はBusyになる。
また、データの書き込みの場合、NANDデバイス22は、データ転送管理部214によりバッファ215から読み出されたデータをページレジスタ222へ格納する。次に、NANDデバイス22は、Writeコマンドを命令管理部212から受信すると、ページレジスタ222に格納したデータを読み出し、メモリセル221へ格納する。このページレジスタ222から読み出したデータをメモリセル221へ格納する期間、NANDデバイス22はBusyになる。
次に、図4を参照して、本実施例に係るストレージシステムによるデータの読み出し処理の全体的な流れについて説明する。図4は、実施例1に係るストレージシステムによるデータの読み出し処理のタイムチャートである。図4の各処理は、左端に記載された各処理に対応するNANDデバイス22A〜22Dのそれぞれに関する処理である。そして、図4の横軸は時間の経過を表す。ここでは、1チャネル上の4つのNANDデバイス22A〜22Dからデータを読み出す場合で説明する。また、図4では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
命令管理部212は、NANDデバイス22Aに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Aへ発行する(ステップS1)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Aは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22AはBusy状態になる(ステップS2)。
一方、NANDデバイス22AがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Bに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Bへ発行する(ステップS3)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Bは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22BはBusy状態になる(ステップS4)。
一方、NANDデバイス22BがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Cに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Cへ発行する(ステップS5)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Cは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22CはBusy状態になる(ステップS6)。
一方、NANDデバイス22CがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Dに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Dへ発行する(ステップS7)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Dは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22DはBusy状態になる(ステップS8)。
そして、ステップS2、S4,S6,S8が終わると、NANDデバイス22A〜22DはそれぞれBusy状態からReady状態に遷移する。状態通知部213は、ステップS2、S4,S6,S8が終わると、NANDデバイス22A〜22DがそれぞれBusy状態からReady状態に遷移したことをNAND制御部12へ通知する。図4では、NANDデバイス22Aが最初にBusy状態からReady状態に遷移する。そこで、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ215へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ215へのデータの転送を行う(ステップS9)。ただし、図4では、記載の都合上、「NANDからバッファへの転送」と記載している。そして、データの転送が完了すると、すなわち、ステップS9が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
続いて、命令管理部212は、NAND制御部12からNANDデバイス22Aに対するReadコマンドを受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Aへ発行する(ステップS10)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Aは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22AはBusy状態になる(ステップS11)。その後、ステップS11が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
一方、データ転送管理部214は、Readコマンドの発行完了後、バッファ215に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、NANDデバイス22AがBusy状態になっている間に並行して、バッファ215からホスト1へのデータの転送を行う(ステップS12)。
バッファ215からホスト1へのデータ転送が完了すると、すなわち、ステップS12が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Bからバッファ215へのデータの転送開始の指示をNAND制御部12から受ける。ここで、NANDデバイス22Bからのデータ転送とは、具体的には、NANDデバイス22Bのページレジスタ222からのデータ転送である。そして、データ転送管理部214は、NANDデバイス22Bのページレジスタ222からバッファ215へのデータの転送を行う(ステップS13)。そして、データの転送が完了すると、すなわち、ステップS13が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。ここでは、読み出すデータがこれ以上ない場合で説明する。
次に、データ転送管理部214は、バッファ215に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からホスト1へのデータの転送を行う(ステップS14)。
バッファ215からホスト1へのデータ転送が完了すると、すなわち、ステップS14が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Cからバッファ215へのデータの転送開始の指示をNAND制御部12から受ける。ここで、NANDデバイス22Cからのデータ転送とは、具体的には、NANDデバイス22Cのページレジスタ222からのデータ転送である。そして、データ転送管理部214は、NANDデバイス22Cのページレジスタ222からバッファ215へのデータの転送を行う(ステップS15)。そして、データの転送が完了すると、すなわち、ステップS15が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ215に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からホスト1へのデータの転送を行う(ステップS16)。
バッファ215からホスト1へのデータ転送が完了すると、すなわち、ステップS16が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Dからバッファ215へデータの転送開始の指示をNAND制御部12から受ける。ここで、NANDデバイス22Dからのデータ転送とは、具体的には、NANDデバイス22Dのページレジスタ222からのデータ転送である。そして、データ転送管理部214は、NANDデバイス22Dのページレジスタ222からバッファ215へのデータの転送を行う(ステップS17)。そして、データの転送が完了すると、すなわち、ステップS17が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ215に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からホスト1へのデータの転送を行う(ステップS18)。
さらに、バッファ215からホスト1へのデータ転送が完了すると、すなわち、ステップS18が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Aからバッファ215へのデータの転送開始の指示をNAND制御部12から受ける。ここで、NANDデバイス22Aからのデータ転送とは、具体的には、NANDデバイス22Aのページレジスタ222からのデータ転送である。そして、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ215へのデータの転送を行う(ステップS19)。そして、データの転送が完了すると、すなわち、ステップS19が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ215に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からホスト1へのデータの転送を行う(ステップS20)。
ここで、図4における、タイミングT1以降では、Busy状態の期間が他の処理を実行する期間とオーバラップする。これにより、タイミングT1以降は、従来技術に比べてバス23の利用効率が向上する。
次に、図5を参照して、本実施例に係るストレージシステムによるデータの書き込み処理の全体的な流れについて説明する。図5は、実施例1に係るストレージシステムによるデータの書き込み処理のタイムチャートである。図5の各処理は、左端に記載された各処理に対応するNANDデバイス22A〜22Dのそれぞれに関する処理である。そして、図5の横軸は時間の経過を表す。ここでは、1チャネル上の4つのNANDデバイス22A〜22Dに対してデータを書き込む場合で説明する。また、図5では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
データ転送管理部214は、ホスト1から送られてきたデータをバッファ215に転送する(ステップS21)。
その後、命令管理部212は、NANDデバイス22Aに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Aへ発行する(ステップS22)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ215からNANDデバイス22Aへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からNANDデバイス22Aのページレジスタ222へデータを転送する(ステップS23)。データ転送管理部214は、バッファ215からNANDデバイス22Aへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。
NANDデバイス22Aは、ページレジスタ222へ格納されたデータをメモリセル221へ転送する。この間、NANDデバイス22AはBusy状態になる(ステップS24)。その後、ステップS24が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
一方、NANDデバイス22AがBusy状態になっている間に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ215に転送する(ステップS25)。
その後、命令管理部212は、NANDデバイス22Bに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Bへ発行する(ステップS26)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ215からNANDデバイス22Bへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からNANDデバイス22Bのページレジスタ222へデータを転送する(ステップS27)。データ転送管理部214は、バッファ215からNANDデバイス22Bへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。
NANDデバイス22Bは、ページレジスタ222へ格納されたデータをメモリセル221へ転送する。この間、NANDデバイス22BはBusy状態になる(ステップS28)。その後、ステップS28が完了すると、状態通知部213は、NANDデバイス22BがReady状態に遷移したことをNAND制御部12へ通知する。
一方、NANDデバイス22BがBusy状態になっている間に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ215に転送する(ステップS29)。
その後、命令管理部212は、NANDデバイス22Cに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Cへ発行する(ステップS30)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ215からNANDデバイス22Cへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からNANDデバイス22Cのページレジスタ222へデータを転送する(ステップS31)。データ転送管理部214は、バッファ215からNANDデバイス22Cへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。
NANDデバイス22Cは、ページレジスタ222へ格納されたデータをメモリセル221へ転送する。この間、NANDデバイス22CはBusy状態になる(ステップS32)。その後、ステップS32が完了すると、状態通知部213は、NANDデバイス22CがReady状態に遷移したことをNAND制御部12へ通知する。
一方、NANDデバイス22CがBusy状態になっている間に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ215に転送する(ステップS33)。
その後、命令管理部212は、NANDデバイス22Dに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Dへ発行する(ステップS34)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ215からNANDデバイス22Dへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からNANDデバイス22Dのページレジスタ222へデータを転送する(ステップS35)。データ転送管理部214は、バッファ215からNANDデバイス22Dへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。
NANDデバイス22Dは、ページレジスタ222へ格納されたデータをメモリセル221へ転送する。この間、NANDデバイス22DはBusy状態になる(ステップS36)。その後、ステップS36が完了すると、状態通知部213は、NANDデバイス22DがReady状態に遷移したことをNAND制御部12へ通知する。
一方、NANDデバイス22DがBusy状態になっている間に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ215に転送する(ステップS37)。
その後、命令管理部212は、NANDデバイス22Aに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Aへ発行する(ステップS38)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ215からNANDデバイス22Aへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ215からNANDデバイス22Aのページレジスタ222へデータを転送する(ステップS39)。データ転送管理部214は、バッファ215からNANDデバイス22Aへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。
NANDデバイス22Aは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22AはBusy状態になる(ステップS40)。その後、ステップS40が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
次に、図6を参照して、本実施例に係るNAND制御部12のデータ読み出し時の処理について説明する。図6は、実施例1に係るNAND制御部のデータ読み出し時の処理のフローチャートである。
NAND制御部12は、データ読出先のNANDデバイス22にReadコマンドを発行する(ステップS101)。
そして、NAND制御部12は、コマンド発行完了の通知を命令管理部212から受信したか否かによりコマンド発行が完了したか否かを判定する(ステップS102)。コマンド発行が完了していない場合(ステップS102:否定)、NAND制御部12は、コマンド発行が完了するまで待機する。
これに対して、コマンド発行が完了した場合(ステップS102:肯定)、NAND制御部12は、データを読み出すNANDデバイス22が他にあるか否かを判定する(ステップS103)。データを読み出すNANDデバイス22が他にある場合(ステップS103:肯定)、NAND制御部12は、ステップS101へ戻る。
これに対して、データを読み出すNANDデバイス22が他にない場合(ステップS103:否定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22があるか否かを判定する(ステップS104)。
状態がBusyからReadyに遷移したNANDデバイス22がある場合(ステップS104:肯定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22からバッファ215へのデータ転送を開始するようにデータ転送管理部214に指示する(ステップS105)。
NAND制御部12は、データ転送管理部214からデータ転送完了の通知を受けたか否かにより、データ転送が完了したか否かを判定する(ステップS106)。データ転送が完了していない場合(ステップS106:否定)、NAND制御部12は、データ転送が完了するまで待機する。
これに対して、データ転送が完了した場合(ステップS106:肯定)、NAND制御部12は、データ転送を行ったNANDデバイス22において他のページからのデータ読み出しがあるか否かを判定する(ステップS107)。他のページからの読み出しがない場合(ステップS107:否定)、NAND制御部12は、ステップS110へ進む。
一方、他のページからの読み出しがある場合(ステップS107:肯定)、NAND制御部12は、データ転送を行ったNANDデバイス22へReadコマンドを発行する(ステップS108)。
そして、NAND制御部12は、コマンド発行完了の通知が命令管理部212から受信したか否かによりコマンド発行が完了したか否かを判定する(ステップS109)。コマンド発行が完了していない場合(ステップS109:否定)、NAND制御部12は、コマンド発行が完了するまで待機する。
これに対して、コマンド発行が完了した場合(ステップS109:肯定)、NAND制御部12は、バッファ215からホスト1へのデータ転送をデータ転送管理部214へ指示する(ステップS110)。その後、NAND制御部12は、ステップS104へ戻る。
一方、状態がBusyからReadyに遷移したNANDデバイス22がない場合(ステップS104:否定)、NAND制御部12は、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっているか否かを判定する(ステップS111)。
読み出すデータが格納されている全てのNANDデバイス22がReady状態になっていない場合(ステップS111:否定)、NAND制御部12は、ステップS104へ戻る。
これに対して、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっている場合(ステップS111:肯定)、NAND制御部12は、データの読み出し処理を終了する。
次に、図7を参照して、本実施例に係るNAND制御部12のデータ書き込み時の処理について説明する。図7は、実施例1に係るNAND制御部のデータ書き込み時の処理のフローチャートである。
NAND制御部12は、状態通知部213からの通知により、Ready状態のNANDデバイス22があるか否かを判定する(ステップS201)。Ready状態のNANDデバイス22がない場合(ステップS201:否定)、NAND制御部12は、いずれかのNANDデバイス22がReady状態になるまで待機する。
これに対して、Ready状態のNANDデバイス22がある場合(ステップS201:肯定)、NAND制御部12は、書き込むデータをバッファ215へ転送する(ステップS202)。
次に、NAND制御部12は、Writeコマンドを書込先のNANDデバイス22へ発行する(ステップS203)。
次に、NAND制御部12は、バッファ215からデータ書込先のNANDデバイス22へのデータ転送の開始をデータ転送管理部214に指示する(ステップS204)。
その後、NAND制御部12は、次に書き込むデータがあるか否かを判定する(ステップS205)。次に書き込むデータがある場合(ステップS205:肯定)、NAND制御部12は、ステップS201へ戻る。これに対して、次に書き込むデータがない場合(ステップS205:否定)、NAND制御部12は、データの書き込み処理を終了する。
次に、図8を参照して、本実施例に係る命令管理部212のデータの書き込み時及び読み出し時の処理について説明する。図8は、実施例1に係る命令管理部のデータの書き込み時及び読み出し時の処理のフローチャートである。
命令管理部212は、Readコマンド又はWriteコマンドを受信したか否かを判定する(ステップS301)。コマンドを受信していない場合(ステップS301:否定)、命令管理部212は、コマンドを受信するまで待機する。
これに対して、コマンドを受信した場合(ステップS301:肯定)、命令管理部212は、受信したコマンドで指定されたNANDデバイス22にコマンドを発行する(ステップS302)。
そして、命令管理部212は、コマンドを発行し終わると、コマンド発行完了をNAND制御部12へ通知する(ステップS303)。
次に、図9を参照して、本実施例に係る状態通知部213による状態の通知処理について説明する。図9は、実施例1に係る状態通知部による状態の通知処理のフローチャートである。
状態通知部213は、NAND制御部12からNANDデバイス22の状態の通知要求を受信したか否かを判定する(ステップS401)。NAND制御部12は、状態通知部213に対して各NANDデバイス22の状態の通知要求のポーリングを行う。NANDデバイス22の状態の通知要求を受信していない場合(ステップS401:否定)、状態通知部213は、NANDデバイス22の状態の通知要求を受信するまで待機する。
これに対して、NANDデバイス22の状態の通知要求を受信した場合(ステップS401:肯定)、状態通知部213は、状態通知要求で指定されたNANDデバイス22の状態をNAND制御部12へ通知する(ステップS402)。
また、上述したように、状態通知部213は、NAND制御部12へ割り込みを行って状態を通知することもできる。そこで、図10を参照して、割り込みを行う場合の状態の通知処理について説明する。図10は、割り込みを行う場合の状態通知部による状態の通知処理のフローチャートである。
状態通知部213は、各NANDデバイス22の状態がBusyからReadyに遷移したか否かを判定する(ステップS411)。BusyからReadyに状態遷移が発生していない場合(ステップS411:否定)、状態通知部213は、いずれかのNANDデバイス22にBusyからReadyへの状態遷移が発生するまで待機する。
これに対して、BusyからReadyに状態遷移が発生した場合(ステップS411:肯定)、状態通知部213は、NAND制御部12へ割り込みを行い、BusyからReadyに状態が遷移したNANDデバイス22がReady状態となったことをNAND制御部12へ通知する(ステップS412)。
次に、図11を参照して、本実施例に係るデータ転送管理部214のデータ転送処理について説明する。図11は、実施例1に係るデータ転送管理部のデータ転送処理のフローチャートである。
データ転送管理部214は、データの読み出しにおけるデータ転送開始要求をNAND制御部12から受信したか否かを判定する(ステップS501)。
データの読み出しにおけるデータ転送開始要求を受信した場合(ステップS501:肯定)、データ転送管理部214は、データ転送開始要求で指定されたNANDデバイス22からバッファ215へのデータ転送を開始する(ステップS502)。
そして、データ転送管理部214は、NANDデバイス22からバッファ215へのデータ転送が完了したか否かを判定する(ステップS503)。データ転送が完了していない場合(ステップS503:否定)、データ転送管理部214は、データ転送が完了するまで待機する。
これに対して、データ転送が完了した場合(ステップS503:肯定)、データ転送管理部214は、データ転送完了をNAND制御部12へ通知する(ステップS504)。
一方、データの読み出しにおけるデータ転送の開始要求を受信していない場合(ステップS501:否定)、データ転送管理部214は、データの書込みにおけるデータ転送開始要求をNAND制御部12から受信したか否かを判定する(ステップS505)。データの書込みにおけるデータ転送開始要求を受信していない場合(ステップS505:否定)、データ転送管理部214は、ステップS501へ戻る。
これに対して、データの書込みにおけるデータ転送の開始要求を受信した場合(ステップS505:肯定)、データ転送管理部214は、データ転送開始要求で指定されたNANDデバイス22へのバッファ215からのデータ転送を開始する(ステップS506)。
そして、データ転送管理部214は、バッファ215からNANDデバイス22へのデータ転送が完了したか否かを判定する(ステップS507)。データ転送が完了していない場合(ステップS507:否定)、データ転送管理部214は、データ転送が完了するまで待機する。
これに対して、データ転送が完了した場合(ステップS507:肯定)、データ転送管理部214は、データ転送完了をNAND制御部12へ通知する(ステップS504)。
以上に説明したように、本実施例に係るストレージシステムは、NANDデバイスのコマンド開始及びデータ転送開始のタイミングをホストが制御する。そして、NANDデバイスがBusy状態のときに、そのNANDデバイスがReady状態になるのを待つことなく、Busy状態にオーバラップさせて他の処理を実行する。これにより、NANDコントローラのバッファとNANDデバイスとの間、及びNANDコントローラのバッファとホストとの間のバスの利用効率を向上させることができ、データ転送レートの高速化を図ることができる。
また、本実施例にかかるストレージシステムは、ホストがNANDデバイスのデータの読み書きの動作を制御する。このため、ホストで動作するアプリケーションが複数のNANDデバイスに分散して配置できるデータパターンを用いているかの判定結果を基に、処理をオーバラップさせたデータの書き込み及び読み込みが行われる。そのため、適切に処理をオーバラップさせたデータの書き込み及び読み込みを行うことができ、バスの利用効率を確実に向上させることができる。
図12は、実施例2に係るストレージシステムのブロック図である。本実施例に係るストレージシステムは、NANDコントローラのバッファとしてダブルバッファを用いていることが実施例1と異なるものである。以下の説明では、実施例1と同じ機能を有する各部については説明を省略する。
NAND制御部12は、データ読み出しにおいて、Readコマンドの発行後、BusyからReadyに状態が遷移したNANDデバイス22がある場合、バッファ217又は218にデータがあるか否かを判定する。ここで、NAND制御部12は、バッファ217又は218へのデータ転送の開始を指示するときに、いずれのバッファにデータを転送したかを記憶する。そして、NAND制御部12は、記憶した情報を用いて各バッファにおけるデータの有無を判定する。
バッファ217及び218のいずれにもデータがない場合、NAND制御部12は、いずれかのバッファを選択する。本実施例では、NAND制御部12は、バッファ217及び218のいずれにもデータがない場合、バッファ217を選択するものとする。
そして、NAND制御部12は、Readyに状態が遷移したNANDデバイス22から選択したバッファへのデータ転送の開始をデータ転送管理部214へ指示する。
バッファ217にデータがある場合、NAND制御部12は、Readyに状態が遷移したNANDデバイス22からバッファ218へのデータ転送の開始をデータ転送管理部214へ指示する。
さらに、NAND制御部12は、バッファ218へのデータ転送と並行して、バッファ217からホストへのデータ転送をデータ転送管理部214へ指示する。
バッファ218にデータがある場合、NAND制御部12は、Readyに状態が遷移したNANDデバイス22からバッファ217へのデータ転送の開始をデータ転送管理部214へ指示する。
さらに、NAND制御部12は、バッファ217へのデータ転送と並行して、バッファ218からホストへのデータ転送をデータ転送管理部214へ指示する。
バッファ217及び218の双方にデータがある場合、並びに、片方にデータがある場合のいずれにおいても、NAND制御部12は、次の動作を行う。すなわち、NAND制御部12は、データ転送完了の通知をデータ転送管理部214から受信すると、データ転送を行ったNANDデバイス22の他のページから読み出すデータがあるか否かを判定する。他のページからデータを読み出す場合、NAND制御部12は、ReadコマンドをそのNANDデバイス22へ発行する。
次に、データ書き込みの場合について説明する。NAND制御部12は、Writeコマンドの発行が完了すると、BusyからReadyに状態が遷移したNANDデバイス22があるか否かを判定する。BusyからReadyに状態が遷移したNANDデバイス22がある場合、NAND制御部12は、バッファ217又は218にデータがあるか否かを判定する。
バッファ217にデータがある場合、NAND制御部12は、バッファ217からNANDデバイス22へのデータ転送を指示するとともに、ホスト1からバッファ218へのデータ転送の開始をデータ転送管理部214へ指示する。
バッファ218にデータがある場合、NAND制御部12は、バッファ218からNANDデバイス22へのデータ転送を指示するとともに、ホスト1からバッファ217へのデータ転送の開始をデータ転送管理部214へ指示する。
バッファ217及び218の双方にデータがある場合、NAND制御部12は、いずれかのバッファからNANDデバイス22へのデータ転送をデータ転送管理部214へ指示する。
バッファ217及び218の双方にデータがある場合、並びに、片方にデータがある場合のいずれにおいても、NAND制御部12は、次の動作を行う。すなわち、NAND制御部12は、データ転送完了の通知をデータ転送管理部214から受信すると、書き込むデータがバッファ217又は218のいずれかに格納されているNANDデバイス22に対してWriteコマンドを発行する。そして、Writeコマンドの発行完了後、NAND制御部12は、BusyからReadyに状態が遷移したNANDデバイス22があるか否かの判定以降の処理を繰り返す。
本実施例のように、ダブルバッファの場合、ホスト1と一方のバッファとの間でデータ転送を行っている間に、NANDデバイス22と他方のバッファとの間でデータ転送を行うことができる。すなわち、NANDコントローラ21を境界として、データ転送を別々に行いオーバラップさせることができるので、バスの利用効率をより向上させることができる。
次に、図13を参照して、本実施例に係るストレージシステムによるデータの読み出し処理の全体的な流れについて説明する。図13は、実施例2に係るストレージシステムによるデータの読み出し処理のタイムチャートである。図13の各処理は、左端に記載された各処理に対応するNANDデバイス22A〜22Dのそれぞれに関する処理である。そして、図13の横軸は時間の経過を表す。ここでは、1チャネル上の4つのNANDデバイス22A〜22Dからデータを読み出す場合で説明する。また、図13では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
命令管理部212は、NANDデバイス22Aに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Aへ発行する(ステップS41)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Aは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22AはBusy状態になる(ステップS42)。
一方、NANDデバイス22AがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Bに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Bへ発行する(ステップS43)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Bは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22BはBusy状態になる(ステップS44)。
一方、NANDデバイス22BがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Cに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Cへ発行する(ステップS45)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Cは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22CはBusy状態になる(ステップS46)。
一方、NANDデバイス22CがBusy状態になっている間に並行して、命令管理部212は、NANDデバイス22Dに対するReadコマンドをNAND制御部12から受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Dへ発行する(ステップS47)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Dは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22DはBusy状態になる(ステップS48)。
そして、ステップS42、S44,S46,S48が終わると、NANDデバイス22A〜22DはそれぞれBusy状態からReady状態に遷移する。状態通知部213は、ステップS42、S44,S46,S48が終わると、NANDデバイス22A〜22DがそれぞれBusy状態からReady状態に遷移したことをNAND制御部12へ通知する。図13では、NANDデバイス22Aが最初にBusy状態からReady状態に遷移する。そこで、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ217へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ217へのデータの転送を行う(ステップS49)。そして、データの転送が完了すると、すなわち、ステップS49が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
続いて、命令管理部212は、NAND制御部12からNANDデバイス22Aに対するReadコマンドを受信する。そして、命令管理部212は、ReadコマンドをNANDデバイス22Aへ発行する(ステップS50)。命令管理部212は、Readコマンドの発行完了の通知をNAND制御部12へ送信する。
Readコマンドの発行を受けると、NANDデバイス22Aは、セルからページレジスタ222へ指定されたデータを転送する。この間、NANDデバイス22AはBusy状態になる(ステップS52)。その後、ステップS52が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
一方、データ転送管理部214は、Readコマンドの発行完了後、バッファ217に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、NANDデバイス22BがBusy状態になっている間に並行して、バッファ217からホスト1へのデータの転送を行う(ステップS51)。
さらに、データ転送管理部214は、Ready状態であるNANDデバイス22Bのページレジスタ222からバッファ218へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、バッファ217からホスト1へのデータの転送に並行して、NANDデバイス22Bのページレジスタ222からバッファ218へのデータの転送を行う(ステップS53)。そして、データの転送が完了すると、すなわち、ステップS53が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。ここでは、読み出すデータがこれ以上ない場合で説明する。
次に、データ転送管理部214は、バッファ218に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ218からホスト1へのデータの転送を行う(ステップS54)。
バッファ217からホスト1へのデータ転送が完了すると、すなわち、ステップS51が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Cのページレジスタ222からバッファ217へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、NANDデバイス22Cのページレジスタ222からバッファ217へのデータの転送を行う(ステップS55)。そして、データの転送が完了すると、すなわち、ステップS55が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ217に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ217からホスト1へのデータの転送を行う(ステップS56)。
バッファ218からホスト1へのデータ転送が完了すると、すなわち、ステップS54が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Dのページレジスタ222からバッファ218へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、NANDデバイス22Dのページレジスタ222からバッファ218へのデータの転送を行う(ステップS57)。そして、データの転送が完了すると、すなわち、ステップS57が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ218に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ218からホスト1へのデータの転送を行う(ステップS58)。
さらに、バッファ217からホスト1へのデータ転送が完了すると、すなわち、ステップS56が終了すると、データ転送管理部214は、Ready状態であるNANDデバイス22Aのページレジスタ222からバッファ217へデータの転送開始の指示をNAND制御部12から受ける。そして、データ転送管理部214は、NANDデバイス22Aのページレジスタ222からバッファ217へのデータの転送を行う(ステップS59)。そして、データの転送が完了すると、すなわち、ステップS59が完了すると、データ転送管理部214は、データの転送完了をNAND制御部12へ通知する。
次に、データ転送管理部214は、バッファ217に格納されているデータのホスト1への送信の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ217からホスト1へのデータの転送を行う(ステップS60)。
ここで、図13における、タイミングT2以降では、Busy状態の期間が他の処理を実行する期間とオーバラップする。これにより、タイミングT2以降は、バス23の利用効率がほぼ100%となる。
次に、図14を参照して、本実施例に係るストレージシステムによるデータの書き込み処理の全体的な流れについて説明する。図14は、実施例2に係るストレージシステムによるデータの書き込み処理のタイムチャートである。図14の各処理は、左端に記載された各処理に対応するNANDデバイス22A〜22Dのそれぞれに関する処理である。そして、図14の横軸は時間の経過を表す。ここでは、1チャネル上の4つのNANDデバイス22A〜22Dに対してデータを書き込む場合で説明する。また、図14では、処理の移行が分かり易くなるように一点鎖線矢印により処理の移行を示す場合がある。
データ転送管理部214は、ホスト1から送られてきたデータをバッファ217に転送する(ステップS61)。
その後、命令管理部212は、NANDデバイス22Aに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Aへ発行する(ステップS62)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ217からNANDデバイス22Aへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ217からNANDデバイス22Aのページレジスタ222へデータを転送する(ステップS63)。
一方、バッファ217からNANDデバイス22Aへのデータ転送に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ218に転送する(ステップS64)。
データ転送管理部214は、バッファ217からNANDデバイス22Aへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。データ転送完了後、NANDデバイス22Aは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22AはBusy状態になる(ステップS65)。その後、ステップS65が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
一方、バッファ217からNANDデバイス22Aへのデータの転送が完了後、命令管理部212は、NANDデバイス22Bに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Bへ発行する(ステップS66)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ218からNANDデバイス22Bへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ218からNANDデバイス22Bのページレジスタ222へデータを転送する(ステップS67)。
一方、バッファ218からNANDデバイス22Bへのデータ転送に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ217に転送する(ステップS68)。
データ転送管理部214は、バッファ218からNANDデバイス22Bへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。データ転送完了後、NANDデバイス22Bは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22BはBusy状態になる(ステップS69)。その後、ステップS69が完了すると、状態通知部213は、NANDデバイス22BがReady状態に遷移したことをNAND制御部12へ通知する。
一方、バッファ218からNANDデバイス22Bへのデータの転送が完了後、命令管理部212は、NANDデバイス22Cに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Cへ発行する(ステップS70)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ217からNANDデバイス22Cへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ217からNANDデバイス22Cのページレジスタ222へデータを転送する(ステップS71)。
一方、バッファ217からNANDデバイス22Cへのデータ転送に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ218に転送する(ステップS72)。
データ転送管理部214は、バッファ217からNANDデバイス22Cへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。データ転送完了後、NANDデバイス22Cは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22CはBusy状態になる(ステップS73)。その後、ステップS73が完了すると、状態通知部213は、NANDデバイス22CがReady状態に遷移したことをNAND制御部12へ通知する。
一方、バッファ217からNANDデバイス22Cへのデータの転送が完了後、命令管理部212は、NANDデバイス22Dに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Dへ発行する(ステップS74)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ218からNANDデバイス22Dへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ218からNANDデバイス22Dのページレジスタ222へデータを転送する(ステップS75)。
一方、バッファ218からNANDデバイス22Dへのデータ転送に並行して、データ転送管理部214は、ホスト1から送られてきたデータをバッファ217に転送する(ステップS76)。
データ転送管理部214は、バッファ218からNANDデバイス22Dへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。データ転送完了後、NANDデバイス22Dは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22DはBusy状態になる(ステップS77)。その後、ステップS73が完了すると、状態通知部213は、NANDデバイス22DがReady状態に遷移したことをNAND制御部12へ通知する。
一方、バッファ218からNANDデバイス22Dへのデータの転送が完了後、命令管理部212は、NANDデバイス22Aに対するWriteコマンドをNAND制御部12から受信する。そして、命令管理部212は、WriteコマンドをNANDデバイス22Aへ発行する(ステップS78)。命令管理部212は、Writeコマンドの発行完了の通知をNAND制御部12へ送信する。
その後、データ転送管理部214は、バッファ217からNANDデバイス22Aへのデータ転送の指示をNAND制御部12から受信する。そして、データ転送管理部214は、バッファ217からNANDデバイス22Aのページレジスタ222へデータを転送する(ステップS79)。
データ転送管理部214は、バッファ217からNANDデバイス22Aへのデータの転送が完了すると、データの転送完了をNAND制御部12へ通知する。データ転送完了後、NANDデバイス22Aは、ページレジスタ222へ格納されたデータをセルへ転送する。この間、NANDデバイス22AはBusy状態になる(ステップS80)。その後、ステップS80が完了すると、状態通知部213は、NANDデバイス22AがReady状態に遷移したことをNAND制御部12へ通知する。
次に、図15を参照して、本実施例に係るNAND制御部12のデータ読み出し時の処理について説明する。図15は、実施例2に係るNAND制御部のデータ読み出し時の処理のフローチャートである。
NAND制御部12は、データ読出先のNANDデバイス22にReadコマンドを発行する(ステップS601)。
そして、NAND制御部12は、コマンド発行完了の通知を命令管理部212から受信したか否かによりコマンド発行が完了したか否かを判定する(ステップS602)。コマンド発行が完了していない場合(ステップS602:否定)、NAND制御部12は、コマンド発行が完了するまで待機する。
これに対して、コマンド発行が完了した場合(ステップS602:肯定)、NAND制御部12は、データを読み出すNANDデバイス22が他にあるか否かを判定する(ステップS603)。データを読み出すNANDデバイス22が他にある場合(ステップS603:肯定)、NAND制御部12は、ステップS601へ戻る。
これに対して、データを読み出すNANDデバイス22が他にない場合(ステップS603:否定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22があるか否かを判定する(ステップS604)。
状態がBusyからReadyに遷移したNANDデバイス22がある場合(ステップS604:肯定)、NAND制御部12は、バッファ217にデータがあるか否かを判定する(ステップS605)。
バッファ217にデータがある場合(ステップS605:肯定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22からバッファ218へのデータ転送を開始するようにデータ転送管理部214に指示する(ステップS606)。
また、NAND制御部12は、バッファ217からホスト1へのデータ転送をデータ転送管理部214へ指示する(ステップS607)。
一方、バッファ217にデータがない場合(ステップS605:否定)、NAND制御部12は、バッファ218にデータがあるか否かを判定する(ステップS608)。
バッファ218にデータがある場合(ステップS608:肯定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22からバッファ217へのデータ転送を開始するようにデータ転送管理部214に指示する(ステップS609)。
また、NAND制御部12は、バッファ218からホスト1へのデータ転送をデータ転送管理部214へ指示する(ステップS610)。
一方、バッファ218にデータがない場合(ステップS608:否定)、NAND制御部12は、状態がBusyからReadyに遷移したNANDデバイス22からバッファ217へのデータ転送を開始するようにデータ転送管理部214に指示する(ステップS611)。
NAND制御部12は、データ転送管理部214からデータ転送完了の通知を受けたか否かにより、データ転送が完了したか否かを判定する(ステップS612)。データ転送が完了していない場合(ステップS612:否定)、NAND制御部12は、データ転送が完了するまで待機する。
これに対して、データ転送が完了した場合(ステップS612:肯定)、NAND制御部12は、データ転送を行ったNANDデバイス22において他のページからのデータ読み出しがあるか否かを判定する(ステップS613)。他のページからの読み出しがない場合(ステップS613:否定)、NAND制御部12は、ステップS604へ戻る。
一方、他のページからの読み出しがある場合(ステップS613:肯定)、NAND制御部12は、データ転送を行ったNANDデバイス22へReadコマンドを発行する(ステップS614)。
そして、NAND制御部12は、コマンド発行完了の通知が命令管理部212から受信したか否かによりコマンド発行が完了したか否かを判定する(ステップS615)。コマンド発行が完了していない場合(ステップS615:否定)、NAND制御部12は、コマンド発行が完了するまで待機する。
これに対して、コマンド発行が完了した場合(ステップS615:肯定)、NAND制御部12は、ステップS604へ戻る。
一方、状態がBusyからReadyに遷移したNANDデバイス22がない場合(ステップS604:否定)、NAND制御部12は、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっているか否かを判定する(ステップS616)。
読み出すデータが格納されている全てのNANDデバイス22がReady状態になっていない場合(ステップS616:否定)、NAND制御部12は、ステップS604へ戻る。
これに対して、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっている場合(ステップS616:肯定)、NAND制御部12は、データの読み出し処理を終了する。
以上に説明したように、本実施例に係るストレージシステムは、ダブルバッファを用いて処理をオーバラップさせながらデータの読み書きを行う。これにより、バスの利用効率をより向上させることができ、データ転送効率をより向上させることができる。