図1は、本発明の一実施形態のシステム構成を示すブロック図である。
本実施の形態の計算機システムは、ストレージエリアネットワーク(SAN)環境における業務システム、及び、そのSAN環境及び業務システムの性能を管理するシステムを含む。
業務システムを構成するハードウェアは、業務クライアント101〜103、ローカルエリアネットワーク(LAN)105、ホストサーバ106〜108、SANスイッチ121〜123、及びストレージ装置131である。業務システムを構成するソフトウェアは、アプリケーション111及びオペレーティングシステム(OS)113である。
業務クライアント101〜103は、業務システムのユーザインタフェース機能を提供するパソコン、ワークステーション又はシンクライアント端末等の装置である。業務クライアント101〜103は、LAN105を経由してホストサーバ106〜108のアプリケーション111等と通信する。
ホストサーバ106は、CPU151、通信装置152、ディスク装置153及びメモリ154を備える。
CPU151は、メモリ154に格納された種々のソフトウェアプログラムを実行するプロセッサである。以下の説明においてメモリ154内のソフトウェアプログラムが実行する処理は、実際にはそれらのソフトウェアプログラムを実行するCPU151によって実行される。
通信装置152は、ホストサーバ106が他の装置と通信するために使用される。ホストサーバ106は、複数の通信装置152を備えてもよい。その場合、一つの通信装置152は、LAN105に接続され、CPU151からの指示に従って性能管理サーバ110及び業務クライアント101等と通信する、いわゆるネットワークインターフェースカード(NIC)であってもよい。別の通信装置152は、SANスイッチ121等に接続され、CPU151からの指示に従ってストレージ装置131と通信する、いわゆるホストバスアダプタ(HBA)であってもよい。ホストバスアダプタは、ポート115〜117を備える。
ディスク装置153は、例えばハードディスクドライブ(HDD)又はフラッシュメモリのような記憶装置である。ディスク装置153には、メモリ154に格納されるものと同様のソフトウェアプログラム及びデータ等が格納されてもよい。
メモリ154は、例えばダイナミックRAMのような半導体記憶装置である。メモリ154には、CPU151によって実行されるソフトウェアプログラム及びCPU151によって参照されるデータ等が格納される。具体的には、メモリ154は、少なくとも、CPU151によって実行されるアプリケーション111、アプリケーションエージェント112、OS113及びホストエージェント114が格納される。これらは、ディスク装置153に格納され、必要に応じてディスク装置153からメモリ154にコピーされてもよい。
ホストサーバ107及び108の構成は、ホストサーバ106と同様であるため、説明を省略する。図1には、三つのホストサーバ106〜108を示すが、本実施の形態の計算機システムは、任意の数のホストサーバ106等を備えることができる。
ストレージ装置131は、制御部163及び複数の物理ディスク(図3参照)を備える。
制御部163は、ストレージ装置131の動作を制御する。例えば、制御部163は、ホストサーバ106等から受信した要求に従って、物理ディスクへのデータの書き込み及び読み出しを制御する。さらに、制御部163は、後述するマイグレーション及び仮想論理ボリュームの管理を実行する。
具体的には、制御部163は、少なくともマイグレーション実行部135及び仮想ボリューム管理制御部136を含む。これらは、制御部163内のメモリ(図示省略)に格納されたソフトウェアプログラムを制御部163内のプロセッサ(図示省略)が実行することによって実現されてもよい。
さらに、制御部163は、SANスイッチ121等を介してホストサーバ106等又はエージェントサーバ109と通信するためのポート132〜134を備える。
複数の物理ディスクは、例えばハードディスクドライブ(HDD)である。物理ディスク上に、実論理ボリューム137及びプールボリューム138〜139が設定される。ストレージ装置131は、一つ以上の実論理ボリューム137及び一つ以上のプールボリューム138等を含むことができる。物理ディスク、実論理ボリューム137及びプールボリューム138等の関係については後述する(図3参照)。
アプリケーション111は、業務システムの業務論理機能を提供するソフトウェア又はデータベース(DB)管理ソフト等である。アプリケーション111は、業務クライアント101〜103からの処理要求に応答し、必要に応じてストレージ装置131に対するデータの入出力を実行する。アプリケーション111からストレージ装置131のデータへのアクセスは、OS113、ホストバスアダプタのポート115〜117、SANスイッチのホスト側ポート124〜126、SANスイッチ121〜123、SANスイッチのストレージ側ポート128〜130及びストレージ装置131のポート132〜134を経由して実行される。
ホストサーバ106等によるストレージ装置131へのデータの入出力は、例えばファイバーチャネル(FC)プロトコルに基づいて実行されてもよいが、その他のプロトコルに基づいて実行されてもよい。
SANスイッチ121〜123は、それらが備えるポート124〜130の間の接続を切り替えることによって、ホストサーバ106等とストレージ装置131との間のデータアクセス経路を設定する。
SAN環境及び業務システムの性能管理のためのシステムを構成するハードウェアは、性能管理クライアント104、性能管理サーバ110及びエージェントサーバ109である。性能管理のためのシステムを構成するソフトウェアは、性能管理ソフト120、アプリケーションエージェント112、ホストエージェント114及びストレージエージェント118である。
性能管理サーバ110は、CPU159、通信装置160、ディスク装置162及びメモリ161を備える。
CPU159は、メモリ161に格納されたソフトウェアプログラムを実行するプロセッサである。以下の説明においてメモリ161内のソフトウェアプログラムが実行する処理は、実際にはそのソフトウェアプログラムを実行するCPU159によって実行される。
通信装置160は、性能管理サーバ110が他の装置と通信するために使用される。通信装置160は、LAN105に接続され、CPU159からの指示に従って、性能管理クライアント104、ホストサーバ106等、エージェントサーバ109及びストレージ装置131と通信する、いわゆるネットワークインターフェースカード(NIC)であってもよい。
ディスク装置162は、例えばハードディスクドライブ(HDD)又はフラッシュメモリのような記憶装置である。ディスク装置162には、メモリ161に格納されるものと同様のソフトウェアプログラム及びデータ等が格納されてもよい。
メモリ161は、例えばダイナミックRAMのような半導体記憶装置である。メモリ161には、CPU159によって実行されるソフトウェアプログラム及びCPU159によって参照されるデータ等が格納される。具体的には、メモリ161は、少なくとも、CPU159によって実行される性能管理ソフト120が格納される。性能管理ソフト120は、ディスク装置162に格納され、必要に応じてディスク装置162からメモリ161にコピーされてもよい。
エージェントサーバ109は、CPU155、通信装置156、ディスク装置158及びメモリ157を備える。
CPU155は、メモリ157に格納されたソフトウェアプログラムを実行するプロセッサである。以下の説明においてメモリ157内のソフトウェアプログラムが実行する処理は、実際にはそのソフトウェアプログラムを実行するCPU155によって実行される。
通信装置156は、エージェントサーバ109が他の装置と通信するために使用される。エージェントサーバ109は、複数の通信装置156を備えてもよい。その場合、一つの通信装置156は、LAN105に接続され、CPU155からの指示に従って少なくとも性能管理サーバ110と通信する、いわゆるネットワークインターフェースカード(NIC)であってもよい。別の通信装置156は、SANスイッチ121等に接続され、CPU155からの指示に従ってストレージ装置131と通信する、いわゆるホストバスアダプタ(HBA)であってもよい。ホストバスアダプタは、ポート119を備える。
ディスク装置158は、例えばハードディスクドライブ(HDD)又はフラッシュメモリのような記憶装置である。ディスク装置158には、メモリ157に格納されるものと同様のソフトウェアプログラム及びデータ等が格納されてもよい。
メモリ157は、例えばダイナミックRAMのような半導体記憶装置である。メモリ157には、CPU155によって実行されるソフトウェアプログラム及びCPU155によって参照されるデータ等が格納される。具体的には、メモリ157は、少なくとも、CPU155によって実行されるストレージエージェント118が格納される。ストレージエージェント118は、ディスク装置158に格納され、必要に応じてディスク装置158からメモリ157にコピーされてもよい。
性能管理クライアント104は、性能管理ソフト120のユーザインタフェース機能を提供する装置である。性能管理クライアント104は、少なくとも、ユーザに情報を表示するための表示装置170及びユーザから入力を受け付けるための入力装置(図示省略)を備える。表示装置170は、例えば、CRT又は液晶表示装置のような画像表示装置である。表示装置170に表示される画面の例については後述する(図4参照)。性能管理クライアント104は、LAN105を経由して性能管理サーバ110の性能管理ソフト120と通信する。
性能管理ソフト120は、SANの構成情報及びストレージ装置131の仮想論理ボリュームに関する統計情報の収集と監視、並びに、性能問題の検知と解決に関する機能を提供するソフトウェアである。仮想論理ボリュームの性能問題とは、例えば、仮想論理ボリュームにおけるI/O性能の劣化又はI/O過負荷を意味する。性能管理ソフト120は、SANを構成するハードウェア及びソフトウェアから構成情報及び統計情報を取得するため、それぞれ専用のエージェントソフトウェアを利用する。エージェントソフトウェアの構成及び配置にはいろいろな方法があり得るため、以下にその一例を説明する。
アプリケーションエージェント112は、アプリケーション111に関する構成情報を取得するためのソフトウェアである。ホストエージェント114は、ホストサーバ106及びOS113に関する構成情報を取得するためのソフトウェアである。ストレージエージェント118は、ホストバスアダプタのポート119及びSANスイッチ121等を経由して、ストレージ装置131に関する構成情報及び統計情報を取得するソフトウェアである。ストレージエージェント118は、専用のエージェントサーバ109において稼動してもよいし、性能管理サーバ110において稼動してもよい。ストレージエージェント118は、専用のエージェントサーバ109において稼動する場合、LAN105を経由して性能管理ソフト120と通信する。
ストレージ装置131の仮想ボリューム管理制御部136は、ホストサーバ106〜108に対して、プール論理ボリューム138等の記憶領域を仮想論理ボリュームとして見せる機能を提供する。マイグレーション実行部135は、仮想論理ボリュームを実論理ボリューム137に移動する機能、及び、あるプールに属する仮想論理ボリュームを別のプールに属する仮想論理ボリュームに移動する機能を提供する。図1では、マイグレーション実行部135及び仮想ボリューム管理制御部136がストレージ装置131の制御部163に内蔵される構成を示した。しかし、マイグレーション実行部135及び仮想ボリューム管理制御部136は、ストレージ装置131とは独立したサーバにおいて稼動してもよい。
マイグレーション実行部135が提供する論理ボリュームの移動機能についてさらに説明する。あるサーバAの入出力先である論理ボリュームAを論理ボリュームBに移動する場合を例として説明する。例えば、サーバAは、ホストサーバ106〜108のいずれかであってもよいし、論理ボリュームA及び論理ボリュームBは、それぞれ、実論理ボリューム137、プールボリューム138、プールボリューム139、又は、後述する仮想論理ボリュームのいずれかであってもよい。移動前の時点で、論理ボリュームAは使用中であり論理ボリュームBは未使用である。論理ボリュームにはそれぞれサーバが識別するための固有の番号(以下、論理ボリューム番号と記載)が割り当てられている。論理ボリュームA及び論理ボリュームBに割り当てられている論理ボリューム番号をそれぞれ「01」及び「02」とする。これらの論理ボリューム番号は、後述する図8の論理ボリューム番号格納欄804に格納される。
論理ボリュームを移動するために、論理ボリュームAのデータの読み込み及びそのデータの論理ボリュームBへの書き込みが繰り返し実行される。論理ボリュームA中のすべてのデータを論理ボリュームBにコピーし終わると、論理ボリュームA及び論理ボリュームBに割り当てられている論理ボリューム番号が入れ替えられる。この番号の入れ替えによって、以降、サーバAは、番号「01」のボリュームとして論理ボリュームBを、番号「02」のボリュームとして論理ボリュームAを認識するようになる。以上によって、サーバAは論理ボリューム番号「01」のボリュームに対し入出力を実行し続けているが、サーバAによって入出力されるデータの実体は論理ボリュームAから論理ボリュームBに移動するという、論理ボリュームの移動機能が実現される。
論理ボリュームの移動機能における論理ボリューム間のデータの具体的なコピー方法には以下の二つがある。
第1のコピー方法では、コピー元論理ボリュームに定義された容量の全アドレスを対象としてデータのコピーが実行される。この方法は単純であるが、コピー元論理ボリュームが仮想論理ボリュームである場合、コピー元論理ボリュームのうち、まだホストサーバ106等によってデータが書き込まれていない領域についても規定値等のデータを仮定してコピーされてしまう。このため、仮想論理ボリュームをプール間で移動するためにこの方法を適用すると、コピー先仮想論理ボリュームの全ての領域にプールの記憶領域が割り当てられてしまう。その結果、未使用領域の記憶容量を消費しないという仮想論理ボリュームのメリットが得られなくなる。従って、第1のコピー方法は、仮想論理ボリュームを実論理ボリューム化する(すなわち、仮想論理ボリュームを実論理ボリュームにマイグレーションする)ためにのみ使用することが望ましい。
第2のコピー方法では、コピー元論理ボリュームに定義された容量の全アドレスのうち、ホストサーバ106等によってデータが書き込まれたアドレスのみを対象としてデータのコピーが実行される。仮想ボリューム管理制御部136は、仮想論理ボリュームに対する出力要求があったとき、記憶領域を割り当てるとともに、仮想論理ボリュームの論理アドレスと、その論理アドレスに割り当てた記憶領域の物理アドレスとの対応関係を記録する。従って、仮想ボリューム管理制御部136は、ホストサーバ106等によって書き込みが行なわれた仮想論理ボリュームの全論理アドレスの情報を保持している。第2のコピー方法は、この情報を利用することによって、ホストサーバ106等による書き込みが行なわれたアドレスのデータのみコピーすることを可能とする。
図2は、本発明の一実施形態の計算機システムの機能ブロック図である。
SANの構成情報及び仮想論理ボリュームに関する統計情報の収集及び監視は以下のように行なわれる。なお、以下の説明において、プール性能・負荷算出部202、性能劣化・過負荷検知部203、ユーザ定義部206、ボリューム選択部207、ボリューム一覧表示部211、エージェント情報収集部212、実ボリューム化部213及びプール間移動部214は、性能管理ソフト120に含まれるプログラムモジュールである。また、プール統計情報201、ボリューム統計情報204、制御情報205、プール構成情報208、リソース間関連情報209及び選択ボリューム情報210は、メモリ161又はディスク装置162に格納される。
アプリケーションエージェント112、ホストエージェント114及びストレージエージェント118は、所定のタイミングで(例えば、スケジューリング設定に従い、定期的にタイマーによって)起動されるか、あるいは、性能管理ソフト120の要求によって起動されて、自エージェントが担当する監視対象装置又はソフトウェアから構成情報又は統計情報を取得する。性能管理ソフト120のエージェント情報収集部212も同様に、所定のタイミングで(例えば、スケジューリング設定に従い定期的に)起動され、SAN環境内の各エージェント112、114、118から構成情報又は統計情報を収集する。そして、エージェント情報収集部212は、収集した情報をリソース間関連情報209、プール構成情報208又はボリューム統計情報204のいずれかとして格納する。
リソースとは、SANを構成するハードウェア(サブシステム装置、SANスイッチ装置、ホストサーバ等)とその物理的又は論理的な構成要素(ポート、プロセッサ、キャッシュメモリ、アレイグループ、論理ボリューム等)、及び、これらハードウェア上で実行されるプログラム(オペレーティングシステム、データベース管理システム、業務ソフト等)とその論理的な構成要素(ファイル、テーブル等)を総称したものである。
リソース間関連情報209とは、リソース間に存在する性能に関する依存関係及びリソースの属性情報を総称したものである。例えば、リソースAに対するI/O命令がリソースBに対するI/O命令に変換されて処理される場合、又は、リソースAに対するI/O命令を処理するときにリソースBの処理能力が使用される場合、リソースAとリソースBの間に性能に関する依存関係がある。
性能管理ソフト120のプール性能・負荷算出部202は、エージェント情報収集部212による収集処理の後に起動される。プール性能・負荷算出部202は、プール構成情報208の内容に基づいてボリューム統計情報204をプール毎に集計し、集計した情報をプール統計情報201として格納する。
リソース間関連情報209のテーブル構成及びテーブル構造については、具体例を図5〜図10で説明する。プール構成情報208のテーブル構成及びテーブル構造については具体例を図11及び図12で説明する。ボリューム統計情報204のテーブル構造については具体例を図13で説明する。プール統計情報201のテーブル構造については具体例を図14で説明する。
仮想論理ボリュームに関する性能問題の検知及び解決は以下のように行なわれる。
性能管理ソフト120の性能劣化・過負荷検知部203は、所定のタイミングで(例えばスケジューリング設定に従い定期的に)起動される。性能劣化・過負荷検知部203は、起動すると、ボリューム統計情報204及びプール統計情報201に格納された統計値を調べ、仮想論理ボリューム又はプールに性能劣化又は過負荷な状態が発生していないか判定する。性能劣化又は過負荷が発生していると判定された場合、性能劣化・過負荷検知部203は、ボリューム選択部207を起動する。
ボリューム選択部207は、上記のように性能劣化・過負荷検知部203によって起動されてもよいし、ユーザ操作による性能管理クライアント104からの要求によって起動されてもよい。ボリューム選択部207は、起動されると、ボリューム統計情報204に格納された統計値及びリソース間関連情報209に格納された情報に基づいて、性能問題解決の方法として、「仮想論理ボリュームの実論理ボリューム化」又は「プール間移動」を示す情報を選択ボリューム情報210として出力する。選択ボリューム情報210に格納された性能問題解決方法は、性能管理ソフト120の動作モードに応じて自動又は手動で実行される。
性能管理ソフト120が自動動作モードである場合、ボリューム選択部207が処理を完了した後、実ボリューム化部213及びプール間移動部214が自動的に起動される。
性能管理ソフト120が手動動作モードである場合、ボリューム一覧表示部211が性能問題解決方法の一覧を性能管理クライアント104に表示する。ユーザが一覧中の解決方法を選択して性能管理クライアント104から実行指示を送信すると、実ボリューム化部213及びプール間移動部214のうち実行指示に対応するものが起動される。
自動又は手動で起動された実ボリューム化部213又はプール間移動部214は、選択ボリューム情報210に格納された内容に基づいてストレージ装置131のマイグレーション実行部135にマイグレーション実行命令を発行する。制御情報205は、性能劣化又は過負荷の発生を判定するのに使用される各種閾値、及び、性能管理ソフト120の動作モード等、性能管理ソフト120の機能を調整するための様々なパラメータを格納する。制御情報205に格納されるパラメータは、ユーザが性能管理クライアント104を介してユーザ定義部206を使用することによって設定又は変更される。
ボリューム一覧表示部211が性能管理クライアント104に表示する画面の具体例は図4で説明する。ボリューム統計情報204、プール統計情報201、制御情報205及び選択ボリューム情報210のテーブル構造については、具体例をそれぞれ図13〜図16で説明する。性能劣化・過負荷検知部203の処理手順の詳細は図17で説明する。また、ボリューム選択部207の処理手順の詳細は図18〜図23で説明する。実ボリューム化部213の処理手順の詳細は図25で、プール間移動部214の処理手順の詳細は図26で説明する。
図3は、本発明の一実施形態のSAN環境におけるリソースの構成及びリソース間の関連に関する具体例を示すブロック図である。
図3のSAN環境のハードウェアは、ホストサーバA(301)〜ホストサーバD(304)という4つのホストサーバと、スイッチA(320)、スイッチB(321)という2つのSANスイッチ装置、及び、ストレージA(322)という1つのストレージ装置で構成される。
ホストサーバA(301)〜ホストサーバD(304)の各々は、図1に示すホストサーバ106〜108のいずれかであってもよい。スイッチA(320)及びスイッチB(321)の各々は、図1に示すSANスイッチ121〜123のいずれかであってもよい。ストレージA(322)は、図1に示すストレージ装置131であってもよい。
ホストサーバA(301)〜ホストサーバD(304)では、それぞれ、アプリケーションA(305)〜アプリケーションD(308)が稼動している。これらのアプリケーションの各々は、図1に示すアプリケーション111であってもよい。
なお、図3に示すリソースの数は、図1に示すリソースの数と必ずしも一致しない。これは、それぞれの図において、説明のために必要でない部分が省略されているためである。
ホストサーバA(301)〜ホストサーバD(304)では、アプリケーションA(305)等の構成情報を取得するためのアプリケーションエージェント112、及び、ホストサーバA(301)等のハードウェア及びOS113の構成情報を取得するためのホストエージェント114が稼動している。ファイルA(309)〜ファイルF(314)及びボリュームA(315)〜ボリュームE(319)は、ホストエージェント114が情報取得の対象とするリソースの例である。ファイルは、OSがデータの入出力サービスを提供する単位であり、ボリュームは、ファイルを外部記憶装置に格納する領域としてOSによって管理される。
図3には、リソース間を結ぶ線が表示されている。これらの線は、線によって結ばれた二つのリソースの間に何らかの関連があることを表す。例えば、アプリケーションB(306)をファイルB(310)及びファイルC(311)と結ぶ線が表示されている。これらの線は、アプリケーションB(306)がファイルB(310)及びファイルC(311)にI/Oを発行するという関連を表す。ファイルB(310)とボリュームB(316)とを結ぶ線は、ファイルBに対するI/O負荷がボリュームBのリード又はライトになるという関連を表す。
図3では省略されているが、ストレージA(322)の構成情報及び統計情報を取得するため、ストレージエージェント118が稼動している。ストレージエージェント118が情報取得対象とするリソースは、少なくとも、複合論理ボリュームA(323)〜複合論理ボリュームC(325)、仮想論理ボリュームA(326)〜仮想論理ボリュームH(333)、実論理ボリュームA(334)〜実論理ボリュームD(337)、プールA(338)〜プールC(340)、プールボリュームA(341)〜プールボリュームH(348)、及び、アレイグループA(349)〜アレイグループF(354)である。
各アレイグループA(349)等は、ストレージ装置131の制御部163の機能によって複数の物理ディスク360から生成された、論理的に一つの高速かつ高信頼のディスクドライブである。
各物理ディスク360は、物理的なデータ記憶領域を含む記憶装置である。各物理ディスク360は、例えばハードディスクドライブ(HDD)であるが、その他の記憶装置(例えば、フラッシュメモリのような半導体記憶装置又は光ディスク装置等)であってもよい。ストレージA(322)は、任意の数の物理ディスク360を備えることができる。物理的な記憶領域が不足した場合、物理ディスク360が追加されてもよい。
実ボリュームA(334)等及びプールボリュームA(341)等は、ストレージ装置の制御部163の機能が一つのアレイグループを切り分けることによって作成された、ホストサーバA(301)等の用途に合ったサイズの論理的なディスクドライブである。実ボリュームA(334)等及びプールボリュームA(341)等は、作成時に定義容量分の記憶領域があらかじめアレイグループA(349)等の上に確保される。
仮想ボリュームA(326)等も実ボリュームA(334)等と同様、ストレージ装置131の仮想ボリューム管理制御部136の機能によってホストサーバA(301)等に論理的なディスクドライブとして認識される。しかし、実ボリュームA(334)等と異なり、仮想ボリュームA(326)等が作成された時には容量が定義されるだけで、定義された容量分の記憶領域は確保されない。その後、仮想ボリュームA(326)等に対するI/O要求が発生したときに、記憶領域が必要量だけ割り当てられる。
プールA(338)等は、仮想ボリュームA(326)等に記憶領域を割り当てるためのものであり、プールボリュームA(341)等の集まりとして定義される。
複合ボリュームA(323)等は、ストレージ装置の制御部163の機能によって複数の仮想ボリュームA(326)等又は実ボリュームA(334)等から作成された論理的なディスクドライブである。ホストサーバA(301)等は、一つの複合ボリュームA(323)等を一つの論理的なディスクドライブとして認識する。
ホストサーバA(301)等のボリュームA(315)等は、ストレージA(322)の論理ボリューム(すなわち、実ボリュームA(334)等、仮想ボリュームA(326)等又は複合ボリュームA(323)等)に割り当てられる。ボリュームA(315)等と論理ボリュームとの対応関係は、ホストエージェント114から取得できる。二つのリソース間の関連情報をつなぎ合わせるといわゆるI/O経路が得られる。
例えば、アプリケーションA(305)はファイルA(309)にI/Oを発行し、ファイルA(309)はボリュームA(315)に確保され、ボリュームA(315)は複合ボリュームA(323)に割り当てられ、複合ボリュームA(323)は仮想ボリュームA(326)と仮想ボリュームB(327)で構成され、仮想ボリュームA(326)と仮想ボリュームB(327)はプールA(338)に割り当てられ、プールA(338)はプールボリュームA(341)〜プールボリュームD(344)で構成され、プールボリュームA(341)とプールボリュームB(342)はアレイグループA(349)に、プールボリュームC(343)とプールボリュームD(344)はアレイグループB(350)に割り当てられる。
この場合、アプリケーションA(305)が発生させるI/Oの負荷は、ファイルA(309)から、ボリュームA(315)、複合ボリュームA(323)、仮想ボリュームA(326)及び仮想ボリュームB(327)、プールA(338)、プールボリュームA(341)〜プールボリュームD(344)、アレイグループA(349)及びアレイグループB(350)を経由する経路を経て物理ディスク360に達する。
図3に示すように、複数のアレイグループが同一の物理ディスク360を含むことはない。一つのアレイグループが複数のプールに割り当てられることはない。さらに、一つのアレイグループがプールと実論理ボリュームの両方に割り当てられることはない。このため、一つのプールに割り当てられた仮想論理ボリュームに対するI/Oと、別のプールに割り当てられた仮想論理ボリュームに対するI/Oと、実論理ボリュームに対するI/Oとが、物理ディスク360において相互に干渉することはない。例えば、プールA(338)に割り当てられた仮想論理ボリュームA(326)に対するI/Oと、プールB(339)に割り当てられた仮想論理ボリュームE(330)に対するI/Oと、実論理ボリュームA(334)に対するI/Oとが、物理ディスク360において相互に干渉することはない。
本実施の形態において、三つあるプールは以下のように使い分けられる。最初に仮想ボリュームA(326)等が作成された時点で、その仮想ボリュームA(326)等にはプールA(338)の記憶領域が割り当てられる。その後、プールA(338)又はプールA(338)中の仮想ボリュームA(326)等に性能問題が発生した場合、その解決のため、プールA(338)中の仮想ボリュームA(326)等のうち、過負荷なもの又は性能劣化したものを別のプールに移動する。具体的には、過負荷な仮想ボリュームA(326)等の移動先がプールB(339)であり、性能劣化した仮想ボリュームA(326)等の移動先がプールC(340)である。
例えば、プールA(338)内の仮想ボリュームA(326)の性能が劣化した場合、仮想ボリュームA(326)をプールC(340)に移動することによって、仮想ボリュームA(326)に対するI/Oは、プールA(338)内の他の仮想ボリュームB(327)等に対するI/Oと物理ディスク360において干渉しなくなる。このため、劣化した仮想ボリュームA(326)の性能が回復する可能性がある。
あるいは、プールA(338)内の仮想ボリュームA(326)において過負荷が発生した場合、この過負荷が仮想ボリュームA(326)自身又はプールA(338)内の他の仮想ボリュームB(327)等の性能劣化の原因となる可能性がある。この場合も、仮想ボリュームA(326)をプールB(339)に移動することによって、仮想ボリュームA(326)に対するI/Oは、仮想ボリュームB(327)等に対するI/Oと物理ディスク360において干渉しなくなる。このため、劣化した仮想ボリュームB(327)の性能が回復する(又は、仮想ボリュームB(327)の性能劣化が予防される)可能性がある。
上記の場合において、性能問題が発生した仮想ボリュームA(326)等を実論理ボリューム化することによっても、物理ディスク360におけるI/Oの干渉を防ぐことができる。このため、実論理ボリューム化によっても、劣化した性能が回復する(又は性能劣化が予防される)可能性がある。
同様にして、プールB(339)又はプールC(340)中の仮想ボリュームE(330)等又は仮想ボリュームG(332)等に性能問題が発生した場合は、それらのプール中の過負荷となった又は性能劣化した仮想ボリュームE(330)等又は仮想ボリュームG(332)等を実論理ボリューム化することによって、問題が解決される可能性がある。
このような性能問題を解決するための処理について、以下、図4以降を参照して詳細に説明する。
なお、図3は、プールA(338)〜プールC(340)がいずれもストレージA(322)内の物理ディスク360によって構成される例を示す。しかし、ストレージA(322)に接続されたストレージA(322)以外のストレージ装置(図示省略)内の物理ディスク(図示省略)によってプールが構成されてもよい。例えば、ストレージA(322)以外のストレージ装置(図示省略)内の物理ディスクによって作成されたプール(図示省略)が、プールA(338)等にマッピングされてもよい。
図4は、本発明の一実施形態のボリューム一覧表示部211によって表示される画面の一例を示す説明図である。
具体的には、図4は、ボリューム一覧表示部211からの指示に従って性能管理クライアント104の表示装置170に表示される画面の例である。
表示装置170に表示される表示画面401は、日時表示欄402、仮想ボリューム表示欄403、プール表示欄404、処置方法表示欄405及び移動先プール表示欄420の各欄を含む。仮想ボリューム表示欄403、プール表示欄404及び処置方法表示欄405の各行は、図4に示すように相互に対応付けて表示される。
日時表示欄402には、表示画面401に含まれる情報が取得された日時が表示される。この日時の値は、後述するボリューム統計情報テーブル1301(図13参照)の日時格納欄1302に格納されている値と対応する。
仮想ボリューム表示欄403には、性能問題が発生した仮想論理ボリュームA(326)等に関する情報が表示される。仮想ボリューム表示欄403は、番号表示欄406、応答時間表示欄407、IOPS表示欄408、転送速度表示欄409、容量表示欄410、使用量表示欄411及び状態表示欄412を含む。
番号表示欄406には、性能問題が発生した仮想論理ボリュームに付与された論理ボリューム番号が表示される。論理ボリューム番号については後述する(図8等参照)。
応答時間表示欄407には、性能問題が発生した仮想論理ボリュームにおいて、日時表示欄402が示す日時に測定されたI/Oの応答時間[sec]が表示される。この値は、ボリューム統計情報テーブル1301のI/O応答時間格納欄1304から読み出される。本実施形態では、仮想論理ボリュームの性能を示す指標として応答時間が用いられる。
IOPS表示欄408には、性能問題が発生した仮想論理ボリュームにおいて、日時表示欄402が示す日時に測定された単位時間当たりのI/O回数[IO/s]が表示される。この値は、ボリューム統計情報テーブル1301のIOPS格納欄1305から読み出される。
転送速度表示欄409には、性能問題が発生した仮想論理ボリュームにおいて、日時表示欄402が示す日時に測定された転送速度[MB/s]が表示される。この値は、ボリューム統計情報テーブル1301の転送速度格納欄1306から読み出される。本実施形態では、仮想論理ボリュームの負荷を示す指標としてIOPS及び転送速度が使用される。
容量表示欄410には、性能問題が発生した仮想論理ボリュームに定義された容量[MB]が表示される。この値は、後述する論理ボリュームテーブル801(図8参照)の定義容量格納欄805から読み出される。
使用量表示欄411には、性能問題が発生した仮想論理ボリュームに定義された容量に対する実際に使用されている容量の割合[%]が表示される。この値は、ボリューム統計情報テーブル1301の使用容量格納欄1307及び論理ボリュームテーブル801の定義容量格納欄805に格納されている値から算出される。
状態表示欄412には、性能問題が発生した仮想論理ボリュームの状態(具体的には、発生している性能問題の種類)が表示される。ここに表示される状態は、応答時間表示欄407、IOPS表示欄408又は転送速度表示欄409に表示されている値及びそれらに対応する閾値(後述する制御情報テーブル1501(図15)参照)に基づいて判定される。
図4の例では、仮想ボリューム表示欄403の第1行の番号表示欄406、応答時間表示欄407、IOPS表示欄408、転送速度表示欄409、容量表示欄410、使用量表示欄411及び状態表示欄412に、それぞれ、「05」、「0.30」、「1.2」、「5.8」、「10,000」、「73.8」及び「性能劣化」が表示されている。この場合、論理ボリューム番号「05」が付与された仮想論理ボリュームの応答時間「0.30」[sec]が、制御情報テーブル1501のボリューム性能劣化判定I/O応答時間閾値格納欄1502に格納された「0.20」より大きいため、性能劣化が発生したと判定されている。なお、論理ボリュームテーブル801に示すように、仮想論理ボリュームB(327)に論理ボリューム番号「05」が付与されている。
プール表示欄404には、性能問題が発生した仮想論理ボリュームA(326)等が所属するプールA(338)等(すなわち、仮想論理ボリュームA(326)等が割り当てられたプールA(338)等)に関する情報が表示される。プール表示欄404は、名称表示欄413、応答時間表示欄414、IOPS表示欄415、転送速度表示欄416及び状態表示欄417を含む。
名称表示欄413には、性能問題が発生した仮想論理ボリュームが所属するプールの名称(又は識別子)が表示される。
応答時間表示欄414には、性能問題が発生した仮想論理ボリュームが所属するプールにおいて、日時表示欄402が示す日時に測定されたI/Oの応答時間[sec]が表示される。この値は、プール統計情報テーブル1401のI/O応答時間格納欄1404から読み出される。
IOPS表示欄415には、性能問題が発生した仮想論理ボリュームが所属するプールにおいて、日時表示欄402が示す日時に測定された単位時間当たりのI/O回数[IO/s]が表示される。この値は、プール統計情報テーブル1401のIOPS格納欄1405から読み出される。
転送速度表示欄416には、性能問題が発生した仮想論理ボリュームが所属するプールにおいて、日時表示欄402が示す日時に測定された転送速度[MB/s]が表示される。この値は、プール統計情報テーブル1401の転送速度格納欄1406から読み出される。
状態表示欄417には、性能問題が発生した仮想論理ボリュームが所属するプールの状態(具体的には、発生している性能問題の種類)が表示される。ここに表示される状態は、応答時間表示欄414、IOPS表示欄415又は転送速度表示欄416に表示されている値及びそれらに対応する閾値(後述する図15参照)に基づいて判定される。
図4の例では、プール表示欄404の第1行の名称表示欄413、応答時間表示欄414、IOPS表示欄415、転送速度表示欄416及び状態表示欄417に、それぞれ、「A」、「0.13」、「8.7」、「48.3」及び「正常」が表示されている。この行は、仮想ボリューム表示欄403の第1行に対応する。この場合、論理ボリューム番号「05」が付与された仮想論理ボリュームB(327)は、プールA(338)に所属している。プールA(338)の応答時間、IOPS及び転送速度は、それぞれ、制御情報テーブル1501のプール性能劣化判定I/O応答時間閾値格納欄1505、プール過負荷判定IOPS閾値格納欄1506及びプール過負荷判定転送速度閾値格納欄1507に格納された値を超えない。このため、仮想論理ボリュームB(327)は正常であると判定される。
処置方法表示欄405には、発生した性能問題を解決するために有効であると推定される方法等が表示される。処置方法表示欄405は、問題解決策表示欄418及び実行ボタン419を含む。
問題解決策表示欄418には、発生した性能問題を解決するために有効であると推定される方法(すなわち問題解決策)が表示される。一つの仮想論理ボリュームの性能問題を解決するために複数の問題解決策が問題解決策表示欄418に表示されてもよい。問題解決策表示欄418に表示される値は、後述する選択ボリュームテーブル1601の対処法種別格納欄1603及び対処法パラメータ格納欄1604から読み出される。
実行ボタン419は、表示された問題解決策の実行をユーザが指示するために、問題解決策ごとに表示される。ユーザは、性能管理クライアント104の入力装置(図示省略)を用いて実行ボタン419を操作する(具体的には、例えばマウスを用いて実行ボタン419をクリックする)ことによって、問題解決策の実行を指示することができる。
図4の例では、処置方法表示欄405の第1行の問題解決策表示欄418に、「プールCに移動」が表示される。この行は、仮想ボリューム表示欄403及びプール表示欄404の第1行に対応する。この場合、仮想論理ボリュームB(327)に発生した性能劣化に対する解決策、すなわち、仮想論理ボリュームB(327)をプールC(340)に移動することが表示されている。
例えば、ユーザが「プールCに移動」に対応する実行ボタン419を操作すると、仮想論理ボリュームB(327)をプールC(340)に移動させる指示が性能管理クライアント104から性能管理サーバ110に送信される。性能管理ソフト120は、その指示に従って処理を実行する(後述する図26のステップ2602参照)。
移動先プール表示欄420には、処置方法表示欄405に表示された問題解決策によって移動先として指定されたプールに関する情報が表示される。処置方法表示欄405において、いずれのプールも移動先として指定されていない場合、移動先プール表示欄420は表示されなくてもよい。移動先プール表示欄420は、名称表示欄421、応答時間表示欄422、IOPS表示欄423、転送速度表示欄424、状態表示欄425及び空き容量表示欄426を含む。
名称表示欄421には、処置方法表示欄405に表示された問題解決策によって移動先として指定されたプールの名称(又は識別子)が表示される。
応答時間表示欄422には、指定されたプールにおいて、日時表示欄402が示す日時に測定されたI/Oの応答時間[sec]が表示される。この値は、プール統計情報テーブル1401のI/O応答時間格納欄1404から読み出される。
IOPS表示欄423には、指定されたプールにおいて、日時表示欄402が示す日時に測定された単位時間当たりのI/O回数[IO/s]が表示される。この値は、プール統計情報テーブル1401のIOPS格納欄1405から読み出される。
転送速度表示欄424には、指定されたプールにおいて、日時表示欄402が示す日時に測定された転送速度[MB/s]が表示される。この値は、プール統計情報テーブル1401の転送速度格納欄1406から読み出される。
状態表示欄425には、指定されたプールの状態(具体的には、発生している性能問題の種類)が表示される。ここに表示される状態は、応答時間表示欄422、IOPS表示欄423又は転送速度表示欄424に表示されている値及びそれらに対応する閾値(図15参照)に基づいて判定される。
空き容量表示欄426には、指定されたプールの空き容量が表示される。指定されたプールの空き容量は、指定されたプールに定義された容量、及び、指定されたプールに所属する仮想論理ボリュームが使用している容量に基づいて算出される。指定されたプールに定義された容量は、後述するプール・プールボリューム間関連テーブル1201及び論理ボリュームテーブル801に基づいて算出することができる。指定されたプールに所属する仮想論理ボリュームが使用している容量は、後述する仮想論理ボリューム・プール間関連テーブル1101及びボリューム統計情報テーブル1301に基づいて算出することができる。
図4の例では、移動先プール表示欄420に、プールC(340)に関する情報が表示されている。これは、処置方法表示欄405の第1行に「プールCに移動」が表示されているためである。ユーザは、名称表示欄421、応答時間表示欄422、IOPS表示欄423、転送速度表示欄424、状態表示欄425及び空き容量表示欄426に表示された値に基づいて、仮想論理ボリュームB(327)をプールC(340)に移動するか、あるいは移動しないかを判定することができる。
例えば、応答時間表示欄422、IOPS表示欄423及び転送速度表示欄424に表示された値の少なくとも一つが、制御情報テーブル1501に格納された閾値を越える場合、又は、状態表示欄425に「正常」以外の値が表示されている場合、又は、空き容量表示欄426に所定の閾値を超える値が表示されている場合、ユーザは、仮想論理ボリュームB(327)をプールC(340)に移動しないと判定してもよい。
次に、性能管理ソフト120が使用するリソース間関連情報209のテーブル構成及びテーブル構造の一例を、図5〜図10を参照して説明する。リソース間関連情報209は、アプリケーション・ファイル間関連テーブル501、ファイル・ボリューム間関連テーブル601、ボリューム・論理ボリューム間関連テーブル701、論理ボリュームテーブル801、複合論理ボリューム・要素論理ボリューム間関連テーブル901及び実論理ボリューム・アレイグループ間関連テーブル1001からなる。これらのテーブルの内容は、エージェント情報収集部212がアプリケーションエージェント112、ホストエージェント114及びストレージエージェント118から収集した情報に基づいて作成される。
図5は、本発明の一実施形態のアプリケーション・ファイル間関連テーブル501の構造の一例を示す説明図である。
アプリケーション・ファイル間関連テーブル501は、アプリケーションとファイルリソースとの間の性能の依存関係を記録するためのものであり、ホストサーバ識別子格納欄502、アプリケーション識別子格納欄503及びファイル識別子格納欄504からなる。テーブルの各行は、アプリケーションとファイルの間の依存関係の一つに対応する。
ホストサーバ識別子格納欄502には、各ホストサーバの識別子が格納される。
アプリケーション識別子格納欄503には、各ホストサーバにおいて稼動するアプリケーション(すなわち、各ホストサーバのCPU151によって実行されるアプリケーション)の識別子が格納される。
ファイル識別子格納欄504には、各アプリケーションがI/Oを発行するファイルの識別子が格納される。
図5では例えば、テーブルの第1行のホストサーバ識別子格納欄502、アプリケーション識別子格納欄503及びファイル識別子格納欄504に、それぞれ、「ホストサーバA」、「アプリケーションA」及び「ファイルA」が格納されている。これは、ホストサーバA(301)上のアプリケーションA(305)がファイルA(309)に対してI/Oを発行するという関係を示す。このテーブルの内容は、エージェント情報収集部212がアプリケーションエージェント112から収集した情報に基づいて作成される。
図6は、本発明の一実施形態のファイル・ボリューム間関連テーブル601の構造の一例を示す説明図である。
ファイル・ボリューム間関連テーブル601は、ファイルとそのファイルが割り当てられるボリュームとの関係を記録するためのものであり、ホストサーバ識別子格納欄602、ファイル識別子格納欄603及びボリューム識別子格納欄604からなる。テーブルの各行は、ファイルとボリュームの割り当ての関係の一つに対応する。
ホストサーバ識別子格納欄602には、各ホストサーバの識別子が格納される。
ファイル識別子格納欄603には、各ホストサーバ上のファイルの識別子が格納される。
ボリューム識別子格納欄604には、各ファイルが割り当てられるボリュームの識別子が格納される。
図6では例えば、テーブルの第1行のホストサーバ識別子格納欄602、ファイル識別子格納欄603及びボリューム識別子格納欄604に、それぞれ、「ホストサーバA」、「ファイルA」及び「ボリュームA」が格納されている。これは、ホストサーバA(301)上のファイルA(309)がボリュームA(315)に割り当てられているという関係を示す。このテーブルの内容は、エージェント情報収集部212がホストエージェント114から収集した情報に基づいて作成される。
図7は、本発明の一実施形態のボリューム・論理ボリューム間関連テーブル701の構造の一例を示す説明図である。
ボリューム・論理ボリューム間関連テーブル701は、ホストサーバ側のボリュームとそのボリュームが割り当てられるストレージ装置側の論理ボリュームとの関係を記録するためのものであり、ホストサーバ識別子格納欄702、ボリューム識別子格納欄703及び論理ボリューム番号格納欄704からなる。テーブルの各行は、ボリュームと論理ボリュームの割り当ての関係の一つに対応する。
ホストサーバ識別子格納欄702には、各ホストサーバの識別子が格納される。
ボリューム識別子格納欄703には、各ホストサーバ上のボリュームの識別子が格納される。
論理ボリューム番号格納欄704には、各ボリュームが割り当てられる論理ボリュームに付与された論理ボリューム番号が格納される。
図7では例えば、テーブルの第1行のホストサーバ識別子格納欄702、ボリューム識別子格納欄703及び論理ボリューム番号格納欄704に、それぞれ、「ホストサーバA」、「ボリュームA」及び「01」が記録されている。後で図8を参照して説明するように、論理ボリューム番号「01」は、複合論理ボリュームA(323)に付与されている。このため、第1行は、ホストサーバA(301)上のボリュームA(315)が複合論理ボリュームA(323)に割り当てられているという関係を示す。このテーブルの内容は、エージェント情報収集部212がホストエージェント114から収集した情報に基づいて作成される。
図8は、本発明の一実施形態の論理ボリュームテーブル801の構造の一例を示す説明図である。
論理ボリュームテーブル801は、ストレージA(322)内の各論理ボリューム(すなわち、実論理ボリューム、仮想論理ボリューム、複合論理ボリューム又はプールボリューム)の属性を記録するためのものである。論理ボリュームテーブル801は、論理ボリューム識別子格納欄802、ボリューム種別格納欄803、論理ボリューム番号格納欄804、定義容量格納欄805及び使用状態格納欄806からなる。テーブルの各行は、一つの論理ボリュームに対応する。
論理ボリューム識別子格納欄802には、論理ボリュームの識別子が格納される。
ボリューム種別格納欄803には、論理ボリュームの種別を表すコードが格納される。種別コードは、複合論理ボリュームを示す「複合」、仮想論理ボリュームを示す「仮想」、実論理ボリュームを示す「実」、又は、プールボリュームを示す「プール」である。
論理ボリューム番号格納欄804には、各論理ボリュームに付与された論理ボリューム番号が格納される。論理ボリューム番号は、ホストサーバA(301)〜ホストサーバD(304)がアクセス先として指定する番号である。ストレージA(322)の制御部163は、論理ボリューム番号格納欄804及び論理ボリューム識別子格納欄802を参照することによって、アクセス先として指定された論理ボリュームを特定し、特定された論理ボリュームへのアクセスを実行する。
定義容量格納欄805には、各論理ボリュームに定義された容量を示す値が格納される。
使用状態格納欄806には、各論理ボリュームの使用状態を示す値が格納される。例えば、使用状態格納欄806には、「使用中」又は「未使用」が格納される。「使用中」は、論理ボリュームがいずれかのホストサーバA(301)等によって使用されていることを示す。「未使用」は、論理ボリュームがいずれのホストサーバA(301)等によっても使用されていないことを示す。例えば、図3によれば、実論理ボリュームB(335)及び実論理ボリュームC(336)は、どのホストサーバA(301)等にも割り当てられていない。この場合、実論理ボリュームB(335)及び実論理ボリュームC(336)に対応する使用状態格納欄806には、「未使用」が格納される。マイグレーション先として指定される論理ボリュームの使用状態は「未使用」である必要がある。マイグレーションが終了した後、マイグレーション先の論理ボリュームの使用状態は「使用中」に変更される。
図8の例では、テーブルの第1行の論理ボリューム識別子格納欄802、ボリューム種別格納欄803、論理ボリューム番号格納欄804、定義容量格納欄805及び使用状態格納欄806に、それぞれ、「複合論理ボリュームA」、「複合」、「01」、「20,000」及び「使用中」が格納されている。これは、複合論理ボリュームA(323)が、20,000メガバイト(MB)の容量を定義され、現在使用されている複合論理ボリュームであること、及び、アクセス先として論理ボリューム番号「01」を指定された場合、そのアクセスは複合論理ボリュームA(323)に対して実行されることを示す。
図9は、本発明の一実施形態の複合論理ボリューム・要素論理ボリューム間関連テーブル901の構造の一例を示す説明図である。
複合論理ボリューム・要素論理ボリューム間関連テーブル901は、複合論理ボリュームA(323)等と、それらを構成する論理ボリュームとの関係を記録するためのものである。複合論理ボリューム・要素論理ボリューム間関連テーブル901は、論理ボリューム識別子格納欄902及び論理ボリューム番号格納欄903からなる。
論理ボリューム識別子格納欄902には、各複合論理ボリュームA(323)等の識別子が格納される。
論理ボリューム番号格納欄903には、各複合論理ボリュームA(323)等を構成する論理ボリュームに付与された論理ボリューム番号が格納される。
図9の例では、第1行及び第2行の論理ボリューム識別子格納欄902のいずれにも、「複合論理ボリュームA」が格納されている。一方、第1行及び第2行の論理ボリューム番号格納欄903に、それぞれ、「04」及び「05」が格納されている。これは、複合論理ボリュームA(323)が、論理ボリューム番号「04」及び「05」が付与された二つの論理ボリュームによって構成されることを示す。図8によれば、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)に、それぞれ、論理ボリューム番号「04」及び「05」が付与されている。したがって、複合論理ボリュームA(323)は、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)によって構成されている(図3参照)。
図10は、本発明の一実施形態の実論理ボリューム・アレイグループ間関連テーブル1001の構造の一例を示す説明図である。
実論理ボリューム・アレイグループ間関連テーブル1001は、実論理ボリュームA(334)等又はプールボリュームA(341)等と、それらを含むアレイグループA(349)等との関係を記録するためのものである。実論理ボリューム・アレイグループ間関連テーブル1001は、論理ボリューム識別子格納欄1002及びアレイグループ識別子格納欄1003からなる。
論理ボリューム識別子格納欄1002には、各実論理ボリュームA(334)等又はプールボリュームA(341)等の識別子が格納される。
アレイグループ識別子格納欄1003には、各実論理ボリュームA(334)等又はプールボリュームA(341)等を含むアレイグループA(349)等の識別子が格納される。
図10の例では、第1行の論理ボリューム識別子格納欄1002及びアレイグループ識別子格納欄1003に、それぞれ、「実論理ボリュームA」及び「アレイグループE」が格納されている。これは、アレイグループE(353)に含まれる記憶領域の一部が、実論理ボリュームA(334)として割り当てられていることを示す。
次に、プール構成情報208のテーブル構成及びテーブル構造の一例を、図11及び図12を参照して説明する。
図11及び図12は、性能管理ソフト120が使用するプール構成情報208のテーブル構成及びテーブル構造の一例を示す図である。プール構成情報208は、仮想論理ボリューム・プール間関連テーブル1101及びプール・プールボリューム間関連テーブル1201からなる。これらのテーブルの内容は、エージェント情報収集部212がストレージエージェント118から収集した情報に基づいて作成される。
図11は、本発明の一実施形態の仮想論理ボリューム・プール間関連テーブル1101の構造の一例を示す説明図である。
仮想論理ボリューム・プール間関連テーブル1101は、仮想論理ボリュームとその仮想論理ボリュームが割り当てられるプールとの関係を記録するためのものであり、論理ボリューム識別子格納欄1102及びプール識別子格納欄1103からなる。テーブルの各行は、仮想論理ボリュームとプールの割り当てに関する関係の一つに対応する。
論理ボリューム識別子格納欄1102には、各仮想論理ボリュームA(326)等の識別子が格納される。
プール識別子格納欄1103には、各仮想論理ボリュームA(326)等が割り当てられたプールA(338)等の識別子が格納される。
図11では例えば、テーブルの第1行の論理ボリューム識別子格納欄1102及びプール識別子格納欄1103に、それぞれ、「仮想論理ボリュームA」及び「プールA」が格納されている。これは、仮想論理ボリュームA(326)がプールA(338)に割り当てられていることを示す。
図12は、本発明の一実施形態のプール・プールボリューム間関連テーブル1201の構造の一例を示す説明図である。
プール・プールボリューム間関連テーブル1201は、プールA(338)等と、それらに割り当てられたプールボリュームA(341)等との関係を記録するためのものである。プール・プールボリューム間関連テーブル1201は、プール識別子格納欄1202及び論理ボリューム識別子格納欄1203からなる。
プール識別子格納欄1202には、各プールA(338)等の識別子が格納される。
論理ボリューム識別子格納欄1203には、各プールA(338)等に割り当てられたプールボリュームA(341)等の識別子が格納される。
図12の例では、第1行から第4行までのプール識別子格納欄1202に、「プールA」が格納されている。一方、第1行から第4行までの論理ボリューム識別子格納欄1203に、それぞれ、「プールボリュームA」、「プールボリュームB」、「プールボリュームC」及び「プールボリュームD」が格納されている。これは、プールボリュームA(341)、プールボリュームB(342)、プールボリュームC(343)及びプールボリュームD(344)が、プールA(338)に割り当てられていることを示す。
次に、性能管理ソフト120が使用するボリューム統計情報204のテーブル構成及びテーブル構造の一例を、図13を参照して説明する。ボリューム統計情報204は、ボリューム統計情報テーブル1301からなる。
図13は、本発明の一実施形態のボリューム統計情報テーブル1301の構造の一例を示す説明図である。
ボリューム統計情報テーブル1301は、所定のタイミングで(例えば所定の周期で)測定された仮想論理ボリュームの統計値を記録するためのものであり、エージェント情報収集部212がストレージエージェント118から収集した情報に基づいて作成される。ボリューム統計情報テーブル1301は、日時格納欄1302、論理ボリューム識別子格納欄1303、I/O応答時間格納欄1304、IOPS格納欄1305、転送速度格納欄1306及び使用容量格納欄1307からなる。ボリューム統計情報テーブル1301の各行は、ある日時における各仮想論理ボリュームの統計値を表す。
日時格納欄1302には、統計値を収集した日時が格納される。
論理ボリューム識別子格納欄1303には、統計値の収集対象となった仮想論理ボリュームの識別子が格納される。
I/O応答時間格納欄1304には、収集したI/O応答時間の値が格納される。
IOPS格納欄1305には、収集したIOPS(1秒あたりのI/O回数)の値が格納される。
転送速度格納欄1306には、収集した転送速度の値が格納される。
使用容量格納欄1307には、収集した使用容量の値が格納される。
図13の例では、テーブルの第1行の各欄1302〜1307に、それぞれ、「2007/04/07 10:34:00」、「仮想論理ボリュームA」、「0.04」、「9.5」、「27.1」及び「10,000」が格納されている。これは、2007年4月7日10時34分に、仮想論理ボリュームA(326)に関するI/O応答時間の値として0.04[秒]が、IOPSの値として9.5[IO回/秒]が、転送速度の値として27.1[MB/秒]が、使用容量の値として10,000[MB]が取得されたことを示す。
次に、性能管理ソフト120が使用するプール統計情報201のテーブル構成及びテーブル構造の一例を、図14を参照して説明する。プール統計情報201は、プール統計情報テーブル1401からなる。
図14は、本発明の一実施形態のプール統計情報テーブル1401の構造の一例を示す説明図である。
プール統計情報テーブル1401は、仮想論理ボリュームの統計値に基づいて算出されたプールの統計値を記録するためのものであり、プール性能・負荷算出部202がボリューム統計情報テーブル1301及び仮想論理ボリューム・プール間関連テーブル1101の内容に基づいて算出した内容を含む。例えば、プールのI/O応答時間、IOPS及び転送速度は、それぞれ、そのプールに属するすべての仮想論理ボリュームのI/O応答時間、IOPS及び転送速度を平均(又は合計)することによって算出される。プール統計情報テーブル1401は、日時格納欄1402、プール識別子格納欄1403、I/O応答時間格納欄1404、IOPS格納欄1405及び転送速度格納欄1406からなる。プール統計情報テーブル1401の各行は、ある日時における各プールの統計値を表わす。
日時格納欄1402には、統計値が収集された日時が格納される。
プール識別子格納欄1403には、プールの識別子が格納される。
I/O応答時間格納欄1404には、算出されたI/O応答時間の値が格納される。
IOPS格納欄1405には、算出されたIOPSの値が格納される。
転送速度格納欄1406には、算出された転送速度の値が格納される。
図14の例では、テーブルの第1行に、「2007/04/07 10:34:00」、「プールA」、「0.06」、「12.4」及び「25.2」が格納されている。これは、2007年4月7日10時34分に収集された情報に基づいて、プールA(338)に関するI/O応答時間の値として0.06[秒]が、IOPSの値として12.4[IO回/秒]が、転送速度の値として25.2[MB/秒]が算出されたことを示す。
次に、性能管理ソフト120が使用する制御情報205について説明する。制御情報205は、制御情報テーブル1501からなる。
図15は、本発明の一実施形態の制御情報テーブル1501の構造の一例を示す説明図である。
制御情報テーブル1501は、性能管理ソフト120が種々の制御を実行するために参照する情報(例えば、性能管理ソフト120が種々の判定を実行するために参照される閾値)を記録するためのものであり、以下に説明する格納欄1502〜1513からなる。性能管理ソフト120のユーザ定義部206は、性能管理クライアント104からの要求に従って、制御情報テーブル1501に情報を格納する。
ボリューム性能劣化判定I/O応答時間閾値格納欄1502には、仮想論理ボリュームの性能が劣化したか否かを判定するために使用されるI/O応答時間の閾値が格納される。図15の例では、I/O応答時間が0.20[秒]を超えた仮想論理ボリュームは、性能が劣化したと判定される。
ボリューム過負荷判定IOPS閾値格納欄1503には、仮想論理ボリュームが過負荷の状態であるか否かを判定するために使用されるIOPSの閾値が格納される。図15の例では、IOPSが14.0[IO回/秒]を超えた仮想論理ボリュームは、過負荷の状態であると判定される。
ボリューム過負荷判定転送速度閾値格納欄1504には、仮想論理ボリュームが過負荷の状態であるか否かを判定するために使用される転送速度の閾値が格納される。図15の例では、転送速度が70.0[MB/秒]を超えた仮想論理ボリュームは、過負荷の状態であると判定される。
プール性能劣化判定I/O応答時間閾値格納欄1505には、プールの性能が劣化したか否かを判定するために使用されるI/O応答時間の閾値が格納される。図15の例では、I/O応答時間が0.15[秒]を超えたプールA(338)等は、性能が劣化したと判定される。
プール過負荷判定IOPS閾値格納欄1506には、プールが過負荷の状態であるか否かを判定するために使用されるIOPSの閾値が格納される。図15の例では、IOPSが12.0[IO回/秒]を超えたプールA(338)等は、過負荷の状態であると判定される。
プール過負荷判定転送速度閾値格納欄1507には、プールが過負荷の状態であるか否かを判定するために使用される転送速度の閾値が格納される。図15の例では、転送速度が60.0[MB/秒]を超えたプールA(338)等は、過負荷の状態であると判定される。
性能劣化ボリューム選択I/O応答時間閾値格納欄1508には、仮想論理ボリューム又はプールに発生した性能問題を解決するための対策の対象として仮想論理ボリュームを選択するために使用されるI/O応答時間の閾値が格納される。図15の例では、I/O応答時間が0.20[秒]を超えた論理ボリュームが、性能問題を解決するための対策の対象として選択される。
過負荷ボリューム選択IOPS閾値格納欄1509には、仮想論理ボリューム又はプールに発生した性能問題を解決するための対策の対象として仮想論理ボリュームを選択するために使用されるIOPSの閾値が格納される。図15の例では、IOPSが14.0[IO回/秒]を超えた論理ボリュームが、性能問題を解決するための対策の対象として選択される。
過負荷ボリューム選択転送速度閾値格納欄1510には、仮想論理ボリューム又はプールに発生した性能問題を解決するための対策の対象として仮想論理ボリュームを選択するために使用される転送速度の閾値が格納される。図15の例では、転送速度が70.0[MB/秒]を超えた論理ボリュームが、性能問題を解決するための対策の対象として選択される。
最低ボリューム充填率格納欄1511には、最低ボリューム充填率が格納される。最低ボリューム充填率は、仮想論理ボリュームの充填率の閾値として使用される。仮想論理ボリュームの充填率とは、仮想論理ボリュームに定義されている容量に対する、実際に使用されている容量の割合である。具体的には、各仮想論理ボリュームA(326)等の充填率は、ボリューム統計情報テーブル1301の使用容量格納欄1307に格納されている値を、定義容量格納欄805に格納されている値で除算することによって算出される。
後で詳細に説明するように、仮想論理ボリュームに発生した性能問題を解決する対策の一つとして、仮想論理ボリュームが実論理ボリューム化される場合がある。しかし、仮想論理ボリュームでは、定義された容量のうち、実際に使用されている容量に相当する記憶領域のみが割り当てられるのに対し、実論理ボリュームでは、使用されているか否かに拘らず、定義されている全容量に相当する記憶領域が割り当てられる。このため、記憶領域を効率的に利用するという仮想論理ボリュームのメリットは、仮想論理ボリュームを実論理ボリューム化することによって失われる。仮想論理ボリュームの充填率が低いほど、その仮想論理ボリュームを実論理ボリューム化することによって失われるメリットが大きいといえる。
このため、後で詳細に説明するように、性能問題が発生した仮想論理ボリュームのうち、充填率が最低ボリューム充填率を超えるものが、性能問題を解決する対策の対象として優先的に選択される(図19等参照)。図15の例では、充填率が70.0[%]を超えた仮想論理ボリュームが、性能問題を解決する対策の対象として優先的に選択される。
動作モード格納欄1512には、性能管理ソフト120の動作モードを表すコードが格納される。動作モードを表すコードには「自動」と「手動」がある。動作モードが「手動」である場合、性能管理ソフト120は、仮想論理ボリュームの性能問題(例えば、性能劣化又は過負荷の発生)を解決するための対策を示す情報をユーザに対して表示し、ユーザからの指示を待つ。ユーザから対策を実行する指示を受けると、性能管理ソフト120は、指示された対策を実行する。一方、動作モードが「自動」である場合、性能管理ソフト120は、仮想論理ボリュームの性能問題を解決するための対策を自動的に実行する。
探索モード格納欄1513には、性能管理ソフト120のボリューム選択部207の探索モードを表すコードが格納される。探索モードのコードには「サーバ」、「アプリケーション」及び「単独」がある。
ここで、探索モードについて説明する。後で詳細に説明するように、性能管理ソフト120は、仮想論理ボリュームの性能問題を解決するために、仮想論理ボリュームを別のプールに移動させる、又は、仮想論理ボリュームを実論理ボリューム化する等の対策を実行する。一つのホストサーバ又は一つのアプリケーションが、複数の仮想論理ボリュームに対してI/Oを発行する場合がある。それらの複数のうち一つの仮想論理ボリュームに性能問題が発生した場合、それらの複数の仮想論理ボリューム全てに対して同一の対策を実行することによって、性能問題をより確実に解決することが期待される。
探索モードが「単独」である場合、性能問題が発生した仮想論理ボリュームのみが、その性能問題を解決するための対策の対象として選択される。探索モードが「サーバ」である場合、性能問題が発生した仮想論理ボリューム、及び、その仮想論理ボリュームを使用しているホストサーバが使用する他の仮想論理ボリュームが、対策の対象として選択される。探索モードが「アプリケーション」である場合、性能問題が発生した仮想論理ボリューム、及び、その仮想論理ボリュームを使用しているアプリケーションが使用する他の仮想論理ボリュームが、対策の対象として選択される。
次に、性能管理ソフト120が使用する選択ボリューム情報210について説明する。選択ボリューム情報210は、選択ボリュームテーブル1601からなる。
図16は、本発明の一実施形態の選択ボリュームテーブル1601の構造の一例を示す説明図である。
選択ボリュームテーブル1601には、仮想論理ボリュームの性能問題を解決するための対策を示す情報が格納される。選択ボリュームテーブル1601は、論理ボリューム識別子格納欄1602、対処法種別格納欄1603及び対処法パラメータ格納欄1604からなる。
論理ボリューム識別子格納欄1602には、論理ボリュームの識別子が格納される。
対処法種別格納欄1603には、性能問題への対処法の種別を表すコードが格納される。種別コードには「プール移動」及び「実論理ボリューム化」がある。「プール移動」は、性能問題が発生した仮想論理ボリューム(例えば仮想論理ボリュームA(326))を、それが属するプール(例えばプールA(338))から別のプールに移動する処理を示す。「実論理ボリューム化」は、性能問題が発生した仮想論理ボリュームA(326)等を実論理ボリュームA(334)等にマイグレーションする処理を示す。
対処法パラメータ格納欄1604には、性能問題への対処法のパラメータが格納される。具体的には、対処法種別格納欄1603の値が「プール移動」である場合、対処法パラメータ格納欄1604には、移動先のプールの識別子が格納される。一方、対処法種別格納欄1603の値が「実論理ボリューム化」である場合、対処法パラメータ格納欄1604は使用されない。
次に、性能管理ソフト120が実行する処理を、フローチャートを参照して説明する。
図17は、本発明の一実施形態の性能管理ソフト120に含まれる性能劣化・過負荷検知部203の処理手順を示すフローチャートである。
図17に示す処理手順は、所定のタイミングで起動される。例えば、図17に示す処理手順は、タイマー(図示省略)等を使い、スケジューリング設定に従って定期的に起動される。
図17の説明において性能劣化・過負荷検知部203が実行する処理は、実際には、性能管理ソフト120を実行するCPU159によって実行される。
まずステップ1701において、性能劣化・過負荷検知部203は、ボリューム統計情報テーブル1301の日時格納欄1302に格納されている値のうち最新の日時を取得する。
次にステップ1702において、性能劣化・過負荷検知部203は、ボリューム統計情報テーブル1301に登録されている行を先頭から順に検索して、日時格納欄1302の値がステップ1701の最新日時と一致するものを1行取得し、ステップ1703に進む。
ステップ1703において、性能劣化・過負荷検知部203は、ステップ1702の検索条件を満足する行(すなわち日時格納欄1302の値がステップ1701の最新日時と一致する行)が見つかったか否かを判定する。検索条件を満足する行が見つからなかったと判定された場合、ボリューム統計情報テーブル1301に関する処理は完了したため、処理はステップ1707に進む。一方、検索条件を満足する行が見つかったと判定された場合、処理はステップ1704に進む。
ステップ1704において、性能劣化・過負荷検知部203は、ステップ1702で見つかった行のI/O応答時間格納欄1304の値と制御情報テーブル1501のボリューム性能劣化判定I/O応答時間閾値格納欄1502の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合(すなわち図17に示す「閾値超過」の場合)、該当仮想論理ボリュームに性能劣化が発生したと判定されるため、処理はステップ1712に進む。ここで、該当仮想論理ボリュームとは、ステップ1702の検索によって見つかった行の論理ボリューム識別子格納欄1303に格納された識別子によって識別される仮想論理ボリュームA(326)等である。
一方、ステップ1704において、前者の値が後者の閾値を超えていないと判定された場合(すなわち図17に示す「未達」の場合)、該当仮想論理ボリュームに性能劣化が発生していないと判定されるため、処理はステップ1705に進む。閾値超過の具体的な判定方法としては以下の第1から第4のいずれかの方法が用いられる。
第1の方法によれば、I/O応答時間の現在値が閾値より大きい場合、閾値超過と判定される。一方、I/O応答時間の現在値が後者の閾値より小さい場合、未達と判定される。
第2の方法によれば、I/O応答時間の過去から現在までの値と閾値とが比較される。その結果、I/O応答時間が閾値を連続して超過した時間が所定の基準値を超えていた場合、閾値超過と判定される。一方、I/O応答時間が閾値を連続して超過した時間が所定の基準値を超えていない場合、未達と判定される。
第3の方法によれば、I/O応答時間の過去から現在までの値と閾値とが比較される。その結果、I/O応答時間が閾値を超過した時間の合計が所定の基準値を超えていた場合、閾値超過と判定される。一方、I/O応答時間が閾値を超過した時間の合計が既定の基準値を超えていない場合、未達と判定される。
第4の方法によれば、I/O応答時間の過去から現在までの値に基づいて将来の推移が予測される。そして、予測値が閾値を超過するまでの時間が所定の基準値を下回る場合、閾値超過と判定される。一方、予測値が閾値を超過するまでの時間が所定の基準値を下回らない場合、未達と判定される。
ここで、第4の判定方法について、図24を参照して説明する。
図24は、本発明の一実施形態において実行される性能劣化の判定方法を説明する図である。
図24は、横軸を日時、縦軸を応答時間[秒]とするグラフである。
測定値2401は、ある仮想論理ボリューム(例えば、仮想論理ボリュームA(326))のI/O応答時間の実測値である。測定値2401は、複数回(例えば定期的に)測定され、グラフ上にプロットされる。
閾値2402は、性能が劣化したか否かを判定するために使用されるI/O応答時間の閾値である。図15の例に従えば、ボリューム性能劣化判定I/O応答時間閾値格納欄に格納されている「0.20[秒]」が閾値2402として設定される。
予測値2403は、測定値2401に基づいて算出される。このとき、どのような算出方法が使用されてもよい。例えば、予測値2403は、最小二乗法のような周知の方法によって算出することができる。
閾値超過予想日時2406は、予測値2403が閾値2402を超える日時である。図24の例に示すように予測値2403が増加傾向にある場合、予測値2403を示す破線が閾値2402を示す実線と交差する日時が、閾値超過予想日時2406である。
閾値超過予想時間2407は、現在日時2405から閾値超過予想日時2406までの時間である。
図17のステップ1704において第4の方法が使用される場合、閾値超過予想時間2407が所定の基準値を下回るか否かが判定される。閾値超過予想時間2407が所定の基準値を下回ると判定された場合、「閾値超過」と判定される。一方、閾値超過予想時間2407が所定の基準値を下回らないと判定された場合、「未達」(すなわち、閾値を超過しない)と判定される。
再び図17を参照して、ステップ1705以降の処理を説明する。
ステップ1705において、性能劣化・過負荷検知部203は、ステップ1702で見つかった行のIOPS格納欄1305の値と制御情報テーブル1501のボリューム過負荷判定IOPS閾値格納欄1503の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合、該当仮想論理ボリュームに過負荷が発生したと判定されるため、処理はステップ1712に進む。一方、前者の値が後者の閾値を超えていないと判定された場合、該当仮想論理ボリュームに過負荷が発生していないと判定される。この場合、処理はステップ1706に進む。閾値超過の具体的な判定方法として、ステップ1704と同様の方法が用いられる。ステップ1704の第1から第4の方法の説明は、「I/O応答時間」の代わりに「IOPS」を使用することによって、ステップ1705に適用することができる。
ステップ1706において、性能劣化・過負荷検知部203は、ステップ1702で見つかった行の転送速度格納欄1306の値と制御情報テーブル1501のボリューム過負荷判定転送速度閾値格納欄1504の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合、該当仮想論理ボリュームに過負荷が発生したと判定されるため、処理はステップ1712に進む。一方、前者の値が後者の閾値を超えていないと判定された場合、該当仮想論理ボリュームに過負荷が発生していないと判定される。この場合、処理はステップ1702に戻る。閾値超過の具体的な判定方法として、ステップ1704と同様の方法が用いられる。ステップ1704の第1から第4の方法の説明は、「I/O応答時間」を「転送速度」で置き換えることによって、ステップ1706に適用することができる。
ステップ1707において、性能劣化・過負荷検知部203は、プール統計情報テーブル1401に登録されている行を先頭から順に検索して、日時格納欄1402の値がステップ1701の最新日時と一致するものを1行取得し、ステップ1708に進む。
ステップ1708において、性能劣化・過負荷検知部203は、ステップ1707の検索条件を満足する行(すなわち日時格納欄1402の値がステップ1701の最新日時と一致する行)が見つかったか否かを判定する。検索条件を満足する行が見つからなかったと判定された場合、プール統計情報テーブル1401に関する処理は完了したため、本手順を終了する。一方、検索条件を満足する行が見つかったと判定された場合、処理はステップ1709に進む。
ステップ1709において、性能劣化・過負荷検知部203は、ステップ1707で見つかった行のI/O応答時間格納欄1404の値と制御情報テーブル1501のプール性能劣化判定I/O応答時間閾値格納欄1505の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合、該当プールに性能劣化が発生したと判定されるため、処理はステップ1712に進む。ここで、該当プールとは、ステップ1707の検索によって見つかった行のプール識別子格納欄1403に格納された識別子によって識別されるプールA(338)等である。
一方、ステップ1709において、前者の値が後者の閾値を超えていないと判定された場合、該当プールに性能劣化が発生していないと判定されるため、処理はステップ1710に進む。閾値超過の具体的な判定方法として、ステップ1704と同様の方法が用いられる。
ステップ1710において、性能劣化・過負荷検知部203は、ステップ1707で見つかった行のIOPS格納欄1405の値と制御情報テーブル1501のプール過負荷判定IOPS閾値格納欄1506の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合、該当プールに過負荷が発生したと判定されるため、処理はステップ1712に進む。一方、前者の値が後者の閾値を超えていないと判定された場合、該当プールに過負荷が発生していないと判定される。この場合、処理はステップ1711に進む。閾値超過の具体的な判定方法として、ステップ1704と同様の方法が用いられる。
ステップ1711において、性能劣化・過負荷検知部203は、ステップ1707で見つかった行の転送速度格納欄1406の値と制御情報テーブル1501のプール過負荷判定転送速度閾値格納欄1507の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えていると判定された場合、該当プールに過負荷が発生したと判定されるため、処理はステップ1712に進む。一方、前者の値が後者の閾値を超えていないと判定された場合、該当プールに過負荷が発生していないと判定される。この場合、処理はステップ1707に戻る。閾値超過の具体的な判定方法として、ステップ1704と同様の方法が用いられる。
ステップ1712において、性能劣化・過負荷検知部203は、ボリューム選択部207の処理手順を呼び出す。次に、ボリューム選択部207の処理手順について、図18〜図23を参照して説明する。
図18〜図23は、性能管理ソフト120のボリューム選択部207の処理手順を示すフローチャートである。図18が全体の処理手順を示し、図19〜図23は図18の全体処理手順から呼び出される部分的な処理手順を示す。図18の全体処理手順は、性能劣化・過負荷検知部203によって起動されてもよいし、ユーザ操作を受けた性能管理クライアント104からの要求によって起動されてもよい。図18〜図23の説明においてボリューム選択部207が実行する処理は、実際には、性能管理ソフト120を実行するCPU159によって実行される。
最初に、図18〜図23に示す処理の概要を説明する。
図18〜図23に示す処理は、いずれかの仮想論理ボリュームに性能問題(すなわち性能劣化又は過負荷)が発生したときにそれを解決するために実行される。性能劣化は、複数の仮想論理ボリュームに対するI/Oが相互に干渉することによって発生している可能性がある。ある仮想論理ボリュームに過負荷が発生している場合、その仮想論理ボリュームに対するI/Oが他の仮想論理ボリュームに対するI/Oと干渉することによって、他の仮想論理ボリュームの性能を劣化させる可能性がある。
このため、性能問題が発生した仮想論理ボリュームが他の仮想論理ボリュームと干渉しにくくなるように、性能問題が発生した仮想論理ボリュームを移動させることによって、性能問題が解決することが期待される。仮想論理ボリュームの移動は、その仮想論理ボリュームを別のプールに移動させること又はその仮想論理ボリュームを実論理ボリューム化することに相当する。
本実施形態のストレージ装置131は、三つのプールすなわちプールA(338)〜プールC(340)を含む。ストレージ装置131内の仮想論理ボリュームA(326)〜仮想論理ボリュームH(333)は、それぞれ、プールA(338)〜プールC(340)のうちいずれかに所属する(図3参照)。
ホストサーバA(301)等のボリュームA(315)等は、いずれも、ストレージA(322)の論理ボリュームが新たに割り当てられた時点では、プールA(338)に所属する仮想論理ボリュームA(326)等に割り当てられていたか、又は、プールA(338)に所属する仮想論理ボリュームA(326)等のみで構成された複合ボリュームA(323)等に割り当てられていた。その後、プールA(338)に所属するいずれかの仮想論理ボリュームA(326)等に性能問題が発生した場合、その問題の解決策として、いずれかの仮想論理ボリュームをプールA(338)からプールB(339)又はプールC(340)に移動する処理が選択される(図18のステップ1802参照)。
ここで、「仮想論理ボリュームをプールA(338)からプールB(339)又はプールC(340)に移動する」とは、前述した通り(図1マイグレーション実行部135による論理ボリュームの移動機能に関する説明を参照)、プールA(338)に所属する移動元の仮想論理ボリュームA(326)等のデータをプールB(339)又はプールC(340)に所属する移動先の仮想論理ボリュームE(330)等又は仮想論理ボリュームG(332)等にコピーし、その後で、移動元の仮想論理ボリュームA(326)等に割り当てられている論理ボリューム番号と、移動先の仮想論理ボリュームE(330)等又は仮想論理ボリュームG(332)等に割り当てられている論理ボリューム番号とを入れ替えることを意味する。
具体的には、性能が劣化した仮想論理ボリューム(例えば、仮想論理ボリュームA(326))をプールC(340)に移動してもよいし(図19のステップ1901〜1905及び図20のステップ2001〜2005参照)、過負荷が発生した仮想論理ボリューム(例えば、仮想論理ボリュームC(328))をプールB(339)に移動してもよい(図19のステップ1907〜1911参照)。
プールB(339)に所属するいずれかの仮想論理ボリュームE(330)等に性能問題が発生した場合、その問題の解決策として、プールB(339)に所属し、かつ、性能が劣化した仮想論理ボリュームのうちいずれかの仮想論理ボリュームを実論理ボリューム化する処理が選択される(図18のステップ1803及び図21参照)。
ここで、「プールB(339)に所属する仮想論理ボリュームを実論理ボリューム化する」とは、プールB(339)に所属する移動元の仮想論理ボリュームE(330)等のデータをいずれのプールにも所属しない移動先の実論理ボリュームA(334)等にコピーし、その後で、移動元の仮想論理ボリュームE(330)等に割り当てられている論理ボリューム番号と、移動先の実論理ボリュームA(334)等に割り当てられている論理ボリューム番号とを入れ替えることを意味する。
プールC(340)に所属するいずれかの仮想論理ボリュームG(332)等に性能問題が発生した場合、その問題の解決策として、プールC(340)に所属し、かつ、性能劣化又は過負荷が発生した仮想論理ボリュームのうちいずれかの仮想論理ボリュームを実論理ボリューム化する処理が選択される(図18のステップ1804、図22及び図23参照)。
ここで、「プールC(340)に所属する仮想論理ボリュームを実論理ボリューム化する」とは、プールC(340)に所属する移動元の仮想論理ボリュームG(347)等のデータをいずれのプールにも所属しない移動先の実論理ボリュームA(334)等にコピーし、その後で、移動元の仮想論理ボリュームG(347)等に割り当てられている論理ボリューム番号と、移動先の実論理ボリュームA(334)等に割り当てられている論理ボリューム番号とを入れ替えることを意味する。
このように、本実施形態では、プールA(338)は仮想論理ボリュームが最初に所属するプール、プールB(339)は過負荷が発生した仮想論理ボリュームの移動先、プールC(340)は性能劣化が発生した仮想論理ボリュームの移動先である。しかし、このようなプールの使い分けは、性能問題が発生した仮想論理ボリュームを移動させる方法の一例に過ぎない。性能問題が発生した仮想論理ボリュームを移動させることによって、性能問題が発生した仮想論理ボリュームに対するI/Oがその他の仮想論理ボリュームに対するI/Oと干渉することを防ぐことができる。言い換えると、その移動の結果、性能問題が発生した論理ボリューム(すなわち性能問題が発生した仮想論理ボリューム、又は、それを実論理ボリューム化することによって生成された実論理ボリューム)に対するI/Oが、他の論理ボリュームに対するI/Oと干渉しなくなるか、あるいは、性能問題が発生した論理ボリュームに対するI/Oが、より少ない数の他の論理ボリュームに対するI/Oと干渉するようになる。このため、性能問題が解決することが期待される。
図18は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第1部分である。
まず、ステップ1801において、ボリューム選択部207は、選択ボリュームテーブル1601を初期化する。具体的には、ボリューム選択部207は、前回図18に示す手順を実行したときに選択ボリュームテーブル1601に登録した行をすべて削除する。
ステップ1802において、ボリューム選択部207は、プールA(338)に所属する仮想論理ボリュームについて、図19及び図20で詳細を説明する手順に従って選択処理を実行する。なお、図3の例では、プールA(338)に割り当てられた仮想論理ボリュームA(326)から仮想論理ボリュームD(329)が、プールA(338)に所属する仮想論理ボリュームである。
ステップ1803において、ボリューム選択部207は、プールB(339)に所属する仮想論理ボリュームについて、図21で詳細を説明する手順に従って選択処理を実行する。なお、図3の例では、プールB(339)に割り当てられた仮想論理ボリュームE(330)及び仮想論理ボリュームF(331)が、プールB(339)に所属する仮想論理ボリュームである。
ステップ1804において、ボリューム選択部207は、プールC(340)に所属する仮想論理ボリュームについて、図22及び図23で詳細を説明する手順に従って選択処理を実行する。なお、図3の例では、プールC(340)に割り当てられた仮想論理ボリュームG(332)及び仮想論理ボリュームH(333)が、プールC(340)に所属する仮想論理ボリュームである。
ステップ1804に示す選択処理の完了後、図18に示す手順を終了する。
図19は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第2部分である。
図19の処理手順は、図18のステップ1802の処理内容を詳細化したものの前半部分である。図19の処理によって、プールA(338)に所属する仮想論理ボリュームのうちプールB(339)又はプールC(340)に移動すべきものが選択される。
まず、ステップ1901において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ1902に進む。ここで、未処理の行とは、以下のステップ1903からステップ1905までに示す処理がまだ実行されていない行を意味する。
ステップ1902において、ボリューム選択部207は、ステップ1901の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行についてステップ1903からステップ1905までに示す処理が終了した。この場合、処理はステップ1906に進む。一方、未処理の行が見つかった場合、処理はステップ1903に進む。
ステップ1903において、ボリューム選択部207は、ステップ1901で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態であるか否かを判定する。以下、ステップ1906までの説明において、ステップ1901で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当行のプール識別子格納欄1103に「プールA」が格納されている場合、該当仮想論理ボリュームがプールA(338)に所属すると判定される。該当仮想論理ボリュームの使用状態は、論理ボリュームテーブル801内の該当仮想論理ボリュームに対応する行の使用状態格納欄806の値に基づいて判定される。
該当仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態である場合、処理はステップ1904に進む。該当仮想論理ボリュームがプールA(338)に所属しない、又は、「未使用」の状態である場合、処理はステップ1901に戻る。この時点の該当行は、ステップ1901に戻った後、処理済みとして扱われる。
ステップ1904において、ボリューム選択部207は、該当仮想論理ボリュームに性能劣化が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過しているか否かを判定する。
性能劣化が発生したか否かは、ボリューム統計情報テーブル1301と制御情報テーブル1501を参照することによって判定される。具体的には、ボリューム選択部207は、ボリューム統計情報テーブル1301から、該当仮想論理ボリュームが登録されている行のうち、最新日時が登録された行を検索する。そして、ボリューム選択部207は、検索された行のI/O応答時間格納欄1304の値と制御情報テーブル1501の性能劣化ボリューム選択I/O応答時間閾値格納欄1508の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えている場合、該当仮想論理ボリュームに性能劣化が発生したと判定される。
一方、充填率とは、仮想論理ボリュームに定義された容量に対する、実際に使用されている容量の割合である。最低充填率の超過は、次のように判定される。まず、ボリューム選択部207は、論理ボリュームテーブル801から該当仮想論理ボリュームが登録されている行を検索し、その行の定義容量格納欄805の値を取得する。次に、ボリューム選択部207は、ボリューム統計情報テーブル1301から、該当仮想論理ボリュームが登録されている行のうち、最新日時が登録された行を検索し、その行の使用容量格納欄1307の値を取得する。取得した使用容量格納欄1307の値を定義容量格納欄805の値で割った値が、最新日時における該当仮想論理ボリュームの充填率である。ボリューム選択部207は、この充填率と制御情報テーブル1501の最低ボリューム充填率格納欄1511の値とを比較し、前者の値が後者の値を超えたか否かを判定する。
既に説明したように、仮想論理ボリュームを実論理ボリューム化することによって、記憶容量を効率的に利用するという仮想論理ボリュームのメリットは失われる。失われるメリットの大きさ(言い換えると、実論理ボリューム化するために新たに割り当てなければならない物理的な記憶領域の量)は、一般に、実論理ボリューム化される仮想論理ボリュームの充填率が低いほど大きい。このため、仮想論理ボリュームのメリットをできるだけ損なわないために、ステップ1904では、性能劣化が発生しており、かつ、充填率が最低充填率を超過している仮想論理ボリュームが選択される。後述するステップ1910、2204及び2210についても同様である。
該当仮想論理ボリュームに性能劣化が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過していると判定された場合、処理はステップ1913に進む。一方、該当仮想論理ボリュームに性能劣化が発生していないか、又は、該当仮想論理ボリュームの充填率が最低充填率を超過していないと判定された場合、処理はステップ1901に戻る。この時点の該当行は、ステップ1901に戻った後、処理済みとして扱われる。
なお、ステップ1904における性能劣化の判定は、図17のステップ1704と同様の方法によって実行されてもよい。さらに、最低充填率超過の判定も、図17のステップ1704と同様の方法によって実行されてもよい。ステップ1704の第1から第4の方法の説明は、「I/O応答時間」の代わりに「充填率」を使用することによって、充填率超過の判定に適用することができる。
ステップ1904において該当仮想論理ボリュームに性能劣化が発生していると判定された場合、該当仮想論理ボリュームが割り当てられているプールA(338)において、複数の仮想論理ボリュームに対するI/Oの相互干渉が性能劣化の原因となっている可能性がある。したがって、該当仮想論理ボリュームを別のプールに移動する(具体的には、プールA(338)に割り当てられている該当仮想論理ボリュームを、新たにプールC(340)に割り当てる)ことによって、劣化した性能が回復する可能性がある。
しかし、移動先であるプールC(340)に、該当仮想論理ボリュームを割り当てるための十分な空き容量がない場合、該当仮想論理ボリュームをプールC(340)に移動することができない。このため、ステップ1913において、ボリューム選択部207は、移動先であるプールC(340)に、移動対象のデータ量(すなわち、移動されるべきデータ量)より大きい空き容量があるか否かを判定する。
具体的には、ボリューム選択部207は、プール・プールボリューム間関連テーブル1201及び論理ボリュームテーブル801を参照して、プールC(340)に定義されている容量を算出する。さらに、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101及びボリューム統計情報テーブル1301を参照して、プールC(340)の容量のうち現在使用されている容量を算出する。プールC(340)に定義されている容量から現在使用されている容量を減算した値が現在のプールC(340)の空き容量である。一方、移動対象のデータ量は、該当仮想論理ボリュームにおいて現在使用されている容量に相当する。この容量は、ボリューム統計情報テーブル1301から取得される。これらの値に基づいて、ボリューム選択部207は、プールC(340)の空き容量が、移動対象のデータ量より大きいか否かを判定する。
プールC(340)の空き容量が移動対象のデータ量より大きいと判定された場合、プールC(340)に十分な空き容量があるため、該当仮想論理ボリュームをプールC(340)に移動することができる。このため、処理はステップ1905に進む。
一方、プールC(340)の空き容量が移動対象のデータ量より大きくないと判定された場合、プールC(340)に十分な空き容量がないため、該当仮想論理ボリュームをプールC(340)に移動することができない。この場合、該当仮想論理ボリュームを実論理ボリューム化することによって、劣化した性能が回復する可能性がある。このため、処理はステップ1914に進む。
ステップ1905において、ボリューム選択部207は、「該当仮想論理ボリュームをプールC(340)に移動する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子(例えば、「仮想論理ボリュームB」)を、対処法種別格納欄1603に「プール移動」を、対処法パラメータ格納欄1604に「プールC」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ1901に戻る。この時点の該当行は、ステップ1901に戻った後、処理済みとして扱われる。
なお、ステップ1905において、ボリューム選択部207は、プール統計情報テーブル1401を参照して、その時点で最も性能が高いプール(すなわち、I/O応答時間が小さいプール)を該当仮想論理ボリュームの移動先として選択してもよい。その場合、選択されたプールの識別子が対処法パラメータ格納欄1604に設定される。
ステップ1914において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子(例えば、「仮想論理ボリュームE」)を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。この場合、対処法パラメータ格納欄1604には、何も設定する必要がない。選択ボリュームテーブル1601への登録後、処理はステップ1901に戻る。この時点の該当行は、ステップ1901に戻った後、処理済みとして扱われる。
なお、プールC(340)に十分な空き容量がある場合であっても、該当仮想論理ボリュームを実論理ボリューム化することはできる。それによって性能の劣化が回復する可能性もある。このため、ステップ1905において、「該当仮想論理ボリュームをプールC(340)に移動する」という問題解決策に加えて、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録してもよい。その場合、図4の表示画面401の仮想ボリューム表示欄403、プール表示欄404及び処置方法表示欄405の各欄には、同一の仮想論理ボリュームに対して複数の問題解決策が表示される。例えば、仮想論理ボリュームB(327)をプールC(340)に移動するという問題解決策と実論理ボリューム化するという問題解決策とが選択ボリュームテーブル1601に登録されると、表示画面401には論理ボリューム番号が「05」である行が二つ表示される。後述するステップ1911及び2005についても同様である。
しかし、記憶領域を効率的に利用するという仮想論理ボリュームのメリットは、仮想論理ボリュームを実論理ボリューム化することによって失われる。このため、性能問題の重大性と記憶装置にかかるコストとを対比して後者を重視する場合には、該当仮想論理ボリュームを他のプールに移動できない場合に限って、該当仮想論理ボリュームを実論理ボリューム化することが望ましい。
ステップ1906において、ボリューム選択部207は、選択ボリュームテーブル1601に現在プールA(338)に所属している仮想論理ボリュームに関する行が登録済みか否かを判定する。プールA(338)に所属している仮想論理ボリュームに関する行が登録済みであると判定された場合、登録されている行が示す問題解決策によって、性能の劣化が回復する可能性がある。この場合、処理はステップ2006に進む。一方、プールA(338)に所属している仮想論理ボリュームに関する行が登録されていないと判定された場合、性能の劣化を回復するための問題解決策がまだ発見されていない。この場合、問題解決策を探すために、処理はステップ1907に進む。
ステップ1907において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理のものを1行取得し、ステップ1908に進む。
ステップ1908において、ボリューム選択部207は、ステップ1907の検索によって、未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行について、ステップ1909からステップ1911までの処理が終了している。この場合、処理はステップ1912に進む。一方、未処理の行が見つかった場合、処理はステップ1909に進む。
ステップ1909において、ボリューム選択部207は、ステップ1907で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態であるか否かを判定する。判定方法はステップ1903と同様である。以下、ステップ1912までの説明において、ステップ1907で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態である場合、処理はステップ1910に進む。該当仮想論理ボリュームがプールA(338)に所属しない、又は、「未使用」の状態である場合、処理はステップ1907に戻る。この時点の該当行は、ステップ1907に戻った後、処理済みとして扱われる。
ステップ1910において、ボリューム選択部207は、該当仮想論理ボリュームに過負荷が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過しているか否かを判定する。
過負荷が発生しているか否かは、ボリューム統計情報テーブル1301と制御情報テーブル1501を参照することによって判定される。具体的には、ボリューム選択部207は、ボリューム統計情報テーブル1301から、該当仮想論理ボリュームが登録されている行のうち、最新日時が登録された行を検索する。そして、ボリューム選択部207は、検索された行のIOPS格納欄1305の値及び転送速度格納欄1306の値と、制御情報テーブル1501の過負荷ボリューム選択IOPS閾値格納欄1509の値及び過負荷ボリューム選択転送速度閾値格納欄1510とをそれぞれ比較し、前者の値のいずれかが後者の対応する閾値を超えたか否かを判定する。前者の値が後者の閾値を超えている場合、該当仮想論理ボリュームに過負荷が発生したと判定される。
一方、最低充填率の超過は、次のように判定される。まず、ボリューム選択部207は、論理ボリュームテーブル801から該当仮想論理ボリュームが登録されている行を検索し、その行の定義容量格納欄805の値を取得する。次に、ボリューム選択部207は、ボリューム統計情報テーブル1301から、該当仮想論理ボリュームが登録されている行のうち、最新日時が登録された行を検索し、その行の使用容量格納欄1307の値を取得する。使用容量格納欄1307の値を定義容量格納欄805の値で割った値が、最新日時における該当仮想論理ボリュームの充填率である。ボリューム選択部207は、この充填率と制御情報テーブル1501の最低ボリューム充填率格納欄1511の値とを比較し、前者の値が後者の値を超えたか否かを判定する。
該当仮想論理ボリュームに過負荷が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過していると判定された場合、処理はステップ1915に進む。一方、該当仮想論理ボリュームに過負荷が発生していないか、又は、該当仮想論理ボリュームの充填率が最低充填率を超過していないと判定された場合、処理はステップ1907に戻る。この時点の該当行は、ステップ1907に戻った後、処理済みとして扱われる。ステップ1910における閾値超過及び最低充填率超過の具体的な判定方法は、図17のステップ1704と同様である。
ステップ1910において該当仮想論理ボリュームに過負荷が発生していると判定された場合、該当仮想論理ボリュームが割り当てられているプールA(338)において、その過負荷が、該当仮想論理ボリューム又は他の仮想論理ボリュームの性能劣化の原因となっている可能性がある。したがって、該当仮想論理ボリュームを別のプールに移動する(具体的には、プールA(338)に割り当てられている該当仮想論理ボリュームを、新たにプールB(339)に割り当てる)ことによって、劣化した性能が回復する可能性がある。
しかし、移動先であるプールB(339)に、該当仮想論理ボリュームを割り当てるための十分な空き容量がない場合、該当仮想論理ボリュームをプールB(339)に移動することができない。このため、ステップ1915において、ボリューム選択部207は、移動先であるプールB(339)に、移動対象のデータ量(すなわち、移動されるべきデータ量)より大きい空き容量があるか否かを判定する。この判定は、ステップ1913と同様の方法によって実行される。
プールB(339)の空き容量が移動対象のデータ量より大きいと判定された場合、該当仮想論理ボリュームをプールB(339)に移動することができる。このため、処理はステップ1911に進む。
一方、プールB(339)の空き容量が移動対象のデータ量より大きくないと判定された場合、該当仮想論理ボリュームをプールB(339)に移動することができない。この場合、該当仮想論理ボリュームを実論理ボリューム化することによって、劣化した性能が回復する可能性がある。このため、処理はステップ1916に進む。
ステップ1911において、ボリューム選択部207は、「該当仮想論理ボリュームをプールB(339)に移動する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「プール移動」を、対処法パラメータ格納欄1604に「プールB」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ1907に戻る。この時点の該当行は、ステップ1907に戻った後、処理済みとして扱われる。
なお、ステップ1911において、ボリューム選択部207は、プール統計情報テーブル1401を参照して、その時点で最も負荷が低いプール(すなわち、IOPS及び転送速度が小さいプール)を該当仮想論理ボリュームの移動先として選択してもよい。その場合、選択されたプールの識別子が対処法パラメータ格納欄1604に設定される。
ステップ1916において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。この場合、対処法パラメータ格納欄1604には、何も設定する必要がない。選択ボリュームテーブル1601への登録後、処理はステップ1907に戻る。この時点の該当行は、ステップ1907に戻った後、処理済みとして扱われる。
ステップ1912において、ボリューム選択部207は、選択ボリュームテーブル1601に現在プールA(338)に所属している仮想論理ボリュームに関する行が登録済みか否かを判定する。プールA(338)に所属している仮想論理ボリュームに関する行が登録済みであると判定された場合、登録されている行が示す問題解決策によって、性能の劣化が回復する可能性がある。この場合、処理はステップ2006に進む。一方、プールA(338)に所属している仮想論理ボリュームに関する行が登録されていないと判定された場合、性能の劣化を回復するための問題解決策がまだ発見されていない。この場合、問題解決策を探すために、処理はステップ2001に進む。
図20は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第3部分である。
図20の処理手順は、図18のステップ1802の処理内容を詳細化したものの後半部分である。図20の処理によって、プールA(338)に所属する仮想論理ボリュームのうちプールCに移動すべきものが選択される。
まず、ステップ2001において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2002に進む。ここで、未処理の行とは、以下のステップ2003からステップ2005までに示す処理がまだ実行されていない行を意味する。
ステップ2002において、ボリューム選択部207は、ステップ2001の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行についてステップ2003からステップ2005までに示す処理が終了した。この場合、処理はステップ2006に進む。一方、未処理の行が見つかった場合、処理はステップ2003に進む。
ステップ2003において、ボリューム選択部207は、ステップ2001で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態であるか否かを判定する。この判定方法は図19のステップ1903と同様である。以下、ステップ2006までの説明において、ステップ2001で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当仮想論理ボリュームがプールA(338)に所属し、かつ、「使用中」の状態である場合、処理はステップ2004に進む。該当仮想論理ボリュームがプールA(338)に所属しない、又は、「未使用」の状態である場合、処理はステップ2001に戻る。この時点の該当行は、ステップ2001に戻った後、処理済みとして扱われる。
ステップ2004において、ボリューム選択部207は、該当仮想論理ボリュームに性能劣化が発生しているか否かを判定する。この判定は、ステップ1904において説明した方法によって実行されてもよい。該当仮想論理ボリュームに性能劣化が発生していると判定された場合、処理はステップ2011に進む。該当仮想論理ボリュームに性能劣化が発生していないと判定された場合、処理はステップ2001に戻る。この時点の該当行は、ステップ2001に戻った後、処理済みとして扱われる。閾値超過の具体的な判定方法は、図17のステップ1704と同様である。
なお、ステップ2004では、ステップ1904及び1910と異なり、該当仮想論理ボリュームの充填率が最低充填率を超過したか否かは判定されない。ステップ1904及び1910の判定の結果、該当仮想論理ボリュームの充填率が最低充填率を超過しない場合には、該当仮想論理ボリュームが選択ボリュームテーブル1601に登録されない。これは、記憶領域を効率的に利用するという仮想論理ボリュームのメリットをできるだけ損なわないようにするためである。しかし、図19の処理の結果、一つの仮想論理ボリュームも選択ボリュームテーブル1601に登録されなかった場合、劣化した性能を回復させるための処理を実行することができない。この場合、仮想論理ボリュームのメリットを犠牲にしても、劣化した性能を回復させる必要がある。このため、ステップ2004では、該当仮想論理ボリュームの充填率に拘らず、性能が劣化しているか否かが判定される。
ステップ2011において、ボリューム選択部207は、移動先であるプールC(340)に、移動対象のデータ量(すなわち、移動されるべきデータ量)より大きい空き容量があるか否かを判定する。この判定は、図19のステップ1913と同様の方法によって実行される。
プールC(340)の空き容量が移動対象のデータ量より大きいと判定された場合、該当仮想論理ボリュームをプールC(340)に移動することができる。このため、処理はステップ2005に進む。
一方、プールC(340)の空き容量が移動対象のデータ量より大きくないと判定された場合、該当仮想論理ボリュームをプールC(340)に移動することができない。この場合、該当仮想論理ボリュームを実論理ボリューム化することによって、劣化した性能が回復する可能性がある。このため、処理はステップ2012に進む。
ステップ2005において、ボリューム選択部207は、「該当仮想論理ボリュームをプールC(340)に移動する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「プール移動」を、対処法パラメータ格納欄1604に「プールC」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ2001に戻る。この時点の該当行は、ステップ2001に戻った後、処理済みとして扱われる。
ステップ2012において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。この場合、対処法パラメータ格納欄1604には、何も設定する必要がない。選択ボリュームテーブル1601への登録後、処理はステップ2001に戻る。この時点の該当行は、ステップ2001に戻った後、処理済みとして扱われる。
ステップ2006において、ボリューム選択部207は、制御情報テーブル1501の探索モード格納欄1513の値を調べる。探索モード格納欄1513の値が「サーバ」である場合はステップ2007に進み、「アプリケーション」である場合はステップ2008に進み、「単独」である場合は処理を終了する。
探索モード格納欄1513の値が「サーバ」である場合、既に選択ボリュームテーブル1601に登録されている仮想論理ボリュームだけでなく、その仮想論理ボリュームを使用しているホストサーバが使用する他の仮想論理ボリュームも選択ボリュームテーブル1601に登録される。具体的には、ステップ2007において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールA(338)に所属し、かつ、使用中である仮想論理ボリュームから、以下の条件(1)から(4)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(1)選択ボリュームテーブル1601に登録されている。
(2)プールAに所属する。
(3)使用中である。
(4)ある共通のホストサーバを起点とするI/O経路が両仮想論理ボリュームを通過する。
ホストサーバから仮想論理ボリュームまでのI/O経路に関する情報は、ボリューム・論理ボリューム間関連テーブル701(図7)、論理ボリュームテーブル801(図8)及び複合論理ボリューム・要素論理ボリューム間関連テーブル901(図9)から取得することができる。
ステップ2009において、ボリューム選択部207は、ステップ2007で見つかった仮想論理ボリュームを対象とする問題解決策を選択ボリュームテーブル1601に追加登録する。ステップ2009で追加登録される問題解決策の内容(例えば、実論理ボリューム化、又は、プールB又はCへの移動)は、既に選択ボリュームテーブル1601に登録されているものと同じである。
例えば、ホストサーバA(301)は、論理ボリューム番号「01」が付与された論理ボリュームにI/Oを発行する(図7の第1行参照)。論理ボリューム番号「01」が付与された論理ボリュームは、複合論理ボリュームA(323)である(図8の第1行参照)。複合論理ボリュームA(323)は、論理ボリューム番号「04」が付与された論理ボリューム及び論理ボリューム番号「05」が付与された論理ボリュームからなる(図9の第1行及び第2行参照)。論理ボリューム番号「04」及び「05」が付与された論理ボリュームは、それぞれ、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)である(図8の第4行及び第5行参照)。すなわち、ホストサーバA(301)を基点とするI/O経路は、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)を通過する。
なお、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)は、いずれも、プールA(338)に所属し、使用中である。この例において、仮想論理ボリュームB(327)のみが選択ボリュームテーブル1601に登録されている場合、ステップ2007の検索結果として、仮想論理ボリュームA(326)が取得される。そして、ステップ2009において、仮想論理ボリュームA(326)に対応する行が選択ボリュームテーブル1601に追加登録される。具体的には、追加登録される行の論理ボリューム識別子格納欄1602に「仮想論理ボリュームA」が格納される。追加登録される行の問題解決策に相当する対処法種別格納欄1603及び対処法パラメータ格納欄1604には、既に登録されている仮想論理ボリュームBに対応する内容と同じものが登録される。
例えば、図16に示すように、仮想論理ボリュームB(327)に対応する対処法種別格納欄1603及び対処法パラメータ格納欄1604に「プール移動」及び「プールC」が登録されている場合、追加登録される仮想論理ボリュームA(326)に対応する行の対処法種別格納欄1603及び対処法パラメータ格納欄1604にも「プール移動」及び「プールC」が登録される。
探索モード格納欄1513の値が「アプリケーション」である場合、既に選択ボリュームテーブル1601に登録されている仮想論理ボリュームだけでなく、その仮想論理ボリュームを使用しているアプリケーションが使用する他の仮想論理ボリュームも選択ボリュームテーブル1601に登録される。具体的には、ステップ2008において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールAに所属し、かつ、使用中である仮想論理ボリュームから、以下の条件(5)から(8)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(5)選択ボリュームテーブル1601に登録されている。
(6)プールAに所属する。
(7)使用中である。
(8)ある共通のアプリケーションを起点とするI/O経路が両仮想論理ボリュームを通過する。
アプリケーションから仮想論理ボリュームまでのI/O経路に関する情報は、アプリケーション・ファイル間関連テーブル501(図5)、ファイル・ボリューム間関連テーブル601(図6)、ボリューム・論理ボリューム間関連テーブル701(図7)、論理ボリュームテーブル801(図8)及び複合論理ボリューム・要素論理ボリューム間関連テーブル901(図9)から取得することができる。
ステップ2010において、ボリューム選択部207は、ステップ2008で見つかった仮想論理ボリュームを対象とする問題解決策を選択ボリュームテーブル1601に追加登録する。ステップ2010で追加登録される問題解決策の内容(例えば、実論理ボリューム化、又は、プールB又はCへの移動)は、既に選択ボリュームテーブル1601に登録されているものと同じである。
例えば、アプリケーションA(305)は、ファイルA(309)にI/Oを発行する(図5の第1行参照)。ファイルA(309)は、ボリュームA(315)に割り当てられる(図6の第1行参照)。ボリュームA(315)は、論理ボリューム番号「01」が付与された論理ボリュームに割り当てられる(図7の第1行参照)。論理ボリューム番号「01」が付与された論理ボリュームは、複合論理ボリュームA(323)である。複合論理ボリュームA(323)は、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)からなる。すなわち、アプリケーションA(305)を基点とするI/O経路は、仮想論理ボリュームA(326)及び仮想論理ボリュームB(327)を通過する。
この例において仮想論理ボリュームB(327)のみが選択ボリュームテーブル1601に登録されている場合、ステップ2008の検索結果として、仮想論理ボリュームA(326)が取得される。そして、ステップ2009の場合と同様、ステップ2010において、仮想論理ボリュームA(326)に対応する行が選択ボリュームテーブル1601に追加登録される。
ステップ2009又はステップ2010が終了した場合、又は、ステップ2006において探索モード格納欄1513の値が「単独」であった場合、ボリューム選択部207は、図19及び図20に示す処理を終了する。
図21は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第4部分である。
図21の処理手順は、図18のステップ1803の処理内容を詳細化したものである。図21の処理によって、プールB(339)に所属する仮想論理ボリュームのうち実論理ボリューム化されるべきものが選択される。
まず、ステップ2101において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2102に進む。ここで、未処理の行とは、以下のステップ2103からステップ2105までに示す処理がまだ実行されていない行を意味する。
ステップ2102において、ボリューム選択部207は、ステップ2101の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行についてステップ2103からステップ2105までに示す処理が終了した。この場合、処理はステップ2106に進む。一方、未処理の行が見つかった場合、処理はステップ2103に進む。
ステップ2103において、ボリューム選択部207は、ステップ2101で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールB(339)に所属し、かつ、「使用中」の状態であるか否かを判定する。以下、ステップ2105までの説明において、ステップ2101で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当行のプール識別子格納欄1103に「プールB」が格納されている場合、該当仮想論理ボリュームがプールB(339)に所属すると判定される。該当仮想論理ボリュームの使用状態は、論理ボリュームテーブル801内の該当仮想論理ボリュームに対応する行の使用状態格納欄806の値に基づいて判定される。
該当仮想論理ボリュームがプールB(339)に所属し、かつ、「使用中」の状態である場合、処理はステップ2104に進む。該当仮想論理ボリュームがプールB(339)に所属しない、又は、「未使用」の状態である場合、処理はステップ2101に戻る。この時点の該当行は、ステップ2101に戻った後、処理済みとして扱われる。
ステップ2104において、ボリューム選択部207は、該当仮想論理ボリュームに性能劣化が発生しているか否かを判定する。
性能劣化が発生したか否かは、ボリューム統計情報テーブル1301と制御情報テーブル1501を参照することによって判定される。具体的には、ボリューム選択部207は、ボリューム統計情報テーブル1301から、該当仮想論理ボリュームが登録されている行のうち、最新日時が登録された行を検索する。そして、ボリューム選択部207は、検索された行のI/O応答時間格納欄1304の値と制御情報テーブル1501の性能劣化ボリューム選択I/O応答時間閾値格納欄1508の値とを比較し、前者の値が後者の閾値を超えたか否かを判定する。前者の値が後者の閾値を超えている場合、該当仮想論理ボリュームに性能劣化が発生したと判定される。
該当仮想論理ボリュームに性能劣化が発生していると判定された場合、処理はステップ2105に進む。一方、該当仮想論理ボリュームに性能劣化が発生していないと判定された場合、処理はステップ2101に戻る。この時点の該当行は、ステップ2101に戻った後、処理済みとして扱われる。ステップ2104における閾値超過の具体的な判定方法は、図17のステップ1704と同様である。
ステップ2105において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ2101に戻る。この時点の該当行は、ステップ2101に戻った後、処理済みとして扱われる。
ステップ2106において、ボリューム選択部207は、制御情報テーブル1501の探索モード格納欄1513の値を調べる。探索モード格納欄1513の値が「サーバ」である場合はステップ2107に進み、「アプリケーション」である場合はステップ2108に進み、「単独」である場合は処理を終了する。
ステップ2107において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールB(339)に所属し、かつ、使用中である仮想論理ボリュームから、以下の条件(9)から(12)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(9)選択ボリュームテーブル1601に登録されている。
(10)プールBに所属する。
(11)使用中である。
(12)ある共通のサーバを起点とするI/O経路が両仮想論理ボリュームを通過する。
ホストサーバから仮想論理ボリュームまでのI/O経路に関する情報は、図20のステップ2007と同様の方法で取得することができる。
ステップ2108において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールB(339)に所属し、かつ、使用中である仮想論理ボリュームから、以下の条件(13)から(16)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(13)選択ボリュームテーブル1601に登録されている。
(14)プールBに所属する。
(15)使用中である。
(16)ある共通のアプリケーションを起点とするI/O経路が両仮想論理ボリュームを通過する。
アプリケーションから仮想論理ボリュームまでのI/O経路に関する情報は、図20のステップ2008と同様の方法で取得することができる。
ステップ2109において、ボリューム選択部207は、ステップ2107で見つかった仮想論理ボリュームを実論理ボリューム化するという問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に、ステップ2107で見つかった仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。
ステップ2110において、ボリューム選択部207は、ステップ2108で見つかった仮想論理ボリュームを実論理ボリューム化するという問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に、ステップ2108で見つかった仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。
ステップ2109又はステップ2110が終了した場合、又は、ステップ2106において探索モード格納欄1513の値が「単独」であった場合、ボリューム選択部207は、図21に示す処理を終了する。
図22は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第5部分である。
図22の処理手順は、図18のステップ1804の処理内容を詳細化したものの前半部分である。図22の処理によって、プールC(340)に所属する仮想論理ボリュームのうち実論理ボリューム化されるべきものが選択される。
まず、ステップ2201において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2202に進む。ここで、未処理の行とは、以下のステップ2203からステップ2205までに示す処理がまだ実行されていない行を意味する。
ステップ2202において、ボリューム選択部207は、ステップ2201の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行についてステップ2203からステップ2205までに示す処理が終了した。この場合、処理はステップ2206に進む。一方、未処理の行が見つかった場合、処理はステップ2203に進む。
ステップ2203において、ボリューム選択部207は、ステップ2201で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態であるか否かを判定する。以下、ステップ2206までの説明において、ステップ2201で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当行のプール識別子格納欄1103に「プールC」が格納されている場合、該当仮想論理ボリュームがプールC(340)に所属すると判定される。該当仮想論理ボリュームの使用状態は、論理ボリュームテーブル801内の該当仮想論理ボリュームに対応する行の使用状態格納欄806の値に基づいて判定される。
該当仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態である場合、処理はステップ2204に進む。該当仮想論理ボリュームがプールC(340)に所属しない、又は、「未使用」の状態である場合、処理はステップ2201に戻る。この時点の該当行は、ステップ2201に戻った後、処理済みとして扱われる。
ステップ2204において、ボリューム選択部207は、該当仮想論理ボリュームに性能劣化が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過しているか否かを判定する。この判定は、図19のステップ1904と同様の方法によって実行される。
該当仮想論理ボリュームに性能劣化が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過していると判定された場合、処理はステップ2205に進む。一方、該当仮想論理ボリュームに性能劣化が発生していないか、又は、該当仮想論理ボリュームの充填率が最低充填率を超過していないと判定された場合、処理はステップ2201に戻る。この時点の該当行は、ステップ2201に戻った後、処理済みとして扱われる。
閾値超過及び最低充填率超過の具体的な判定方法は、図17のステップ1704と同様である。
ステップ2205において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ2201に戻る。この時点の該当行は、ステップ2201に戻った後、処理済みとして扱われる。
ステップ2206において、ボリューム選択部207は、選択ボリュームテーブル1601に現在プールC(340)に所属している仮想論理ボリュームに関する行が登録済みか否かを判定する。プールC(340)に所属している仮想論理ボリュームに関する行が登録済みであると判定された場合、登録されている行が示す問題解決策によって、性能の劣化が回復する可能性がある。この場合、処理はステップ2206に進む。一方、プールC(340)に所属している仮想論理ボリュームに関する行が登録されていないと判定された場合、性能の劣化を回復するための問題解決策がまだ発見されていない。この場合、問題解決策を探すために、処理はステップ2207に進む。
ステップ2207において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理のものを1行取得し、ステップ2208に進む。
ステップ2208において、ボリューム選択部207は、ステップ2207の検索によって、未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行について、ステップ2209からステップ2211までの処理が終了している。この場合、処理はステップ2212に進む。一方、未処理の行が見つかった場合、処理はステップ2209に進む。
ステップ2209において、ボリューム選択部207は、ステップ2207で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態であるか否かを判定する。判定方法はステップ2203と同様である。以下、ステップ2212までの説明において、ステップ2207で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態である場合、処理はステップ2210に進む。該当仮想論理ボリュームがプールC(340)に所属しない、又は、「未使用」の状態である場合、処理はステップ2207に戻る。この時点の該当行は、ステップ2207に戻った後、処理済みとして扱われる。
ステップ2210において、ボリューム選択部207は、該当仮想論理ボリュームに過負荷が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過しているか否かを判定する。これらの判定は、図19のステップ1910と同様の方法によって実行される。具体的な判定方法として、図17のステップ1704と同様の方法が用いられてもよい。
該当仮想論理ボリュームに過負荷が発生しており、かつ、該当仮想論理ボリュームの充填率が最低充填率を超過していると判定された場合、処理はステップ2211に進む。一方、該当仮想論理ボリュームに過負荷が発生していないか、又は、該当仮想論理ボリュームの充填率が最低充填率を超過していないと判定された場合、処理はステップ2207に戻る。この時点の該当行は、ステップ2207に戻った後、処理済みとして扱われる。
ステップ2211において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ2207に戻る。この時点の該当行は、ステップ2207に戻った後、処理済みとして扱われる。
ステップ2212において、ボリューム選択部207は、選択ボリュームテーブル1601に、現在プールC(340)に所属している仮想論理ボリュームに関する行が登録済みか否かを判定する。プールC(340)に所属している仮想論理ボリュームに関する行が登録済みであると判定された場合、登録されている行が示す問題解決策によって、性能の劣化が回復する可能性がある。この場合、処理はステップ2306に進む。一方、プールC(340)に所属している仮想論理ボリュームに関する行が登録されていないと判定された場合、処理はステップ2301に進む。
図23は、本発明の一実施形態の性能管理ソフト120に含まれるボリューム選択部207の処理手順を示すフローチャートの第6部分である。
図23の処理手順は、図18のステップ1804の処理内容を詳細化したものの後半部分である。図23の処理によって、プールC(340)に所属する仮想論理ボリュームのうち実論理ボリューム化されるべきものが選択される。
まず、ステップ2301において、ボリューム選択部207は、仮想論理ボリューム・プール間関連テーブル1101に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2302に進む。ここで、未処理の行とは、以下のステップ2303からステップ2305までに示す処理がまだ実行されていない行を意味する。
ステップ2302において、ボリューム選択部207は、ステップ2301の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、仮想論理ボリューム・プール間関連テーブル1101に登録されている全ての行についてステップ2303からステップ2305までに示す処理が終了した。この場合、処理はステップ2306に進む。一方、未処理の行が見つかった場合、処理はステップ2303に進む。
ステップ2303において、ボリューム選択部207は、ステップ2301で見つかった行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態であるか否かを判定する。この判定方法は図22のステップ2203と同様である。以下、ステップ2305までの説明において、ステップ2301で見つかった行を該当行と記載し、該当行の論理ボリューム識別子格納欄1102によって識別される仮想論理ボリュームを該当仮想論理ボリュームと記載する。
該当仮想論理ボリュームがプールC(340)に所属し、かつ、「使用中」の状態である場合、処理はステップ2304に進む。該当仮想論理ボリュームがプールC(340)に所属しない、又は、「未使用」の状態である場合、処理はステップ2301に戻る。この時点の該当行は、ステップ2301に戻った後、処理済みとして扱われる。
ステップ2304において、ボリューム選択部207は、該当仮想論理ボリュームに性能劣化が発生しているか否かを判定する。この判定は、ステップ2204において説明した方法によって実行されてもよい。該当仮想論理ボリュームに性能劣化が発生していると判定された場合、処理はステップ2305に進む。該当仮想論理ボリュームに性能劣化が発生していないと判定された場合、処理はステップ2301に戻る。この時点の該当行は、ステップ2301に戻った後、処理済みとして扱われる。閾値超過の具体的な判定方法は、図17のステップ1704と同様である。
ステップ2305において、ボリューム選択部207は、「該当仮想論理ボリュームを実論理ボリューム化する」という問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に該当仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。選択ボリュームテーブル1601への登録後、処理はステップ2301に戻る。この時点の該当行は、ステップ2301に戻った後、処理済みとして扱われる。
ステップ2306において、ボリューム選択部207は、制御情報テーブル1501の探索モード格納欄1513の値を調べる。探索モード格納欄1513の値が「サーバ」である場合はステップ2307に進み、「アプリケーション」である場合はステップ2308に進み、「単独」である場合は処理を終了する。
ステップ2307において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールC(340)に所属し、かつ、使用中である仮想論理ボリュームから、かつ、以下の条件(17)から(20)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(17)選択ボリュームテーブル1601に登録されている。
(18)プールCに所属する。
(19)使用中である。
(20)ある共通のサーバを起点とするI/O経路が両仮想論理ボリュームを通過する。
ホストサーバから仮想論理ボリュームまでのI/O経路に関する情報は、図20のステップ2007と同様の方法で取得することができる。
ステップ2308において、ボリューム選択部207は、選択ボリュームテーブル1601に登録されておらず、プールC(340)に所属し、かつ、使用中である仮想論理ボリュームから、以下の条件(21)から(24)を満足する別の仮想論理ボリュームが存在するものをすべて探し出す。
(21)選択ボリュームテーブル1601に登録されている。
(22)プールCに所属する。
(23)使用中である。
(24)ある共通のアプリケーションを起点とするI/O経路が両仮想論理ボリュームを通過する。
アプリケーションから仮想論理ボリュームまでのI/O経路に関する情報は、図20のステップ2008と同様の方法で取得することができる。
ステップ2309において、ボリューム選択部207は、ステップ2307で見つかった仮想論理ボリュームを実論理ボリューム化するという問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に、ステップ2307で見つかった仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。
ステップ2310において、ボリューム選択部207は、ステップ2308で見つかった仮想論理ボリュームを実論理ボリューム化するという問題解決策を選択ボリュームテーブル1601に登録する。具体的には、ボリューム選択部207は、選択ボリュームテーブル1601に新規の行を追加し、追加された行の論理ボリューム識別子格納欄1602に、ステップ2308で見つかった仮想論理ボリュームの識別子を、対処法種別格納欄1603に「実論理ボリューム化」を設定する。
選択ボリュームテーブル1601への登録後、本手順を終了する。
以上の図19〜図23は、計算機システムが複数のストレージ装置を備える場合にも適用することができる。例えば、図1に示すストレージ装置131に、第2のストレージ装置(図示省略)が接続されてもよい。第2のストレージ装置は、ストレージ装置131の物理ディスク360と同様の複数の物理ディスク(図示省略)を備える。その場合、ストレージ装置131の仮想論理ボリューム、プールボリューム及び実論理ボリュームの少なくとも一つが、第2のストレージ装置の物理ディスクが提供する記憶領域にマッピングされてもよい。
あるいは、第2のストレージ装置が、ストレージ装置131と同様のプールボリューム、仮想論理ボリューム及び実論理ボリュームを含んでもよい。その場合、ステップ1905、1911、1914、1916、2005、2012、2105、2205、2211又は2305において、第2のストレージ装置内のプール又は実論理ボリュームが、ストレージ装置131内の仮想論理ボリュームの移動先として選択されてもよい。
図25は、本発明の一実施形態の性能管理ソフト120に含まれる実ボリューム化部213の処理手順を示すフローチャートである。
図25の処理手順は、性能管理ソフト120が自動動作モードである場合は、ボリューム選択部207が処理を完了した後、自動的に起動される。性能管理ソフト120が手動動作モードである場合は、ボリューム一覧表示部211が表示した一覧からユーザが性能問題解決方法を選択して実行指示を出すと、図25の処理手順が起動される。
まず、ステップ2501において、実ボリューム化部213は、制御情報テーブル1501の動作モード格納欄1512の値を参照する。動作モード格納欄1512の値が「自動」である場合はステップ2503に進み、「手動」である場合はステップ2502に進む。
ただし、図19のステップ1905、ステップ1911又は図20のステップ2005において、一つの仮想論理ボリュームに対して複数の問題解決策が登録された場合、それらの複数のうち一つをユーザが選択する必要がある。したがってこの場合、ステップ2501において必ず「手動」が選択される。
ステップ2502において、実ボリューム化部213は、GUI画面(すなわち表示画面401)の性能問題解決方法一覧のうちユーザによって実行指示された行に対応する仮想論理ボリュームの番号を取得する。次に、実ボリューム化部213は、論理ボリュームテーブル801を検索して、仮想論理ボリューム番号に対応する論理ボリューム識別子を取得する。例えば、図4に示す表示画面401において、ユーザが、論理ボリューム番号「08」が付与された仮想論理ボリュームの実論理ボリューム化の実行を指示した場合、実ボリューム化部213は、論理ボリュームテーブル801の論理ボリューム番号格納欄804及び論理ボリューム識別子格納欄802を参照して、論理ボリューム番号「08」に対応する論理ボリューム識別子「仮想論理ボリュームE」を取得する。その後、処理はステップ2503に進む。
ステップ2503において、実ボリューム化部213は、選択ボリュームテーブル1601に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2504に進む。ここで、未処理の行とは、ステップ2505以降の処理がまだ実行されていない行を意味する。
ステップ2504において、実ボリューム化部213は、ステップ2503の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、選択ボリュームテーブル1601に登録されている全ての行についてステップ2505以降の処理が終了した。この場合、実ボリューム化部213は処理を終了する。一方、未処理の行が見つかった場合、処理はステップ2505に進む。ステップ2503の検索によって見つかった行を、以下の図25の説明において、該当行と記載する。
ステップ2505において、実ボリューム化部213は、該当行の対処法種別格納欄1603の値を参照する。対処法種別格納欄1603の値が「実論理ボリューム化」である場合、処理はステップ2506に進む。一方、該当行の対処法種別格納欄1603の値が「プール移動」である場合、処理はステップ2503に戻る。この時点の該当行は、ステップ2503に戻った後、処理済として扱われる。なお、該当行の対処法種別格納欄1603の値が「プール移動」である場合に実行される処理については後述する(図26参照)。
ステップ2506において、実ボリューム化部213は、制御情報テーブル1501の動作モード格納欄1512の値が「自動」であるか、又は、該当行の論理ボリューム識別子格納欄1602の値がステップ2502で取得した論理ボリューム識別子と一致するか否かを判定する。制御情報テーブル1501の動作モード格納欄1512の値が「自動」であるか、又は、該当行の論理ボリューム識別子格納欄1602の値がステップ2502で取得した論理ボリューム識別子と一致する場合、該当行の論理ボリューム識別子格納欄1602の値によって識別される仮想論理ボリュームは、実論理ボリューム化されるべきものである。この場合、処理はステップ2507に進む。一方、制御情報テーブル1501の動作モード格納欄1512の値が「手動」であり、かつ、該当行の論理ボリューム識別子格納欄1602の値がステップ2502で取得した論理ボリューム識別子と不一致である場合、処理はステップ2503に戻る。この時点の該当行は、ステップ2503に戻った後、処理済として扱われる。
ステップ2507において、実ボリューム化部213は、該当行の論理ボリューム識別子格納欄1602の値に対応する行を論理ボリュームテーブル801から検索し、検索された行の定義容量格納欄805の値を取得する。
ステップ2508において、実ボリューム化部213は、論理ボリュームテーブル801を検索し、ボリューム種別格納欄803の値が「実」であり、かつ、定義容量格納欄805の値がステップ2507で取得した定義容量の値と一致し、かつ、使用状態格納欄806の値が「未使用」である行を取得し、ステップ2509に進む。
ステップ2509において、実ボリューム化部213は、ステップ2508の検索条件を満たす行が取得された否かを判定する。検索条件を満たす行が取得された場合、処理はステップ2510に進む。一方、検索条件を満たす行が取得されなかった場合、仮想論理ボリュームのマイグレーション先となる実論理ボリュームが存在しない。すなわち、仮想論理ボリュームを実論理ボリューム化することができないため、処理はステップ2511に進む。
ステップ2510において、実ボリューム化部213は、該当行の論理ボリューム識別子格納欄1602の値が示す仮想論理ボリュームを、ステップ2508で取得された論理ボリュームテーブル801の行の論理ボリューム識別子格納欄802の値が示す実論理ボリュームに移動する命令をマイグレーション実行部135に対し発行する。
ステップ2511において、実ボリューム化部213は、該当行の論理ボリューム識別子格納欄1602の値が示す仮想論理ボリュームを移動することのできる実論理ボリューム(すなわち、移動元の仮想論理ボリュームと定義容量が一致した未使用の実論理ボリューム)がなかったためボリューム移動できない旨の警告メッセージを性能管理クライアント104に表示する。
ステップ2510又は2511が終了すると、処理はステップ2503に戻る。この時点の該当行は、ステップ2503に戻った後、処理済として扱われる。
図26は、本発明の一実施形態の性能管理ソフト120に含まれるプール間移動部214の処理手順を示すフローチャートである。
図26の処理手順は、性能管理ソフト120が自動動作モードである場合は、ボリューム選択部207が処理を完了した後、自動的に起動される。性能管理ソフト120が手動動作モードである場合は、ボリューム一覧表示部211が表示した一覧からユーザが性能問題解決方法を選択して実行指示を出すと、図25の処理手順が起動される。
まず、ステップ2601において、プール間移動部214は、制御情報テーブル1501の動作モード格納欄1512の値を参照する。動作モード格納欄1512の値が「自動」である場合はステップ2603に進み、「手動」である場合はステップ2602に進む。
ただし、図19のステップ1905、ステップ1911又は図20のステップ2005において、一つの仮想論理ボリュームに対して複数の問題解決策が登録された場合、それらの複数のうち一つをユーザが選択する必要がある。したがってこの場合、ステップ2601において必ず「手動」が選択される。
ステップ2602において、プール間移動部214は、表示画面401の性能問題解決方法一覧のうちユーザによって実行指示された行に対応する仮想論理ボリュームの番号を取得する。次に、プール間移動部214は、論理ボリュームテーブル801を検索して、仮想論理ボリューム番号に対応する論理ボリューム識別子を取得する。これらの取得は、図25のステップ2502と同様に実行される。ここで取得された論理ボリューム識別子によって識別される仮想論理ボリュームは、これから移動されるべき仮想論理ボリューム(すなわち、移動対象の仮想論理ボリューム)である。さらに、プール間移動部214は、取得した論理ボリューム識別子に該当する選択ボリュームテーブル1601の行を検索して、検索された行の対処法パラメータ格納欄1604の値を移動先プール識別子として取得し、ステップ2603に進む。
例えば、ユーザが、図4に示す表示画面401において、論理ボリューム番号「05」が付与された仮想論理ボリュームをプールCに移動することを指示した場合、プール間移動部214は、ステップ2502と同様の手順によって、移動対象の仮想論理ボリュームの識別子として「仮想論理ボリュームB」を取得する。さらに、プール間移動部214は、選択ボリュームテーブル1601に登録されている行のうち、論理ボリューム識別子格納欄1602に「仮想論理ボリュームB」が格納されている行の、対処法パラメータ格納欄1604に格納されている「プールC」を、移動先プール識別子として取得する。
ステップ2603において、プール間移動部214は、選択ボリュームテーブル1601に登録されている行を先頭から順に検索して、未処理の1行を取得し、ステップ2604に進む。ここで、未処理の行とは、ステップ2605以降の処理がまだ実行されていない行を意味する。
ステップ2604において、プール間移動部214は、ステップ2603の検索によって未処理の行が見つかったか否かを判定する。未処理の行が見つからなかった場合、選択ボリュームテーブル1601に登録されている全ての行についてステップ2605以降の処理が終了した。この場合、プール間移動部214は処理を終了する。一方、未処理の行が見つかった場合、処理はステップ2605に進む。ステップ2603の検索によって見つかった行を、以下の図26の説明において、該当行と記載する。
ステップ2605において、プール間移動部214は、該当行の対処法種別格納欄1603の値を参照する。対処法種別格納欄1603の値が「プール移動」である場合、処理はステップ2606に進む。一方、該当行の対処法種別格納欄1603の値が「実論理ボリューム化」である場合、処理はステップ2603に戻る。この時点の該当行は、ステップ2603に戻った後、処理済として扱われる。
ステップ2606において、プール間移動部214は、制御情報テーブル1501の動作モード格納欄1512の値が「自動」であるか、又は、該当行の論理ボリューム識別子格納欄1602の値がステップ2602で取得した論理ボリューム識別子と一致するか否かを判定する。制御情報テーブル1501の動作モード格納欄1512の値が「自動」であるか、又は、該当行の論理ボリューム識別子格納欄1602の値がステップ2502で取得した論理ボリューム識別子と一致する場合、該当行の論理ボリューム識別子格納欄1602の値によって識別される仮想論理ボリュームは、移動対象である。この場合、処理はステップ2607に進む。一方、制御情報テーブル1501の動作モード格納欄1512の値が「手動」であり、かつ、該当行の論理ボリューム識別子格納欄1602の値がステップ2602で取得した論理ボリューム識別子と不一致である場合、処理はステップ2603に戻る。この時点の該当行は、ステップ2603に戻った後、処理済として扱われる。
ステップ2607において、プール間移動部214は、該当行の論理ボリューム識別子格納欄1602の値に対応する行を論理ボリュームテーブル801から検索し、検索された行の定義容量格納欄805の値を取得する。
ステップ2608において、プール間移動部214は、論理ボリュームテーブル801を検索し、ボリューム種別格納欄803の値が「仮想」であり、かつ、定義容量格納欄805の値がステップ2607で取得した定義容量の値と一致し、かつ、使用状態格納欄806の値が「未使用」であり、かつ、論理ボリューム識別子格納欄802の値が示す仮想論理ボリュームがステップ2602で取得した移動先プールに所属する行を取得し、ステップ2609に進む。仮想論理ボリュームが移動先プールに所属するか否かは、仮想論理ボリューム・プール間関連テーブル1101からその仮想論理ボリュームが登録された行を検索し、見つかった行のプール識別子格納欄1103の値と、ステップ2602で取得した移動先プール識別子とが一致するか否かを判定することによって実行される。
ステップ2609において、プール間移動部214は、ステップ2608の検索で検索条件を満足する行が取得されたか否かを判定する。検索条件を満足する行が取得された場合、処理はステップ2610に進む。一方、検索条件を満足する行が取得されなかった場合、移動対象の仮想論理ボリュームの移動先となる仮想論理ボリュームが存在しない。すなわち、仮想論理ボリュームを他のプールに移動することができないため、処理はステップ2611に進む。
ステップ2610において、プール間移動部214は、該当行の論理ボリューム識別子格納欄1602の値が示す仮想論理ボリュームを、ステップ2608で取得された論理ボリュームテーブル801の行の論理ボリューム識別子格納欄802の値が示す仮想論理ボリュームに移動する命令をマイグレーション実行部135に対し発行する。
ステップ2611において、プール間移動部214は、該当行の論理ボリューム識別子格納欄1602の値が示す仮想論理ボリュームを移動することのできる仮想論理ボリューム(すなわち、移動対象の仮想論理ボリュームと定義容量が一致した未使用の仮想論理ボリューム)が移動先プールになかったためボリューム移動できない旨の警告メッセージを性能管理クライアント104に表示する。
ステップ2610又は2611が終了すると、処理はステップ2603に戻る。この時点の該当行は、ステップ2603に戻った後、処理済として扱われる。
以上の本発明の実施形態をまとめると、性能管理ソフト120は、計測された各仮想論理ボリューム及び各プールの統計情報に基づいて、仮想論理ボリューム又はプールに性能問題が発生しているか否かを判定する(図17)。
性能問題が発生していると判定された場合、性能管理ソフト120は、性能問題を解決するために、移動されるべき仮想論理ボリューム及びその移動先を選択する(図19から図23)。具体的には、移動されるべき仮想論理ボリュームとして性能問題が発生した仮想論理ボリュームが選択され、移動先として、実論理ボリューム(ステップ1914、ステップ1916、ステップ2012、ステップ2105、ステップ2205、ステップ2211及びステップ2305)、又は、選択された仮想論理ボリュームが所属するプール以外のプール(ステップ1905、ステップ1911及びステップ2005)が選択される。
さらに、一つのホストサーバが、性能問題が発生した仮想論理ボリュームを含む複数の仮想論理ボリュームにI/Oを発行している場合、それらの複数の仮想論理ボリュームが移動されるべき仮想論理ボリュームとして選択されてもよい(ステップ2009、ステップ2109及びステップ2309)。あるいは、一つのアプリケーションが、性能問題が発生した仮想論理ボリュームを含む複数の仮想論理ボリュームにI/Oを発行している場合、それらの複数の仮想論理ボリュームが移動されるべき仮想論理ボリュームとして選択されてもよい(ステップ2010、ステップ2110及びステップ2310)。
選択された仮想論理ボリューム及びその移動先は、図4に示すように表示装置170に表示される。この表示は、上記のように仮想論理ボリューム及びその移動先が選択される各ステップにおいて実行されてもよいし、図19から図23に示す一連の処理が終了した後に実行されてもよい。
このようにして選択された仮想論理ボリュームを選択された移動先に移動させることによって(図25及び図26)、複数の仮想論理ボリュームに対するI/Oが、互いの干渉による性能への影響が小さくなるように、分散される。その結果、劣化した性能の回復又は性能劣化の予防を図ることができる。