(57)【特許請求の範囲】
【請求項１】
コマンドキューイングの機能を有し、コマンドを受領した順番で実行しないことがあり、後から来たコマンドに追い越される回数を制限する機能を有する記憶装置であって、
追い越される回数の制限数を二つ以上用意し、リードコマンドとライトコマンドで別々の値を適用する機能を有することを特徴とする記憶装置。
【請求項２】
請求項１記載の記憶装置と記憶装置を制御する記憶装置制御装置からなる記憶装置システムであって、前記記憶装置制御装置から前記記憶装置に前記追い越される回数の制限数として二つまたはそれ以上を設定することを特徴とする記憶装置システム。
【請求項３】
請求項２記載の記憶装置システムであって、ユーザーが前記記憶装置制御装置から前記追い越される回数の制限数として二つまたはそれ以上を入力する機能を有することを特徴とする記憶装置システム。
【請求項４】
コマンドキューイングの機能を有し、コマンドを受領した順番で実行しないことがあり、後から来たコマンドに追い越される回数を制限する機能を有する記憶装置であって、
次に実行するコマンドを決定するにあたって、コマンドキュー上の各コマンドの実行にかかる見込み時間を計算し、当該コマンドよりも後から受領したコマンドに追い越された回数を元に前記見込み時間を補正し、得られた値を比較することを特徴とする記憶装置。
【請求項５】
請求項４記載の記憶装置と、記憶装置を制御する記憶装置制御装置からなる記憶装置システム。
【請求項６】
コマンドキューイングの機能を有し、コマンドを受領した順番で実行しないことがあり、コマンドの処理時間を制限する機能を有する記憶装置であって、
コマンドキュー上に繋がっている時間の上限を二つ以上用意し、リードコマンドとライトコマンドで別々の値を適用する機能を有することを特徴とする記憶装置。
【請求項７】
請求項６記載の記憶装置と記憶装置を制御する記憶装置制御装置からなる記憶装置システムであって、前記記憶装置制御装置から前記記憶装置にコマンドの処理時間の上限として二つまたはそれ以上を設定することを特徴とする記憶装置システム。
【請求項８】
請求項７記載の記憶装置システムであって、ユーザーが前記記憶装置制御装置からコマンドの処理時間の上限として二つまたはそれ以上を入力する機能を有することを特徴とする記憶装置システム。
【請求項９】
コマンドキューイングの機能を有し、コマンドを受領した順番で実行しないことがあり、コマンドの処理時間を制限する機能を有する記憶装置であって、
次に実行するコマンドを決定するにあたって、コマンドキュー上の各コマンドの実行にかかる見込み時間を計算し、当該コマンドがコマンドキュー上に繋がっている時間を元に前記見込み時間を補正し、得られた値を比較することを特徴とする記憶装置。
【請求項１０】
請求項９記載の記憶装置と、記憶装置を制御する記憶装置制御装置からなる記憶装置システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、タグキューを有する記憶装置に関する。特に、処理の見込み時間等に応じてタグキュー上のコマンドの実行順序を変える記憶装置に関する。
【０００２】
【従来の技術】
SCSI−2の規格ではコマンドのキューイング及びリオーダリングをサポートしている。コマンドのキューイングを行うことで、同一または複数のイニシエーターから発行された複数のI／O要求を受け付けてキューイングすることができる。また、ハードディスク装置ではリードライトヘッドのむだな移動時間が最小になるようにコマンドの実行順序を並び替える。このコマンドキューイング及びリオーダリングについては菅谷誠一著、CQ出版社、SCSI−2詳細解説の114〜116ページに解説がある。
【０００３】
本発明に近い公知例としては、「ディスク装置における実行順最適化方式」松本他、特開平6−259198号公報（以降、公知例１と呼ぶ）がある。公知例１では、並び換えキューと待機キューの二つのコマンドキューを持ち、実行するコマンドは並び換えキューから選択し、新たに入ってくるコマンドは待機キューに入れ、並び換えキューが空になった時点で並び換えキューと待機キューを交換するようにすることで、コマンドの沈み込みを防止する技術が開示されている。
【０００４】
【発明が解決しようとする課題】
ライトバックキャッシュ付きのディスクコントローラーにつながったコマンドキューイングの機能を持つディスクドライブを考える。ホストコンピューターから発行されたリードコマンドは、ディスクコントローラーのキャッシュ上に要求データが無い場合、ディスクドライブから要求データ読み出すまで終了しないため、ディスクドライブのリード処理はレスポンスが重要である。一方、ホストコンピューターから発行されたライトコマンドはディスクコントローラーのキャッシュにデータを書き込んで終了報告を行った時点で完了し、キャッシュ上に書き込んだデータをディスクドライブに書き出す処理のレスポンスは重要ではなく、むしろ1秒間にキャッシュ上のどれだけのデータをディスクドライブに書き出せるかというスループットが重要である。このようにリードとライトでは要求されるレスポンス・スループットに違いがあるのにもかかわらず、レスポンスが要求されないライトコマンドにまでリードコマンドと同じように沈み込み防止を行っており、全体のスループットを低下させているという問題があった。
【０００５】
本発明の目的はリードコマンドのレスポンスを確保しつつ、全体のスループットをあまり低下させない記憶装置を提供することである。
【０００６】
【課題を解決するための手段】
上記目的を達成するために、沈み込み防止策をリードコマンドにのみ適用する。
【０００７】
また、上記目的を達成するために、リードコマンドとライトコマンドで別に沈み込み防止策を適用し、リードコマンドをより沈み込みにくくする。
【０００８】
具体的な沈み込み防止策2種類について、以下で説明する。
【０００９】
あるコマンドより後から受領したコマンドに追い越される回数の制限を設け、制限回数分のコマンドに追い越されたら、当該コマンドを優先的に実行する。
【００１０】
各コマンドが受領した時刻を管理し、受領してから一定時間以上実行されていないコマンドがあったら、そのコマンドを優先的に実行する。
【００１１】
【発明の実施の形態】
（第１の実施例）
図１は本発明を適用するコンピューターシステム1200を示す。コンピューターシステム1200はI／O要求を発行するホストコンピューター1010、I／O要求を処理する記憶装置システム1210から構成される。
【００１２】
記憶装置システム1210はI／O要求を受け付ける記憶装置コントローラー1000、データを格納している記憶装置1100から構成される。
【００１３】
記憶装置コントローラー1000は、ホストコンピューター1010とのやりとりを行うホストインターフェース1030、記憶装置1100とのやりとりを行うFCインターフェース1070、記憶装置コントローラー1000を管理するCPU1020、ホストコンピューター1010からのライトデータを一時的に格納するキャッシュ1050、CPU1020が実行するプログラムやキャッシュ1050の管理データ等を格納するメモリ1060、ユーザーが記憶装置1100あるいは記憶装置コントローラー1000に対する各種パラメーターを入力するサービスボード1040から構成される。
【００１４】
記憶装置1100は、記憶装置コントローラー1000とのやりとりを行うFCインターフェース1080、データが格納されているディスク1090、ディスク1090を制御するディスクコントローラー1110、受領したI／O要求を解釈しディスクコントローラー1110に指示するCPU1120、CPU1120が実行するプログラムやデータを格納するメモリ1130より構成される。ディスク1090は本実施例ではハードディスクを想定しているが、MO、CD−RW等でも本発明を適用可能である。
【００１５】
図２は記憶装置1100上のメモリ1130に格納されているコマンド管理テーブル1500である。コマンド管理テーブル1500は複数のコマンド管理テーブルエントリ1510からなる。コマンド管理テーブル1500は記憶装置1100が受領したI／O要求を管理するテーブルで、I／O1個につき一つのコマンド管理テーブルエントリ1510が用意される。
【００１６】
コマンド管理テーブルエントリ1510は、当該エントリの有効・無効を表す有効無効フラグ1520、I／O要求（以下、コマンドと呼ぶ）がリードかライトかを意味するリードライト種別1530、要求データの格納アドレスを表すLBA1540、要求データの長さを表すサイズ1550、当該I／O要求がそれより後から来たコマンドに何回追い越されたかを意味する追い越されカウンター1560、ディスク1090の現在のヘッド位置から当該コマンドを処理するのにかかる見込み時間を表す見込み処理時間1570、後述するタグキュー2060を構成する前方ポインター1580と後方ポインター1590より構成される。
【００１７】
図３は記憶装置1100およびディスク1090の状態を管理するドライブ管理テーブル2000である。ドライブ管理テーブル2000は、リードコマンドに対して追い越され回数の限度を規定する制限回数A2010、リードライトコマンド両方に対して追い越され回数の限度を規定する制限回数B2020、ディスク1090の現在のヘッド位置2030、後述するタグキュー2060を構成するMRUポインタ2040とLRUポインタ2050から構成される。ここで、制限回数A2010は制限回数B2020よりも小さいか、制限回数A2010のみが有効であるとする。
【００１８】
図４は記憶装置1100が持つタグキュー2060の概念図である。MRUポインタ2040とLRUポインタ2050がタグキュー2060の両端であり、コマンド管理テーブルエントリ1510が前方ポインタ1580と後方ポインタ1590で双方向につながっている。記憶装置1100が受け取ったコマンドはMRU位置につながれ、ディスク1090が実行するコマンドはキュー上のすべてのコマンドから条件を考慮して一つが選ばれる。MRU位置に近づく方を前、LRU位置に近づく方を後と定義する。タグキュー2060上のコマンドから一つ選ぶ処理は本実施例では後述する次コマンド決定処理4000である。
【００１９】
図５は記憶装置1100が記憶装置コントローラー1000からコマンドを受領したときにCPU1120が実行するコマンド受領処理3000のフローチャートを示す。まずステップ3010で記憶装置1100はFCインターフェース1080を通じてコマンドを受領する。次にステップ3020においてCPU1120は受領したコマンドがリードかライト、あるいはそれ以外かを判定し、それ以外と判定されたらステップ3080にジャンプする。リードかライトと判定されたらステップ3030において、コマンド管理テーブルエントリ1510の有効無効フラグ1520が無効のものを探し、ステップ3040で見つけた空きコマンド管理テーブルエントリ1510の有効無効フラグ1520を有効とし、リードライト種別1530、LBA1540、サイズ1550を受領したコマンドに合わせてセットし、追い越されカウンター1560をゼロで、見込み処理時間を無効を意味する−1で初期化する。そしてステップ3050において、タグキュー2060のMRU位置に当該エントリを繋ぐ。そしてステップ3060でディスク1090が何らかのコマンドを実行中であるかどうかを判定し、実行中であればコマンド受領処理3000は終了する。実行中でなければステップ3070で当該コマンドの実行を開始し、コマンド受領処理3000は終了する。
【００２０】
ステップ3020でリードでもライトでもないと判定された場合にはステップ3080において、受領したコマンドが制限回数をセットするコマンドであるかどうかを判定する。制限回数をセットするコマンドであったら、ステップ3090において、制限回数A2010と制限回数B2020をセットし、コマンド受領処理3000は終了する。制限回数をセットするコマンドでもなかったら、ステップ3100でその他のコマンドに対する処理を行い、コマンド受領処理3000は終了する。その他のコマンドに対する処理は本発明とは関係がないので説明は省略する。制限回数をセットするコマンドは、たとえばSCSIのモードセレクトコマンドで実現可能である。
【００２１】
図６はディスク1090でコマンドが終了したときにCPU1120が実行するコマンド完了処理3500のフローチャートを示す。まずステップ3510において、ディスク1090がコマンドの実行を完了し、それをディスクコントローラー1110が検出してCPU1120に報告する。そしてステップ3520でCPU1120はFCインターフェース1080を経由して記憶装置コントローラー1000にコマンドの完了報告を行う。完了報告を受け取った記憶装置コントローラー1000は完了報告のあったコマンドがリードであればホストコンピューター1010に完了報告を行う。そしてステップ3530においてCPU1020は完了報告のあったコマンドに対応するコマンド管理テーブルエントリ1510をタグキュー2060から抜き、ステップ3540で当該コマンド管理テーブルエントリ1510の有効無効フラグ1520を無効とする。次にステップ3550において、未実行のリードコマンドかライトコマンドがタグキュー2060上に残っているかどうかを判定し、残っていなければコマンド完了処理3500は終了する。まだ残っていれば、ステップ4000において後述する次コマンド決定処理4000を行い、ステップ3570で決定したコマンドの実行をディスクコントローラー1110を経由してディスク1090に指示し、コマンド完了処理3500は終了する。
【００２２】
図７は次コマンド決定処理4000のフローチャートを示す。まずステップ4010でタグキュー2060のLRU位置にあるコマンドを選択し、ステップ4020で次実行候補とし、ステップ4030でそのコマンドの見込み処理時間を計算し、見込み処理時間1570にセットする。見込み処理時間の計算は、シーク距離と回転待ち時間、媒体アクセス時間より算出するのが望ましいが、本実施例では簡便にするため、LBA1540とヘッド位置2030の差の絶対値を見込み処理時間の近似値として用いることにする。次にステップ4040で、制限回数B2020が有効かつ当該コマンドの追い越されカウンター1560が制限回数B2020より大きいかどうかを判定し、大きければ4110にジャンプする。大きくなければステップ4050で、制限回数A2010が有効かつ当該コマンドのリードライト種別1530がリードかつ当該コマンドの追い越されカウンター1560が制限回数A2010よりも大きいかどうかを判定し、そうであればステップ4110にジャンプし、そうでなければステップ4060で当該コマンドの前方ポインタ1580を見てまだコマンドがあるかどうかを判定する。無いと判定されたらステップ4120にジャンプし、あると判定されたらステップ4070で当該コマンドの前方ポインタ1580が示すコマンドを選択し、これ以降そのコマンドを当該コマンドとする。そしてステップ4080で当該コマンドの見込み処理時間を計算し、見込み処理時間1570にセットし、ステップ4090で当該コマンドの見込み処理時間1570と次実行候補コマンドの見込み処理時間1570を比較し、当該コマンドの見込み処理時間1570の方が小さければ、ステップ4100で当該コマンドを次実行候補コマンドとしてステップ4040へジャンプし、小さくなければステップ4100を行わずにステップ4040にジャンプする。
【００２３】
ステップ4110では当該コマンドを次実行候補のコマンドとし、ステップ4120で次実行候補コマンドを次実行コマンドとして決定し、ステップ4130でヘッド位置2030に次実行コマンドのLBA1540にサイズ1550を加えた値を代入し、ステップ4140で次実行コマンドの後方ポインタ1590を辿って、次実行コマンドよりもタグキュー2060のLRU位置に近いコマンドの追い越されカウンター1560全てに1を加え、次コマンド決定処理4000は終了する。
【００２４】
ここで、制限回数A2010の方が制限回数B2020よりも小さい、あるいは、制限回数A2010のみが有効な場合について考えると、ステップ4050よりリードコマンドはライトコマンドよりも少ない追い越されカウンター1560の値で次実行コマンドになるため、リードコマンドは応答時間の最悪値が軽減される。ただし、制限回数A2010のみが有効である場合は、ライトコマンドの実行時間が非常に遅くなる可能性があるため、記憶装置コントローラー1000でのタイムアウト値を非常に大きくとるか、タイムアウトをライトコマンドには適用しないか、他のコマンドの終了に応じてタイムアウト時間を伸ばす等の対応を行う必要がある。また、制限回数A2010や制限回数B2020の値によっては、ライトコマンドだけではなく、リードコマンドに対しても同様に、タイムアウトを適用しないか、他のコマンドの終了に応じてタイムアウト時間を伸ばす等の対応を行う必要がある。
【００２５】
図８はユーザーがサービスボード1040から制限回数を入力したときに記憶装置コントローラー1000内のCPU1020で実行される制限回数設定処理4500のフローチャートである。まずステップ4510でユーザーがサービスボード1040より2種類の制限回数を入力する。そしてステップ4520でメモリ1060上に制限回数セットコマンドを作成する。制限回数セットコマンドは入力された2種類の制限回数を記憶装置1100に渡すためのコマンドで、例えばSCSIのモードセレクトコマンドを用いて実現できる。そしてステップ4530でFCインターフェース1070を通じて記憶装置1100に制限回数セットコマンドを発行し、制限回数設定処理4500は終了する。
【００２６】
図９はホストコンピューター1010が記憶装置コントローラー1000にリードコマンドあるいはライトコマンドを発行したときに、記憶装置コントローラー1000上のCPU1020が実行する同期コマンド処理5000のフローチャートである。まずステップ5010でホストインターフェース1030を経由してコマンドを受け取る。そしてステップ5020で受領したコマンドがリードであるかどうかを判定し、リードでなければステップ5070にジャンプする。リードであればステップ5030でキャッシュ1050上に要求データがあるかどうかを判定し、あると判定されたらステップ5060にジャンプし、なければステップ5040で記憶装置1100にリード要求を発行する。そしてステップ5050で記憶装置1100からのリードデータをキャッシュ1050上に格納し、ステップ5060でキャッシュ1050上の要求データをホストインターフェース1030経由でホストコンピューター1010に転送し、ステップ5080でホストコンピューター1010に当該コマンドの完了報告を行って、同期コマンド処理5000は終了する。
【００２７】
ステップ5030でリードでないと判定された場合にはステップ5070で、ホストコンピューター1010からのライトデータをホストインターフェース1030経由でキャッシュ1050上に受け取り、すぐにステップ5090でホストコンピューター1010に対して当該ライトコマンドの完了報告を行う。そして、ステップ5100で記憶装置1100に対してキャッシュ1050上の未反映データをライトするためにライト要求を記憶装置1100に発行し、ステップ5110でライトデータを記憶装置1100に転送して同期コマンド処理5000は終了する。
【００２８】
ここで、本実施例では簡便化のためにホストコンピューター1010から発行されるコマンドはリード・ライトのみと仮定している。
【００２９】
ここで、制御装置コントローラー1000が複数のリード・ライトコマンドを同時に処理できるように、CPU1020ではマルチタスクのオペレーティングシステムが動いていて、同期コマンド処理5000や制限回数設定処理4500はタスクとして実行されるものとする。
【００３０】
以上より、ホストコンピューター1010にとって、リードコマンドはキャッシュ1050上に要求データが無い場合には記憶装置1100から要求データがリードされるのを待つ必要があるが、ライトコマンドはキャッシュ1050にデータをライトした時点で完了報告を受け取るので、記憶装置1100が実際にデータをディスク1090に書き込むのを待つ必要はない。そのため、記憶装置1100で実行されるリードコマンドはスループットと同時に応答時間の最悪値も重要な性能指標となるが、記憶装置1100で実行されるライトコマンドはスループットだけを考慮すればよく、応答時間の最悪値は特に意識する必要が無いことになる。
【００３１】
これに対して、次コマンド決定処理4000のステップ4050があることで、制限回数B2020の
値が無効であるか、制限回数A2010が制限回数B2020よりも小さい場合には、リードコマンドはライトコマンドよりも少ない回数ぶん追い越されたら優先的に実行されることになるため、リードコマンドの応答時間を保証しつつ、ライトはリードほど応答時間の最悪値を制限しないことで、全体のスループットを確保することができる。
【００３２】
（第２の実施例）
第１の実施例ではコマンドの追い越され回数が制限回数A2010あるいは制限回数B2020を超えたとたんに現在のヘッド位置を考慮せずに優先実行されてしまうため、追い越され制限のスループットに対する影響が大きかった。
【００３３】
第２の実施例では、追い越されカウンター1560の値に応じてそのコマンドが実行されやすいようにすることで、追い越されカウンター1560が制限回数A2010または制限回数B2020を超えにくくし、追い越され制限のスループットに対する影響を少なくする。
【００３４】
以下、第１の実施例と異なる部分のみを説明する。
【００３５】
図１０は次コマンド決定処理A4001のフローチャートである。本実施例では第１の実施例での次コマンド決定処理4000の代わりに次コマンド決定処理A4001を実行する。
【００３６】
まずステップ4010でタグキュー2060のLRU位置にあるコマンドを選択し、ステップ4020で次実行候補とし、ステップ4160で第１の実施例と同様にして当該コマンドの見込み処理時間を計算し、補正を加え、見込み処理時間1570にセットする。補正は当該コマンドがリードであれば、当該コマンドの追い越されカウンター1560の値を制限回数A2010と制限回数B2020のどちらか小さい方の値で割ったものを見込み処理時間にかけることとし、ライトであれば、当該コマンドの追い越されカウンター1560の値を制限回数B2020の値で割ったものを見込み処理時間にかけることとする。制限回数B2020の値が無効の場合はライトに対する補正は行わない。これにより、追い越されカウンター1560の値が大きくなるほど見込み処理時間1570の値は実際の処理時間の見込み値よりも小さくなり、当該コマンドが実行される可能性が高くなる。次にステップ4040で、制限回数B2020が有効かつ当該コマンドの追い越されカウンター1560が制限回数B2020より大きいかどうかを判定し、大きければ4110にジャンプする。大きくなければステップ4050で、制限回数A2010が有効かつ当該コマンドのリードライト種別1530がリードかつ当該コマンドの追い越されカウンター1560が制限回数A2010よりも大きいかどうかを判定し、そうであればステップ4110にジャンプし、そうでなければステップ4060で当該コマンドの前方ポインタ1580を見てまだコマンドがあるかどうかを判定する。無いと判定されたらステップ4120にジャンプし、あると判定されたらステップ4070で当該コマンドの前方ポインタ1580が示すコマンドを選択し、これ以降そのコマンドを当該コマンドとする。そしてステップ4150で当該コマンドの見込み処理時間を計算し、ステップ4160と同様にして補正を加え、見込み処理時間1570にセットする。補正は当該コマンドがリードであれば、当該コマンドの追い越されカウンター1560の値を制限回数A2010と制限回数B2020のどちらか小さい方の値で割ったものをステップ4150で求めた見込み処理時間にかけることとし、ライトであれば、当該コマンドの追い越されカウンター1560の値を制限回数B2020の値で割ったものをステップ4150で求めた見込み処理時間にかけることとする。これにより、追い越されカウンター1560の値が大きくなるほど見込み処理時間1570の値は実際の処理時間の見込み値よりも小さくなり、当該コマンドが実行される可能性が高くなる。そして、ステップ4090で当該コマンドの見込み処理時間1570と次実行候補コマンドの見込み処理時間1570を比較し、当該コマンドの見込み処理時間1570の方が小さければ、ステップ4100で当該コマンドを次実行候補コマンドとしてステップ4040へジャンプし、小さくなければステップ4100を行わずにステップ4040にジャンプする。
【００３７】
ステップ4110では当該コマンドを次実行候補のコマンドとし、ステップ4120で次実行候補コマンドを次実行コマンドとして決定し、ステップ4130でヘッド位置2030に次実行コマンドのLBA1540にサイズ1550を加えた値を代入し、ステップ4140で次実行コマンドの後方ポインタ1590を辿って、次実行コマンドよりもタグキュー2060のLRU位置に近いコマンドの追い越されカウンター1560全てに1を加え、次コマンド決定処理A4001は終了する。
【００３８】
（第３の実施例）
第１の実施例、第２の実施例では後から来たコマンドに追い越される回数を制限してレスポンスの最悪値を保証していたが、第３の実施例では、コマンドが実行されずにタグキューに繋がっている時間の最大値を指定してレスポンスの最悪値を保証する。以下、第１の実施例と異なる部分についてのみ説明する。
【００３９】
図１１は本発明を適用するコンピューターシステムA1220を示す。コンピューターシステムA1220はI／O要求を発行するホストコンピューター1010、I／O要求を処理する記憶装置システムA1230から構成される。
【００４０】
記憶装置システムA1230はI／O要求を受け付ける記憶装置コントローラー1000、データを格納している記憶装置A1101から構成される。
【００４１】
記憶装置コントローラー1000は、ホストコンピューター1010とのやりとりを行うホストインターフェース1030、記憶装置1100とのやりとりを行うFCインターフェース1070、記憶装置コントローラー1000を管理するCPU1020、ホストコンピューター1010からのライトデータを一時的に格納するキャッシュ1050、CPU1020が実行するプログラムやキャッシュ1050の管理データ等を格納するメモリ1060、ユーザーが記憶装置1100あるいは記憶装置コントローラー1000に対する各種パラメーターを入力するサービスボード1040から構成される。
【００４２】
記憶装置A1101は、記憶装置コントローラー1000とのやりとりを行うFCインターフェース1080、データが格納されているディスク1090、ディスク1090を制御するディスクコントローラー1110、受領したI／O要求を解釈しディスクコントローラー1110に指示するCPU1120、CPU1120が実行するプログラムやデータを格納するメモリ1130、タイマー1140より構成される。ディスク1090は本実施例ではハードディスクを想定しているが、MO、CD−RW等でも本発明を適用可能である。
【００４３】
図１２は記憶装置A1101上のメモリ1130に格納されているコマンド管理Aテーブル1501である。コマンド管理テーブルA1501は複数のコマンド管理テーブルエントリA1511からなる。コマンド管理テーブルA1501は記憶装置A1101が受領したI／O要求を管理するテーブルで、I／O1個につき一つのコマンド管理テーブルエントリA1511が用意される。
【００４４】
コマンド管理テーブルエントリA1511は、当該エントリの有効・無効を表す有効無効フラグ1520、I／O要求（以下、コマンドと呼ぶ）がリードかライトかを意味するリードライト種別1530、要求データの格納アドレスを表すLBA1540、要求データの長さを表すサイズ1550、当該コマンドの受領時刻1600、ディスク1090の現在のヘッド位置から当該コマンドを処理するのにかかる見込み時間を表す見込み処理時間1570、タグキュー2060を構成する前方ポインター1580と後方ポインター1590より構成される。
【００４５】
図１３は記憶装置A1101およびディスク1090の状態を管理するドライブ管理テーブルA2100である。ドライブ管理テーブルA2100は、リードコマンドに対してタグキュー2060上に存在する時間の限度を規定する制限時間A2060、リードライトコマンド両方に対してタグキュー2060上に存在する時間の限度を規定する制限時間B2070、ディスク1090の現在のヘッド位置2030、タグキュー2060を構成するMRUポインタ2040とLRUポインタ2050から構成される。ここで、制限時間A2060は制限時間B2070よりも小さいか、制限時間A2060のみが有効であるとする。
【００４６】
図１４は記憶装置1101が記憶装置コントローラー1000からコマンドを受領したときにCPU1120が実行するコマンド受領処理A3200のフローチャートを示す。まずステップ3010で記憶装置1100はFCインターフェース1080を通じてコマンドを受領する。次にステップ3020においてCPU1120は受領したコマンドがリードかライト、あるいはそれ以外かを判定し、それ以外と判定されたらステップ3110にジャンプする。リードかライトと判定されたらステップ3030において、コマンド管理テーブルエントリA1511の有効無効フラグ1520が無効のものを探し、ステップ3040で見つけた空きコマンド管理Aテーブルエントリ1511の有効無効フラグ1520を有効とし、リードライト種別1530、LBA1540、サイズ1550を受領したコマンドに合わせてセットし、タイマー1140の値を受領時刻1600にセットし、見込み処理時間を無効を意味する−1で初期化する。そしてステップ3050において、タグキュー2060のMRU位置に当該エントリを繋ぐ。そしてステップ3060でディスク1090が何らかのコマンドを実行中であるかどうかを判定し、実行中であればコマンド受領処理A3200は終了する。実行中でなければステップ3070で当該コマンドの実行を開始し、コマンド受領処理A3200は終了する。
【００４７】
ステップ3020でリードでもライトでもないと判定された場合にはステップ3110において、受領したコマンドが制限時刻をセットするコマンドであるかどうかを判定する。制限時刻をセットするコマンドであったら、ステップ3120において、制限時刻A2060と制限時刻B2070をセットし、コマンド受領処理A3200は終了する。制限時刻をセットするコマンドでもなかったら、ステップ3100でその他のコマンドに対する処理を行い、コマンド受領処理A3200は終了する。その他のコマンドに対する処理は本発明とは関係がないので説明は省略する。制限時刻をセットするコマンドは、たとえばSCSIのモードセレクトコマンドで実現可能である。
【００４８】
図１５に次コマンド決定処理B4002のフローチャートを示す。まずステップ4010でタグキュー2060のLRU位置にあるコマンドを選択し、ステップ4020で次実行候補とし、ステップ4030でそのコマンドの見込み処理時間を計算し、見込み処理時間1570にセットする。見込み処理時間の計算は、シーク距離と回転待ち時間、媒体アクセス時間より算出するのが望ましいが、本実施例では簡便にするため、LBA1540とヘッド位置2030の差の絶対値を見込み処理時間の近似値として用いることにする。次にステップ4170で、制限時間B2070が有効かつ現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値が制限時刻B2070より大きいかどうかを判定し、大きければ4110にジャンプする。大きくなければステップ4180で、制限時間A2060が有効かつ当該コマンドのリードライト種別1530がリードかつ現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値が制限時間A2060よりも大きいかどうかを判定し、そうであればステップ4110にジャンプし、そうでなければステップ4060で当該コマンドの前方ポインタ1580を見てまだコマンドがあるかどうかを判定する。無いと判定されたらステップ4120にジャンプし、あると判定されたらステップ4070で当該コマンドの前方ポインタ1580が示すコマンドを選択し、これ以降そのコマンドを当該コマンドとする。そしてステップ4080で当該コマンドの見込み処理時間を計算し、見込み処理時間1570にセットし、ステップ4090で当該コマンドの見込み処理時間1570と次実行候補コマンドの見込み処理時間1570を比較し、当該コマンドの見込み処理時間1570の方が小さければ、ステップ4100で当該コマンドを次実行候補コマンドとしてステップ4170へジャンプし、小さくなければステップ4100を行わずにステップ4170にジャンプする。
【００４９】
ステップ4110では当該コマンドを次実行候補のコマンドとし、ステップ4120で次実行候補コマンドを次実行コマンドとして決定し、ステップ4130でヘッド位置2030に次実行コマンドのLBA1540にサイズ1550を加えた値を代入し、次コマンド決定処理B4002は終了する。
【００５０】
ここで、制限時間A2060の方が制限時間B2070よりも小さい、あるいは、制限時間A2060のみが有効な場合について考えると、ステップ4180よりリードコマンドはライトコマンドよりも小さな制限時間で次実行コマンドになるため、リードコマンドは応答時間の最悪値が軽減される。ただし、制限時間A2060のみが有効である場合は、ライトコマンドの実行時間が非常に遅くなる可能性があるため、記憶装置コントローラー1000でのタイムアウト値を非常に大きくとるか、タイムアウトをライトコマンドには適用しないか、他のコマンドの終了に応じてタイムアウト時間を伸ばす等の対応を行う必要がある。また、制限時間A2060や制限時間B2070の値によっては、ライトコマンドだけではなく、リードコマンドに対しても同様に、タイムアウトを適用しないか、他のコマンドの終了に応じてタイムアウト時間を伸ばす等の対応を行う必要がある。
【００５１】
図１６はユーザーがサービスボード1040から制限時間を入力したときに記憶装置コントローラー1000内のCPU1020で実行される制限時間設定処理4600のフローチャートである。まずステップ4610でユーザーがサービスボード1040より2種類の制限時間を入力する。そしてステップ4620でメモリ1060上に制限時間セットコマンドを作成する。制限時間セットコマンドは入力された2種類の制限時間を記憶装置A1101に渡すためのコマンドで、例えばSCSIのモードセレクトコマンドを用いて実現できる。そしてステップ4630でFCインターフェース1070を通じて記憶装置A1101に制限時間セットコマンドを発行し、制限時間設定処理4600は終了する。
【００５２】
本実施例でも第１の実施例と同様にして、次コマンド決定処理B4002のステップ4180があることで、制限時間B2070の値が無効であるか、制限時間A2060が制限回数B2070よりも小さい場合には、リードコマンドはライトコマンドよりもコマンドキュー上にいる時間が少ない値で優先的に実行されることになり、つまり、リードコマンドの応答時間の最悪値はライトコマンドに比べて小さくなることが期待できる。
【００５３】
（第４の実施例）
第３の実施例ではコマンドがコマンドキュー上に繋がっている時間が制限時間A2060あるいは制限時間B2070を超えたとたんに現在のヘッド位置を考慮せずに優先実行されてしまうため、制限時間のスループットに対する影響が大きかった。
【００５４】
第４の実施例では、現在のタイマー1140の値から受領時刻1600を引いたの値に応じてそのコマンドが実行されやすいようにすることで、現在のタイマー1140の値から受領時刻1600を引いたの値が制限時間A2060または制限時間B2070を超えにくくし、制限時間のスループットに対する影響を少なくする。
【００５５】
以下、第３の実施例と異なる部分のみを説明する。
【００５６】
図１７は次コマンド決定処理C4003のフローチャートである。本実施例では第３の実施例での次コマンド決定処理B4002の代わりに次コマンド決定処理C4003を実行する。
【００５７】
まずステップ4010でタグキュー2060のLRU位置にあるコマンドを選択し、ステップ4020で次実行候補とし、ステップ4200で第３の実施例と同様にして当該コマンドの見込み処理時間を計算し、補正を加え、見込み処理時間1570にセットする。補正は当該コマンドがリードであれば、現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値を制限時間A2060と制限時間B2070のどちらか小さい方の値で割ったものをステップ4190で求めた見込み処理時間にかけることとし、ライトであれば、現在のタイマー1140の値から当該コマンドの受領時刻1600を引いたの値を制限時間B2070の値で割ったものをステップ4190で求めた見込み処理時間にかけることとする。これにより、現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値が大きくなるほど見込み処理時間1570の値は実際の処理時間の見込み値よりも小さくなり、当該コマンドが実行される可能性が高くなる。
【００５８】
次にステップ4170で、制限時間B2070が有効かつ現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値が制限時刻B2070より大きいかどうかを判定し、大きければ4110にジャンプする。大きくなければステップ4180で、制限時間A2060が有効かつ当該コマンドのリードライト種別1530がリードかつ現在のタイマー1140の値から当該コマンドの受領時刻1600を引いた値が制限時間A2060よりも大きいかどうかを判定し、そうであればステップ4110にジャンプし、そうでなければステップ4060で当該コマンドの前方ポインタ1580を見てまだコマンドがあるかどうかを判定する。無いと判定されたらステップ4120にジャンプし、あると判定されたらステップ4070で当該コマンドの前方ポインタ1580が示すコマンドを選択し、これ以降そのコマンドを当該コマンドとする。そしてステップ4190で当該コマンドの見込み処理時間を計算し、ステップ4200で、求めた見込み処理時間にステップ4200と同様にして補正を加え、見込み処理時間1570にセットする。そして、ステップ4090で当該コマンドの見込み処理時間1570と次実行候補コマンドの見込み処理時間1570を比較し、当該コマンドの見込み処理時間1570の方が小さければ、ステップ4100で当該コマンドを次実行候補コマンドとしてステップ4170へジャンプし、小さくなければステップ4100を行わずにステップ4170にジャンプする。
【００５９】
ステップ4110では当該コマンドを次実行候補のコマンドとし、ステップ4120で次実行候補コマンドを次実行コマンドとして決定し、ステップ4130でヘッド位置2030に次実行コマンドのLBA1540にサイズ1550を加えた値を代入し、次コマンド決定処理C4003は終了する。
【００６０】
【発明の効果】
本発明によって、リードコマンドの応答時間の最悪値を保証しつつ、スループットの低下を最小限に抑えることができる。
【図面の簡単な説明】
【図１】本発明を適用するコンピューターシステムを示す図である。
【図２】コマンド管理テーブルとそのエントリを示す図である。
【図３】ドライブ管理テーブルを示す図である。
【図４】タグキューのイメージ図である。
【図５】コマンド受領処理のフローチャートである。
【図６】コマンド完了処理のフローチャートである。
【図７】次コマンド決定処理のフローチャートである。
【図８】制限回数設定処理のフローチャートである。
【図９】同期コマンド処理のフローチャートである。
【図１０】第２の実施例に対応する次コマンド決定処理Aのフローチャートである。
【図１１】第３の実施例に対応するコンピューターシステムAを示す図である。
【図１２】第３の実施例に対応するコマンド管理テーブルAとそのエントリを示す図である。
【図１３】第３の実施例に対応するドライブ管理テーブルAを示す図である。
【図１４】第３の実施例に対応するコマンド受領処理Aのフローチャートである。
【図１５】第３の実施例に対応する次コマンド決定処理Bのフローチャートである。
【図１６】第３の実施例に対応する制限時間設定処理のフローチャートである。
【図１７】第４の実施例に対応する次コマンド決定処理Cのフローチャートである。
【符号の説明】
1200…コンピューターシステム、1210…記憶装置システム、1010…ホストコンピューター、1000…記憶装置コントローラー、1040…サービスボード、1100…記憶装置、1090…ディスク、1120…CPU、1130…メモリ、1110…ディスクコントローラー、1500…コマンド管理テーブル、1510…コマンド管理テーブルエントリ、1560…追い越されカウンター、2000…ドライブ管理テーブル、2010…制限回数A、2020…制限回数B、2030…ヘッド位置。
【図１】
0003793682.tif 000002
【図２】
0003793682.tif 000003
【図３】
0003793682.tif 000004
【図４】
0003793682.tif 000005
【図５】
0003793682.tif 000006
【図６】
0003793682.tif 000007
【図７】
0003793682.tif 000008
【図８】
0003793682.tif 000009
【図９】
0003793682.tif 000010
【図１０】
0003793682.tif 000011
【図１１】
0003793682.tif 000012
【図１２】
0003793682.tif 000013
【図１３】
0003793682.tif 000014
【図１４】
0003793682.tif 000015
【図１５】
0003793682.tif 000016
【図１６】
0003793682.tif 000017
【図１７】
0003793682.tif 000018