(57)【特許請求の範囲】
【請求項１】
データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、少なくとも前記記憶媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う手段と、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段と、
データを冗長形態に記憶する前記複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち、他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、前記少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記少なくとも１つの記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行うコマンド処理手段と、
を備えている、ことを特徴とするストレージ装置。
【請求項２】
前記記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う手段は、
複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、記憶媒体単体でのアクセス時間が短縮するようにアクセスコマンドの実行順序をスケジュールする、ことを特徴とする請求項１記載のストレージ装置。
【請求項３】
前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、
前記記憶媒体単位でスケジュールされたアクセスコマンドの実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する、ことを特徴とする請求項１又は２記載のストレージ装置。
【請求項４】
前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、
アクセスの完了が早くなるように、読み出しアクセスコマンド発行先の記憶媒体として、データの実体を格納した記憶媒体又は冗長データを格納した記憶媒体を選択する、ことを特徴とする請求項１乃至３のいずれか一に記載のストレージ装置。
【請求項５】
前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体に対して、読み出し対象のデータの実体全体を格納した記憶媒体を読み出した場合のアクセス時間と、複数の記憶媒体からそれぞれ読み出した部分データと冗長データとを用いて読み出し対象のデータの実体全体を復元した場合のアクセス時間とを求め、
前記アクセス時間の算出結果から、アクセスの完了が早くなるように、アクセスコマンド発行先の記憶媒体を選択する、ことを特徴とする請求項１乃至３のいずれか一に記載のストレージ装置。
【請求項６】
前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、
記憶媒体単位に発行順序がスケジュールされたアクセスコマンドの中から、実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出した場合、アクセスコマンドを前記記憶媒体への発行対象から外すことで、アクセス完了を早める、ことを特徴とする請求項１乃至５のいずれか一に記載のストレージ装置。
【請求項７】
前記コマンド処理手段は、複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、アクセスコマンドの実行順序を、記憶媒体単位でスケジュールし、
記憶媒体単位でスケジュールされたアクセスコマンドの中から、実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出する、ことを特徴とする請求項１記載のストレージ装置。
【請求項８】
前記コマンド処理手段は、前記アクセスコマンド実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する、ことを特徴とする請求項１又は７記載のストレージ装置。
【請求項９】
前記コマンド処理手段は、前記複数の記憶媒体の各々について、前記記憶媒体に対して前記複数のアクセスコマンドの実行順序がスケジュールされた場合、
前記複数の記憶媒体間でのアクセス時間の合計の大小を比較し、アクセス時間の合計が相対的に長い記憶媒体への複数のアクセスコマンドのうち少なくとも１つのアクセスコマンドを非活性化させ前記記憶媒体への発行対象から外す、ことを特徴とする請求項１記載のストレージ装置。
【請求項１０】
前記コマンド処理手段は、新たなアクセス要求が到来時、前記非活性化されたアクセスコマンドを活性化させて再スケジュール対象とし、複数のアクセスコマンドの実行順序の再スケジュールを行う、ことを特徴とする請求項９記載のストレージ装置。
【請求項１１】
前記コマンド処理手段は、前記記憶媒体の内部状態とアクセス先の位置情報とから、アクセス時間を算出する、ことを特徴とする請求項８記載のストレージ装置。
【請求項１２】
前記コマンド処理手段は、前記記憶媒体へのアクセスに関して、前記記憶媒体において先行するアクセスでのアクセス先アドレス、又は、該アドレスとアクセス対象データから、前記記憶媒体の内部状態を算出する、ことを特徴とする請求項８記載のストレージ装置。
【請求項１３】
前記記憶媒体の内部状態はヘッドの位置情報を含む、ことを特徴とする請求項１１又は１２記載のストレージ装置。
【請求項１４】
前記コマンド処理手段は、前記記憶媒体で実行中のコマンドの実行状況、実行中のコマンドの終了時間、終了時の記憶媒体の内部状態を参酌して、前記記憶媒体へのアクセスコマンドに基づきアクセス完了までに要するアクセス時間を算出する、ことを特徴とする請求項８に記載のストレージ装置。
【請求項１５】
前記複数の記憶媒体に対応して前記記憶媒体に対するアクセスコマンドを一時的に格納する複数のコマンドキューを備えている、ことを特徴とする請求項１乃至１４のいずれか一に記載のストレージ装置。
【請求項１６】
前記コマンド処理手段は、前記コマンドキューに蓄積されたアクセスコマンドの個数が予め定められた数以下の場合、あるいは、記憶媒体に対して発行済みの先行アクセスコマンドの合計時間の予測結果が予め定められた時間以下の場合、アクセスコマンドを前記記憶媒体に発行する、ことを特徴とする請求項１５記載のストレージ装置。
【請求項１７】
データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、少なくとも前記記憶媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行い、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択し、
データを冗長形態に記憶する前記複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち、他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、前記少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記少なくとも１つの記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行う、ことを特徴とするストレージアクセス方法。
【請求項１８】
複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、記憶媒体単体でのアクセス時間が短縮するようにアクセスコマンドの実行順序をスケジュールする、ことを特徴とする請求項１７記載のストレージアクセス方法。
【請求項１９】
前記アクセスコマンド実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する、ことを特徴とする請求項１７又は１８記載のストレージアクセス方法。
【請求項２０】
アクセスの完了が早くなるように、読み出しコマンド発行先の記憶媒体として、データの実体を格納した記憶媒体又は冗長データを格納した記憶媒体を選択する、ことを特徴とする請求項１７乃至１９のいずれか一に記載のストレージアクセス方法。
【請求項２１】
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体に対して、
読み出し対象のデータの実体全体を格納した記憶媒体を読み出した場合のアクセス時間と、複数の記憶媒体からそれぞれ読み出した部分データと冗長データとを用いて読み出し対象のデータの実体全体を復元した場合のアクセス時間とを求め、
前記アクセス時間の算出結果から、アクセスの完了が早くなるように、アクセスコマンド発行先の記憶媒体を選択する、ことを特徴とする請求項１７乃至２０のいずれか一に記載のストレージアクセス方法。
【請求項２２】
記憶媒体単位に発行順序がスケジュールされたアクセスコマンドの中から実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出した場合、アクセスコマンドを、前記記憶媒体への発行対象から外すことで、アクセス完了を早めることを特徴とする請求項１９乃至２１のいずれか一に記載のストレージアクセス方法。
【請求項２３】
複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、アクセスコマンドの実行順序を記憶媒体単位にスケジュールし、
記憶媒体単位に発行順序がスケジュールされたアクセスコマンドの中から、実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出する、ことを特徴とする請求項２２記載のストレージアクセス方法。
【請求項２４】
前記アクセスコマンド実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する、ことを特徴とする請求項２２又は２３記載のストレージアクセス方法。
【請求項２５】
前記複数の記憶媒体の各々について、前記記憶媒体に対して前記複数のアクセスコマンドの発行順序がスケジュールされた場合、
前記複数の記憶媒体間でのアクセス時間の合計の大小を比較し、アクセス時間の合計が相対的に長い記憶媒体への複数のアクセスコマンドのうち少なくとも１つのアクセスコマンドを非活性化させる、ことを特徴とする請求項１７記載のストレージアクセス方法。
【請求項２６】
新たなアクセス要求が到来時、前記非活性化されたアクセスコマンドを活性化させて再スケジュール対象とし、複数のアクセスコマンドの実行順序の再スケジュールを行う、ことを特徴とする請求項２５記載のストレージアクセス方法。
【請求項２７】
前記記憶媒体の内部状態とアクセス先の位置情報とから、アクセス時間を算出する、ことを特徴とする請求項１９又は２４記載のストレージアクセス方法。
【請求項２８】
前記記憶媒体へのアクセスに関して、前記記憶媒体において先行するアクセスでのアクセス先アドレス、又は、該アドレスとアクセス対象データから、前記記憶媒体の内部状態を算出する、ことを特徴とする請求項１９又は２４記載のストレージアクセス方法。
【請求項２９】
前記記憶媒体の内部状態はヘッドの位置情報を含む、ことを特徴とする請求項２７又は２８記載のストレージアクセス方法。
【請求項３０】
前記記憶媒体で実行中のコマンドの実行状況、実行中のコマンドの終了時間、終了時の記憶媒体の内部状態を参酌して、前記記憶媒体へのアクセスコマンドに基づきアクセス完了までに要するアクセス時間を算出する、ことを特徴とする請求項１９又は２４に記載のストレージアクセス方法。
【請求項３１】
前記アクセスコマンドは、ホストから投入されたアクセス要求を前記ストレージ装置が解析し、前記複数の記憶媒体に対するアクセスコマンドとして生成したものである、ことを特徴とする請求項１７乃至３０のいずれか一に記載のストレージアクセス方法。
【請求項３２】
データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、少なくとも前記記憶媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う処理と、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択する処理と、
データを冗長形態に記憶する前記複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち、他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、前記少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記少なくとも１つの記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行う処理と、
をストレージ装置のコンピュータに実行させるプログラム。
【請求項３３】
複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、記憶媒体単体でのアクセス時間が短縮するようにアクセスコマンドの実行順序をスケジュールする処理を前記コンピュータに実行させる請求項３２記載のプログラム。
【請求項３４】
前記アクセスコマンド実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する処理を前記コンピュータに実行させる請求項３２記載のプログラム。
【請求項３５】
アクセスの完了が早くなるように、読み出しコマンド発行先の記憶媒体として、データの実体を格納した記憶媒体又は冗長データを格納した記憶媒体を選択する処理を前記コンピュータに実行させる請求項３２記載のプログラム。
【請求項３６】
複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、アクセスコマンドの発行順序を記憶媒体単位にスケジュール処理を前記コンピュータに実行させる請求項３２記載のプログラム。
【請求項３７】
前記アクセスコマンドは、ホストから投入されたアクセス要求を前記ストレージ装置が解析し、前記複数の記憶媒体に対するアクセスコマンドとして生成したものである、ことを特徴とする請求項３２乃至３６のいずれか一に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ装置に関し、特に、複数の記憶媒体を有する装置、プログラムに関する。
【背景技術】
【０００２】
情報通信技術の進化とその適用分野の拡大に伴い、情報処理システムが扱うデータ量、及びその重要性が増大している。このため、データを格納するストレージシステムには高信頼性が求められている。また同時に大容量のデータを短時間で処理するためにアクセスの高速性が求められている。
【０００３】
これらの要求に対して記憶媒体を持つストレージが信頼性、性能を同時に向上させる方法として非特許文献１に挙げたＲＡＩＤ（Ｒｅｄｕｎｄａｎｃｙ  Ａｒｒａｙ  Ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）が用いられる。ＲＡＩＤはストレージが持つ複数の記憶媒体間で冗長性を持たせることによって信頼性とアクセス性能を向上させる技術である。ＲＡＩＤの種類は記憶媒体間の冗長性の取り方によって複数存在する。
【０００４】
＜ＲＡＩＤ１＞
複数の記憶媒体にデータのミラーリングを行う方式としてＲＡＩＤ１が挙げられる。ＲＡＩＤ１では、同一データが複数の記憶媒体に記憶されるため、データを記憶した全ての記憶媒体が故障しない限り、データは失われない。このため、記憶媒体の故障に対する信頼性が向上する。
【０００５】
またＲＡＩＤ１では、複数の記憶媒体にデータが記憶されているため、複数のＲｅａｄアクセスを別々の記憶媒体に対して行うことで、並列処理が可能である。このため、ＲＡＩＤ１は、単一の記憶媒体と比較して、Ｒｅａｄアクセスに関して、並列アクセス性能が向上する。
【０００６】
さらに、ＲＡＩＤ１では、並列にＲｅａｄアクセスを連続したデータに対して行うことで、Ｒｅａｄアクセスに関して、連続アクセス時のスループット性能が向上する。
【０００７】
＜ＲＡＩＤ５＞
次に、複数の記憶媒体間でデータと共にそのパリティを持つ方式としてＲＡＩＤ５が挙げられる。ＲＡＩＤ５では、複数の記憶媒体のうち１台が、他の全ての記憶媒体上のデータのパリティを格納する。このため、ＲＡＩＤ５では、任意の１台の記憶媒体が故障した場合に、パリティを使用して、データを復元することが可能である。よって、ＲＡＩＤ５は、記憶媒体の故障に対する信頼性を向上する。
【０００８】
また、ＲＡＩＤ５では、同時に複数のＲｅａｄアクセスが発生した場合に、データが格納された記憶媒体が互いに異なっている場合、並列にアクセスを処理できる。
【０００９】
よって、ＲＡＩＤ５を用いた場合、単一の記憶媒体と比較して、Ｒｅａｄアクセスに関して並列アクセス性能が向上する。
【００１０】
さらに、ＲＡＩＤ５は、ＲＡＩＤ１の場合と同様に、並列にＲｅａｄアクセスを連続したデータに対して行うことで、Ｒｅａｄアクセスに関して連続アクセス時のスループット性能が向上する。
【００１１】
また、ＲＡＩＤ５では、各記憶媒体を一定サイズの領域に区切り、領域を単位として、パリティを計算、格納する。更に、領域毎に、パリティを格納する役割を果たす記憶媒体が異なる。
【００１２】
＜ＲＡＩＤ６＞
ＲＡＩＤ５と同様に、複数の記憶媒体間のパリティを持つ方式としてＲＡＩＤ６が挙げられる。ＲＡＩＤ６は、ＲＡＩＤ５と比較して、２種類の異なる方式で計算したパリティをそれぞれ別の記憶媒体に格納している点が異なる。このため、ＲＡＩＤ６においては、記憶媒体が２台故障した場合までについてデータの復元が可能である。
【００１３】
ＲＡＩＤ６において、データの格納先の記憶媒体が異なる場合に、Ｒｅａｄアクセスを並列に行える点は、ＲＡＩＤ５と同様である。
【００１４】
近時、ストレージのみならず記憶媒体自身のアクセスの高速化が図られている。記憶媒体が磁気ディスクである場合、アクセスを行うディスクヘッドがデータを格納している位置まで移動するシークに要する時間が応答時間の多くを占める。
【００１５】
そこで、磁気ディスク上に分散して格納される複数のデータに対して効率的にアクセスを行うため、ディスクヘッドの動きを最適化している。
【００１６】
＜エレベータアルゴリズム＞
非特許文献２に挙げた、一般的に「エレベータアルゴリズム」または「ＳＣＡＮ」と呼ばれるアルゴリズムは、複数のアクセス要求を処理する際にヘッドが１往復で処理できるようにディスクアクセスの順序を最適化するアルゴリズムである。これによって、複数のアクセスの合計応答時間の短縮を図っている。
【００１７】
＜データ配置による応答時間の短縮＞
また、磁気ディスクからなる記憶媒体では、ディスク上の近い位置に格納されたデータにアクセスする場合と、遠い位置に格納されたデータにアクセスする場合とでは、前者が後者より応答時間が短いという性質を持つ。
【００１８】
このため、ディスク上の物理的に近い位置に連続して使用するデータを格納することで、アクセス時の応答時間の短縮が可能である。
【００１９】
関連技術として、例えば特許文献１には、データを多重化して格納する各ディスク装置に、ディスク媒体の回転角を検出する回転角検出手段と、ヘッドが位置しているトラックのトラック番号を検出するトラック番号検出手段と、待ち時間の算出が指示されたとき、前記回転角とトラック番号検出手段が検出したトラック番号を用い待ち時間の算出対象である記憶領域上にヘッドが移動するまでに必要とされる待ち時間である待ち時間を算出して出力する出力手段を備え、コントローラは外部装置から読み出し要求を受信したとき、算出された待ち時間が最も短いディスク装置を用いて読み出し要求に応答する構成が開示されている。
【００２０】
特許文献２には、現在または一番近い過去に処理した時のヘッドの位置に対応する各ヘッド毎の物理または論理アドレスから近い順に各ヘッド毎の処理待ち行列を並び替え、処理要求に対応するアドレスに最も近いヘッドに処理をさせるようにした構成が開示されている。
【００２１】
【特許文献１】特開平７−１４１７７０号公報
【特許文献２】特開平１０−２７３２１号公報
【非特許文献１】Ｐａｔｔｅｒｓｏｎ  ｅｔ  ａｌ．，  “Ａ  Ｃａｓｅ  ｆｏｒ  Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ  （ＲＡＩＤ）”，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １９８８  ＡＣＭ  ＳＩＧＭＯＤ  ｉｎｔｅｒｎａｔｉｏｎａｌ  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｍａｎａｇｅｍｅｎｔ  ｏｆ  ｄａｔａ，  ｐｐ．  １０９−１１６
【非特許文献２】Ｓｉｌｂｅｒｓｃｈａｔｚ  ｅｔ  ａｌ．，“Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ  Ｃｏｎｃｅｐｔｓ  Ｆｉｆｔｈ  Ｅｄｉｔｉｏｎ”，  Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ，  ｐｐ．  ４３５−４３７
【発明の開示】
【発明が解決しようとする課題】
【００２２】
上記特許文献１、２、非特許文献１、２の各開示は、引用によって本明細書に組み込まれる。以下の分析は本発明によって与えられる。
【００２３】
ＲＡＩＤにより複数記憶媒体間での冗長性を利用することでストレージの信頼性の向上と共に、アクセスの高速化を実現することが可能である。これらのうち、ＲＡＩＤにより実現される高速化は、各ＲＡＩＤの説明の通り、スループットの向上、及び、並列アクセス性能の向上によって実現される。
【００２４】
しかしながら、アクセス性能の指標としては、スループット及び並列アクセス性能の他に、アクセスに対する応答時間が挙げられる。
【００２５】
記憶媒体が磁気ディスク等である場合、アクセス先のデータ、及び磁気ディスク自身の状態によってアクセスに対する応答時間が異なる。
【００２６】
そして、ＲＡＩＤの利用のみで、この応答時間を短縮することは困難である。すなわち、複数の記憶媒体から構成されるストレージにおいて、ＲＡＩＤ等により冗長性を確保した場合に、応答時間が短縮されない、という課題がある。
【００２７】
例えばＲＡＩＤ１（ミラー）を適用したストレージにおいて、データを取得可能なアクセス先の記憶媒体は複数存在する。記憶媒体のそれぞれのアクセス時間が異なる場合、応答時間を短縮するには、アクセス時間が短くなる記憶媒体を選択することが必要である。
【００２８】
しかしながら、ＲＡＩＤでは、アクセス時間が短くなるようなアクセス先の記憶媒体の選択は行われていない。
【００２９】
つまり、ＲＡＩＤによって、記憶媒体単体の場合と比べて、応答時間を短縮することはできない。
【００３０】
一方、記憶媒体そのものについて応答時間を短縮する技術として、前記したエレベータシーク、ディスク上のデータ配置が挙げられる。
【００３１】
しかし、これらの技術は、ディスク単体、つまり、記憶媒体単体についてのローカルな最適化を行うものである。複数の記憶媒体間に亘る最適化は対象としていない（範囲外である）。このため、これらの公知技術を用いて、複数の記憶媒体を含むストレージ全体に対して応答時間の短縮を行うことは困難である。
【００３２】
したがって、本発明の目的は、データを冗長形態に格納する複数の記憶媒体を含むストレージにおいてアクセス要求に対する複数の記憶媒体全体でのアクセス時間を短縮可能とする装置、方法、プログラムを提供することにある。
【課題を解決するための手段】
【００３３】
本願で開示される発明は、前記課題を解決するため、概略以下の構成とされる。
【００３４】
本発明の１つの側面（アスペクト）に係るストレージ装置においては、データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、少なくとも前記記憶媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う手段（記憶媒体内スケジュール手段）と、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段（記憶媒体間スケジュール手段）と、を備えている。
【００３５】
本発明において、前記記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う手段は、複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、記憶媒体単体でのアクセス時間が短縮するようにアクセスコマンドの発行順序をスケジュールする。
【００３６】
本発明において、前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、前記アクセスコマンドの実行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測する。
【００３７】
本発明において、前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、アクセスの完了が早くなるように、読み出しコマンド発行先の記憶媒体として、データの実体を格納した記憶媒体又は冗長データを格納した記憶媒体の一方を選択するようにしてもよい。
【００３８】
本発明において、前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体に対して、読み出し対象のデータの実体全体を格納した記憶媒体を読み出した場合のアクセス時間と、複数の記憶媒体からそれぞれ読み出した部分データと冗長データとを用いて読み出し対象のデータの実体全体を復元した場合のアクセス時間を求め、
前記アクセス時間の算出結果から、アクセスの完了が早くなるように、、アクセスコマンド発行先の記憶媒体を選択するようにしてもよい。
【００３９】
本発明において、前記アクセスコマンドを発行する記憶媒体の組み合わせを選択する手段は、記憶媒体単位に発行順序がスケジュールされたアクセスコマンドの中から実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出した場合、アクセスコマンドを前記記憶媒体への発行対象から外すことで、アクセス完了を早める。
【００４０】
本発明の別の側面において、データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、前記少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行うコマンド処理手段を備えている。
【００４１】
本発明において、前記コマンド処理手段は、複数のアクセスコマンドのそれぞれについて、アクセス先のアドレス、アクセス長、記憶媒体のアクセス時間特性に基づき、アクセスコマンドの発行順序を記憶媒体単位にスケジュールし、
記憶媒体単位に発行順序がスケジュールされたアクセスコマンドの中から、実行が不要であり、且つ、処理時間が相対的に大のアクセスコマンドを検出する。
【００４２】
本発明において、前記コマンド処理手段は、前記アクセス発行順序をもとに、前記記憶媒体に対して読み出しアクセスを行った場合のアクセス時間を予測するようにしてもよい。
【００４３】
本発明において、前記コマンド処理手段は、前記複数の記憶媒体の各々について、前記記憶媒体に対して前記複数のアクセスコマンドの発行順序がスケジュールされた場合、
前記複数の記憶媒体間でのアクセス時間の合計の大小を比較し、アクセス時間の合計が相対的に長い記憶媒体への複数のアクセスコマンドのうち少なくとも１つのアクセスコマンドを非活性化させるようにしてもよい。
【００４４】
本発明において、前記コマンド処理手段は、新たなアクセス要求が到来時、前記非活性化されたアクセスコマンドを活性化させて再スケジュール対象とし、複数のアクセスコマンドの実行順序の再スケジュールを行うようにしてもよい。
【００４５】
本発明において、前記コマンド処理手段は、前記記憶媒体の内部状態とアクセス先の位置情報とから、アクセス時間を算出するようにしてもよい。
【００４６】
本発明において、前記記憶媒体へのアクセスに関して、前記記憶媒体において先行するアクセスでのアクセス先アドレス、又は、該アドレスとアクセス対象データから、前記記憶媒体の内部状態を算出するようにしてもよい。
【００４７】
本発明において、前記記憶媒体の内部状態はヘッドの位置情報を含む。
【００４８】
本発明において、前記コマンド処理手段は、前記記憶媒体で実行中のコマンドの実行状況、実行中のコマンドの終了時間、終了時の記憶媒体の内部状態を参酌して、前記記憶媒体へのアクセスコマンドに基づきアクセス完了までに要するアクセス時間を算出するようにしてもよい。
【００４９】
本発明において、前記複数の記憶媒体に対応して前記記憶媒体に投入するアクセスコマンドを格納する複数のコマンドキューを備えている。
【００５０】
本発明において、前記コマンド処理手段は、前記コマンドキューに蓄積されたアクセスコマンドの個数が予め定められた数以下の場合、あるいは、記憶媒体に対して発行済みの先行アクセスコマンドの合計時間の予測結果が予め定められた時間以下の場合のいずれかが成り立つ場合、アクセスコマンドを前記記憶媒体に発行する。なお、記憶媒体に対して発行済みの先行アクセスコマンドの合計時間の予測結果は、当該先行アクセスコマンドを記憶媒体に対して発行する前のスケジュール時点で計算されたアクセス時間の合計に基づき、コマンド処理手段で算出してもよいし、あるいは、記憶媒体側が、コマンド処理手段から該記憶媒体に対して発行したアクセスコマンドの実行順序をスケジュールする機能を具備している場合、コマンド処理部手段は、記憶媒体側から当該先行アクセスコマンドの合計時間の予測結果を取得するようにしてもよい。
【００５１】
本発明においては、複数の記憶媒体を備え、記憶媒体に対して発行したアクセスを管理し、前記記憶媒体への発行済アクセスの、記憶媒体内での処理順序を予測するか、前記記憶媒体内でのアクセス処理順序、記憶媒体に対するアクセスコマンド処理順序を決定（スケジュール）する手段を備えている。
【００５２】
また、本発明においては、予測または決定されたアクセス処理順序をもとに、各記憶媒体に対して、Ｒｅａｄ（読み出し）アクセスを行った場合のアクセス所要時間を予測する手段を備えている。
【００５３】
さらに、本発明においては、Ｒｅａｄに要するアクセス時間の情報から、データの実体（直接データ）を格納した記憶媒体をＲｅａｄした場合のアクセス時間と、Ｒｅａｄ対象のデータの一部または全てについて、Ｒｅａｄ対象のデータに対するパリティを格納した記憶媒体から読み出したパリティを用いてＲｅａｄ対象のデータを復元した場合のアクセス時間を求め、コマンドの処理に要する時間の算出結果から、コマンド処理の完了時間が早くなるように、前記コマンドについて、コマンド発行先の記憶媒体を選択する。本発明においては、要求されたデータをＲｅａｄする際に、アクセス時間が短くなるように処理を行うことで、Ｒｅａｄアクセス時の応答時間の短縮を実現する。
【００５４】
本発明に係る方法は、媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行い、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択する、上記各工程を含む。
【００５５】
本発明に係る方法は、データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行う、上記各工程を含む。
【００５６】
本発明に係るプログラムは、データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、少なくとも前記記憶媒体に対して実行待ち状態にある複数のアクセスコマンドを解析し、アクセス時間が短縮するように記憶媒体単体でのアクセスコマンドの実行順序のスケジューリングを行う処理と、
記憶媒体単体での前記スケジューリングが行われた複数の前記記憶媒体から、複数の前記記憶媒体全体でのアクセス完了を早めるように、アクセスコマンドを発行する記憶媒体の組み合わせを選択する処理と、
をストレージ装置のコンピュータに実行させるプログラムよりなる。
【００５７】
本発明に係るプログラムは、データを冗長形態に記憶する複数の記憶媒体のそれぞれについて、前記記憶媒体に投入されるアクセスコマンドを前記記憶媒体への発行に先立って解析し、
少なくとも１つの記憶媒体に対するアクセスコマンドのうち他の記憶媒体で実行されるアクセスコマンドとの関係から実行が不要なアクセスコマンドであり、且つ、前記少なくとも１つの記憶媒体に対するアクセスコマンドのうち処理時間が相対的に大であるアクセスコマンドを、前記記憶媒体への発行対象から外し、アクセス完了を早めるスケジューリングを行う処理をストレージ装置のコンピュータに実行させるプログラムよりなる。
【発明の効果】
【００５８】
本発明によれば、データを冗長形態に格納する複数の記憶媒体を含むストレージにおいてアクセス要求に対する複数の記憶媒体全体でのアクセス時間を削減することを可能としている。
【発明を実施するための最良の形態】
【００５９】
上記した本発明についてさらに詳細に説述すべく添付図面を参照して以下に説明する。本発明において、ストレージ内の各記憶媒体に対して発行したアクセスを管理して、記憶媒体への発行済アクセスの記憶媒体内での処理順序を予測する機能（「記憶媒体処理順序予測機能」という）は、記憶媒体に対して発行するコマンドに関する
・アクセス先のアドレスと、
・アクセス長と、
・記憶媒体についてのアクセス時間特性、
・記憶媒体の物理的、論理的構成情報、または、
・記憶媒体内部で使用されているスケジューリングアルゴリズム、
に関する情報に基づき、記憶媒体内でアクセス時間短縮のために最適化されたアクセスコマンドの実行順序を予測する。
【００６０】
本発明において、記憶媒体処理順序予測機能によって予測されたコマンド実行順序をもとに、記憶媒体に対してアクセスを行った場合のアクセス所要時間を予測する機能（「コマンド処理完了時間予測機能」という）は、記憶媒体に対して、アクセス時間算出対象のコマンドと、先行するコマンドが記憶媒体のアクセス時間に影響する場合には、先行するコマンドについても、アクセス先のアドレスを渡してアクセス所要時間を結果として得る。あるいは、アクセス先のアドレスに基づき、アクセス先のデータが格納された記憶媒体内の物理的または論理的状態に関する情報を取得し、記憶媒体へのアクセス所要時間を算出するようにしてもよい。あるいは、データが格納された記憶媒体に対して、過去にアクセスした際のアクセス先アドレス、もしくは、アクセスに要した実時間の履歴から、データが格納された記憶媒体内の物理的または論理的状態を推定し、記憶媒体へのアクセス所要時間を算出するようにしてもよい。
【００６１】
本発明において、Ｒｅａｄに要するアクセス時間の情報から、直接、データの実体を格納した記憶媒体をＲｅａｄした場合のアクセス時間と、Ｒｅａｄ対象のデータの一部または全てについて、Ｒｅａｄ対象のデータに対するパリティを格納した記憶媒体から読み出したパリティを用いてＲｅａｄ対象のデータを復元した場合のアクセス時間を求める機能（「冗長性利用アクセス方法列挙・アクセス時間算出機能」という）は、コマンド処理完了時間予測機能を用いて、ストレージを構成する各記憶媒体に対して、アクセス対象のデータ、もしくはアクセス対象のデータに対する冗長データへのアクセス所要時間を算出し、直接アクセス対象のデータにアクセスした場合、または直接アクセス対象のデータを格納していない記憶媒体に格納されている冗長データを利用して、アクセス対象のデータを復元した場合の、ストレージ全体での記憶媒体へのアクセス所要時間をそれぞれ算出する。
【００６２】
アクセス完了のために必要とされる全コマンドの処理に要する時間の算出結果から、コマンド処理の完了時間が早くなるように、各コマンドについて、コマンド発行先の記憶媒体を選択する機能（「アクセス先記憶媒体選択機能」）は、冗長性利用アクセス方法列挙・アクセス時間算出機能を用いて算出したアクセス先記憶媒体の選択方法毎のストレージ全体での記憶媒体へのアクセス所要時間から、コマンド処理の完了時間が早くなるように、ストレージに対するアクセス要求毎に処理するために、実際にアクセスする記憶媒体、及びコマンドキューの処理順序を決定する。
【００６３】
複数の記憶媒体にデータの冗長性を持たせたストレージでは、記憶媒体に対する障害の発生時にパリティ等の冗長データを使用し、障害が発生していない状態では直接アクセス対象のデータが格納された記憶媒体に対してアクセスする。そのため、例えばアクセス処理を早く完了したい場合に、パリティ等の冗長データからデータを復元すればより早く処理が完了できる場合であっても、冗長データを使用しない。
【００６４】
一方、本発明によれば、ストレージへのアクセス処理時に、
・直接データ（データの実体）を格納した記憶媒体と、
・冗長データを格納した記憶媒体と、
を選択的に使用する。このため、例えばアクセス処理を早く完了したい場合には、直接データを格納した記憶媒体にアクセスするか、もしくは冗長データからアクセス対象のデータを復元するか選択して、最もアクセス処理が早く完了する記憶媒体の組み合わせを選択してアクセス処理を行うことを実現し、平均アクセス所要時間を短縮する。以下、本発明を実施例について図面を参照して説明する。
【実施例】
【００６５】
図１は、本発明の一実施例の構成を示す図である。図１を参照すると、本実施例において、システム全体の構成はデータにアクセスする１台以上のホスト１、複数の記憶媒体から構成されるストレージ２、及び前記１、２を接続するネットワーク３を含む。
【００６６】
ネットワーク３は、ストレージ２に対して複数のホスト１が接続可能な形態のみならず、ホスト１とストレージ２が直接接続される形態であってもよい。
【００６７】
図２は、図１のストレージ２の構成例を示す図である。図２を参照すると、ストレージ２は、コマンド処理部２１と、データ記憶部２２と、コマンド処理作業メモリ２３と、ストレージ構成情報格納部２４と、記憶媒体アクセス履歴格納部２５と、を備えている。
【００６８】
データ記憶部２２は、複数の記憶媒体２２１と、複数の記憶媒体２２１にそれぞれ対応する複数のコマンドキュー２２２を備えている。
【００６９】
コマンド処理作業メモリ２３は、ホストからのアクセス要求を管理するためのアクセス要求管理テーブル２３１、及び、各記憶媒体２２１に対して発行予定であるコマンドを管理するためのコマンド管理テーブル２３２を備えている。
【００７０】
コマンド処理部２１は、ホスト（図１の１）から受け取ったアクセス要求を解釈し、データ記憶部２２の記憶媒体２２１に対するコマンドを発行し、ストレージ２全体の実際のアクセス処理を行う。コマンド処理部２１は概略以下のように動作する。
【００７１】
コマンド処理部２１は、アクセス要求を処理するために必要な各記憶媒体２２１に対するコマンドを生成する。
【００７２】
次に、コマンド処理部２１は、複数のアクセス要求から生成されたコマンドに対して、アクセス要求を処理するために、記憶媒体２２１へのアクセス処理の完了時間が早くなるように、スケジューリングを行い、アクセス要求毎にコマンド発行先の記憶媒体２２１の選択を行う。
【００７３】
そして、コマンド処理部２１は、スケジューリングされた実行順序にしたがって記憶媒体２２１に対するコマンドを発行し、及び、コマンド完了時にＲｅａｄアクセス要求に対する結果の送信処理を行う。
【００７４】
コマンド処理部２１は、コマンドがＲｅａｄであり、アクセス先の記憶媒体２２１が格納しているアクセス対象のデータが冗長データを含む場合、冗長データからアクセス対象のデータを復元する処理を行う。
【００７５】
コマンド処理部２１は、アクセス対象のデータが得られた後は、アクセス要求元のホスト１に対して結果を返す。
【００７６】
データ記憶部２２は、ストレージ２に格納されるデータ全てを保持し、コマンド処理部２１からの指示に従って、データのＲｅａｄ、更新（Ｗｒｉｔｅ）を行う。
【００７７】
コマンド処理作業メモリ２３は、記憶媒体２２１から読み込んだデータ、及び、ホストから書き込みを要求されたデータを、コマンド処理部２１からの指示により格納する。
【００７８】
図２に示す例では、コマンド処理作業メモリ２３は、アクセス要求管理テーブル２３１、及びコマンド管理テーブル２３２を備えているが、。データ記憶部２２に含まれるコマンドキュー２２２を、コマンド処理作業メモリ２３に格納する構成としてもよい。
【００７９】
ストレージ構成情報格納部２４は、
ストレージ２全体の記憶領域と、記憶領域の実体であるデータ記憶部２２を構成する複数の記憶媒体２２１と、の対応関係を格納する。
【００８０】
また、ストレージ構成情報格納部２４は、
各記憶媒体２２１のアクセス時間の算出に影響する物理的、論理的な構成情報などアクセス位置に対するアクセスへの応答時間特性に関する情報を格納する。記憶媒体のアクセス応答時間特性情報として、例えば記憶媒体２２１がハードディスクである場合、
・ディスクプラッタ上のブロックの分布状況、
・ディスクプラッタ数、
・ディスクヘッドのシーク距離とシーク時間との対応関係、
の情報を格納する。
【００８１】
なお、図２に示す例では、ストレージ構成情報格納部２４は、ストレージ２内に独立して存在しているが、前記コマンド処理作業メモリ２３内に格納される形態であってもよい。
【００８２】
記憶媒体アクセス履歴格納部２５は、データ記憶部２２に含まれる記憶媒体２２１に対して発行され、実行を完了したコマンドのアドレスとアクセス長を履歴として格納する。
【００８３】
コマンド処理部２１は、記憶媒体２２１がコマンド処理を完了する毎に、記憶媒体アクセス履歴格納部２５における履歴を更新する。
【００８４】
図３は、図２のアクセス要求管理テーブル２３１を構成情報の一例を示す図である。アクセス要求管理テーブル２３１は、ホスト１（図１参照）からの各アクセス要求に付随する情報を保持する。
【００８５】
アクセス要求に付随する情報として、
・ホストからコマンド処理部２１がアクセス要求を受けた際に付与するアクセス要求毎に固有なＩＤと、
・アクセス要求がＲｅａｄであるかＷｒｉｔｅであるかのアクセス種別（Ｒ／Ｗ）と、
・アクセス先のストレージ２全体におけるアドレス空間内での先頭ブロックのアドレスと、
・アクセス長と、
・コマンド処理作業メモリ２３上のデータ格納先アドレスと、
・アクセス要求の要求元ホストと、
・アクセス要求を処理するために記憶媒体２２１に対して発行するコマンドを指し示すＩＤである対応コマンドＩＤと、
を記録する。
【００８６】
１つのアクセス要求を処理するために記憶媒体２２１に対して発行する複数のコマンドが発行される場合、１つのアクセス要求ＩＤに対して、複数の対応コマンドＩＤが登録される。
【００８７】
図３のデータ格納先アドレスは、アクセス要求が、
・Ｒｅａｄの場合、ホスト１（図１参照）に結果として送信するデータをコマンド処理部２１で格納するために一時的に確保された領域（バッファ領域）のアドレスを指し示し、
・Ｗｒｉｔｅの場合、ホスト１（図１参照）から書き込みが要求されたデータをコマンド処理部２１で保持するための領域（バッファ領域）のアドレスを指し示す。
【００８８】
アクセス要求管理テーブル２３１は、ホスト１（図１参照）からの各アクセス要求に付随する情報が必要になる際に、コマンド処理部２１によって参照される。
【００８９】
図４は、図２のコマンド管理テーブル２３２を構成情報の一例を示す図である。コマンド管理テーブル２３２は、ホスト１からの各アクセス要求を処理するために各記憶媒体２２１に対して発行されるコマンドに付随する情報を保持する。コマンド管理テーブル２３２は、各記憶媒体２２１に対して個別に確保する。
【００９０】
記憶媒体２２１に対するコマンドに付随する情報として、
・コマンド毎に固有なＩＤと、
・コマンドがＲｅａｄであるかＷｒｉｔｅであるかのアクセス種別（図４ではＲ／Ｗと表現）と、
・アクセス先の記憶媒体２２１内での先頭ブロックのアドレスと、
・アクセス長と、
・コマンド処理作業メモリ２３上のデータ格納先アドレスと、
・コマンド発行の原因となっているアクセス要求管理テーブル２３１上のアクセス要求に付与された対応アクセス要求ＩＤと、
・記憶媒体内コマンドＩＤと、
・コマンドを記憶媒体２２１に対して発行した時間を表す発行時間と、
・コマンドの実行状態
を記録する。
【００９１】
前記情報のうち、データ格納先アドレスは、アクセス要求が、
・Ｒｅａｄの場合、記憶媒体２２１から読み出したデータを格納するために確保された領域のアドレスを指し示し、
・Ｗｒｉｔｅの場合、記憶媒体２２１に対して書き込むデータを保持する領域のアドレスを指し示す。
【００９２】
対応アクセス要求ＩＤは、コマンド発行の原因となっているアクセス要求管理テーブル２３１上のアクセス要求に付与されたアクセス要求毎に固有なＩＤ（図３参照）である。
【００９３】
記憶媒体内コマンドＩＤは、コマンド処理部２１が、コマンドを記憶媒体２２１に対して発行した際に、記憶媒体側からコマンド実行管理用のタグ情報として付与されるＩＤである。
【００９４】
実行状態は、コマンドの状態を管理する情報であり、待機、削除、発行、完了の状態をとる。
【００９５】
待機は、コマンドが現在コマンドキュー２２２内で発行に備えて待機している状態である。
【００９６】
削除は、コマンドが現在コマンドキュー２２２内に存在するものの実際には発行しない状態である。
【００９７】
発行は、コマンドが記憶媒体２２１で発行済であることを表す。
【００９８】
完了はコマンドの完了通知を受け取って処理が完了した状態を表す。
【００９９】
コマンド管理テーブル２３２は、各記憶媒体２２１に対して、発行予定または発行済のコマンドに付随する前記情報が必要になる際に、コマンド処理部２１から参照される。
【０１００】
図５は、図２のコマンドキュー２２２を構成する情報を表す図である。コマンドキュー２２２は、記憶媒体２２１に対して発行されるコマンドの発行順序を保持する。すなわち、記憶媒体２２１に対して発行されるコマンドの順にコマンドＩＤ（図３の記憶媒体内コマンドＩＤ）を保持する。コマンドキュー２２２は、各記憶媒体２２１に対して個別に確保する。なお、記憶媒体へのアクセス実行時（コマンドの実行状態が発行）にコマンドキュー２２２からコマンドを取り出してもよい。
【０１０１】
図６乃至図１１は、図１乃至図５を参照して説明した本実施例の動作を説明する流れ図である。特に制限されないが、以下では、複数の記憶媒体として、複数の記憶媒体のある領域のデータ（データの実体）に対して、残りの少なくとも１つの記憶媒体の対応領域にパリティが格納され、複数の記憶媒体の１つに障害発生時にも、残りの記憶媒体からデータを復旧可能な冗長構成の記憶媒体、あるいは、複数の記憶媒体間でデータを重複して記憶する冗長構成を例に説明する。なお、図６乃至図１１に示した処理手順を実行するコマンド処理部２１の機能・処理は、ストレージ２のコンピュータ上で実行されるプログラムで実現するようにしてもよいことは勿論である。
【０１０２】
まず、図６の流れ図を参照して、本実施例において、ホスト１からストレージ２へアクセス要求が行われた際の動作について説明する。ホスト１からストレージ２へアクセス要求が行われる毎に、図１、図２のシステム全体が以下の動作を実行する。
【０１０３】
コマンド処理部２１は、受け取ったホスト１からのストレージ２へのアクセス要求を解釈して、アクセス要求管理テーブル２３１にアクセス要求を登録する（図６のＳ１１）。
【０１０４】
ホスト１から受け取ったアクセス要求がＷｒｉｔｅである場合（図６のＳ１２のＹｅｓ分岐）、コマンド処理部２１は、アクセス要求に続いてホスト１から送られてくる書き込み対象のデータを受け取り、コマンド処理作業メモリ２３上の空き領域に記憶し、アクセス要求管理テーブル２３１上の、該アクセス要求のデータ格納アドレスを更新する。
【０１０５】
コマンド処理部２１は、ホスト１からの書き込みデータの受け取り、コマンド処理作業メモリ２３上の空き領域への記憶が完了すると、ホスト１に対してアクセス要求の処理が完了したことを通知する（図６のＳ１３）。
【０１０６】
ホスト１から受け取ったアクセス要求がＲｅａｄである場合（図６のＳ１２のＮｏ分岐）、コマンド処理部２１は、ステップＳ１３を実行せずに、ステップＳ１４を実行する。
【０１０７】
コマンド処理部２１は、ホスト１からの該アクセス要求を処理するために必要な各記憶媒体２２１に対するコマンドを生成する。より詳細には、ホスト１が指定するストレージ２のアクセス先アドレスのデータ格納先の実体となる領域、及び、冗長データを格納する領域に対してデータのＲｅａｄ／Ｗｒｉｔｅを行うためのコマンドを、各記憶媒体２２１に対して生成する。
【０１０８】
アクセス要求がＲｅａｄである場合、ホスト１が要求するデータの実体を格納する記憶媒体２２１に対して、データの実体を読み出すためのＲｅａｄコマンドを生成する。併せて、ホスト１が要求するデータの実体に対するパリティデータを持つ記憶媒体２２１に対しても、パリティデータを読み出すためのＲｅａｄコマンドを生成する。
【０１０９】
アクセス要求がＷｒｉｔｅである場合、データの格納先の実体となる領域を持つ全ての記憶媒体２２１に対して、データを格納するためのＷｒｉｔｅコマンドを生成する。
【０１１０】
またＷｒｉｔｅアクセス要求の処理に伴い、パリティデータが更新される場合は、記憶媒体２２１に格納されたパリティデータを再生成するために不足しているデータを読み出すためのＲｅａｄコマンド、及び、記憶媒体２２１に格納されたパリティデータを更新するＷｒｉｔｅコマンドを併せて生成する。
【０１１１】
なお、パリティデータを更新するためのＷｒｉｔｅコマンドで書き込むデータはこの時点では存在しない。
【０１１２】
コマンド処理部２１は、ストレージ２全体のアドレス空間と、各記憶媒体２２１の記憶領域との対応関係の情報を、ストレージ構成情報格納部２４に格納された、ストレージ２の構成情報から取得する。
【０１１３】
コマンド処理部２１は、記憶媒体２２１に対して生成したコマンドを、コマンド管理テーブル２３２に登録される。コマンド処理部２１は、コマンドキュー２２２の末尾に、記憶媒体に対して発行予定のコマンドとして追加する（図６のＳ１４）。
【０１１４】
コマンド処理部２１は、コマンドキュー２２２上に登録され記憶媒体２２１に対して発行予定のコマンド発行順序のスケジューリング、及び、実際に発行するコマンドの選択を行う。
【０１１５】
コマンド処理部２１は、コマンドキュー２２２に投入されたコマンドのスケジューリング、及び実際に発行するコマンドの選択を行う（図６のＳ１５）。
【０１１６】
より詳細には、コマンド処理部２１は、
アクセス要求管理テーブル２３１に登録された全てのアクセス要求に対する処理の完了が早くなるように、コマンド発行順序の変更を行う。
【０１１７】
また、コマンド処理部２１は、コマンドキュー２２２に投入されたコマンドのうち、不要なコマンドを検出した場合、コマンド管理テーブル２３２上の実行状態を「削除」に変更する。
【０１１８】
コマンド処理部２１は、記憶媒体２２１に発行され、記憶媒体２２１への実際のアクセス処理が完了していない（実行待ちの）コマンドの数が予め定められた所定数（閾値）以下である場合、コマンド処理部２１は、コマンドキュー２２２の先頭から記憶媒体２２１に対して発行中のコマンド数が予め所定数になるまで、コマンドの発行処理を行い、コマンド管理テーブル２３２上の実行状態を「発行」に変更し、コマンド管理テーブル２３２の対応するコマンドＩＤの発行時間の欄を、コマンド発行時の時間に設定する。
【０１１９】
あるいは、コマンド処理部２１は、記憶媒体２２１への実際のアクセス処理が完了していない（実行待ちの）コマンドの数が予め定められた所定数（閾値）以下であるか、又は、記憶媒体に対して発行済みの先行アクセスコマンドの合計時間の予測結果が予め定められた時間以下のいずれかが成り立つ場合、アクセスコマンドを前記記憶媒体に発行するようにしてもよい。なお、記憶媒体に対して発行済みの先行アクセスコマンドの合計時間の予測結果は、当該先行アクセスコマンドを記憶媒体に対して発行する前のスケジュール時点で計算されたアクセス時間の合計に基づき、コマンド処理部２１で算出してもよいし、あるいは、記憶媒体がコマンド処理部２１から発行されたアクセスコマンドの実行順序をスケジュールする機能（例えば記憶媒体が前述したエレベータ・アルゴリスムを実装）を具備している場合において、コマンド処理部２１が、記憶媒体側から当該先行アクセスコマンドの合計時間の予測結果を取得するようにしてもよい。
【０１２０】
コマンド処理部２１は、実行状態が「削除」であるコマンドについては、コマンド管理テーブル２３２上の対応するコマンドＩＤの実行状態の欄を「完了」に変更し、発行処理を行わない（図６のＳ１６）。
【０１２１】
以上のステップＳ１１からＳ１６までの処理を行い、ホスト１からストレージ２へアクセス要求が行われた際の処理が終了する。
【０１２２】
次に図７を参照して、本実施例において、コマンド処理部２１が、記憶媒体２２１で発行中のコマンドについて完了通知を受け取った際の処理手順について説明する。
【０１２３】
コマンド処理部２１は、記憶媒体２２１からコマンド完了通知（記憶媒体内コマンドＩＤを含む）を受け取ると、コマンド管理テーブル２３２を参照して、記憶媒体内コマンドＩＤから、Ｒ／Ｗ欄を参照し、完了したコマンドの種類を判別する（図７のＳ２１）。
【０１２４】
完了したコマンドがＲｅａｄであった場合（図７のＳ２２のＹｅｓ分岐）、コマンド処理部２１は、Ｒｅａｄコマンドの完了時の処理を行う（図７のＳ２３）。ステップＳ２３の詳細は図８を参照して後述される。
【０１２５】
完了したコマンドがＷｒｉｔｅであった場合（図７のＳ２２のＮｏ分岐）、コマンド処理部２１は、Ｗｒｉｔｅコマンドの完了時の処理を行う（図７のＳ２４）。ステップＳ２４の詳細は図９を用いて後述される。
【０１２６】
コマンド処理部２１は、コマンド管理テーブル２３２の該当するコマンドの発行時間の欄を参照して、完了したコマンドが発行中のコマンド内で最も早く発行されたものであるかを判定する。すなわち、コマンド処理部２１は、コマンド発行の順序と、コマンド完了順序が異なっているかを判定する。
【０１２７】
コマンド発行の順序とコマンド完了順序が異なっていた場合に、コマンド処理部２１は、例えば図６のステップＳ１５と同様の処理を行う（図７のＳ２５）。すなわち、コマンド処理部２１は、コマンドキュー２２２に投入されたコマンドの再スケジューリングを行う。
【０１２８】
ステップＳ２５の実行後、コマンド処理部２１は、図６のステップＳ１６と同様の処理を実行する（図７のＳ２６）。すなわち、コマンド処理部２１は、記憶媒体２２１に発行され、記憶媒体２２１への実際のアクセス処理が完了していない（実行待ちの）コマンドの数が予め定められた所定数以下である場合、コマンド処理部２１は、コマンドキュー２２２の先頭から記憶媒体２２１に対して発行中のコマンド数が予め所定数になるまで、コマンドの発行処理を行い、コマンド管理テーブル２３２上の実行状態を「発行」に変更し、コマンド管理テーブル２３２の対応するコマンドＩＤの発行時間の欄を、コマンド発行時の時間に設定する。
【０１２９】
以上のステップＳ２１からＳ２６までの処理を行い、コマンド処理部２１が、記憶媒体２２１で発行中のコマンドについて完了通知を受け取った際の処理が終了する。
【０１３０】
図８は、図７のステップＳ２３の詳細フロー図である。次にコマンド処理部２１における図７のステップＳ２３における更に詳細な処理手順について説明する。
【０１３１】
コマンド処理部２１は、コマンド管理テーブル２３２における完了したコマンドの実行状態の欄を「完了」に変更する。また記憶媒体アクセス履歴格納部２５にアクセスし、記憶媒体２２１が実行した命令の履歴情報を更新する（図８のＳ２３０１）。
【０１３２】
コマンド処理部２１は、記憶媒体２２１から読み出されたデータを、コマンド管理テーブル２３２で指示されたデータ格納先アドレスの指し示すコマンド処理作業メモリ２３上の領域に格納する（図８のＳ２３０２）。
【０１３３】
コマンド処理部２１は、アクセス要求管理テーブル２３１、及び、コマンド管理テーブル２３２を参照して、コマンドの発生源となったアクセス要求を処理するために必要なコマンドが全て完了しているかを確認する。例えばホスト１からの元のアクセス要求がＲｅａｄであり、記憶媒体２２１がＲＡＩＤ１の構成である場合には、少なくとも１つの記憶媒体２２１からデータの読み出しが完了しさえすれば、アクセス要求の処理が可能である。完了したコマンドの読み出し結果のみでアクセス要求を処理可能であり、必要なコマンドは全て完了していること実質的に等価となる。
【０１３４】
一方、ホスト１からの元のアクセス要求が同じくＲｅａｄであり、記憶媒体２２１が４個の記憶媒体からなるＲＡＩＤ５の構成である場合には、読み出し対象のデータの実体が格納された全ての記憶媒体２２１に対するアクセスが完了するか、または任意の３個分のパリティデータを利用して要求されたデータを復元するかいずれかにより処理が可能である。
【０１３５】
そのため、この場合は、データの実体が全て読み出されているか、または任意の３個の記憶媒体からデータが読み出されているか確認することで、必要なコマンドが全て完了しているか確認が可能である。コマンド処理部２１は、記憶媒体２２１の構成情報をストレージ構成情報格納部２４から取得する（図８のＳ２３０３）。
【０１３６】
コマンド処理部２１は、ステップＳ２３０３における確認の結果、アクセス要求に必要なコマンドが全て完了していない場合（図８のＳ２３０４のＮｏ分岐）、ステップＳ２３の処理を終了する。
【０１３７】
ステップＳ２３０３の結果、アクセス要求に必要なコマンドが全て完了している場合（図８のＳ２３０４のＹｅｓ分岐）、コマンド処理部２１は、次ステップＳ２３０５の判定を実行する。
【０１３８】
コマンド発行の元となったアクセス要求がＷｒｉｔｅである場合（図８のＳ２３０５のＹｅｓ分岐）、コマンド処理部２１は、コマンド処理作業メモリ２３上のＲｅａｄ結果と、ホスト１からＷｒｉｔｅが要求された書き込みデータからパリティデータを再計算する（Ｓ２３１１）。すなわち、コマンド処理部２１は、コマンドの発生の元となったアクセス要求を処理するために実行したＲｅａｄコマンドの結果を、コマンド管理テーブル２３２のデータ格納先アドレスを参照してコマンド処理作業メモリ２３から読み出す。読み出したデータとホスト１から書き込みを指示されたデータから、コマンドの発生源となったＷｒｉｔｅアクセス要求に伴って発生する更新後のパリティデータの再計算処理を行い、結果をコマンド処理作業メモリ２３の空き領域に格納する。
【０１３９】
そして、コマンド処理部２１は、再計算したパリティデータをＷｒｉｔｅ対象のデータとするように、コマンド管理テーブル２３２を更新し、パリティを格納する記憶媒体２２１に対するＷｒｉｔｅコマンドをコマンドキュー２２２に投入し、パリティデータの書き込みを行う（Ｓ２３１２）。すなわち、コマンド処理部２１は、ステップＳ２３１１で計算されたデータがパリティデータ更新用に生成されたコマンドで使用されるように、コマンド管理テーブル２３２のパリティデータ更新用コマンドに対するデータ格納先アドレスを更新して、ステップＳ２３の処理を終了する。
【０１４０】
コマンド発行の元となったアクセス要求がＲｅａｄである場合（図８のＳ２３０５のＮｏ分岐）、コマンド処理部２１は、ステップＳ２３０６の判定を実行する。コマンドの発生の元となったアクセス要求を処理するために必要なコマンドにおいて、パリティの読み出しを行っていない、つまり、コマンド全てが要求されたデータの実体に対するＲｅａｄである場合（図８のＳ２３０６のＮｏ分岐）、コマンド処理部２１は、ステップＳ２３０８を実行する。
【０１４１】
コマンドの発生源となったアクセス要求を処理するために必要なコマンドにおいて、パリティの読み出しを行っている場合（図８のＳ２３０６のＹｅｓ分岐）、コマンド処理部２１は、コマンドの発生元のアクセス要求を処理するために実行したコマンドのＲｅａｄ結果を、コマンド管理テーブル２３２のデータ格納先アドレスを参照してコマンド処理作業メモリ２３から読み出す。読み出したパリティデータを用いてホスト１から要求されたデータを計算する（図８のＳ２３０７）。パリティからのデータの復元方法は、例えば記憶媒体２２１の構成がＲＡＩＤ５である場合は冗長関係にあるデータ間でのＸＯＲ演算で復元可能である等、記憶媒体２２１の構成方法によって異なる。そのため記憶媒体２２１の構成情報をストレージ構成情報格納部２４から取得する。
【０１４２】
コマンド処理部２１は、生成または読み出された、ホスト１からＲｅａｄ要求されたデータを、ホストにそのまま送信可能な形に変換、構成する（図８のＳ２３０８）。
【０１４３】
コマンド処理部２１は、アクセス要求元のホスト１に対してステップＳ２３０８で得られた結果を送信する（図８のＳ２３０９）。
【０１４４】
コマンド処理部２１は、コマンド管理テーブル２３２から、処理が完了した着目中の同一アクセス要求に由来する登録された全コマンドのデータを削除する。また、コマンド処理部２１は、アクセス要求管理テーブル２３１から、処理が完了した着目中のアクセス要求に関するデータを削除する。
【０１４５】
コマンド処理部２１は、マンド管理テーブル２３２から削除したコマンド、アクセス要求管理テーブル２３１から削除したアクセス要求が使用していたコマンド処理作業メモリ上の領域を解放し、ステップＳ２３の処理を終了する（図８のＳ２３１０）。
【０１４６】
以上のステップＳ２３０１からＳ２３１２までの処理を行い、コマンド処理部２１の、前記ステップＳ２３における処理が終了する。
【０１４７】
次に図９を参照してコマンド処理部２１の、図７のステップＳ２４における更に詳細な処理手順について説明する。
【０１４８】
コマンド処理部２１は、ステップＳ２３０１と同様の処理を実行する（図９のＳ２４１）。
【０１４９】
続いてコマンド処理部２１は、ステップＳ２３０３と同様の処理を実行する（図９のＳ２４２）。
【０１５０】
ステップＳ２４２における確認の結果、アクセス要求に必要なコマンドが全て完了していない場合（図９のＳ２４３のＮｏ分岐）、ステップＳ２４の処理を終了する。
【０１５１】
ステップＳ２４２における確認の結果、アクセス要求に必要なコマンドが全て完了している場合（Ｓ２４３のＹｅｓ分岐）、コマンド処理部２１はステップＳ２３１０と同様の処理を実行して、ステップＳ２４の処理を終了する（図９のＳ２４４）。
【０１５２】
以上のステップＳ２４１からＳ２４４までの処理を行い、コマンド処理部２１の、前記ステップＳ２４における処理が終了する。
【０１５３】
次に図１０を参照して、図６、図７のステップＳ１５、Ｓ２５における、コマンド処理部２１のコマンド発行順序のスケジューリング、及び実際に発行するコマンドの選択の、更に詳細な処理手順について説明する。
【０１５４】
コマンド処理部２１は、コマンドキュー２２２に存在するコマンドの発行順序を、対応する記憶媒体２２１の特性に合わせて整列させる。
【０１５５】
例えば記憶媒体２２１がハードディスクで構成される場合、前記非特許文献２で述べられたＳＣＡＮまたはエレベータアルゴリズムと呼ばれる方法でコマンドの発行順序を整列することが可能である。コマンドを整列することによって、ハードディスクのヘッドの移動距離が短縮されることで、記憶媒体２２１であるハードディスクについて複数コマンドを発行した場合の全体のアクセス時間の短縮が可能である。
【０１５６】
但し、コマンドキュー２２２がＷｒｉｔｅコマンドを含む場合、コマンド処理部２１は、後に生成されたコマンドがＷｒｉｔｅコマンドと同一領域をアクセスするか判定を行う。後に生成されたコマンドとＷｒｉｔｅコマンドがアクセスする領域が重なる場合、コマンドの順序が入れ替わると、アクセス要求の処理に矛盾が生じる。このため、コマンド処理部２１は、これらのコマンドの順序が入れ替わることを禁止する。
【０１５７】
また、コマンド処理部２１は、記憶媒体２２１のアクセス特性、物理的特性に応じたコマンドの整列処理を行うためには記憶媒体２２１の種類、アクセス特性に関する情報が必要である。コマンド処理部２１は、これらの情報をストレージ構成情報格納部２４から取得する（図１０のＳ３１）。
【０１５８】
コマンドキュー２２２に対するコマンドの整列処理の後、コマンド処理部２１は、各記憶媒体２２１に対してコマンドキュー２２２に属するコマンドを順序通りに実行した場合に全ての処理が完了するまでの予測時間を算出する。
【０１５９】
例えば記憶媒体２２１がハードディスクで構成される場合、各コマンドの処理に要する時間はヘッドのシーク時間、コマンドがアクセスを行うブロックがヘッドの位置まで到着するために要するディスクの回転待ち時間、実際にアクセス対象のブロックに対してアクセスを行う時間の３種類の処理時間の合計から計算可能である。また、全コマンドの処理に要する時間は各コマンドの処理時間の合計で表される。
【０１６０】
コマンド処理部２１で記憶媒体２２１の処理完了時間を算出するためには、アクセス特性、アクセス時間の情報が必要とされるが、コマンド処理部２１は、これらの情報をストレージ構成情報格納部２４から取得する（図１０のＳ３２）。
【０１６１】
コマンド処理部２１は、ステップＳ３２におけるアクセス完了時間予測の結果を用いて、例えば記憶媒体２２１から最も処理完了時間が遅いと予測された記憶媒体に着目する。
【０１６２】
コマンド処理部２１は、最も処理完了時間が遅いと予測された記憶媒体に対して、
コマンドキュー２２２に含まれる発行予定のコマンドのうち、
・コマンドを発行しなくてもホスト１からのアクセス要求を処理することが可能であり、且つ、
・記憶媒体へのアクセス処理時間の遅延の原因となるコマンドについて削除状態への変更を試みる（図１０のＳ３３）。
【０１６３】
コマンド処理部２１は、ステップＳ３３の処理の結果、記憶媒体２２１に対して発行するコマンドの削除状態への変更に成功した場合（Ｓ３４のＮｏ分岐）、ステップＳ３１に戻って処理を続ける。
【０１６４】
ステップＳ３３の処理の結果、記憶媒体２２１に対して発行するコマンドの削除状態への変更に失敗した場合（Ｓ３４のＹｅｓ分岐）、コマンド処理部２１は、前記ステップＳ３３では処理完了時間が最も遅いと予測される記憶媒体２２１に限定していたコマンドの削除処理を、他の記憶媒体２２１についても行う。
【０１６５】
コマンド処理部２１は、コマンドキュー２２２に含まれる発行予定のコマンドのうち、コマンドを発行しなくてもホスト１からのアクセス要求を処理することが可能であるコマンドの削除状態への変更を試みる。
【０１６６】
削除可能であるかの判断基準は、記憶媒体２２１の構成、冗長データの格納形態により異なるため、コマンド処理部２１は、記憶媒体２２１の構成情報をストレージ構成情報格納部２４から取得する。
【０１６７】
削除対象となるコマンドの例を次に示す。
【０１６８】
ホスト１からの元のアクセス要求がＲｅａｄであり、記憶媒体２２１がＲＡＩＤ１の構成である場合は、１つ以上の記憶媒体２２１からデータが読み出すことができれば、アクセス要求を処理可能である。そのため、このアクセス要求に対するコマンドが複数の記憶媒体２２１に対して存在する場合、１つのコマンドを除いて、他のコマンドを削除状態にすることが可能である。
【０１６９】
一方、ホスト１からの元のアクセス要求が同じくＲｅａｄであり、記憶媒体２２１が４個の記憶媒体２２１からなるＲＡＩＤ５の構成である場合、読み出し対象のデータの実体が格納された全ての記憶媒体２２１に対するアクセスが完了するか、または、任意の３個分のパリティデータを利用して要求されたデータを復元するか、いずれかにより処理が可能である。このため、このアクセス要求に対するコマンドが４個の記憶媒体２２１に対して全てに発行予定である場合、１個のコマンドは削除状態にしても読み出し対象のデータをパリティから生成することが可能である。よって４個の記憶媒体に対する４個のコマンドキュー２２２のうち任意の１つに含まれるコマンドを削除状態にすることが可能である（図１０のＳ３５）。
【０１７０】
以上のステップＳ３１からＳ３５までの処理を行い、コマンド処理部２１の、前記ステップＳ１５、Ｓ２５におけるコマンド発行順序のスケジューリング、及び実際に発行するコマンドの選択の処理が終了する。
【０１７１】
次に図１１、図１２を参照してコマンド処理部２１による、図１０のステップＳ３３における更に詳細な処理手順について説明する。図１２（ｂ）は、コマンドとアーム位置の対応一覧、図１２（ａ）は、図１２（ｂ）のコマンドをエレベータアルゴリズムによって整列した場合のシーク動作を説明するための模式図である。
【０１７２】
コマンド処理部２１は、コマンドキュー２２２に含まれる記憶媒体２２１に発行予定のコマンドから最も大きな処理時間をもたらす原因となるコマンドに着目して、後続のステップでコマンドが削除可能であるか判定するために、判定対象のコマンドを選択する。
【０１７３】
最も大きな処理時間をもたらすコマンドは、例えば記憶媒体２２１がハードディスクで構成される場合、非特許文献２で述べられたエレベータアルゴリズムによってコマンドの実行順序が決定される限り、アクセス時のディスクのヘッド位置が初期のヘッドの位置から最も遠くなるコマンドである。
【０１７４】
図１２の例では、コマンドＡ、Ｂ、Ｃのうち、コマンドＣを削除した場合に最もシーク距離が削減されるため、コマンドＣが削除可能であるかの判定対象として選択される。
【０１７５】
このように、ヘッドの初期位置から最も離れたブロックにアクセスするコマンドを削除することによって、コマンドキュー２２２に含まれる全てのコマンドを実行するために必要なシーク距離、シーク時間の削減が可能である。
【０１７６】
また、コマンド処理部２１において、判定対象のコマンド選択処理が繰り返し実行される場合、一度判定対象となったコマンドは選択せず、その次に大きな処理時間をもたらす原因となるコマンドを選択する。例えば、記憶媒体２２１がハードディスクで構成される場合、既に判定対象となったコマンド以外でヘッドの初期位置から最も離れたコマンドを選択する。
【０１７７】
加えて記憶媒体２２１がハードディスクである場合は、ヘッドの初期位置から最も離れたブロックにアクセスするコマンド、及び２番目に離れたブロックにアクセスするコマンドが削除できなかった場合、全コマンドを処理するために必要なシーク距離の削減は不可能である。
【０１７８】
このため、これらの２つのコマンドが削除できなかった場合、その時点でステップＳ３３を終了してもよい（図１１のＳ３３１）。
【０１７９】
ステップＳ３３１において判定対象のコマンドが存在しなかった場合（図１１のＳ３３２のＹｅｓ分岐）、コマンド処理部２１はステップＳ３３の処理を終了する。
【０１８０】
ステップＳ３３１において判定対象のコマンドが存在した場合（図１１のＳ３３２のＮｏ分岐）、コマンド処理部２１は、ステップＳ３３１で着目したコマンドが削除可能であるかどうかの判定を行う。
【０１８１】
コマンドが削除可能であるかは、着目したコマンドを実行しなかった場合に、着目したコマンドの発生元であるホスト１からのアクセス要求に対する処理が可能であるかどうかを調べることで判定可能である。削除可能であるかの判断基準は、記憶媒体２２１の構成、冗長データの格納形態により異なるため、コマンド処理部２１は、記憶媒体２２１の構成情報をストレージ構成情報格納部２４から取得する。
【０１８２】
コマンドが削除可能であるかの具体的な判定の一例は以下に示す通りである。例えば、判定対象のコマンドの発生源である、ホスト１からの元のアクセス要求がＲｅａｄであり、記憶媒体２２１がＲＡＩＤ１の構成である場合は、１つ以上の記憶媒体２２１からデータが読み出せればアクセス要求を処理可能である。
【０１８３】
コマンド処理部２１が判定を行う時点で、コマンド管理テーブル２３２を参照して、元のアクセス要求に対して削除判定対象以外のコマンドが既に削除状態となっている場合、判定対象のコマンドは削除が不可能である。
【０１８４】
逆に、削除判定対象以外のコマンドが１つ以上削除状態以外でコマンドキュー２２２に存在する場合、判定対象のコマンドによらずアクセス要求に対する処理を実行可能であり、コマンドの削除が可能である（図１１のＳ３３３）。
【０１８５】
ステップＳ３３３において、コマンドの削除が不可能と判定された場合（図１１のＳ３３４のＮｏ分岐）、コマンド処理部２１は、ステップＳ３３１に戻って処理を行う。
【０１８６】
ステップＳ３３３において、コマンドの削除が可能と判定された場合（図１１のＳ３３４のＹｅｓ分岐）、コマンド処理部２１は、ステップＳ３３の処理を終了する。
【０１８７】
上記ステップＳ１１からＳ１６、ステップＳ２１からＳ２６、及びステップＳ３１からＳ３５までの第１の動作例として、ストレージ２のデータ記憶部２２に含まれる記憶媒体２２１がハードディスク２台から構成され、これらのディスクがＲＡＩＤ１構成を採る場合の、ホスト１からストレージ２に対してＲｅａｄアクセス要求が行われた場合の動作について、図２乃至図１１、及び、図１３、図１４を参照して説明する。
【０１８８】
データ記憶部２２の記憶媒体２２１を構成するハードディスクは、図１３に示したブロック配置と以下の特徴を持つディスクを例として用いる。図１３（ａ）にはプラッタ上のトラック配置（トラック＃０〜＃１００１）、図１３（ｂ）にはトラック上のブロック配置（ブロック＃０〜＃９９９）が模式的に示されている。
【０１８９】
まず、アクセス先アドレスに対する応答時間の問い合わせに対応する機能を持たない。ハードディスクのプラッタ、ヘッドの数は共に１である。
【０１９０】
アクセスへの応答時間はハードディスクのシーク時間、ハードディスクの回転待ち時間、アクセス時間の合計に等しく、ハードディスクのシーク距離とシーク時間は比例する。
【０１９１】
ハードディスクの最外周から最内周までのシーク時間は１０ｍｓとする。
【０１９２】
またハードディスクの回転待ち時間とアクセス時間の合計を４ｍｓとする。
【０１９３】
ブロックを円周上に並べたトラックあたりのブロック数を全てのトラックで１０００とする。
【０１９４】
また、トラックのプラッタ上の配置間隔は等間隔であり、プラッタ上の総トラック数を１０００１とする。
【０１９５】
プラッタ上のトラックに対して最外周から順に０番を起点に番号を割り当てるものとする。
【０１９６】
ハードディスク上のブロックに対して最外周のトラックから順番にアドレス番号が割り当てられる。
【０１９７】
例えば最外周のトラックには、アドレス０から９９９までのブロックが含まれ、最外周から２番目のトラックにはアドレス１０００から１９９９までのブロックが含まれる。
【０１９８】
また、記憶媒体２２１を構成する２台のハードディスクをそれぞれディスクＡ、ディスクＢとする。
【０１９９】
ストレージ２全体のアドレス空間と２台のハードディスクのアドレス空間との対応関係は図７に示した通りである。２台のハードディスクはＲＡＩＤ１構成であることから共通のデータを保持し、ストレージ２全体のアドレス空間と２台の各ディスクの記憶領域は一致する。つまりストレージ２全体のアドレス空間のあるアドレス上のブロックのデータは、各ディスクの同一アドレスに存在するブロックのデータと一致する。
【０２００】
記憶媒体２２１を構成する２台のハードディスクＡ、Ｂについて、各ディスクのヘッドの初期位置、つまり直前のアクセス位置は、ディスクＡが最外周のトラック（０番のトラック）、ディスクＢが最内周のトラック（１００００番のトラック）上であるとする。
【０２０１】
また、各ディスクに対して同時に投入する命令は１個とする。
【０２０２】
この状態でホスト１がストレージ２のアドレス１００００００、８００００００、４００００００のブロックのデータに対して１ｍｓ間隔で１ブロック分のアクセス長のＲｅａｄ要求を出すものとする。ホスト１からのＲｅａｄアクセス要求を順番に（Ａ）、（Ｂ）、（Ｃ）とする。
【０２０３】
まずストレージ２がアクセス要求（Ａ）を受け取る際の動作について説明する。
コマンドはストレージ２のコマンド処理部２１によって解釈される。
【０２０４】
アクセス要求（Ａ）のアクセスの種類、アクセス先頭ブロック、アクセス長、要求元ホストの情報がアクセス要求管理テーブル２３１に登録される。
【０２０５】
コマンド処理部２１が受け取ったアクセス要求はＲｅａｄであるため、次に、コマンド処理部２１はアクセス要求を処理するための記憶媒体２２１に対するコマンドを生成する。
【０２０６】
ストレージ２のアドレス空間と、記憶媒体２２１を構成するディスクＡ、Ｂの記憶領域との対応関係は、図１４に示した通りである。
【０２０７】
よって、ストレージ２のアドレス１００００００に対するアクセスは、ディスクＡ、Ｂのアドレス１００００００のブロックに対するＲｅａｄコマンドによって実現される。
【０２０８】
コマンド処理部２１は、ディスクＡ、Ｂに対する前記Ｒｅａｄコマンドについて、アクセスの種類、アクセス先頭ブロック、アクセス長、コマンド処理作業メモリ２３上に確保された領域であるデータの格納先アドレス、コマンドの生成元であるアクセス要求を表すＩＤ、そして実行状態（「待機」状態）をディスクＡ、Ｂそれぞれに対応したコマンド管理テーブル２３２に登録する。同時にディスクＡ、Ｂそれぞれに対応したコマンドキュー２２２の末尾に前記Ｒｅａｄコマンドを投入する。
【０２０９】
コマンド処理部２１は、コマンドの生成が完了した後に、ディスクＡ、Ｂそれぞれに対応したコマンドキュー２２２に含まれるコマンドのスケジューリングを行う。ディスクＡ、Ｂそれぞれについて非特許文献２に開示されたエレベータアルゴリズムを用いてシーク時間が最適化されるようにコマンドの整列を行う。
【０２１０】
各コマンドキュー２２２には、コマンドが１個のみ存在する状態であるため、それぞれのコマンドキュー２２２において、アクセス要求（Ａ）に由来するコマンドが実行順序の先頭に来る。
【０２１１】
コマンド処理部２１は、各コマンドキュー２２２に属するコマンドの処理が完了するまでの時間を算出する。すなわち、コマンド処理部２１は、ディスクＡ、Ｂそれぞれがアクセス要求（Ａ）に由来するＲｅａｄコマンドを完了するまでの時間を算出する。
【０２１２】
前記アクセス先に対するアクセス時間の特性を示す、ハードディスクの物理的、論理的構成情報によると、アクセス先であるアドレス１００００００のブロックは最外周から１００１番目、つまり１０００番のトラック上に存在する。このとき、ディスクＡ、Ｂのヘッド位置は最終アクセス時のヘッド位置からディスクＡでは最外周、ディスクＢでは最内周のトラック上に存在する。ディスクディスクのヘッドがアクセス先のブロックの存在するトラック上にシークするためには、ディスクＡで１０００個分のトラック、ディスクＢで１００００−１０００＝９０００個分のトラックについてのシークが必要である。
【０２１３】
つまり、２台のディスクＡ、Ｂのうち、ヘッドのシーク時間とシーク距離は比例するため、アクセス対象のデータへのシーク時間は、
ディスクＡで、１０ｍｓ×１０００／１００００＝１ｍｓ、
ディスクＢで、１０ｍｓ×９０００／１００００＝９ｍｓ
である。回転待ち時間とアクセス時間の合計が４ｍｓであるため、アクセス完了時間は、
ディスクＡで、１＋４＝５ｍｓ、
ディスクＢで、９＋４＝１３ｍｓ、
となる。
【０２１４】
よって、ディスクＡからアクセス対象のブロックをＲｅａｄする方が、アクセス処理時間が短くなる。
【０２１５】
ここで、コマンド処理部２１は、アクセス処理時間の長いディスクＢ側のコマンドキュー２２２に着目して、
・実行が不要であり、且つ、
・大きな処理時間をもたらす、
コマンドを削除する。
【０２１６】
ディスクＢ側のコマンドキュー２２２には、アクセス要求（Ａ）に由来するコマンドのみが格納されている。
【０２１７】
コマンド処理部２１は、ディスクＡ、Ｂはストレージ構成情報格納部２４の情報から、互いにミラーの関係にあることを認識し、アクセス要求（Ａ）の処理を完了するにはディスクＡ、Ｂいずれか片方へのアクセスのみが必要である。
【０２１８】
よって、ディスクＢに対するコマンドキュー２２２からアクセス要求（Ａ）に由来するコマンドを削除可能であると分かる。
【０２１９】
コマンド処理部２１は、コマンドを削除状態とするため、コマンド管理テーブル２３２の実行状態の情報を更新する。
【０２２０】
コマンド処理部２１は、コマンドの削除に成功したため、更に他のコマンドの削除を試みるが、アクセス要求（Ａ）に由来するコマンドのみが発行された状態で、既にディスクＢ側のコマンドが削除されているため、これ以上のコマンド削除は不可能である。
【０２２１】
そのため、コマンド処理部２１は、ディスクＢ側のコマンドを削除してコマンド処理部２１によるスケジューリング処理は完了する。
【０２２２】
コマンド処理部２１は、スケジューリングが完了した時点で各ディスクＡ、Ｂに発行されたコマンドは存在しないため、ディスクＡ、Ｂに対して新たにコマンド発行処理を行う。
【０２２３】
発行するコマンドはコマンドキュー２２２に登録されたコマンドのうち、先頭のコマンドである。ディスクＡに対しては、アクセス要求（Ａ）に由来するコマンドが「待機」状態であるためそのまま発行される。このとき、コマンド処理部２１は、コマンド管理テーブル２３２の発行時間の欄に現在の時間、及び、ディスクＡから通知された記憶媒体内コマンドＩＤを記録し、実行状態の欄を「発行」に変更する。
【０２２４】
しかし、ディスクＢに対しては、アクセス要求（Ａ）に由来するコマンドが「削除」状態であるため、コマンドは発行されず、コマンド処理部２１は、コマンド管理テーブル２３２の実行状態の欄を「完了」状態に変更する。
【０２２５】
前記処理から時間が１ｍｓ経過すると、ホスト１からストレージ２に対してアクセス要求（Ｂ）、つまりアドレス８００００００に対するＲｅａｄ要求が投入される。
【０２２６】
コマンド処理部２１において、アクセス要求（Ｂ）を受け取ってからスケジューリングまでの手順は前記アクセス要求（Ａ）を受け取った際の処理と同様である。以下では、ディスクＡ、Ｂそれぞれに対応したコマンドキュー２２２に含まれるコマンドのスケジューリング処理から説明する。
【０２２７】
コマンド処理部２１は、ディスクＡ、Ｂそれぞれについて、同様にエレベータアルゴリズムを用いてコマンドの整列を行う。
【０２２８】
既にアクセス要求（Ａ）に由来するコマンドは、コマンドキュー２２２上に存在しないため、各コマンドキュー２２２にはコマンドが１個のみ存在する状態である。そのため、それぞれのコマンドキュー２２２においてアクセス要求（Ｂ）に由来するコマンドが実行順序の先頭に来る。
【０２２９】
コマンド処理部２１は、各コマンドキュー２２２に属するコマンドの処理が完了するまでの時間を算出する。すなわち、コマンド処理部２１は、ディスクＡ、Ｂそれぞれがアクセス要求（Ｂ）に由来するＲｅａｄコマンドを完了するまでの時間を算出する。
【０２３０】
ディスクＡでは、アクセス要求（Ａ）に由来するコマンドを処理中であり、処理の完了時間は、発行時点から１＋４＝５ｍｓである。
【０２３１】
発行後１ｍｓ経過しているためディスクＡでは先行コマンドの完了まで、５−１＝４ｍｓを余分に要する。
【０２３２】
ディスクＡでは先行するコマンドの完了後、ヘッドが１０００番のトラックの位置に移動する。
【０２３３】
一方、ディスクＢは未だコマンドを実行していないため、ヘッドは１００００番の位置に存在する。よって、シークに要する時間は、
ディスクＡで、１０ｍｓ×（８０００−１０００）／１００００＝７ｍｓ、
ディスクＢで、１０ｍｓ×（１００００−８０００）／１００００＝２ｍｓ
である。
【０２３４】
回転待ち時間とアクセス時間の合計が４ｍｓであり、アクセス完了時間は、
ディスクＡで、４＋７＋４＝１５ｍｓ、
ディスクＢで、２＋４＝６ｍｓ
となる。
【０２３５】
よってディスクＢからアクセス対象のブロックをＲｅａｄする方が、アクセス処理時間が短くなる。
【０２３６】
コマンド処理部２１は、アクセス処理時間の長いディスクＡ側のコマンドキュー２２２に着目し、
・実行が不要、且つ、
・大きな処理時間をもたらす
コマンドを削除する。
【０２３７】
以降、アクセス要求（Ａ）を受け取った際の処理と同様に、ディスクＡに対するコマンドが削除可能であるため、コマンド処理部２１は、コマンド管理テーブル２３２の実行状態の欄を「削除」に変更する。
【０２３８】
コマンド処理部２１は、スケジューリング処理を完了し、この時点でディスクＢが実行中のコマンドは存在せず、ディスクＢに対するコマンドは「待機」状態であるため、コマンド処理部２１は、ディスクＢに対してアクセス要求（Ｂ）に由来するコマンドを発行する。このとき、コマンド処理部２１は、コマンド管理テーブル２３２の発行時間に現在の時間、及びディスクＢから通知された記憶媒体内コマンドＩＤを記録し、実行状態の欄を「発行」に変更する。
【０２３９】
しかし、ディスクＡに対しては、アクセス要求（Ａ）に由来するコマンドが実行中の状態であるためコマンドは発行されない。
【０２４０】
前記処理から更に時間が１ｍｓ経過すると、ホスト１からストレージ２に対してアクセス要求（Ｃ）、つまりアドレス４００００００に対するＲｅａｄ要求が投入される。
【０２４１】
コマンド処理部２１が、アクセス要求（Ｃ）を受け取ってからスケジューリングまでの手順は前記アクセス要求（Ａ）、（Ｂ）を受け取った際の処理と同様である。
【０２４２】
以下では、ディスクＡ、Ｂそれぞれに対応したコマンドキュー２２２に含まれるコマンドのスケジューリング処理から説明する。
【０２４３】
ディスクＡ、Ｂそれぞれについて同様にエレベータアルゴリズムを用いてコマンドの整列を行う。
【０２４４】
ディスクＢについては、既にアクセス要求（Ａ）、（Ｂ）に由来するコマンドは、コマンドキュー２２２上に存在しないため、コマンドキュー２２２にはコマンドが１個のみ存在する状態である。そのため、ディスクＢに対するコマンドキュー２２２では、アクセス要求（Ｃ）に由来するコマンドが実行順序の先頭に来る。
【０２４５】
一方、ディスクＡについては、アクセス要求（Ａ）に由来するアドレス１００００００に対するＲｅａｄアクセスコマンドを実行中である。
【０２４６】
コマンド処理の完了時間は、発行時点から、１＋４＝５ｍｓである。
【０２４７】
発行後２ｍｓ経過しているためディスクＡでは、先行コマンドの完了まで、５−２＝３ｍｓを要する。
【０２４８】
そのためディスクＡに対するコマンドキュー２２２には後続のアクセス要求（Ｂ）に由来するアドレス８００００００に対するＲｅａｄアクセスコマンドが実行されずに残された状態である。
【０２４９】
これに対して、アクセス要求（Ｃ）に由来するアドレス４００００００に対するＲｅａｄコマンドが追加される。ディスクＡに対するコマンドキュー２２２についてエレベータアルゴリズムによるコマンド整列を実行すると、コマンドキュー２２２の先頭のコマンドが実行される時点でのディスクＡのヘッドの位置は、現在実行中のコマンドのアクセス位置、つまりアドレス１００００００の位置であることから、実行順序はアドレス４００００００に対するＲｅａｄコマンドが先になる。
【０２５０】
つまり、後発であるアクセス要求（Ｃ）に由来するコマンドが、先行するアクセス要求（Ｂ）に由来するコマンドより前にスケジューリングされる。
【０２５１】
コマンド処理部２１は、各コマンドキュー２２２に属するコマンドの処理が完了するまでの時間を算出する。
【０２５２】
ディスクＡではアクセス要求（Ａ）に由来するコマンドを処理中であり、処理の完了時間は発行時点から、１＋４＝５ｍｓである。
【０２５３】
発行後２ｍｓ経過しているため、ディスクＡでは先行コマンドの完了まで５−２＝３ｍｓを余分に要する。
【０２５４】
ディスクＡでは先行するコマンドの完了後、ヘッドが１００００００／１００＝１０００番のトラックの位置に移動する。
【０２５５】
ディスクＢではアクセス要求（Ｂ）に由来するコマンドを処理中であり、処理の完了時間は発行時点から、２＋４＝６ｍｓである。
【０２５６】
発行後２ｍｓ経過しているため、ディスクＢでは先行コマンドの完了まで６−１＝５ｍｓを余分に要する。
【０２５７】
ディスクＢでは先行するコマンドの完了後、ヘッドが８００００００／１００＝８０００番のトラックの位置に移動する。
【０２５８】
シークに要する時間はディスクＡでは、アクセス要求（Ｂ）、（Ｃ）に由来する２コマンド分の１０ｍｓ×（（４０００−１０００）＋（８０００−４０００））／１００００＝７ｍｓ、
ディスクＢでは、１０ｍｓ×（８０００−４０００）／１００００＝４ｍｓである。
【０２５９】
回転待ち時間とアクセス時間の合計が４ｍｓであり、コマンド処理完了時間にこの時間がコマンドキュー２２２に存在するコマンド数分加算される。
【０２６０】
コマンド処理完了時間は、
ディスクＡで、３＋７＋４×２＝１８ｍｓ、
ディスクＢで、５＋４＋４＝１３ｍｓ
となる。
【０２６１】
よってディスクＢからアクセス対象のブロックをＲｅａｄする方が、アクセス要求の処理時間が短くなる。
【０２６２】
ここで、アクセス処理時間の長いディスクＡ側のコマンドキュー２２２に着目して、
・実行が不要、且つ、
・大きな処理時間をもたらす
コマンドを削除する。
【０２６３】
コマンドキュー２２２に含まれるコマンドをエレベータアルゴリズムにより整列させると、アクセス要求（Ｃ）に由来するコマンドの次にアクセス要求（Ｂ）に由来するコマンドが実行される。
【０２６４】
このとき、コマンドキュー２２２に属する全コマンドのシーク距離の合計の増大の原因となるのは、アクセス要求（Ｂ）に由来するアドレス８００００００に対するＲｅａｄコマンドである。
【０２６５】
コマンド処理部２１は、このコマンドに関して削除可能であるかを確認する。
【０２６６】
まず、既にディスクＢに対してアクセス要求（Ｂ）に由来するコマンドが発行済みである。ここで、ディスクＡ、Ｂは互いにミラーであるため、ディスクＡ側でアクセス要求（Ｂ）に由来するアドレス８００００００に対するＲｅａｄコマンドは削除可能であると分かる。コマンドを削除状態とするため、コマンド処理部２１は、コマンド管理テーブル２３２の実行状態の情報を更新する。
【０２６７】
ディスクＡ側でアクセス要求（Ｂ）に由来するアドレス８００００００に対するＲｅａｄコマンドを削除した状態で、ディスクＡの全コマンド完了時間を再計算すると、
３＋３＋４＝１０ｍｓ
となる。
【０２６８】
よって、今度は、ディスクＢ側のコマンドキューに着目して、
・実行が不要、且つ
・大きな処理時間をもたらす、
コマンドを削除する。
【０２６９】
このとき、ディスクＢのコマンドキュー２２２にはアクセス要求（Ｃ）に由来するアドレス４００００００に対するＲｅａｄコマンドのみが存在する。
【０２７０】
以降は、アクセス要求（Ａ）を受け取った際の処理と同様に、ディスクＢに対するアクセス要求（Ｃ）に由来するコマンドを削除可能であるため、ディスクＢ側のコマンドは削除され、コマンド処理部２１は、コマンド管理テーブル２３２の実行状態の欄を「削除」に変更する。
【０２７１】
この時点で、コマンドキュー２２２に残ったコマンドは、ディスクＡのアクセス要求（Ｃ）に由来するアドレス４００００００に対するＲｅａｄコマンドのみである。
【０２７２】
アクセス要求（Ｃ）に由来するコマンドは既にディスクＢのコマンドキュー２２２で削除してしまったため、アクセス要求（Ｃ）の実行に不可欠である。そのため、コマンド処理部２１はスケジューリング処理を完了する。
【０２７３】
スケジューリング後、ディスクが実行中のコマンドが存在しない場合、コマンド処理部２１は新たなコマンドを発行する。しかし、ディスクＡについては、アクセス要求（Ａ）に由来するコマンドが実行中の状態、ディスクＢについては、アクセス要求（Ｂ）に由来するコマンドが実行中の状態であるため、コマンド処理部２１は新たにコマンドは発行されない。
【０２７４】
前記処理から更に時間が３ｍｓ経過するとディスクＡで実行されていた、アクセス要求（Ａ）に由来するコマンドの実行が完了する。ディスクＡは、コマンド処理部２１にコマンドの完了を記憶媒体内コマンドＩＤで通知する。
【０２７５】
コマンド処理部２１は、記憶媒体内コマンドＩＤに該当するコマンドをコマンド管理テーブル２３２から探し、コマンドがＲｅａｄであると判別する。
【０２７６】
コマンド処理部２１は、コマンド管理テーブル２３２を更新して完了したコマンドの実行状態の欄を「完了」に変更する。また、コマンド処理部２１は、記憶媒体アクセス履歴格納部２５にアクセスし、ディスクＡに対する直前のアクセスの情報について、先頭アドレスをアドレス１００００００、アクセス長を１ブロックとして更新する。
【０２７７】
続いて、コマンド処理部２１は、コマンド完了に伴って読み出された結果をコマンド処理作業メモリ２３上の、コマンド管理テーブル２３２で指示されたデータ格納先アドレスに格納する。
【０２７８】
コマンド処理部２１は、完了したコマンドの発生源であるアクセス要求（Ａ）の処理に必要な命令が全て完了しているかを確認する。
【０２７９】
ディスクＡ、Ｂはミラー構成であるため、Ｒｅａｄアクセスは片方のディスクから結果が得られた時点でアクセス要求（Ａ）の処理が完了する。更に完了したコマンドの発生源であるアクセス要求（Ａ）はＲｅａｄアクセスであり、アクセス先の情報はパリティではなくホスト１から要求されたデータの実体である。
【０２８０】
ディスクＡとストレージ２全体のアドレス空間との対応関係は１対１であるため、  コマンド処理部２１は、完了したコマンドによるＲｅａｄ結果を、無加工でそのままホスト１に対してアクセス要求（Ａ）の結果として返す。
【０２８１】
最後に、コマンド処理部２１は、コマンド処理作業メモリ２３上に完了したコマンド処理用に確保したメモリを解放し、アクセス要求管理テーブル２３１からアクセス要求（Ａ）のエントリ、コマンド管理テーブルからアクセス要求（Ａ）に由来するコマンドのエントリを全て削除する。
【０２８２】
以降、コマンド処理部２１は、アクセス要求（Ｂ）、（Ｃ）に由来するコマンド完了時も同様の手順で処理を行う。
【０２８３】
最終的に、
ディスクＡではアクセス要求（Ａ）に由来するコマンド、その次にアクセス要求（Ｃ）に由来するコマンド、
ディスクＢではアクセス要求（Ｂ）に由来するコマンドが実行される。
【０２８４】
前記処理手順の説明では、ホスト１からストレージ２に対するＲｅａｄアクセスについて説明を行ったが、ＷｒｉｔｅアクセスについてはＷｒｉｔｅ専用の処理以外は同様の処理を行う。
【０２８５】
続いて上記ステップＳ１１からＳ１６、ステップＳ２１からＳ２６、及びステップＳ３１からＳ３５までの第２の動作例として、ストレージ２のデータ記憶部２２がハードディスク４台から構成され、これらのディスクがＲＡＩＤ５構成を採る場合の、ホスト１からストレージ２に対してＲｅａｄアクセスが行われた場合の動作について、図２乃至図１３及び図１５を用いて説明する。図１５は、本発明をＲＡＩＤ５に適用した例を説明するための図である。
【０２８６】
データ記憶部２２に含まれる記憶媒体２２１を構成するハードディスクは、前記実施例と同一である。また、記憶媒体２２１を構成する４台のハードディスクをそれぞれディスクＡ、Ｂ、Ｃ、Ｄとする。
【０２８７】
ストレージ２全体のアドレス空間と４台のハードディスクのアドレス空間との対応関係は図１５に示した通りである。
【０２８８】
各ディスクには連続して１０００ブロックにデータが記録される。４台のディスクをそれぞれアドレスの先頭から１０００ブロック単位の領域に区切った場合、各ディスクの同一アドレスに存在する領域が互いに冗長関係を持つ組として表される。４台のディスクはＲＡＩＤ５構成であるため、前記組のうち３台分の領域にはデータの実体が格納される。残りの１台分の領域には前記３台分の領域のデータのパリティ情報が記録される。
【０２８９】
例えばストレージ２全体のアドレス空間について、
・アドレス０から９９９のブロックがディスクＡのアドレス０から９９９に記録され、
・アドレス１０００から１９９９のブロックがディスクＢのアドレス０から９９９に記録され、
・アドレス２０００から２９９９のブロックがディスクＣのアドレス０から９９９に記録され、
・アドレス０から２９９９のブロックのパリティがディスクＤのアドレス０から９９９に記録される。
【０２９０】
また、ＲＡＩＤ５ではパリティを格納するディスクは一定ではないため、
例えば、
・アドレス３０００から５９９９のブロックのパリティはディスクＣのアドレス１０００から１９９９のブロックに格納され、
・アドレス６０００から８９９９のブロックのパリティはディスクＢのアドレス２０００から２９９９のブロックに格納され、
・アドレス９０００から１１９９９のブロックのパリティはディスクＡのアドレス３０００から３９９９のブロックに格納される。
【０２９１】
記憶媒体２２１を構成する４台のハードディスクについて各ディスクの初期状態は次の通りであるとする。
【０２９２】
ディスクＡ、Ｂ、Ｃ、Ｄはコマンドを処理中の状態であり、各ディスクのコマンド処理は５ｍｓ後に完了するものとする。
【０２９３】
コマンド処理完了後のヘッドの位置は、外周を０として順にトラック番号を振った場合、
ディスクＡが１０００番のトラック上、
ディスクＢが２０００番のトラック上、
ディスクＣが３０００番のトラック上、
ディスクＤが４０００番のトラック上、
であるものとする。
【０２９４】
また、各ディスクに対して同時に投入する命令は１個とする。
【０２９５】
この状態で、ホスト１がストレージ２のアドレス０、１５００００００のブロックのデータに対して順番に１ブロック分のアクセス長のＲｅａｄ要求を出す。ホスト１からのＲｅａｄアクセス要求を順番に（Ａ）、（Ｂ）とする。
【０２９６】
まず、ストレージ２がアクセス要求（Ａ）を受け取る際の動作について説明する。
【０２９７】
コマンド処理部２１が、アクセス要求（Ａ）を受け取ってからスケジューリングまでの手順は、前記ＲＡＩＤ１の場合の動作例における処理と同様である。
【０２９８】
しかしながら、ＲＡＩＤ１では、各ディスクがデータのコピーを格納しているのに対して、ＲＡＩＤ５の場合、アクセス先のデータの実体を持つディスクと、アクセス先のデータに対するパリティを持つディスクが存在する。
【０２９９】
アクセス要求（Ａ）は、ストレージ２全体のアドレス空間のアドレス０に対するＲｅａｄ、つまり、図１５に示す例では、ディスクＡのアドレス０のブロックに格納されているデータに対するＲｅａｄアクセスであることが分かる。
【０３００】
これに対して、ディスクＡのアドレス０のブロックに対応するパリティデータは、ディスクＢ、Ｃ、Ｄのアドレス０のブロックである。
【０３０１】
よって、ディスクＡ、Ｂ、Ｃ、Ｄに対して、アドレス０のブロックのＲｅａｄコマンドが生成され、各ディスクに対するコマンドキュー２２２に投入される。
【０３０２】
また、ディスクＡに対するＲｅａｄ以外は、アクセス対象のデータに対するパリティデータへのＲｅａｄである。
【０３０３】
以下では、ディスクＡ、Ｂ、Ｃ、Ｄそれぞれに対応したコマンドキュー２２２に含まれるコマンドのスケジューリング処理から説明する。
【０３０４】
ディスクＡ、Ｂ、Ｃ、Ｄそれぞれについて、エレベータアルゴリズムを用いてコマンドの整列を行う。
【０３０５】
ディスクＡ、Ｂ、Ｃ、Ｄについて、コマンド処理部２１がアクセス要求（Ａ）を受け取った段階では、コマンドキュー２２２上にコマンドは存在しない。このため、各ディスクについて、コマンドキュー２２２には、アクセス要求（Ａ）に由来するコマンドのみが存在し、アクセス要求（Ａ）に由来するコマンドが実行順序の先頭に来る。
【０３０６】
コマンド処理部２１は、各コマンドキュー２２２に属するコマンドの処理が完了するまでの時間を算出する。
【０３０７】
ディスクＡ、Ｂ、Ｃ、Ｄは、共にコマンドを処理中であり、処理の完了時間は、アクセス要求（Ａ）の発行時点から５ｍｓ後である。
【０３０８】
コマンド処理部２１は、アクセス要求（Ａ）に由来するコマンドの処理において、各ディスクがシークに要する時間を算出する。
【０３０９】
アクセス要求（Ａ）に由来する各ディスクに対するコマンドは、全て、アドレス０のブロックに対するＲｅａｄコマンドである。
【０３１０】
よって、
ディスクＡのシーク時間は、１０ｍｓ×（１０００−０）／１００００＝１ｍｓである。
【０３１１】
同様に、
ディスクＢでは、１０ｍｓ×（２０００−０）／１００００＝２ｍｓ、
ディスクＣでは、１０ｍｓ×（３０００−０）／１００００＝３ｍｓ、
ディスクＤでは、１０ｍｓ×（４０００−０）／１００００＝４ｍｓ
である。
【０３１２】
回転待ち時間とアクセス時間の合計が４ｍｓであり、コマンド処理完了時間にこの時間がコマンドキュー２２２に存在するコマンド数分加算される。
【０３１３】
よって、コマンド処理完了時間は、
ディスクＡで、５＋１＋４＝１０ｍｓ、
ディスクＢで、５＋２＋４＝１１ｍｓ、
ディスクＣで、５＋３＋４＝１２ｍｓ、
ディスクＤで、５＋４＋４＝１３ｍｓ
である。
【０３１４】
ディスクＡ、Ｂ、Ｃ、Ｄのそれぞれのコマンドキュー２２２には、アクセス要求（Ａ）に由来するコマンドのみが投入されているため、コマンドキュー２２２に存在する全てのコマンドの処理完了時間は、前記コマンドの処理完了時間に等しい。
【０３１５】
ここで、アクセス処理完了時間の最も長いディスクＤのコマンドキュー２２２に着目して、
・実行が不要、且つ
・大きな処理時間をもたらす
コマンドを削除する。
【０３１６】
ディスクＤのコマンドキュー２２２には、アクセス要求（Ａ）に由来するコマンドのみが格納されている。
【０３１７】
ここで、記憶媒体２２１である各ディスクは、ストレージ構成情報格納部２４の情報から、図１５に示した通り、互いにパリティ情報を持ち合う関係にあることが分かる。
【０３１８】
ディスクＤに投入されたコマンドは、ホスト１からＲｅａｄアクセス要求されたデータに対するパリティデータに対するＲｅａｄコマンドである。
【０３１９】
よって、コマンド処理部２１では、ディスクＤに対するコマンドキュー２２２からアクセス要求（Ａ）に由来するコマンドが削除可能であると分かる。そこで、コマンドを削除状態とするため、コマンド処理部２１は、コマンド管理テーブル２３２の実行状態の情報を更新する。
【０３２０】
コマンド処理部２１は、再び、コマンドキュー２２２内のコマンドを整列し、各ディスクのコマンド処理完了時間を算出する。
【０３２１】
先程、処理完了時間が最も遅かったディスクＤは、アクセス要求（Ａ）由来のコマンドのみが投入されており、そのコマンドが削除状態となったため、ディスクＣのアクセス処理完了時間が最も長くなる。
【０３２２】
ディスクＤに対して行った処理同様に、コマンド処理部２１は、ディスクＣのコマンドキュー２２２に着目して、
・実行が不要、且つ、
・大きな処理時間
をもたらすコマンドを削除する。
【０３２３】
ディスクＣに投入されたアクセス要求（Ａ）由来のコマンドも、ホスト１からＲｅａｄアクセス要求されたデータに対するパリティデータに対するＲｅａｄコマンドであるため、コマンド処理部２１は、ディスクＤと同様にコマンドの削除処理を行う。
【０３２４】
コマンド処理部２１は、再び、各ディスクのコマンド処理完了時間を算出する。そして、ディスクＢに投入されたアクセス要求（Ａ）由来のコマンドも、ディスクＣ、Ｄと同様の理由で削除処理を行う。
【０３２５】
しかし、ディスクＡ、Ｂ、Ｃ、Ｄのうち、コマンドキュー２２２にコマンドが残された唯一のディスクであるディスクＡに投入されたコマンドは、ホスト１からアクセス要求（Ａ）でＲｅａｄ要求されたデータの実体に対するアクセスである。
【０３２６】
既に他のディスクに対して存在しているパリティデータに対するＲｅａｄコマンドは、削除状態とされていることから、ディスクＡのコマンドキュー２２２からＲｅａｄコマンドを削除することは不可能である。そのため、コマンド処理部２１はスケジューリング処理を完了する。
【０３２７】
コマンド処理部２１は、スケジューリング後、ディスクが実行中のコマンドが存在しない場合、新たなコマンドを発行するが、この場合、ディスクＡ、Ｂ、Ｃ、Ｄでコマンドが実行中の状態であるため、新たにコマンドは発行されない。
【０３２８】
続いて、ホスト１からストレージ２に対してアクセス要求（Ｂ）、つまりアドレス１５００００００に対するＲｅａｄ要求が投入される。
【０３２９】
まず、ストレージ２がアクセス要求（Ｂ）を受け取る際の動作について説明する。
【０３３０】
コマンド処理部２１が、アクセス要求（Ｂ）を受け取ってからスケジューリングまでの手順は、前記アクセス要求（Ａ）に対する処理と同様である。
【０３３１】
以下では、ディスクＡ、Ｂ、Ｃ、Ｄそれぞれに対応したコマンドキュー２２２に含まれるコマンドのスケジューリング処理について説明する。
【０３３２】
コマンド処理部２１は、ディスクＡ、Ｂ、Ｃ、Ｄそれぞれについて、エレベータアルゴリズムを用いてコマンドの整列を行う。
【０３３３】
ディスクＢ、Ｃ、Ｄ全てについて、コマンド処理部２１がアクセス要求（Ｂ）を受け取った段階で、コマンドキュー２２２上にコマンドは存在しない。そのため、ディスクＢ、Ｃ、Ｄについて、コマンドキュー２２２には、アクセス要求（Ｂ）に由来するコマンドのみが存在し、アクセス要求（Ｂ）に由来するコマンドが実行順序の先頭に来る。
【０３３４】
一方、ディスクＡには、アクセス要求（Ａ）に由来するコマンドがコマンドキュー２２２に投入されている。このコマンドは、アドレス０のブロックに対するＲｅａｄコマンドである。
【０３３５】
一方、アクセス要求（Ｂ）に由来するコマンドは、ストレージ２全体のアドレス空間と各ディスクのアドレス空間が、図１５に示す対応関係であることから、ディスクＡのアドレス５００００００、つまり５０００番のトラック上のブロックに対するＲｅａｄコマンドである。
【０３３６】
ディスクＡで現在処理を行っているコマンドは、１０００番のトラックに対するものである。よって、ディスクＡのコマンドキュー２２２上でエレベータアルゴリズムを用いてコマンドを整列すると、アクセス要求（Ａ）、アクセス要求（Ｂ）のコマンドの順に並ぶ。
【０３３７】
コマンド処理部２１は、それぞれのコマンドキュー２２２に属するコマンドの処理が完了するまでの時間を算出する。
【０３３８】
ディスクＡ、Ｂ、Ｃ、Ｄ共にコマンドを処理中であり、処理の完了時間はアクセス要求（Ａ）の発行時点から５ｍｓ後である。
【０３３９】
次にコマンド処理部２１は、各ディスクがシークに要する時間を算出する。
【０３４０】
アクセス要求（Ａ）、アクセス要求（Ｂ）に由来する各ディスクに対するコマンドは、それぞれ、アドレス０（０番のトラック）、アドレス５００００００（５０００番のトラック）のブロックに対するＲｅａｄコマンドである。
【０３４１】
コマンド処理部２１は、まず、ディスクＡのシーク時間を算出する。
【０３４２】
ディスクＡは、アクセス要求（Ａ）由来のコマンド、アクセス要求（Ｂ）由来のコマンドの順に処理を行うため、シーク時間は、
１０ｍｓ×（（１０００−０）＋（５０００−０））／１００００＝６ｍｓ
である。
【０３４３】
一方、ディスクＢ、Ｃ、Ｄでは、アクセス要求（Ａ）由来のコマンドは削除状態となっているため、アクセス要求（Ｂ）由来のコマンドのみを処理する。
【０３４４】
よって、シーク時間は、
ディスクＢでは、１０ｍｓ×（５０００−２０００）／１００００＝３ｍｓ、
ディスクＣでは、１０ｍｓ×（５０００−３０００）／１００００＝２ｍｓ、
ディスクＤでは、１０ｍｓ×（５０００−４０００）／１００００＝１ｍｓ
である。
【０３４５】
１コマンドあたりの回転待ち時間と、アクセス時間の合計が４ｍｓであり、コマンド処理完了時間に、この時間がコマンドキュー２２２に存在するコマンド数分が加算される。
【０３４６】
よって、コマンドキュー２２２に存在する全てのコマンド処理完了時間は、
ディスクＡで、５＋６＋４×２＝１９ｍｓ、
ディスクＢで、５＋３＋４＝１２ｍｓ、
ディスクＣで、５＋２＋４＝１１ｍｓ、
ディスクＤで、５＋１＋４＝１０ｍｓ
である。
【０３４７】
ここで、コマンド処理部２１は、アクセス処理完了時間の最も長いディスクＡのコマンドキュー２２２に着目して、
・実行が不要、且つ、
・大きな処理時間をもたらす
コマンドを削除する。
【０３４８】
ディスクＡのコマンドキュー２２２には、アクセス要求（Ａ）、アクセス要求（Ｂ）に由来するコマンドが格納されている。
【０３４９】
コマンド処理部２１がコマンドキュー２２２に含まれるコマンドをエレベータアルゴリズムにより整列させると、アクセス要求（Ａ）に由来するコマンドの次にアクセス要求（Ｂ）に由来するコマンドが実行される。
【０３５０】
このとき、コマンドキュー２２２に属する全コマンドのシーク距離の合計の増大の原因となるのは、アクセス要求（Ｂ）に由来するアドレス５００００００に対するＲｅａｄコマンドである。
【０３５１】
コマンド処理部２１は、このコマンドを削除可能であるかを確認する。
【０３５２】
記憶媒体２２１を構成する各ディスクはＲＡＩＤ５の関係にあり、ディスクを１台アクセスせずに、パリティからの復元によって、Ｒｅａｄ結果を得ることが可能である。
【０３５３】
ディスクＡ以外のアクセス要求（Ｂ）由来のコマンドは削除されていないため、ディスクＡのアクセス要求（Ｂ）由来のコマンドは削除可能である。コマンド処理部２１は、このコマンドを削除状態とするため、コマンド管理テーブル２３２の実行状態の欄の情報を更新する。
【０３５４】
コマンド処理部２１は、再びコマンドキュー２２２内のコマンドを整列し、各ディスクのコマンド処理完了時間を算出する。
【０３５５】
先程処理完了時間が最も遅かったディスクＡは、アクセス要求（Ｂ）由来のコマンドが削除状態となったことにより、コマンド処理完了時間がアクセス要求（Ａ）の際の計算結果から５＋１＋４＝１０ｍｓとなる。よってディスクＢのアクセス処理完了時間の１２ｍｓが最も長くなる。
【０３５６】
コマンド処理部２１は、ディスクＡに対して行った処理同様に、ディスクＢのコマンドキュー２２２に着目して、
・実行が不要、且つ、
・大きな処理時間をもたらす
コマンドを削除する。
【０３５７】
ディスクＢに投入されたコマンドはアクセス要求（Ｂ）由来のコマンドのみである。ここで、アクセス要求（Ｂ）によってＲｅａｄ要求されているデータの実体は、図１５に示したストレージ２全体のアドレス空間と各ディスクのアドレス空間との関係から、ディスクＡに存在することが分かる。
【０３５８】
ディスクＡにおけるアクセス要求（Ｂ）由来のコマンドは既に削除状態となっており、更に、各ディスクはＲＡＩＤ５の関係にあるため、データの実体を用いずに目的とするデータを得るためには全てのパリティ、つまりディスクＢ、Ｃ、Ｄ全てのＲｅａｄコマンドの結果が必要である。よって、ディスクＢのコマンドキュー２２２からＲｅａｄコマンドを削除することは不可能である。コマンド処理部２１は、ディスクＢにおいてコマンドを削除することに失敗したため、スケジューリング処理を完了する。
【０３５９】
コマンド処理部２１は、スケジューリング後、ディスクが実行中のコマンドが存在しない場合、新たなコマンドを発行する。しかし、現在、全ディスクＡ、Ｂ、Ｃ、Ｄでコマンドが実行中の状態であるため、新たにコマンドは発行されない。
【０３６０】
最終的に、
ディスクＡでは、アクセス要求（Ａ）に由来するコマンドが実行され、
ディスクＢ、Ｃ、Ｄでは、アクセス要求（Ｂ）に由来するコマンドが実行される。
【０３６１】
以降のディスクにおけるコマンド完了処理時の手順については、前記した記憶媒体２２１がＲＡＩＤ１構成のディスクからなる場合と同様である。
【０３６２】
上記処理手順の説明では、ホスト１からストレージ２に対するＲｅａｄアクセスを中心に説明を行ったが、ＷｒｉｔｅアクセスについてはＷｒｉｔｅ専用の処理以外は同様の処理を行う。
【０３６３】
本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施例ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【図面の簡単な説明】
【０３６４】
【図１】本発明の一実施例における全体のシステム構成を示す図である。
【図２】本発明の一実施例におけるストレージの構成を示す図である。
【図３】本発明の一実施例におけるホストからストレージに対するアクセス要求に付随する情報を管理するためのアクセス要求管理テーブルを示す図である。
【図４】本発明の一実施例における各記憶媒体に対して発行を予定、または発行中のコマンドに付随する情報を管理するためのコマンド管理テーブルを示す図である。
【図５】本発明の一実施例における各記憶媒体に対して発行を予定しているコマンドの実行順序を示すコマンドキューを示す図である。
【図６】本発明の一実施例におけるストレージがホストからアクセス要求を受理した際の処理手順を示したフローチャートである。
【図７】本発明の一実施例におけるコマンド処理部がストレージ内の記憶媒体からコマンドの処理完了を通知された際の処理手順を示したフローチャートである。
【図８】本発明の一実施例におけるストレージ内の記憶媒体がＲｅａｄコマンドの処理を完了した際のコマンド処理部の処理手順を示したフローチャートである。
【図９】本発明の一実施例におけるストレージ内の記憶媒体がＷｒｉｔｅコマンドの処理を完了した際のコマンド処理部の処理手順を示したフローチャートである。
【図１０】本発明の一実施例におけるコマンド処理部のストレージ内の各記憶媒体に発行予定のコマンドに対するスケジューリング及び発行コマンド選択の処理手順を示したフローチャートである。
【図１１】本発明の一実施例におけるコマンド処理部のストレージ内の各記憶媒体に発行予定のコマンドから処理時間増大の原因となるコマンドを選択して削除する処理手順を示したフローチャートである。
【図１２】本発明の一実施例におけるストレージ内の各記憶媒体に発行予定のコマンドから削除判定を行う対象のコマンドを選択する例を示した図である。
【図１３】本発明の実施例におけるハードディスクのプラッタ上におけるトラック、ブロックの配置を示す図である。
【図１４】本発明の第１の実施例におけるＲＡＩＤ１構成の各ハードディスクのブロックアドレスとストレージ２のアドレス空間との対応関係を示す図である。
【図１５】本発明の第２の実施例におけるＲＡＩＤ５構成の各ハードディスクのブロックアドレスとストレージ２のアドレス空間との対応関係を示す図である。
【符号の説明】
【０３６５】
１  ホスト
２  ストレージ
３  ネットワーク
２１  コマンド処理部
２２  データ記憶部
２２１  記憶媒体
２２２  コマンドキュー
２３  コマンド処理作業メモリ
２３１  アクセス要求管理テーブル
２３２  コマンド管理テーブル
２４  ストレージ構成情報格納部
２５  記憶媒体アクセス履歴格納部
３１  ハードディスク内のプラッタ
３２  プラッタ上の最外周トラック
３３  プラッタ上の最内周トラック
３４  プラッタ上のトラック
３５  トラック上のブロック
【図１】
0005292813.tif 000002
【図２】
0005292813.tif 000003
【図３】
0005292813.tif 000004
【図４】
0005292813.tif 000005
【図５】
0005292813.tif 000006
【図６】
0005292813.tif 000007
【図７】
0005292813.tif 000008
【図８】
0005292813.tif 000009
【図９】
0005292813.tif 000010
【図１０】
0005292813.tif 000011
【図１１】
0005292813.tif 000012
【図１２】
0005292813.tif 000013
【図１３】
0005292813.tif 000014
【図１４】
0005292813.tif 000015
【図１５】
0005292813.tif 000016