(57)【要約】【課題】管理処理を効率的に実行する。【解決手段】ストレージシステムは、管理プロセッサと、複数の主プロセッサと、を含み、前記複数の主プロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、前記管理プロセッサは、前記複数の主プロセッサに対して送信済みで未完了の管理指示と前記未完了の管理指示の送信先主プロセッサとを関連付ける情報を、管理し、前記複数の主プロセッサの前記未完了の管理指示に基づいて、次の管理指示を送信する送信先主プロセッサを前記複数の主プロセッサから選択し、前記送信先主プロセッサに対して前記次の管理指示を送信する。【選択図】図１
2019053587.tif 000002
【特許請求の範囲】
【請求項１】
管理プロセッサと、
複数の主プロセッサと、を含み、
前記複数の主プロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、
前記管理プロセッサは、
前記複数の主プロセッサに対して送信済みで未完了の管理指示と前記未完了の管理指示の送信先主プロセッサとを関連付ける情報を、管理し、
前記複数の主プロセッサの前記未完了の管理指示に基づいて、次の管理指示を送信する送信先主プロセッサを前記複数の主プロセッサから選択し、
前記送信先主プロセッサに対して前記次の管理指示を送信する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記複数の主プロセッサが実行すべき管理指示を一時的に格納するバッファをさらに含み、
前記複数の主プロセッサは、それぞれ、前記バッファから、自装置宛の管理指示を順次取得して実行する、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記管理プロセッサは、
前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを管理し、
未完了の管理指示と前記次の管理指示との和が割り当てられているバッファサイズを超える主プロセッサを、前記送信先主プロセッサの候補から除外する、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記管理プロセッサは、
管理指示の種別に対する想定処理時間を示す管理指示種別情報を参照して、前記複数の主プロセッサそれぞれの未完了の管理指示の想定処理時間を決定し、
前記複数の主プロセッサそれぞれについて、未完了の管理指示の想定処理時間の総和を計算し、
前記複数の主プロセッサそれぞれの前記総和に基づいて、前記送信先主プロセッサを選択する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記管理プロセッサは、前記複数の主プロセッサそれぞれに対する未完了の管理指示の数に基づいて、前記送信先主プロセッサを選択する、ストレージシステム。
【請求項６】
請求項４に記載のストレージシステムであって、
通信路を介して互いに通信する複数のストレージノードを含み、
前記複数のストレージノードのそれぞれは、複数の主プロセッサとメモリとを含み、
前記複数のストレージノードのメモリそれぞれは、前記複数のストレージノード間で同期される共有情報を格納し、
前記複数のストレージノードは、一つのマスタ属性のストレージノードと、１以上のスレーブ属性のストレージノードと、で構成され、
前記マスタ属性のストレージノードのメモリに格納されている前記共有情報が更新された後に、前記１以上のスレーブ属性のストレージノードは、前記１以上のスレーブ属性のストレージノードそれぞれのメモリに格納されている前記共有情報を更新し、
前記管理指示種別情報は、１以上の管理種別に対して、前記マスタ属性及び前記スレーブ属性それぞれに応じた想定処理時間を示し、
前記管理プロセッサは、前記マスタ属性のストレージノードの主プロセッサに対して前記マスタ属性に応じた想定処理時間を選択し、前記スレーブ属性のストレージノードの主プロセッサに対して前記スレーブ属性に応じた想定処理時間を選択する、ストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
通信路を介して互いに通信する複数のストレージノードを含み、
前記複数のストレージノードのそれぞれは、複数の主プロセッサとメモリとを含み、
前記複数のストレージノードのメモリそれぞれは、前記複数のストレージノード間で同期される共有情報を格納し、
前記複数のストレージノードは、一つのマスタ属性のストレージノードと、１以上のスレーブ属性のストレージノードと、で構成され、
前記マスタ属性のストレージノードのメモリに格納されている前記共有情報が更新された後に、前記１以上のスレーブ属性のストレージノードは、前記１以上のスレーブ属性のストレージノードそれぞれのメモリに格納されている前記共有情報を更新し、
前記管理プロセッサは、管理種別と実行可能なストレージノードの属性との関係を示す情報を参照して、前記次の管理指示を実行可能な属性のストレージノードの主プロセッサから、前記送信先主プロセッサを選択する、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記管理プロセッサを含む複数の管理プロセッサを含み、
前記複数の管理プロセッサそれぞれは、個別に、前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを管理し、
前記複数の管理プロセッサにおける第１管理プロセッサは、前記第１管理プロセッサが管理している前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを変更する、ストレージシステム。
【請求項９】
請求項１に記載のストレージシステムであって、
前記管理プロセッサを含む複数の管理プロセッサを含み、
前記複数の管理プロセッサは、マスタ管理プロセッサとスレーブ管理プロセッサとを含み、
前記マスタ管理プロセッサは、前記スレーブ管理プロセッサからの要求に応答して、前記スレーブ管理プロセッサが発行する管理指示を送信する第２の送信先主プロセッサを、前記複数の主プロセッサから選択し、前記第２の送信先主プロセッサを前記スレーブ管理プロセッサに通知する、ストレージシステム。
【請求項１０】
複数のプロセッサに管理指示を発行する方法であって、
前記複数のプロセッサのそれぞれは、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、
前記方法は、
前記複数のプロセッサに対して送信済みで未完了の管理指示と前記未完了の管理指示の送信先主プロセッサとを関連付ける情報を参照し、
前記複数のプロセッサの前記未完了の管理指示に基づいて、次の管理指示を送信する送信先プロセッサを前記複数のプロセッサから選択し、
前記送信先プロセッサに対して前記次の管理指示を送信する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
本開示の背景技術として、例えば、特許文献１がある。特許文献１は以下の構成を開示している（例えば要約参照）。主機能処理と管理機能処理の実行時間を一定時間で切り替える複数の処理計算機と、各処理計算機が管理機能処理を実行することができるスケジュールテーブルを有し、各処理計算機に対して管理機能処理の実行を指示する管理計算機からなる計算機システムであって、処理計算機は、管理機能処理の開始前に当該管理機能処理の開始時刻と終了時刻を管理計算機に通知し、管理計算機は、当該通知によってスケジュールテーブルを更新し、処理計算機に対して管理機能処理を指示するときにはスケジュールテーブルを参照して、管理機能処理を実行することができる処理計算機を決定する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１５／０３３４１２号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
管理処理と管理処理以外の主機能処理を交互に実行する計算機は、管理処理のための指示（管理指示）を、一定間隔で受け付けて逐次的に実行する。そのため、連続する管理指示のための処理が一回の管理処理期間内に完了しない場合にそれらの処理時間が大きく増加し、また、直前に長い時間を要する管理処理が存在する場合に次の管理処理を大きく遅延させる。
【課題を解決するための手段】
【０００５】
本開示の一態様のストレージシステムは、管理プロセッサと、複数の主プロセッサと、を含み、前記複数の主プロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、前記管理プロセッサは、前記複数の主プロセッサに対して送信済みで未完了の管理指示と前記未完了の管理指示の送信先主プロセッサとを関連付ける情報を、管理し、前記複数の主プロセッサの前記未完了の管理指示に基づいて、次の管理指示を送信する送信先主プロセッサを前記複数の主プロセッサから選択し、前記送信先主プロセッサに対して前記次の管理指示を送信する。
【発明の効果】
【０００６】
本開示の一態様により、管理処理による主機能処理への影響を小さくしつつ、管理処理を効率的に実行することができる。
【図面の簡単な説明】
【０００７】
【図１】実施例１における、計算機システムの構成例を示す。
【図２】管理指示バッファの構成例を示す。
【図３】管理指示種別テーブルの構成例を示す。
【図４】プロセッサテーブルの構成例を示す。
【図５】管理指示履歴テーブルの構成例を示す。
【図６】プロセッサによる処理スケジュールを示す。
【図７】管理モジュールによる管理指示の発行のフローチャートを示す。
【図８】管理指示を送信するプロセッサの決定の詳細のフローチャートを示す。
【図９】プロセッサから管理指示に対する応答を受信した管理モジュールによる処理のフローチャートを示す。
【図１０】ストレージノードのプロセッサ（制御プログラム）による処理のフローチャートを示す。
【図１１】実施例２における、プロセッサテーブルの管理指示バッファサイズカラムの値を更新するシーケンス図を示す。
【図１２】実施例３における、ストレージノードの構成例を示す。
【図１３】実施例４における、ストレージノードの構成例を示す。
【図１４】管理モジュールテーブルの構成例を示す。
【図１５】管理指示履歴テーブルの構成例を示す。
【図１６】スレーブ管理モジュールによる管理指示発行のフローチャートを示す。
【図１７】プロセッサから管理指示に対する応答を受信したスレーブ管理モジュールによる処理のフローチャートを示す。
【図１８】マスタ管理モジュールが、他の管理モジュールから受信した送信先プロセッサ設定要求に対して、管理指示を送信するプロセッサを決定するフローチャートを示す。
【図１９】マスタ管理モジュールによる、他管理モジュールからの管理指示履歴削除要求に対する処理のフローチャートを示す。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、実施形態に係る計算機システムを説明する。なお、本発明は、以下に説明する実施形態に限定されるものではない。
【０００９】
本開示の一例のストレージシステムにおいて、複数のプロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替る。ストレージシステムは、複数のプロセッサの未完了の管理指示に基づいて、次の管理指示を送信する送信先プロセッサを選択する。これにより、複数のプロセッサにより管理指示を効率的に実行することができる。
【実施例１】
【００１０】
図１は、計算機システムの構成例を示す。計算機システムは、ホスト計算機１１、複数のストレージノード１３を含むストレージシステム、及び管理クライアント１５を含む。ホスト計算機１１、ストレージノード１３及び管理クライアント１５それぞれの数は任意である。以下に説明において、複数のストレージノード１３は、同様の構成を有する。
【００１１】
ホスト計算機１１はデータネットワークを介して、複数のストレージノード１３と通信可能であり、管理クライアント１５は、管理ネットワークを介して、複数のストレージノード１３と通信可能である。ホスト計算機１１及び管理クライアント１５は、典型的な計算機構成を有することができる。例えば、ホスト計算機１１及び管理クライアント１５は、プロセッサ、プロセッサにより実行されるプログラム及びプログラムが使用するデータを格納するメインメモリ、補助記憶、入出力インタフェース、及び入出力デバイスを含む。入出力インタフェースはネットワーク及び入出力デバイスのインタフェースである。
【００１２】
ストレージノード１３は、バス１３９を介して通信可能に接続された、複数のプロセッサ（主プロセッサ）１３１、メモリ１３２、Ｉ／Ｏポート１３３、及びバックエンドモジュール１３４を含む。ストレージノード１３は、さらに、複数のＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）１３５、複数の記憶ドライブ１３８及び管理モジュール１３６を含む。
【００１３】
記憶ドライブ１３８は、ホスト計算機１１からのライトデータを最終的に格納するための媒体を含む。図１の例は、データの最終記憶装置として、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を使用する。記憶ドライブ１３８は、他のタイプの記憶ドライブ、例えば、フラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）であってもよい。
【００１４】
図１の例において、複数の記憶ドライブ１３８はＲＡＩＤグループ３８２を構成している。論理ボリューム３８１は、ＲＡＩＤグループ３８２を構成する記憶ドライブ１３８それぞれの一部の記憶領域で構成される。論理ボリューム３８１は、ホスト計算機１１からのホストデータを格納する。
【００１５】
バックエンドモジュール１３４は、プロセッサ１３１及びメモリ１３２と記憶ドライブ１３８との通信のインタフェースである。バックエンドモジュール１３４は、記憶ドライブ１３８それぞれと接続されるポート３４１を含む。バックエンドモジュール１３４は、バス１３９を介する通信に用いられるプロトコル、例えばＰＣＩ−Ｅｘｐｒｅｓｓと、記憶ドライブ１３８との通信に用いられるプロトコル、例えばＳｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ、との間の変換を実行する。
【００１６】
記憶ドライブ１３８は、当該記憶ドライブを含まないストレージノード１３からアクセス可能（共有）であってもよく、又は、アクセス不可であってもよい。複数の記憶ドライブ１３８は、ストレージノードの外部に配置され、複数のストレージノード１３からアクセスできるように、バックエンドスイッチを介して複数のストレージノード１３に接続されていてもよい。
【００１７】
ストレージノード１３は、Ｉ／Ｏポート１３３を介して、ホスト計算機１１と通信する。Ｉ／Ｏポート１３３は、リード／ライト（Ｉ／Ｏ処理）の要求及びライトデータをホスト計算機１１から受信し、リードデータを含むリード要求に対応する応答及びライト要求に対する応答をホスト計算機１１に送信する。
【００１８】
Ｉ／Ｏポート１３３は、ホスト計算機１１とストレージノード１３との通信に用いられるプロトコルと、ストレージノード１３内で用いられるプロトコルと、の間の変換を実行する。
【００１９】
Ｉ／Ｏポート１３３とホスト計算機１１とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１を介して接続される。プロセッサ１３１は、メモリ１３２に格納されているプログラムに従って所定の機能部として動作し、本例において、制御プログラム３２１に従ってＩ／Ｏ処理を実行する。
【００２０】
メモリ１３２は、キャッシュメモリ領域、共有メモリ領域、及びローカルメモリ領域を含む。キャッシュメモリ領域は、記憶ドライブ１３８へ書き込むホストデータ及び記憶ドライブ１３８から読み出したホストデータを一時的に記憶する。共有メモリ領域は、ストレージノード１３間で共有される情報を格納し、本例において、構成情報３２２を格納する。
【００２１】
構成情報３２２は、計算機システムの構成についての情報を格納する。例えば、構成情報３２２は、例えば、ホスト計算機、ストレージノード、仮想ボリューム及び論理ボリュームを含むボリューム、ストレージプール、ＲＡＩＤグループ等に関する情報を保持する。
【００２２】
共有メモリ領域に格納されている情報は、ストレージノード１３間で同期される。最新の情報を保持するストレージノード１３がマスタノードであり、他のストレージノード１３はスレーブノードである。マスタノードのプロセッサ１３１が、保持している構成情報３２２を最初に更新する。スレーブノードのプロセッサ１３１は、マスタノードにおける構成情報３２２の更新の後、当該更新を自装置が保持している構成情報３２２に反映する。スレーブノードは、マスタノードからの指示に従って構成情報３２２を更新してもよく、マスタノードに更新を問い合わせてもよい。
【００２３】
ローカルメモリ領域は、メモリ１３２が含まれるストレージノード１３において使用及び更新され、他のストレージノードと同期されない（共有されない）情報を格納する。本例において、ローカルメモリ領域は、制御プログラム３２１及び管理指示バッファ３２３を格納する。
【００２４】
制御プログラム３２１は、管理処理及び管理処理以外の主機能処理を実行する。主機能処理は、ホスト計算機１１からの要求に応じたＩ／Ｏ処理を含む。管理処理は、管理モジュール１３６からの管理指示に応じた処理であり、例えば、ボリューム、ストレージノード、又はホスト計算機に関する情報の参照及び更新を含む。制御プログラム３２１は、管理モジュール１３６から管理指示を受け取り、構成情報３２２を参照又は更新する。
【００２５】
後述するように、各プロセッサ１３１は、一定の間隔で特定期間内に実行可能な管理指示を受け付け、順次実行する。管理指示バッファ３２３は、プロセッサ１３１が管理指示を受け取るまで、管理指示を一次的に格納する領域である。管理指示バッファは、プロセッサ１３１それぞれと関連づけられているＮＩＣ１３５内に存在してもよい。
【００２６】
複数のプロセッサ１３１は、それぞれ、対応するＮＩＣ１３５に関連づけられている。各プロセッサ１３１は、関連付けられているＮＩＣ１３５を介して、ネットワーク１３７に接続する。プロセッサ１３１は、ネットワーク１３７を介して、他のストレージノード１３及び管理モジュール１３６と通信する。ネットワーク１３７は、例えば、ＬＡＮである。
【００２７】
各ＮＩＣ１３５は物理デバイスでも、仮想デバイスでもよい。複数のプロセッサ１３１が物理的なＮＩＣを共有し、その物理的なＮＩＣがプロセッサ１３１それぞれに関連付けられている仮想ＮＩＣ１３５を提供してもよい。
【００２８】
管理モジュール１３６は、管理クライアント１５から管理要求を受け付けるためのインタフェースである。管理モジュール１３６は、ネットワーク１３７を介して、当該管理モジュール１３６を含むストレージノード１３及び他のストレージノード１３の、プロセッサ１３１と通信する。
【００２９】
管理モジュール１３６は、バスを介して通信可能なプロセッサ（管理プロセッサ）３６１、メモリ３６２、及びＮＩＣ３６３、３６４を含む。ＮＩＣ３６３はネットワーク１３７へ接続し、ＮＩＣ３６４は管理クライアント１５と通信するためのインタフェースである。一つのＮＩＣが、管理クライアント１５及びネットワーク１３７と接続するために使用されてもよい。
【００３０】
プロセッサ３６１は、メモリ３６２に格納されているプログラムに従って所定の機能部として動作する。メモリ３６２は、管理プログラム３６９を格納する。メモリ３６２は、さらに、プロセッサテーブル３６６、管理指示種別テーブル３６７、管理指示履歴テーブル３６８を含む。
【００３１】
管理プログラム３６９は管理クライアント１５に対して管理ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を提供する。管理プログラム３６９は、管理ＡＰＩへの管理要求を受け付けると、当該ストレージノード１３内の１以上のプロセッサ１３１に対する管理指示に変換して、管理指示それぞれを対応するプロセッサ１３１に送信する。管理指示は、任意時に発行可能である。
【００３２】
管理指示は、送信先プロセッサ１３１に関連付けられているＮＩＣ１３５のバッファに格納される。プロセッサ１３１は、特定の時にＮＩＣ１３５から管理指示を取得し、管理指示バッファ３２３に格納する。
【００３３】
例えば、管理プログラム３６９は、１００の論理ボリュームを作成する管理要求を、管理クライアント１５から受信する。管理プログラム３６９は、この管理要求から、１００の論理ボリュームそれぞれを作成する１００の管理指示を生成する。管理プログラム３６９は、１００の管理指示を、複数のプロセッサ１３１に分配する。
【００３４】
図１の構成例と異なり、ストレージノードの外部の一つの管理モジュールが、複数のストレージノード１３に対して管理指示を送信してもよい。例えば、管理モジュールは、複数のストレージノード１３とネットワークを介して接続し、管理クライアント１５からの管理要求から生成した、１又は複数の管理指示を、１又は複数のストレージノード１３の１又は複数のプロセッサ１３１に送信する。
【００３５】
図２は、管理指示バッファ３２３の構成例を示す。管理指示バッファ３２３は、プロセッサ１３１に対する管理指示を一時的に格納する。管理指示バッファ３２３は、プロセッサＩＤカラム３３１及び管理指示カラム３３２を含む。プロセッサＩＤカラム３３１は、管理指示を実行すべきプロセッサのＩＤを示す。管理指示カラム３３２は、管理指示を格納している。図２は、管理指示それぞれの種別のみを例として示す。
【００３６】
図３は、管理指示種別テーブル３６７の構成例を示す。管理指示種別テーブル３６７は、管理モジュール１３６がプロセッサ１３１に発行する管理指示の種別それぞれについての情報を保持している。管理指示種別テーブル３６７は、管理指示種別カラム６７１、処理ノードカラム６７２、処理時間（マスタノード）カラム６７３、及び、処理時間（スレーブノード）カラム６７４を含む。
【００３７】
管理指示種別カラム６７１は、管理指示の種別を示す。処理ノードカラム６７２は、各種別の管理指示を実行可能なストレージノードの属性（マスタ／スレーブ）を示す。上述のように、マスタノードは、共有メモリ領域の最新の情報、本例において最新の構成情報３２２を保持するノードであり、スレーブノードは、マスタノード以外のノードである。
【００３８】
各種別の管理指示を、マスタノード及びスレーブノードの一方又は双方が実行可能である。処理時間（マスタノード）カラム６７３は、マスタノードが各種別の管理指示実行する場合に想定される処理時間を示す。処理時間（マスタノード）カラム６７３は、スレーブノードが各種別の管理指示実行する場合に想定される処理時間を示す。
【００３９】
スレーブノードは、管理指示の実行において最新の構成情報３２２を参照することが必要である場合、マスタノードが保持する構成情報３２２をチェックする。そのため、スレーブノードによる特定の管理指示の処理時間は、マスタノードによる処理時間よりも長いことがある。
【００４０】
このように、マスタノードによる管理指示の処理時間と、スレーブノードによる当該管理指示の処理時間とは、異なることがある。マスタノードとスレーブノードそれぞれの想定処理時間を管理することで、管理指示をより適切にプロセッサ１３１に割り当てることができる。
【００４１】
図４はプロセッサテーブル３６６の構成例を示す。プロセッサテーブル３６６は、ストレージノード１３のプロセッサ１３１に関する情報を保持している。プロセッサテーブル３６６は、ストレージノードＩＤカラム６６１、プロセッサＩＤカラム６６２、管理指示バッファサイズカラム６６３、及びマスタ／スレーブカラム６６４を含む。
【００４２】
ストレージノードＩＤカラム６６１は、各プロセッサ１３１を含むストレージノード１３のＩＤを示す。プロセッサＩＤカラム６６２は、各プロセッサ１３１のストレージノード１３内でのＩＤを示す。管理指示バッファサイズカラム６６３は、当該管理モジュール１３６から各プロセッサ１３１に発行される管理指示を格納する管理指示バッファのサイズを示す。
【００４３】
本例において、管理指示バッファ３２３は、一つのプロセッサ１３１に対する複数の管理モジュール１３６からの管理指示を格納する。管理指示バッファ３２３において一つのプロセッサ１３１に割り当てられているバッファサイズは、管理指示バッファサイズカラム６６３が示す値以上である。図４の構成例は、バッファサイズを管理指示の数で表わすが、代わりに、バッファサイズはデータサイズ（ｂｙｔｅ）で表わされてもよい。
【００４４】
図５は、管理指示履歴テーブル３６８の構成例を示す。管理指示履歴テーブル３６８は、管理モジュール１３６が発行した管理指示の情報を保持する。管理指示履歴テーブル３６８は、要求管理ＡＰＩ  ＩＤカラム６８１、送信管理指示ＩＤカラム６８２、ストレージノードＩＤカラム６８３、プロセッサＩＤカラム６８４、管理指示種別カラム６８５、処理時間カラム６８６、送信時刻カラム６８７、及び、管理指示完了状態カラム６８８を含む。
【００４５】
管理指示履歴テーブル３６８の一つのエントリは、プロセッサ１３１に送信した一つの管理指示の情報を示す。要求管理ＡＰＩ  ＩＤカラム６８１は、管理指示を生成した、管理クライアント１５からの管理要求のＩＤを示す。送信管理指示ＩＤカラム６８２は、管理指示のＩＤを示す。ストレージノードＩＤカラム６８３は、管理指示の送信先ストレージノード１３のＩＤを示す。プロセッサＩＤカラム６８４は、管理指示の送信先プロセッサ１３１の（ストレージノード内の）ＩＤを示す。
【００４６】
管理指示種別カラム６８５は、管理指示の種別を示す。処理時間カラム６８６は、管理指示のプロセッサ１３１による処理に想定される時間を示す。送信時刻カラム６８７は、管理指示を送信した時刻を示す。管理指示完了状態カラム６８８は、送信した管理指示が完了又は未完了であるかを示す。
【００４７】
図６は、プロセッサ１３１による処理スケジュールを示す。三つのプロセッサ１、プロセッサ２、及びプロセッサ３の処理スケジュールが例として示されている。主機能処理を実行する主機能処理期間と管理処理を実行する管理処理期間とが、交互に繰り返される。主機能処理期間は、プロセッサ１３１が管理処理以外の処理を実行する期間である。主機能処理は、例えば、ホスト計算機からのＩ／Ｏ要求に応じたＩ／Ｏ処理や、問い合わせ要求に対する応答を含む。
【００４８】
管理処理期間は、プロセッサ１３１が管理処理を実行する期間である。管理処理は、管理モジュール１３６からの管理指示（管理クライアント１５からの管理要求）を実行する処理であり、例えば、論理ボリュームの作成、論理ボリュームの参照、ホスト情報の変更、ユーザ情報の変更等を含む。
【００４９】
プロセッサ１３１は、主機能処理期間と次の主機能処理期間との間に、管理処理を実行する。例えば、プロセッサ１３１は、前回の管理処理期間から所定時間経過した後、今回の管理処理を開始する。管理処理期間の上限値が設定されている。プロセッサ１３１は、所定の管理処理期間内に実行可能な管理指示を管理指示バッファ３２３から順次取得して実行する。プロセッサ１３１は、管理指示を実行すると、その応答を管理モジュール１３６に返す。
【００５０】
図６の例において、異なるプロセッサ１３１の処理スケジュールは非同期である。管理処理の周期及び管理処理期間の上限値は、それぞれ、全てのプロセッサ１３１に共通でもよく、プロセッサ１３１又はストレージノード１３により異なっていてもよい。プロセッサ１３１が、所定間隔でのみ管理指示を受け付けて逐次的に実行することで、管理処理の主機能処理への影響を低減できる。
【００５１】
図７は、管理モジュール１３６による管理指示の発行のフローチャートを示す。管理プログラム３６９（プロセッサ３６１）は、管理クライアント１５から管理要求を受信する（Ｓ１０１）。管理プログラム３６９は、受信した管理要求に対して、要求管理ＡＰＩ  ＩＤを採番する（Ｓ１０２）。要求管理ＡＰＩ  ＩＤは、管理モジュール１３６内で一意である。
【００５２】
管理プログラム３６９は、管理要求を１以上の管理指示に変換する（Ｓ１０３）。管理プログラム３６９は、以下のステップＳ１０４〜ステップＳ１０９を、生成した管理指示それぞれに対して実行する。
【００５３】
管理プログラム３６９は、生成した管理指示に対して、送信管理指示ＩＤを採番する（Ｓ１０４）。管理指示は、要求管理ＡＰＩ  ＩＤと送信管理指示ＩＤの組で、管理モジュール１３６内で一意に同定される。管理プログラム３６９は、管理指示を送信するプロセッサを決定する（Ｓ１０５）。管理指示の送信先プロセッサの決定の詳細は、図８を参照して後述する。
【００５４】
次に、管理プログラム３６９は、管理指示を送信できるプロセッサが存在するか判定する（Ｓ１０６）。ステップＳ１０５の結果が、管理指示を送信できるプロセッサが存在しないことを示す場合（Ｓ１０６：ＮＯ）、管理プログラム３６９は、予め決められている時間待機して（Ｓ１０７）、ステップＳ１０５に戻る。リトライ回数が規定値に達した場合、管理プログラム３６９は、当該管理要求に対するエラーを、管理クライアント１５に返してもよい。
【００５５】
ステップＳ１０５の結果が、特定のプロセッサ１３１を示す場合（Ｓ１０６：ＹＥＳ）、管理プログラム３６９は、決定されたプロセッサ１３１に管理指示を送信する（Ｓ１０８）。送信された管理指示は、管理指示バッファ３２３に格納される。管理指示バッファ３２３により、プロセッサ１３１の主機能処理期間においても、当該プロセッサ１３１に管理指示を発行することができ、任意の時に管理指示を発行することができる。
【００５６】
さらに、管理プログラム３６９は、送信した管理指示の情報を、管理指示履歴テーブル３６８に追加する（Ｓ１０９）。具体的には、管理プログラム３６９は、要求管理ＡＰＩ  ＩＤカラム６８１及び送信管理指示ＩＤカラムのそれぞれに、ステップＳ１０２で決定した要求管理ＡＰＩ  ＩＤ及びステップＳ１０４で決定した送信管理指示ＩＤを格納する。
【００５７】
さらに、管理プログラム３６９は、ストレージノードＩＤカラム６８３及びプロセッサＩＤカラム６８４それぞれに、ステップＳ１０５で決定したプロセッサ１３１を同定する値を登録する。管理プログラム３６９は、管理指示種別カラムに、当該管理指示の種別を示す値を格納する。
【００５８】
さらに、管理プログラム３６９は、当該管理指示の処理時間を処理時間カラム６８６に格納する。管理プログラム３６９は、プロセッサテーブル３６６を参照して、送信先プロセッサ１３１がマスタノードとスレーブノードのいずれのストレージノード１３のプロセッサであるか特定する。管理プログラム３６９は、さらに、管理指示種別テーブル３６７を参照し、当該管理指示の種別及び送信先プロセッサのストレージノードの属性（マスタ／スレーブ）に応じた処理時間を決定する。
【００５９】
さらに、管理プログラム３６９は、管理指示完了状態カラム６８８に、「未完了」を登録する。後述するように、プロセッサ１３１から管理指示に対する応答を受信すると、管理プログラム３６９は、管理指示完了状態カラム６８８における「未完了」を「完了」に更新する。
【００６０】
なお、異なる管理モジュール１３６は、異なる管理ＡＰＩを提供してもよく、異なるアルゴリズムによって管理クライアントからの管理要求を１以上の管理指示に変換してもよい。
【００６１】
図８は、管理指示を送信するプロセッサの決定（Ｓ１０５）の詳細のフローチャートを示す。まず、管理プログラム３６９は、管理指示種別からプロセッサ毎の処理時間を決定する（Ｓ１２１）。具体的には、管理プログラム３６９は、管理指示種別テーブル３６７を参照し、当該管理指示の管理種別に対する、マスタノードのプロセッサの処理時間とスレーブノードのプロセッサの処理時間を決定する。プロセッサの処理時間は、そのプロセッサが含まれるストレージノードの属性（マスタ／スレーブ）で決まる。
【００６２】
次に、管理プログラム３６９は、当該管理指示が、マスタノード及びスレーブノードの一方のストレージノードのプロセッサでの処理を不可とする場合、その一方のストレージノードのプロセッサを、送信先候補から除外する（Ｓ１２２）。管理プログラム３６９は、管理指示種別テーブル３６７の処理ノードカラム６７２を参照し、マスタノード及びスレーブノードそれぞれが、当該管理指示種別を実行可能であるか知ることができる。
【００６３】
次に、管理プログラム３６９は、次の管理指示を送信した場合に管理指示バッファサイズをこえるプロセッサを、送信先候補から除外する（Ｓ１２３）。管理プログラム３６９は、管理指示履歴テーブル３６８を参照して、候補プロセッサ毎に、未完了の管理指示の総数をカウントする。
【００６４】
管理プログラム３６９は、さらに、プロセッサテーブル３６６の管理指示バッファサイズカラム６６３から、候補プロセッサそれぞれの管理指示バッファサイズを取得する。管理プログラム３６９は、未完了の管理指示の総数が管理指示バッファサイズに達しているプロセッサを、送信先候補から除外する。これにより、管理指示バッファのオーバーフローの可能性を低減できる。
【００６５】
本例のように、各プロセッサ１３１の管理指示バッファがＮＩＣ１３５に存在するのではなく、ストレージノード１３の全プロセッサ１３１の管理指示バッファがメモリ１３２に存在する場合、管理指示バッファサイズはストレージノード毎に管理されてもよい。具体的には、管理プログラム３６９は、一つのストレージノード１３の全てのプロセッサ１３１への未完了管理指示の総数と、規定の管理指示バッファサイズとを比較してもよい。
【００６６】
次に、管理プログラム３６９は、除外されていない送信先候補のプロセッサが残っているか判定する（Ｓ１２４）。全てのプロセッサが除外され、送信先候補のプロセッサが存在しない場合（Ｓ１２４：ＮＯ）、管理プログラム３６９は、送信先プロセッサは存在しないと決定する（Ｓ１２５）。送信先候補のプロセッサが存在している場合（Ｓ１２４：ＹＥＳ）、管理プログラム３６９は、残っている候補プロセッサのうち、基準完了時刻が最も早いプロセッサを、当該管理指示の送信先プロセッサと決定する（Ｓ１２６）。
【００６７】
基準完了時刻は、最古の管理指示の送信時刻と、未完了管理指示の処理時間とに基づき決定される。具体的には、管理プログラム３６９は、管理指示履歴テーブル３６８から、管理指示完了状態カラム６８８の値が「未完了」を示す、候補プロセッサのレコードを選択する。管理プログラム３６９は、選択したレコードの送信時刻カラム６８７の値において、最も古い値を選択する。
【００６８】
管理プログラム３６９は、さらに、選択したレコードの処理時間カラム６８６の値の総和を計算する。上記最も古い送信時刻に、未完了管理指示の処理時間の総和を加えた値が、基準完了時刻である。管理プログラム３６９は、計算した基準完了時刻において、最も早い基準完了時刻のプロセッサを、当該管理指示の送信先プロセッサと決定する。
【００６９】
基準完了時刻は、プロセッサそれぞれが全ての残管理指示を完了する推定時刻を比較するための、相対的な時刻を表す。基準完了時刻に基づき送信先プロセッサを選択することで、管理指示をより早い時に実行可能なプロセッサを高精度に推定できる。
【００７０】
管理プログラム３６９は、上記アルゴリズムと異なるアルゴリズムにより、送信先プロセッサを決定してもよい。例えば、管理プログラム３６９は、未完了の管理指示の処理時間の総和（残処理時間）が最も短い候補プロセッサを、送信先プロセッサとして選択してもよい。基準完了時刻よりも推定精度は低いが、効率的に送信先を決定することができる。また、この構成は、管理指示の送信時刻の管理を必要としない。
【００７１】
上述のように、未完了管理指示の処理時間総和に基づき管理指示を送信するプロセッサを選択することで、管理指示の処理効率を向上し、管理指示を完了するまでの所要時間を短縮することができる。
【００７２】
他の例として、管理プログラム３６９は、残管理指示数が最も少ない候補プロセッサを、送信先プロセッサとして選択してもよい。残処理時間よりも推定精度は低いが、効率的に送信先を決定することができる。また、この構成は、管理指示の送信時刻及び処理時間の管理を必要としない。管理プログラム３６９は、よりシンプルに、候補プロセッサからランダムに一つのプロセッサを、送信先プロセッサとして選択してもよい。
【００７３】
上記例のように、マスタノードの処理時間とスレーブノードの処理時間を個別に管理し、それらに基づいて残管理指示の処理時間を計算することで、より正確に残処理時間を推定することができる。管理指示種別テーブル３６７により管理される全ての管理指示の処理時間は、マスタノード及びスレーブノードに共通であってもよい。
【００７４】
上述のように、プロセッサ１３１それぞれに送信済みの未完了管理指示に基づき、次の管理指示を送信するプロセッサ１３１を選択することで、プロセッサ１３１の負荷状態に応じて管理指示をプロセッサ１３１に割り当て、複数のプロセッサ１３１により効率的に管理指示を実行することができる。
【００７５】
図９は、プロセッサ１３１から管理指示に対する応答を受信した管理モジュール１３６による処理のフローチャートを示す。まず、管理プログラム３６９（プロセッサ３６１）は、管理指示を実行したプロセッサ１３１からプロセッサから結果（応答）を受信する（Ｓ１４１）。具体的には、管理プログラム３６９、管理指示の実行結果を含むパケットを、プロセッサ１３１から受信する。
【００７６】
管理プログラム３６９は、管理指示履歴テーブル３６８において、受信した結果に対応する管理指示のレコードの管理指示完了状態カラム６８８の値を、「未完了」から「完了」に変更する（Ｓ１４２）。管理プログラム３６９は、受信したパケットのヘッダを参照して、送信元プロセッサを同定する。管理プログラム３６９は、管理指示履歴テーブル３６８において、当該プロセッサの最も古い未完了管理指示のレコードを選択して、管理指示完了状態カラム６８８の値を、「未完了」から「完了」に変更する。管理プログラム３６９は、必要であれば、受信した結果をメモリ３６２において一時的に保持する。
【００７７】
次に、管理プログラム３６９は、受信した結果が対応する管理指示と同一の管理ＡＰＩ  ＩＤの全ての管理指示が完了しているか判定する（Ｓ１４３）。具体的には、管理プログラム３６９は、管理指示履歴テーブル３６８から、受信した結果に対応する管理指示と要求管理ＡＰＩ  ＩＤカラム６８１の値が同一の全てのレコードを選択する。管理プログラム３６９は、選択したレコードの管理指示完了状態カラム６８８の値をチェックする。
【００７８】
受信した結果が対応する管理指示と同一の管理ＡＰＩ  ＩＤのいずれかの管理指示が未完了である場合（Ｓ１４３：ＮＯ）、管理プログラム３６９は、ステップＳ１４１に戻って、プロセッサ１３１からの次の管理指示の実行結果を待つ。
【００７９】
受信した結果に対応する管理指示と同一の管理ＡＰＩ  ＩＤの全ての管理指示が完了済である場合（Ｓ１４３：ＹＥＳ）、管理プログラム３６９は、管理指示履歴テーブル３６８から、当該管理ＡＰＩ  ＩＤの全ての管理指示のレコードを削除する（Ｓ１４４）。管理プログラム３６９は、当該管理ＡＰＩ  ＩＤの全ての管理指示の結果を踏まえて、管理クライアント１５へ、当該管理要求に対する結果を返す（Ｓ１４５）。これにより、管理クライアント１５からの管理要求に対して適切な処理結果を応答することができる。なお、完了済み管理指示のレコードは削除することなく残されていてもよい。
【００８０】
図１０は、ストレージノード１３のプロセッサ１３１（制御プログラム３２１）による処理のフローチャートを示す。図６を参照して説明したように、制御プログラム３２１は、定期的に管理処理を実行する。制御プログラム３２１は、主機能処理を実行（Ｓ１６１）した後、管理処理待機時間が、所定の管理処理受け付け周期を超えているか判定する（Ｓ１６２）。管理処理待機時間は、前回の管理処理期間からの経過時間である。
【００８１】
管理処理待機時間が所定の管理処理受け付け周期を超えていない場合（Ｓ１６２：ＮＯ）、制御プログラム３２１は、現在の管理処理待機時間にステップ１６１で実行した主機能処理の時間を加算し（Ｓ１６３）、ステップＳ１６１に戻って次の主機能処理を実行する。なお、制御プログラム３２１はタイマを使用して、管理処理待機時間を計測してもよい。
【００８２】
管理処理待機時間が所定の管理処理受け付け周期を超えている場合（Ｓ１６２：ＹＥＳ）、制御プログラム３２１は、管理処理を開始する。制御プログラム３２１は、当該制御プログラム３２１を実行しているプロセッサ（自プロセッサ）１３１への管理指示を、管理指示バッファ３２３から取得して（Ｓ１６４）、実行する（Ｓ１６５）。
【００８３】
複数の自プロセッサ１３１に対する管理指示が管理指示バッファ３２３に格納されている場合、制御プログラム３２１は、順次、管理指示を実行する。管理指示バッファ３２３に格納されている全ての自プロセッサ１３１に対する管理指示を実行した後、又は、現在の管理処理期間の開始から所定時間が経過している場合、制御プログラム３２１は、管理処理待機時間をリセットする（Ｓ１６６）。その後、制御プログラム３２１は、ステップＳ１６１に戻って次の主機能処理を実行する。
【実施例２】
【００８４】
上述のように、管理モジュール１３６がプロセッサ１３１に発行可能な管理指示の数は、プロセッサテーブル３６６における管理指示バッファサイズカラム６６３が示す上限値で制限される。一例において、管理指示バッファサイズカラム６６３の値は、変更可能であってもよい。これにより、ユーザ要求又はシステム構成により適した管理処理を実現できる。
【００８５】
管理プログラム３６９は、他のストレージノード１３の管理プログラム３６９と協働して、管理モジュール１３６それぞれが保持するプロセッサテーブル３６６の管理指示バッファサイズカラム６６３の値を更新する。
【００８６】
図１１は、プロセッサテーブル３６６の管理指示バッファサイズカラム６６３の値を更新するシーケンス図を示す。特定のストレージノードＡの管理プログラム３６９が、管理クライアント１５から管理指示バッファサイズの変更指示を受信する（Ｓ１８１）。ストレージノードＡの管理プログラム３６９は、ネットワーク１３７を介して、他のストレージノードそれぞれに、管理指示バッファサイズ変更指示を送信する（Ｓ１８２）。例えば、各管理モジュール１３６は、システム内の管理モジュール１３６のアドレスを管理するテーブルを保持し、それを参照して指示の送信先を決定する。
【００８７】
他のストレージノードの管理プログラム３６９は、管理指示バッファサイズ変更指示を受信し（Ｓ１８３）、指示に従って、そのプロセッサテーブル３６６における管理指示バッファサイズカラム６６３の各プロセッサの値を変更する（Ｓ１８４）。
【００８８】
ストレージノードＡの管理プログラム３６９は、ストレージノードＡのプロセッサテーブル３６６における管理指示バッファサイズカラム６６３の各プロセッサの値を変更する（Ｓ１８５）。
【００８９】
ストレージノードＡの管理プログラム３６９は、自ストレージノードの管理指示バッファサイズカラム６６３の値を変更した後に、他のストレージノードにバッファサイズ変更指示を送信してもよい。管理指示バッファサイズカラム６６３の値は、全てのストレージノード１３に共通でもよく、ストレージノード毎に設定されてもよい。たとえば、一つのストレージノード１３のみが、高い優先度の管理クライアント１５から管理要求を受信する場合、当該ストレージノード１３に割当てる管理指示バッファサイズを、他のストレージノード１３より大きくしてもよい。
【００９０】
管理指示バッファサイズカラム６６３の値は、各ストレージノード１３において、全てのプロセッサに共通でもよく、プロセッサ毎に値が設定されてもよい。管理プログラム３６９は、特定のプロセッサ１３１に対する管理指示バッファサイズを０に設定することで、当該プロセッサ１３１に管理処理を実行させないようにすることができる。当該プロセッサ１３１に対して管理指示は発行されず、当該プロセッサ１３１は主機能処理のみを実行する。
【００９１】
管理プログラム３６９は、管理クライアント１５からの指示と異なる契機で、管理指示バッファサイズカラム６６３の値を変更してもよい。例えば、既存のストレージノードの削除又は新たなストレージノードの追加契機として、管理プログラム３６９は、管理指示バッファサイズカラム６６３の値を自動的に変更してもよい。
【実施例３】
【００９２】
図１２は、ストレージノード１３の他の構成例を示す。図１２の構成例は、管理モジュールの機能を管理プログラム３６９に従って動作するプロセッサ１３１により実現する。これにより、管理モジュールのためのハードウェア構成要素を低減することができる。
【００９３】
メモリ１３２は、図１の構成に示す情報に加え、プロセッサテーブル３６６、管理指示種別テーブル３６７、管理指示履歴テーブル３６８、及び管理プログラム３６９を格納している。管理指示種別テーブル３６７、プロセッサテーブル３６６、及び管理指示履歴テーブル３６８それぞれの構成は、図３、４、及び５を参照して説明した通りである。管理プログラム３６９の動作も上述の通りである。
【実施例４】
【００９４】
本実施例において、複数のストレージノード１３の管理モジュール１３６は、管理指示バッファ３２３のオーバーフローが起きないように、協調して管理指示を送信するプロセッサを選択する。
【００９５】
図１３は、ストレージノード１３の構成例を示す。管理モジュール１３６は、図１に示す構成に加え、管理モジュールテーブル３７０をさらに含む。図１４は、管理モジュールテーブル３７０の構成例を示す。管理モジュールテーブル３７０は、システム内の管理モジュール１３６についての情報を格納している。
【００９６】
管理モジュールテーブル３７０は、管理モジュールＩＤカラム７０１、マスタ／スレーブカラム７０２、及びＩＰアドレスカラム７０３を含む。管理モジュールＩＤカラム７０１は、システム内の管理モジュール１３６それぞれのＩＤを示す。マスタ／スレーブカラム７０２は、管理モジュール１３６がマスタであるかスレーブであるかを示す。
【００９７】
管理モジュール１３６のマスタ／スレーブは、ストレージノード１３（プロセッサ１３１）のマスタ／スレーブとは異なる。ユーザ（例えばシステム設計者）は、複数の管理モジュール１３６から一つの管理モジュール１３６を選択し、マスタ管理モジュールに予め設定する。他の管理モジュール１３６は、スレーブ管理モジュールである。ＩＰアドレスカラム７０３は、管理モジュール１３６それぞれのＩＰアドレスを示す。
【００９８】
図１５は、管理指示履歴テーブル３６８の構成例を示す。管理指示履歴テーブル３６８は、図５を参照して説明した構成に加えて、指示元管理モジュールＩＤカラム６８９を含む。指示元管理モジュールＩＤカラム６８９は、マスタ管理モジュール１３６のみが使用し、スレーブ管理モジュール１３６は使用しない。指示元管理モジュールＩＤカラム６８９は、マスタ管理モジュール１３６に送信先プロセッサの選択を要求した管理モジュール１３６を示す。
【００９９】
図１６は、スレーブ管理モジュール１３６による管理指示発行のフローチャートを示す。本例において、スレーブ管理モジュール１３６は、マスタ管理モジュール１３６に対して、管理指示を送信すべきプロセッサ１３１の選択を要求する。図１６のフローチャートにおけるステップＳ２０１〜Ｓ２０４は、図７のフローチャートにおけるステップＳ１０１〜Ｓ１０４と同様である。
【０１００】
ステップＳ２０５において、スレーブ管理モジュール１３６（の管理プログラム３６９）は、マスタ管理モジュール１３６に送信先プロセッサの選択を要求する。スレーブ管理モジュール１３６は、管理モジュールテーブル３７０を参照して、マスタ管理モジュール１３６を同定する。スレーブ管理モジュール１３６は、管理指示種別、要求管理ＡＰＩ  ＩＤ、及び送信管理指示ＩＤを含む、プロセッサ選択要求を、マスタ管理モジュール１３６に送信する。
【０１０１】
マスタ管理モジュール１３６は、図８を参照して説明したように、管理指示を送信するプロセッサ１３１を決定し、それを要求元スレーブ管理モジュール１３６に返す。選択できるプロセッサ１３１が存在しない場合、マスタ管理モジュール１３６は、それを示す応答を要求元スレーブ管理モジュール１３６に返す。
【０１０２】
マスタ管理モジュール１３６から受信した応答が送信先プロセッサ１３１が存在しないことを示す場合（Ｓ２０６：ＮＯ）、スレーブ管理モジュール１３６は、一定時間待機した（Ｓ２０７）後、マスタ管理モジュール１３６にプロセッサ選定要求を再送する。
【０１０３】
マスタ管理モジュール１３６から受信した応答が送信先プロセッサ１３１を指定する場合（Ｓ２０６：ＹＥＳ）、スレーブ管理モジュール１３６は、指定されたプロセッサ１３１に対して管理指示を送信する（Ｓ２０８）。さらに、スレーブ管理モジュール１３６は、管理指示履歴テーブル３６８に、送信した管理指示のレコードを追加する（Ｓ２０９）。
【０１０４】
図１７は、プロセッサ１３１から管理指示に対する応答を受信したスレーブ管理モジュール１３６による処理のフローチャートを示す。ステップＳ２２１、Ｓ２２２、Ｓ２２４〜Ｓ２２６は、図９に示すフローチャートのステップＳ１４１〜Ｓ１４５と同様である。
【０１０５】
ステップＳ２２３において、スレーブ管理モジュール１３６は、マスタ管理モジュール１３６に、当該管理指示のレコードを管理指示履歴テーブル３６８から削除することを要求する。要求は、要求管理ＡＰＩ  ＩＤ及び送信管理指示ＩＤを示す。
【０１０６】
図１８は、マスタ管理モジュール１３６が、他の管理モジュール１３６から受信した送信先プロセッサ設定要求に対して、管理指示を送信するプロセッサを決定するフローチャートを示す。管理クライアント１５から受信した管理要求を１以上の管理指示に変換する処理は、図８のフローチャートを参照して説明した通りである。
【０１０７】
マスタ管理モジュール１３６（プロセッサ３６１又は管理プログラム３６９）は、他の管理モジュール１３６から送信先プロセッサの選定要求を受信する（Ｓ２４１）。マスタ管理モジュール１３６は、要求に応答して、管理指示を送信するプロセッサ１３１を決定する（Ｓ２４２）。送信先プロセッサの決定方法は、図８のフローチャートを参照して説明した通りである。
【０１０８】
管理指示を送信可能なプロセッサが存在しない場合（Ｓ２４３：ＮＯ）、マスタ管理モジュール１３６は、要求管理ＡＰＩ  ＩＤ、送信管理指示ＩＤ、及び送信先プロセッサが存在しないことを示す応答を、要求元スレーブ管理モジュール１３６に返す（Ｓ２４４）。
【０１０９】
管理指示を送信可能なプロセッサが存在する場合（Ｓ２４３：ＹＥＳ）、マスタ管理モジュール１３６は、管理指示履歴テーブル３６８に、当該管理指示のレコードを追加する（Ｓ２５）。マスタ管理モジュール１３６は、指示元管理モジュールＩＤカラム６８９に、プロセッサ選定要求の送信元スレーブ管理モジュールのＩＤを記録する。マスタ管理モジュール１３６は、送信時刻カラム６８７に、例えば、レコードを追加する時間を記録する。
【０１１０】
さらに、マスタ管理モジュール１３６は、要求管理ＡＰＩ  ＩＤ、送信管理指示ＩＤ、及び送信先プロセッサを示す応答を、要求元スレーブ管理モジュール１３６に返す（Ｓ２４６）。
【０１１１】
上述のように、マスタ管理モジュール１３６は、複数のスレーブ管理モジュール１３６に代わり、管理指示の送信先プロセッサを決定する。複数の管理モジュール１３６において、マスタ管理モジュール１３６が一元的に管理指示の送信先プロセッサを決定することで、管理指示バッファ３２３のオーバーフローを効果的に防ぐことができる。
【０１１２】
図１９は、マスタ管理モジュール１３６による、他管理モジュール１３６からの管理指示履歴削除要求に対する処理のフローチャートを示す。マスタ管理モジュール１３６（プロセッサ３６１又は管理プログラム３６９）は、他管理モジュール１３６から管理指示履歴削除要求を受信する（Ｓ２６１）。管理指示履歴削除要求は、要求管理ＡＰＩ  ＩＤ及び送信管理指示ＩＤを指定する。
【０１１３】
マスタ管理モジュール１３６は、指示元管理モジュールＩＤカラム６８９、要求管理ＡＰＩ  ＩＤカラム６８１、及び送信管理指示ＩＤカラム６８２の値が、管理指示履歴削除要求が示す値と一致するレコードを、管理指示履歴テーブル３６８から削除する。スレーブ管理モジュール１３６が実行済み管理指示の情報をマスタ管理モジュール１３６に送信することで、マスタ管理モジュール１３６が適時に管理指示履歴テーブル３６８を更新することができる。
【０１１４】
本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１１５】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。
【０１１６】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2019053587.tif 000003
【図２】
2019053587.tif 000004
【図３】
2019053587.tif 000005
【図４】
2019053587.tif 000006
【図５】
2019053587.tif 000007
【図６】
2019053587.tif 000008
【図７】
2019053587.tif 000009
【図８】
2019053587.tif 000010
【図９】
2019053587.tif 000011
【図１０】
2019053587.tif 000012
【図１１】
2019053587.tif 000013
【図１２】
2019053587.tif 000014
【図１３】
2019053587.tif 000015
【図１４】
2019053587.tif 000016
【図１５】
2019053587.tif 000017
【図１６】
2019053587.tif 000018
【図１７】
2019053587.tif 000019
【図１８】
2019053587.tif 000020
【図１９】
2019053587.tif 000021
【手続補正書】
【提出日】平成31年1月9日(2019.1.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
管理プロセッサと、
通信路を介して互いに通信する複数のストレージノードと、を含み、
前記複数のストレージノードは、複数の主プロセッサとメモリとを含み、
前記複数のストレージノードのメモリは、前記複数のストレージノード間で同期される共有情報を格納し、
前記複数のストレージノードは、一つのマスタ属性のストレージノードと、１以上のスレーブ属性のストレージノードと、で構成され、
前記マスタ属性のストレージノードのメモリに格納されている前記共有情報が更新された後に、前記１以上のスレーブ属性のストレージノードは、前記１以上のスレーブ属性のストレージノードそれぞれのメモリに格納されている前記共有情報を更新し、
前記複数の主プロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、
前記管理プロセッサは、
１以上の管理指示種別に対して、前記マスタ属性及び前記スレーブ属性それぞれに応じた想定処理時間を示す管理指示種別情報を参照して、前記マスタ属性のストレージノードの主プロセッサに対して前記マスタ属性に応じた想定処理時間を選択し、前記スレーブ属性のストレージノードの主プロセッサに対して前記スレーブ属性に応じた想定処理時間を選択して、前記複数の主プロセッサそれぞれの未完了の管理指示の想定処理時間を決定し、
前記複数の主プロセッサそれぞれについて、未完了の管理指示の想定処理時間の総和を計算し、
前記複数の主プロセッサそれぞれの前記総和に基づいて、次の管理指示を送信する送信先主プロセッサを前記複数の主プロセッサから選択し、
前記送信先主プロセッサに対して前記次の管理指示を送信する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記複数の主プロセッサが実行すべき管理指示を一時的に格納するバッファをさらに含み、
前記複数の主プロセッサは、それぞれ、前記バッファから、自装置宛の管理指示を順次取得して実行する、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記管理プロセッサは、
前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを管理し、
未完了の管理指示と前記次の管理指示との和が割り当てられているバッファサイズを超える主プロセッサを、前記送信先主プロセッサの候補から除外する、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記管理プロセッサを含む複数の管理プロセッサを含み、
前記複数の管理プロセッサそれぞれは、個別に、前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを管理し、
前記複数の管理プロセッサにおける第１管理プロセッサは、前記第１管理プロセッサが管理している前記複数の主プロセッサそれぞれに割り当てられている管理指示のためのバッファサイズを変更する、ストレージシステム。
【請求項５】
管理プロセッサと、通信路を介して互いに通信する複数のストレージノードとを含むストレージシステムにおいて、複数のプロセッサに管理指示を発行する方法であって、
前記複数のストレージノードは、複数の主プロセッサとメモリとを含み、
前記複数のストレージノードのメモリは、前記複数のストレージノード間で同期される共有情報を格納し、
前記複数のストレージノードは、一つのマスタ属性のストレージノードと、１以上のスレーブ属性のストレージノードと、で構成され、
前記マスタ属性のストレージノードのメモリに格納されている前記共有情報が更新された後に、前記１以上のスレーブ属性のストレージノードは、前記１以上のスレーブ属性のストレージノードそれぞれのメモリに格納されている前記共有情報を更新し、
前記複数の主プロセッサは、それぞれ、ホストからのＩ／Ｏ要求に応じたＩ／Ｏ処理を含む主機能処理を実行する期間と、管理指示を実行する期間とを、交互に切り替え、
前記方法は、
前記管理プロセッサが、１以上の管理指示種別に対して、前記マスタ属性及び前記スレーブ属性それぞれに応じた想定処理時間を示す管理指示種別情報を参照して、前記マスタ属性のストレージノードの主プロセッサに対して前記マスタ属性に応じた想定処理時間を選択し、前記スレーブ属性のストレージノードの主プロセッサに対して前記スレーブ属性に応じた想定処理時間を選択して、前記複数の主プロセッサそれぞれの未完了の管理指示の想定処理時間を決定し、
前記管理プロセッサが、前記複数の主プロセッサそれぞれについて、未完了の管理指示の想定処理時間の総和を計算し、
前記管理プロセッサが、前記複数の主プロセッサそれぞれの前記総和に基づいて、次の管理指示を送信する送信先主プロセッサを前記複数の主プロセッサから選択し、
前記送信先主プロセッサに対して前記次の管理指示を送信する、方法。