JP6160294B2 - ストレージシステム、ストレージ装置及びストレージシステムの制御方法 - Google Patents

ストレージシステム、ストレージ装置及びストレージシステムの制御方法 Download PDF

Info

Publication number
JP6160294B2
JP6160294B2 JP2013132124A JP2013132124A JP6160294B2 JP 6160294 B2 JP6160294 B2 JP 6160294B2 JP 2013132124 A JP2013132124 A JP 2013132124A JP 2013132124 A JP2013132124 A JP 2013132124A JP 6160294 B2 JP6160294 B2 JP 6160294B2
Authority
JP
Japan
Prior art keywords
nand
data
unit
data transfer
storage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2013132124A
Other languages
English (en)
Other versions
JP2015007843A (ja
Inventor
風間 哲
哲 風間
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013132124A priority Critical patent/JP6160294B2/ja
Priority to US14/271,485 priority patent/US9977602B2/en
Publication of JP2015007843A publication Critical patent/JP2015007843A/ja
Application granted granted Critical
Publication of JP6160294B2 publication Critical patent/JP6160294B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements

Description

本発明は、ストレージシステム、ストレージ装置及びストレージシステムの制御方法に関する。
近年、サーバなどの情報処理装置において、ハードディスクよりも高速な記憶装置として、NAND型フラッシュメモリデバイス(以下、「NANDデバイス」という。)のような不揮発性メモリを用いたメモリシステムやストレージシステムなどの記憶装置が広く用いられてきている。
NANDデバイスはNANDコントローラで制御される。そして、ホストとNANDコントローラは、PCI(Peripheral Component Interconnect)expressなどで接続される。他にも、例えば、SATA(Serial Advanced Technology Attachment)、又はSAS I/F(Serial Attached SCSI(Small Computer System Interface) Interface)なども接続に用いられる。
従来は、NANDコントローラとNANDデバイスとの間の複数のチャネルのバスに対して並列アクセスを行うことでデータ転送の広帯域化を図っていた。
例えば、従来の1つのチャネルにおけるリード処理は、以下のような手順で行われる。すなわち、NANDコントローラがホストからのリードコマンドを解釈し、指定されたNANDデバイスにリードコマンドを発行する。次に、NANDデバイスは、リードデータを出力し、NANDコントローラは自己が有するバッファに格納する。その後、NANDコントローラは、リードデータをバッファからホストに転送する。
なお、初期化処理時にデータ読み出し命令をオーバラップさせて読み出し時間を短縮する従来技術がある。また、メモリコントローラが、高温時にパラレル制御からインタリーブ制御に切替る従来技術がある。さらに、データバーストとしてデータを送信する場合に、データバーストの構成を変更することでデータ転送の処理性能を向上させる従来技術がある。
特開2005−266888号公報 特開2012−18648号公報 特開2011−107928号公報
しかしながら、NANDデバイスは、データ出力のためのビジー期間が長い。そして、従来のリード処理やライト処理では、ビジー期間に処理の実行を待機するため、1チャネル毎のバスの利用効率が悪く、データの転送効率が悪い。
また、初期化処理時にデータ読み出し命令をオーバラップさせる従来技術を用いても、初期化以外のリードやライトでは、ビジー期間に命令をオーバラップさせることができず、バスの利用効率を向上させることは困難である。また、高温時にパラレル制御からインタリーブ制御に切替る従来技術を用いても、コントローラでは、オーバラップさせることができるデータか否かの判定が困難なため、ビジー期間の適切な有効利用ができず、バスの利用効率を向上させることは困難である。さらに、データバーストの構成を変更する従来技術を用いても、ビジー期間にはデータ転送は行えないため、バスの利用効率を向上させることは困難である。すなわち、いずれの従来技術を用いても、データの転送効率を向上させることは困難である。
開示の技術は、上記に鑑みてなされたものであって、データの転送効率を向上させたストレージシステム、ストレージ装置及びストレージシステムの制御方法を提供することを目的とする。
本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法は、一つの態様において、演算処理装置及び記憶装置を有する。前記記憶装置は、データの格納領域及びデータの読み書きに際し一時的にデータを保持するためのレジスタをそれぞれが有し、発行された読み出し命令又は書き込み命令に基づく前記格納領域と前記レジスタとの間のデータの読み書きを含む処理をそれぞれ行う複数の記憶部と、前記演算処理装置からの命令を、前記複数の記憶部のうち、読み出し命令又は書き込み命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、前記複数の記憶部の各々が前記格納領域と前記レジスタとの間のデータの読み書きの処理を行っているかに基づいて、発行された読み出し命令又は書き込み命令を各記憶部が受入可能であるかを示す受入可能通知を前記演算処理装置へ通知する通知部を有する。前記演算処理装置は、記命令管理部からの発行完了通知を受信した場合、前記通知部からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を1つ選択し、他の記憶部による前記格納領域と前記レジスタとの間のデータの読み書きの処理に並行して選択した前記記憶部に処理を行わせるための読み出し命令又は書き込み命令を前記命令管理部へ送信するストレージ制御部とを有する。
本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法の一つの態様によれば、データの転送効率を向上させることができるという効果を奏する。
図1は、ストレージシステムの概略構成図である。 図2は、NANDデバイスの内部を説明するための図である。 図3は、実施例1に係るストレージシステムの詳細を表すブロック図である。 図4は、実施例1に係るストレージシステムによるデータの読み出し処理のタイムチャートである。 図5は、実施例1に係るストレージシステムによるデータの書き込み処理のタイムチャートである。 図6は、実施例1に係るNAND制御部のデータ読み出し時の処理のフローチャートである。 図7は、実施例1に係るNAND制御部のデータ書き込み時の処理のフローチャートである。 図8は、実施例1に係る命令管理部のデータの書き込み時及び読み出し時の処理のフローチャートである。 図9は、実施例1に係る状態通知部による状態の通知処理のフローチャートである。 図10は、割り込みを行う場合の状態通知部による状態の通知処理のフローチャートである。 図11は、実施例1に係るデータ転送管理部のデータ転送処理のフローチャートである。 図12は、実施例2に係るストレージシステムのブロック図である。 図13は、実施例2に係るストレージシステムによるデータの読み出し処理のタイムチャートである。 図14は、実施例2に係るストレージシステムによるデータの書き込み処理のタイムチャートである。 図15は、実施例2に係るNAND制御部のデータ読み出し時の処理のフローチャートである。 図16は、実施例3に係るNAND制御部のデータ読み出し時の処理のフローチャートである。 図17は、ストレージシステムのハードウェア構成図である。
以下に、本願の開示するストレージシステム、ストレージ装置及びストレージシステムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するストレージシステム、ストレージ装置、及びストレージシステムの制御方法が限定されるものではない。
図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デバイス22が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は、データの読み出し処理を終了する。
以上に説明したように、本実施例に係るストレージシステムは、ダブルバッファを用いて処理をオーバラップさせながらデータの読み書きを行う。これにより、バスの利用効率をより向上させることができ、データ転送効率をより向上させることができる。
次に、実施例3に係るストレージシステムについて説明する。本実施例に係るストレージシステムは、NANDデバイスのエラー検出を行うことが実施例1と異なるものである。本実施例に係るストレージシステムのブロック図も図3で表される。以下の説明では、実施例1と同じ機能を有する各部については説明を省略する。
NAND制御部12は、自己の内部にタイマを有する。そして、NAND制御部12は、NANDデバイス22がBusy状態に遷移してからの時間を計測する。
そして、NAND制御部12は、BusyからReadyに状態が遷移したNANDデバイス22の有無を判断し、そのようなNANDデバイス22がない場合に、Busy状態にある各NANDデバイス22のBusy状態になってからの経過時間を取得する。そして、NAND制御部12は、Busy状態になってから一定時間を経過したNANDデバイス22があるか否かを判定する。そして、Busy状態になってから一定時間経過したNANDデバイス22があれば、そのNANDデバイス22におけるエラーを検出する。ここで、一定時間は、ストレージシステムの性能や運用状態に応じて設定することが好ましい。例えば、Busy状態が最大で100μs継続するとして設計されているストレージシステムであれば、動作の余裕を考慮して一定時間を200μsなどとすることが考えられる。
NAND制御部12は、全てのデバイスがReady状態になるまでエラーの検出を繰り返す。
エラーを検出した場合、NAND制御部12は、エラーを検出したNANDデバイス22をリセットして、処理をリトライする。また、NAND制御部12は、ホスト1で動作するOS(Operating System)やアプリケーションへエラーを通知する。
ただし、NAND制御部12が実施するエラー処理は、これに限らず、他のエラー処理を行ってもよい。
次に、図16を参照して、本実施例に係るNAND制御部12のデータ読み出し時の処理について説明する。図16は、実施例3に係るNAND制御部のデータ読み出し時の処理のフローチャートである。
図16におけるステップS701〜S710の処理は実施例1における図6で示したステップS101〜S110の処理と同じであるので説明を省略する。
状態がBusyからReadyに遷移したNANDデバイス22がない場合(ステップS704:否定)、NAND制御部12は、Busy状態になってから一定時間が経過したNANDデバイス22があるか否かを判定する(ステップS711)。一定時間が経過したNANDデバイス22がない場合(ステップS711:否定)、NAND制御部12は、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっているか否かを判定する(ステップS712)。
読み出すデータが格納されている全てのNANDデバイス22がReady状態になっていない場合(ステップS712:否定)、NAND制御部12は、ステップS704へ戻る。
これに対して、読み出すデータが格納されている全てのNANDデバイス22がReady状態になっている場合(ステップS712:肯定)、NAND制御部12は、データの読み出し処理を終了する。
一方、一定時間が経過したNANDデバイス22がある場合(ステップS711:肯定)、NAND制御部12は、一定時間が経過したNANDデバイス22のエラーを検出し、エラー処理を実施する(ステップS713)。
以上に説明したように、本実施例に係るストレージシステムは、Ready状態に遷移しないNANDデバイスのエラーを検出する。これにより、エラーが発生したNANDデバイスがReady状態になることを待つ無駄な時間を削減でき、エラーによるデータ転送の遅滞を軽減でき、バスの利用効率も向上する。
ここで、以上の各実施例では、NANDコントローラ21とNANDデバイス22とを接続するバスを1チャネルとして説明したが、バスは複数チャネルでもよく、複数チャネルの場合、各チャネルにおいて各実施例で説明した処理が行われる。
(ハードウェア構成)
次に、図17を参照して、以上に説明した各実施例に係るストレージシステムのハードウェア構成について説明する。図17は、ストレージシステムのハードウェア構成図である。
図17に示すように、ホスト1は、CPU(Central Processing Unit)901、メモリ902、I/Oコントローラ903、NIC(Network Interface Card)904及びHDD(Hard Disk Drive)905を有する。
メモリ902、I/Oコントローラ903はCPU901とバスで接続する。また、NIC904及びHDD905は、I/Oコントローラ903を介してCPU901と接続する。
NIC904は、ネットワークに接続し外部の装置と通信を行うためのインタフェースである。
HDD905は、図3及び図12に例示したアプリ実行部11やNAND制御部12の機能を実現するためのプログラム等の各種プログラムを格納する。
CPU901、メモリ902、I/Oコントローラ903及びHDD905は、図3及び図12に例示したアプリ実行部11やNAND制御部12の機能を実現する。
例えば、CPU901は、HDD905から各種プログラムを読み出し、メモリ902上にアプリ実行部11やNAND制御部12の機能を実現するプロセスを展開する。そして、CPU901は、メモリ902やI/Oコントローラ903などを用いてメモリ902上のプロセスを実行することで、アプリ実行部11やNAND制御部12などの各種機能を実現する。
ストレージ装置2は、NANDコントローラ911及びNANDフラッシュ912を有する。
NANDコントローラ911とNANDフラッシュ912はバスで接続されている。
NANDフラッシュ912は、NANDデバイス22の機能を実現する。
NANDコントローラ911は、FPGA(Field Programmable Gate Array)を用いて製造されている。NANDコントローラ911は、命令管理部212、状態通知部213、データ転送管理部214、及びバッファ215〜217の機能を実現する。
1 ホスト
2 ストレージ装置
11 アプリ実行部
12 NAND制御部
13 PCI express I/F
21 NANDコントローラ
22,22A〜22D NANDデバイス
23 バス
211 PCI express I/F
212 命令管理部
213 状態通知部
214 データ転送管理部
215 バッファ
216 NAND I/F
221 メモリセル
222 ページレジスタ

Claims (7)

  1. 演算処理装置及び記憶装置を有するストレージシステムにおいて、
    前記記憶装置は、
    データの格納領域及びデータの読み書きに際し一時的にデータを保持するためのレジスタをそれぞれが有し、発行された読み出し命令又は書き込み命令に基づく前記格納領域と前記レジスタとの間のデータの読み書きを含む処理をそれぞれ行う複数の記憶部と、
    前記演算処理装置からの命令を、前記複数の記憶部のうち、読み出し命令又は書き込み命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、
    前記複数の記憶部の各々が前記格納領域と前記レジスタとの間のデータの読み書きの処理を行っているかに基づいて、発行された読み出し命令又は書き込み命令を各記憶部が受入可能であるかを示す受入可能通知を前記演算処理装置へ通知する通知部とを有し、
    前記演算処理装置は、
    前記命令管理部からの発行完了通知を受信した場合、前記通知部からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を1つ選択し、他の記憶部による前記格納領域と前記レジスタとの間のデータの読み書きの処理に並行して選択した前記記憶部に処理を行わせるための読み出し命令又は書き込み命令を前記命令管理部へ送信するストレージ制御部とを有する
    ことを特徴とするストレージシステム。
  2. 前記記憶装置は、
    命令が読み出し命令の場合、前記演算処理装置からの読み出し命令に含まれるデータ転送開始要求を受けて、指定された記憶部から前記演算処理装置へのデータ転送を実行させ、データ転送が完了すると転送完了を前記演算処理装置へ通知するデータ転送管理部をさらに備え、
    前記ストレージ制御部は、
    前記データ転送管理部から前記転送完了の通知を受けて、前記通知部からの通知を基に、コマンド受入可能で且つデータ転送を実行していない記憶部に対するデータ転送開始要求を前記データ転送管理部へ送信する
    ことを特徴とする請求項1に記載のストレージシステム。
  3. 前記記憶装置は、
    データを格納する複数の一時格納部と、
    命令が読み出し命令の場合、前記演算処理装置からのデータ転送開始要求を受けて、指定された記憶部から前記演算処理装置により指定された一時格納部へのデータ転送を実行させ、前記一時格納部へのデータ転送が完了すると転送完了を前記演算処理装置へ通知し、前記一時格納部に格納されたデータを前記演算処理装置に転送するデータ転送管理部とをさらに備え、
    前記ストレージ制御部は、
    前記データ転送管理部から前記転送完了の通知を受けて、前記通知部からの通知を基に、コマンド受入可能で且つ前記一時格納部へのデータ転送を実行していない記憶部に対するデータ転送開始要求を、一時格納部の指定とともに前記データ転送管理部へ送信する
    ことを特徴とする請求項1に記載のストレージシステム。
  4. 前記ストレージ制御部は、前記通知部からの通知を基に、所定時間以上経過しても命令受入可能とならない前記記憶部を故障と判定することを特徴とする請求項1〜3のいずれか一つに記載のストレージシステム。
  5. 前記演算処理装置は、書き込むデータが複数の前記記憶部に分散して格納可能なデータパターンを有するか否かを判定し、前記書き込むデータが複数の前記記憶部に分散して格納可能なデータパターンを有する場合に、前記ストレージ制御部にデータの書き込み命令を送信する判定部をさらに備えたことを特徴とする請求項1〜4のいずれか一つに記載のストレージシステム。
  6. データの格納領域及びデータの読み書きに際し一時的にデータを保持するためのレジスタをそれぞれが有し、発行された読み出し命令又は書き込み命令に基づく前記格納領域と前記レジスタとの間のデータの読み書きを含む処理をそれぞれ行う複数の記憶部と、
    命令の発行完了通知を受信した場合、前記複数の記憶部のうち、命令受入可能な記憶部を1つ選択し、他の記憶部による前記格納領域と前記レジスタとの間のデータの読み書きの処理に並行して選択した前記記憶部に処理を行わせるための読み出し命令又は書き込み命令を送信する演算処理装置から読み出し命令又は書き込み命令を、前記複数の記憶部のうちの読み出し命令又は書き込み命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置に送信する命令管理部と、
    前記複数の記憶部の各々が前記格納領域と前記レジスタとの間のデータの読み書きの処理を行っているかに基づいて、発行された読み出し命令又は書き込み命令を各記憶部が受入可能であるかを示す受入可能通知を前記演算処理装置へ通知する通知部と
    を有することを特徴とするストレージ装置。
  7. 演算処理装置及びデータの格納領域及びデータの読み書きに際し一時的にデータを保持するためのレジスタを有する複数の記憶部を有する記憶装置を有するストレージシステムの制御方法であって、
    前記記憶装置に、前記演算処理装置からの読み出し命令又は書き込み命令を、前記複数の記憶部のうち、読み出し命令又は書き込み命令で指定された記憶部に発行するとともに、発行した命令の発行完了通知を前記演算処理装置へ送信させ、
    前記記憶装置に、前記複数の記憶部の各々が前記格納領域と前記レジスタとの間のデータの読み書きの処理を行っているかに基づいて、発行された読み出し命令又は書き込み命令を各記憶部が受入可能であるかを示す受入可能通知を前記演算処理装置へ通知させ、
    前記演算処理装置に、前記記憶装置から発行完了通知を受信させ、前記記憶装置からの受入可能通知に基づき、前記複数の記憶部のうち、命令受入可能な記憶部を1つ選択させ、
    前記演算処理装置に、他の記憶部による前記格納領域と前記レジスタとの間のデータの読み書きの処理に並行して選択した前記記憶部に処理を行わせるための読み出し命令又は書き込み命令を前記記憶装置へ送信させる
    ことを特徴とするストレージシステムの制御方法。
JP2013132124A 2013-06-24 2013-06-24 ストレージシステム、ストレージ装置及びストレージシステムの制御方法 Active JP6160294B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013132124A JP6160294B2 (ja) 2013-06-24 2013-06-24 ストレージシステム、ストレージ装置及びストレージシステムの制御方法
US14/271,485 US9977602B2 (en) 2013-06-24 2014-05-07 Storage system, storage device, and control method of storage system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013132124A JP6160294B2 (ja) 2013-06-24 2013-06-24 ストレージシステム、ストレージ装置及びストレージシステムの制御方法

Publications (2)

Publication Number Publication Date
JP2015007843A JP2015007843A (ja) 2015-01-15
JP6160294B2 true JP6160294B2 (ja) 2017-07-12

Family

ID=52111931

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013132124A Active JP6160294B2 (ja) 2013-06-24 2013-06-24 ストレージシステム、ストレージ装置及びストレージシステムの制御方法

Country Status (2)

Country Link
US (1) US9977602B2 (ja)
JP (1) JP6160294B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160041762A1 (en) 2014-08-08 2016-02-11 Kabushiki Kaisha Toshiba Memory system, host device and information processing system
JP2017027479A (ja) * 2015-07-24 2017-02-02 富士通株式会社 データ読出し方法及び情報処理システム
US10198061B2 (en) 2015-09-01 2019-02-05 Toshiba Memory Corporation Storage and storage system
CN105511807B (zh) * 2015-11-30 2018-05-22 杭州华澜微电子股份有限公司 一种基于存储设备的数据存储管理方法及系统
KR20190032809A (ko) * 2017-09-20 2019-03-28 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작 방법
JP7131053B2 (ja) 2018-04-24 2022-09-06 富士通株式会社 記憶装置,情報処理プログラムおよび情報処理システム
US11750706B1 (en) * 2020-03-26 2023-09-05 Amazon Technologies, Inc. Data transmission time management
US11404095B1 (en) * 2021-01-21 2022-08-02 Micron Technology, Inc. Reduced pin status register

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3377619A (en) * 1964-04-06 1968-04-09 Ibm Data multiplexing system
US5287537A (en) * 1985-11-15 1994-02-15 Data General Corporation Distributed processing system having plural computers each using identical retaining information to identify another computer for executing a received command
JPS6462719A (en) * 1987-09-02 1989-03-09 Nec Corp Printer capable of connection to plural host computers
US6134630A (en) * 1997-11-14 2000-10-17 3Ware High-performance bus architecture for disk array system
JP2001266579A (ja) * 2000-01-12 2001-09-28 Hitachi Ltd 不揮発性半導体記憶装置および半導体ディスク装置
TW504694B (en) * 2000-01-12 2002-10-01 Hitachi Ltd Non-volatile semiconductor memory device and semiconductor disk device
KR100389916B1 (ko) * 2000-08-28 2003-07-04 삼성전자주식회사 메모리 모듈 및 메모리 컨트롤러
DE10215362A1 (de) * 2002-04-08 2003-10-30 Infineon Technologies Ag Integrierter Speicher mit einem Speicherzellenfeld mit mehreren Speicherbänken und Schaltungsanordnung mit einem integrierten Speicher
JP2005266888A (ja) 2004-03-16 2005-09-29 Matsushita Electric Ind Co Ltd 不揮発性記憶装置の初期化方法
EP1746510A4 (en) * 2004-04-28 2008-08-27 Matsushita Electric Ind Co Ltd NONVOLATILE STORAGE DEVICE AND DATA WRITING METHOD
JP2009015670A (ja) * 2007-07-06 2009-01-22 Fujitsu Ltd 中継転送装置、プログラム、方法及びシステム
US8566504B2 (en) * 2007-09-28 2013-10-22 Sandisk Technologies Inc. Dynamic metablocks
US8438356B2 (en) * 2007-10-01 2013-05-07 Marvell World Trade Ltd. Flash memory controller
US8255615B1 (en) * 2009-01-08 2012-08-28 Marvell International Ltd. Flexible sequence design architecture for solid state memory controller
US8055816B2 (en) * 2009-04-09 2011-11-08 Micron Technology, Inc. Memory controllers, memory systems, solid state drives and methods for processing a number of commands
JP2011107928A (ja) 2009-11-17 2011-06-02 Panasonic Corp インターフェース回路、ホスト装置、スレーブ装置、および不揮発性記憶システム
US8489803B2 (en) * 2009-12-14 2013-07-16 Smsc Holdings S.A.R.L. Efficient use of flash memory in flash drives
JP2012018648A (ja) 2010-07-09 2012-01-26 Toshiba Corp メモリシステム
US9251058B2 (en) * 2010-09-28 2016-02-02 SanDisk Technologies, Inc. Servicing non-block storage requests
CN103403681B (zh) * 2010-12-20 2018-09-18 马维尔国际贸易有限公司 描述符调度器
US8301832B1 (en) * 2012-03-23 2012-10-30 DSSD, Inc. Storage system with guaranteed read latency
US9335952B2 (en) * 2013-03-01 2016-05-10 Ocz Storage Solutions, Inc. System and method for polling the status of memory devices
US9519575B2 (en) * 2013-04-25 2016-12-13 Sandisk Technologies Llc Conditional iteration for a non-volatile device
JP6232936B2 (ja) * 2013-10-31 2017-11-22 富士通株式会社 情報処理装置、記憶装置制御回路及び記憶装置の制御方法
US20160062925A1 (en) * 2014-08-28 2016-03-03 Samsung Electronics Co., Ltd. Method and system for managing storage device operations by a host device

Also Published As

Publication number Publication date
JP2015007843A (ja) 2015-01-15
US20140379963A1 (en) 2014-12-25
US9977602B2 (en) 2018-05-22

Similar Documents

Publication Publication Date Title
JP6160294B2 (ja) ストレージシステム、ストレージ装置及びストレージシステムの制御方法
US20190087363A1 (en) Multilevel memory bus system
US20110246677A1 (en) Systems and methods for controlling commands for target devices
KR102168487B1 (ko) 높은 클럭 속도에서 연속하는 판독 버스트 지원
JP2002288034A (ja) 半導体記憶装置とその読出し・書き込み方法
KR20150083741A (ko) 임베디드 멀티미디어 카드 및 이의 동작 방법
EP2423823B1 (en) Methods and apparatus for improved host/initiator utilization in serial advanced technology attachment communication
US7725621B2 (en) Semiconductor device and data transfer method
JP2008521080A (ja) マルチメディア・カード・インターフェース方法、コンピュータ・プログラム及び装置
JP2005275538A (ja) ダイレクトメモリアクセス制御装置および方法
US8386725B2 (en) USB host controller and controlling method for USB host controller
JP2003288317A (ja) 端数ブロックデータ転送を検出し補償するシステムおよび方法
US20080052429A1 (en) Off-board computational resources
JP6112412B2 (ja) 入出力制御回路及び入出力制御回路における同期制御方法
CN114625678B (zh) 存储器系统
US11294832B2 (en) Systems and methods for queuing device management configuration requests
US20080126472A1 (en) Computer communication
EP2393013A2 (en) Method and apparatus for wireless broadband systems direct data transfer
JP2010026592A (ja) メモリデバイスおよびメモリデバイス制御装置
JP4723334B2 (ja) Dma転送システム
JPS63223822A (ja) デイスク装置の制御方式
JP2004139482A (ja) 磁気ディスク制御装置のコマンド処理時間監視設定方法
JP6034008B2 (ja) 送信権調停装置、送信権調停制御方法、及びそのためのプログラム
KR20160007859A (ko) 컴퓨팅 시스템 및 이의 동작 방법.
JPH0519181B2 (ja)

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160310

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170228

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170427

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170516

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170529

R150 Certificate of patent or registration of utility model

Ref document number: 6160294

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150