(57)【要約】【課題】パリティデータを書き込んでもライト性能を低下させないこと。【解決手段】ライト用ＤＭＡ２００は、書込部２２０と読出部２３０とパリティ生成部２４０とを有する。読出部２３０は、パリティデータを記憶する２つのＮＡＮＤフラッシュ２０ｄ、２０ｅの一方からパリティデータを読出す。パリティ生成部２４０は、読出されたパリティデータと、ユーザデータを分割して得られる複数のストライプとからパリティデータを生成する。書込部２２０は、ストライプを記憶する複数のＮＡＮＤフラッシュ２０ａ〜２０ｃのいずれかにストライプを書込むとともに、パリティデータを読出していないＮＡＮＤフラッシュ２０ｄ、２０ｅに生成されたパリティデータを書込む。【選択図】図２
2013131192.tif 000002
【特許請求の範囲】
【請求項１】
データを分割して得られる複数の部分データをそれぞれ記憶する複数のメモリを含む第１メモリ群と、
パリティデータを記憶する第１のメモリ及び第２のメモリと、
前記第１のメモリまたは前記第２のメモリからパリティデータを読出す読出部と、
前記読出されたパリティデータと、部分データとからパリティデータを生成する生成部と、
前記第１メモリ群に含まれるいずれかのメモリに前記部分データを書込むとともに、前記第１のメモリからパリティデータを読出した場合には、前記第２のメモリに、前記第２のメモリからパリティデータを読出した場合には、前記第１のメモリに、生成されたパリティデータを書込む書込部と
を有することを特徴とするストレージ装置。
【請求項２】
前記第１メモリ群に含まれる複数のメモリは、一時保存領域と保存領域とを有し、
前記第１のメモリ及び前記第２のメモリは、一時保存領域と保存領域とを有し、
前記読出部は、前記第１のメモリの一時保存領域または前記第２のメモリの一時保存領域からパリティデータを読出し、
前記書込部は、前記第１メモリ群に含まれる複数のメモリの一時保存領域に前記部分データを書込むとともに、前記第１のメモリからパリティデータを読出した場合には、前記第２のメモリの一時保存領域に、前記第２のメモリからパリティデータを読出した場合には、前記第１のメモリの一時保存領域に、生成されたパリティデータを書込む
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記書込部は、部分データを前記第１メモリ群に含まれる複数のメモリの一時保存領域から保存領域に書込み、書込む部分データが最後の部分データである場合、該最後の部分データを前記第１メモリ群に含まれる複数のメモリの一時保存領域から保存領域に書込むと同時に、パリティデータを前記第１のメモリの一時保存領域から保存領域または前記第２のメモリの一時保存領域から保存領域に書込む
ことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記書込部は、奇数個の部分データに分割された第１のデータと偶数個の部分データに分割された第２のデータとを前記第１メモリ群に含まれる複数のメモリに書込む場合、前記第１のデータに対するパリティデータを前記第１のメモリの保存領域または前記第２のメモリの保存領域に書込み、前記第１のメモリに前記第１のデータに対するパリティデータを書込んだ場合には前記第２のメモリに、前記第２のメモリに前記第１のデータに対するパリティデータを書込んだ場合には前記第１のメモリに、前記第２のデータに対するパリティデータを書込むことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
ストレージ装置が、
データを分割して得られる複数の部分データを第１メモリ群に含まれる複数のメモリのいずれかに書込むとともに、パリティデータを第１のメモリまたは第２のメモリに書込み、
前記第１のメモリまたは前記第２のメモリからパリティデータを読出し、
前記読出したパリティデータと、部分データとからパリティデータを生成し、
前記第１メモリ群に含まれる複数のメモリに前記部分データを書込むとともに、前記第１のメモリからパリティデータを読出した場合には前記第２のメモリに、前記第２のメモリからパリティデータを読出した場合には前記第１のメモリに、生成されたパリティデータを書込む
各処理を含んだことを特徴とするストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置の制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュは、電力の供給を受けずにデータを保存する半導体の記憶装置である。このため、ＮＡＮＤフラッシュは、ストレージ装置において、例えば停電時に、キャッシュメモリ内のデータのバックアップに用いられる。
【０００３】
また、ストレージ装置では、データをバックアップする場合、バックアップしたデータにパリティデータを付加することで、データにエラーが生じた場合、データの復元を可能にする。図８を用いて、ＮＡＮＤフラッシュへのデータバックアップを説明する。
【０００４】
図８は、従来技術に係るＮＡＮＤフラッシュ制御装置の一例を示す図である。図８に示すように、ＮＡＮＤフラッシュ制御装置８００は、ＲＡＩＤ（Redundant  Arrays  of  Inexpensive  Disks）を構成するＮＡＮＤフラッシュ９１０〜９４０それぞれと接続する。また、各ＮＡＮＤフラッシュ９１０〜９４０は、バッファとアレイとを有する。ここで、ＮＡＮＤフラッシュ９１０〜９３０は、ユーザデータを記憶する。また、ＮＡＮＤフラッシュ９４０は、パリティデータを記憶する。
【０００５】
また、図８に示す例では、ＮＡＮＤフラッシュ制御装置８００が有するＤＭＡ（Direct  Memory  Access）のうちライト用ＤＭＡ８１０のみを図示している。このライト用ＤＭＡ８１０は、書込部８１１、パリティ生成部８１２、パリティ計算用ＲＡＭ（Random  Access  Memory）８１３を有する。
【０００６】
次に、図９を用いて、このようなＮＡＮＤフラッシュ制御装置８００において、ユーザデータを３つのストライプに分割してＮＡＮＤフラッシュ９１０〜９３０に書込み、パリティデータをＮＡＮＤフラッシュ９４０に書込む場合を例に説明する。図９は、ＮＡＮＤフラッシュ制御装置によりデータの書込み動作を示すシーケンス図である。
【０００７】
ＮＡＮＤフラッシュ制御装置８００では、書込部８１１とパリティ生成部８１２とに１番目のストライプが入力される。書込部８１１は、１番目のストライプをＮＡＮＤフラッシュ９１０のバッファ９１１に書込む（ステップＳ９０１）と同時に、パリティ生成部８１２は、パリティ計算用ＲＡＭ８１３に１番目のストライプを書込む。続いて、ＮＡＮＤフラッシュ９１０では、バッファ９１１に書込まれたストライプがアレイ９１２に書込まれる（ステップＳ９０２）。
【０００８】
また、ＮＡＮＤフラッシュ制御装置８００では、書込部８１１とパリティ生成部８１２とに２番目のストライプが入力される。書込部８１１は、２番目のストライプをＮＡＮＤフラッシュ９２０のバッファ９２１に書込む（ステップＳ９０３）と同時に、パリティ生成部８１２が以下の処理を実行する。すなわち、パリティ生成部８１２は、パリティ計算用ＲＡＭ８１３から１番目のストライプを読み出して２番目のストライプとの排他的論理和からパリティデータを算出し、パリティ計算用ＲＡＭ８１３に書込む。続いて、ＮＡＮＤフラッシュ９２０では、バッファ９２１に書込まれたストライプがアレイ９２２に書込まれる（ステップＳ９０４）。
【０００９】
続いて、ＮＡＮＤフラッシュ制御装置８００では、書込部８１１とパリティ生成部８１２とに３番目のストライプが入力される。書込部８１１は、３番目のストライプをＮＡＮＤフラッシュ９３０のバッファ９３１に書込む（ステップＳ９０５）と同時に、パリティ生成部８１２が以下の処理を実行する。すなわち、パリティ生成部８１２は、パリティ計算用ＲＡＭ８１３からパリティデータを読み出して３番目のストライプとの排他的論理和からパリティデータを算出し、パリティ計算用ＲＡＭ８１３に書込む。続いて、ＮＡＮＤフラッシュ９３０では、バッファ９３１に書込まれたストライプがアレイ９３２に書込まれる（ステップＳ９０６）。
【００１０】
３つのストライプを各ＮＡＮＤフラッシュのアレイに書込み終了後、書込部８１１は、パリティ計算用ＲＡＭ８１３からパリティデータを読み出して、パリティデータをＮＡＮＤフラッシュ９４０のバッファ９４１に書込む（ステップＳ９０７）。そして、ＮＡＮＤフラッシュ９４０では、バッファ９４１に書込まれたパリティデータがアレイ９４２に書込まれる（ステップＳ９０８）。
【００１１】
このようにして、ストレージ装置では、停電時に、キャッシュメモリ内のデータをＮＡＮＤ型フラッシュに退避させてバックアップする。また、このような停電処理を実施している途中に復電した場合には、無駄な停電処理や復電処理を省くことに関する技術も知られている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】国際公開第２００９／０９８７７６号
【特許文献２】特開２００５−１８２９８３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかしながら、上述した従来の技術では、パリティデータを書き込むことによりライト性能が低下するという課題がある。
【００１４】
図９に示す例では、ＮＡＮＤフラッシュ制御装置８００は、３番目のストライプをＮＡＮＤフラッシュ９３０のアレイ９３２に書込んだ後に、パリティデータをＮＡＮＤフラッシュ９４０に書込むことになる。このため、パリティデータの書込みに要する時間分、ユーザデータの書込み終了時間が遅延する。
【００１５】
１つの側面では、パリティデータを書き込んでもライト性能が低下することを抑制することができるストレージ装置及びストレージ装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１６】
第１の案では、ストレージ装置は、パリティデータを記憶する第１のメモリ及び第２のメモリからパリティデータを読出す。そして、ストレージ装置は、読出したパリティデータと、部分データとからパリティデータを生成する。また、ストレージ装置は、第１メモリ群に含まれ、データを分割して得られる複数の部分データをそれぞれ記憶する複数のメモリに部分データを書込むとともに、以下の処理を実行する。すなわち、ストレージ装置は、第１のメモリからパリティデータを読出した場合には、第２のメモリに、第２のメモリからパリティデータを読出した場合には、第１のメモリに、生成されたパリティデータを書込む。
【発明の効果】
【００１７】
パリティデータを書き込んでもライト性能が低下することを抑制することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施例１に係るストレージ装置の構成を示すブロック図である。
【図２】図２は、実施例１に係るライト用ＤＭＡの構成を示すブロック図である。
【図３】図３は、実施例１に係るライト用ＤＭＡによるデータの書込み動作を示すシーケンス図である。
【図４】図４は、実施例１に係るライト用ＤＭＡによるデータの書込み処理の処理手順を示すフローチャートである。
【図５】図５は、実施例２に係るライト用ＤＭＡの構成を示すブロック図である。
【図６】図６は、実施例２に係るライト用ＤＭＡによるデータの書込み動作を示すシーケンス図である。
【図７】図７は、実施例２に係るライト用ＤＭＡによるデータの書込み処理の処理手順を示すフローチャートである。
【図８】図８は、従来技術に係るＮＡＮＤフラッシュ制御装置の一例を示す図である。
【図９】図９は、ＮＡＮＤフラッシュ制御装置によるデータの書込み動作を示すシーケンス図である。
【発明を実施するための形態】
【００１９】
以下に、本願の開示するストレージ装置及びストレージ装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００２０】
［実施例１に係るストレージ装置の構成］
図１は、実施例１に係るストレージ装置の構成を示すブロック図である。図１に示すように、ストレージ装置１は、電源供給ユニット２、ＨＤＤ（Hard  Disk  Drive）３ａ〜３ｃ、ＣＭ（Controller  Module）１０を有する。
【００２１】
電源供給ユニット２は、通常時、ＣＭ１０に電力を供給する。ＨＤＤ３ａ〜３ｃは、ＲＡＩＤ（Redundant  Arrays  of  Independent（Inexpensive）Disks）を構成し、ユーザデータやプログラムを記憶する。なお、ここでいう、通常時とは、ストレージ装置１に電源が投入された後、停電が発生せずに運転している状態を指す。
【００２２】
ＣＭ１０は、ストレージ装置１と接続する図示しないサーバなどの情報処理装置によるＨＤＤ３ａ〜３ｃへのデータの入出力を制御する。例えば、ＣＭ１０は、キャッシュメモリ１１と、ＲｏＣ（RAID-on-Chip）１２と、Ｅｘｐ（Expander）１３と、停電時給電ユニット１４と、ＮＡＮＤフラッシュ２０と、ＦＰＧＡ（Field  Programmable  Gate  Array）１００とを有する。
【００２３】
キャッシュメモリ１１は、例えば、ＤＩＭＭ（Dual  Inline  Memory  Module）やＤＤＲ  ＳＤＲＡＭ（Double  Date  Rate  Synchronous  DRAM）などの揮発性メモリであり、ＨＤＤ３ａ〜３ｃに書き込むユーザデータを一時的に記憶する。
【００２４】
ＲｏＣ（ＲＡＩＤ−ｏｎ―Ｃｈｉｐ）１２は、ＣＰＵ（Central  Processing  Unit）とメモリコントローラとを有し、ＣＭ１０を全体制御する。例えば、ＲｏＣ１２は、キャッシュメモリ１１のバックアップ処理や、図示しないサーバなどの情報処理装置とのインターフェース制御や、キャッシュメモリ１１の管理を実行する。
【００２５】
Ｅｘｐ１３は、ＲｏＣ１２とＨＤＤ３ａ〜３ｃとの間で送受信されるユーザデータを中継する。停電時給電ユニット１４は、停電発生時にＲｏＣ１２、キャッシュメモリ１１、
ＦＰＧＡ１００、ＮＡＮＤフラッシュ２０へ電力を供給する。
【００２６】
ＮＡＮＤフラッシュ２０は、不揮発性の半導体記憶装置であり、ストレージ装置１に停電が発生した場合、キャッシュメモリ１１が記憶するデータを退避させるためのバックアップ用の記憶装置として機能する。なお、ＮＡＮＤフラッシュ２０には、ユーザデータを分割して得られる複数のストライプをそれぞれ記憶する複数のストライプ用ＮＡＮＤフラッシュと、パリティデータを記憶する２つのパリティ用ＮＡＮＤフラッシュとが含まれる。
【００２７】
ＦＰＧＡ１００は、ＣＰＵを介さずにキャッシュメモリ１１とＮＡＮＤフラッシュ２０とのデータ転送を制御するライト用ＤＭＡ（Direct  Memory  Access）やリード用ＤＭＡを有する。なお、図１に示す例では、ＦＰＧＡ１００が有するＤＭＡのうち、ライト用ＤＭＡ２００のみを図示している。また、ライト用ＤＭＡ２００の詳細な構成については後述する。
【００２８】
このようなストレージ装置１において、ＦＰＧＡ１００は、停電時において、キャッシュメモリ１１からＮＡＮＤフラッシュ２０へデータを退避させる。例えば、ＦＰＧＡ１００では、ライト用ＤＭＡ２００は、キャッシュメモリ１１からユーザデータを読出し、ユーザデータを所定の単位に分割したストライプを生成する。そして、ライト用ＤＭＡ２００は、ストライプを複数のストライプ用ＮＡＮＤフラッシュのいずれかと、２つのパリティ用ＮＡＮＤフラッシュのいずれか一方とに書込む。
【００２９】
また、ライト用ＤＭＡ２００は、パリティ用ＮＡＮＤフラッシュの一方からパリティデータを読出す。そして、ライト用ＤＭＡ２００は、読出したパリティデータと、ストライプとからパリティデータを生成する。続いて、ライト用ＤＭＡ２００は、ストライプをストライプ用ＮＡＮＤフラッシュに書込むとともに、生成されたパリティデータをパリティ用ＮＡＮＤフラッシュの他方に書込む。すなわち、ライト用ＤＭＡ２００は、パリティデータを読出したＮＡＮＤフラッシュとは異なるパリティ用ＮＡＮＤフラッシュに、パリティデータを書込む。この結果、ライト用ＤＭＡ２００は、パリティデータを書き込んでもライト性能を低下させない。
【００３０】
［実施例１に係るライト用ＤＭＡの構成］
図２は、実施例１に係るライト用ＤＭＡの構成を示すブロック図である。図２に示すように、ライト用ＤＭＡ２００は、転送部２１０、書込部２２０、読出部２３０、パリティ生成部２４０を有する。また、ライト用ＤＭＡ２００は、ＮＡＮＤフラッシュ２０ａ〜２０ｅと接続する。ここで、ＮＡＮＤフラッシュ２０ａ〜２０ｃをストライプ用ＮＡＮＤフラッシュとし、ＮＡＮＤフラッシュ２０ｄ、２０ｅをパリティ用ＮＡＮＤフラッシュとして説明する。また、各ＮＡＮＤフラッシュ２０ａ〜２０ｅは、バッファ２１ａ〜２１ｅとアレイ２２ａ〜２２ｅとを有する。
【００３１】
転送部２１０は、キャッシュメモリ１１からユーザデータを所定の単位に分割したストライプとして読出し、書込部２２０とパリティ生成部２４０とにストライプを転送する。また、転送部２１０は、読出したストライプがユーザデータの最後のストライプである場合、転送するストライプが最後のストライプである旨を書込部２２０に通知する。
【００３２】
書込部２２０は、転送部２１０から転送されたユーザデータを指定されたＮＡＮＤフラッシュ２０ａ〜２０ｃの各バッファに書込む。ここで、書込部２２０は、ユーザデータを所定の単位に分割したストライプ毎に各ＮＡＮＤフラッシュへ書込みを実行する。
【００３３】
例えば、書込部２２０は、ユーザデータの１番目のストライプをＮＡＮＤフラッシュ２０ａのバッファ２１ａに書込む。続いて、書込部２２０は、２番目のストライプをＮＡＮＤフラッシュ２０ｂのバッファ２１ｂに書込み、３番目のストライプをＮＡＮＤフラッシュ２０ｃのバッファ２１ｃに書込む。なお、書込部２２０は、４番目以降のストライプについては、１番目のストライプから３番目のストライプのＮＡＮＤフラッシュのバッファへの書込みと同様の処理を繰り返し実行する。
【００３４】
また、書込部２２０は、選択回路２２１を有しており、１番目のストライプを選択回路２２１に入力する。これにより、書込部２２０は、ユーザデータの１番目のストライプをＮＡＮＤフラッシュ２０ａのバッファ２１ａに書込むと同時に、ＮＡＮＤフラッシュ２０ｄのバッファ２１ｄに１番目のストライプを書込む。なお、パリティ用ＮＡＮＤフラッシュに書込まれた１番目のストライプは、パリティデータとして扱うものとして説明する。
【００３５】
また、書込部２２０は、ストライプを指定されたＮＡＮＤフラッシュ２０ａ〜２０ｃの各バッファに書込むと同時に、パリティ生成部２４０により生成されたパリティデータをＮＡＮＤフラッシュ２０ｄ、２０ｅの各バッファに交互に書込む。
【００３６】
例えば、書込部２２０は、２番目のストライプをＮＡＮＤフラッシュ２０ｂのバッファ２１ｂに書込むと同時に、ＮＡＮＤフラッシュ２０ｅのバッファ２１ｅにパリティデータを書込む。そして、書込部２２０は、３番目のストライプをＮＡＮＤフラッシュ２０ｃのバッファ２１ｃに書込むと同時に、ＮＡＮＤフラッシュ２０ｄのバッファ２１ｄにパリティデータを書込む。
【００３７】
また、書込部２２０は、ストライプをストライプ用ＮＡＮＤフラッシュのバッファに書込んだ後、ストライプ用ＮＡＮＤフラッシュのバッファからアレイに書込む。そして、書込部２２０は、最後のストライプをストライプ用ＮＡＮＤフラッシュのバッファからアレイに書込むと同時に、パリティ用ＮＡＮＤフラッシュのバッファからアレイにパリティデータを書込む。
【００３８】
読出部２３０は、選択回路２３１を有し、ＮＡＮＤフラッシュ２０ｄ、２０ｅの各バッファが記憶するパリティデータを交互に読出して、パリティ生成部２４０に出力する。
【００３９】
例えば、読出部２３０は、２番目のストライプがパリティ生成部２４０に入力されるタイミングで、ＮＡＮＤフラッシュ２０ｄから１番目のストライプを読出し、パリティ生成部２４０に出力する。また、読出部２３０は、３番目のストライプがパリティ生成部２４０に入力されるタイミングで、ＮＡＮＤフラッシュ２０ｅからパリティデータを読出し、パリティ生成部２４０に出力する。なお、１番目のストライプがパリティ生成部２４０に入力されるタイミングにおいて、ＮＡＮＤフラッシュ２０ｄ、２０ｅの各バッファには、データが記憶されていないものとする。
【００４０】
パリティ生成部２４０は、ＸＯＲ回路２４１を有し、読出部２３０から出力されたパリティデータと転送部２１０から転送されたストライプとを受付け、パリティデータとストライプとの排他的論理和を算出してパリティデータを生成する。そして、パリティ生成部２４０は、生成したパリティデータを書込部２２０に出力する。
【００４１】
［実施例１に係るライト用ＤＭＡによる処理動作］
次に図３を用いて、実施例１に係るライト用ＤＭＡ２００によるデータの書込み動作を説明する。図３は、実施例１に係るライト用ＤＭＡによるデータの書込み動作を示すシーケンス図である。なお、ここでは、ライト用ＤＭＡ２００が、３つのストライプをＮＡＮＤフラッシュに書込む場合を例に説明する。また、ここでは、３番目のストライプが最後のストライプである。
【００４２】
図３に示すように、ライト用ＤＭＡ２００は、１番目のストライプをＮＡＮＤフラッシュ２０ａが有するバッファ２１ａに書込む（ステップＳ１０１）。このステップＳ１０１の処理と同時に、ライト用ＤＭＡ２００は、１番目のストライプをＮＡＮＤフラッシュ２０ｄが有するバッファ２１ｄに書込む（ステップＳ１０２）。続いて、ＮＡＮＤフラッシュ２０ａでは、バッファ２１ａに書込まれたストライプがアレイ２２ａに書込まれる（ステップＳ１０３）。
【００４３】
また、ライト用ＤＭＡ２００は、２番目のストライプをＮＡＮＤフラッシュ２０ｂが有するバッファ２１ｂに書込む（ステップＳ１０４）。このステップＳ１０４の処理と同時に、ライト用ＤＭＡ２００は、バッファ２１ｄから１番目のストライプを読み出して２番目のストライプとの排他的論理和からパリティデータ算出し、バッファ２１ｅに書込む（ステップＳ１０５）。続いて、ＮＡＮＤフラッシュ２０ｂでは、バッファ２１ｂに書込まれたストライプがアレイ２２ｂに書込まれる（ステップＳ１０６）。
【００４４】
そして、ライト用ＤＭＡ２００は、３番目のストライプをＮＡＮＤフラッシュ２０ｃが有するバッファ２１ｃに書込む（ステップＳ１０７）。このステップＳ１０７の処理と同時に、ライト用ＤＭＡ２００は、バッファ２１ｅからパリティデータを読み出して３番目のストライプとの排他的論理和からパリティデータ算出し、バッファ２１ｄに書込む（ステップＳ１０８）。続いて、ＮＡＮＤフラッシュ２０ｃでは、バッファ２１ｃに書込まれたストライプがアレイ２２ｃに書込まれると同時に、ＮＡＮＤフラッシュ２０ｄでは、バッファ２１ｄに書込まれたストライプがアレイ２２ｄに書込まれる（ステップＳ１０９）。
【００４５】
［実施例１に係るライト用ＤＭＡによる処理の処理手順］
次に図４を用いて、実施例１に係るライト用ＤＭＡによる処理の処理手順を説明する。図４は、実施例１に係るライト用ＤＭＡによるデータの書込み処理の処理手順を示すフローチャートである。なお、ここでは、ライト用ＤＭＡ２００が、３つのストライプをＮＡＮＤフラッシュに書込む場合を例に説明する。また、ここでは、３番目のストライプが最後のストライプである。
【００４６】
図４に示すように、書込部２２０は、１番目のストライプをＮＡＮＤフラッシュ２０ａが有するバッファ２１ａに書込む（ステップＳ２０１）。このステップＳ２０１の処理と同時に、書込部２２０は、１番目のストライプをＮＡＮＤフラッシュ２０ｄが有するバッファ２１ｄに書込む（ステップＳ２０２）。続いて、ＮＡＮＤフラッシュ２０ａでは、バッファ２１ａに書込まれたストライプがアレイ２２ａに書込まれる（ステップＳ２０３）。
【００４７】
また、書込部２２０は、２番目のストライプをＮＡＮＤフラッシュ２０ｂが有するバッファ２１ｂに書込む（ステップＳ２０４）。また、読出部２３０は、バッファ２１ｄから１番目のストライプを読み出す（ステップＳ２０５）。そして、パリティ生成部２４０は、読出部２３０により読み出されたストライプと、２番目のストライプとの排他的論理和からパリティデータ算出する（ステップＳ２０６）。また、書込部２２０は、パリティデータをバッファ２１ｅに書込む（ステップＳ２０７）。このステップＳ２０５からステップＳ２０７の処理は、ステップＳ２０４の処理と同時に実行される。続いて、ＮＡＮＤフラッシュ２０ｂでは、バッファ２１ｂに書込まれたストライプがアレイ２２ｂに書込まれる（ステップＳ２０８）。
【００４８】
そして、書込部２２０は、３番目のストライプをＮＡＮＤフラッシュ２０ｃが有するバッファ２１ｃに書込む（ステップＳ２０９）。また、読出部２３０は、バッファ２１ｅからパリティデータを読み出す（ステップＳ２１０）。そして、パリティ生成部２４０は、読出部２３０により読み出されたパリティデータと、３番目のストライプとの排他的論理和からパリティデータ算出する（ステップＳ２１１）。また、書込部２２０は、パリティデータをバッファ２１ｄに書込む（ステップＳ２１２）。このステップＳ２１０からステップＳ２１２の処理は、ステップＳ２０９の処理と同時に実行される。
【００４９】
続いて、ＮＡＮＤフラッシュ２０ｃでは、バッファ２１ｃに書込まれたストライプがアレイ２２ｃに書込まれる（ステップＳ２１３）。また、このステップＳ２１３の処理と同時に、ＮＡＮＤフラッシュ２０ｄでは、バッファ２１ｄに書込まれたストライプがアレイ２２ｄに書込まれる（ステップＳ２１４）。
【００５０】
［実施例１に係るストレージ装置による効果］
実施例１に係るストレージ装置１は、パリティ用ＮＡＮＤフラッシュを２つ有し、このパリティ用ＮＡＮＤフラッシュのバッファに交互にパリティデータを書込む。これにより、実施例１に係るストレージ装置１は、最後のストライプをＮＡＮＤフラッシュのアレイへ書込むタイミングと同時にパリティデータをＮＡＮＤフラッシュのアレイへ書込む。この結果、実施例１に係るストレージ装置１では、パリティデータを書き込んでもライト性能を低下させない。
【００５１】
また、従来の技術では、パリティデータの計算にライト用ＤＭＡ内のＲＡＭを使用する。このＲＡＭは、書込み単位分のパリティデータの途中計算値を保持することになる。このため、書込み単位が増加すると、ライト用ＤＭＡ内のＲＡＭのサイズも増加することになり、リソースを圧迫していた。また、ＮＡＮＤフラッシュの書込み単位が変更された場合、ライト用ＤＭＡを修正することになる。
【００５２】
一方、実施例１に係るストレージ装置１は、２つのＮＡＮＤフラッシュを交互に使用し、パリティデータを計算する。これにより、実施例１に係るストレージ装置１は、ライト用ＤＭＡ内にパリティ計算用ＲＡＭを設けなくてもよい。この結果、実施例１に係るストレージ装置１は、ＮＡＮＤフラッシュの書込み単位が変更されても、ライト用ＤＭＡの修正を必要としない。
【実施例２】
【００５３】
実施例１に係るストレージ装置１は、パリティ用ＮＡＮＤフラッシュを２つ有し、このパリティ用ＮＡＮＤフラッシュのバッファにパリティデータを交互に書込む。そして、最後のストライプをＮＡＮＤフラッシュのアレイへ書込むタイミングと同時にパリティデータを一方のＮＡＮＤフラッシュのアレイへ書込む。このような場合、一方のＮＡＮＤフラッシュのアレイには、パリティデータが記憶されるが、他方のＮＡＮＤフラッシュのアレイには、パリティデータが記憶されない。このため、実施例１に係るストレージ装置１は、パリティ用ＮＡＮＤフラッシュのアレイを有効に活用できていない。このため、パリティ用ＮＡＮＤフラッシュを有効に活用してもよいものである。
【００５４】
そこで、実施例２では、グループ１とグループ２とからなる２つのユーザデータを連続してストライプ用ＮＡＮＤフラッシュに書込む際に、２つのパリティ用ＮＡＮＤフラッシュのアレイにパリティデータを交互に書込む場合を例に説明する。また、ここでは、グループ１のユーザデータには偶数個のストライプが含まれ、グループ２のユーザデータには、奇数個のストライプが含まれるものとする。
【００５５】
［実施例２に係るストレージ装置の構成］
次に、実施例２に係るストレージ装置の構成を説明する。実施例２に係るストレージ装置の構成は、図１に示すストレージ装置のライト用ＤＭＡが有する機能が異なる点を除いて、実施例１に係るストレージ装置の構成と同様である。このため、以下では、実施例１とは異なるライト用ＤＭＡについてのみ説明する。なお、実施例２に係るストレージ装置では、ＮＡＮＤフラッシュの数が変更されるが、この点についても併せて説明する。
【００５６】
［実施例２に係るライト用ＤＭＡの構成］
次に、図５を用いて、実施例２に係るライト用ＤＭＡの構成を説明する。図５は、実施例２に係るライト用ＤＭＡの構成を示すブロック図である。図５に示すように、実施例２に係るライト用ＤＭＡは、転送部３１０、書込部３２０、読出部３３０、パリティ生成部３４０を有する。
【００５７】
また、ライト用ＤＭＡ３００は、ＮＡＮＤフラッシュ３０ａ〜３０ｇと接続する。ここで、ＮＡＮＤフラッシュ３０ａ〜３０ｅをストライプ用ＮＡＮＤフラッシュとし、ＮＡＮＤフラッシュ３０ｆ、３０ｇをパリティ用ＮＡＮＤフラッシュとして説明する。また、各ＮＡＮＤフラッシュ３０ａ〜３０ｇは、バッファとアレイとを有する。
【００５８】
また、実施例２では、ＮＡＮＤフラッシュ３０ａ、３０ｂをグループ１用のＮＡＮＤフラッシュとして用いるものとし、ＮＡＮＤフラッシュ３０ｃ〜３０ｅをグループ２用のＮＡＮＤフラッシュとして用いるものとする。また、グループ１のユーザデータの書込みに続いて、グループ２のユーザデータを書込むものとするが、この書込み順序に限定されるものではない。例えば、グループ２のユーザデータの書込みに続いて、グループ１のユーザデータを書込んでもよい。
【００５９】
転送部３１０は、キャッシュメモリ１１からユーザデータを所定の単位に分割したストライプとして読出し、書込部３２０とパリティ生成部３４０とにストライプを転送する。ここで、転送部３１０は、例えば、ユーザデータを偶数個のストライプが含まれるグループ１のユーザデータと、奇数個のストライプが含まれるグループ２のユーザデータとに分割して転送するものとする。
【００６０】
また、転送部３１０は、読出したストライプがグループ１のユーザデータである場合、転送するストライプがグループ１のストライプである旨を書込部３２０に通知する。また、転送部３１０は、読出したストライプがグループ２のユーザデータである場合、転送するストライプがグループ２のストライプである旨を書込部３２０に通知する。また、転送部３１０は、読出したストライプが各グループの最後のストライプである場合、転送するストライプが最後のストライプである旨を書込部３２０に通知する。
【００６１】
書込部３２０は、転送部３１０から転送されたユーザデータを指定されたＮＡＮＤフラッシュ３０ａ〜３０ｅの各バッファに書込む。例えば、書込部３２０は、グループ１のストライプをＮＡＮＤフラッシュ３０ａ、３０ｂに書き込み、グループ２のストライプをＮＡＮＤフラッシュ３０ｃ〜３０ｅに書き込む。
【００６２】
一例を示すと、書込部３２０は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ａに書込む。続いて、書込部３２０は、グループ１の２番目のストライプをＮＡＮＤフラッシュ３０ｂに書込む。なお、書込部３２０は、グループ１の３番目以降のストライプについては、グループ１の１番目のストライプからグループ１の２番目のストライプのＮＡＮＤフラッシュへの書込みと同様の処理を繰り返し実行する。
【００６３】
また、書込部３２０は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｃに書込む。そして、書込部３２０は、グループ２の２番目のストライプをＮＡＮＤフラッシュ３０ｄに書込む。続いて、書込部３２０は、グループ２の３番目のストライプをＮＡＮＤフラッシュ３０ｅに書込む。なお、書込部３２０は、グループ２の４番目以降のストライプについては、グループ２の１番目のストライプからグループ２の３番目のストライプのＮＡＮＤフラッシュへの書込みと同様の処理を繰り返し実行する。
【００６４】
例えば、書込部３２０は、選択回路３２１、３２２を有しており、グループ１の１番目のストライプを選択回路３２１に入力する。これにより、書込部３２０は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ａに書込むと同時に、ＮＡＮＤフラッシュ３０ｆにグループ１の１番目のストライプを書込む。
【００６５】
また、書込部３２０は、ユーザデータを指定されたＮＡＮＤフラッシュ３０ａ〜３０ｂ、または３０ｃ〜３０ｅの各バッファに書込むと同時に、パリティ生成部３４０により生成されたパリティデータをＮＡＮＤフラッシュ３０ｆ、３０ｇの各バッファに交互に書込む。
【００６６】
また、書込部３２０は、パリティ生成部３４０により出力されたパリティデータを選択回路３２１と３２２とに交互に入力する。これにより、書込部３２０は、グループ１の２番目のストライプをＮＡＮＤフラッシュ３０ｂに書込むと同時に、ＮＡＮＤフラッシュ３０ｇにパリティデータを書込む。
【００６７】
続いて、書込部３２０は、グループ２の１番目のストライプを選択回路３２２に入力する。これにより、書込部３２０は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｃに書込むと同時に、ＮＡＮＤフラッシュ３０ｇにグループ１の１番目のストライプを書込む。
【００６８】
また、書込部３２０は、パリティ生成部３４０により出力されたパリティデータを選択回路３２１と３２２とに交互に入力する。これにより、書込部３２０は、グループ２の２番目のストライプをＮＡＮＤフラッシュ３０ｄに書込むと同時に、ＮＡＮＤフラッシュ３０ｆにパリティデータを書込む。そして、書込部３２０は、グループ２の３番目のストライプをＮＡＮＤフラッシュ３０ｅに書込むと同時に、ＮＡＮＤフラッシュ３０ｇにパリティデータを書込む。
【００６９】
また、書込部３２０は、ストライプをストライプ用ＮＡＮＤフラッシュのバッファに書込んだ後、ストライプ用ＮＡＮＤフラッシュのバッファからアレイに書込む。そして、書込部３２０は、各グループの最後のストライプをストライプ用ＮＡＮＤフラッシュのバッファからアレイに書込むと同時に、パリティ用ＮＡＮＤフラッシュのバッファからアレイにパリティデータを書込む。
【００７０】
読出部３３０の機能は、実施例１に係る読出部２３０の機能と同様である。また、パリティ生成部３４０の機能は、実施例１に係るパリティ生成部２４０の機能と同様である。
【００７１】
［実施例２に係るライト用ＤＭＡによる処理動作］
次に図６を用いて、実施例２に係るライト用ＤＭＡによるデータの書込み動作を説明する。図６は、実施例２に係るライト用ＤＭＡによるデータの書込み動作を示すシーケンス図である。なお、ここでは、ライト用ＤＭＡ３００が、２つのストライプを含むグループ１と３つのストライプを含むグループ２の順でＮＡＮＤフラッシュに書込む場合を例に説明する。また、ここでは、グループ１の２番目のストライプとグループ２の３番目のストライプとが最後のストライプである。
【００７２】
図６に示すように、ライト用ＤＭＡ３００は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ａが有するバッファ３１ａに書込む（ステップＳ３０１）。このステップＳ３０１の処理と同時に、ライト用ＤＭＡ３００は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ｆが有するバッファ３１ｆに書込む（ステップＳ３０２）。続いて、ＮＡＮＤフラッシュ３０ａでは、バッファ３１ａに書込まれたストライプがアレイ３２ａに書込まれる（ステップＳ３０３）。
【００７３】
また、ライト用ＤＭＡ３００は、グループ１の２番目のストライプをＮＡＮＤフラッシュ３０ｂが有するバッファ３１ｂに書込む（ステップＳ３０４）。このステップＳ１０４の処理と同時に、ライト用ＤＭＡ３００は、バッファ３１ｆからグループ１の１番目のストライプを読み出してグループ１の２番目のストライプとの排他的論理和からパリティデータ算出し、バッファ３１ｇに書込む（ステップＳ３０５）。
【００７４】
続いて、ＮＡＮＤフラッシュ３０ｂでは、バッファ３１ｂに書込まれたストライプがアレイ３２ｂに書込まれる（ステップＳ３０６）。このステップＳ３０６の処理と同時に、ＮＡＮＤフラッシュ３０ｇでは、バッファ３１ｇに書込まれたストライプがアレイ３２ｇに書込まれる（ステップＳ３０７）。
【００７５】
そして、ライト用ＤＭＡ３００は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｃが有するバッファ３１ｃに書込む（ステップＳ３０８）。このステップＳ３０８の処理と同時に、ライト用ＤＭＡ３００は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｆが有するバッファ３１ｆに書込む（ステップＳ３０９）。続いて、ＮＡＮＤフラッシュ３０ｃでは、バッファ３１ｃに書込まれたストライプがアレイ３２ｃに書込まれる（ステップＳ３１０）。
【００７６】
また、ライト用ＤＭＡ３００は、グループ２の２番目のストライプをＮＡＮＤフラッシュ３０ｄが有するバッファ３１ｄに書込む（ステップＳ３１１）。このステップＳ３１１の処理と同時に、ライト用ＤＭＡ３００は、バッファ３１ｆからグループ２の１番目のストライプを読み出してグループ２の２番目のストライプとの排他的論理和からパリティデータ算出し、バッファ３１ｇに書込む（ステップＳ３１２）。続いて、ＮＡＮＤフラッシュ３０ｄでは、バッファ３１ｄに書込まれたストライプがアレイ３２ｄに書込まれる（ステップＳ３１３）。
【００７７】
そして、ライト用ＤＭＡ３００は、グループ２の３番目のストライプをＮＡＮＤフラッシュ３０ｅが有するバッファ３１ｅに書込む（ステップＳ３１４）。このステップＳ３１４の処理と同時に、ライト用ＤＭＡ３００は、バッファ３１ｇからパリティデータを読み出してグループ２の３番目のストライプとの排他的論理和からパリティデータ算出し、バッファ３１ｆに書込む（ステップＳ３１５）。続いて、ＮＡＮＤフラッシュ３０ｅでは、バッファ３１ｅに書込まれたストライプがアレイ３２ｅに書込まれる（ステップＳ３１６）。このステップＳ３１６の処理と同時に、ＮＡＮＤフラッシュ３０ｆでは、バッファ３１ｆに書込まれたストライプがアレイ３２ｆに書込まれる（ステップＳ３１７）。
【００７８】
［実施例２に係るライト用ＤＭＡによる処理の処理手順］
次に図７を用いて、実施例２に係るライト用ＤＭＡによる処理の処理手順を説明する。図７は、実施例２に係るライト用ＤＭＡによるデータの書込み処理の処理手順を示すフローチャートである。なお、ここでは、ライト用ＤＭＡ３００が、２つのストライプを含むグループ１と３つのストライプを含むグループ２の順でＮＡＮＤフラッシュに書込む場合を例に説明する。また、ここでは、グループ１の２番目のストライプとグループ２の３番目のストライプとが最後のストライプである。
【００７９】
図７に示すように、書込部３２０は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ａが有するバッファ３１ａに書込む（ステップＳ４０１）。このステップＳ４０１の処理と同時に、書込部３２０は、グループ１の１番目のストライプをＮＡＮＤフラッシュ３０ｆが有するバッファ３１ｆに書込む（ステップＳ４０２）。続いて、ＮＡＮＤフラッシュ３０ａでは、バッファ３１ａに書込まれたストライプがアレイ３２ａに書込まれる（ステップＳ４０３）。
【００８０】
そして、書込部３２０は、グループ１の２番目のストライプをＮＡＮＤフラッシュ３０ｂが有するバッファ３１ｂに書込む（ステップＳ４０４）。また、読出部３３０は、バッファ３１ｆからグループ１の１番目のストライプを読み出す（ステップＳ４０５）。そして、パリティ生成部３４０は、読出部３３０により読み出されたグループ１の１番目のストライプと、グループ１の２番目のストライプとの排他的論理和からパリティデータを算出する（ステップＳ４０６）。また、書込部３２０は、パリティデータをバッファ３１ｇに書込む（ステップＳ４０７）。このステップＳ４０５からステップＳ４０７の処理は、ステップＳ４０４の処理と同時に実行される。
【００８１】
続いて、ＮＡＮＤフラッシュ３０ｂでは、バッファ３１ｂに書込まれたストライプがアレイ３２ｂに書込まれる（ステップＳ４０８）。また、このステップＳ４０８の処理と同時に、ＮＡＮＤフラッシュ３０ｇでは、バッファ３１ｇに書込まれたストライプがアレイ３２ｇに書込まれる（ステップＳ４０９）。
【００８２】
そして、書込部３２０は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｃが有するバッファ３１ｃに書込む（ステップＳ４１０）。このステップＳ４１０の処理と同時に、書込部３２０は、グループ２の１番目のストライプをＮＡＮＤフラッシュ３０ｆが有するバッファ３１ｆに書込む（ステップＳ４１１）。続いて、ＮＡＮＤフラッシュ３０ｃでは、バッファ３１ｃに書込まれたストライプがアレイ３２ｃに書込まれる（ステップＳ４１２）。
【００８３】
また、書込部３２０は、グループ２の２番目のストライプをＮＡＮＤフラッシュ３０ｄが有するバッファ３１ｄに書込む（ステップＳ４１３）。また、読出部３３０は、バッファ３１ｆからグループ２の１番目のストライプを読み出す（ステップＳ４１４）。そして、パリティ生成部３４０は、読出部３３０により読み出されたグループ２の１番目のストライプと、グループ２の２番目のストライプとの排他的論理和からパリティデータ算出する（ステップＳ４１５）。また、書込部３２０は、パリティデータをバッファ３１ｇに書込む（ステップＳ４１６）。このステップＳ４１４からステップＳ４１６の処理は、ステップＳ４１３の処理と同時に実行される。続いて、ＮＡＮＤフラッシュ３０ｄでは、バッファ３１ｄに書込まれたストライプがアレイ３２ｄに書込まれる（ステップＳ４１７）。
【００８４】
そして、書込部３２０は、グループ２の３番目のストライプをＮＡＮＤフラッシュ３０ｅが有するバッファ３１ｅに書込む（ステップＳ４１８）。また、読出部３３０は、バッファ３１ｇからパリティデータを読み出す（ステップＳ４１９）。そして、パリティ生成部３４０は、読出部３３０により読み出されたパリティデータと、グループ２の３番目のストライプとの排他的論理和からパリティデータ算出する（ステップＳ４２０）。また、書込部３２０は、パリティデータをバッファ３１ｆに書込む（ステップＳ４２１）。このステップＳ４１９からステップＳ４２１の処理は、ステップＳ４１８の処理と同時に実行される。
【００８５】
続いて、ＮＡＮＤフラッシュ３０ｅでは、バッファ３１ｅに書込まれたストライプがアレイ３２ｅに書込まれる（ステップＳ４２２）。また、このステップＳ４２２の処理と同時に、ＮＡＮＤフラッシュ３０ｆでは、バッファ３１ｆに書込まれたストライプがアレイ３２ｆに書込まれる（ステップＳ４２３）。
【００８６】
［実施例２の効果］
上述してきたように、実施例２に係るストレージ装置では、パリティデータを書き込んでもライト性能を低下させない。さらに、実施例２に係るストレージ装置では、パリティ用ＮＡＮＤフラッシュのアレイを有効に活用することができる。この結果、例えば、ユーザデータに対してパリティデータを２つ生成できるので、ユーザデータにエラーが生じた場合の復元の精度を向上することができる。
【００８７】
（システム構成等）
本実施例において説明した各処理のうち自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上記文章中や図面中で示した処理手順、制御手順、具体的名称については、特記する場合を除いて任意に変更することができる。
【００８８】
また、実施例１及び２では、ストレージ装置が、停電時においてキャッシュメモリ１１からＮＡＮＤフラッシュへデータを退避する場合を例に説明したが、これに限定されるものではない。例えば、ストレージ装置は、通常時のデータの記憶用としてＮＡＮＤフラッシュを用いてもよい。そして、この場合にも、ストレージ装置は、パリティデータを書き込んでもライト性能を低下させない。
【００８９】
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更してもよい。例えば、図７に示すステップＳ４０１からステップＳ４０９までの処理とステップＳ４１０からステップＳ４２３までの処理の順番を入れ替えても良い。
【００９０】
また、実施例１及び実施例２では、不揮発性のメモリとしてＮＡＮＤフラッシュを例に説明したが、これに限定されるものではない。例えば、不揮発性のメモリとしてＨＤＤやＲＯＭ（Read  Only  Memory）などであってもよい。
【００９１】
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、実施例１におけるライト用ＤＭＡ２００では、読出部２３０とパリティ生成部２４０とが統合されてもよい。
【符号の説明】
【００９２】
１  ストレージ装置
２  電源供給ユニット
３ａ〜３ｃ  ＨＤＤ
１０  ＣＭ
１１  キャッシュメモリ
１２  ＲｏＣ
１３  Ｅｘｐ
１４  停電時給電ユニット
２０、２０ａ〜２０ｅ、３０ａ〜３０ｇ  ＮＡＮＤフラッシュ
１００  ＦＰＧＡ
２００、３００  ライト用ＤＭＡ
２１０、３１０  転送部
２２０、３２０  書込部
２２１、２３１、３２１、３２２、３３１  選択回路
２３０、３３０  読出部
２４０、３４０  パリティ生成部
２４１、３４１  ＸＯＲ回路
【図１】
2013131192.tif 000003
【図２】
2013131192.tif 000004
【図３】
2013131192.tif 000005
【図４】
2013131192.tif 000006
【図５】
2013131192.tif 000007
【図６】
2013131192.tif 000008
【図７】
2013131192.tif 000009
【図８】
2013131192.tif 000010
【図９】
2013131192.tif 000011