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