(57)【要約】【課題】構成管理処理のレスポンス性能を向上させる。【解決手段】ストレージ装置１０は、リクエストを処理する複数のプロセッサをそれぞれ有する複数のコントローラと、コントローラに接続された記憶装置とを有する複数のコントローラを統括する統合部と、複数のコントローラの各プロセッサからアクセス可能であり、プロセッサ毎の負荷情報を含むストレージ装置の構成情報を格納する共有メモリと、を有する。統合部は、管理装置から受付けた構成管理リクエストのリクエスト種別及び対象リソース種別から構成管理リクエストの推定処理時間を算出し、共有メモリから取得したプロセッサ毎の負荷情報と推定処理時間とに基づいて、構成管理リクエストを複数の分散リクエストに分散し、複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定し、分散先プロセッサを指定して分散先プロセッサを有するコントローラに分散リクエストのそれぞれを送信する。【選択図】図１７
2020095550.tif 000002
【特許請求の範囲】
【請求項１】
リクエストを処理する複数のプロセッサをそれぞれ有する複数のコントローラと、前記コントローラに接続された記憶装置とを有するストレージ装置であって、
前記複数のコントローラを統括する統合部と、
前記複数のコントローラの各プロセッサからアクセス可能であり、前記プロセッサ毎の負荷情報を含む前記ストレージ装置の構成情報を格納する共有メモリと、を有し、
前記統合部は、
管理装置から受付けた構成管理リクエストのリクエスト種別及び対象リソース種別から該構成管理リクエストの推定処理時間を算出し、
前記共有メモリから取得した前記プロセッサ毎の負荷情報と前記推定処理時間とに基づいて、前記構成管理リクエストを複数の分散リクエストに分散し、該複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定し、該分散先プロセッサを指定して該分散先プロセッサを有する前記コントローラに前記分散リクエストのそれぞれを送信し、
前記コントローラは、
前記分散リクエストを受信すると、指定されたプロセッサで前記分散リクエストを処理する
ことを特徴とするストレージ装置。
【請求項２】
前記統合部は、
リクエスト種別毎かつ対象リソース種別毎の単位データ数又は所定データ量あたりの構成管理リクエストの処理時間を予め測定しておき、前記管理装置から受付けた構成管理リクエストの要求データ数又はデータ量に、予め測定した該処理時間を乗じることで、前記推定処理時間を算出する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記統合部は、
前記推定処理時間に基づいて、前記構成管理リクエストを分散する分散リクエストの数を決定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記統合部は、
前記プロセッサ毎の負荷情報から該プロセッサ毎の優先度を予め算出しておき、該優先度に応じて前記分散先プロセッサを決定する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項５】
前記共有メモリは、前記対象リソース種別毎の構成情報及び該構成情報の世代情報を格納し、
前記コントローラは、
前記分散リクエストを処理した際、該分散リクエストの対象リソース種別の前記世代情報を前記共有メモリから取得して前記統合部に該分散リクエストの処理結果と共に送信し、
前記統合部は、
全ての前記分散リクエストの処理結果及び前記世代情報を受信すると、全ての該世代情報が一致する場合には全ての該分散リクエストの処理結果を統合して前記管理装置に送信し、該世代情報が一致しない場合には最新でない前記世代情報の分散リクエストを該分散リクエストの分散先プロセッサを有する前記コントローラに再送する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記負荷情報は、前記プロセッサ毎の稼働率、及び、キャッシュ領域に一時格納されている前記プロセッサ毎の前記記憶装置への書き込み待ちのデータ量である
ことを特徴とする請求項１に記載のストレージ装置。
【請求項７】
前記統合部は、
前記推定処理時間と前記負荷情報とに基づいて前記構成管理リクエストを分散リクエストに分散して処理した場合の処理時間が目標処理時間を超えるか否かを判定し、処理時間が目標処理時間を超える場合に、前記共有メモリから取得した前記プロセッサ毎の負荷情報のうち、前記プロセッサ毎の稼働率よりも、前記プロセッサ毎の前記記憶装置への書き込み待ちのデータ量の影響度を高くして、該負荷情報と前記推定処理時間とに基づいて前記構成管理リクエストを複数の分散リクエストに分散し、該複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定する
ことを特徴とする請求項６に記載のストレージ装置。
【請求項８】
前記複数のコントローラのそれぞれが前記統合部を有し、
何れか１つの前記コントローラの前記統合部が前記複数のコントローラを統括し、他の前記コントローラの前記統合部が待機状態となり、
前記複数のコントローラを統括する前記コントローラに障害が発生した場合に、待機状態の前記統合部のうちの何れか１つが前記複数のコントローラを統括するように切り替える
ことを特徴とする請求項１に記載のストレージ装置。
【請求項９】
前記統合部は、
全ての前記プロセッサ毎の負荷情報が閾値を超える場合に、前記構成管理リクエストを分散リクエストに分散せず、全ての前記プロセッサのうち最も負荷が低いプロセッサを指定して該プロセッサを有する前記コントローラに前記構成管理リクエストを送信する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項１０】
リクエストを処理する複数のプロセッサをそれぞれ有する複数のコントローラと、前記コントローラに接続された記憶装置とを有するストレージ装置における構成管理リクエストの処理方法であって、
前記ストレージ装置は、
前記複数のコントローラを統括する統合部と、
前記複数のコントローラの各プロセッサからアクセス可能であり、前記プロセッサ毎の負荷情報を含む前記ストレージ装置の構成情報を格納する共有メモリと、を有し、
前記統合部が、
管理装置から受付けた構成管理リクエストのリクエスト種別及び対象リソース種別から該構成管理リクエストの推定処理時間を算出し、
前記共有メモリから取得した前記プロセッサ毎の負荷情報と前記推定処理時間とに基づいて、前記構成管理リクエストを複数の分散リクエストに分散し、該複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定し、該分散先プロセッサを指定して該分散先プロセッサを有する前記コントローラに前記分散リクエストのそれぞれを送信し、
前記コントローラが、
前記分散リクエストを受信すると、指定されたプロセッサで前記分散リクエストを処理する
ことを特徴とするストレージ装置における構成管理リクエストの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置における構成管理リクエストの処理方法に関し、例えば、複数のプロセッサをそれぞれ有する複数のコントローラにリクエスト処理を分散処理させるストレージ装置に適用して好適なるものである。
【背景技術】
【０００２】
従来、ストレージ装置では、ホストからのＩ／Ｏリクエストに応じてＩ／Ｏ処理を行うコントローラが、管理端末から入力された構成管理リクエストに応じてボリューム作成やボリューム削除等を行うことで、管理サーバ不要で構成管理処理を行い得るようになされている。また、コントローラが、複数のプロセッサを有し、１リクエスト毎に１プロセッサで分散並列処理を行うことで、複数のリクエストの処理を高速に行い得るようになされている。
【０００３】
例えば特許文献１には、コントローラが有する複数のプロセッサコアのうちの一部のプロセッサコアを優先処理専用として設定することで、複数のリクエストの分散処理を図り、Ｉ／Ｏ処理を遅延させず優先処理を達成するストレージシステムが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５９０９５６６号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、ストレージ装置がクラウド運用されるようになってきており、ストレージ装置の稼働中であっても、エンドユーザの要求に応じて構成管理処理が頻繁に行われることから、構成管理処理もレスポンス性能の向上が求められてきている。
【０００６】
しかしながら、特許文献１に記載の技術では、それぞれのプロセッサコアが処理する処理内容が予め決められており、状況に応じてプロセッサコアを適宜選択してリクエストの分散処理を行うものではない。このため、例えば、構成管理のリクエストデータやレスポンスデータが大きいといった状況や、構成管理処理よりも優先処理されるＩ／Ｏ処理の処理負荷が高いといった状況において、構成管理処理の遅延が発生し、構成管理処理のレスポンス性能が低下するという課題がある。
【０００７】
本発明は以上の点を考慮してなされたもので、構成管理処理のレスポンス性能を向上し得るストレージ装置及びストレージ装置における構成管理リクエストの処理方法を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明においては、リクエストを処理する複数のプロセッサをそれぞれ有する複数のコントローラと、前記コントローラに接続された記憶装置とを有するストレージ装置であって、前記複数のコントローラを統括する統合部と、前記複数のコントローラの各プロセッサからアクセス可能であり、前記プロセッサ毎の負荷情報を含む前記ストレージ装置の構成情報を格納する共有メモリと、を有し、前記統合部は、管理装置から受付けた構成管理リクエストのリクエスト種別及び対象リソース種別から該構成管理リクエストの推定処理時間を算出し、前記共有メモリから取得した前記プロセッサ毎の負荷情報と前記推定処理時間とに基づいて、前記構成管理リクエストを複数の分散リクエストに分散し、該複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定し、該分散先プロセッサを指定して該分散先プロセッサを有する前記コントローラに前記分散リクエストのそれぞれを送信し、前記コントローラは、前記分散リクエストを受信すると、指定されたプロセッサで前記分散リクエストを処理するようにした。
【０００９】
また本発明においては、リクエストを処理する複数のプロセッサをそれぞれ有する複数のコントローラと、前記コントローラに接続された記憶装置とを有するストレージ装置における構成管理リクエストの処理方法であって、前記ストレージ装置は、前記複数のコントローラを統括する統合部と、前記複数のコントローラの各プロセッサからアクセス可能であり、前記プロセッサ毎の負荷情報を含む前記ストレージ装置の構成情報を格納する共有メモリと、を有し、前記統合部が、管理装置から受付けた構成管理リクエストのリクエスト種別及び対象リソース種別から該構成管理リクエストの推定処理時間を算出し、前記共有メモリから取得した前記プロセッサ毎の負荷情報と前記推定処理時間とに基づいて、前記構成管理リクエストを複数の分散リクエストに分散し、該複数の分散リクエストのそれぞれを処理する分散先プロセッサを決定し、該分散先プロセッサを指定して該分散先プロセッサを有する前記コントローラに前記分散リクエストのそれぞれを送信し、前記コントローラが、前記分散リクエストを受信すると、指定されたプロセッサで前記分散リクエストを処理するようにした。
【００１０】
本ストレージ装置及びストレージ装置における構成管理リクエストの処理方法によれば、構成管理処理とＩ／Ｏ処理との性能干渉を軽減しつつ、構成管理処理の処理速度の低下を抑制できる。
【発明の効果】
【００１１】
本発明によれば、構成管理処理のレスポンス性能を向上し得るストレージ装置及びストレージ装置における構成管理リクエストの処理方法を実現できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のストレージ装置の構成例を示す図。
【図２】第１の実施の形態のストレージ装置の管理ソフトウェア統合部の構成例を示す図。
【図３】搭載ドライブテーブルの構成例を示す図。
【図４】コントローラテーブルの構成例を示す図。
【図５】レスポンス速度テーブルの構成例を示す図。
【図６】受付リクエストテーブルの構成例を示す図。
【図７】分散リクエストテーブルの構成例を示す図。
【図８】第１の実施の形態のストレージ装置のコントローラの構成例を示す図。
【図９】第１の実施の形態のストレージ装置の共有メモリに格納される情報例を示す図。
【図１０】Volume構成情報テーブルの構成例を示す図。
【図１１】Pool構成情報テーブルの構成例を示す図。
【図１２】HostGroup構成情報テーブルの構成例を示す図。
【図１３】CopyGroup構成情報テーブルの構成例を示す図。
【図１４】世代情報テーブルの構成例を示す図。
【図１５】リクエスト分散送受信プログラムの起動時処理を示すフローチャート。
【図１６】リクエスト分散送受信プログラムのプロセッサ稼働率及びWritePending情報受信時処理を示すフローチャート。
【図１７】リクエスト分散送受信プログラムのリクエスト受付時処理を示すフローチャート。
【図１８】受付リクエスト及び分散リクエストの管理方法を説明するための図。
【図１９】世代情報の不一致例を説明するための図。
【図２０】世代情報の不一致例を説明するための図。
【図２１】リクエスト処理プログラムのリクエスト処理を示すフローチャート。
【図２２】プロセッサ稼働率及びWritePending情報送信処理を示すフローチャート。
【図２３】第２の実施の形態のストレージ装置の構成例を示す図。
【図２４】第３の実施の形態のリクエスト分散送受信プログラムのプロセッサ稼働率及びWritePending情報受信時処理を示すフローチャート。
【発明を実施するための形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を詳述する。以下の実施の形態は、本発明を限定するものではなく、また実施の形態で説明されている要素及びその組合せの全てが本発明の解決手段に必須であるとは限らない。また以下の実施の形態を説明するための各図面において同一の符号は同一あるいは類似の機能を備えた構成要素又は処理を示し、後出の説明を省略する。また各実施の形態及び各変形例は、本発明の技術思想の範囲内かつ整合する範囲内で一部又は全部を組合せることができる。
【００１４】
以下の説明では、「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａテーブル」を「ａａａ情報」と呼ぶこともできる。「ａａａテーブル」又は「ａａａ情報」は、記憶資源（例えばメモリ）に確保された記憶領域に格納される。
【００１５】
また、以下の説明では、「プログラム」を主語として処理フローを説明する場合がある。プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、予め定められた処理を、記憶資源（例えばメモリ）及び通信インターフェースのうちの少なくとも１つを適宜に使用しながら行う。例えば「ｘｘｘプログラム」のように説明又は図示される要素は、プロセッサが、記憶資源又は通信インターフェースを使用し、プログラムソースを解析実行することで、予め定められた処理を実行する処理部である。このため、プログラムによる処理の主語が、プロセッサ、もしくはそのプロセッサを有する装置とされてもよい。
【００１６】
また、プロセッサが実行する処理の一部又は全部は、ハードウェア回路により処理されてもよい。プロセッサが実行する処理を規定するプログラムは、例えば外部装置からネットワークを介して取得して、あるいは記憶メディアを介して取得して、プロセッサにより実行されるものとしてもよい。
【００１７】
また、以下の説明では、同種の要素を区別して説明する場合には、「ｘｘｘ１０ａ」、「ｘｘｘ１０ｎ」、「ｘｘｘ１１Ｂａ」、「ｘｘｘ１１Ｂｎ」、「ｘｘｘ１２−１」、「ｘｘｘ１２−ｎ」のように枝番号を付加した参照符号を使用する。同種の要素を区別しないで説明する場合には、「ｘｘｘ１０」、「ｘｘｘ１１Ｂ」、「ｘｘｘ１２」のように参照符号のうちの共通部分のみを使用することがある。
【００１８】
（１）第１の実施の形態
（１−１）第１の実施の形態によるストレージ装置の構成
図１は、第１の実施の形態のストレージ装置の構成例を示す図である。第１の実施の形態のストレージ装置１０は、接続装置１と、ｎ個（２は２以上の整数）のコントローラ２−１，…，２−ｎと、ｎ個の記憶装置３−１，…，３−ｎと、ＣＨＡ（チャネルアダプタ）５とを有する。
【００１９】
接続装置１は、ストレージ装置１０が管理端末２０と接続するための通信インターフェースである。接続装置１は、管理ソフトウェア統合部１１を有する。
【００２０】
コントローラ２は、管理ソフトウェア処理部２１と、複数のプロセッサ２２とを有する。また、ストレージコントローラであるコントローラ２−ｉ（ｉ＝１，…，ｎ）には、記憶装置３−ｉが接続されている。
【００２１】
管理ソフトウェア統合部１１は、ストレージ装置１０の構成情報、負荷情報、及び管理端末２０から入力された構成管理リクエストの内容に基づいて、構成管理処理を分散処理する最適なコントローラ２のプロセッサ２２を決定する。管理ソフトウェア統合部１１は、決定したプロセッサ２２のコントローラ２に、構成管理処理を実行するプロセッサ２２を指定して、構成管理リクエストを分割した分散リクエストを送信する。
【００２２】
コントローラ２は、管理ソフトウェア統合部１１から受信した分散リクエストを、指定されたプロセッサ２２で、記憶装置３及び共有メモリ４にアクセスすることで実行し、その実行結果を管理ソフトウェア統合部１１に返却する。複数のコントローラ２−１，…,２−ｎは、同一の構成であり、１つの管理ソフトウェア統合部１１に対して同様の処理を行う。
【００２３】
記憶装置３のそれぞれは、１又は複数のドライブ装置から構成されている。記憶装置３のそれぞれは、ドライブインターフェース（不図示）を介してプロセッサ２２からアクセスされる。ドライブ装置は、磁気ディスク等の記憶媒体を用いたＨＤＤ（Hard  Disk  Drive）やフラッシュメモリ等の記憶媒体を用いたＳＳＤ（Solid  State  Drive）等である。
【００２４】
共有メモリ４は、コントローラ２で共有されるメモリであり、何れのコントローラ２のプロセッサ２２からもアクセス可能なＲＡＭ（Random  Access  Memory）である。プロセッサ２２は、構成管理リクエスト及びＩ／Ｏリクエストのリクエスト処理に際して共有メモリ４にアクセスし、共有メモリ４内に保持される情報を取得又は更新する。
【００２５】
また、共有メモリ４は、図９〜図１５を参照して後述するように、ストレージ装置１０の各種構成情報テーブルと、各構成情報テーブルに登録されている構成情報の世代情報を保持している世代情報テーブルとを格納している。世代情報については後述する。また、共有メモリ４は、業務ホスト３０からのＩ／Ｏリクエストに応じて、記憶装置３に書き込むライトデータや、記憶装置３から読み出したリードデータを一時的に格納するキャッシュ領域を含む。このキャッシュ領域は、プロセッサ２２毎に確保されている。
【００２６】
ＣＨＡ１５は、ストレージ装置１０が業務ホスト３０と接続するための通信インターフェースである。業務ホスト３０から入力されたＩ／Ｏリクエストは、指定されたプロセッサ２２に送信される。指定されたプロセッサ２２は、共有メモリ４のキャッシュ領域を使用しながら記憶装置３に対してＩ／Ｏ処理を実行し、そのＩ／Ｏ処理の実行結果を業務ホスト３０に返却する。
【００２７】
（１−２）第１の実施の形態による管理ソフトウェア統合部の構成
図２は、第１の実施の形態のストレージ装置の管理ソフトウェア統合部の構成例を示す図である。管理ソフトウェア統合部１１は、リクエスト分散送受信プログラム１１１と、搭載ドライブテーブル１２１と、コントローラテーブル１２２と、レスポンス速度テーブル１２３と、受付リクエストテーブル１２４と、分散リクエストテーブル１２５とを有する。
【００２８】
リクエスト分散送受信プログラム１１１は、構成管理リクエストの受付け、コントローラ２への構成管理リクエストの分散方法の決定、管理ソフトウェア処理部２１への構成管理リクエストを分割した「分散リクエスト」の送信、及び管理ソフトウェア処理部２１からの分散リクエストに応じた構成管理処理の実行結果の受信や結合を行う。
【００２９】
図３は、搭載ドライブテーブルの構成例を示す図である。搭載ドライブテーブル１２１は、記憶装置３のそれぞれを構成するドライブ装置を管理するためのテーブルである。搭載ドライブテーブル１２１のレコードは、フィールド値として、ドライブＩＤ１２１１と、ドライブ種別１２１２と、接続先コントローラＩＤ１２１３と、プロセッサ負荷重み１２１４とを含む。
【００３０】
図３の例では、ドライブＩＤ１２１１が“１−１”のドライブ装置のドライブ種別１２１２は“ＳＡＳ”であり、当該ドライブが接続されているコントローラ２の接続先コントローラＩＤ１２１３は“コントローラＡ”である。また、例えば、ドライブＩＤ１２１１が“３−１”及び“３−２”のドライブ装置のドライブ種別１２１２は“ＮＶＭｅ”であり、当該ドライブが接続されているコントローラ２の接続先コントローラＩＤ１２１３は“コントローラＣ”である。ドライブＩＤ１２１１が“３−１”及び“３−２”のドライブは、同一のコントローラ２に接続されている記憶装置３を構成する複数のドライブである。
【００３１】
プロセッサ負荷重み１２１４は、ドライブ種別１２１２に応じて予め定められている。例えば、ドライブ種別１２１２が“ＳＡＳ”である場合にはプロセッサ負荷重み１２１４が“１”であり、ドライブ種別１２１２が“ＮＶＭｅ”である場合には、書き込みを行う際の負荷がＳＡＳよりも高いため、プロセッサ負荷重み１２１４が“２”と、ＳＡＳよりも大きい値である。
【００３２】
図４は、コントローラテーブルの構成例を示す図である。コントローラテーブル１２２は、コントローラ２の構成及びプロセッサ毎の負荷状況を管理するためのテーブルである。コントローラテーブル１２２のレコードは、フィールド値として、プロセッサＩＤ１２２１と、コントローラＩＤ１２２２と、プロセッサ状態１２２３と、プロセッサ稼働率１２２４と、WritePending情報１２２５と、分散処理重み１２２６と、優先度１２２７とを含む。
【００３３】
プロセッサＩＤ１２２１及びコントローラＩＤ１２２２は、コントローラ２を構成するプロセッサ２２を示す情報である。図４の例では、コントローラＩＤ１２２２が“コントローラＡ”であるコントローラ２には、プロセッサＩＤ１２２１が“Ａ−１”のプロセッサ２２が搭載されおり、また、コントローラＩＤ１２２２が“コントローラＣ”であるコントローラ２には、プロセッサＩＤ１２２１が“Ｃ−１”及び“Ｃ−２”のプロセッサ２２が搭載されていることを示す。
【００３４】
プロセッサ状態１２２３は、プロセッサＩＤ１２２１で識別されるプロセッサ２２が、正常動作中である場合を“Normal”で示し、正常動作中でない場合を“Failed”で示す情報である。
【００３５】
プロセッサ稼働率１２２４、WritePending情報１２２５、分散処理重み１２２６、及び優先度１２２７は、リクエスト分散送受信プログラム１１１がコントローラ２から受信した各プロセッサ２２のプロセッサ稼働率及びWritePending情報に基づく情報であり、後述のようにリクエスト分散送受信プログラム１１１により更新される情報である。
【００３６】
プロセッサ稼働率１２２４は、当該プロセッサ２２の使用率である。WritePending情報１２２５は、当該プロセッサ２２による記憶装置３への書き込み待ちで共有メモリ４内のキャッシュ領域に格納されているデータ量を示す情報である。分散処理重み１２２６は、後述の（１）式に基づき算出される情報である。優先度１２２７は、コントローラテーブル１２２内で分散処理重み１２２６の降順で各プロセッサに付けた優先順位を表す情報である。
【００３７】
なお、プロセッサ２２のプロセッサ状態１２２３が“Failed”である場合、当該プロセッサ２２は正常動作中ではないため、図１６を参照して後述するリクエスト分散送受信プログラムのプロセッサ稼働率及びWritePending情報受信時処理において、プロセッサ稼働率１２２４、WritePending情報１２２５、分散処理重み１２２６、及び優先度１２２７に、“１００％”、“０ＭＢ”、“０”、及び“０”がそれぞれ登録される。
【００３８】
図５は、レスポンス速度テーブルの構成例を示す図である。レスポンス速度テーブル１２３は、構成管理のリクエスト種別毎かつ対象のリソース種別毎のリクエスト処理の応答速度を管理するためのテーブルである。レスポンス速度テーブル１２３のレコードは、フィールド値として、レスポンス速度ＩＤ１２３１と、リクエスト種別１２３２と、リソース種別１２３３と、リソース１個あたりのレスポンス時間１２３４とを含む。構成管理リクエストのリクエスト種別１２３２には、図５に図示の“GET”（構成情報取得）の他、“POST”等がある。また、リソース種別１２３３には、図５に図示の“Volume”、“Pool”、“Drive”、“User”の他、“HostGroup”、“ParityGroup”等がある。
【００３９】
構成管理リクエスト毎に構成管理の処理内容が異なり、また、構成管理リクエストの対象リソース毎に定義されている構成情報や対象リソース数が異なることから、構成管理リクエストに対するレスポンス時間も異なる。このため、リクエスト種別毎かつリソース種別毎に、構成管理リクエストのリクエスト処理のリソース１個あたりのレスポンス時間を管理する。
【００４０】
図５の例では、レスポンス速度ＩＤ１２３１が“１”である、リクエスト種別１２３２が“ＧＥＴ（構成情報取得）”かつリソース種別１２３３が“Volume”のリソース１個あたりのレスポンス時間１２３４は、“２ミリ秒”であることを示す。
【００４１】
図６は、受付リクエストテーブルの構成例を示す図である。受付リクエストテーブル１２４は、リクエスト種別及び対象リソースを指定して管理端末２０から受付けた構成管理リクエスト毎に、リクエスト分散送受信プログラム１１１で決定した分散数及び対象リソース数を管理するためのテーブルである。受付リクエストテーブル１２４のレコードは、フィールド値として、受付リクエストＩＤ１２４１と、分散数１２４２と、リクエスト種別１２４３と、対象リソース１２４４と、対象リソース数１２４５とを含む。
【００４２】
図７は、分散リクエストテーブルの構成例を示す図である。分散リクエストテーブル１２５は、受付リクエストテーブル１２４で管理される受付リクエストと、リクエスト分散送受信プログラム１１１で決定された分散方法で分散処理する際の分散リクエストとを対応付けて管理するためのテーブルである。さらに、分散リクエストテーブル１２５は、それぞれの分散リクエストの処理プロセッサ、分散リクエストの対象リソース数、及び分散リクエストの処理結果の世代情報を管理するためのテーブルである。
【００４３】
分散リクエストテーブル１２５のレコードは、フィールド値として、分散リクエストＩＤ１２５１と、受付リクエストＩＤ１２５２と、処理プロセッサ１２５３と、対象リソース数１２５４と、世代情報１２５５とを含む。
【００４４】
図６及び図７を参照して、受付リクエストテーブル１２４と分散リクエストテーブル１２５との関係について具体例を挙げて説明する。
【００４５】
受付リクエストテーブル１２４の受付リクエストＩＤ１２４１が“１”のリクエストは、分散数１２４２が“２”、リクエスト種別１２４３が“ＧＥＴ”、対象リソース１２４４が“Volume”、対象リソース数１２４５が“２５００”の構成管理リクエストである。
【００４６】
受付リクエストＩＤ１２４１が“１”の構成管理リクエストは、分散リクエストＩＤ１２５１が“１”及び“２”の２つの分散リクエストに分散されて分散リクエストテーブル１２５に登録される。そして、分散リクエストテーブル１２５の受付リクエストＩＤ１２５２と、受付リクエストテーブル１２４の受付リクエストＩＤ１２４１とが対応付けられる。
【００４７】
また、分散リクエストＩＤ１２５１が“１”の分散リクエストは処理プロセッサ１２５３が“Ｂ−１”であり、分散リクエストＩＤ１２５１が“２”の分散リクエストは処理プロセッサ１２５３が“Ａ−１”である。図４から、プロセッサＩＤ１２２１が“Ａ−１”の処理プロセッサは“コントローラＡ”のプロセッサ２２であり、プロセッサＩＤ１２２１が“Ｂ−１”の処理プロセッサは“コントローラＢ”のプロセッサ２２である。
【００４８】
（１−３）第１の実施の形態によるコントローラの構成
図８は、第１の実施の形態のストレージ装置のコントローラの構成例を示す図である。以下、コントローラ２について説明するが、コントローラ２−１，…，２−ｎはすべて同様である。
【００４９】
コントローラ２は、管理ソフトウェア処理部２１と、複数のプロセッサ２２と、ストレージ構成管理プログラム２３と、共有メモリ４とを有する。
【００５０】
管理ソフトウェア処理部２１は、リクエスト処理プログラム２１１と、プロセッサ稼働率及びWritePending情報送信プログラム２１２とを有する。
【００５１】
リクエスト処理プログラム２１１は、管理ソフトウェア統合部１１のリクエスト分散送受信プログラム１１１から受付けた分散リクエストの処理を実行する。
【００５２】
プロセッサ稼働率及びWritePending情報送信プログラム２１２は、当該コントローラ２が有する複数のプロセッサ２２毎のプロセッサ稼働率、及び、当該コントローラ２に接続されている記憶装置３への書き込み待ちのデータ量（WritePending情報）を、リクエスト分散送受信プログラム１１１に定期的に送信する。プロセッサ稼働率及びWritePending情報は、共有メモリ４に保存されており、ストレージ構成管理プログラム２３により定期的に最新の情報に更新される。
【００５３】
ストレージ構成管理プログラム２３は、ストレージ装置１０の構成情報及び負荷情報を管理する。ストレージ構成管理プログラム２３は、ストレージ装置１０の構成及び負荷の状況を監視し、定期的に最新の構成情報及び負荷情報を共有メモリ４内のストレージ構成情報テーブル（不図示）に保存する。
【００５４】
ストレージ装置１０の構成情報には、ストレージ装置１０が有するドライブ装置のドライブＩＤと、当該ドライブ装置のドライブ種別と、当該ドライブ装置の接続先のコントローラ２のコントローラＩＤとを対応付けた「ドライブ情報」が含まれる。
【００５５】
また、ストレージ装置１０の構成情報には、ストレージ装置１０が有するプロセッサ２２のプロセッサＩＤと、当該プロセッサ２２が接続されているコントローラ２のコントローラＩＤと、当該プロセッサ２２のプロセッサ状態とを対応付けた「コントローラ情報」が含まれる。
【００５６】
また、ストレージ装置１０の負荷情報には、プロセッサ２２毎の「プロセッサ稼働率及びWritePending情報」が含まれる。
【００５７】
ストレージ構成管理プログラム２３は、「ドライブ情報」、「コントローラ情報」、及び「プロセッサ稼働率及びWritePending情報」を共有メモリ４のストレージ構成情報テーブル（不図示）に保存し、定期的に更新する。
【００５８】
（１−４）第１の実施の形態による共有メモリに格納される情報
図９は、第１の実施の形態のストレージ装置の共有メモリに格納される情報例を示す図である。共有メモリ４には、例えばVolume構成情報テーブル４１、Pool構成情報テーブル４２、HostGroup構成情報テーブル４３、及びCopyGroup構成情報テーブル４４を含む各種構成情報テーブルと、世代情報テーブル４５とが格納されている。
【００５９】
（１−５）Volume構成情報テーブルの構成
図１０は、Volume構成情報テーブルの構成例を示す図である。Volume構成情報テーブル４１は、Volume毎にその構成情報を管理するためのテーブルである。Volume構成情報テーブル４１のレコードは、フィールド値として、VolumeＩＤ４１１と、ClprＩＤ４１２と、Status４１３と、ByteFormatCapacty４１４とを含む。
【００６０】
VolumeＩＤ４１１は、Volumeを識別するための番号である。ClprＩＤ４１２は、当該Volumeに割当てられているメモリのキャッシュ領域の論理的な分割数を示す。Status４１３は当該Volumeの状態を示す。Status４１３では、“NORMAL”で当該Volumeが正常な状態であることを示し、“BLOCKED”で当該Volumeがアクセス不可の状態であることを示し、“BUSY”で当該Volumeのアクセス負荷が所定以上の高い状態であることを示す。ByteFormatCapacty４１４は、当該Volumeの容量を示す。
【００６１】
（１−６）Pool構成情報テーブルの構成
図１１は、Pool構成情報テーブルの構成例を示す図である。Pool構成情報テーブル４２は、Pool毎にその構成情報を管理するためのテーブルである。Pool構成情報テーブル４２のレコードは、フィールド値として、PoolＩＤ４２１と、VolumeCapacity４２２と、UsedCapacityRate４２３と、NumOfLdevs４２４とを含む。
【００６２】
PoolＩＤ４２１は、Poolを識別するための番号である。VolumeCapacity４２２は、当該Poolの容量を示す。UsedCapacityRate４１３は、当該Poolの容量の使用率を示す。ＮumOfLdevs４２４は、当該Pool内の論理デバイス（論理ドライブ）の数を示す。
【００６３】
（１−７）HostGroup構成情報テーブルの構成
図１２は、HostGroup構成情報テーブルの構成例を示す図である。HostGroup構成情報テーブル４３は、HostGroup毎にその構成情報を管理するためのテーブルである。HostGroup構成情報テーブル４３のレコードは、フィールド値として、HostGroupＩＤ４３１と、HostGroupName４３２と、HostMode４３３と、iSCSIName４２４とを含む。
【００６４】
HostGroupＩＤ４３１は、HostGroupを識別するための番号である。HostGroupName４３２は、当該HostGroupを識別するための名称を示す。HostMode４３３は、当該HostGroupのＯＳ（Operating  System）の種別を示す。iSCSIName４２４は、当該HostGroupのｉＳＣＳＩノードを識別するための名称を示す。
【００６５】
（１−８）CopyGroup構成情報テーブルの構成
図１３は、CopyGroup構成情報テーブルの構成例を示す図である。CopyGroup構成情報テーブル４４は、CopyGroup毎にその構成情報を管理するためのテーブルである。CopyGroup構成情報テーブル４４のレコードは、フィールド値として、CopyGroupＩＤ４４１と、PvolDeviceGroupName４４２と、SvolDeviceGroupName４４３と、PvolMuNumber４４４とを含む。
【００６６】
CopyGroupＩＤ４４１は、CopyGroupを識別するための番号である。PvolDeviceGroupName４４２は、当該CopyGroupのコピー元デバイスグループを識別するための名称を示す。SvolDeviceGroupName４４３は、当該CopyGroupのコピー先デバイスグループを識別するための名称を示す。PvolMuNumber４４４は、当該CopyGroupに一意に割り当てられるＣＰＵ等の物理資源を識別するための情報を示す。
【００６７】
（１−９）世代情報テーブルの構成
図１４は、世代情報テーブルの構成例を示す図である。世代情報テーブル４５は、リソース種別毎に構成情報の世代情報を管理するためのテーブルである。世代情報テーブル４５のレコードは、フィールド値として、リソース種別４５１と、世代情報４５２とを含む。世代情報４５２は、当該リソース種別のリソースに対する１回の構成変更につき１インクリメントされる数値であり、数値が大きいほど当該リソースの構成情報テーブルに格納されている構成情報が新しい世代の情報であることを示す。
【００６８】
（１−１０）リクエスト分散送受信プログラムの起動時処理
図１５は、リクエスト分散送受信プログラムの起動時処理を示すフローチャートである。リクエスト分散送受信プログラムの起動時処理は、ストレージ装置１０の起動時に実行される処理である。
【００６９】
先ず、リクエスト分散送受信プログラム１１１は、何れか１つのコントローラ２のリクエスト処理プログラム２１１に、コントローラ情報取得リクエストを送信する（ステップＳ１１）。コントローラ情報取得リクエストを受信したリクエスト処理プログラム２１１は、共有メモリ４から「コントローラ情報」を取得し、リクエスト分散送受信プログラム１１１に送信する。
【００７０】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ１１で送信したコントローラ情報取得リクエストに応じてリクエスト処理プログラム２１１から受信した「コントローラ情報」を、コントローラテーブル１２２に登録する（ステップＳ１２）。
【００７１】
具体的には、リクエスト分散送受信プログラム１１１は、受信した「コントローラ情報」の１レコード毎に、プロセッサＩＤをコントローラテーブル１２２のプロセッサＩＤ１２２１に格納し、コントローラＩＤをコントローラＩＤ１２２２に格納し、プロセッサ状態をプロセッサ状態１２２３に格納して、コントローラテーブル１２２の各レコードを生成する。
【００７２】
次に、リクエスト分散送受信プログラム１１１は、何れか１つのコントローラ２のリクエスト処理プログラム２１１に、ドライブ情報取得リクエストを送信する（ステップＳ１３）。ドライブ情報取得リクエストを受信したリクエスト処理プログラム２１１は、共有メモリ４から「ドライブ情報」を取得し、リクエスト分散送受信プログラム１１１に送信する。
【００７３】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ１３で送信したドライブ情報取得リクエストに応じてリクエスト処理プログラム２１１から受信した「ドライブ情報」を、搭載ドライブテーブル１２１に登録する（ステップＳ１４）。
【００７４】
具体的には、リクエスト分散送受信プログラム１１１は、受信した「ドライブ情報」の１レコード毎に、ドライブＩＤを搭載ドライブテーブル１２１のドライブＩＤ１２１１に格納し、ドライブ種別をドライブ種別１２１２に格納し、接続先コントローラＩＤを接続先コントローラＩＤ１２１３に格納する。そして、リクエスト分散送受信プログラム１１１は、プロセッサ負荷重み１２１４にドライブ種別に応じてあらかじめ定められているプロセッサ負荷重みを格納して、搭載ドライブテーブル１２１の各レコードを生成する。
【００７５】
次に、リクエスト分散送受信プログラム１１１は、何れか１つのコントローラ２のリクエスト処理プログラム２１１に、リクエスト種別毎かつリソース種別毎の構成管理リクエストを送信する（ステップＳ１５）。ステップＳ１５の構成管理リクエストを受信したリクエスト処理プログラム２１１は、指定されたリクエスト種別毎かつリソース種別毎の構成管理処理を実行し、リクエスト種別毎かつリソース種別毎のリソース１個あたりのレスポンス時間を推定する。
【００７６】
例えば図５のレスポンス速度テーブル１２３のレスポンス速度ＩＤ１２３１のレコードに示すように、リクエスト種別１２３２が“ＧＥＴ”、リソース種別１２３３が“Volume”である場合に、リクエスト分散送受信プログラム１１１の起動時処理において、共有メモリ４上のVolume構成情報テーブル４１から10000件のVolume構成情報を取得した際のレスポンス時間が20秒であったとする。
【００７７】
レスポンス時間は、構成情報のデータ量に比例することから、20秒/10000件＝２ミリ秒の計算から、１件あたりのVolume構成情報取得のレスポンス時間の推定値を算出する。この算出された“２ミリ秒”が、レスポンス速度テーブル１２３のレスポンス速度ＩＤ１２３１のレコードのリソース１個あたりのレスポンス時間１２３４に格納される。
【００７８】
逆に、例えば、管理端末２０から６０００件のVolumeの構成情報取得（ＧＥＴ）のリクエストを受付けた場合には、レスポンス速度テーブル１２３のレスポンス速度ＩＤ１２３１が“１”のレコードから、受付リクエストの処理時間を、6000件×２ミリ秒＝120秒と推定できる。
【００７９】
なお、リクエスト処理プログラム２１１は、リクエスト種別毎かつリソース種別毎のリクエストデータ又はレスポンスデータの所定のデータ量あたりのレスポンス時間に基づいて、構成管理リクエストのレスポンス時間を推定してもよい。
【００８０】
構成管理リクエストの受信に応じてリクエスト種別毎かつリソース種別毎の構成管理リクエストのレスポンス時間を推定したリクエスト処理プログラム２１１は、推定したリクエスト種別毎かつリソース種別毎のリソース１個あたりのレスポンス時間を、リクエスト分散送受信プログラム１１１に送信する。
【００８１】
次に、リクエスト分散送受信プログラム１１１は、リクエスト処理プログラム２１１から受信したリクエスト種別毎かつリソース種別毎のリソース１個あたりのレスポンス時間を、レスポンス速度テーブル１２３に登録する（ステップＳ１６）。
【００８２】
具体的には、リクエスト分散送受信プログラム１１１は、受信したリクエスト種別をレスポンス速度テーブル１２３のリクエスト種別１２３２に格納し、リソース種別をリソース種別１２３３に格納し、レスポンス時間をリソース１個あたりのレスポンス時間１２３４に格納し、レスポンス速度ＩＤを付与してレスポンス速度テーブル１２３の各レコードを生成する。
【００８３】
なお、ステップＳ１５及びＳ１６の処理は、ストレージ装置１０の起動時に限らず、定期的に実行されてもよい。
【００８４】
（１−１１）プロセッサ稼働率及びWritePending情報受信時処理
図１６は、リクエスト分散送受信プログラムのプロセッサ稼働率及びWritePending情報受信時処理を示すフローチャートである。リクエスト分散送受信プログラム１１１のプロセッサ稼働率及びWritePending情報受信時処理は、リクエスト分散送受信プログラム１１１の起動後に、プロセッサ稼働率及びWritePending情報送信プログラム２１２からプロセッサ稼働率及びWritePending情報を受信する度に実行される処理である。
【００８５】
先ず、リクエスト分散送受信プログラム１１１は、コントローラ２の管理ソフトウェア処理部２１のプロセッサ稼働率及びWritePending情報送信プログラム２１２から、各コントローラ２におけるプロセッサ稼働率及びWritePending情報を受信する（ステップＳ２１）。
【００８６】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ２１で受信したプロセッサ稼働率及びWritePending情報と、搭載ドライブテーブル１２１の情報とから、分散処理重みと優先度を計算し、コントローラテーブル１２２を更新する（ステップＳ２２）。
【００８７】
具体例を挙げて説明すると、リクエスト分散送受信プログラム１１１が、プロセッサ稼働率及びWritePending情報送信プログラム２１２から、「コントローラＩＤ」“コントローラＡ”のコントローラ２の「プロセッサＩＤ」“Ａ−１”のプロセッサ２２について、「プロセッサ稼働率」“７０％”及び「WritePending情報」“３０ＭＢ”を受信したとする。このとき、リクエスト分散送受信プログラム１１１は、搭載ドライブテーブル１２１の負荷重み１２１４と、下記（１）式とから、「分散処理重み」を算出する。なお、下記（１）式において「基準メモリ量」は予め定められた値であり、例えば“１００ＭＢ”である。
【００８８】
【数１】
2020095550.tif 000003
【００８９】
即ち、リクエスト分散送受信プログラム１１１は、“コントローラＡ”の「コントローラＩＤ」を元に搭載ドライブテーブル１２１を参照し、“コントローラＡ”に対応する「プロセッサ負荷重み」“１”を取得する。そして、リクエスト分散送受信プログラム１１１は、「プロセッサ稼働率」“７０％”、「WritePending情報」“３０ＭＢ”、「基準メモリ量」“１００ＭＢ”、及び「プロセッサ負荷重み」“１”を上記（１）式に代入して、分散処理重み＝０．２１を算出する。
【００９０】
そして、リクエスト分散送受信プログラム１１１は、コントローラテーブル１２２の「プロセッサＩＤ」“Ａ−１”のレコードのプロセッサ稼働率１２２４、WritePending情報１２２５、及び分散処理重み１２２６を、「プロセッサ稼働率」“７０％”、「WritePending情報」“３０ＭＢ”、及び「分散処理重み」“０．２１”でそれぞれ更新する。他の「プロセッサＩＤ」についても同様である。
【００９１】
さらに、リクエスト分散送受信プログラム１１１は、コントローラテーブル１２２の全レコードについての分散処理重み１２２６の降順で優先度１２２７を更新する。
【００９２】
（１−１２）リクエスト分散送受信プログラムのリクエスト受付時処理
図１７は、リクエスト分散送受信プログラムのリクエスト受付時処理を示すフローチャートである。リクエスト分散送受信プログラム１１１のリクエスト受付時処理は、管理端末２０から構成管理リクエストを受信する度に実行される処理である。
【００９３】
先ず、リクエスト分散送受信プログラム１１１は、管理端末２０から受信した構成管理リクエストを解析し、リクエスト種別及び対象リソースを取得する（ステップＳ３１）。例えば、リクエスト分散送受信プログラム１１１は、管理端末２０から、リクエスト種別：ＧＥＴ、対象リソース：Volume、対象リソース数：２５００件の構成管理リクエストを受信したとする。
【００９４】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３１で取得した情報から、応答基準速度に基づき、構成管理リクエストの分散方法（分散リクエスト）計算する（ステップＳ３２）。ここで、応答基準速度とは、構成管理リクエストに対する構成管理処理のレスポンス時間が満たすべき上限値であり、例えば３秒とする。
【００９５】
例えば、リクエスト分散送受信プログラム１１１は、レスポンス速度テーブル１２３を参照し、リクエスト種別：ＧＥＴ及びリソース種別：Volumeに対応するリソース１個あたりのレスポンス時間：２ミリ秒を取得する。そして、リクエスト種別：ＧＥＴ、対象リソース：Volume、対象リソース数：２５００件の構成管理リクエストを１つのプロセッサでリクエスト処理した場合の「推定レスポンス時間」は、2500件×0.002秒＝５秒と見積られる。応答基準速度：３秒であることから、推定レスポンス時間を応答基準速度以下にするためには、対象リソース数を２つのプロセッサ２２に分散して処理させる必要がある。
【００９６】
よって、リクエスト分散送受信プログラム１１１は、コントローラテーブル１２２において、優先度１２２７が“１”のコントローラＢのプロセッサＢ−１と、優先度が“２”のコントローラＡのプロセッサＡ−１の２つのプロセッサに構成管理リクエスト（ＧＥＴ）の対象リソース数を分散処理させる。即ち対象リソース数の分散数を“２”と決定する。
【００９７】
そして、リクエスト分散送受信プログラム１１１は、２５００件の構成管理リクエストの対象リソース数をプロセッサＢ−１とプロセッサＡ−１のそれぞれに分散処理させる際に、優先度：Ｘ位のプロセッサに振り分ける対象リソース数を「対象リソース振り分け数（Ｘ）」として、下記（２）式に基づいて計算する。リクエスト分散送受信プログラム１１１は、２５００件の構成管理リクエストを２つの分散リクエストに分割することから、優先度がＸ＝１位〜２位のプロセッサについて、下記（２）式に基づく計算を実行する。
【００９８】
【数２】
2020095550.tif 000004
【００９９】
優先度：１位のプロセッサＢ−１への振り分け対象リソース数（Ｘ＝１）は、分散数：２、応答基準速度：３秒、分散処理重み：０．７１、リソース１個あたりのレスポンス時間：２ミリ秒として、上記（２）式から、“２１６０件”と計算される。また、優先度：２位のプロセッサＡ−１への振り分け対象リソース数（Ｘ＝２）は、分散数：２、応答基準速度：３秒、分散処理重み：０．２１、リソース１個あたりのレスポンス時間：２ミリ秒として、上記（２）式から、“６３０件”と計算される。
【０１００】
ただし、対象リソース数の総計が２５００件であることから、優先度：２位のプロセッサＡ−１への振り分け対象リソース数は、２５００件−２１６０件＝３４０件で打ち切られる。
【０１０１】
以上のように、ステップＳ３２において、リクエスト分散送受信プログラム１１１は、例えば、リクエスト種別：ＧＥＴ（構成情報取得）、対象リソース：Volume、対象リソース数：２５００件の構成管理リクエストの対象リソース数を、プロセッサＢ−１及びＡ−１の２つのプロセッサに振り分けると計算する。また、ステップＳ３２において、リクエスト分散送受信プログラム１１１は、例えば、プロセッサＢ−１に構成管理リクエストの対象リソース数：２１６０件の取得を振り分け、プロセッサＡ−１に構成管理リクエストの対象リソース数：３４０件の取得を振り分けると計算する。
【０１０２】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３１で受信した構成管理リクエストを受付リクエストテーブル１２４に登録し、ステップＳ３２で計算した構成管理リクエストの分散方法（分散リクエスト）を分散リクエストテーブル１２５に登録する（ステップＳ３３）。
【０１０３】
具体的には、リクエスト分散送受信プログラム１１１は、ステップＳ３１で受信した構成管理リクエストに受付リクエストＩＤ及び分散数を対応付けて受付リクエストテーブル１２４に登録する。また、リクエスト分散送受信プログラム１１１は、ステップＳ３２で計算した構成管理リクエストの分散方法（分散リクエスト）に分散リクエストＩＤ、受付リクエストＩＤ（ステップＳ３１で受信した構成管理リクエストの受付リクエストＩＤ）、処理プロセッサ、及びリソース数を対応付けて分散リクエストテーブル１２５に登録する。
【０１０４】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３２で決定した分散先のプロセッサ２２それぞれに分散リクエストを送信する（ステップＳ３４）。
【０１０５】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３４で送信した分散先のプロセッサ２２で動作するリクエスト処理プログラム２１１から分散リクエストの処理結果の受信を待つ（ステップＳ３５）。ステップＳ３５では、リクエスト分散送受信プログラム１１１は、リクエスト処理プログラム２１１から分散リクエストの処理結果を受信する毎に、分散リクエストの処理結果としてその世代情報を分散リクエストテーブルに格納する。
【０１０６】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３４で送信した全ての分散リクエストの処理結果が返ってきたか否かを判定する（ステップＳ３６）。ステップＳ３４で送信した全ての分散リクエストの処理結果が返ってきた場合（ステップＳ３６：ＹＥＳ）、リクエスト分散送受信プログラム１１１はステップＳ３７に処理を移す。一方、ステップＳ３４で送信した全ての分散リクエストの処理結果が返ってきていない場合（ステップＳ３６：ＮＯ）、リクエスト分散送受信プログラム１１１はステップＳ３５に処理を戻す。
【０１０７】
ステップＳ３７では、リクエスト分散送受信プログラム１１１は、ステップＳ３５で受け取った全ての分散リクエストの処理結果の世代情報が一致しているか否かを判定する（ステップＳ３７）。ステップＳ３５で受け取った全ての分散リクエストの処理結果の世代情報が一致している場合（ステップＳ３７：ＹＥＳ）、リクエスト分散送受信プログラム１１１は、ステップＳ３８に処理を移す。一方、ステップＳ３５で受け取った分散リクエストの処理結果の世代情報が一致していない場合（ステップＳ３７：ＮＯ）、リクエスト分散送受信プログラム１１１は、ステップＳ３９に処理を移す。
【０１０８】
ステップＳ３８では、リクエスト分散送受信プログラム１１１は、受け取った分散リクエストの処理結果を結合して管理端末２０に返却する。ステップＳ３８が終了すると、リクエスト分散送受信プログラム１１１は、リクエスト分散送受信プログラムのリクエスト受付時処理を終了する。
【０１０９】
一方、ステップＳ３９では、リクエスト分散送受信プログラム１１１は、世代情報が最新（最大）でない分散リクエストを、ステップＳ３２で決定した分散先のプロセッサ２２それぞれに再送信する。ステップＳ３９が終了すると、リクエスト分散送受信プログラム１１１は、ステップＳ３５に処理を戻す。
【０１１０】
（１−１３）受付リクエスト及び分散リクエストの管理方法
図１８は、受付リクエスト及び分散リクエストの管理方法を説明するための図である。図１８を参照して、図１７に示すリクエスト分散送受信プログラムのリクエスト受付時処理における、管理端末２０から受け付けた構成管理リクエスト（受付リクエスト）及び構成管理リクエストを分割した分散リクエストの管理（ステップＳ３３）について説明する。
【０１１１】
管理ソフトウェア統合部１１は、受付リクエストＩＤ：１の受付リクエストとして、管理端末２０から、リクエスト種別：ＧＥＴ、対象リソース：Volume、対象リソース数：2500の構成管理リクエストを受け付ける。そして、管理ソフトウェア統合部１１は、受付リクエストＩＤ：１の受付リクエストを、分散リクエストＩＤ：１と、分散リクエストＩＤ：２の２つ分散リクエストに分散すると決定する。そして、管理ソフトウェア統合部１１は、図１８に示すように、受付リクエストＩＤ：１、分散数：２、リクエスト種別：ＧＥＴ、対象リソース：Volume、対象リソース数：2500のレコードを、受付リクエストテーブル１２４に追加する。
【０１１２】
さらに、管理ソフトウェア統合部１１は、応答基準速度とプロセッサ２２の分散処理重みの優先度とに基づいて、分散リクエストを処理させるプロセッサ２２及びそれぞれのプロセッサ２２に分散処理させる対象リソース数を決定する。例えば、管理ソフトウェア統合部１１は、分散リクエストＩＤ：１の分散リクエストの対象リソース数：２１６０を、コントローラ２−２のプロセッサ２２−２（処理プロセッサＢ−１）に分散処理させ、分散リクエストＩＤ：２の分散リクエストの対象リソース数：３４０を、コントローラ２−１のプロセッサ２２−１（処理プロセッサＡ−１）に分散処理させると決定する。
【０１１３】
そして、管理ソフトウェア統合部１１は、受付リクエストＩＤと、分散リクエストＩＤとを紐付ける。管理ソフトウェア統合部１１は、図１８に示すように、分散リクエストＩＤ：１、受付リクエストＩＤ：１、処理プロセッサ：Ｂ−１、対象リソース数：２１６０のレコードと、分散リクエストＩＤ：２、受付リクエストＩＤ：１、処理プロセッサ：Ａ−１、対象リソース数：３４０のレコードとを、分散リクエストテーブル１２５に追加する。
【０１１４】
そして、管理ソフトウェア統合部１１は、管理ソフトウェア処理部２１−２を介してプロセッサ２２−２に分散リクエストＩＤ：１の分散リクエストを処理させた結果の世代情報と、管理ソフトウェア処理部２１−１を介してプロセッサ２２−１に分散リクエストＩＤ：２の分散リクエストを処理させた結果の世代情報が返ってきたならば、世代情報を分散リクエストテーブル１２５に格納する。
【０１１５】
管理ソフトウェア統合部１１は、分散リクエストＩＤ：１及び２のそれぞれの分散リクエストの世代情報が一致していれば、分散リクエストの処理結果を結合して管理端末２０に返却する。一方、管理ソフトウェア統合部１１は、分散リクエストＩＤ：１及び２の分散リクエストの世代情報が不一致であれば、最新でない世代情報を返してきた分散リクエストを、分散先のプロセッサ２２に再送信する。
【０１１６】
（１−１４）世代情報の不一致
図１９及び図２０は、世代情報の不一致例を説明するための図である。図１９及び図２０を参照して、図１７に示すリクエスト分散送受信プログラムのリクエスト受付時処理における、世代情報の不一致（ステップＳ３７）について説明する。
【０１１７】
例えば、図１９に示すように、管理ソフトウェア統合部１１は、管理端末２０から（１）CopyGroup構成情報取得リクエストを受信した後に、（２）CopyGroup作成及び削除リクエストを受信したとする。そして、管理ソフトウェア統合部１１は、プロセッサ２２の負荷状況に応じて、CopyGroup構成情報取得リクエストをコントローラ２−１，２−３のプロセッサ２２に分散処理させ、CopyGroup作成及び削除リクエストをコントローラ２−２のプロセッサ２２に処理させると決定したとする。
【０１１８】
そして、コントローラ２−１，２−２，２−３の負荷状況から、（３）CopyGroup構成情報取得リクエスト（分散リクエストＡ）、（４）CopyGroup作成及び削除リクエスト、（５）CopyGroup構成情報取得リクエスト（分散リクエストＢ）の順序でリクエスト処理されたとする。
【０１１９】
図２０に示すように、コントローラ２−１による（３）CopyGroup情報取得リクエスト（分散リクエストＡ）の実行時には、CopyGroup構成情報テーブル４４は、CopyGroupNmae：ＣＧ１、PvolDeviceGroupName：ＣＧ１Ｐ、SvolDeviceGroupName：ＣＧ１Ｓ、PvolMuNumber：０のレコードを含み、世代情報テーブル４５は、リソース種別：CopyGroup、世代情報：11111のレコードを含むので、これらを含んだCopyGroup構成情報及び世代情報が取得される。
【０１２０】
しかし、コントローラ２−２によりCopyGroupName：ＣＧ１を削除する（４）CopyGroup削除リクエストが実行されると、CopyGroup構成情報テーブル４４からCopyGroupName：ＣＧ１のレコードが削除され、世代情報テーブル４５のリソース種別：CopyGroupの世代情報が＋１される。さらに、コントローラ２−２によりCopyGroupName：ＣＧ２を作成する（５）CopyGroup作成リクエストが実行されると、CopyGroup構成情報テーブル４４にCopyGroupNmae：ＣＧ２、PvolDeviceGroupName：ＣＧ２Ｐ、SvolDeviceGroupName：ＣＧ２Ｓ、PvolMuNumber：０のレコードが追加され、世代情報テーブル４５のリソース種別：CopyGroupの世代情報がさらに＋１される。
【０１２１】
その結果、コントローラ２−３による（５）CopyGroup情報取得リクエスト（分散リクエストＢ）の実行時には、CopyGroup構成情報テーブル４４は、CopyGroupNmae：ＣＧ１のレコードを含まず、CopyGroupNmae：ＣＧ２、PvolDeviceGroupName：ＣＧ２Ｐ、SvolDeviceGroupName：ＣＧ２Ｓ、PvolMuNumber：０を含み、世代情報テーブル４５は、リソース種別：CopyGroup、世代情報：11113を含むので、これらを含んだCopyGroup構成情報及び世代情報が取得される。
【０１２２】
このように、１つのCopyGroup構成情報取得リクエストを分散した分散リクエストＡ及び分散リクエストＢの実行の間に、CopyGroup作成及び削除リクエストが実行されてCopyGroupの構成が更新されると、世代情報が不一致となり、分散リクエストＡ及び分散リクエストＢのそれぞれのリクエスト処理結果に不整合が生じている場合がある。あるいは不整合が生じていない場合でも、世代情報が不一致であれば、CopyGroup作成及び削除リクエストの処理の反映が遅延している可能性がある。
【０１２３】
１つの構成情報取得リクエストを複数の分散リクエストにて処理した場合にそれぞれの世代情報に不一致が生じると、最新の構成情報を取得できていないことから、次の構成変更処理に影響が出る可能性が高くなる。一方、世代情報が一致していると、複数の分散リクエストで同一世代の構成情報を取得できているため、複数の分散リクエストの処理結果を結合した構成情報が矛盾や不整合を含まないものとなる。
【０１２４】
（１−１５）リクエスト処理プログラムのリクエスト処理
図２１は、リクエスト処理プログラムのリクエスト処理を示すフローチャートである。リクエスト処理プログラム２１１のリクエスト処理は、リクエスト分散送受信プログラム１１１から構成管理リクエスト（分散リクエストを含む）を受信する度に実行される処理である。
【０１２５】
先ず、リクエスト処理プログラム２１１は、リクエスト分散送受信プログラム１１１から構成管理リクエストを受信する（ステップＳ４１）。次に、リクエスト処理プログラム２１１は、リクエスト分散送信プログラムから指定されたプロセッサを使用して構成管理処理を実行する（ステップＳ４２）。
【０１２６】
次に、リクエスト処理プログラム２１１は、ステップＳ４１で受信した構成管理リクエストが対象とするリソース種別の世代情報を世代情報テーブル４５から取得する（ステップＳ４３）。次に、リクエスト処理プログラム２１１は、リクエスト分散送受信プログラム１１１にステップＳ４２の構成管理処理の実行結果及び世代情報を返す（ステップＳ４４）。ステップＳ４４が終了すると、リクエスト処理プログラム２１１は、リクエスト処理を終了する。
【０１２７】
（１−１６）プロセッサ稼働率及びWritePending送信処理
図２２は、プロセッサ稼働率及びWritePending送信処理を示すフローチャートである。プロセッサ稼働率及びWritePending送信処理は、プロセッサ稼働率及びWritePending情報送信プログラム２１２により、ストレージ装置１０の稼働中に繰り返し実行される処理である。
【０１２８】
先ず、プロセッサ稼働率及びWritePending情報送信プログラム２１２は、プロセッサ２２毎のプロセッサ稼働率及びWritePending情報を、共有メモリ４に格納されているストレージ構成情報テーブル（不図示）から取得する（ステップＳ５１）。ストレージ構成情報テーブルは、ストレージ構成管理プログラム２３により管理及び更新される。
【０１２９】
次に、プロセッサ稼働率及びWritePending情報送信プログラム２１２は、リクエスト分散送受信プログラム１１１に、ステップＳ５１で取得したプロセッサ毎のプロセッサ稼働率及びWritePending情報を送信する（ステップＳ５２）。プロセッサ稼働率及びWritePending情報送信プログラム２１２は、ステップＳ５１及びＳ５２を繰り返し実行する。
【０１３０】
（１−１７）第１の実施の形態の効果
第１の実施の形態では、構成管理リクエストのリクエスト内容や複数のコントローラ２のプロセッサ２２毎の負荷状況に応じて、複数のプロセッサ２２の中から決定したプロセッサ２２に、構成管理リクエストを分散並列処理させる。よって、構成管理のリクエストデータやレスポンスデータが大きい場合や、構成管理処理よりも優先処理されるＩ／Ｏ処理の処理負荷が高い場合であっても、構成管理の処理負荷を平準化し、処理速度を向上させることができる。
【０１３１】
また、プロセッサ稼働率及びWritePending情報に基づいて構成管理リクエストを分散並列処理させるプロセッサ２２を決定するので、記憶装置３へのＩ／Ｏ処理との性能干渉を軽減しつつ、構成管理処理の処理速度の低下を抑制し、構成管理のレスポンス性能を向上させることができる。
【０１３２】
また、構成情報の新旧の判断指標となる世代情報を構成情報毎に管理し、複数のプロセッサ２２での分散リクエストの分散処理結果の世代情報の不一致が生じた場合に、最新でない世代情報の処理結果を返したプロセッサ２２に分散リクエストを再実行させる。よって、１つの構成管理リクエストを分割した分散リクエストを、異なる世代の構成情報を基にリクエスト処理することで生じる処理結果の不整合の発生を防止できる。
【０１３３】
（２）第２の実施の形態
第１の実施の形態では、ストレージ装置１０が、１つの管理ソフトウェア統合部１１と複数の管理ソフトウェア処理部２１とを有する。そして、管理ソフトウェア統合部１１は、プロセッサ２２毎のプロセッサ稼働率及びWritePending情報に基づいて、負荷が低い複数のプロセッサ２２で構成管理リクエストを並列処理できるように、複数の管理ソフトウェア処理部２１に分散処理させる制御を行うとした。
【０１３４】
これに対し、第２の実施の形態では、ストレージ装置１０Ｂが、複数の管理ソフトウェア統合部１１Ｂを有し、何れか１つの管理ソフトウェア統合部１１Ｂが、複数の管理ソフトウェア処理部２１に構成管理リクエストを分散処理させる制御を行う。
【０１３５】
図２３は、第２の実施の形態のストレージ装置の構成例を示す図である。図２３に例示するように、第２の実施の形態のストレージ装置１０Ｂは、全てのコントローラ２Ｂ（２Ｂ−１，２Ｂ−２，…，２Ｂ−ｎ）に管理ソフトウェア統合部１１Ｂ（１１Ｂ−１，１１Ｂ−２，…，１１Ｂ−ｎ）と管理ソフトウェア処理部２１（２１−１，２１−１，…，２１−ｎ）とを有する。
【０１３６】
そして、初期状態では、特定の１つのコントローラ２Ｂの管理ソフトウェア統合部１１Ｂがマスタとなり、複数の管理ソフトウェア処理部２１（２１−１，２１−１，…，２１−ｎ）とプロセッサ２２（２２−１，…，２２−ｎ）に構成管理リクエストを分散処理させる制御を行う。
【０１３７】
例えば、初期状態で、コントローラ２Ｂ−１の管理ソフトウェア統合部１１Ｂ−１がマスタとなり、コントローラ２Ｂ−２，…，２Ｂ−ｎの管理ソフトウェア統合部１１Ｂ−２，…，１１Ｂ−ｎが待機状態となる。そして、マスタである管理ソフトウェア統合部１１Ｂ−１は、複数の管理ソフトウェア処理部２１（２１−１，２１−２，…，２１−ｎ）とプロセッサ２２（２２−１，２２−２，…，２２−ｎ）に構成管理リクエストを分散処理させる制御を行う。
【０１３８】
具体的に説明すると、コントローラ２Ｂ−１で障害（例えば管理ソフトウェア統合部１１Ｂ−１、管理ソフトウェア処理部２１、プロセッサ２２の障害等）が発生したことにより、管理ソフトウェア統合部１１Ｂ−１による構成管理リクエストの分散処理の制御が継続不可となった場合には、コントローラ２Ｂ−１は、他の１つのコントローラ２Ｂ（例えばコントローラ２Ｂ−２）に分散処理の制御を移管する。
【０１３９】
そして、コントローラ２Ｂ−２の管理ソフトウェア統合部１１Ｂ−２は、コントローラ２Ｂ−１の管理ソフトウェア処理部２１−１及びプロセッサ２２−１を除いた複数の管理ソフトウェア処理部２１（２１−２，…，２１−ｎ）とプロセッサ２２（２２−２，…，２２−ｎ）に構成管理リクエストを分散処理させる制御を継続する。
【０１４０】
なお、分散処理の制御が移管される他のコントローラ２Ｂは、多数決論理又は予め定められている順位に従って決められる。
【０１４１】
また、構成管理リクエストを分散処理させる制御を行うコントローラ２Ｂの処理負荷が所定以上の高い状態となった場合や、当該コントローラ２Ｂの障害発生が予測される場合にも、他のコントローラ２Ｂに分散処理の制御を移管してもよい。
【０１４２】
第２の実施の形態では、構成管理リクエストを分散させる機能を有する管理ソフトウェア統合部１１Ｂを、複数のコントローラ２Ｂのそれぞれに設ける。よって、構成管理リクエストの分散を行う管理ソフトウェア統合部１１Ｂに障害等が発生した場合に、他の管理ソフトウェア統合部１１Ｂに、構成管理リクエストを分散させる制御を移管することで、管理ソフトウェア統合部１１Ｂの障害耐性を高めることができる。
【０１４３】
また、コントローラ２Ｂが有する管理ソフトウェア処理部２１及びプロセッサ２２の処理負荷や、障害発生及び障害発生予測も考慮して、他のコントローラ２Ｂに分散処理の制御を移管することで、不適切な管理ソフトウェア処理部２１及びプロセッサ２２を分散リクエストの分散先としてしまう不都合を排除し、分散リクエストを効率的に分散処理できる。
【０１４４】
（３）第３の実施の形態
図２４は、第３の実施の形態のリクエスト分散送受信プログラムのプロセッサ稼働率及びWritePending情報受信時処理を示すフローチャートである。図２４は、図１７のリクエスト分散送受信プログラムのリクエスト受付時処理を示すフローチャートのステップＳ３１の前に、ステップＳ３０ａの判定処理を行う点が、第１の実施の形態と異なる。
【０１４５】
先ず、リクエスト分散送受信プログラム１１１は、全てのプロセッサ２２のプロセッサ稼働率又はWritePending情報が基準値を超えるか否かを判定する（ステップＳ３０ａ）。例えば、リクエスト分散送受信プログラム１１１は、全てのプロセッサ２２のプロセッサ稼働率が例えば９０％を超える、又は、全てのプロセッサ２２のWritePending情報が例えば１００ＭＢを超えるか否かを判定する。
【０１４６】
全てのプロセッサ２２のプロセッサ稼働率又はWritePending情報が基準値を超える場合（ステップＳ３０ａ：ＹＥＳ）、リクエスト分散送受信プログラム１１１は、ステップＳ３０ｂに処理を移す。
【０１４７】
ステップＳ３０ｂでは、リクエスト分散送受信プログラム１１１は、最も負荷が低いプロセッサ２２（優先度１２２７が第１位のプロセッサ（図４参照））のみに構成管理リクエストを送信する。次に、リクエスト分散送受信プログラム１１１は、ステップＳ３０ｂで送信した構成管理リクエストの処理結果を受信する（ステップＳ３０ｃ）。
【０１４８】
次に、リクエスト分散送受信プログラム１１１は、ステップＳ３０ｃで受信した構成管理リクエストの処理結果を管理端末２０に返却する（ステップＳ３０ｄ）。ステップＳ３０ｄが終了すると、リクエスト分散送受信プログラム１１１は、リクエスト分散送受信プログラムのリクエスト受付時処理を終了する。
【０１４９】
一方、全てのプロセッサ２２のプロセッサ稼働率及びWritePending情報が基準値を超えない場合（ステップＳ３０ａ：ＮＯ）、リクエスト分散送受信プログラム１１１は、ステップＳ３１に処理を移す。以降は、図１７に示すリクエスト分散送受信プログラムのリクエスト受付時処理の処理フローと同様である。
【０１５０】
第３の実施の形態では、全てのプロセッサ２２でのＩ／Ｏ処理負荷が高い場合に、構成管理リクエストを複数のプロセッサ２２で分散処理させずに、負荷が最も低い１つのプロセッサ２２のみで処理させる。よって、構成管理リクエストによるＩ／Ｏ処理への影響を低減することができる。
【０１５１】
（４）第４の実施の形態
第１の実施の形態では、上記（１）式に基づき分散処理重みを計算した。しかし、これに限られず、図１７に示すステップＳ３２で、目標時間（応答基準速度）内に構成管理リクエストを処理できないと判定される場合に、リクエスト分散送受信プログラム１１１は、例えば下記（３）式に基づきそれぞれのプロセッサ２２の分散処理重みを再計算する。
【０１５２】
【数３】
2020095550.tif 000005
【０１５３】
ただし、上記（３）式において、“Ａ”はストレージ装置１０の構成の規模あるいはユーザにより予め設定されたプロセスの優先度に応じて決定される加重係数であり、“Ｂ”は構成管理リクエストの「推定レスポンス時間」に応じて決定される加重係数である。なお、上記（３）式の右辺の分母“Σ分散処理重み”は、全てのプロセッサに亘る分散処理重みの和を表す。
【０１５４】
そして、リクエスト分散送受信プログラム１１１は、上記（３）式に基づいて再計算した分散処理重みに応じた優先度で、構成管理リクエストを分散させるプロセッサ２２を決定する。そして、リクエスト分散送受信プログラム１１１は、再計算した分散処理重みを上記（２）式に代入して、構成管理リクエストを分散処理させるプロセッサ２２と、それぞれのプロセッサ２２に振り分ける対象リソース数を決定する。
【０１５５】
第４の実施の形態では、上記（１）式に代えて、上記（３）式で算出した分散処理重みを用いて構成管理リクエストの分散方法を計算する。よって、現在の負荷（プロセッサ稼働率）よりも将来の負荷（WritePending情報）を優先的に考慮し、将来の負荷の影響度を高くして、構成管理リクエストを分散させるプロセッサ２２及び振り分ける対象リソース数を計算することで、構成管理リクエストの分散処理を最適化することができる。
【０１５６】
本発明は、上述の各実施の形態及び各変形例に限定されるものではなく、本発明の趣旨を逸脱しない限り、本発明の技術思想の範囲内で考えられるその他の形態についても、本発明の範囲内に含まれる。また、本発明の趣旨を逸脱しない限り、様々な形態で実施することができる。例えば、上述の各実施の形態及び各変形例で例示した各構成及び各処理は、実装形態や処理効率に応じて適宜統合又は分離させてもよい。
【符号の説明】
【０１５７】
２，２−１，…，２−ｎ，２Ｂ，２Ｂ−１，…，２Ｂ−ｎ・・・コントローラ、３，３−１，…，３−ｎ・・・記憶装置、４・・・共有メモリ、１０，１０Ｂ・・・ストレージ装置、１１，１１Ｂ，１１Ｂ−１，…，１１Ｂ−ｎ・・・管理ソフトウェア統合部、２０・・・管理端末、２１，２１−１，…，２１−ｎ・・・管理ソフトウェア処理部、２２，２２−１，…，２２−ｎ・・・プロセッサ、２３・・・ストレージ構成管理プログラム、３０・・・業務ホスト、４１・・・Volume構成情報テーブル、４２・・・Pool構成情報テーブル、４３・・・HostGroup構成情報テーブル、４４・・・CopyGroup構成情報テーブル、４５・・・世代情報テーブル、１１１・・・リクエスト分散送受信プログラム、１２１・・・搭載ドライブテーブル、１２２・・・コントローラテーブル、１２３・・・レスポンス速度テーブル、１２４・・・受付リクエストテーブル、１２５・・・分散リクエストテーブル、２１１・・・リクエスト処理プログラム、２１２・・・プロセッサ稼働率及びWritePending情報送信プログラム
【図１】
2020095550.tif 000006
【図２】
2020095550.tif 000007
【図３】
2020095550.tif 000008
【図４】
2020095550.tif 000009
【図５】
2020095550.tif 000010
【図６】
2020095550.tif 000011
【図７】
2020095550.tif 000012
【図８】
2020095550.tif 000013
【図９】
2020095550.tif 000014
【図１０】
2020095550.tif 000015
【図１１】
2020095550.tif 000016
【図１２】
2020095550.tif 000017
【図１３】
2020095550.tif 000018
【図１４】
2020095550.tif 000019
【図１５】
2020095550.tif 000020
【図１６】
2020095550.tif 000021
【図１７】
2020095550.tif 000022
【図１８】
2020095550.tif 000023
【図１９】
2020095550.tif 000024
【図２０】
2020095550.tif 000025
【図２１】
2020095550.tif 000026
【図２２】
2020095550.tif 000027
【図２３】
2020095550.tif 000028
【図２４】
2020095550.tif 000029