(57)【特許請求の範囲】
【請求項１】
データを記憶する記憶装置へのデータの入出力を制御する制御装置を有するストレージシステムにおいて、
前記制御装置は、
自装置における処理を分散して実行する第１の処理部および第２の処理部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを有し、
前記第１の処理部は、
前記複数のインタフェース部のうちいずれかのインタフェース部の異常に応じて当該インタフェース部のダンプデータの吸い上げ処理を実行しているときに、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
ことを特徴とするストレージシステム。
【請求項２】
前記第１の処理部は、さらに別のインタフェース部の異常を検知すると、さらに異常を検知したインタフェース部のダンプデータの吸い上げを外部の制御装置の処理部に依頼する
ことを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記第１の処理部は、ダンプデータの吸い上げを依頼する外部の処理部の候補が複数存在する場合、さらに異常を検知したインタフェース部のデータの吸い上げ時間が所定の規定時間より短く、且つ前記入出力に関わるコマンドの数から換算される処理時間が最も短い処理部に決定し、さらに異常を検知したインタフェース部のダンプデータの吸い上げを、決定した処理部に依頼する
ことを特徴とする請求項２に記載のストレージシステム。
【請求項４】
データを記憶する記憶装置へのデータの入出力を制御する制御装置において、
自装置における処理を分散して実行する第１の処理部および第２の処理部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを有し、
前記第１の処理部は、
前記複数のインタフェース部のうちいずれかのインタフェース部の異常に応じて当該インタフェース部のダンプデータの吸い上げ処理を実行しているときに、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
ことを特徴とする制御装置。
【請求項５】
データを記憶する記憶装置へのデータの入出力を制御する制御装置であって、処理を分散して実行する第１の処理部および第２の処理部と、前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを備える制御装置を有するストレージシステムの制御方法であって、
前記第１の処理部は、前記複数のインタフェース部のうちいずれかのインタフェース部の異常を検知すると、異常を検知したインタフェース部のダンプデータの吸い上げを実行し、
前記第１の処理部による吸い上げを実行する処理の実行中に、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
処理を含むことを特徴とするストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム等に関する。
【背景技術】
【０００２】
ストレージシステムでは、コントローラモジュール（ＣＭ：Controller  Module）が複数のディスク装置へのデータ制御を実施する。そして、ＣＭは、チャンネルアダプタ（ＣＡ：Channel  Adapter）を使用して、ホストコンピュータからディスク装置に対する入出力コマンドを受け付け、受け付けた入出力コマンドを制御する。そして、このＣＭは、複数のＣＡを搭載することが多い。
【０００３】
ＣＡの中には、内部のファイルやメモリの内容を記録するダンプ機能を有するものが存在する。かかるダンプ機能を有するＣＡに障害が発生すると、ＣＭ内のＣＰＵ（Central  Processing  Unit）が、障害が発生したＣＡの障害解析のためにダンプデータを吸い上げ、吸い上げたデータをシステム内のシステムディスクに格納する。その後、障害が発生したＣＡは、切り離されることとなる。そして、ＣＭ内にメインのＣＰＵとサブのＣＰＵが存在する場合であっても、常時、メインのＣＰＵが障害の発生したＣＡのダンプデータの吸い上げを行っている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平９−１６０８８４号公報
【特許文献２】特開平１１−３３８８３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、１つのＣＭ内で同時期に複数のＣＡに障害が発生した場合、障害が発生した全ＣＡのダンプデータを規定時間に吸い上げることができないという問題がある。ここで、同時期とは、２つのＣＡのダンプデータの吸い上げ期間が重なるような障害の発生時期をいう。例えば、１つのＣＭ内で同時期に２つのＣＡに障害が発生したとする。かかる場合、ＣＭ内にメインとサブの２つのＣＰＵが存在する場合であっても、常時、メインのＣＰＵが、障害の発生した２つのＣＡのダンプデータを順番に吸い上げることとなるので、規定時間に吸い上げることができない場合がある。
【０００６】
１つの側面では、本発明は、１つの制御装置内で同時期に複数のインタフェースに障害が発生した場合であっても、障害が発生した複数のインタフェースのダンプデータを規定時間に吸い上げることができるストレージシステム等を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願の開示するストレージシステムでは、一つの態様において、データを記憶する記憶装置へのデータの入出力を制御する制御装置を有するストレージシステムにおいて、前記制御装置が、自装置における処理を分散して実行する第１の処理部および第２の処理部と前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを有する。そして、前記第１の処理部は、前記複数のインタフェース部のうちいずれかのインタフェース部の異常に応じて当該インタフェース部のダンプデータの吸い上げ処理を実行しているときに、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する。
【発明の効果】
【０００８】
本願の開示するストレージシステムの一つの態様によれば、１つの制御装置内で同時期に複数のインタフェースに障害が発生した場合であっても、障害が発生した複数のインタフェースのダンプデータを規定時間に吸い上げることができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係るストレージシステムの構成を示す機能ブロック図である。
【図２】図２は、実施例２に係るストレージシステムの構成を示す機能ブロック図である。
【図３】図３は、実施例３に係るストレージシステムの構成を示す機能ブロック図である。
【図４】図４は、実施例３に係る吸い上げ制御テーブルのデータ構造の一例を示す図である。
【図５】図５は、実施例３に係るＣＡダンプ吸い上げ処理のフローチャートを示す図である。
【図６Ａ】図６Ａは、実施例３に係る吸い上げ先決定処理のフローチャートを示す図（１）である。
【図６Ｂ】図６Ｂは、実施例３に係る吸い上げ先決定処理のフローチャートを示す図（２）である。
【図７】図７は、実施例３に係るＣＡダンプ吸い上げ処理のシーケンス図（１）である。
【図８】図８は、実施例３に係るＣＡダンプ吸い上げ処理のシーケンス図（２）である。
【図９】図９は、実施例３に係るＣＡダンプ吸い上げ処理のシーケンス図（３）である。
【図１０】図１０は、実施例３に係るＣＡダンプ吸い上げ処理のシーケンス図（４）である。
【図１１】図１１は、Ｓ４９により初期状態にされた吸い上げ制御テーブルの具体例を示す図である。
【図１２】図１２は、Ｓ５１によりＣＡダンプ吸い上げ時間が格納された吸い上げ制御テーブルの具体例を示す図である。
【図１３】図１３は、Ｓ６４によりＣＡダンプ吸い上げ実行時間が格納された吸い上げ制御テーブルの具体例を示す図である。
【図１４】図１４は、Ｓ６６によりＩ／Ｏ処理時間が格納された吸い上げ制御テーブルの具体例を示す図である。
【図１５】図１５は、Ｓ６８、Ｓ６９により吸い上げ先ＣＰＵが反映された吸い上げ制御テーブルの具体例を示す図である。
【図１６】図１６は、吸い上げ完了後、Ｓ１１２により実行中フラグが更新された吸い上げ制御テーブルの具体例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示するストレージシステム、制御装置およびストレージシステムの制御方法の実施例を図面に基づいて詳細に説明する。なお、本実施例によりこの発明が限定されるものではない。
【実施例１】
【００１１】
［実施例１に係るストレージシステムの構成］
図１は、実施例１に係るストレージシステムの構成を示す機能ブロック図である。図１に示すように、ストレージシステム２は、上位装置であるホストコンピュータ１と接続する。そして、ストレージシステム２は、コントローラモジュール（ＣＭ）３と複数のディスク装置（以降、「ディスク」という。）４とを有する。
【００１２】
コントローラモジュール（ＣＭ）３は、ディスク４へのデータの入出力を制御する装置である。さらに、コントローラモジュール（ＣＭ）３は、複数のチャンネルアダプタ（ＣＡ）３１とＩ／Ｏコントローラ（ＩＯＣ）３２とＢＵＤ３３とメイン制御部３４とサブ制御部３５とを有する。
【００１３】
ディスク４は、データを記憶する記憶装置であり、例えばＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）等に対応する。
【００１４】
チャンネルアダプタ３１は、ホストコンピュータ１と通信接続する通信インタフェースである。例えば、チャンネルアダプタ３１は、ディスク４に記憶されるデータの入出力に関わるコマンド（入出力コマンド）をホストコンピュータ１から受け付ける。チャンネルアダプタ３１は、コントローラモジュール３内に複数存在し、ここでは、４台存在する場合を示している。これらチャンネルアダプタ３１は、ダンプ機能を有する。すなわち、チャンネルアダプタ３１に障害が発生して切り離しが行われる場合であっても、チャンネルアダプタ３１に保持されたダンプデータが吸い上げられ、ストレージシステム２内のＢＵＤ３３に格納される。ＢＵＤ３３に格納されたダンプデータは、後に、障害が発生したチャンネルアダプタ３１の障害の解析のために用いられる。なお、障害が発生して切り離される処理を、デグレード処理という。
【００１５】
Ｉ／Ｏコントローラ（ＩＯＣ）３２は、ディスク４と通信接続する通信インタフェースである。ＢＵＤ（Bootup  and  Utility  Device）３３は、チャンネルアダプタ３１から吸い上げられたダンプデータを記憶する記憶装置である。
【００１６】
メイン制御部３４は、自己のコントローラモジュール３における処理を分散して実行する場合のメインの制御部である。サブ制御部３５は、自己のコントローラモジュール３における処理を分散して実行する場合のサブの制御部である。なお、メイン制御部３４およびサブ制御部３５は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）等の集積回路、または、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）等の電子回路である。また、メイン制御部３４およびサブ制御部３５に含まれる各機能部は、例えば、コントローラモジュール３を制御するＣＦＷ（Controller  Module  Firmware）によってそれぞれ実現される。
【００１７】
メイン制御部３４は、複数のチャンネルアダプタ３１のうち１個のチャンネルアダプタ３１の異常に応じて当該チャンネルアダプタ３１のダンプデータの吸い上げ処理を実行する。また、メイン制御部３４は、１個のチャンネルアダプタ３１のダンプデータの吸い上げ処理を実行中に、別のチャンネルアダプタ３１の異常を検知する。そして、メイン制御部３４は、異常を検知した別のチャンネルアダプタ３１のダンプデータの吸い上げをサブ制御部３５に依頼する。吸い上げ処理の実行は、例えば、吸い上げがされるチャンネルアダプタ３１のダンプデータをメモリ（図示せず）上に取得し、取得したダンプデータを圧縮し、ＢＵＤ３３に格納することにより行われる。
【００１８】
このようにして、ストレージシステム２では、メイン制御部３４が、１個のチャンネルアダプタ３１のダンプデータの吸い上げを実行中に、別のチャンネルアダプタ３１の異常を検知する場合がある。かかる場合に、メイン制御部３４は、異常を検知したチャンネルアダプタ３１のダンプデータの吸い上げをサブ制御部３５に依頼する。このため、ストレージシステム２は、異常が発生した２個のチャンネルアダプタ３１のダンプデータの吸い上げを並行して実行できるので、双方のチャンネルアダプタ３１のダンプデータを規定時間に吸い上げることが可能になる。
【実施例２】
【００１９】
ところで、実施例１に係るストレージシステム２では、同じコントローラモジュール（ＣＭ）３内でさらに別のチャンネルアダプタ（ＣＡ）３１で異常が発生する場合がある。すなわち、１個のＣＭ３内で先行して２個のＣＡ３１で異常が発生し、さらに別のＣＡ３１で異常が発生する場合がある。かかる場合に、先行して異常が発生したＣＡ３１のダンプデータの吸い上げを、メイン制御部３４およびサブ制御部３５がそれぞれ実行していると、さらに異常が発生したＣＡ３１のダンプデータの吸い上げを規定時間内に実行できない場合がある。ここで、メイン制御部３４またはサブ制御部３５は、さらに異常が発生したＣＡ３１のダンプデータの吸い上げ処理を、先行して実行中の当該処理と多重して実行することも可能である。しかしながら、ＣＡ３１のダンプデータの吸い上げ処理には厳しい時間的制約が存在する場合がある。これは、異常が発生したＣＡ３１に対して早期に動作の停止要求を行うためである。そこで、実施例２では、さらに別のＣＡ３１で異常が発生した場合、さらに異常が発生したＣＡ３１のダンプデータの吸い上げをＣＭ３外部の制御部に依頼する場合について説明する。
【００２０】
［実施例２に係るストレージシステムの構成］
図２は、実施例２に係るストレージシステムの構成を示す機能ブロック図である。なお、図１に示すストレージシステム２と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例２とが異なるところは、コントローラモジュール３Ａ１がコントローラモジュール３Ａ２と二重化されていることである。また、実施例１と実施例２とが異なるところは、コントローラモジュール３Ａ１、３Ａ２にＣＭ間通信ドライバ３６を追加した点にある。また、実施例１と実施例２とが異なるところは、フロントエンドルータ５、バックエンドルータ６およびドライブエンクロージャー７を追加した点にある。
【００２１】
フロントエンドルータ（ＦＲＴ）５は、コントローラモジュール３Ａ間を接続する。バックエンドルータ（ＢＲＴ）６は、コンロトーラモジュール３Ａおよびディスク４間を接続する。ドライブエンクロージャー（ＤＥ）７は、ディスク４を搭載する筐体である。
【００２２】
ＣＭ間通信ドライバ３６は、フロントエンドルータ５を介して他のコントローラモジュール３Ａと通信接続する通信インタフェースである。
【００２３】
メイン制御部３４Ａは、複数のチャンネルアダプタ３１のうち１個のチャンネルアダプタ３１の異常に応じて当該チャンネルアダプタ３１のダンプデータの吸い上げ処理を実行する。また、メイン制御部３４Ａは、１個のチャンネルアダプタ３１のダンプデータの吸い上げ処理を実行中に、別のチャンネルアダプタ３１の異常を検知する。そして、メイン制御部３４Ａは、異常を検知した別のチャンネルアダプタ３１のダンプデータの吸い上げをサブ制御部３５Ａに依頼する。ここで、メイン制御部３４Ａは、さらに別のチャンネルアダプタ３１の異常を検知すると、さらに異常を検知したチャンネルアダプタ３１のダンプデータの吸い上げを外部のコントローラモジュール３Ａの制御部に依頼する。
【００２４】
例えば、メイン制御部３４Ａは、チャンネルアダプタ３１−１の異常に応じてチャンネルアダプタ３１−１のダンプデータの吸い上げ処理を実行している。このとき、メイン制御部３４Ａは、別のチャンネルアダプタ３１−２の異常を検知すると、異常を検知したチャンネルアダプタ３１−２のダンプデータの吸い上げをサブ制御部３５Ａに依頼する。メイン制御部３４Ａおよびサブ制御部３５Ａは、それぞれチャンネルアダプタ３１−１、２のダンプデータの吸い上げ処理を実行している。ここで、メイン制御部３４Ａは、さらに別のチャンネルアダプタ３１−３の異常を検知すると、異常を検知したチャンネルアダプタ３１−３のダンプデータの吸い上げを、ＣＭ間通信ドライバ３６を介してコントローラモジュール３Ａ２の制御部に依頼する。
【００２５】
コントローラモジュール３Ａ２のメイン制御部３４Ａまたはサブ制御部３５Ａは、異常が検知されたチャンネルアダプタ３１−３のダンプデータの吸い上げ処理を実行する。吸い上げ処理の実行は、以下のように行われる。例えば、コントローラモジュール３Ａ１のメイン制御部３４Ａは、チャンネルアダプタ３１−３のダンプデータをメモリ（図示せず）上に取得する。そして、メイン制御部３４Ａは、取得したダンプデータを、ＣＭ間通信ドライバ３６を介してコントローラモジュール３Ａ２の吸い上げを依頼した制御部に送信する。そして、吸い上げを依頼された制御部は、送信されたダンプデータを取得し、取得したダンプデータを圧縮し、圧縮したデータをコントローラモジュール３Ａ２のＢＵＤ３３に格納する。なお、コントローラモジュール３Ａ２のメイン制御部３４Ａまたはサブ制御部３５Ａのどちらに依頼するのかが問題となる。例えば、メイン制御部３４Ａは、ＣＭ間通信を介して、コントローラモジュール３Ａ２の制御部のうち処理負荷の小さい制御部を、吸い上げを依頼する制御部として決定すれば良い。そして、メイン制御部３４Ａは、ＣＭ間通信を介して、決定した制御部に吸い上げを依頼する。
【００２６】
このようにして、ストレージシステム２Ａでは、メイン制御部３４Ａおよびサブ制御部３５Ａでそれぞれチャンネルアダプタ３１のダンプデータの吸い上げ処理を実行中に、さらに別のチャンネルアダプタ３１の異常を検知する場合がある。かかる場合に、ストレージシステム２Ａは、さらに異常を検知したチャンネルアダプタ３１のダンプデータの吸い上げを外部のコントローラモジュール３Ａ２の制御部に依頼する。このため、ストレージシステム２は、異常が発生した３個のチャンネルアダプタ３１のダンプデータの吸い上げを並行して実行できるので、異常が発生した全てのチャンネルアダプタ３１のダンプデータを規定時間に吸い上げることが可能になる。
【実施例３】
【００２７】
ところで、メイン制御部３４Ａは、外部に依頼するコントローラモジュール（ＣＭ）３Ａの制御部が複数存在する場合がある。かかる場合に、メイン制御部３４Ａは、さらに異常が発生したチャンネルアダプタ（ＣＡ）３１のダンプデータの吸い上げをＣＭ３Ａ外部の最適な制御部に依頼するようにすれば良い。そこで、実施例３では、さらに別のＣＡ３１で異常が発生した場合、さらに異常が発生したＣＡ３１のダンプデータの吸い上げをＣＭ３Ａ外部の最適な制御部に依頼する場合について説明する。ここで、最適な制御部とは、例えば、処理中の入出力処理の処理時間が最短となる制御部を一例とする。
【００２８】
［実施例３に係るストレージシステムの構成］
図３は、実施例３に係るストレージシステムの構成を示す機能ブロック図である。なお、図１に示すストレージシステム２と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例１と実施例３とが異なるところは、コントローラモジュール３Ｂ０がｎ−１（ｎは３以上の整数）個のコントローラモジュール３Ｂと冗長化されていることである。ここで、例えば、コントローラモジュール３Ｂ０をマスタのＣＭとし、その他のコントローラモジュール３Ｂ１〜３Ｂｎ−１をスレーブのＣＭとする。さらに、コントローラモジュール３Ｂ１において、２個のチャンネルアダプタ３１で異常が発生した後、さらに別のチャンネルアダプタ３１で異常が発生した場合について説明する。
【００２９】
また、実施例１と実施例３とが異なるところは、コントローラモジュール３Ｂ０〜３Ｂｎ−１にそれぞれＣＭ間通信ドライバ３６を追加した点にある。また、実施例１と実施例３とが異なるところは、フロントエンドルータ５、バックエンドルータ６およびドライブエンクロージャー７を追加した点にある。また、実施例１と実施例３とが異なるところは、各コントローラモジュール３Ｂに記憶部３７を追加し、記憶部３７にＣＰＵ使用率情報３７２およびコマンド数情報３７３を追加した点にある。さらに、マスタＣＭ３Ｂ０の記憶部３７に吸い上げ制御テーブル３７１を追加した点にある。また、実施例１と実施例３とが異なるところは、各コントローラモジュール３Ｂのメイン制御部３４Ｂに情報取得部５３を追加した点にある。さらに、マスタＣＭ３Ｂ０のメイン制御部３４Ｂにさらに吸い上げ先決定部５２を追加し、異常が発生するとしたＣＭ３Ｂ１のメイン制御部３４Ｂに吸い上げ処理部５１を追加する点にある。なお、異常が発生するＣＭは、ＣＭ３Ｂ１に限られないので、全てのＣＭのメイン制御部３４Ｂに吸い上げ先決定部５２を追加することが望ましいが、説明の便宜上、異常が発生するＣＭ３Ｂ１のメイン制御部３４Ｂに吸い上げ先決定部５２を追加した。
【００３０】
また、フロントエンドルータ５、バックエンドルータ６およびドライブエンクロージャー７については、図２のストレージシステム２Ａにおいて説明したので、これらの説明を省略する。また、実施例３では、メイン制御部３４Ｂおよびサブ制御部３５Ａは、ＣＰＵに限定されるものではないが、説明の便宜上、メイン制御部３４ＢをメインのＣＰＵ、サブ制御部３５ＡをサブのＣＰＵであるとして説明する。また、実施例３では、コントローラモジュールをＣＭと略記し、チャンネルアダプタをＣＡと略記する。
【００３１】
記憶部３７は、例えば、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（Flash  Memory）等の半導体メモリ素子等の記憶装置に対応する。吸い上げ制御テーブル３７１は、制御部毎に、吸い上げ処理にかかる予測時間や処理中の入出力コマンドの数から換算される処理時間を対応付けて記憶する。かかる吸い上げ制御テーブル３７１は、例えば吸い上げ先決定部５２により作成され、吸い上げ先を決定する場合に用いられる。ＣＰＵ使用率情報３７２は、自ＣＭ内の各制御部の使用率を含む情報を管理する。コマンド数情報３７３は、自ＣＭ内の各制御部の処理中の入出力コマンドの数を含む情報を管理する。なお、吸い上げ制御テーブル３７１の詳細は、後述する。
【００３２】
吸い上げ処理部５１は、ＣＡ３１の異常に応じて当該ＣＡ３１のダンプデータの吸い上げ処理を実行する。また、吸い上げ処理部５１は、１個のＣＡ３１のダンプデータの吸い上げ処理を実行中に、別のＣＡ３１の異常を検知すると、異常を検知した別のＣＡ３１のダンプデータの吸い上げをサブ制御部３５Ａに依頼する。ここで、吸い上げ処理部５１は、さらに別のＣＡ３１の異常を検知すると、さらに異常を検知したＣＡ３１のダンプデータの吸い上げ先をマスタＣＭ３Ｂ０に決定させる。例えば、吸い上げ処理部５１は、マスタＣＭ３Ｂ０に対し、ＣＭ間通信ドライバ３６を介して、吸い上げ先を取得したい旨の要求を送信する。このとき、吸い上げ処理部５１は、ダンプデータのサイズをマスタＣＭ３Ｂ０に転送する。そして、吸い上げ処理部５１は、マスタＣＭ３Ｂ０に決定させた吸い上げ先に対して、異常を検知したＣＡ３１のダンプデータの吸い上げを依頼する。
【００３３】
吸い上げ先決定部５２は、ダンプデータの吸い上げを外部に依頼する吸い上げ先の候補が複数存在する場合、異常が検知されたＣＡ３１のダンプデータの吸い上げ時間が所定の規定時間より短い制御部に吸い上げ先の候補を絞る。さらに、吸い上げ先決定部５２は、絞った吸い上げ先の候補のうち、処理中の入出力コマンドの数から換算される処理時間が最も短い制御部に吸い上げ先を決定する。すなわち、吸い上げ先決定部５２は、所定の規定時間内に確実にダンプデータが吸い上げ可能か否かを予測し、吸い上げ可能と予測した吸い上げ先の候補のうち、入出力処理時間が最短の制御部を吸い上げ先として決定する。
【００３４】
吸い上げ先決定部５２が所定の規定時間内に確実にダンプデータが吸い上げ可能か否かを予測する処理について説明する。例えば、吸い上げ先決定部５２は、ＣＡのダンプデータのサイズから各制御部がダンプデータの吸い上げ処理にかかる予測時間（ＣＡダンプ吸い上げ時間）を算出し、算出した予測時間を吸い上げ制御テーブル３７１に格納する。吸い上げ先決定部５２は、ＣＡダンプ吸い上げ時間を、以下の式（１）に基づいて算出する。
ＣＡダンプ吸い上げ時間＝｛（ＣＭ／ＣＡ間通信時間）＋（ＣＭ／ＣＭ間通信時間）＋（データ圧縮時間）＋（ＢＵＤ格納時間）｝×（データサイズ）・・・式（１）
【００３５】
ここで、データサイズとは、異常が発生したＣＡのダンプデータのデータサイズを示す。ＣＭ／ＣＡ間通信時間とは、異常が発生したＣＡおよび当該ＣＡが存在するＣＭ間で１メガバイト（ＭＢ：ＭＢｙｔｅｓ）のデータが通信される場合の通信時間を示す。ＣＭ／ＣＭ間通信時間とは、異常が発生したＣＡが存在するＣＭから吸い上げ先のＣＭへ１ＭＢのデータを通信する場合の通信時間を示し、吸い上げ先が異常の発生したＣＡを有するＣＭの外部である場合に使用される。データ圧縮時間とは、１ＭＢのデータを圧縮する場合にかかる時間を示す。ＢＵＤ格納時間とは、１ＭＢの圧縮データを格納する場合に要する時間を示す。
【００３６】
さらに、吸い上げ先決定部５２は、各制御部の使用率（各ＣＰＵの使用率）を各ＣＭのＣＰＵ使用率情報３７２から取得する。そして、吸い上げ先決定部５２は、算出した各制御部のＣＡダンプ吸い上げ時間を用いて、各制御部の使用率（各ＣＰＵの使用率）に対応したダンプデータの吸い上げ処理に要する予測時間（ＣＡダンプ吸い上げ実行時間）を算出する。吸い上げ先決定部５２は、ＣＡダンプ吸い上げ実行時間を、以下の式（２）に基づいて算出する。
ＣＡダンプ吸い上げ実行時間＝（ＣＡダンプ吸い上げ時間）÷｛１−（ＣＰＵの使用率）｝・・・式（２）
【００３７】
そして、吸い上げ先決定部５２は、算出した各制御部のＣＡダンプ吸い上げ実行時間を吸い上げ制御テーブル３７１に格納する。そして、吸い上げ先決定部５２は、吸い上げ制御テーブル３７１に記憶した各制御部のＣＡダンプ吸い上げ実行時間と吸い上げに許される規定時間とを比較し、規定時間内に吸い上げが完了可能な吸い上げ先の候補を絞る。
【００３８】
次に、吸い上げ先決定部５２が吸い上げ可能と予測した吸い上げ先の候補のうち、入出力処理時間が最短の制御部を決定する処理について説明する。例えば、吸い上げ先決定部５２は、各制御部で処理中の入出力コマンドの数を各ＣＭのコマンド数情報３７３から取得する。そして、吸い上げ先決定部５２は、取得した制御部毎の入出力コマンド数から換算される制御部毎の処理時間（Ｉ／Ｏ処理時間）を算出する。吸い上げ先決定部５２は、ＣＭ間通信を用いないストレートアクセスおよびＣＭ間通信を用いるクロスアクセスの各入出力コマンドの数から、以下の式（３）に基づいて、各制御部のＩ／Ｏ処理時間を算出する。
Ｉ／Ｏ処理時間＝（クロスアクセスの入出力コマンド数）×（クロスアクセスの入出力コマンド処理時間）＋（ストレートアクセスの入出力コマンド数）×（ストレートアクセスの入出力コマンド処理時間）・・・式（３）
【００３９】
ここで、クロスアクセスの入出力コマンド数とは、クロスアクセスについて処理中の入出力コマンドの数を示す。クロスアクセスの入出力コマンド数には、ＣＭ間通信によって送信される入出力コマンドの数だけでなく、ＣＭ間通信によって受信される入出力コマンドの数も含まれる。クロスアクセスの入出力コマンドの処理時間とは、１個のクロスアクセスの入出力コマンドが処理する場合の処理時間を示す。ストレートアクセスの入出力コマンド数とは、ストレートアクセスについて処理中の入出力コマンドの数を示す。ストレートアクセスの入出力コマンド処理時間とは、1個のストレートアクセスの入出力コマンドが処理する場合の処理時間を示す。
【００４０】
そして、吸い上げ先決定部５２は、算出した各制御部のＩ／Ｏ処理時間を吸い上げ制御テーブル３７１に格納する。そして、吸い上げ先決定部５２は、先行して絞った吸い上げ先の候補のうち、吸い上げ制御テーブル３７１に記憶した各制御部のＩ／Ｏ処理時間が最も短い制御部に吸い上げ先を決定する。そして、吸い上げ先決定部５２は、決定した吸い上げ先を、要求元のＣＭに通知する。この結果、要求元のＣＭは、異常を検知したＣＡ３１のダンプデータの吸い上げを、決定された吸い上げ先に依頼できる。
【００４１】
なお、吸い上げ先決定部５２は、異常を検知したＣＡ３１のダンプデータの吸い上げ時間について、吸い上げに許される規定時間より短い制御部が１個も存在しない場合がある。かかる場合、吸い上げ先決定部５２は、Ｉ／Ｏ処理時間が最も短い制御部に吸い上げ先を決定するようにすれば良い。これにより、吸い上げ先決定部５２は、決定した吸い上げ先で吸い上げに許される規定時間までダンプデータを吸い上げさせることができ、吸い上げられたダンプデータを用いて異常に関する調査を行わせることが可能となる。
【００４２】
［吸い上げ制御テーブルのデータ構造］
次に、吸い上げ制御テーブル３７１のデータ構造について、図４を参照して説明する。図４は、実施例３に係る吸い上げ制御テーブルのデータ構造の一例を示す図である。図４に示すように、吸い上げ制御テーブル３７１は、実行中フラグ３７１ｂ、吸い上げ対象ＣＡ３７１ｃ、ＣＡダンプ吸い上げ時間３７１ｄ、ＣＰＵ使用率３７１ｅおよびＣＡダンプ吸い上げ実行時間３７１ｆをＣＰＵ３７１ａに対応付けて記憶する。さらに、吸い上げ制御テーブル３７１は、Ｉ／Ｏコマンド数３７１ｇおよびＩ／Ｏ処理時間３７１ｈをＣＰＵ３７１ａに対応付けて記憶する。
【００４３】
ＣＰＵ３７１ａは、制御部をＣＰＵとした場合の各制御部に対応したＣＰＵを示す。実行中フラグ３７１ｂは、吸い上げ処理を実行中であるか否かを示すフラグである。例えば、実行中である場合「ＯＮ」が設定され、実行中でない場合「ＯＦＦ」が設定される。吸い上げ対象ＣＡ３７１ｂは、吸い上げ処理を実行中である場合に吸い上げ対象のＣＡを示す。ＣＡダンプ吸い上げ時間３７１ｄは、ＣＡのダンプデータのサイズから各ＣＰＵがダンプデータの吸い上げ処理にかかる予測時間を示し、前述した式（１）により算出される。ＣＰＵ使用率３７１ｅは、各ＣＰＵの使用率を示す。ＣＡダンプ吸い上げ実行時間３７１ｆは、各ＣＰＵの使用率に対応した吸い上げ処理を実行する予測時間を示し、前述した式（２）により算出される。Ｉ／Ｏコマンド数３７１ｇは、各ＣＰＵで処理中の入出力コマンドの数を示す。例えば、クロスアクセスおよびストレートアクセスのそれぞれの入出力コマンド数が設定される。Ｉ／Ｏ処理時間３７１ｈは、Ｉ／Ｏコマンド数から換算されるＣＰＵ毎の処理時間を示し、前述した式（３）により算出される。
【００４４】
吸い上げ制御テーブル３７１の一例として、ＣＰＵ３７１ａが「ＣＭ＃０のメインＣＰＵ」である場合、実行中フラグ３７１ｂとして「ＯＦＦ」、吸い上げ対象ＣＡ３７１ｃとして「−」、ＣＡダンプ吸い上げ時間３７１ｄとして「５０」秒を記憶している。さらに、ＣＰＵ使用率３７１ｅを「０．８」、ＣＡダンプ吸い上げ実行時間３７１ｆとして「２５０」秒、Ｉ／Ｏコマンド数３７１ｇとして「クロス１００／ストレート１００」、Ｉ／Ｏ処理時間３７１ｈとして「２」秒を記憶している。また、ＣＰＵ３７１ａが「ＣＭ＃７のサブＣＰＵ」である場合、吸い上げ対象ＣＡ３７１ｃとして「ＣＭ＃１−ＣＡ＃０」を記憶している。すなわち、図４の例では、ＣＭ＃７のサブＣＰＵがＣＭ＃１にあるＣＡ＃０のダンプデータの吸い上げを実行している。
【００４５】
［ＣＡダンプ吸い上げ処理の手順］
次に、吸い上げ処理部５１によるＣＡダンプ吸い上げ処理の手順について、図５を参照して説明する。図５は、実施例３に係るＣＡダンプ吸い上げ処理のフローチャートを示す図である。なお、ＣＭ＃ｍのメイン制御部３４Ｂおよびサブ制御部３５Ａでは、それぞれ異常が発生したＣＡ＃ｍ１、ＣＡ＃ｍ２のダンプデータの吸い上げ処理を実行中であるものとする。そして、ＣＭ＃ｍにおいてさらにＣＡ＃ｍ０の異常が発生したとし、異常が発生したＣＡ＃ｍ０のデグレード処理が開始されたものとする。
【００４６】
すると、ＣＭ＃ｍ内のメイン制御部３４Ｂ（メインＣＰＵ）の吸い上げ処理部５１は、システム制御から異常が発生したＣＡ＃ｍ０のダンプデータの吸い上げ依頼を取得する（ステップＳ１１）。ここで、システム制御とは、システムを制御する機能部であり、例えばＣＭ内に含まれる。そして、吸い上げ処理部５１は、異常が発生したＣＡ＃ｍ０からダンプデータのサイズを取得する（ステップＳ１２）。
【００４７】
続いて、吸い上げ処理部５１は、ＣＡ＃ｍ０のダンプデータの吸い上げ先をマスタＣＭに決定させ、マスタＣＭから吸い上げ先のＣＰＵを取得する（ステップＳ１３）。メイン制御部３４Ｂおよびサブ制御部３５Ａでは、既に先行して異常が発生した各ＣＡのダンプデータの吸い上げ処理を実行しているからである。例えば、吸い上げ処理部５１は、ＣＡ＃ｍ０のダンプデータのサイズを含む吸い上げ先のＣＰＵを取得するコマンド（吸い上げ先ＣＰＵ取得コマンド）を作成し、マスタＣＭに対し、作成したコマンドを送信する。なお、マスタＣＭによる吸い上げ先決定処理の詳細の手順は、後述する。
【００４８】
そして、吸い上げ処理部５１は、取得した吸い上げ先のＣＰＵに、ＣＡ＃ｍ０のダンプデータの吸い上げ処理を依頼する（ステップＳ１４）。例えば、吸い上げ処理部５１は、ＣＡダンプの格納を依頼するコマンド（ＣＡダンプ格納依頼コマンド）を作成し、吸い上げ先のＣＰＵに対し、作成したコマンドを送信する。
【００４９】
続いて、吸い上げ処理部５１は、ＣＭ／ＣＡ間通信で、異常が発生したＣＡ＃ｍ０からダンプデータを取得する（ステップＳ１５）。そして、吸い上げ処理部５１は、ＣＭ／ＣＭ間通信で、吸い上げ先のＣＰＵに対し、取得したダンプデータを転送する（ステップＳ１６）。そして、吸い上げ処理部５１は、吸い上げ先のＣＰＵからのダンプデータの格納が完了したことを示す格納完了通知を待つ（ステップＳ１７）。
【００５０】
そして、吸い上げ処理部５１は、全ダンプデータの転送が完了したか否かを判定する（ステップＳ１８）。全ダンプデータの転送が完了していないと判定した場合（ステップＳ１８；Ｎｏ）、吸い上げ処理部５１は、残りのダンプデータの転送をすべく、ステップＳ１５に移行する。
【００５１】
一方、全ダンプデータの転送が完了したと判定した場合（ステップＳ１８；Ｙｅｓ）、吸い上げ処理部５１は、マスタＣＭへ異常が発生したＣＡ＃ｍ０のダンプデータの吸い上げが完了したことを通知する（ステップＳ１９）。これにより、吸い上げ処理部５１によるＣＡダンプ吸い上げ処理が終了し、デグレード処理が終了する。
【００５２】
［吸い上げ先決定処理の手順］
次に、吸い上げ先決定部５２による吸い上げ先決定処理の手順について、図６Ａおよび図６Ｂを参照して説明する。図６Ａおよび図６Ｂは、実施例３に係る吸い上げ先決定処理のフローチャートを示す図である。なお、吸い上げ先の対象となる各ＣＰＵには、あらかじめインデックスが振られているものとする。例えば、ＣＭ＃０のメインＣＰＵに「０」、ＣＭ＃０のサブＣＰＵに「１」、ＣＭ＃１のメインＣＰＵに「２」、ＣＭ＃１のサブＣＰＵに「３」がそれぞれ振られている。
【００５３】
例えば、ＣＡ＃ｍ０のダンプデータのサイズを含む吸い上げ先ＣＰＵ取得コマンドを受信した吸い上げ先決定部５２は、ダンプデータのサイズから標準の吸い上げ時間（ＣＡダンプ吸い上げ時間）を算出する（ステップＳ２１）。ＣＡダンプ吸い上げ時間は、式（１）によって算出される。そして、吸い上げ先決定部５２は、算出したＣＡダンプ吸い上げ時間を吸い上げ制御テーブル３７１に格納する。
【００５４】
そして、吸い上げ先決定部５２は、各ＣＰＵの使用率とＩ／Ｏコマンド数を各ＣＰＵから取得する（ステップＳ２２）。各ＣＰＵの使用率は、各ＣＭのＣＰＵ使用率情報３７２に記憶されている。各ＣＰＵのＩ／Ｏコマンド数は、各ＣＭのコマンド数情報３７３に記憶されている。
【００５５】
そして、吸い上げ先決定部５２は、標準の吸い上げ時間および各ＣＰＵの使用率から各ＣＰＵの吸い上げ実行時間（ＣＡダンプ吸い上げ実行時間）を算出する（ステップＳ２３）。ＣＡダンプ吸い上げ実行時間は、式（２）によって算出される。そして、吸い上げ先決定部５２は、算出した各ＣＰＵのＣＡダンプ吸い上げ実行時間を吸い上げ制御テーブル３７１に格納する。
【００５６】
さらに、吸い上げ先決定部５２は、Ｉ／Ｏコマンド数から各ＣＰＵのＩ／Ｏ処理時間を算出する（ステップＳ２４）。そして、吸い上げ先決定部５２は、算出した各ＣＰＵのＩ／Ｏ処理時間を吸い上げ制御テーブル３７１に格納する。
【００５７】
続いて、吸い上げ先決定部５２は、候補ＣＰＵを初期値（例えば、０ｘＦＦ）に設定する（ステップＳ２５）。なお、候補ＣＰＵとは、吸い上げ先ＣＰＵの候補を示す変数であり、候補となるＣＰＵに振られたインデックスの値が設定される。また、吸い上げ先決定部５２は、格納時間最短ＣＰＵを初期値（例えば、０ｘＦＦ）に設定する（ステップＳ２６）。なお、格納時間最短ＣＰＵとは、ダンプデータの格納時間が最短のＣＰＵを示す変数であり、格納時間が最短のＣＰＵに振られたインデックスの値が設定される。
【００５８】
そして、吸い上げ先決定部５２は、Ｉｎｄｅｘに吸い上げ先の対象となるＣＰＵのインデックスの値０を設定し、確認ＣＰＵにＩｎｄｅｘに設定された値を設定する（ステップＳ２７）。なお、Ｉｎｄｅｘとは、変数であり、各ＣＰＵに振られたインデックスの値が設定される。また、確認ＣＰＵとは、吸い上げ先ＣＰＵとなるか否かを確認するＣＰＵを示す変数であり、ＣＰＵに振られたインデックスの値が設定される。
【００５９】
続いて、吸い上げ先決定部５２は、Ｉｎｄｅｘに設定された値が吸い上げ先の対象となるＣＰＵの最大数と等しいか否かを判定する（ステップＳ２８）。Ｉｎｄｅｘに設定された値がＣＰＵの最大数と等しくないと判定した場合（ステップＳ２８；Ｎｏ）、吸い上げ先決定部５２は、ステップＳ４１に移行する。
【００６０】
ステップＳ４１では、吸い上げ先決定部５２は、吸い上げ制御テーブル３７１に記憶された実行中フラグに基づいて、確認ＣＰＵの実行中フラグがＯＮであるか否かを判定する（ステップＳ４１）。確認ＣＰＵの実行中フラグがＯＮであると判定した場合（ステップＳ４１；Ｙｅｓ）、吸い上げ先決定部５２は、次のＣＰＵを確認すべく、ステップＳ４９に移行する。
【００６１】
一方、確認ＣＰＵの実行中フラグがＯＮでないと判定した場合（ステップＳ４１；Ｎｏ）、吸い上げ先決定部５２は、格納時間最短ＣＰＵが初期値であるか否かを判定する（ステップＳ４２）。格納時間最短ＣＰＵが初期値であると判定した場合（ステップＳ４２；Ｙｅｓ）、吸い上げ先決定部５２は、格納時間最短ＣＰＵに確認ＣＰＵを設定すべく、ステップＳ４４に移行する。
【００６２】
格納時間最短ＣＰＵが初期値でないと判定した場合（ステップＳ４２；Ｎｏ）、吸い上げ先決定部５２は、確認ＣＰＵのＣＡ吸い上げ実行時間が格納時間最短ＣＰＵのＣＡ吸い上げ実行時間以下であるか否かを判定する（ステップＳ４３）。確認ＣＰＵのＣＡ吸い上げ実行時間が格納時間最短ＣＰＵのＣＡ吸い上げ実行時間以下であると判定した場合（ステップＳ４３；Ｙｅｓ）、吸い上げ先決定部５２は、格納時間最短ＣＰＵに確認ＣＰＵを設定すべく、ステップＳ４４に移行する。
【００６３】
ステップＳ４４では、吸い上げ先決定部５２は、格納時間最短ＣＰＵに確認ＣＰＵを設定する（ステップＳ４４）。すなわち、吸い上げ先決定部５２は、確認したＣＰＵの中で格納時間が最短のＣＰＵとして現在確認中の確認ＣＰＵを設定する。
【００６４】
一方、確認ＣＰＵが格納時間最短ＣＰＵのＣＡ吸い上げ実行時間以下でない場合（ステップＳ４３；Ｎｏ）、吸い上げ先決定部５２は、確認ＣＰＵのＣＡ吸い上げ実行時間が吸い上げ完了規定時間以下であるか否かを判定する（ステップＳ４５）。ここで、吸い上げ完了規定時間とは、あらかじめ定められた吸い上げに許される規定時間を示す。確認ＣＰＵのＣＡ吸い上げ実行時間が吸い上げ完了規定時間より大きいと判定した場合（ステップＳ４５；Ｎｏ）、吸い上げ先決定部５２は、次のＣＰＵを確認すべく、ステップＳ４９に移行する。
【００６５】
確認ＣＰＵのＣＡ吸い上げ実行時間が吸い上げ完了規定時間以下であると判定した場合（ステップＳ４５；Ｙｅｓ）、吸い上げ先決定部５２は、候補ＣＰＵが初期値であるか否かを判定する（ステップＳ４６）。候補ＣＰＵが初期値でないと判定した場合（ステップＳ４６；Ｎｏ）、吸い上げ先決定部５２は、確認ＣＰＵのＩ／Ｏ処理時間が候補ＣＰＵのＩ／Ｏ処理時間以下であるか否かを判定する（ステップＳ４７）。ここで、確認ＣＰＵのＩ／Ｏ処理時間が候補ＣＰＵのＩ／Ｏ処理時間より大きいと判定した場合（ステップＳ４７；Ｎｏ）、吸い上げ先決定部５２は、次のＣＰＵを確認すべく、ステップＳ４９に移行する。
【００６６】
候補ＣＰＵが初期値である場合（ステップＳ４６；Ｙｅｓ）または確認ＣＰＵのＩ／Ｏ処理時間が候補ＣＰＵのＩ／Ｏ処理時間以下である場合（ステップＳ４７；Ｙｅｓ）、吸い上げ先決定部５２は、ステップＳ４８に移行する。ステップＳ４８では、吸い上げ先決定部５２は、候補ＣＰＵに確認ＣＰＵを設定する（ステップＳ４８）。すなわち、吸い上げ先決定部５２は、確認したＣＰＵの中で、ＣＡ吸い上げ実行時間が吸い上げ完了規定時間より短く、且つＩ／Ｏ処理時間が最短のＣＰＵとして、現在確認中の確認ＣＰＵを設定する。
【００６７】
ステップＳ４９では、吸い上げ先決定部５２は、Ｉｎｄｅｘを１加算し、確認ＣＰＵをＩｎｄｅｘに更新する（ステップＳ４９）。そして、吸い上げ先決定部５２は、ステップＳ２８に移行する。
【００６８】
続いて、ステップＳ２８では、Ｉｎｄｅｘに設定された値が吸い上げ先の対象となるＣＰＵの最大数と等しいと判定した場合（ステップＳ２８；Ｙｅｓ）、吸い上げ先決定部５２は、候補ＣＰＵが初期値であるか否かを判定する（ステップＳ２９）。候補ＣＰＵが初期値でないと判定した場合（ステップＳ２９；Ｎｏ）、吸い上げ先決定部５２は、候補ＣＰＵを吸い上げ先のＣＰＵに決定し（ステップＳ３０）、吸い上げ先決定処理を終了する。
【００６９】
候補ＣＰＵが初期値であると判定した場合（ステップＳ２９；Ｙｅｓ）、吸い上げ先決定部５２は、格納時間最短ＣＰＵが初期値であるか否かを判定する（ステップＳ３１）。つまり、ＣＡ吸い上げ実行時間が吸い上げ完了規定時間より短くなるＣＰＵが１個も存在しなかった場合である。ここで、格納時間最短ＣＰＵが初期値でないと判定した場合（ステップＳ３１；Ｎｏ）、吸い上げ先決定部５２は、格納時間最短ＣＰＵを吸い上げ先のＣＰＵに決定し（ステップＳ３２）、吸い上げ先決定処理を終了する。
【００７０】
一方、格納時間最短ＣＰＵが初期値であると判定した場合（ステップＳ３１；Ｙｅｓ）、吸い上げ先決定部５２は、吸い上げ先のＣＰＵとして候補となるＣＰＵは存在しないと決定し（ステップＳ３３）、吸い上げ先決定処理を終了する。
【００７１】
［ＣＡダンプ吸い上げ処理のシーケンス］
次に、ＣＡダンプ吸い上げ処理のシーケンスを、図７〜図１０を参照して説明する。図７〜図１０は、実施例３に係るＣＡダンプ吸い上げ処理のシーケンス図である。なお、ストレージシステム２Ｂでは、ＣＭ＃０〜ＣＭ＃７が冗長化され、ＣＭ＃０がマスタＣＭであるものとする。さらに、ＣＭ＃１のＣＡ＃０でさらに異常が発生したものとする。
【００７２】
まず、ＣＭ＃１では、異常が発生したＣＡ＃０が、デグレード処理を開始し（Ｓ４１）、デグレード処理を開始した旨をメインＣＰＵ（メイン制御部３４Ｂ）に通知する（Ｓ４２）。すると、メインＣＰＵは、デグレード通知を受信し（Ｓ４３）、吸い上げ処理部５１で行うＣＡダンプ吸い上げ処理を起動する（Ｓ４４）。そして、メインＣＰＵは、吸い上げ先のＣＰＵを取得したい旨の要求を示す吸い上げ先ＣＰＵ取得コマンドを作成する（Ｓ４５）。作成したコマンドには、ダンプデータのサイズが含まれる。さらに、メインＣＰＵは、ＣＭ間通信ドライバ３６を介して、作成したコマンドをマスタＣＭ（ＣＭ＃０）に送信する（Ｓ４６）。
【００７３】
マスタＣＭでは、ＣＭ間通信ドライバ３６が、ＣＭ＃１から送信された吸い上げ先ＣＰＵ取得コマンドを受信すると（Ｓ４７）、吸い上げ先決定部５２で行う吸い上げ先ＣＰＵ取得処理を起動する（Ｓ４８）。起動後、メインＣＰＵ（メイン制御部３４Ｂ）は、吸い上げ制御テーブル３７１を初期化する（Ｓ４９）。そして、メインＣＰＵは、ダンプデータのサイズからＣＡダンプ吸い上げ時間を算出し（Ｓ５０）、算出した値を吸い上げ制御テーブル３７１に格納する（Ｓ５１）。ここでは、ＣＡダンプ吸い上げ時間は、式（１）により算出される。さらに、メインＣＰＵは、自ＣＭのＣＰＵ使用率と処理中のＩ／Ｏコマンドの数を取得し（Ｓ５２）、同様のＣＰＵ情報を取得したい旨のＣＰＵ情報取得コマンドを作成する（Ｓ５３）。そして、メインＣＰＵは、作成したコマンドを全ＣＭ（ＣＭ＃１〜ＣＭ＃７）に対して送信する（Ｓ５４、Ｓ５５）。
【００７４】
ＣＭ＃１では、ＣＭ間通信ドライバ３６が、ＣＭ＃０から送信されたＣＰＵ情報取得コマンドを受信すると（Ｓ５６）、メインＣＰＵが、自ＣＭのＣＰＵ使用率と処理中のＩ／Ｏコマンドの数を取得する（Ｓ５７）。そして、メインＣＰＵは、取得したＣＰＵ情報を含むＣＰＵ情報取得コマンドに対する応答コマンドを作成する（Ｓ５８）。そして、メインＣＰＵは、作成したコマンドをマスタＣＭに対して送信する（Ｓ５９）。ＣＭ＃２〜ＣＭ＃７でも、ＣＭ＃１で行われた処理が同様に行われる。
【００７５】
マスタＣＭでは、ＣＭ間通信ドライバ３６が、ＣＰＵ情報取得コマンドに対する応答コマンドを各ＣＭから受信する（Ｓ６０）。その後、メインＣＰＵは、全ＣＭから受信すると（Ｓ６１）、メインＣＰＵは、吸い上げ先決定部５２で行う吸い上げ先決定処理を起動する（Ｓ６２）。起動後、メインＣＰＵは、各ＣＭから取得したＣＰＵ情報内のＣＰＵ使用率から各ＣＰＵのダンプ吸い上げ実行時間を算出し（Ｓ６３）、算出した値を吸い上げ制御テーブル３７１に格納する（Ｓ６４）。ここでは、ＣＡダンプ吸い上げ実行時間は、式（２）により算出される。さらに、メインＣＰＵは、各ＣＭから取得したＣＰＵ情報内のＩ／Ｏコマンドの数から各ＣＰＵのＩ／Ｏ処理時間を算出し（Ｓ６５）、算出した値を吸い上げ制御テーブル３７１に格納する（Ｓ６６）。ここでは、Ｉ／Ｏ処理時間は、式（３）により算出される。
【００７６】
そして、マスタＣＭでは、メインＣＰＵが、吸い上げ制御テーブル３７１に記憶された情報に基づいて、吸い上げ先のＣＰＵを決定する（Ｓ６７）。そして、メインＣＰＵは、吸い上げ制御テーブル３７１について、決定した吸い上げ先のＣＰＵの実行中フラグにＯＮを設定するとともに（Ｓ６８）、吸い上げ対象ＣＡにＣＭ＃１−ＣＡ＃０を設定する（Ｓ６９）。そして、メインＣＰＵは、決定した吸い上げ先のＣＰＵの情報を含む吸い上げ先ＣＰＵ取得コマンドに対応する応答コマンドを作成し（Ｓ７０）、作成したコマンドをＣＭ＃１に送信する（Ｓ７１）。
【００７７】
ＣＭ＃１では、ＣＭ間通信ドライバ３６が、吸い上げ先ＣＰＵ取得コマンドに対応する応答コマンドを受信すると（Ｓ７２）、メインＣＰＵが、ＣＡダンプ格納依頼コマンドを作成し（Ｓ７３）、作成したコマンドを吸い上げ先のＣＰＵに対して送信する（Ｓ７４）。ここでは、吸い上げ先のＣＰＵは、ＣＭ＃７のサブＣＰＵであるとする。
【００７８】
ＣＭ＃７では、ＣＭ間通信ドライバ３６が、ＣＡダンプ格納依頼コマンドを受信すると（Ｓ７５）、受信したコマンドをサブＣＰＵに引き渡す。すると、サブＣＰＵは、ダンプデータの取得用のバッファをメモリに確保する（Ｓ７６）。そして、サブＣＰＵは、ＣＡダンプ格納依頼コマンドに対する応答コマンドを作成し（Ｓ７７）、作成したコマンドをＣＭ＃１に送信する（Ｓ７８）。ここでは、作成した応答コマンドには、確保したバッファアドレスおよびバッファサイズに関する情報が含まれる。
【００７９】
ＣＭ＃１では、ＣＭ間通信ドライバ３６が、ＣＡダンプ格納依頼コマンドに対する応答コマンドを受信する（Ｓ７９）。そして、メインＣＰＵが、受信されたコマンドに含まれるバッファサイズに基づいて、ダンプデータ取得用のバッファをメモリに確保し（Ｓ８０）、確保したバッファアドレスおよびバッファサイズをＣＡ＃０に通知する（Ｓ８１）。そして、ＣＡ＃０は、メインＣＰＵから通知されたバッファアドレスおよびバッファサイズを保存する（Ｓ８２）。その後、ＣＡ＃０は、メインＣＰＵに対して、保存したバッファサイズ分のダンプデータを転送するとともに（Ｓ８３）、ダンプデータを転送した旨を通知する（Ｓ８４）。メインＣＰＵは、ダンプデータ転送通知を受信すると（Ｓ８５）、バッファサイズ分のダンプデータを、吸い上げ先ＣＰＵであるＣＭ＃７のサブＣＰＵに転送する（Ｓ８６）。そして、メインＣＰＵは、ダンプデータを転送した旨のダンプデータ転送コマンドを作成し（Ｓ８７）、作成したコマンドをＣＭ＃７のサブＣＰＵに送信する（Ｓ８８）。
【００８０】
ＣＭ＃７では、ＣＭ間通信ドライバ３６が、ＣＭ＃１のメインＣＰＵからのダンプデータ転送コマンドを受信すると（Ｓ８９）、メインＣＰＵが、ＣＭ＃１のメインＣＰＵから転送されたダンプデータを圧縮する（Ｓ９０）。そして、サブＣＰＵは、圧縮したダンプデータを自ＣＭ内のＢＵＤ３３に書き込む（Ｓ９１〜Ｓ９３）。そして、サブＣＰＵは、ＢＵＤ３３への書き込みが完了すると、ダンプデータの格納が完了した旨のダンプデータ格納完了コマンドを作成し（Ｓ９４）、作成したコマンドをＣＭ＃１に送信する（Ｓ９５）。
【００８１】
ＣＭ＃１では、ＣＭ間通信ドライバ３６がＣＭ＃７からのダンプデータ格納完了コマンドを受信すると（Ｓ９６）、メインＣＰＵは、ダンプデータの格納完了をＣＡ＃０に通知する（Ｓ９７）。そして、ＣＡ＃０は、ダンプデータに続きがあるか否かを判定し（Ｓ９８）、続きがあれば（Ｓ９８；Ｙｅｓ）、続きのダンプデータを転送すべく、Ｓ８３に移行する。一方、ＣＡ＃０は、続きがなければ（Ｓ９８；Ｎｏ）、ダンプデータの転送が完了した旨をメインＣＰＵに通知する（Ｓ９９）。そして、メインＣＰＵは、ＣＡ＃０からダンプデータ転送完了通知を受信すると（Ｓ１００）、ダンプデータの転送が完了した旨のダンプデータ転送完了コマンドを作成する（Ｓ１０１）。そして、メインＣＰＵは、作成したコマンドをＣＭ＃７に送信する（Ｓ１０２）。
【００８２】
ＣＭ＃７では、ＣＭ間通信ドライバ３６がＣＭ＃１からのダンプデータ転送完了コマンドを受信すると（Ｓ１０３）、サブＣＰＵは、ダンプデータ用のバッファを解放する（Ｓ１０４）。そして、サブＣＰＵは、ダンプデータ転送完了コマンドに対する応答コマンドを作成し（Ｓ１０５）、作成したコマンドをＣＭ＃１に送信する（Ｓ１０６）。
【００８３】
ＣＭ＃１では、ＣＭ間通信ドライバ３６がＣＭ＃７からのダンプデータ転送完了コマンドに対する応答コマンドを受信すると（Ｓ１０７）、メインＣＰＵは、ダンプデータ取得用のバッファを解放する（Ｓ１０８）。そして、メインＣＰＵは、吸い上げ制御テーブル３７１を更新する旨の制御テーブル更新コマンドを作成し（Ｓ１０９）、作成したコマンドをマスタＣＭに送信する（Ｓ１１０）。
【００８４】
マスタＣＭでは、ＣＭ間通信ドライバ３６がＣＭ＃１からの制御テーブル更新コマンドを受信すると（Ｓ１１１）、メインＣＰＵは、吸い上げ制御テーブル３７１について、吸い上げ先ＣＰＵに対応する実行中フラグをＯＦＦに更新する（Ｓ１１２）。そして、メインＣＰＵは、吸い上げ制御テーブル３７１の更新が完了した旨の制御テーブル更新完了コマンドを作成し（Ｓ１１３）、作成したコマンドをＣＭ＃１に送信する（Ｓ１１４）。
【００８５】
ＣＭ＃１では、ＣＭ間通信ドライバ３６がマスタＣＭからの制御テーブル更新完了コマンドを受信すると（Ｓ１１５）、メインＣＰＵは、ＣＡダンプ吸い上げ処理を終了する。
【００８６】
ここで、Ｓ４９により初期状態にされた吸い上げ制御テーブルの内容について、具体的に説明する。図１１は、Ｓ４９により初期状態にされた吸い上げ制御テーブルの具体例を示す図である。図１１に示すように、吸い上げ制御テーブル３７１には、ストレージシステム２Ｂ内の全てのＣＰＵ３７１ａについて、実行中フラグ３７１ｂが実行中でないことを示すＯＦＦを記憶している。また、ストレージシステム２Ｂ内の全てのＣＰＵ３７１ａについて、ＣＡダンプ吸い上げ時間３７１ｄ、ＣＡダンプ吸い上げ実行時間３７１ｆおよびＩ／Ｏ処理時間３７１ｈがそれぞれ初期状態を示す「０」秒を記憶している。
【００８７】
次に、Ｓ５１によりＣＡダンプ吸い上げ時間が格納された吸い上げ制御テーブルの内容について、具体的に説明する。図１２は、Ｓ５１によりＣＡダンプ吸い上げ時間が格納された吸い上げ制御テーブルの具体例を示す図である。図１２に示すように、吸い上げ制御テーブル３７１には、ＣＡダンプ吸い上げ時間３７１ｄが格納されている。ＣＡダンプ吸い上げ時間３７１ｄは、マスタＣＭの吸い上げ先決定部５２により、式（１）を用いて以下のように算出される。
【００８８】
例えば、ＣＭ／ＣＡ間通信時間が０．１秒、ＣＭ／ＣＭ間通信時間が０．１秒、データ圧縮時間が０．５秒／ＭＢ、ＢＵＤ格納時間が０．３秒／ＭＢ、データサイズが５０ＭＢであるとする。かかる場合に、異常が発生したＣＡ＃０の存在するＣＭ＃１でのＣＡダンプ吸い上げ時間およびＣＡ＃０の存在しないＣＭ＃１以外のＣＭでのＣＡダンプ吸い上げ時間は、以下のように算出される。
ＣＭ＃１でのＣＡダンプ吸い上げ時間＝｛０．１＋０．５＋０．３｝×５０＝４５（秒）
ＣＭ＃１以外のＣＭでのＣＡダンプ吸い上げ時間＝｛０．１＋０．１＋０．５＋０．３｝×５０＝５０（秒）
【００８９】
つまり、異常が発生したＣＡ＃０の存在するＣＭ＃１以外のＣＭでは、ＣＭ＃１からＣＭ＃１以外のＣＭへダンプデータを転送するので、ＣＭ／ＣＭ間通信時間がかかる。これにより、ＣＭ＃１以外のＣＭでのＣＡダンプ吸い上げ時間は、ＣＭ＃１でのＣＡダンプ吸い上げ時間よりＣＡダンプ吸い上げ時間が多くかかっている。
【００９０】
次に、Ｓ６４によりＣＡダンプ吸い上げ実行時間が格納された吸い上げ制御テーブルの内容について、具体的に説明する。図１３は、Ｓ６４によりＣＡダンプ吸い上げ実行時間が格納された吸い上げ制御テーブルの具体例を示す図である。図１３に示すように、吸い上げ制御テーブル３７１には、さらに、ＣＰＵ使用率３７１ｅおよびＣＡダンプ吸い上げ実行時間３７１ｆが格納されている。ＣＡダンプ吸い上げ実行時間３７１ｆは、マスタＣＭの吸い上げ先決定部５２により、式（２）を用いて以下のように算出される。
【００９１】
例えば、ＣＭ＃０のメインＣＰＵにおけるＣＡダンプ吸い上げ実行時間は、以下のように算出される。ここでは、ＣＡダンプ吸い上げ時間が５０秒、ＣＰＵ使用率が０．８であるとする。
ＣＡダンプ吸い上げ実行時間＝５０÷（１−０．８）＝２５０（秒）
また、ＣＭ＃７のサブＣＰＵにおけるＣＡダンプ吸い上げ実行時間は、以下のように算出される。
ＣＡダンプ吸い上げ実行時間＝５０÷（１−０．１）＝５５．６（秒）
【００９２】
次に、Ｓ６６によりＩ／Ｏ処理時間が格納された吸い上げ制御テーブルの内容について、具体的に説明する。図１４は、Ｓ６６によりＩ／Ｏ処理時間が格納された吸い上げ制御テーブルの具体例を示す図である。図１４に示すように、吸い上げ制御テーブル３７１には、さらに、Ｉ／Ｏコマンド数３７１ｇおよびＩ／Ｏ処理時間３７１ｈが格納されている。ＣＡダンプ吸い上げ時間３７１は、マスタＣＭの吸い上げ先決定部５２により、式（３）を用いて以下のように算出される。
【００９３】
例えば、ＣＭ＃０のメインＣＰＵにおけるＩ／Ｏ処理時間は、以下のように算出される。ここでは、クロスアクセスの入出力コマンド数が１００、ストレートアクセスの入出力コマンド数が１００、クロスアクセスおよびストレートアクセスの入出力コマンド処理時間がともに０．０１秒とする。
Ｉ／Ｏ処理時間＝１００×０．０１＋１００×０．０１＝２（秒）
【００９４】
次に、Ｓ６８、Ｓ６９により吸い上げ先ＣＰＵが反映された吸い上げ制御テーブルの内容について、具体的に説明する。図１５は、Ｓ６８、Ｓ６９により吸い上げ先ＣＰＵが反映された吸い上げ制御テーブルの具体例を示す図である。図１５に示すように、吸い上げ制御テーブル３７１には、ＣＭ＃７のサブＣＰＵについて、実行中フラグ３７１ｂが実行中であることを示すＯＮを記憶している。また、ＣＭ＃７のサブＣＰＵについて、吸い上げ対象ＣＡ３７１ｃが吸い上げ対象である「ＣＭ＃１−ＣＡ＃０」を記憶している。吸い上げ対象ＣＡの吸い上げ先のＣＰＵは、マスタＣＭの吸い上げ先決定部５２により決定される。
【００９５】
例えば、吸い上げ完了規定時間が７０秒であるとする。ここでは、ＣＡダンプデータ吸い上げ実行時間３７１ｆについて、吸い上げ完了規定時間より短いＣＰＵは、ＣＭ＃１のメインＣＰＵおよびサブＣＰＵ、ＣＭ＃２のサブＣＰＵ、ＣＭ＃５のサブＣＰＵ、ＣＭ＃７のメインＣＰＵおよびサブＣＰＵである。この中でＩ／Ｏ処理時間が最も短いＣＰＵは、ＣＭ＃７のサブＣＰＵとなる。したがって、ＣＭ＃１の吸い上げ対象ＣＡ＃０の吸い上げ先のＣＰＵは、ＣＭ＃７のサブＣＰＵと決定される。その後、決定されたＣＭ＃７のサブＣＰＵに対応する実行中フラグ３７１ｂにＯＮが格納されるとともに、吸い上げ対象ＣＡ３７１ｃに吸い上げ対象の「ＣＭ＃１−ＣＡ＃０」が格納される。
【００９６】
最後に、吸い上げ完了後、Ｓ１１２により実行中フラグが更新された吸い上げ制御テーブルの内容について、具体的に説明する。図１６は、吸い上げ完了後、Ｓ１１２により実行中フラグが更新された吸い上げ制御テーブルの具体例を示す図である。図１６に示すように、吸い上げ制御テーブル３７１には、ＣＭ＃７のサブＣＰＵについて、実行中フラグ３７１ｂが実行中でないことを示すＯＦＦを記憶している。また、ＣＭ＃７のサブＣＰＵについて、吸い上げ対象ＣＡ３７１ｃがクリアされている。
【００９７】
［実施例３の効果］
上記実施例３によれば、メイン制御部３４Ｂは、ダンプデータの吸い上げを依頼する外部の制御部の候補が複数存在する場合、さらに異常を検知したＣＡのデータの吸い上げ時間が吸い上げ完了規定時間より短い制御部に吸い上げ先の候補を絞る。そして、メイン制御部３４Ｂは、絞った吸い上げ先の候補のうち、Ｉ／Ｏコマンドの数から換算されるＩ／Ｏ処理時間が最も短い制御部に、吸い上げ先を決定する。そして、メイン制御部３４Ｂは、さらに異常を検知したＣＡのダンプデータの吸い上げを、決定した制御部に依頼する。この結果、メイン制御部３４Ｂは、さらに異常が発生したＣＡのダンプデータを規定時間内に確実に吸い上げることが可能になる。さらに、メイン制御部３４Ｂは、ストレージシステム２Ｂ全体のＩ／Ｏ処理に対する影響を小さくすることができる。
【００９８】
また、上記実施例３によれば、メイン制御部３４Ｂは、さらに異常を検知したＣＡのデータの吸い上げ時間について、吸い上げ完了規定時間より短い制御部が１個も存在しない場合、Ｉ／Ｏ処理時間が最も短い制御部に決定する。この結果、メイン制御部３４Ｂは、決定した制御部で吸い上げ完了規定時間までダンプデータを吸い上げることができ、吸い上げることができたダンプデータを用いて異常に関する調査を行わせることが可能となる。
【００９９】
［その他］
なお、吸い上げ先決定部５２は、マスタＣＭのメイン制御部３４Ｂに配置するものとしたが、これに限定されず、各ＣＭのメイン制御部３４Ｂに配置するものとしても良い。かかる場合には、異常が発生したＣＡが存在するＣＭにおいて、吸い上げ先決定部５２が、自ＣＭ内でさらに異常が発生したＣＡのダンプデータの吸い上げを外部の制御部に決定する。そして、異常が発生したＣＡが存在するＣＭにおいて、吸い上げ処理部３４Ｂが、決定した制御部に吸い上げを依頼する。
【０１００】
また、ＣＭ３Ｂの各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、ＣＭ３、３Ａ、３Ｂの分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況等に応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、吸い上げ先決定部５２と吸い上げ処理部５１とを１つの部として統合し、各ＣＭに配置するようにしても良い。また、吸い上げ先決定部５２を、規定時間内にダンプデータを吸い上げ可能か否かを予測する第１の処理部と、吸い上げ可能と予測した候補のうちＩ／Ｏ処理時間が最短の制御部を決定する第２の処理部とに分散しても良い。また、記憶部３７をＣＭ３Ｂの外部装置としてネットワーク経由で接続するようにしても良い。
【０１０１】
また、ＣＭ３、３Ａ、３Ｂにて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵ（Micro  Controller  Unit）等のマイクロ・コンピュータ）あるいは、ワイヤードロジックによるハードウェアとして実現されても良い。また、ＣＭ３、３Ａ、３Ｂにて行われる各処理機能は、その全部または任意の一部が、ＣＰＵ（またはＭＰＵ、ＭＣＵ等のマイクロ・コンピュータ）にて解析実行されるプログラムにて実現されても良い。
【０１０２】
以上の実施例に係る実施形態に関し、さらに以下の付記を開示する。
【０１０３】
（付記１）データを記憶する記憶装置へのデータの入出力を制御する制御装置を有するストレージシステムにおいて、
前記制御装置は、
自装置における処理を分散して実行する第１の処理部および第２の処理部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを有し、
前記第１の処理部は、
前記複数のインタフェース部のうちいずれかのインタフェース部の異常に応じて当該インタフェース部のダンプデータの吸い上げ処理を実行中に、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
ことを特徴とするストレージシステム。
【０１０４】
（付記２）前記第１の処理部は、さらに別のインタフェース部の異常を検知すると、さらに異常を検知したインタフェース部のダンプデータの吸い上げを外部の制御装置の処理部に依頼する
ことを特徴とする付記１に記載のストレージシステム。
【０１０５】
（付記３）前記第１の処理部は、ダンプデータの吸い上げを依頼する外部の処理部の候補が複数存在する場合、さらに異常を検知したインタフェース部のデータの吸い上げ時間が所定の規定時間より短く、且つ前記入出力に関わるコマンドの数から換算される処理時間が最も短い処理部に決定し、さらに異常を検知したインタフェース部のダンプデータの吸い上げを、決定した処理部に依頼する
ことを特徴とする付記２に記載のストレージシステム。
【０１０６】
（付記４）前記第１の処理部は、さらに異常を検知したインタフェース部のデータの吸い上げ時間について、所定の規定時間より短い処理部が１個も存在しない場合、前記入出力に関わるコマンドの数から換算される処理時間が最も短い処理部に決定する
ことを特徴とする付記３に記載のストレージシステム。
【０１０７】
（付記５）データを記憶する記憶装置へのデータの入出力を制御する制御装置において、
自装置における処理を分散して実行する第１の処理部および第２の処理部と、
前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを有し、
前記第１の処理部は、
前記複数のインタフェース部のうちいずれかのインタフェース部の異常に応じて当該インタフェース部のダンプデータの吸い上げ処理を実行中に、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
ことを特徴とする制御装置。
【０１０８】
（付記６）データを記憶する記憶装置へのデータの入出力を制御する制御装置であって、処理を分散して実行する第１の処理部および第２の処理部と、前記記憶装置に記憶されるデータの入出力に関わるコマンドを外部の装置から受け付ける複数のインタフェース部とを備える制御装置を有するストレージシステムの制御方法であって、
前記第１の処理部は、前記複数のインタフェース部のうちいずれかのインタフェース部の異常を検知すると、異常を検知したインタフェース部のダンプデータの吸い上げを実行し、
前記第１の処理部による吸い上げを実行する処理の実行中に、別のインタフェース部の異常を検知すると、異常を検知した別のインタフェース部のダンプデータの吸い上げを前記第２の処理部に依頼する
処理を含むことを特徴とするストレージシステムの制御方法。
【符号の説明】
【０１０９】
１  ホストコンピュータ
２、２Ａ  ストレージシステム
３、３Ａ、３Ｂ  コントローラモジュール（ＣＭ）
３１−１、３１−２、３１−３、３１−４  チャンネルアダプタ（ＣＡ）
３２  Ｉ／Ｏコントローラ（ＩＯＣ）
３３  ＢＵＤ
３４、３４Ａ、３４Ｂ  メイン制御部
３５、３５Ａ  サブ制御部
３６  ＣＭ間通信ドライバ
３７  記憶部
３７１  吸い上げ制御テーブル
３７２  ＣＰＵ使用率情報
３７３  コマンド数情報
４  ディスク
５  フロントエンドルータ（ＦＲＴ）
６  バックエンドルータ（ＢＲＴ）
７  ドライブエンクロージャー（ＤＥ）
５１  吸い上げ処理部
５２  吸い上げ先決定部
５３  情報取得部
【図１】
0005751156.tif 000002
【図２】
0005751156.tif 000003
【図３】
0005751156.tif 000004
【図４】
0005751156.tif 000005
【図５】
0005751156.tif 000006
【図６Ａ】
0005751156.tif 000007
【図６Ｂ】
0005751156.tif 000008
【図７】
0005751156.tif 000009
【図８】
0005751156.tif 000010
【図９】
0005751156.tif 000011
【図１０】
0005751156.tif 000012
【図１１】
0005751156.tif 000013
【図１２】
0005751156.tif 000014
【図１３】
0005751156.tif 000015
【図１４】
0005751156.tif 000016
【図１５】
0005751156.tif 000017
【図１６】
0005751156.tif 000018