(57)【特許請求の範囲】
【請求項１】
１つのストライプのデータを分割した分割データまたはパリティを格納するストリップを有する複数のディスク装置と、
前記複数のディスク装置の各ストリップに対して前記１つのストライプのデータを前記ストリップのサイズに分割して書き込みを行う制御装置と、
前記ストリップに格納された分割データに対応する更新データを格納する記憶部と、
を備え、
前記制御装置は、前記更新データが離散しているか否か判定し、前記更新データが離散している場合に、
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出し、前記記憶部に記憶し、
前記記憶部に記憶された前記読み出しデータ、前記パリティ、および前記更新データを用いて新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第１の書き込み処理
または
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出し、前記記憶部に記憶し、
前記記憶部に記憶された前記更新データおよび前記読み出しデータを用いて前記新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて前記書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第２の書き込み処理
を行うことを特徴とするディスクアレイ装置において、
前記制御装置は、データを更新するディスク装置の数と前記複数のディスク装置の数と前記ディスクアレイ装置で使用されているRedundant Arrays of Inexpensive Disks（ＲＡＩＤ）の種類とに基づいて、前記第１の書き込み処理または前記第２の書き込み処理のいずれかを行うか判定し、判定結果に基づき前記第１の書き込み処理または前記第２の書き込み処理のいずれか一方を行うことを特徴とするディスクアレイ装置。
【請求項２】
前記制御装置は、ストリップ全体が更新対象であるストリップ数、データを更新するディスク装置の数、および前記複数のディスク装置の数に基づいて、前記第１の書き込み処理または前記第２の書き込み処理を行うか判定し、判定結果に基づき前記第１の書き込み処理または前記第２の書き込み処理のいずれか一方を行うことを特徴とする請求項１記載のディスクアレイ装置。
【請求項３】
１つのストライプのデータを分割した分割データまたはパリティを格納するストリップを有する複数のディスク装置の各ストリップに対して前記１つのストライプのデータを前記ストリップのサイズに分割して書き込みを行うディスクアレイ装置の制御装置であって、
前記ストリップに格納された分割データに対応する更新データが離散しているか否か判定し、前記更新データが離散している場合に、
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出し、記憶部に記憶し、
前記記憶部に記憶された前記読み出しデータ、前記パリティ、および前記更新データを用いて新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第１の書き込み処理
または
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出し、前記記憶部に記憶し、
前記記憶部に記憶された前記更新データおよび前記読み出しデータを用いて前記新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて前記書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第２の書き込み処理
を行い、
データを更新するディスク装置の数と前記複数のディスク装置の数と前記ディスクアレイ装置で使用されているRedundant Arrays of Inexpensive Disks（ＲＡＩＤ）の種類とに基づいて、前記第１の書き込み処理または前記第２の書き込み処理のいずれかを行うか判定し、判定結果に基づき前記第１の書き込み処理または前記第２の書き込み処理のいずれか一方を行うことを特徴とする制御装置。
【請求項４】
１つのストライプのデータを分割した分割データまたはパリティを格納するストリップを有する複数のディスク装置を備えるディスクアレイ装置に、
前記ストリップに格納された分割データに対応する更新データが離散しているか否か判定し、前記更新データが離散している場合に、
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出し、記憶部に記憶し、
前記記憶部に記憶された前記読み出しデータ、前記パリティ、および前記更新データを用いて新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第１の書き込み処理
または
前記複数のディスク装置から、１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出すコマンドを発行し、
前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出し、前記記憶部に記憶し、
前記記憶部に記憶された前記更新データおよび前記読み出しデータを用いて前記新たなパリティを生成し、
前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて前記書き込みデータを生成し、
前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む
第２の書き込み処理
を実行させるプログラムにおいて、
データを更新するディスク装置の数と前記複数のディスク装置の数と前記ディスクアレイ装置で使用されているRedundant Arrays of Inexpensive Disks（ＲＡＩＤ）の種類とに基づいて、前記第１の書き込み処理または前記第２の書き込み処理のいずれかを行うか判定し、判定結果に基づき前記第１の書き込み処理または前記第２の書き込み処理のいずれか一方を行わせることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ディスクアレイ装置、制御装置、およびプログラムに関する。
【背景技術】
【０００２】
コンピュータシステムで取り扱う大量のデータを記憶する手段として、Redundant Arrays of Inexpensive Disks（ＲＡＩＤ）装置が広く使用されている。特に、ＲＡＩＤ５は、コスト効率が高くシンプルな構成でデータの保護を実現できる等の理由から広く利用されている。また、ＲＡＩＤ５より更に信頼性を向上させたＲＡＩＤ６も利用されている。
【０００３】
ＲＡＩＤ５、６では、パリティを使用してデータの冗長性を維持しているため、ライトバック（Ｗｒｉｔｅ Ｂａｃｋ）処理を行なう際にパリティを更新する必要がある。
ここで、ライトバック処理とは、例えば、データの更新時にキャッシュ上のデータをディスクに書き込む処理をいう。
【０００４】
ＲＡＩＤ５、６におけるディスクへの書き込み（Write）方法は、下記の３つの方法がある。
（１）Bandwidth Write
１ストライプ分の更新データ（New Data）がそろっているケースで、更新データのみで新しいパリティ（New Parity）を作成し、ディスクに書き込む方法。
（２）Read Bandwidth Write
１ストライプ分に近いデータを更新する場合に、更新対象ではない更新前のデータをディスクから読み出し、１ストライプ分のデータをそろえてからBandwidth Write 方式で新しいパリティを作成し、ディスクに書き込む方法
（３）Small Write
対象のディスクから更新されるデータと更新前のパリティ（Old Parity）を読み出し、更新されるデータ、更新前のパリティ、および更新データから新しいパリティを作成し、ディスクに書き込む方法。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−８７０９４号公報
【特許文献２】特開平７−３１１６５９号公報
【特許文献３】特開平７−１１０７８８号公報
【特許文献４】特開２００６−１６３４７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の書き込み方法のうち、Read Bandwidth Writeは、更新対象ではない更新前のデータをディスクから読み出し、Small Writeは対象のディスクから更新前のデータを読み出している。これらの方法では、ディスクからデータを読み出す場合に、該データが離散している（不連続である）場合、離散しているデータ単位のコマンド発行が必要になっていた。
【０００７】
更新データが離散している場合、Read Bandwidth Writeのケースで読み出す更新対象ではない更新前のデータは離散している。また、Small Writeのケースで読み出す更新対象となる更新前のデータも離散している。すなわち、更新データが離散していれば、読み出す対象となるデータも当然離散している。
【０００８】
したがって、更新データの離散度が上がれば、ディスク上から読み出す対象となるデータの離散度も上がるという関係がある。
そのため、更新データの離散度が上がれば、発行するコマンド数も増えてしまい、処理に時間が掛かるという問題があった。
【０００９】
本発明の課題は、ライトバック処理において、更新データが離散している場合に処理速度を向上させることである。
【課題を解決するための手段】
【００１０】
実施の形態のディスクアレイ装置は、複数のディスク装置、制御装置、および記憶部を備える。
前記複数のディスク装置は、１つのストライプのデータを分割したデータまたはパリティを格納するストリップを有する。
【００１１】
前記制御装置は、前記複数のディスク装置の各ストリップに対して前記１つのストライプのデータを前記ストリップのサイズに分割して書き込みを行う
前記記憶部は、前記ストリップに格納された分割データに対応する更新データを格納する。
【００１２】
前記制御装置は、前記更新データが離散しているか判定し、前記更新データが離散している場合に、前記複数のディスク装置から、１ストライプ内の前記更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出すコマンドを発行し、前記複数のディスク装置から、前記１ストライプ内の更新データを書き込む領域を含むストリップ全体のデータとパリティを読み出し、前記記憶部に記憶し、前記記憶部に記憶された前記読み出しデータ、前記パリティ、および前記更新データを用いて新たなパリティを生成する。そして、前記制御装置は、前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて書き込みデータを生成し、前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む。
【００１３】
または、前記制御装置は、前記複数のディスク装置から、１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出すコマンドを発行し、前記複数のディスク装置から、前記１ストライプ内の前記更新データを書き込まない領域を含むストリップ全体のデータを読み出し、前記記憶部に格納し、前記記憶部に記憶された前記更新データおよび前記読み出しデータを用いて前記新たなパリティを生成する。そして、前記制御装置は、前記更新データと前記読み出したデータのうち更新しない部分のデータとを組み合わせて前記書き込みデータを生成し、前記書き込みデータおよび前記新たなパリティを前記複数のディスクに書き込む。
【発明の効果】
【００１４】
実施の形態の装置によれば、更新データが離散している場合に処理速度を向上することが出来る。
【図面の簡単な説明】
【００１５】
【図１】ＲＡＩＤ５によるストライピングを示す図である。
【図２】連続データおよび離散データを示す図である。
【図３】実施の形態に係るＲＡＩＤ装置の構成図である。
【図４】Fill Small Writeを説明する図である。
【図５】Fill Read Bandwidth Writeを説明する図である。
【図６】書き込みデータを示す図である。
【図７】Read Bandwidth Write処理時のエラーを示す図である。
【図８】従来のデータ復旧処理を示す図である。
【図９】実施の形態に係るデータ復旧処理を示す図である。
【図１０】実施の形態に係る書き込み方法の選択処理のフローチャートである。
【図１１】ＲＡＩＤ装置のディスク構成と更新データを示す図である。
【図１２】ＲＡＩＤ装置のディスク構成と更新データを示す図である。
【図１３】ＲＡＩＤ装置のディスク構成と更新データを示す図である。
【図１４】条件１を満たす場合のコマンド数を示す図である。
【図１５】条件２を満たす場合のコマンド数を示す図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照しながら実施の形態について説明する。
はじめに、実施の形態で使われるストリップと離散データについて説明する。
図１は、ＲＡＩＤ５によるストライピングを示す図である。
【００１７】
ＲＡＩＤ５は、分割したデータとパリティを複数のディスク装置に格納する。ＲＡＩＤ５では、ＲＡＩＤ４のように特定のディスク装置にのみパリティを配置するのではなく、複数のディスク装置にパリティを順番に分散して配置する。
【００１８】
図１では、Disk00〜Disk03の４台のディスク装置で、ＲＡＩＤ５を実現している。図１では、あるデータを分割して格納する例を示しており、Disk00〜Disk02にデータを分割して格納し、Disk03に分割されたデータに対応するパリティを格納している。
【００１９】
ここでは、分割されたデータと分割されたデータに対応するパリティの組をストライプ（Ｓｔｒｉｐｅ）と呼ぶ。
また、分割されたデータまたはパリティを格納する各ディスクの領域をストリップと呼ぶ。また、ストリップのサイズをストライプデプス（Ｓｔｒｉｐｅ  Ｄｅｐｔｈ）、または単にデプス（Ｄｅｐｔｈ）と呼ぶ。
【００２０】
図２は、連続データおよび離散データを示す図である。
図２は、ストリップ内の更新データの位置を示し、斜線領域は更新データを示している。
【００２１】
図２の左側は連続データを示し、右側は離散データを示す。
連続データは、更新データが連続した１つのデータであるものである。
離散データは、更新データが不連続なデータであるものである。
【００２２】
図３は、実施の形態に係るＲＡＩＤ装置の構成図である。
ＲＡＩＤ装置１０１は、ホスト２０１と接続している。
ＲＡＩＤ装置１０１は、制御モジュール１１１−ｍ（ｍ＝１〜２）およびデバイスエンクロージャー１２１を備える。
【００２３】
尚、制御モジュール１１１−１と制御モジュール１１１−２の構成は同一なため、図３では制御モジュール１１１−１の構成についてのみ詳細に記載されている。ここでは、制御モジュール１１１−１の構成について詳細に説明する。
【００２４】
制御モジュール１１１−１は、処理部１１２、記憶部１１３、ホストI/F１１４−ｍ、ディスクI/F１１５−ｍを備える。
【００２５】
処理部１１２は、各種処理を行うプロセッサである。
処理部は、キャッシュ制御部１２１およびＲＡＩＤ制御部１２２を備える。
キャッシュ制御部１２１は、ＲＡＩＤ制御部１２２に、ライトバック処理の開始指示などを行う。
【００２６】
ＲＡＩＤ制御部１２２は、ディスク装置１３２からのデータの読み出し、ディスク装置１３２へのデータの書き込み、パリティの生成などを行う。
記憶部１１３は、各種データを格納する記憶装置である。記憶部１１３は、例えば、Random Access Memory（ＲＡＭ）である。
【００２７】
記憶部１１３は、キャッシュ領域１２３、データバッファ領域１２４、パリティバッファ領域１２５、キャッシュ管理テーブル１２６を備える。
キャッシュ領域１２３は、ホスト２０１から受信した更新データを一時的に格納する領域である。
【００２８】
データバッファ領域１２４は、各ディスク装置１３２から読み出したデータを一時的に格納する領域である。
パリティバッファ領域１２５は、ディスク装置１３２から読み出したパリティまたは新たに生成したパリティを格納する領域である。
【００２９】
キャッシュ管理テーブル１２６は、キャッシュ領域１２３に格納されている更新データに関する情報が記載されている。詳細には、キャッシュ管理テーブル１２６には、更新データがどのストライプのデータであるか、どのストリップに格納されるデータであるか（すなわち、どのディスク装置１３２に格納されるデータであるか）を示す情報が記載されている。また、キャッシュ管理テーブル１２６には、更新データがストリップ内のどの位置のデータであるかを示す情報が記載されている。したがって、ＲＡＩＤ１２２は、キャッシュ管理テーブル１２６を参照することにより、更新データが連続データであるか離散データであるか判別可能である。
【００３０】
ホストI/F１１４は、ホスト２０１と接続し、ホスト２０１とデータの送受信を行うインタフェースである。
ディスクI/F１１５は、デバイスエンクロージャー１３１と接続し、デバイスエンクロージャー１３１とデータの送受信を行うインタフェースである。
【００３１】
デバイスエンクロージャー１３１は、複数のディスク装置１３２−ｉ（ｉ＝０〜ｊ（ｊは２以上の整数））を格納する装置である。
ディスク装置１３２は、データを格納する磁気ディスク装置（ハードディスクドライブ（ＨＤＤ））である。
【００３２】
以下、実施の形態の２つの書き込み（Write）方法について説明する。
実施の形態の２つの書き込み方法をそれぞれFill Small WriteおよびFill Read Bandwidth Writeと呼ぶ。
【００３３】
実施の形態のＲＡＩＤ制御部１２２は、従来のSmall WriteおよびRead Bandwidth Writeと以下に説明するFill Small WriteおよびFill Read Bandwidth Writeを実行可能であり、後述する選択処理の結果に応じて上記いずれかの書き込み方法を実行する。
【００３４】
以下では、説明を簡単にするために１つのストライプを更新する場合について説明する。
（１）Fill Small Write
Fill Small Writeは、従来のSmall Writeにおけるディスク装置からの更新データにより更新されるデータの読み出しを連続したデータ単位で行っていたのを、ストリップ単位で（すなわち、ストリップ内のデータ全体を）読み出すように変更したものである。
【００３５】
図４は、Fill Small Writeを説明する図である。
図４において、ＲＡＩＤ装置は、RAID5(5+1)の構成、すなわち６台のディスクでＲＡＩＤ５を行っている。
【００３６】
図４においては、Disk00〜Disk05の６台のディスク装置によって構成される。更新データにより更新されるデータを含むストライプは、Disk00〜Disk04にデータが格納され、Disk05にパリティが格納されているものとする。
【００３７】
更新データは、Disk00〜Disk03に対する更新データがあるものとする。更新データは、ある１つのストライプを更新するデータである。また、Disk00〜Disk03の更新データは、図４の斜線部で示すように離散した領域を有する離散データである。更新データは、キャッシュ領域１２３に格納されている。
【００３８】
更新データをFill Small Writeによって書き込む処理について説明する。
ＲＡＩＤ制御部１２２は、更新データにより更新されるストライプ内で、更新データにより更新される領域を含むストリップ全体のデータをDisk00〜Disk03から読み出し、データバッファ領域１２４に格納する。また、ＲＡＩＤ制御部１２２は、パリティをDisk05から読み出し、読み出したパリティ（Old Parity）をパリティバッファ領域１２５に格納する。尚、上記の更新データにより更新される領域を含むストリップ全体のデータとパリティの読み出しに際して、ＲＡＩＤ制御部１２２は、読み出すデータがあるディスク（Disk00〜Disk03、Disk05）に対して、更新データにより更新される領域を含むストリップ全体のデータまたはパリティを読み出すリードコマンドを１個ずつ発行する。すなわち、この場合、５つのリードコマンドが発行されている。尚、ＲＡＩＤ制御部１２２は、尚、ＲＡＩＤ制御部１２２は、どのストライプが更新されるかおよびどのストリップが更新されるか否かを、キャッシュ管理テーブル１２６を参照することにより、判別可能である。
【００３９】
そして、ＲＡＩＤ制御部１２２は、Disk00〜Disk03から読み出したデータのうちの更新されるデータとパリティ（Old Parity）と更新データとを用いて、新たなパリティ（New Parity）を生成する。新たなパリティは、例えば排他的論理和（XOR）演算により生成される。尚、ＲＡＩＤ６の場合は、XOR演算だけでなく係数による重み付けなど異なる計算手法を用いて、複数のパリティを生成する。新たなパリティは、パリティバッファ領域１２５に格納される。
【００４０】
ＲＡＩＤ制御部１２２は、更新データとDisk00〜Disk03から読み出したデータのうちの更新されないデータを組み合わせて、Disk00〜Disk03に書き込む書き込みデータを生成する。これにより、ストリップ単位の書き込みデータが生成される。
【００４１】
ＲＡＩＤ制御部１２２は、書き込みデータをDisk00〜Disk03に、新たなパリティをDisk05に書き込む。
Fill Small Writeにおいて、Disk00〜Disk03、Disk05からストリップ全体のデータを読み出している。データの読み出しにおいて、１つの読み出し処理コマンドで１つのストリップ全体のデータを読み出すため、従来のSmall Writeに比べ、処理コマンドの数が削減される。
【００４２】
また、ストリップ全体の書き込みデータを生成することで、１つの書き込みコマンドで１つのストリップに対して書き込めるため、従来のSmall Writeに比べ、処理コマンドの数が削減される。
【００４３】
（２）Fill Read Bandwidth Write
Fill Read Bandwidth Writeは、従来のRead Bandwidth Writeにおけるディスク装置からの更新対象ではない更新前のデータの読み出しを連続したデータ単位で行っていたのを、ストリップ単位（すなわち、ストリップ内のデータ全体を）で読み出すように変更したものである。
【００４４】
図５において、ＲＡＩＤ装置は、RAID5(5+1)の構成、すなわち６台のディスクでＲＡＩＤ５を行っている。
図５においては、Disk00〜Disk05の６台のディスク装置によって構成される。更新データにより更新されるデータを含むストライプは、Disk00〜Disk04にデータが格納され、Disk05にパリティが格納されているものとする。
【００４５】
更新データは、Disk00〜Disk03に対する更新データがあるものとする。更新データは、ある１つのストライプを更新するデータである。また、Disk00〜Disk03の更新データは、図５の斜線部で示すように離散した領域を有する離散データである。更新データは、キャッシュ領域１２３に格納されている。
【００４６】
更新データをFill Read Bandwidth Writeによって書き込む処理について説明する。
ＲＡＩＤ制御部１２２は、更新データにより更新されるストライプ内で、更新データにより更新されない領域を含むストリップ全体のデータをDisk00〜Disk04から読み出し、データバッファ領域１２４に格納する。尚、上記の更新データにより更新されない領域を含むストリップ全体のデータの読み出しに際して、ＲＡＩＤ制御部１２２は、読み出すデータがあるディスク（Disk00〜Disk04）に対して、更新データにより更新されない領域を含むストリップ全体のデータを読み出すリードコマンドを１個ずつ発行する。すなわち、この場合、５つのリードコマンドが発行されている。尚、ＲＡＩＤ制御部１２２は、どのストライプが更新されるかおよびどのストリップが更新されるか否かを、キャッシュ管理テーブル１２６を参照することにより、判別可能である。
【００４７】
そして、ＲＡＩＤ制御部１２２は、Disk00 〜Disk04から読み出したデータのうちの更新されないデータと更新データとを用いて、新たなパリティ（New Parity）を生成する。新たなパリティは、例えば排他的論理和（XOR）演算により生成される。尚、ＲＡＩＤ６の場合は、XOR演算だけでなく係数による重み付けなど異なる計算手法を用いて、複数のパリティを生成する。新たなパリティは、パリティバッファ領域１２５に格納される。
【００４８】
ＲＡＩＤ制御部１２２は、更新データとDisk00〜Disk04から読み出したデータのうちの更新されないデータを組み合わせて、Disk00〜Disk03に書き込む書き込みデータを生成する。これにより、ストリップ単位の書き込みデータが生成される。
ＲＡＩＤ制御部１２２は、書き込みデータをDisk00〜Disk03に、新たなパリティをDisk05に書き込む。
【００４９】
Fill Read Bandwidth Writeにおいて、Disk00〜Disk04からストリップ全体のデータを読み出している。データの読み出しにおいて、１つの読み出し処理コマンドで１つのストリップ全体のデータを読み出すため、従来のRead Bandwidth Writeに比べ、処理コマンドの数が削減される。
【００５０】
また、ストリップ全体の書き込みデータを生成することで、１つの書き込みコマンドで１つのストリップに対して書き込めるため、従来のRead Bandwidth Writeに比べ、処理コマンドの数が削減される。
【００５１】
図６は、書き込みデータを示す図である。
書き込みデータの生成において、図６に示すように、更新データと更新データに挟まれる更新されないデータとを用いて、書き込みデータを生成しても良い。すなわち、ストリップ内の最初または最後のデータが更新されないデータである場合、該データを書き込みデータの生成に用いないようにしても良い。
【００５２】
次に実施の形態のデータ復旧に関して説明する。
図７は、Read Bandwidth Write処理時のエラーを示す図である。
図８は、従来のデータ復旧処理を示す図である。
【００５３】
図７において、ＲＡＩＤ装置は、RAID5(5+1)の構成、すなわち６台のディスクでＲＡＩＤ５を行っている。
図７においては、Disk00〜Disk05の６台のディスク装置によって構成され、更新データに対応するパリティはDisk05に格納されるものとする。
【００５４】
更新データは、Disk00〜Disk03に対する更新データがあるものとする。
Read Bandwidth Writeにおいて、更新対象ではない更新前のデータが各ディスクから読み出され、データバッファ領域１２４に格納される。このとき、Disk03においてリードエラーが発生し、データが読み出せなかったものとする。
【００５５】
このとき、従来のデータ復旧処理では、リードの失敗したディスク（Disk03）以外のディスク（Disk00〜Disk02、Disk04、Disk05）から、Disk03の復旧に必要なデータの読み出しを行い、読み出したデータと読み出したパリティとを用いてXOR演算を行い、Disk03のデータを生成し、Disk03を復旧する。このような処理は、Regeneration Readと呼ばれる。
【００５６】
上記のように、従来においては、データ復旧時にディスクから再度読み出す処理が必要となる。
【００５７】
図９は、Fill Read Bandwidth Writeにおけるデータ復旧処理を示す図である。
ここでは、上記で説明したのと同様にDisk03でリードエラー発生し、データが読み出せなかったものとする。
【００５８】
Fill Read Bandwidth Writeにおいては、初回のディスクリード時にストリップ全体のデータを読み出し、データバッファ領域１２４に格納している。
それにより、Disk00〜Disk02、Disk04からは、再度データを読み出す必要が無く、Disk05からパリティを読み出すだけで、Disk03の復旧に必要なデータを用意することが出来る。
【００５９】
実施の形態のデータ復旧処理では、データバッファ領域１２４に格納されているDidk00〜Disk02、Disk04のストリップ全体のデータとDisk05から読み出したパリティとを用いてXOR演算を行い、Disk03のデータを生成し、Disk03を復旧する。
【００６０】
このように、実施の形態のデータ復旧処理では、パリティ以外のデータを再度ディスクから読み出す必要が無いため、ディスクアクセス回数を削減でき、処理時間を短縮できる。
【００６１】
次に実施の形態に係る書き込み方法の選択について説明する。
従来の書き込み方法の選択は、処理コマンド数、データ転送量、XOR演算回数のいずれかまたはすべてのパラメータについて、Disk ReadとDisk Writeの合計で想定される値を判断材料として行っていた。
【００６２】
従来の選択方法では、データの離散に対する考慮がなされていないため、離散しているデータに基づいた処理コマンド数により、非効率なWrite方法が選択されてしまう場合があった。
【００６３】
実施の形態に係る書き込み方法の選択処理では、まず更新データが離散データであるか否かを判定し、離散データでなければ従来の書き込み方法（Small WriteまたはRead Bandwidth Write）、離散データであれば実施の形態の書き込み方法（Fill Small WriteまたはFill Read Bandwidth Write）を実施する。
【００６４】
また、実施の形態に係る書き込み方法の選択処理では、更新対象ディスク数などに基づいて、読み出し時の処理コマンド数が少なくなる書き込み方法を選択している。
書き込み時の処理コマンド数はFill Read Bandwidth WriteとFill Small Writeで等しいため、Read時の処理コマンド数のみを考慮している。
【００６５】
また、実施の形態に係る書き込み方法の選択処理では、Fill Read Bandwidth WriteとFill Small Writeで処理時間差が顕著に現れる要因はディスクアクセス回数であるため、処理コマンド数、データ転送量、XOR演算回数の各パラメータのうち、処理コマンド数のみを考慮している。
【００６６】
以下、実施の形態に係る書き込み方法の選択処理について詳細に説明する。
図１０は、実施の形態に係る書き込み方法の選択処理のフローチャートである。
先ず、キャッシュ制御部１２１はＲＡＩＤ制御部１２２にライトバック開始の指示を行う。また、ＲＡＩＤ装置１０１は、ホスト２０１から更新データを受信し、キャッシュ領域に格納しているものとする。
【００６７】
ステップＳ５０１において、ＲＡＩＤ制御部１２２は、更新データが離散しているか否かをチェックする。離散しているか否かは、キャッシュ管理テーブル１２６を参照することにより判定する。
【００６８】
更新データが離散している場合、制御はステップＳ５０３に進み、離散していない場合、制御はステップＳ５０２に進む。
ステップＳ５０２において、ＲＡＩＤ制御部１２２は、従来の書き込み方法（例えば、Small Write、Read Bandwidth Write）の決定処理と、決定した書き込み方法による更新データの書き込みを行う。尚、従来の書き込み方法や書き込み方法の決定処理については、例えば特開２００７−８７０９４号公報に詳細に記載されている。
【００６９】
ステップＳ５０３において、ＲＡＩＤ制御部１２２は、更新するディスク装置の数(更新対象Disk数）をチェックする。そして、ＲＡＩＤ制御部１２２は、下記条件１を満たすか否か判定する。すなわち、ＲＡＩＤ制御部１２２は、ＲＡＩＤ装置１０１がＲＡＩＤ５で動作している場合は、更新対象Disk数が(RAID構成Disk数 - 2)以上であるか否か判定する。また、ＲＡＩＤ制御部１２２は、ＲＡＩＤ装置１０１がＲＡＩＤ６で動作している場合は、更新対象Disk数が(RAID構成Disk数 - 3以上であるか否か判定する。尚、RAID構成Disk数は、ＲＡＩＤを構成するディスク装置の数である。
【００７０】
条件１を満たす場合、制御はステップＳ５０６に進み、条件１を満たさない場合、ステップＳ５０４に制御は進む。
・条件１
（１）ＲＡＩＤ５の場合
更新対象Disk数 ≧ (RAID構成Disk数 - 2)
（２）ＲＡＩＤ６の場合
更新対象Disk数 ≧ (RAID構成Disk数 - 3)
【００７１】
ステップＳ５０４において、ＲＡＩＤ制御部１２２は、更新データが書き込まれる各ストリップ毎の更新データの離散の有無をチェックする。離散の有無は、キャッシュ管理テーブル１２６を参照することにより判定可能である。そして、ＲＡＩＤ制御部１２２は、各ストリップに書き込まれる更新データがストリップ全体のデータであるかチェックし、ストリップ内が全て更新対象となるストリップ数をチェックする。
【００７２】
そして、ＲＡＩＤ制御部１２２は、下記条件２を満たすか否か判定する。すなわち、ＲＡＩＤ制御部１２２は、ＲＡＩＤ装置１０１がＲＡＩＤ５で動作している場合は、更新対象Disk数が (RAID構成Disk数 ÷ 2)以上且つストリップ内が全て更新対象となっているストリップ数 が(RAID構成Disk数 -2) - 更新Disk数であるか否か判定する。また、ＲＡＩＤ制御部１２２は、ＲＡＩＤ装置１０１がＲＡＩＤ６で動作している場合は、更新対象Disk数 が ((RAID構成Disk数 - 1) ÷ 2)以上且つストリップ内が全て更新対象となっているストリップ数が (RAID構成Disk数 -3) - 更新Disk数であるか否か判定する。
【００７３】
条件２を満たす場合、制御はステップＳ５０６に進み、条件２を満たさない場合ステップＳ５０５に制御は進む。
・条件２
（１）ＲＡＩＤ５の場合
更新対象Disk数 ≧ (RAID構成Disk数 ÷ 2)
且つ
ストリップ内が全て更新対象となっているストリップ数 ≧ (RAID構成Disk数-2) - 更新Disk数
（２）ＲＡＩＤ６の場合
更新対象Disk数 ≧ ((RAID構成Disk数 - 1) ÷ 2) 
且つ
ストリップ内が全て更新対象となっているストリップ数 ≧ (RAID構成Disk数-3) - 更新Disk数
【００７４】
ステップＳ５０５において、ＲＡＩＤ制御部１２２は、前述のFill Small Writeを実施する。
ステップＳ５０６において、ＲＡＩＤ制御部１２２は、前述のFill Read Bandwidth Writeを実施する。
【００７５】
以下、ケース１〜３において、各書き込み方法を実施した場合の処理コマンド数について説明する。
・ケース１
図１１は、ＲＡＩＤ装置のディスク構成と更新データを示す図である。
図１１において、ＲＡＩＤ装置１０１は、RAID5(5+1)の構成、すなわち６台のディスクでＲＡＩＤ５を行っている。
【００７６】
図１１においては、Disk00〜Disk05の６台のディスク装置によって構成され、更新データに対応するパリティはDisk05に格納されるものとする。
【００７７】
更新データは、Disk00〜Disk02、Disk05に対する更新データがあるものとする。また、更新データは、図１１の斜線部で示すように２０個の離散した領域を有する。また、Disk05以外の更新無しの領域の数（パリティ以外の更新無し領域数）は、１４個である。
【００７８】
図１１に示すケースにおいて、各書き込み方法を実施した場合の処理コマンド数を示す。
Small Writeで処理した場合、処理コマンド数は、Readの20コマンド(更新する領域数)とWriteの20コマンド(更新する領域数)を合計して、計40コマンドとなる。
【００７９】
Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの14コマンド(パリティ以外の更新無し領域数)とWriteの20コマンド(更新する領域数)を合計して、計34コマンドとなる。
【００８０】
Fill Small Writeで処理した場合、処理コマンド数は、Readで4コマンド(更新するディスク数)とWriteの4コマンド(更新するディスク数)を合計して、計8コマンドとなる。
Fill Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの5コマンド(パリティ以外の更新がない部分があるディスク数)とWriteの4コマンド(更新するディスク数)を合計して、計9コマンドとなる。
【００８１】
上記のように、図１１に示すケースでは、Fill Small Writeで処理するとコマンド処理数が少なくなり、処理時間を短くすることが出来る。
【００８２】
実施の形態に係る書き込み方法の選択処理を図１１のケースに適用すると、更新データに離散部分があり（ステップＳ５０１：離散している）、更新対象Disk数をチェックすると条件１に合致せず（ステップＳ５０３：条件を満たさない）、さらに条件２にも合致しない（ステップＳ５０４：条件を満たさない）ため、Fill Small Writeが実施される。
【００８３】
・ケース２
図１２は、ＲＡＩＤ装置のディスク構成と更新データを示す図である。
図１２において、ＲＡＩＤ装置１０１は、RAID5(6+1)の構成、すなわち７台のディスクでＲＡＩＤ５を行っている。
図１２においては、Disk00〜Disk05の７台のディスク装置によって構成され、更新データに対応するパリティはDisk06に格納されるものとする。
【００８４】
更新データは、Disk00〜Disk06に対する更新データがあるものとする。また、更新データは、図１２の斜線部で示すように１２個の離散した領域を有する。また、Disk06以外の更新無しの領域の数（パリティ以外の更新無し領域数）は、１７個である。
【００８５】
図１２に示すケースにおいて、各書き込み方法を実施した場合の処理コマンド数を示す。
Small Writeで処理した場合、処理コマンド数は、Readの12コマンド(更新する領域数)とWriteの12コマンド(更新する領域数)を合計して、計24コマンドとなる。
【００８６】
Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの17コマンド(Parity以外の更新無し領域数)とWriteの12コマンド(更新する領域数)を合計して、計29コマンドとなる。
【００８７】
Fill Small Writeで処理した場合、処理コマンド数は、Readで7コマンド(更新するディスク数)とWriteの7コマンド(更新するディスク数)を合計して、計14コマンドとなる。
Fill Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの6コマンド(パリティ以外の更新がない部分があるディスク数)とWriteの7コマンド(更新するディスク数)を合計して、計13コマンドとなる。
【００８８】
上記のように、図１２に示すケースでは、Fill Read Bandwidth Writeで処理するとコマンド処理数が少なくなり、処理時間を短くすることが出来る。
【００８９】
実施の形態に係る書き込み方法の選択処理を図１２のケースに適用すると、更新データに離散部分があり（ステップＳ５０１：離散している）、更新対象Disk数をチェックすると条件１に合致する（ステップＳ５０３：条件を満たす）ため、Fill Read Bandwidth Writeが実施される。
【００９０】
・ケース３
図１３は、ＲＡＩＤ装置のディスク構成と更新データを示す図である。
【００９１】
図１３において、ＲＡＩＤ装置１０１は、RAID5(6+1)の構成、すなわち７台のディスクでＲＡＩＤ５を行っている。
図１３においては、Disk00〜Disk06の７台のディスク装置によって構成され、更新データに対応するパリティはDisk06に格納されるものとする。
【００９２】
更新データは、Disk00〜Disk03、Disk06に対する更新データがあるものとする。また、更新データは、図１２の斜線部で示すように６個の離散した領域を有する。また、Disk06以外の更新無しの領域の数（パリティ以外の更新無し領域数）は、７個である。
【００９３】
図１３に示すケースにおいて、各書き込み方法を実施した場合の処理コマンド数を示す。
Small Writeで処理した場合、処理コマンド数は、Readの6コマンド(更新する領域数)とWriteの6コマンド(更新する領域数)を合計して、計12コマンドとなる。
【００９４】
Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの7コマンド(Parity以外の更新無し領域数)とWriteの6コマンド(更新する領域数)を合計して、計13コマンドとなる。
【００９５】
Fill Small Writeで処理した場合、処理コマンド数は、Readで5コマンド(更新するディスク数)とWriteの5コマンド(更新するディスク数)を合計して、計10コマンドとなる。
Fill Read Bandwidth Writeで処理した場合、処理コマンド数は、Readの4コマンド(パリティ以外の更新がない部分があるディスク数)とWriteの9コマンド(更新するディスク数)を合計して、計11コマンドとなる。
【００９６】
上記のように、図１３に示すケースでは、Fill Read Bandwidth Writeで処理するとコマンド処理数が少なくなり、処理時間を短くすることが出来る。
実施の形態に係る書き込み方法の選択処理を図１３のケースに適用すると、更新データに離散部分があり（ステップＳ５０１：離散している）、更新対象Disk数をチェックすると条件１に合致しない（ステップＳ５０３：条件を満たさない）が、条件２に合致する（ステップＳ５０４：条件を満たす）ため、Fill Read Bandwidth Writeが実施される。
【００９７】
次に、RAID5(9+1)のケースで、Fill Read Band Width WriteとFill Small Writeで処理した場合のコマンド数の例を示す。RAID5(9+1)は、RAIDを構成するディスク数が１０個でそのうち、データを格納するディスクが９個、パリティ格納するディスクが１個である。
【００９８】
図１４は、条件１を満たす場合のコマンド数を示す。
図１４を参照すると、更新Disk数が(RAID構成Disk数 - 2)以上である場合(条件１を満たす場合)、Fill Read Band Width Writeを実施した場合のコマンド数は、Fill Small Writeを実施した場合のコマンド数以下となっている。
【００９９】
図１５は、条件２を満たす場合のコマンド数を示す。
図１５を参照すると、更新対象Disk数 が (RAID構成Disk数 ÷ 2)以上、且つストリップ内が全て更新対象となっているストリップ数 が( (RAID構成Disk数 -2) - 更新Disk数)以上の場合（条件２を満たす場合）、Fill Read Band Width Writeを実施した場合のコマンド数は、Fill Small Writeを実施した場合のコマンド数以下となっている。
【０１００】
また、更新対象Disk数 が (RAID構成Disk数 ÷ 2)未満の場合、Fill Small Writeを実施した場合のコマンド数は、Fill Read Band Width Writeを実施した場合のコマンド数以下となっている。
【０１０１】
尚、実施の形態において、制御部１１２が記憶部１１３や可搬記録媒体などに格納されたプログラムを読み出し、該プログラムを実行することにより、上述した各種処理を実行するようにしてもよい。この場合、読み出されたプログラムコード自体が実施の形態の機能を実現する。
【０１０２】
可搬記録媒体としては、メモリカード、フレキシブルディスク、Compact Disk Read Only Memory(CD-ROM)、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。
【０１０３】
実施の形態のＲＡＩＤ装置によれば、更新データが離散している場合に、ライトバック処理の速度を向上させることが出来る。
また、実施の形態のＲＡＩＤ装置によれば、処理速度が速いライト方法を選択することが出来る。
【符号の説明】
【０１０４】
１０１    ＲＡＩＤ装置
１１１    制御モジュール
１１２    処理部
１１３    記憶部
１１４    ホストI/F
１１５    ディスクI/F
１２１    キャッシュ制御部
１２２    ＲＡＩＤ制御部
１２３    キャッシュ領域
１２４    データバッファ領域
１２５    パリティバッファ領域
１２６    キャッシュ管理テーブル
１３１    デバイスエンクロージャー
１３２    ディスク装置
【図３】
0005923964.tif 000002
【図１０】
0005923964.tif 000003
【図１】
0005923964.tif 000004
【図２】
0005923964.tif 000005
【図４】
0005923964.tif 000006
【図５】
0005923964.tif 000007
【図６】
0005923964.tif 000008
【図７】
0005923964.tif 000009
【図８】
0005923964.tif 000010
【図９】
0005923964.tif 000011
【図１１】
0005923964.tif 000012
【図１２】
0005923964.tif 000013
【図１３】
0005923964.tif 000014
【図１４】
0005923964.tif 000015
【図１５】
0005923964.tif 000016