(57)【特許請求の範囲】
【請求項１】
データを記憶する記憶装置と、
前記記憶装置へのデータの制御を実施する第１の装置および前記第１の装置と二重化された第２の装置とを有し、
前記第１の装置は、
前記第１の装置を制御する制御部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを処理する処理装置と、
前記処理装置を制御するファームウェアの、当該ファームウェアが格納された第１の記憶部から前記処理装置へのダウンロード時に前記制御部が前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部と、を有し、
前記制御部は、
前記ファームウェアのダウンロード要求があった場合、前記記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を取得し、前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、取得した発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を制限する
ことを有することを特徴とするストレージシステム。
【請求項２】
前記制御部は、発行中の前記コマンドの数が、前記発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を前記第２の装置に依頼する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記制御部は、さらに、前記ファームウェアのダウンロードに移行する際に、発行中の前記コマンドの数が、前記発行可能なコマンド数を超えていれば、前記ダウンロード要求があったファームウェアのダウンロードの実行の開始を待つ
ことを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記制御部は、さらに、発行中の前記コマンドの数が、前記発行可能なコマンド数以上でなければ、新たに発行要求があった前記コマンドを発行し、前記記憶部に記憶された情報に基づいて得られる、発行中のコマンド数に対応する応答遅延時間を、予め定められた前記コマンドの応答待ち時間に加算する
ことを特徴とする請求項１または請求項２に記載のストレージシステム。
【請求項５】
前記制御部は、新たに発行要求があった前記コマンドの発行時刻および前記コマンドの応答時刻の差分を算出し、算出した差分を発行中の前記コマンドの数に対応する応答時間とし、発行中の前記コマンドの数に対応する、前記記憶部に記憶された応答遅延時間を更新する
ことを特徴とする請求項４に記載のストレージシステム。
【請求項６】
データを記憶する記憶装置へのデータの制御を実施するコントローラモジュールであって、
前記コントローラモジュールを制御する制御部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを処理する装置と、
前記装置を制御するファームウェアの、当該ファームウェアが格納された第１の記憶部から前記装置へのダウンロード時に前記制御部が前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部と、を有し、
前記制御部は、
前記ファームウェアのダウンロード要求があった場合、前記記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を取得し、前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、取得した発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を制限する
ことを有することを特徴とするコントローラモジュール。
【請求項７】
データを記憶する記憶装置へのデータの制御を実施する第１の装置および前記第１の装置と二重化された第２の装置とを有するストレージシステムの制御方法であって、
前記第１の装置は、
前記データの入出力に関わるコマンドを処理する処理装置を制御するファームウェアのダウンロード要求があった場合に、前記ファームウェアの、当該ファームウェアが格納された第１の記憶部から前記処理装置へのダウンロード時に纏めて発行した前記コマンドのコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を取得し、
前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、前記取得する処理によって取得された発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を、前記第２の装置に依頼する
処理を含むことを特徴とするストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム等に関する。
【背景技術】
【０００２】
ストレージシステムには、複数のディスク装置が搭載されており、各ディスク装置は入出力インタフェースであるＳＡＳ（Serial  Attached  SCSI）を介してコントローラモジュール（ＣＭ：Controller  Module）と接続されている。ストレージシステムは、ホストコンピュータと接続され、ホストコンピュータから発行される、ディスク装置に対する入出力コマンドに基づいてデータの読み書きを行う。すなわち、ホストコンピュータからストレージ装置に発行される入出力コマンドは、ＣＭ内に搭載された入出力制御チップ（ＩＯＣ：I/O  Controller）のファームウェア（ＩＯＣＦＷ：I/O  Controller  Firmware）により制御され、対象のディスク装置へ発行される。
【０００３】
ところで、ＩＯＣＦＷは、ＣＭを制御するファームウェア（ＣＦＷ：Controller  Firmware）と独立したファームウェアである。冗長化された複数のＣＭが搭載されたストレージシステムでは、運用中のシステムを停止することなくＣＦＷを更新する仕組みが知られている。この仕組みは「活性ファームウェアローディング（ＣＦＬ：Concurrent  Firmware  Loading）」と呼ばれる。ＣＦＬには、ＣＭの電源をオフおよびオンを実行してＣＦＷを更新する方式とＣＭの電源をオフおよびオンを実行しないでＣＦＷを更新する方式（以降、「ＷａｒｍＢｏｏｔ処理」という。）が存在する。
【０００４】
図１１は、ＷａｒｍＢｏｏｔ処理によるＣＦＷの更新を示す図である。図１１に示すように、ＷａｒｍＢｏｏｔ処理では、冗長化された０系のＣＭ＃０と１系のＣＭ＃１について、例えば、ＣＭ＃１のＣＦＷを更新した後、ＣＭ＃０のＣＦＷを更新する。なお、更新後のＣＭ＃１、ＣＭ＃０を網掛けで示す。すなわち、ＷａｒｍＢｏｏｔ処理は、ＣＭの冗長性を利用し、ＣＭ単位に順次リブートして新たなＣＦＷを順次更新する。
【０００５】
そして、ＷａｒｍＢｏｏｔ処理では、ホストコンピュータとのパスが切断されないようにするため、処理を高速で行うことが望まれる。このため、秒オーダの時間がかかるＩＯＣＦＷのダウンロード処理は、ＷａｒｍＢｏｏｔ処理内に取り入れられず、ＷａｒｍＢｏｏｔ処理前に実行される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−３２３３５６号公報
【特許文献２】特開２００９−８１５８２号公報
【特許文献３】特開２００３−７８９４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、ＩＯＣＦＷのダウンロード処理がディスク装置に対する入出力処理と並行して実行されると、入出力処理が滞ってしまう場合があるという問題があった。例えば、ＩＯＣＦＷのダウンロード処理がディスク装置に対する入出力処理と並行して実行されると、ディスク装置に発行中の入出力コマンドにおける入出力処理が滞り、入出力コマンドに対する応答が遅延してしまう場合がある。
【０００８】
１つの側面では、本発明は、ファームウェアのダウンロード処理と記憶装置に対する入出力処理が並行して実行されても、入出力処理が滞ることを防止できるストレージシステム等を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願の開示するストレージシステムは、一つの態様において、データを記憶する記憶装置と、前記記憶装置へのデータの制御を実施する第１の装置および前記第１の装置と二重化された第２の装置とを有し、前記第１の装置は、前記記憶装置に記憶されるデータの入出力に関わるコマンドを処理する処理装置と、前記処理装置を制御するファームウェアのダウンロード時に前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部と、前記ファームウェアのダウンロード要求があった場合、前記記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を検索し、前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、検索した発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を制限する制御部とを有する。
【発明の効果】
【００１０】
本願の開示するストレージシステムの一つの態様によれば、ファームウェアのダウンロード処理と記憶装置に対する入出力処理が並行して実行されても、入出力処理が滞ることを防止できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例に係るストレージシステムの構成を示す機能ブロック図である。
【図２】図２は、実施例に係る応答遅延時間テーブルのデータ構造の一例を示す図である。
【図３】図３は、実施例に係る許容応答遅延時間テーブルのデータ構造の一例を示す図である。
【図４】図４は、実施例に係る発行中のコマンド数がｘである場合の発行中応答待ち時間テーブルのデータ構造の一例を示す図である。
【図５】図５は、実施例に係る応答遅延時間テーブル作成処理のフローチャートを示す図である。
【図６】図６は、実施例に係る許容応答遅延時間テーブル作成処理のフローチャートを示す図である。
【図７】図７は、実施例に係るＩＯＣＦＷダウンロード制御処理のフローチャートを示す図（１）である。
【図８】図８は、実施例に係るＩＯＣＦＷダウンロード制御処理のフローチャートを示す図（２）である。
【図９】図９は、実施例に係るコマンド遅延時間更新処理のフローチャートを示す図である。
【図１０】図１０は、実施例に係るコマンドの応答を監視する処理のフローチャートを示す図である。
【図１１】図１１は、ＷａｒｍＢｏｏｔ処理によるＣＦＷの更新を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するストレージシステム、コントローラモジュールおよびストレージシステムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例では、冗長化された２台のコントローラモジュールが搭載されたストレージシステムに適用する場合を示す。しかし、本実施例によりこの発明が限定されるものではない。
【実施例】
【００１３】
［実施例に係るストレージシステムの構成］
図１は、実施例に係るストレージシステムの構成を示す機能ブロック図である。図１に示すように、ストレージシステム２は、上位装置であるホストコンピュータ１と保守用端末７とそれぞれ接続する。そして、ストレージシステム２は、コントローラエンクロージャ（ＣＥ）３と複数のディスク装置（以降、「ディスク」という。）５と複数のデバイスエンクロージャ（ＤＥ）６とを有する。
【００１４】
コントローラエンクロージャ３は、外部アクセスの処理機能を有する制御筐体であり、２台のコントローラモジュール（ＣＭ）４を有し、ディスク５等のデバイスに対するアクセス経路を二重化している。ディスク５は、データを記憶する記憶装置であり、例えばＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Disk）等に対応する。デバイスエンクロージャ６は、その内部に有するエクスパンダ６２を介して複数のディスク５と接続する。
【００１５】
コントローラモジュール４は、ディスク５へのデータ制御を実施する装置である。コントローラモジュール４は、２台のチャンネルアダプタ（ＣＡ）４１とエクスパンダ４２とＩ／Ｏコントローラ（ＩＯＣ）４３とＢＵＤ４４と記憶部４５と制御部４６とを有する。
【００１６】
チャンネルアダプタ４１は、ホストコンピュータ１と通信接続する通信インタフェースである。エクスパンダ４２は、ホストコンピュータ１と、ディスク５またはデバイスエンクロージャ６との間で行われるデータの送受信を中継する装置である。
【００１７】
Ｉ／Ｏコントローラ４３は、ディスク５に記憶されるデータの入出力に関わるコマンド（入出力コマンド）を処理する入出力制御装置である。ここで、入出力コマンドとは、例えばディスク５に記憶されたデータを読み出すリードコマンドであったり、データをディスク５に書き込むライトコマンドであったりする。また、Ｉ／Ｏコントローラ４３は、Ｉ／Ｏコントローラ４３を制御するコントローラファームウェアであるＩＯＣＦＷ４３１を有する。ＩＯＣＦＷ４３１は、例えば、入出力コマンドを該当するディスク５に発行したり、発行した入出力コマンドの応答を発行元に返却したりする。
【００１８】
ＢＵＤ（Bootup  and  Utility  Device）４４は、新しくリリースされるＩＯＣＦＷ（新ＩＯＣＦＷ４４１）を記憶する記憶装置である。新ＩＯＣＦＷ４４１は、Ｉ／Ｏコントローラ４３の障害修正や機能追加の際にリリースされ、ＢＵＤに記憶される。ここで、リリースされた新ＩＯＣＦＷ４４１は、所定のタイミングで、Ｉ／Ｏコントローラ４３に対してダウンロードされることで、Ｉ／Ｏコントローラ４３のＩＯＣＦＷ４３１と置き換えられる。新ＩＯＣＦＷ４４１のダウンロード処理は、ディスク５に対する入出力コマンドの処理と並行して実行される場合であっても、入出力コマンドの処理と並行しないで実行される場合であっても良い。なお、所定のタイミングとは、コントローラモジュール４を制御するコントローラファームウェア（ＣＦＷ）を更新する方式であるＷａｒｍＢｏｏｔ処理前を一例とする。ＷａｒｍＢｏｏｔ処理は、運用中のストレージシステム２を停止することなくＣＦＷを更新する仕組みの１つであり、コントローラモジュール４の冗長性を利用してコントローラモジュール４の電源をオフおよびオンを実行しないでＣＦＷを更新する。しかしながら、所定のタイミングは、ＷａｒｍＢｏｏｔ処理前に限定されず、ＷａｒｍＢｏｏｔ処理と無関係なタイミングであっても良い。
【００１９】
記憶部４５は、応答遅延時間テーブル４５１、許容応答遅延時間テーブル４５２および発行中応答待ち時間テーブル４５３を記憶する。記憶部４５は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子等の記憶装置に対応する。
【００２０】
応答遅延時間テーブル４５１は、ＩＯＣＦＷのダウンロードによって入出力コマンドのディスク５からの応答が遅延する時間（応答遅延時間）を記憶するテーブルである。かかる応答遅延時間テーブル４５１は、入出力コマンドを纏めて発行するコマンド数に対応する応答遅延時間を表す。応答遅延時間テーブル４５１は、例えばストレージシステム２の運用前にテーブル作成部４６１により作成され、運用中の応答待ち時間を補整する場合に用いられる。なお、応答遅延時間テーブル４５１の詳細は、後述する。
【００２１】
許容応答遅延時間テーブル４５２は、ＩＯＣＦＷのダウンロード時における許容可能な応答遅延時間を記憶するテーブルである。許容応答遅延時間テーブル４５２は、例えばストレージシステム２の運用前に作成され、運用中の応答待ち時間を補整する場合に用いられる。
【００２２】
発行中応答待ち時間テーブル４５３は、ＩＯＣＦＷのダウンロードと並行して発行される入出力コマンドの応答待ち時間を記憶するテーブルである。かかる発行中応答待ち時間テーブル４５３は、入出力コマンドのコマンド数に対応する応答待ち時間を、発行される入出力コマンド毎に記憶する。応答待ち時間とは、入出力コマンドをディスク５に発行してからディスク５からの応答を検出するまでの時間であってタイムアウトとなる時間を意味する。この応答待ち時間は、ストレージシステム２の運用中のＩＯＣＦＷのダウンロード時に、応答遅延時間テーブル４５１を用いて補整される。なお、許容応答遅延時間テーブル４５２および発行中応答待ち時間テーブル４５３の詳細は、後述する。
【００２３】
制御部４６は、コントローラモジュール４を制御する。例えば、制御部４６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路、または、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路である。さらに、制御部４６は、テーブル作成部４６１と、ＩＯＣＦＷダウンロード制御部４６２と、応答監視部４６３とを有する。なお、制御部４６に含まれる各機能部は、例えば、コントローラモジュール４を制御するＣＦＷによって実現される。
【００２４】
テーブル作成部４６１は、応答遅延時間テーブル４５１を作成する。なお、テーブル作成部４６１による処理は、例えば、ストレージシステム２の運用前に実行される。例えば、テーブル作成部４６１は、ＩＯＣＦＷのダウンロード中に、一度に纏めて入出力コマンドを発行し、発行した入出力コマンドの数毎の応答遅延時間を算出する。そして、テーブル作成部４６１は、算出した入出力コマンドの数毎の応答遅延時間を応答遅延時間テーブル４５１に格納する。
【００２５】
ここで、応答遅延時間テーブル４５１のデータ構造について、図２を参照して説明する。図２は、実施例に係る応答遅延時間テーブルのデータ構造の一例を示す図である。図２に示すように、応答遅延時間テーブル４５１は、コマンド数４５１ａと応答時間４５１ｂとダウンロード時の応答時間４５１ｃとダウンロード時の遅延時間４５１ｄとを対応付けて記憶する。コマンド数４５１ａは、一度に纏めて発行する入出力コマンドの数を示し、１から発行可能な最大数までの数が該当する。発行可能な最大数は、Ｉ／Ｏコントローラ４３の資源によって異なるが、例えば２０００を示す。応答時間４５１ｂは、ＩＯＣＦＷのダウンロード実行時でない場合にコマンド数分入出力コマンドを纏めて発行したときの平均応答時間を示す。ダウンロード時の応答時間４５１ｃは、ＩＯＣＦＷのダウンロード実行時である場合にコマンド数分入出力コマンドを纏めて発行したときの平均応答時間を示す。ダウンロード時の遅延時間４５１ｄは、ＩＯＣＦＷのダウンロードによって応答が遅延した時間を示す。すなわち、ダウンロード時の遅延時間４５１ｄは、ダウンロード時の応答時間４５１ｃから応答時間４５１ｂを差し引いて得られる時間となる。
【００２６】
一例として、コマンド数４５１ａが「ｘ」である場合、応答時間４５１ｂにＴ＿ｒ（ｘ）が示す値を記憶している。ダウンロード時の応答時間４５１ｃにＴ＿ｒｆ（ｘ）が示す値を記憶している。ダウンロード時の遅延時間４５１ｄにＴ＿ｄ（ｘ）が示す値を記憶している。
【００２７】
図１に戻って、テーブル作成部４６１は、応答遅延時間テーブル４５１に基づいて、許容応答遅延時間テーブル４５２を作成する。例えば、テーブル作成部４６１は、予め定められたダウンロード時における入出力コマンドの許容可能な応答遅延時間を、許容応答遅延時間テーブル４５２に設定する。そして、テーブル作成部４６１は、応答遅延時間テーブル４５１に基づいて、設定した許容可能な応答遅延時間に最も近いダウンロード時の遅延時間を読み出す。そして、テーブル作成部４６１は、読み出したダウンロード時の遅延時間に対応するコマンド数を検索し、検索したコマンド数をダウンロード時の発行可能なコマンド数として許容応答遅延時間テーブル４５２に格納する。すなわち、ＩＯＣＦＷのダウンロード時に、ダウンロード時の発行可能なコマンド数まで入出力コマンドが発行されたとしても、ダウンロードによって遅延する各コマンドの応答遅延時間が許容可能な応答遅延時間の範囲内となる。このため、ＩＯＣＦＷのダウンロード時であって、入出力処理が滞らない。
【００２８】
図３は、実施例に係る許容応答遅延時間テーブルのデータ構造の一例を示す図である。図３に示すように、許容応答遅延時間テーブル４５２は、許容応答遅延時間４５２ａと発行可能コマンド数４５２ｂとを対応付けて記憶する。許容応答遅延時間４５２ａは、ダウンロード時における入出力コマンドの許容可能な応答遅延時間を示す。発行可能コマンド数４５２ｂは、ダウンロード時の発行可能なコマンド数を示す。一例として、許容応答遅延時間テーブル４５２は、許容応答遅延時間４５２ａが「Ｔ＿ｍ」である場合、発行可能コマンド数４５２ｂに「Ｌ」を記憶している。
【００２９】
図１に戻って、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード中に、発行中のコマンドの数が、ダウンロード時の発行可能なコマンド数以上であれば、新たに発行要求があった入出力コマンドの発行を制限する。
【００３０】
例えば、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード中に入出力コマンドの発行要求があったとき、許容応答遅延時間テーブル４５２から発行可能コマンド数を読み出す。そして、ＩＯＣＦＷダウンロード制御部４６２は、既に発行中のコマンドの数が、読み出した発行可能コマンド数以上であれば、新たに発行要求があった入出力コマンドの発行を制限する。一例として、ＩＯＣＦＷダウンロード制御部４６２は、発行が制限された入出力コマンドの処理を、二重化されたコンローラモジュール４のＩ／Ｏコントローラ４３に依頼する。
【００３１】
また、ＩＯＣＦＷダウンロード制御部４６２は、既に発行中のコマンドの数が、読み出した発行可能コマンド数以上でなければ、新たに発行要求があった入出力コマンドを発行する。そして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１に基づいて、発行中のコマンドの数に対応するダウンロード時の遅延時間を取得する。そして、ＩＯＣＦＷダウンロード制御部４６２は、取得したダウンロード時の遅延時間を、発行中応答待ち時間テーブル４５３に記憶された、発行中のコマンドの数に対応する応答待ち時間に加算する。すなわち、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１に記憶されたコマンド数に対応するダウンロード時の遅延時間を用いて、ＩＯＣＦＷのダウンロード時の応答待ち時間を補整する。言い換えれば、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード時の入出力コマンドのタイムアウトとなる時間を補整する。後述する応答監視部４６３は、補整した応答待ち時間を用いて、ＩＯＣＦＷのダウンロード時における、入出力コマンドの応答を監視することとなる。そして、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードが完了するまでの間、入出力コマンドの新規発行または入出力コマンドの応答により発行中のコマンドの数が変化する都度、発行中のコマンドの数に対応する応答待ち時間を補整する。
【００３２】
また、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードに移行する際、既に発行中のコマンドの数が、読み出した発行可能コマンド数より大きければ、ダウンロード要求があったＩＯＣＦＷのダウンロードの実行の開始を待つ。既に発行中のコマンドの数が、発行可能コマンド数より超えているので、この状況下でＩＯＣＦＷのダウンロードが実行されると入出力処理が滞ってしまうからである。
【００３３】
ここで、発行中応答待ち時間テーブル４５３のデータ構造について、図４を参照して説明する。図４は、実施例に係る発行中のコマンド数がｘである場合の発行中応答待ち時間テーブルのデータ構造の一例を示す図である。図４に示すように、発行中応答待ち時間テーブル４５３は、発行中コマンド数４５３ａとシーケンシャル番号４５３ｂとコマンド４５３ｃと応答待ち時間４５３ｄとを対応付けて管理する。発行中コマンド数４５３ａは、並行して発行されている入出力コマンドのコマンド数を示す。シーケンシャル番号４５３ｂは、並行して発行されている入出力コマンドの発行順に応じて付けられた番号である。コマンド４５３ｃは、シーケンシャル番号４５３ｂに対応する入出力コマンドの内容を示す。応答待ち時間４５３ｄは、入出力コマンドがディスク５に発行されてからディスク５からの応答を検出するまでの時間であってタイムアウトとなる時間を示す。応答待ち時間４５３ｄの初期値は、ＩＯＣＦＷのダウンロード実行時でない場合の応答待ち時間を示し、例えばコマンド４５３ｃに共通して一律５秒である。なお、応答待ち時間４５３ｄの初期値は、コマンド４５３ｃに共通しなくても良く、コマンド４５３ｃの内容に応じて異なる値であっても良い。一例として、リードコマンドを４秒とし、ライトコマンドを５秒としても良い。
【００３４】
一例として、発行中コマンド数４５３ａが「ｘ」であって、シーケンシャル番号４５２ｂが「２」である場合、コマンド４５３ｃに発行中の入出力コマンドの内容を示す「Ｂ」を記憶している。応答待ち時間４５３ｄに「Ｔ＿ｗ（Ｂ）＋Ｔ＿ｄ（ｘ）」を記憶している。なお、Ｔ＿ｗ（Ｂ）は、入出力コマンドＢの応答待ち時間の初期値を示す。Ｔ＿ｄ（ｘ）は、コマンド数が「ｘ」である場合のダウンロード時の遅延時間を示す。すなわち、応答待ち時間４５３ｄは、応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄを用いて、初期値の「Ｔ＿ｗ（Ｂ）」から「Ｔ＿ｗ（Ｂ）＋Ｔ＿ｄ（ｘ）」に補整されている。
【００３５】
図１に戻って、応答監視部４６３は、入出力コマンドの応答を監視する。例えば、応答監視部４６３は、入出力コマンドが発行された場合、発行された入出力コマンドに関し、発行中応答待ち時間テーブル４５３の応答待ち時間を初期値に設定する。その後、応答監視部４６３は、発行中応答待ち時間テーブル４５３に記憶された各入出力コマンドの応答待ち時間を参照しながら、発行中の入出力コマンド毎に応答を監視する。なお、初期値に設定された応答待ち時間は、ＩＯＣＦＷがダウンロードされた場合、ＩＯＣＦＷダウンロード制御部４６２によって補整された値となる。したがって、応答監視部４６３は、ＩＯＣＦＷのダウンロードの開始から完了までの間、補整された応答待ち時間を参照しながら、発行中の入出力コマンドの応答を監視する。
【００３６】
［応答遅延時間テーブル作成処理の手順］
次に、応答遅延時間テーブル４５１の作成処理の手順について、図５を参照して説明する。図５は、実施例に係る応答遅延時間テーブル作成処理のフローチャートを示す図である。なお、応答遅延時間テーブル作成処理は、例えば、ストレージシステム２の運用前に実行される。
【００３７】
まず、テーブル作成部４６１は、纏めて入出力コマンドを発行するコマンド数（発行コマンド数）Ｎに１を設定する（ステップＳ１１）。そして、テーブル作成部４６１は、発行コマンド数Ｎが最大数Ｍａｘ以下であるか否かを判定する（ステップＳ１２）。発行コマンド数Ｎが最大数Ｍａｘより大きい場合（ステップＳ１２；Ｎｏ）、テーブル作成部４６１は、応答遅延時間テーブル４５１の作成処理を終了する。
【００３８】
一方、発行コマンド数Ｎが最大数Ｍａｘ以下である場合（ステップＳ１２；Ｙｅｓ）、テーブル作成部４６１は、Ｎ個の入出力コマンドを同時にディスク５に対して発行する（ステップＳ１３）。そして、テーブル作成部４６１は、Ｎ個の入出力コマンドの応答時間を算出し、算出した応答時間の平均値Ｔ＿ｒ（Ｎ）を算出する（ステップＳ１４）。
【００３９】
続いて、テーブル作成部４６１は、ＩＯＣＦＷのダウンロードを実行する（ステップＳ１５）。そして、テーブル作成部４６１は、ＩＯＣＦＷのダウンロードの実行中にＮ個の入出力コマンドを同時にディスク５に対して発行する（ステップＳ１６）。そして、テーブル作成部４６１は、Ｎ個の入出力コマンドの応答時間を算出し、算出した応答時間の平均値Ｔ＿ｒｆ（Ｎ）を算出する（ステップＳ１７）。
【００４０】
そして、テーブル作成部４６１は、発行コマンド数Ｎに対する入出力コマンドの応答遅延時間Ｔ＿ｄ（Ｎ）を算出する（ステップＳ１８）。具体的には、テーブル作成部４６１は、Ｔ＿ｒｆ（Ｎ）からＴ＿ｒ（Ｎ）を減算し、減算して得た値を入出力コマンドの応答遅延時間Ｔ＿ｄ（Ｎ）とする。そして、テーブル作成部４６１は、算出した入出力コマンドの応答遅延時間Ｔ＿ｄ（Ｎ）を応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄに設定する（ステップＳ１９）。具体的には、テーブル作成部４６１は、発行コマンド数Ｎと応答時間の平均値Ｔ＿ｒ（Ｎ）とダウンロード時の応答時間の平均値Ｔ＿ｒｆ（Ｎ）と応答遅延時間Ｔ＿ｄ（Ｎ）とを対応付けて応答遅延時間テーブル４５１に追加する。
【００４１】
さらに、テーブル作成部４６１は、発行コマンド数Ｎを１だけ加算する（ステップＳ２０）。そして、テーブル作成部４６１は、加算した発行コマンド数Ｎにおける処理を継続すべく、ステップＳ１２に移行する。
【００４２】
［許容応答遅延時間テーブル作成処理の手順］
次に、許容応答遅延時間テーブル４５２の作成処理の手順について、図６を参照して説明する。図６は、実施例に係る許容応答遅延時間テーブル作成処理のフローチャートを示す図である。なお、許容応答遅延時間テーブル作成処理は、応答遅延時間テーブル４５１の作成が完了した後実行される。
【００４３】
まず、テーブル作成部４６１は、ダウンロード時における入出力コマンドの許容可能な応答遅延時間を示す許容応答遅延時間Ｔ＿ｍを許容応答遅延時間テーブル４５２に設定する（ステップＳ２１）。そして、テーブル作成部４６１は、応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄから許容応答遅延時間Ｔ＿ｍに最も近い値の遅延時間Ｔ＿ｄ（Ｌ）を検索する（ステップＳ２２）。
【００４４】
さらに、テーブル作成部４６１は、ダウンロード時の遅延時間４５１ｄの値がＴ＿ｄ（Ｌ）であるときの入出力コマンドのコマンド数４５１ａを応答遅延時間テーブル４５１から読み出す。そして、テーブル作成部４６１は、読み出した値をダウンロード時の発行可能なコマンド数Ｌとする（ステップＳ２３）。
【００４５】
そして、テーブル作成部４６１は、ダウンロード時の発行可能なコマンド数Ｌを許容応答遅延時間テーブル４５２の発行可能コマンド数に設定する（ステップＳ２４）。
【００４６】
［ＩＯＣＦＷダウンロード制御処理の手順］
次に、ＩＯＣＦＷダウンロード制御処理の手順について、図７および図８を参照して説明する。図７および図８は、実施例に係るＩＯＣＦＷダウンロード制御処理のフローチャートを示す図である。
【００４７】
まず、ＩＯＣＦＷダウンロード制御部４６２は、保守用端末７からＩＯＣＦＷのダウンロード実行要求が依頼されたか否かを判定する（ステップＳ３０）。ＩＯＣＦＷのダウンロード実行要求が依頼されていないと判定した場合（ステップＳ３０；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード実行要求が依頼されるまで判定処理を繰り返す。
【００４８】
一方、ＩＯＣＦＷのダウンロード実行要求が依頼されたと判定した場合（ステップＳ３０；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、発行中のコマンド数（Ｋとする）が発行可能コマンド数（Ｌとする）以下であるか否かを判定する（ステップＳ３１）。具体的には、ＩＯＣＦＷダウンロード制御部４６２は、許容応答遅延時間テーブル４５２の発行可能コマンド数４５２ｂからダウンロード時の発行可能なコマンド数（Ｌ）を読み出す。そして、ＩＯＣＦＷダウンロード制御部４６２は、発行中のコマンド数（Ｋ）が、読み出したコマンド数（Ｌ）以下であるか否かを判定する。
【００４９】
発行中のコマンド数（Ｋ）が発行可能コマンド数（Ｌ）以下であると判定した場合（ステップＳ３１：Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードの実行を開始する（ステップＳ３２）。その後、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ４１に移行する。
【００５０】
一方、発行中のコマンド数（Ｋ）が発行可能コマンド数（Ｌ）より大きいと判定した場合（ステップＳ３１：Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードの実行の開始を待つ。既に発行中のコマンドの数が発行可能コマンド数より超えているので、この状況下でＩＯＣＦＷのダウンロードが実行されると、入出力処理が滞ってしまうからである。そこで、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの発行要求があるか否かを判定する（ステップＳ３３）。
【００５１】
入出力コマンドの発行要求があると判定した場合（ステップＳ３３；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、ペアのコントローラモジュール（ＣＭ）４のＩ／Ｏコントローラ（ＩＯＣ）４３に入出力処理を依頼する（ステップＳ３４）。そして、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ３５に移行する。
【００５２】
一方、入出力コマンドの発行要求がないと判定した場合（ステップＳ３３；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ３５に移行する。そして、ステップＳ３５では、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答があるか否かを判定する（ステップＳ３５）。
【００５３】
入出力コマンドの応答がないと判定した場合（ステップＳ３５；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ３０に移行する。一方、入出力コマンドの応答があると判定した場合（ステップＳ３５；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、発行コマンド数Ｋから、応答があった入出力コマンドの数を減算し、減算した値を発行コマンド数Ｋに設定する（ステップＳ３６）。そして、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ３０に移行する。
【００５４】
ＩＯＣＦＷのダウンロードの実行が開始されると、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１から、発行中コマンド数Ｋに対応するダウンロード時の遅延時間Ｔ＿ｄ（Ｋ）を取得する（ステップＳ４１）。さらに、ＩＯＣＦＷダウンロード制御部４６２は、発行中応答待ち時間テーブル４５３の応答待ち時間４５３ｄに、取得したダウンロード時の遅延時間Ｔ＿ｄ（Ｋ）を加算する（ステップＳ４２）。すなわち、ＩＯＣＦＷダウンロード制御部４６２は、発行中応答待ち時間テーブル４５３の、発行コマンド数分の入出力コマンドの応答待ち時間を、初期値にダウンロード時の遅延時間Ｔ＿ｄ（Ｋ）を加算した値に更新する。なお、例えば、初期値は、ＩＯＣＦＷのダウンロード実行時でない場合の入出力コマンドの応答待ち時間を示し、応答監視部４６３が設定する。
【００５５】
続いて、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードが完了したか否かを判定する（ステップＳ４３）。ＩＯＣＦＷのダウンロードが完了していないと判定した場合（ステップＳ４３；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの発行要求があるか否かを判定する（ステップＳ４４）。入出力コマンドの発行要求がないと判定した場合（ステップＳ４４；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答の有無を判定すべく、ステップＳ５１に移行する。
【００５６】
入出力コマンドの発行要求があると判定した場合（ステップＳ４４；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、発行中のコマンド数（Ｋ）が発行可能コマンド数（Ｌ）より小さいか否かを判定する（ステップＳ４５）。ここで、発行中のコマンド数（Ｋ）が発行可能コマンド数（Ｌ）より小さくない（Ｋ≧Ｌ）場合（ステップＳ４５；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ペアのＣＭ４のＩ／Ｏコントローラ（ＩＯＣ）４３に入出力処理を依頼する（ステップＳ４６）。
【００５７】
一方、発行中のコマンド数（Ｋ）が発行可能コマンド数（Ｌ）より小さい場合（ステップＳ４５；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、発行要求があった入出力コマンドをＩ／Ｏコントローラ（ＩＯＣ）４３に発行する（ステップＳ４７）。そして、ＩＯＣＦＷダウンロード制御部４６２は、発行中のコマンド数Ｋに、発行した入出力コマンドの数を加算し、加算した値を発行コマンド数Ｋに設定する（ステップＳ４８）。
【００５８】
そして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１から、発行中コマンド数Ｋに対応するダウンロード時の遅延時間Ｔ＿ｄ´（Ｋ）を取得する（ステップＳ４９）。さらに、ＩＯＣＦＷダウンロード制御部４６２は、発行中応答待ち時間テーブル４５３の応答待ち時間４５３ｄのＴ＿ｄ（Ｋ）を、取得したＴ＿ｄ´（Ｋ）に更新する（ステップＳ５０）。すなわち、ＩＯＣＦＷダウンロード制御部４６２は、発行中応答待ち時間テーブル４５３の、初期値を示す応答待ち時間４５３ｄに、取得したダウンロード時の遅延時間Ｔ＿ｄ´（Ｋ）を加算することで、応答待ち時間４５３ｄを更新する。そして、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答の有無を判定すべく、ステップＳ５１に移行する。
【００５９】
そして、ステップＳ５１では、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答があるか否かを判定する（ステップＳ５１）。入出力コマンドの応答がないと判定した場合（ステップＳ５１；Ｎｏ）、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ４３に移行する。一方、入出力コマンドの応答があると判定した場合（ステップＳ５１；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、発行コマンド数Ｋから、応答があった入出力コマンドの数を減算し、減算した値を発行コマンド数Ｋに設定する（ステップＳ５２）。そして、ＩＯＣＦＷダウンロード制御部４６２は、ステップＳ４３に移行する。
【００６０】
ステップＳ４３では、ＩＯＣＦＷのダウンロードが完了したと判定した場合（ステップＳ４３；Ｙｅｓ）、ＩＯＣＦＷダウンロード制御部４６２は、次の処理を行う。すなわち、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１から、発行中コマンド数Ｋに対応するダウンロード時の遅延時間Ｔ＿ｄ（Ｋ）を取得する（ステップＳ５３）。そして、ＩＯＣＦＷダウンロード制御部４６２は、発行中応答待ち時間テーブル４５３の入出力コマンドの応答待ち時間４５３ｄから、取得したダウンロード時の遅延時間Ｔ＿ｄ（Ｋ）を減算する（ステップＳ５４）。すなわち、発行中応答待ち時間テーブル４５３の入出力コマンドの応答待ち時間４５３ｄは、初期値に更新される。そして、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷダウンロード制御処理を終了する。
【００６１】
ところで、応答遅延時間テーブル４５１は、テーブル作成部４６１によってストレージシステム２の運用前に作成されるものとして説明した。すなわち、応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄは、ストレージシステム２の運用前に設定される。しかしながら、応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄは、これに限定されるものではなく、ストレージシステム２の運用前に設定された後、運用中に実測値に即して設定し直されても良い。そこで、応答遅延時間テーブル４５１のダウンロード時の遅延時間４５１ｄが、ストレージシステム２の運用前に設定された後、運用中に実測値に即して設定し直される場合について説明する。
【００６２】
［コマンド遅延時間更新処理の手順］
図９は、実施例に係るコマンド遅延時間更新処理のフローチャートを示す図である。なお、ＩＯＣＦＷのダウンロード中にＭ−１個の入出力コマンドが並行して発行され、さらにＭ個目の入出力コマンドが発行されたものとする。
【００６３】
ＩＯＣＦＷダウンロード制御部４６２は、Ｍ個目に発行された入出力コマンドの発行時刻Ｔ＿ｒｅｑを保持する（ステップＳ６１）。そして、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答時刻Ｔ＿ｒｅｐを保持するとともに、発行中のコマンド数Ｍを保持する（ステップＳ６２）。なお、入出力コマンドの発行時刻等を保持する場所は、例えば、記憶部４５の一時領域である。
【００６４】
続いて、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答時間Ｔ＿ｒｆ´（Ｍ）を算出する（ステップＳ６３）。具体的には、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答時刻Ｔ＿ｒｅｐから入出力コマンドの発行時刻Ｔ＿ｒｅｑを差し引いて得た値を入出力コマンドの応答時間Ｔ＿ｒｆ´（Ｍ）とする。
【００６５】
そして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１のコマンド数Ｍに対応するダウンロード時の応答時間Ｔ＿ｒｆ（Ｍ）をＴ＿ｒｆ´（Ｍ）に置換する（ステップＳ６４）。そして、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの遅延時間Ｔ＿ｄ´（Ｍ）を算出する（ステップＳ６５）。具体的には、ＩＯＣＦＷダウンロード制御部４６２は、置換したダウンロード時の応答時間Ｔ＿ｒｆ´（Ｍ）から入出力コマンドの応答時間Ｔ＿ｒ（Ｍ）を差し引いて得た値を入出力コマンドの遅延時間Ｔ＿ｄ´（Ｍ）とする。
【００６６】
そして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１のコマンド数Ｍに対応するダウンロード時の遅延時間Ｔ＿ｄ（Ｍ）をＴ＿ｄ´（Ｍ）に置換する（ステップＳ６６）。
【００６７】
このようにして、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードの実行中に並行して発行された入出力コマンドのコマンド数に対応する遅延時間を、実測値に即して設定し直すべく更新する。すなわち、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードの実行中に発行された入出力コマンドが応答されたときのコマンド数分更新する。
【００６８】
しかしながら、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１に記憶された全てのコマンド数分実測結果を反映するようにしても良い。例えば、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードの実行中に並行して発行された入出力コマンドのコマンド数に対応する遅延時間の更新前後の値の割合を算出する。そして、ＩＯＣＦＷダウンロード制御部４６２は、算出した割合を応答遅延時間テーブル４５１に記憶された他のコマンド数に対応する遅延時間に乗じる。さらに、ＩＯＣＦＷダウンロード制御部４６２は、乗じて得た値を当該コマンド数に対応する新たな遅延時間として応答遅延時間テーブル４５１に更新する。このようにして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１に記憶された全てのコマンド数分実測結果を反映できる。
【００６９】
［コマンド応答監視処理の手順］
次に、コマンド応答監処理の手順の一例について、図１０を参照して説明する。図１０は、実施例に係るコマンドの応答を監視する処理のフローチャートを示す図である。なお、以下に示す処理の手順は、１つの入出力コマンドの応答に関する監視に絞って説明する。
【００７０】
まず、応答監視部４６３は、入出力コマンドが発行されたか否かを判定する（ステップＳ７１）。入出力コマンドが発行されていないと判定した場合（ステップＳ７１；Ｎｏ）、応答監視部４６３は、入出力コマンドが発行されるまで、判定処理を繰り返す。
【００７１】
入出力コマンドが発行されたと判定した場合（ステップＳ７１；Ｙｅｓ）、応答監視部４６３は、発行中応答待ち時間テーブル４５３の応答待ち時間を初期値に設定する（ステップＳ７２）。なお、初期値は、ＩＯＣＦＷのダウンロード実行時でない場合の応答待ち時間を示す。
【００７２】
そして、応答監視部４６３は、入出力コマンドの応答があるか否かを判定する（ステップＳ７３）。入出力コマンドの応答があると判定した場合（ステップＳ７３；Ｙｅｓ）、応答監視部４６３は、入出力コマンドの応答処理を実行し（ステップＳ７４）、監視処理を終了する。
【００７３】
一方、入出力コマンドの応答がないと判定した場合（ステップＳ７３；Ｎｏ）、応答監視部４６３は、入出力コマンドがタイムアウトであるか否かを判定する（ステップＳ７５）。例えば、応答監視部４６３は、発行中応答待ち時間テーブル４５３に記憶されたコマンドに対応する応答待ち時間を用いて、入出力コマンドの応答が、入出力コマンドに対応する応答待ち時間を経過しているか否かを判定する。
【００７４】
入出力コマンドがタイムアウトであると判定した場合（ステップＳ７５；Ｙｅｓ）、応答監視部４６３は、エラー処理を実行し（ステップＳ７６）、監視処理を終了する。一方、入出力コマンドがタイムアウトでないと判定した場合（ステップＳ７５；Ｎｏ）、応答監視部４６３は、入出力コマンドの応答を待つべく、監視処理を所定時間だけ遅延（ディレイ）させ（ステップＳ７７）、その後ステップＳ７３に移行する。
【００７５】
［実施例の効果］
上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、運用開始時にＩＯＣＦＷのダウンロード時における入出力コマンドの許容可能な応答遅延時間を設定する。そして、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード要求があった場合、応答遅延時間テーブル４５１に記憶された情報に基づいて、設定した許容可能な応答遅延時間に対応する発行可能なコマンド数を検索する。そして、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード中に、発行中の入出力コマンドの数が、検索した発行可能なコマンド数以上であれば、新たに発行要求があった入出力コマンドの発行を制限する。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロード時の同時点で発行されている入出力コマンドの数を、許容可能な応答遅延時間に対応する発行可能なコマンド数に抑えることができる。この結果、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードが入出力処理と並行して実行されても、入出力処理が滞ることを防止できる。
【００７６】
また、上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、発行中の入出力コマンドの数が、発行可能なコマンド数以上であれば、新たに発行要求があった入出力コマンドの発行を二重化されたコントローラモジュール４に依頼する。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの処理を継続させながら、且つ、ＩＯＣＦＷのダウンロード時における入出力処理の影響を抑えることができる。
【００７７】
また、上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、さらに、発行中の入出力コマンドの数が、発行可能なコマンド数を超えていれば、ダウンロード要求があったＩＯＣＦＷの実行の開始を待つようにした。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、ＩＯＣＦＷのダウンロードによって入出力処理が滞ることを防止できる。
【００７８】
また、上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、発行中の入出力コマンドの数が、発行可能なコマンド数以上でなければ、新たに発行要求があった入出力コマンドを発行する。そして、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間テーブル４５１に記憶された情報に基づいて得られる、発行中の入出力コマンド数に対応する応答遅延時間を、予め定められた入出力コマンドの応答待ち時間に加算する。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、発行中の入出力コマンドの数に対応した応答遅延時間を用いることにより当該数に対応した応答待ち時間を補整することができるので、入出力処理が滞ることを防止できる。例えば、発行中の入出力コマンドの数に対応した応答待ち時間が一律であった場合と比較して、同時点の発行中の入出力コマンド数が多くなるにつれて、入出力コマンドの応答の遅延を異常であると誤認してしまうことを防止できる。
【００７９】
また、上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、新たに発行要求があった入出力コマンドの発行時刻および当該入出力コマンドの応答時刻の差分を算出する。そして、ＩＯＣＦＷダウンロード制御部４６２は、算出した差分を発行中の入出力コマンドの数に対応する応答時間とし、当該応答時間を用いて発行中の入出力コマンドの数に対応する、応答遅延時間テーブル４５１に記憶された応答遅延時間を更新する。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、新たに発行要求があった入出力コマンドの応答時間を用いて応答遅延時間を更新するので、実際の運用に即した応答遅延時間となる。この結果、ＩＯＣＦＷダウンロード制御部４６２は、入出力コマンドの応答待ち時間を、更新した応答遅延時間を用いて補整することにより、実際の運用に即した応答待ち時間となり、さらに入出力処理が滞ることを防止できる。
【００８０】
また、上記実施例によれば、ＩＯＣＦＷダウンロード制御部４６２は、発行中の入出力コマンドの数に対応する応答遅延時間の更新前後の値の割合を算出する。そして、ＩＯＣＦＷダウンロード制御部４６２は、算出した割合を、応答遅延時間テーブル４５１に記憶された、発行中の入出力コマンドの数と異なるコマンド数に対応する応答遅延時間に乗じる。そして、ＩＯＣＦＷダウンロード制御部４６２は、乗じて得た値を当該コマンド数に対応する応答遅延時間として応答遅延時間テーブル４５１に更新する。かかる構成によれば、ＩＯＣＦＷダウンロード制御部４６２は、発行中の入出力コマンドの数に対応する応答遅延時間の更新前後の値の割合を用いて、発行中の入出力コマンドの数と異なるコマンド数に対応する応答遅延時間も更新できる。この結果、ＩＯＣＦＷダウンロード制御部４６２は、応答遅延時間を更新したコマンド数に対応する応答待ち時間を、当該応答遅延時間を用いて補整することができ、実際の運用に即した応答待ち時間によって、さらに入出力処理が滞ることを防止できる。
【００８１】
［その他］
なお、ストレージシステム２は、冗長化された２台のコントローラモジュール４が搭載された場合を説明した。しかしながら、ストレージシステム２は、冗長化された３台以上のコントローラモジュール４が搭載された場合でも適用可能である。
【００８２】
また、コントローラモジュール４の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、コントローラモジュール４の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、ＩＯＣＦＷダウンロード制御部４６２と応答監視部４６３とを１つの部として統合しても良い。また、テーブル作成部４６１を、応答遅延時間テーブル４５１を作成する第１のテーブル作成部と許容応答遅延時間テーブル４５２を作成する第２のテーブル作成部とに分散しても良い。また、ＩＯＣＦＷダウンロード制御部４６２をＩＯＣＦＷのダウンロードの実行開始前の前処理部とＩＯＣＦＷのダウンロードの実行開始後の後処理部とに分散しても良い。また、記憶部４５をコントローラモジュール４の外部装置としてネットワーク経由で接続するようにしても良い。
【００８３】
また、コントローラモジュール４にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。また、コントローラモジュール４にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）にて解析実行されるプログラムにて実現されても良い。
【００８４】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【００８５】
（付記１）データを記憶する記憶装置と、
前記記憶装置へのデータの制御を実施する第１の装置および前記第１の装置と二重化された第２の装置とを有し、
前記第１の装置は、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを処理する処理装置と、
前記処理装置を制御するファームウェアのダウンロード時に前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部と、
前記ファームウェアのダウンロード要求があった場合、前記記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を検索し、前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、検索した発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を制限する制御部と
を有することを特徴とするストレージシステム。
【００８６】
（付記２）前記制御部は、発行中の前記コマンドの数が、前記発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を前記第２の装置に依頼する
ことを特徴とする付記１に記載のストレージシステム。
【００８７】
（付記３）前記制御部は、さらに、発行中の前記コマンドの数が、前記発行可能なコマンド数を超えていれば、前記ダウンロード要求があったファームウェアのダウンロードの実行の開始を待つ
ことを特徴とする付記１に記載のストレージシステム。
【００８８】
（付記４）前記制御部は、さらに、発行中の前記コマンドの数が、前記発行可能なコマンド数以上でなければ、新たに発行要求があった前記コマンドを発行し、前記記憶部に記憶された情報に基づいて得られる、発行中のコマンド数に対応する応答遅延時間を、予め定められた前記コマンドの応答待ち時間に加算する
ことを特徴とする付記１または付記２に記載のストレージシステム。
【００８９】
（付記５）前記制御部は、新たに発行要求があった前記コマンドの発行時刻および前記コマンドの応答時刻の差分を算出し、算出した差分を発行中の前記コマンドの数に対応する応答時間とし、発行中の前記コマンドの数に対応する、前記記憶部に記憶された応答遅延時間を更新する
ことを特徴とする付記４に記載のストレージシステム。
【００９０】
（付記６）前記制御部は、発行中の前記コマンドの数に対応する応答遅延時間の更新前後の値の割合を算出し、算出した割合を発行中の前記コマンドの数と異なるコマンド数に対応する応答遅延時間に乗じ、乗じて得た値を前記コマンド数に対応する応答遅延時間として前記記憶部に更新する
ことを特徴とする付記５に記載のストレージシステム。
【００９１】
（付記７）データを記憶する記憶装置へのデータの制御を実施するコントローラモジュールであって、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを処理する装置と、
前記装置を制御するファームウェアのダウンロード時に前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部と、
前記ファームウェアのダウンロード要求があった場合、前記記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を検索し、前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、検索した発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を制限する制御部と
を有することを特徴とするコントローラモジュール。
【００９２】
（付記８）データを記憶する記憶装置へのデータの制御を実施する第１の装置および前記第１の装置と二重化された第２の装置とを有するストレージシステムの制御方法であって、
前記第１の装置は、前記ファームウェアのダウンロード要求があった場合に、前記データの入出力に関わるコマンドを処理する処理装置を制御するファームウェアのダウンロード時に前記コマンドを纏めて発行したコマンド数と、前記ファームウェアのダウンロードによって応答が遅延した時間を示す応答遅延時間とを対応付けて記憶する記憶部に記憶された情報に基づいて、当該ダウンロード時における前記コマンドの許容可能な応答遅延時間に対応する発行可能なコマンド数を検索し、
前記ファームウェアのダウンロード中に、発行中の前記コマンドの数が、前記検索する処理によって検索された発行可能なコマンド数以上であれば、新たに発行要求があった前記コマンドの発行を、前記第２の装置に依頼する
処理を含むことを特徴とするストレージシステムの制御方法。
【符号の説明】
【００９３】
１  ホストコンピュータ
２  ストレージシステム
３  コントローラエンクロージャ
４  コントローラモジュール
５  ディスク
６  デバイスエンクロージャ
７  保守用端末
４１  チャンネルアダプタ
４２、６２  エクスパンダ
４３  Ｉ／Ｏコントローラ
４４  ＢＵＤ
４５  記憶部
４６  制御部
４３１  ＩＯＣＦＷ
４４１  新ＩＯＣＦＷ
４５１  応答遅延時間テーブル
４５２  許容応答遅延時間テーブル
４５３  発行中応答待ち時間テーブル
４６１  テーブル作成部
４６２  ＩＯＣＦＷダウンロード制御部
４６３  応答監視部
【図１】
0005923977.tif 000002
【図２】
0005923977.tif 000003
【図３】
0005923977.tif 000004
【図４】
0005923977.tif 000005
【図５】
0005923977.tif 000006
【図６】
0005923977.tif 000007
【図７】
0005923977.tif 000008
【図８】
0005923977.tif 000009
【図９】
0005923977.tif 000010
【図１０】
0005923977.tif 000011
【図１１】
0005923977.tif 000012