以下、図面を参照しながら本発明の実施の形態を説明する。なお、以下の説明では、「管理テーブル」等の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。また、データ構造に依存しないことを示すために「管理テーブル」を「管理情報」と呼ぶことができる。
また、「プログラム」または「ツール」を主語として処理を説明する場合がある。そのプログラムは、プロセッサ、例えば、MP(Micro Processor)やCPU(Central Processing Unit)によって実行されるもので、定められた処理をするものである。
なお、適宜に記憶資源(例えば、メモリ)及び通信インタフェース装置(例えば、通信ポート)を用いながら行うため、処理の主語がプロセッサとされてもよい。プロセッサは、CPUの他に専用ハードウェアを有していても良い。コンピュータプログラムは、プログラムソースから各コンピュータにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアなどで提供されるものであっても良い。
また、各要素例えば、PD(Physical Device)は番号などで識別可能であるが、識別可能な情報であれば、名前など他種の識別情報が用いられても良い。本発明の図及び説明において同一部分には同一符号を付与しているが、本発明が本実施例に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。また、特に限定しない限り、各構成要素は複数でも単数でも構わない。
<発明概要>
図1は、本発明の概要を示す概念図である。図2は、従来技術での課題を説明する図である。
本発明では、前述のように、ホスト計算機又はストレージ装置上で動作する複数のアプリケーションで使用する仮想ボリュームをグループ化する。そして、グループ毎に要求される性能に応じた再配置条件をあらかじめ設定し、再配置条件に沿った階層の再配置を実施し、各アプリケーション間でのレスポンス性能低下の影響を低減するものである。
まず、従来技術での課題を図2で説明する。
まず、図2(a)のように60GBのSSDで構成されたTier0 20と300GBのSASタイプHDDで構成されたTier1 21を含むプールボリュームが、アプリケーション1が使用する仮想ボリュームとアプリケーション2が使用する仮想ボリュームに割り当てられているものとする。
また、I/Oアクセス頻度が変動する前のアプリケーション1のI/O度数分布が符号10、アプリケーション2のI/O度数分布が符号11である。また、各アプリケーションがそれぞれ、Tier0を30GB、Tier1を150GBずつ使用しているものとする。
次に、図2(b)のように、アプリケーション2が使用する仮想ボリュームへのI/Oアクセス数が大幅に増加し、I/Oアクセス頻度も高くなる。そうすると、アプリケーション2のI/O度数分布が符号11から符号11aに変化するので、従来のDT(Dynamic Tiering)機能では、I/Oアクセス頻度が高くなった記憶領域(ページ)を上位階層に再配置しデータの移行を行う。その結果、上位階層であるTier0(60GB)20の全ては、アプリケーション2が使用することになり、アプリケーション1は使用することができない。
このため、アプリケーション1でのI/Oアクセス頻度に変化がないのにも関わらず、Tier0が割当てられていた30GB分の記憶領域(仮想ページ)は、Tier0 20より低速なSAS HDDで構成されたTier1 21を使用しなければならない。そのため、アプリケーション1でのレスポンス性能が低下してしまうという状況が発生する。
そこで、本発明では、ホスト計算機又はストレージ装置上で動作する複数のアプリケーションで使用する仮想ボリュームをグループ化する。グループ化後、グループ毎に要求されるレスポンス性能に応じたページ再配置条件の設定、すなわち、
(1)各Tierの最大/最低使用量の設定
(2)I/O度数分布への重み付けの設定
(3)平均目標レスポンス時間の設定
を行う。そして、ページ再配置条件に合致した階層へのページ再配置を実施し、各アプリケーション間でのレスポンス性能低下の影響を低減するものである。
具体的には、図1(1)の各Tierの使用容量の最大/最低使用量の設定は、アプリケーション単位、アプリケーションで使用する仮想ボリューム単位、複数の仮想ボリュームをグループとして纏めたグループ単位で、使用できる各Tierの容量の最大/最低を設定するものである。これにより、アプリケーション毎またはアプリケーションで使用する仮想ボリューム毎で偏ったTier使用を抑止する。
図1の例では、アプリケーション1が最低30GB(符号12a)のTier0を使用できるという制約条件をストレージ装置に設定する。その制約条件の設定で、図2(b)のようなアプリケーション2によるTier0の専有を防止でき、アプリケーション1でのレスポンス性能低下を低減できる。
また、アプリケーション2が最低20GB(符号12b)のTier2を使用しなければならないという制約条件を設定する。そのTier2での制約条件の設定で、アプリケーション2によるTier0ないしTier1の使用量を制限できるので、アプリケーション1でのレスポンス性能低下を低減できる。
図1(2)のI/O度数分布への重み付け設定は、アプリケーション1のI/O度数分布に対し重み付けする範囲と重みを設定するものである。この重み付けする範囲と重みの設定で、アプリケーション1のI/O度数分布10を見掛け上のI/O度数分布10aとすることができる。そのため、図1(1)と同様に、アプリケーション2によるTier0の専有を防止でき、アプリケーション1でのレスポンス性能低下を低減できる。
図1(3)の目標平均レスポンス時間(目標値)の設定は、アプリケーション毎の平均レスポンスタイムを計算し、計算値と事前に設定した目標値とを比較してアクセス性能の改善を実行するものである。
アプリケーション1での平均レスポンスタイムの計算値が目標値を上回る場合、アプリケーション2の仮想ページの内、Tier0に配置されている仮想ページをTier1へ移動しても、アプリケーション2の平均レスポンスタイムが目標平均レスポンスタイム未満にならない仮想ページをI/O数が少ない仮想ページより順に検索する。
検索した仮想ページと、アプリケーション1のTier1に属する仮想ページの中で最もI/O数が高い仮想ページとを入れ替える。
つまり、アプリケーション2のI/O度数分布で符号14aのTier0(SSD)に配置された仮想ページと、アプリケーション1のI/O度数分布で符号14bのTier1(SAS)に配置された仮想ページとを入れ替える。
このページ再配置処理により、図1(1)及び図1(2)と同様に、アプリケーション2によるTier0の専有を防止でき、アプリケーション1でのレスポンス性能低下を低減できる。詳細な動作については後述する。また、以降の説明では、発明の内容に応じて、度数分布をアプリケーション度数分布、仮想ボリューム度数分布、プール度数分布等と使い分けて説明する。
<システム構成>
図3は、ストレージシステムの全体構成図である。ストレージシステム39は、ストレージ装置30、管理端末33、ホスト計算機34、外部ストレージ装置35から構成される。
ストレージ装置30には、SAN(Storage Area Network)36などのネットワークを経由しCHA_I/F(チャネルアダプタインタフェース)31aを介して1つ以上のホストまたは/及び1つ以上の外部ストレージ装置が接続される。ホスト計算機34および外部ストレージ装置35は、CHA_I/F31aを介し、ストレージ装置30からデータを読み出したり、ストレージ装置30にデータを書き込んだりする。
また、ストレージ装置30には、NIC(Network Interface Card)31d及びNIC33dを介して、CIFS(Common Internet File System)やNFS(Network File System)などのネットワークプロトコルで、管理端末33が接続される。
ストレージ装置30は、制御装置31とディスクユニット32とに大別することができる。ディスクユニット32は、複数の記憶ドライブから構成される。ディスクユニット32は、物理的に異なる種類の記憶ドライブから構成されてもよい。
本実施例のディスクユニット32は、記憶ドライブとして、SASインタファースタイプSSD32a、SASタイプHDD32b、SATAタイプHDD32cが含まれている。なお、記憶ドライブは前述のものに限定されるものではなく、FC(Fibre Channel)タイプHDDやテープなどであってもよい。ディスクユニット32は、ファイバチャネルケーブル等の通信線を介して制御装置31に接続され、複数の記憶ドライブでRAIDグループを構成する。
制御装置31は、CHA_I/F31aと、CPU31bと、メモリ31cと、NIC31dと、SAS_I/Fコントローラ31eと、SAS_I/Fコントローラ31fと、SAS_I/Fコントローラ31gとを有する。
CHA_I/F31aは、ホスト計算機34からストレージ装置30へのI/Oコマンド(ライトコマンド又はリードコマンド)を受信し、受信したI/Oコマンドを、CPU31bに転送する。また、CHA_I/F31aは、ストレージ装置30と外部ストレージ装置35間のデータ転送にも用いられる。
CPU31bは、ストレージ装置30全体を制御するプロセッサである。つまり、ホスト計算機34からのI/Oアクセスを処理したり、後述のローカルコピーなどのアプリケーションプログラム(以下、アプリケーション)を動作させる。
メモリ31cは、DRAM(Dynamic Random Access Memory)などの揮発性メモリ及び/又は、フラッシュメモリなどの不揮発性メモリを有する記憶装置である。メモリ31cには、例えば、仮想ページに対するI/Oの対象のデータ要素が一時的に格納される記憶領域(以下、キャッシュメモリ領域或いは、それを略してCM)がある。また、メモリ31cには、種々の制御情報、コンピュータプログラムや管理テーブルが記憶される記憶領域(以下、共有メモリ領域或いは、それを略してSM)がある。
SAS_I/Fコントローラ31e、SAS_I/Fコントローラ31f、SAS_I/Fコントローラ31gは、それぞれ、ディスクユニット32のSSD32a、SASタイプHDD32b、SATAタイプHDD32cと接続される。
制御装置31は、ホスト計算機34から受信したコマンドに従ってディスクユニットへのデータの書き込み及び読み出しを制御する。制御装置31は、DP機能(Thin ProvisioningまたはDynamic Provisioning)に従う仮想ボリュームを提供する。仮想ボリュームは複数の仮想ページで構成されている。
ホスト計算機34のハードウェア構成は、一般的な計算機と同じである。すなわち、ホスト計算機34は、通信インタフェースと、揮発性メモリと、不揮発性メモリと、それらに接続されたCPUとを有する。
外部ストレージ装置35はストレージ装置30と同等の機能を持つ。通信I/Fは、CHA_I/Fを介した通信を行うためのファイバチャネルI/Fである。
管理端末33のハードウェア構成は、ディスプレイやプリンタなどの出力装置33aと、CPU33bと、揮発性メモリ又は/及び不揮発性メモリで構成されるメモリ33cと、NIC33dと、キーボードやマウスなどの入力装置33eとを有する。管理端末33は、NIC33dを介して遠隔地等からストレージ装置30を制御する。
<記憶階層>
図4は、ストレージ装置における各種記憶領域の関係を示す図である。
ストレージ装置30は、複数のディスクボリュームから構成されるプール1 41a、プール2 41b・・・プールn 41nを備える。
プールを構成する各ディスクボリューム43a、43b、43cは、2以上のプールページ431a、431b、431cに分割されている。各プールページは所定データサイズの記憶領域である。プールページにはページ番号が付与される。各ページは属するディスクボリュームのTier番号、すなわち、Tier#0 42a、Tier#1 42b、Tier#2 42cのいずれかを保持する。
ディスクボリューム43aは、記憶ドライブとして高価だが高速なSSDで構成される。同じく、ディスクボリューム43bは、SSDより低速であるが安価なSASタイプHDDより構成される。ディスクボリューム43cは、SSDより低速であるが安価で大容量のSATAタイプHDDより構成される。
ストレージ装置30は、プールに関連付けられた仮想ボリューム40a、40bを備える。1つのプールに、複数の仮想ボリュームが関連付けられる。例えば、プール1 41aは、仮想ボリューム40a及び40bが関連付けられる。
仮想ボリューム40aは、所定のデータサイズの仮想的な記憶領域である複数の仮想ページ401a、402a等から構成される。同じく、仮想ボリューム40bは、所定のデータサイズの仮想的な記憶領域である複数の仮想ページ401b等から構成される。
仮想ページに割り当てられているプールページが属するTier番号を、その仮想ページが属するTier番号と解釈することができる。仮想ページは、使用されるとき(例えば、データが書き込まれるとき)に初めてプールページが割り当てられる。
ストレージ装置30は、仮想ボリュームの性能を最適化するために、仮想ページに割り当てるプールページを適宜変更する。この変更処理を「ページ再配置処理」という。
例えば、アクセス負荷の大きい仮想ページには、高性能のディスクボリュームに属するプールページを割り当て、アクセス負荷の小さい仮想ページには、比較的性能の低いディスクボリュームに属するプールページを割り当てる。
ページ再配置処理では、ページ間でのデータの移動が行われる。ホスト計算機34からのアクセスの傾向に基づいて仮想ページに割り当てるプールページを再配置することによって、ストレージ装置30は、ホスト計算機34に対して高性能な仮想ボリュームを提供することができる。
各プールページの最適なTier番号の決定方法は、プール度数分布テーブルを参照し、過去の所定の時間帯においてアクセス頻度が高い仮想ページは番号の小さい(すなわち、高性能な)Tierに属するようにし、アクセス頻度が低い仮想ページは番号の大きい(すなわち、比較的性能の高くない)Tierに属するようにする。
以上の説明では、仮想化機能をストレージ装置30に備えたインバンド方式について述べた。なお、サーバなどに仮想化機構(ソフトウェア)を設けたサーバベースのインバンド方式や、仮想化スイッチと管理機能で構成された仮想化機構(ハードウェア)を設けたスイッチベースのインバンド方式で仮想化機能を実現することもできる。さらに、ホスト計算機に仮想化ソフトウェアを内蔵させ、ストレージ装置30に直結させて使用するアウトバンド方式で仮想化機能を実現することもできる。
また、ストレージ装置30上で動作するソフトウェア(アプリケーション)として、十分に離れた地点に設置された外部ストレージ装置35に、同一のデータをコピーするリモートコピーソフトウェアがある。リモートコピーソフトウェアは、同期式リモートコピー機能と非同期式リモートコピー機能を有する。
非同期式リモートコピー機能では、ジャーナル(変更履歴)データを論理デバイスへ格納後にリモートサイトへ転送することで、ホスト計算機非経由でリモート(遠隔)サイトの別ストレージ装置(外部ストレージ装置35)にレプリカボリュームを作成し、メインサイトの正ボリュームとの一貫性保持を非同期で行う機能である。
また、同期式リモートコピー機能では、メインサイト(ストレージ装置30)の更新処理に同期して、リモートサイト(外部ストレージ装置35)への更新処理を行いもので、
メインサイトの正ボリュームとリモートサイトの副ボリュームの内容を常に一致させている。なお、リモートコピーソフトでは、ストレージ装置30および外部ストレージ装置35は、共にデータのコピー先(リモート)・コピー元(メイン)となる機能を有する。
また、ストレージ装置30は、装置内部にコピーデータを作成するローカルコピーと呼ばれるソフトウェアもある。ローカルコピーソフトウェアには、正ボリュームの全データをそのまま複製する機能と、更新されたデータのみをバックアップするスナップショット機能の2つの機能を有する。
正ボリュームの全データをそのまま複製する機能では、論理ボリュームのレプリカ(副ボリューム)である実ボリュームを作成するもので、作成されたレプリカを利用することで、稼働中のアプリケーションに影響を与えずにバックアップを取得したり、バッチ業務実行などの並列処理を実現できる。
スナップショット機能は、指示した時点の論理ボリュームのレプリカ(副ボリューム)である仮想ボリュームを即座に作成する機能で、操作ミスやバグなどのソフトウェア障害時に、任意の時点のレプリカから即座にデータを回復できる。
更に、ストレージ装置30は、同一プール内または同一ボリューム内へ同一のファイルデータが格納された場合、ファイル単位またはファイル単位よりも細かいセグメント単位でデータを比較し、重複するデータを排除するソフトウェア(以下、De-duplication)もある。
また、ホスト計算機34上で動作するソフトウェアとして、データベースアプリケーションがある。このデータベースアプリケーションでは、索引部分であるINDEX部用の仮想ボリュームには高速な応答が要求され、一方、実データを格納したBODY部用の仮想ボリュームには高速な応答は要求されない。
<アロケーションテーブル>
図5は、アロケーションテーブルの構成例を示す図である。アロケーションテーブル50は、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
アロケーションテーブル50は、どの仮想ページにどのプールページが割り当てられているかを表すテーブルである。具体的には、例えば、テーブル50は、仮想ページ毎に、仮想ボリューム#50a、仮想ページ#50b、プールボリューム#50c、プールページ#50dを有する。
一つの仮想ページ(以下、図5の説明において「対象仮想ページ」と言う)を例とすると、これらの情報要素は、具体的には、下記の通りである。
(1)「仮想ボリューム#」は、対象仮想ページを有する仮想ボリュームの番号である。
(2)「仮想ページ#」は、対象仮想ページの番号である。
(3)「プールボリューム#」は、対象仮想ページを有する仮想ボリュームに割り当てられているプールボリュームの番号である。
(4)「プールページ#」は、対象仮想ページに割り当てられているプールページの番号である。
より具体的には、仮想ボリューム#100 51の仮想ページ#0 51aは、アロケーションテーブル50の仮想ボリューム#50aが“100”で仮想ページ#50bが“0”である対象仮想ページが該当し、プールボリューム#50cが“50”でプールページ#50dが“0”であるプールページが割当てられている。
同じく、仮想ボリューム#50aが“100”で仮想ページ#50bが“2”である仮想ページは、プールボリューム#50cが“51”でプールページ#50dが“1”であるプールページが割当てられている。
なお、仮想ボリューム#50aが“100”で仮想ページ#50bが“1”である対象仮想ページには、プールページは割り当てられていない(N/A:Non-Assigned)状態である。
<プールボリューム管理テーブル>
図6は、プールボリューム管理テーブルの構成例を示す図である。プールボリューム管理テーブル60は、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
プールボリューム管理テーブル60は、プールボリュームを構成している情報を管理するもので、記憶ドライブ、RAIDレベル、容量などを管理している。
すなわち、プールボリューム管理テーブル60は、プールボリューム#60a、ボリューム種別60b、ドライブ種別60c、RAIDレベル60d、PG#(プールグループ番号)60e、ボリューム容量(GB)60f、所属プール#60g、Tier#60h、未使用ページ数60iから構成される。
1つのプールボリューム(以下、図6の説明において「対象プールボリューム」と言う)を例とすると、これらの情報要素は、具体的には、下記の通りである。
(1)「プールボリューム#」は、対象プールボリュームを識別するための番号である。
(2)「ボリューム種別」は、対象プールボリュームの種類を管理する情報で、“物理”、“論理”、“仮想”のいずれかの情報が設定される。
(3)「ドライブ種別」は、対象プールボリュームを構成する記憶ドライブの種別を表す情報である。
(4)「RAIDレベル」は、対象プールボリュームでのRAIDレベル番号である。
(5)「PG#」は、対象プールボリュームを構成する物理ディスク(記憶ドライブ)を識別するプールグループ番号である。
(6)「ボリューム容量(GB)」は、対象プールボリュームへのデータ記憶容量である。
(7)「所属プール#」は、対象プールボリュームが属するプール番号である。
(8)「Tier#」は、対象プールボリュームのTierレベルを表すTier番号である。
(9)「未使用ページ数」は、対象プールボリュームで仮想ページへの割当てが行われていない、すなわち、未使用であるページ数を表す情報である。
より具体的には、図の下半分に表記したように、プールボリューム#60aが“50”であるプールボリューム#50(符号64)は、ボリューム種別60b、ドライブ種別60c、PG#60eから、PG番号として“4”(符号62)を付けられたSSDから構成された物理ボリューム(符号61)であることが分かる。
また、RAIDレベル60d、ボリューム容量60fから、プールボリューム50は、3D+1PというRAID5を構成し、総記憶容量は750GB(=250GB*(パリティ部分1台分を除くデータ部分3台分))(符号63)であることが分かる。
更に、所属プール#60g、Tier#60h、未使用ページ数60iから、プールボリューム50は、プール1に所属しTier#0(Tierレベル0)で、未使用ページが399ページあることが分かる。ちなみに、使用済みページまたは未使用ページは、所定のページ容量65、例えば、42MB/ページの記憶容量を有する。
同じく、プールボリューム#60aが“60”であるプールボリューム#60は、回転数が15Krpm(Kilo root per minutes)であるSASタイプHDDを8台で6D+2PというRAIDレベル6を構成し、プールグループ番号が“5”で物理ボリュームである。このプールボリューム60は、プール1に属しTier#1(Tierレベル1)で、総記憶容量は1200GBで、未使用ページ数が150ページであることが分かる。
なお、プールボリューム管理テーブル60のTier#は、0から2までの3階層としているが、2階層ないし4階層以上でもかまわない。また、各階層で使用するドライブの種別として、FC(Fibre Channel)タイプのHDD、7.2KrpmのNL(Near Line)−SASのHDDやテープなどを用いることも可能である。
<プールページ管理テーブル>
図7は、プールページ管理テーブルの構成例を示す図である。プールページ管理テーブル70は、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
プールページ管理テーブル70は、各プールページの状態を管理するためのテーブルである。プールページ管理テーブル70は、プールページ毎に、プールボリューム#70a、プールページ#70b、及びページ使用状態70cの情報から構成される。
1つのプールページ(以下、図7の説明において「対象プールページ」と言う)を例として、前述の情報要素は、下記の通りである。
(1)「プールボリューム#」は、対象プールページを有するプールボリュームを識別する番号である。
(2)「ページ#」は、対象プールページの番号である。
(3)「ページ使用状態」は、対象プールページの使用状態を把握するための情報である。使用状態の情報として、例えば、“使用”と“未使用”がある。
“使用”は、対象プールページがいずれかの仮想ページに割当て済みであることを意味する。“未使用”は、対象プールページがいずれの仮想ページにも割り当てられておらず、それ故に、いずれの仮想ページにも割当て可能な状態になっていることを意味する。
具体的には、プールボリューム#が“50”であるプールボリューム#50のページ#0は、使用状態である。逆に、プールボリューム#50のページ#2は使用されていないので、いずれの仮想ページにも割当て可能な状態になっている。
<仮想ページI/O数管理テーブル>
図8は、仮想ページI/O数管理テーブルの構成例を示す図である。仮想ページI/O数管理テーブル80は、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
仮想ページI/O数管理テーブル80は、仮想ボリュームの仮想ページ毎に発生したI/O数を管理するテーブルであり、前述のDT機能により参照され仮想ページに割り当てられたプールページの階層レベルを変更するために用いられる。仮想ページI/O数管理テーブル80は、仮想ボリューム#80a、仮想ページ#80b、仮想ページ毎に発生したI/O数を管理する仮想ページ毎I/O数80cから構成される。
1つの仮想ページ(以下、図8の説明において「対象仮想ページ」と言う)を例として、前述の情報要素は、下記の通りである。
(1)「仮想ボリューム#」は、対象仮想ページを有する仮想ボリュームを識別するための番号である。
(2)「仮想ページ#」は、対象仮想ページの番号である。
(3)「仮想ページ毎I/O数」は、対象仮想ページに発生したI/Oの合計である。
具体的には、仮想ボリューム#80aが“100”で、仮想ページ#80bが“0”である仮想ページ#0で発生したI/O数は仮想ページ毎I/O数80cから“10”である。
同じく、仮想ボリューム#100の仮想ページ#1では、仮想ページ毎I/O数80cが“0”なので、I/Oは発生していない。
また、仮想ボリューム#100の仮想ページ#2で発生したI/O数は“512”、仮想ボリューム#104の仮想ページ#0で発生したI/O数は“635”と高い値と示していることが、仮想ページI/O数管理テーブル80より把握できる。
<ライトI/O処理>
図9は、ホスト計算機からのライトI/O要求の処理を示すフローチャート図である。図10は、ライトI/O要求時での記憶領域のマッピング処理を示すフローチャート図である。
以下の処理を、説明の便宜上、ストレージ装置30のCPU31bが処理を実行するものとして説明する。なお、CPU31b上で動作するプログラム、例えば、前述のDP機能やDT機能を有するプログラムが処理を実行するものとしても良い。
図9及び図10の処理はホスト計算機34からストレージ装置30へのライトI/O要求の発生を契機にCPU31bにより実行される。
S901で、ホスト計算機34からネットワーク36を介しストレージ装置30のCHA_I/F31aがライトI/O要求を受領する。CHA_I/F31aが受領したライトI/O要求(ライトコマンド、ライト先アドレス及びライトデータ)をCPU31bに転送する。
S902で、CPU31bは、図10に示すマッピング制御(WR)の処理を実行する。
図10のS1001で、CPU31bは、ライト先の仮想ページへのプールページ割当て状態をアロケーションテーブル50(図5)で確認する。
S1002で、CPU31bは、ライト先の仮想ページへプールページが割当て済みかどうかを判断する。
仮想ページにプールページが割当て済みの場合(S1002:Yes)、CPU31bは、S1003を実行する。未割当ての場合(S1002:No)、CPU31bは、S1004の処理を実行する。
S1003で、CPU31bは、ライト先の仮想ページに割当てられたプールページのアドレス情報(プールボリューム番号、ページ番号)をプールボリューム管理テーブル60及びプールページ管理テーブル70から取得する。
ライト先の仮想ページへ新規にプールページが割当てられる場合、CPU31bは、取得したプールページのアドレス情報(プールボリューム番号、プールページ番号)で、アロケーションテーブル50を更新する。具体的には、CPU31bは、ライト先の仮想ボリューム番号と仮想ページ番号の行のプールボリューム#50cとプールページ#50dの欄の内容を取得したプールボリューム番号とページ番号で変更する。
S1004で、CPU31bは、ライトI/O要求を満たすTierを決定する。例えば、Tier0とする。
S1005で、CPU31bは、S1004で決定したTierに対応するプールボリュームをプールボリューム管理テーブル60より決定する。次に、CPU31bは、決定したプールボリュームにおける未使用プールページをプールページ管理テーブル70で確認する。
S1006で、CPU31bは、プールボリュームに未使用プールページが有るかを判断する。未使用プールページが有る場合(S1006:Yes)、CPU31bは、S1007を実行する。未使用プールページが無い場合(S1006:No)、CPU31bは、S1008を実行する。
S1007で、CPU31bは、決定したTierに該当するプールボリュームから仮想ページに割当てるプールページを選択し割当てる。具体的には、Tier0と決定された場合、CPU31bは、プールボリューム管理テーブル60でプールボリューム#50を選択する。CPU31bは、プールページ管理テーブル70でプールボリューム#50で未使用状態のプールページであるページ#2を選択する。CPU31bは、選択されたページ#2に対応するプールページ管理テーブル70のページ使用状態70cを“未使用”から“使用”へと更新する。
S1008で、CPU31bは、別のTierを選択し、例えば、同じTier0であれば、プールボリューム管理テーブル60からプールボリューム#70を選択する。そして、CPU31bは、プールページ管理テーブル70でプールボリューム#70での未使用状態のプールページを選択した後、S1007とS1003を実行する。
再び、図9の処理を説明する。
CPU31bは、S902でのマッピング制御(WR)の処理を完了した後、S903を実行する。
S903で、CPU31bは、取得したプールページのアドレス情報(プールボリューム番号、プールページ番号)に対応したメモリ31cのキャッシュメモリ領域にライトデータを書き込む。
S904で、CPU31bは、ホスト計算機34へライト完了通知を送信する。
以上のように、ストレージ装置30は、ホスト計算機34からのライトI/O要求を仮想ページへのプールページの割当ても含め処理できる。
<デステージ処理>
図11は、メモリから記憶ドライブへのデステージ処理を示すフローチャート図である。
S1101で、CPU31bは、メモリ31c上のキャッシュメモリ領域に、記憶ドライブに格納されておらずメモリ上のみに存在するダーティデータがあるかを確認する。
S1102で、CPU31bは、ダーティデータの有無を判断する。ダーティデータがメモリ31c上のキャッシュメモリ領域に有る場合(S1102:Yes)、CPU31bは、S1103を実行する。ダーティデータが無い場合(S1102:No)、CPU31bは、デステージ処理を終了する。
S1103で、CPU31bは、アロケーションテーブル50で仮想ページのアドレス情報(仮想ボリューム番号、仮想ページ番号)をプールページのアドレス情報(プールボリューム番号、プールページ番号)に変換する。
S1104で、CPU31bは、変換されたプールページに対応する記憶ドライブの所定領域に対しダーティデータを書き込むというデステージ動作を実行する。
S1105で、CPU31bは、デステージ動作に要したI/O数を仮想ページ毎にカウントし、仮想ページI/O数管理テーブル80を更新する。
具体的には、仮想ボリューム#100の仮想ページ#0の場合、対応するプールボリューム#50でプールページ#0であることが、アロケーションテーブル50で分かる。
また、プールボリューム#50は、ドライブ種別がSSDである物理ディスク61で構成されていることがプールボリューム管理テーブル60より分かる。
そこで、CPU31bは、SAS_I/F31e経由で物理ディスクであるSSD61の所定領域へダーティデータを書き込む。
そして、CPU31bは、仮想ページI/O数管理テーブル80で仮想ボリューム#80aが“100”で仮想ページ#80bが“0”である仮想ページ毎I/O数80cの内容にデステージ動作に要したI/O数を加算する。
なお、デステージ動作に要したI/O数はSAS_I/F31eで計測し、計測結果をCPU31bが取得して仮想ページI/O数管理テーブル80を更新する。
また、デステージ先がSASタイプHDD32bまたはSATAタイプHDD32cであれば、デステージ動作に要したI/O数はそれぞれ、SAS_I/F31fまたはSATA_I/F31gで計測する。
例えば、デステージ動作に要したI/O数が“5”であれば、CPU31bは、仮想ページ毎I/O数80cの内容である“10”に“5”を加算した結果の“15”で、仮想ページ毎I/O数80cの内容を更新する。
<リードI/O処理>
図12は、ホスト計算機からのリードI/O要求の処理を示すフローチャート図である。図13は、リードI/O要求時での記憶領域のマッピング処理を示すフローチャート図である。
図12及び図13の処理は、ホスト計算機34からストレージ装置30へのリードI/O要求の発生を契機にCPU31bにより実行される。
S1201で、CPU31bは、メモリ31c上のキャッシュメモリ領域にリードすべきデータが有るかを確認する。
S1202で、CPU31bは、キャッシュメモリ領域にリードすべきデータが有るかを判断する。データが有る場合(S1202:Yes)、CPU31bは、S1203を実行する。データが無い場合(S1202:No)、CPU31bは、S1204の処理を実行する。
S1203で、CPU31bは、メモリ31c上のキャッシュメモリ領域からリードすべきデータを読み出して、ホスト計算機34に送信しリードI/O要求の処理を完了する。
キャッシュメモリ領域にリードすべきデータが無い場合、S1204で、CPU31bは、図13のマッピング制御(RD)の処理を実行する。
S1301で、CPU31bは、リードアクセス領域の仮想ページに割り当てられているプールページが有るかをアロケーションテーブル50で確認する。
S1302で、CPU31bは、プールページが有るかを判断する。CPU31bは、リードアクセス領域の仮想ページに割り当てられているプールページが有る場合(S1302:Yes)、S1303を実行し、プールページが無い場合(S1302:No)、S1304を実行する。
S1303で、CPU31bは、プールページからデータを読み込み、マッピング制御(RD)の処理を完了する。
S1304で、CPU31bは、0データを読み込み、マッピング制御(RD)の処理を完了する。
再び、図12の処理を説明する。
S1205で、CPU31bは、読み出したデータが0データ以外で有れば、読み出したデータをメモリ31c上のキャッシュメモリ領域に格納する。
S1206で、CPU31bは、ステージング動作で要したI/O数をカウントし、カウントした値を用いて仮想ページ毎I/O数80cの内容を更新する。この更新動作は、図11のS1105で説明した更新動作と同じである。
最後に、S1203で、CPU31bは、プールページから読み出したデータまたは0データをホスト計算機34に送信し、ストレージ装置30は、ホスト計算機34からのリードI/O要求の処理を完了する。
<最適Tier決定>
図14は、最適Tierの決定処理を示すフローチャート図である。
S1401で、CPU31bは、仮想ページI/O数管理テーブル80(図8)を元に仮想ボリュームI/O度数分布テーブル(図15)を作成する。
S1402で、CPU31bは、同一プールに属する仮想ボリューム毎のI/O度数分布を加算し、プールI/O度数分布テーブル(図16)を作成する。そして、プールI/O度数分布テーブルの内容を、横軸をI/O数で、縦軸をページ数で表したプール毎度数分布グラフa1(図17(a))を作成する。作成したプール毎度数分布グラフa1を変換し、横軸を記憶容量で、縦軸をIOPSで表したプール毎度数分布グラフb1(図17(b))を作成する。
S1403で、CPU31bは、式1で表されるドライブ性能、またはTier容量を満たすまで、仮想ページを上位Tierに上詰めして配置する。CPU31bは、ドライブ性能を超過した仮想ページには、次のTier(同一レベルないし下位レベル)を配置する。これは、ドライブ性能を超えたTierのプールページを仮想ページに配置しても、性能向上はできないためである。
ドライブ性能=ドライブの単位容量当たりの性能(式2)×プールボリューム容量×係数(60%)…式1
ドライブの単位容量あたりの性能=ドライブの限界性能÷ドライブ容量…式2
なお、式1での係数(60%)は、ドライブ性能が飽和したにも関わらず、ドライブ総容量が増加し続けること(追加されるドライブ台数の増加)を防止するためのものである。
以上の処理の説明では、仮想化機能をストレージ装置30に備えたインバンド方式について述べた。なお、前述のサーバベースのインバンド方式やスイッチベースのインバンド方式、更にアウトバンド方式で仮想化機能を用いて前述の処理を実行することもできる。
<仮想ボリュームI/O度数分布テーブル>
図15は、仮想ボリュームI/O度数分布テーブルの構成例を示す図である。仮想ボリュームI/O度数分布テーブル150は、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
仮想ボリュームI/O度数分布テーブル150は、仮想ボリューム毎に発生するI/O数を管理するものである。
仮想ボリュームI/O度数分布テーブル150は、仮想ボリューム#150a、I/O数範囲150b、ページ数150c、I/O数範囲毎の累計I/O数150dから構成される。
1つの仮想ボリューム(以下、図15の説明において「対象仮想ボリューム」と言う)を例として、前述の情報要素は、下記の通りである。
(1)「仮想ボリューム#」は、対象仮想ボリュームを識別するための番号である。
(2)「I/O数範囲」は、対象仮想ボリュームで発生したI/O数の範囲を示すものである。“X−Y”という表記は、発生したI/OがX回からY回の範囲を表す。
例えば、“15−31”は、発生したI/Oが15回から31回の範囲を表す。ちなみに、“0−0”は0回、“1−1”は1回を表す。ちなみに、I/O数の範囲ではなく1I/O単位で管理しても良い。
(3)「ページ数」は、対象仮想ボリュームで、I/O数の範囲に一致したI/Oが発生した仮想ページの数である。
例えば、仮想ボリューム#0の仮想ページの内、発生したI/O数が“2”である仮想ページの数が60ページ、I/O数が“3”である仮想ページの数が81ページであると、仮想ボリューム#0のI/O数範囲150bが“2−3”のページ数150cは、両者の合計141ページとなる。
(4)「I/O数範囲毎の累計I/O数」は、対象仮想ボリュームでの発生したI/O数範囲毎に発生したI/O数を合計して算出した累計I/O数である。
<プールI/O度数分布テーブル>
図16は、プールI/O度数分布テーブルの構成例を示す図である。図17は、プール毎の度数分布のイメージを示す図である。
プールI/O度数分布テーブル160は、プール毎に発生するI/O数を管理するもので、ストレージ装置30のメモリ31cに格納され、適宜CPU31bで使用される。
プールI/O度数分布テーブル160は、プール#160a、I/O数範囲160b、ページ数160c、I/O数範囲毎の累計I/O数160dから構成される。
1つのプール(以下、図16の説明において「対象プール」と言う)を例として、前述の情報要素は、下記の通りである。
(1)「プール#」は、対象プールを識別するための番号である。
(2)「I/O数範囲」は、対象プールで発生したI/O数の範囲を示すものである。
(3)「ページ数」は、対象プールで発生したI/O数の範囲に一致したプールページ数の合計である。
(4)「I/O数範囲毎の累計I/O数」は、対象プールでの発生したI/O数範囲毎に発生したI/O数を合計して算出した累計I/O数である。
なお、上記(2)から(4)での表記方法及び表記内容は、図15と同じである。また、各プールに属する仮想ボリューム毎のI/O度数分布を加算して、プールI/O度数分布テーブル160を作成することも可能である。
<プール毎度数分布グラフ>
図17は、プール毎の度数分布のイメージを示す図である。
プールI/O度数分布テーブル160を用いてプール毎の度数分布グラフを作成する方法について図17で説明する。説明の簡便のためプールの数は1つとする。
まず、プールI/O度数分布テーブル160でI/O数範囲毎にI/O数と合計ページ数を表す棒グラフを作成する。そして、作成した棒グラフでI/O数が少ないものから多いものへと順に棒グラフを左から並べていく。
例えば、図17(a)で一番左側の棒グラフは、I/O数が“0”であるページを纏めたもので、そのページ数が1000ページであるとする。2番目の棒グラフは、I/O数が“1”であるページを纏めたもので、そのページ数が800ページであるとする。3番目はI/O数が“2”でそのページ数が700・・・とする。このように、I/O数が少ない棒グラフから多い棒グラフへと並べていく。
発生するI/O数が多くなるにつれて、そのI/O数でアクセスされるページ数は減少していく。そのため、負荷であるI/O数とページ数で表記されたプールI/O度数分布a(各棒グラフの頂点を結んだ曲線)は、符号170aのようになる。
また、負荷数と各Tierに割り当てられた記憶ドライブ(物理ディスク)のドライブ容量により、各ページへ割当てるTierレベルが求められる。
例えば、図17(a)では、負荷が高いページ、すなわち、一番右側の棒グラフから12番目の棒グラフまでのページはTier0に配置すべきページとなる。同じく、13番目の棒グラフから21番目の棒グラフまでのページはTier1に配置すべきページとなり、22番目の棒グラフから24番目の棒グラフ(一番左側の棒グラフから4番目の棒グラフまで)までのページはTier2に配置すべきページとなる。
次に、作成したプール毎度数分布グラフa1(符号170a)を変換し、横軸を記憶容量で、縦軸をIOPSで表したプール毎度数分布グラフb1(図17(b))を作成する。
以上の動作で、前述のプール度数分布グラフ(容量−IOPS)を作成できる。
<<実施例1>>
<<概要>>
実施例1でのストレージ装置30は、下記(1)及び(2)の機能を有するものとする。
(1)同一のプールに属する複数の仮想ボリュームをグループ化する機能
グループ化した仮想ボリューム群をTG(Tiering Group)と呼ぶ。
(2)TG毎に各Tierでの使用量の制約条件を設定する機能
制約条件の設定項目はTier0の最低使用量を保証するTier0最低使用量、Tier0の最大使用量を規定するTier0最大使用量、Tier2の最低使用量を規定するTier2最低使用量とする。
なお、本実施例では、前述の3つの使用量への制約条件を設定した場合について説明する。しかしながら、これに限定されるものではなく、本発明では、Tier2での最大使用量、Tier1での最低使用量またはTier1での最大使用量を設定し、後述のページ再配置処理を実行しレスポンス性能への影響を低減することもできる。
また、Tier数を3つ(3階層)としているが、2階層でも4階層以上とすることもできる。
まず、ユーザまたはシステム管理者は作成した複数の仮想ボリュームに対してTG設定を行う。TG設定ではグループ化したい仮想ボリューム群を各TGに登録し、TG毎に制約条件を設定する。
グループ化は、仮想ボリュームの用途毎に行う。例えば、プールに属する仮想ボリュームが、ホスト計算機34上で動作するデータベースアプリケーションに使用されているのであれば、索引部分であるINDEX部に使用される仮想ボリューム群と実データを格納したBODY部に使用される仮想ボリューム群をそれぞれTGとする。
これは、このデータベースアプリケーションでは、索引部分であるINDEX部用の仮想ボリュームには高速な応答が要求され、一方、実データを格納したBODY部用の仮想ボリュームには高速な応答は要求されない。
そのため、索引部分であるINDEX部用の仮想ボリュームと実データを格納したBODY部用の仮想ボリュームとを同一のTGとするとアクセス性能が低下する。そこで、それぞれの仮想ボリュームを別のTGとしてきめ細かい階層の割当てを実行することにより、ストレージ装置での応答性能を向上させる。
グループ化したい仮想ボリューム群と制約条件であるTier0最低使用量、Tier0最大使用量、Tier2最低使用量は、ユーザまたはシステム管理者により管理端末33で設定される。
次に、仮想ページI/O数管理テーブルから仮想ボリューム毎の度数分布を作成する。これを元に、同一TGに属する仮想ボリュームの度数分布を加算することでTG毎度数分布を作成する。
作成した各TGのTG毎度数分布と事前に設定したTier0最低使用量からTier0へ移動させるべき仮想ページを決定する。
同様に、各TGのTG毎度数分布とTier2最低使用量からTier2へ移動させるべき仮想ページを決定する。
次に、同一プールに属するTGのTG毎度数分布を加算してプール毎度数分布を作成し、移動済みページ以外のページを対象にI/O数が高い仮想ページから順にドライブ性能、またはTier容量を満たすまで上位Tierに上詰めで移動させる。また、ドライブ性能またはTier容量を超過したら次のTierを選択し、同じく上詰めで移動させる。
すべての仮想ページの移動が完了したら各TGのTier0使用量が事前に設定したTier0最大使用量を超過していないかチェックし、超過している場合は当該TG以外のTGに属するTier1に配置されている仮想ページとの入れ替えを行う。
ここで、入れ替え対象となる仮想ページは当該TGのTier0に配置されている仮想ページの中でもっともI/O数が少ない仮想ページと、当該TG以外のTier1に配置されている仮想ページの中でもっともI/O数が多い仮想ページとする。
すべてのTGが、Tier0最大使用量の制約条件を満たした時点でページの再配置が完了する。
このように、TG毎にTierの使用量の制約条件を設けることで、各TGがI/O数に関係なく上位階層Tier0を使用できるため、他TGの負荷変動の影響を低減できる。更に、各アプリケーションに使用される仮想ボリューム毎にTG化すれば、アプリケーション間のレスポンス性能への影響を低減できる。
<<ページ再配置処理>>
図18は、実施例1でのTG毎に設定された制約条件でのページ再配置処理を示すフローチャート図である。図19は、実施例1でのTG設定の処理を示すフローチャート図である。図20は、実施例1でのTG設定情報管理テーブルの構成例を示す図である。
S1801で、CPU31bは、図19に示すTG設定の処理を実行する。
<TG設定/TG設定情報管理テーブル1>
図19のS1901からS1904の処理で、図20に示すTG設定項目に対して所定情報を設定する。
TG設定情報管理テーブル200は、POOL#200a、TG#200b、各TGに属する仮想ボリューム#200c、制約条件(使用容量(GB))200dから構成される。
1つのTG(以下、図20の説明において「対象TG」と言う)を例として、前述の情報要素は、下記の通りである。
(1)「POOL#」は、対象TGが所属するプールを識別するための番号である。各プールには1つ以上のTGが所属する。
(2)「TG#」は、対象TGを識別するグループ番号である。
(3)「各TGに属する仮想ボリューム#」は、対象TGに属する仮想ボリュームを識別するための情報である。1つのTGには1つ以上の仮想ボリュームが属する。
(4)「制約条件」は、対象TGに対し、Tier0最大使用量、Tier0最低使用量、Tier2最低使用量を設定し制約条件とするものである。各設定欄には容量(GB)の値が設定されるが、“未設定”は値を設定していない状態を表し、“−”は、容量を設定できないことを表している。
例えば、POOL#200aが“0”でTG#200bが“0”であるPOOL#0のTG#0には、各TGに属する仮想ボリューム#200cから番号0/1/2の3つの仮想ボリュームが属していることが分かる。また、制約条件200dからTier0最大使用量が30GBとして設定され、Tier0最大使用量とTier2最低使用量は未設定である。
まず、S1901(図19)で、管理端末33のCPU33bは、ユーザないしシステム管理者がディスプレイなどの出力装置33aに表示された設定画面でキーボードなどの入力装置33eにより入力されたTGとして用途毎にグループ化する仮想ボリュームの情報を取得する。
S1902で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定したTG毎のTier0最大使用量の制約条件を取得する。
S1903で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定したTG毎のTier0最低使用量の制約条件を取得する。
S1904で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定したTG毎のTier2最低使用量の制約条件を取得する。
Tier2最低使用量の制約条件の取得後に、CPU33bは、取得した各種情報をTG設定情報管理テーブル200として纏める。そして、CPU33bは、纏めたTG設定情報管理テーブル200をNIC33d経由でストレージ装置30に送信する。
ストレージ装置30のCPU31bは、管理端末33より送信されたTG設定情報管理テーブル200をNIC31d経由で取得し、メモリ31c上の共有メモリ領域に格納する。
<TGの新規設定>
図21は、実施例1での仮想ボリューム作成時のTG設定画面の構成例を示す図である。
TG設定画面210は、管理端末33の出力装置33aで表示された画面を示しており、TG設定項目の入力領域211と入力情報の表示領域212を持つ。
TG設定項目の入力領域211は、TG番号を入力する“TG Number”、Tier0での最大使用量を入力する“Tier0 Max Capacity”、Tier0での最低使用量を入力する“Tier0 Min Capacity”、Tier2での最低使用量を入力する“Tier2 Min Capacity”の4つの入力領域を持つ。
また、入力情報の表示領域212は、上述の入力情報が表示されユーザまたはシステム管理者が入力情報を確認できる。例えば、TG#3には、Tier0での最低使用量が25GBと設定され、Tier0での最大使用量とTier2での最低使用量は設定されていないことが表示領域212より分かる。
前述のように、TG番号や制約条件の取得及び取得情報の表示は、管理端末33のCPU33bが実行する。
<TGの追加設定/TG設定内容の確認>
図22は、実施例1での仮想ボリューム作成後のTG設定変更を行うTG設定画面の構成例を示す図である。図23は、実施例1でのTG設定内容を確認するTG設定確認画面の構成例を示す図である。
仮想ボリューム作成後にTGの設定変更を実行する場合も、図21と同様に設定画面220の入力領域に所定のTG番号とTier0での最大使用量などの制約条件を入力し設定する。
また、ユーザまたはシステム管理者は、仮想ボリューム作成時または仮想ボリューム作成後に設定されたTG番号や制約条件を、図23の確認画面230の表示領域232で確認できる。
例えば、TG#1には、Tier0での最大使用量とTier2での最低使用量がそれぞれ10GBと設定され、Tier0での最低使用量は設定されていないことが分かる。 なお、TG番号や制約条件は動的に設定、すなわち、ストレージ装置30を稼働したままで、設定できる。
再び、図18の処理を説明する。
S1802で、CPU31bは、仮想ページI/O数管理テーブル80(図8)を元に、仮想ボリュームI/O度数分布テーブル150(図15)を作成する。
S1803で、CPU31bは、管理端末33より取得したTG設定情報管理テーブル200を用いて、同一TGの仮想ボリュームの度数分布を加算し、TG毎度数分布を作成する。例えば、POOL#0のTG#1は、仮想ボリューム#3と仮想ボリューム#4がグループ化されているので、CPU31bは、仮想ボリューム#3の度数分布と仮想ボリューム#4の度数分布を加算しTG#1の度数分布を作成する。
具体的には、CPU31bは、仮想ボリュームI/O度数分布テーブル150の仮想ボリューム#150aが“3”である仮想ボリュームのページ数と、仮想ボリューム#150aが“4”である仮想ボリュームのページ数とを加算する。
同じく、CPU31bは、仮想ボリューム#3の累計I/O数と、仮想ボリューム#4累計I/O数を加算する。CPU31bは、加算結果より、図17(b)のような度数分布、すなわちTG度数分布を作成する。以上の処理を、CPU31bは、各POOLの各TGに実行し、各TGの度数分布を作成する。
S1804で、CPU31bは、作成されたTG度数分布とTG設定情報管理テーブル200に設定されたTier0での最低使用量を用いて、Tier0最低使用量の制約条件処理(図24)を実行する。
<Tier0における最低使用量の制約条件処理>
図24は、実施例1でのTier0最低使用量の制約条件処理を示すフローチャート図である。
このTier0最低使用量の制約条件処理では、制約条件としてTG0におけるTier0の最低使用量が30GBに設定されているものとする。TG0の度数分布グラフ240の点線で囲われた部分242(容量30GB)については、必ず、Tier0を割り当てるものである。
S2401で、CPU31bは、TGの識別番号であるiを“0”とする。
S2402で、CPU31bは、TGi(TG0)にTier0最低使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。
Tier0最低使用量の制約条件の設定が無い場合(S2402:No)は、CPU31bは、S2405を実行する。制約条件の設定が有る場合(S2402:Yes)は、CPU31bは、S2403を実行する。なお、TG設定情報管理テーブル200からTG0のTier0最低使用量の制約条件が30GBと設定されているので、CPU31bは、S2403を実行する。
S2403で、CPU31bは、TG0でのTier0使用量が最低使用量に達するまで、TGi(TG0)の仮想ボリューム(仮想ボリューム#0/#1/#2)に所属する仮想ページの内、I/O数が高い仮想ページを仮想ページI/O数管理テーブル80から検索し、検索した仮想ページを順に、Tier1ないしTier2からTier0へ移動する。
S2404で、CPU31bは、Tier0へ移動した仮想ページを移動済みページとして、アロケーションテーブル50や仮想ページI/O数管理テーブル80などの管理テーブルに登録する。
S2405で、CPU31bは、TGの識別番号iに1を加算する。つまり、CPU31bは、iの値を“0”から“1”に更新する。
S2406で、CPU31bは、TGの識別番号iが最大TG番号を超えているかを判断する。例えば、POOL#0の場合、最大TG番号は“1”(TG0とTG1がPOOL#0に存在)なので、TGの識別番号iが最大TG番号を超えていない(S2406:No)。そこで、CPU31bは、再び、S2402以降の処理を繰り返す。
S2402で、CPU31bは、TG1にTier0最低使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。TG設定情報管理テーブル200からTier0最低使用量の制約条件は“未設定”なので(S2402:No)、CPU31bは、S2405で、TGの識別番号iに1を加算し処理対象TGをTG2とする。
S2406で、再び、CPU31bは、TGの識別番号iが最大TG番号を超えているかを判断する。なお、POOL#1ではTG2が存在しないので、CPU31bは、Tier0最低使用量の制約条件処理を終了する。なお、S2401からS2406までの処理をPOOL#0以外のプールに対しても、CPU31bが実行してもよい。
従来では、TG1のI/O数上昇により、TG0へのTier0の割当てが無くなることがあり、TG0へのアクセス性能が低下していた。本発明では、以上のように、TG0のI/O数に関わらず、TG0はTier0を最低30GB分使用できる。そのため、TG1のI/O数上昇によるTG0のアクセス性能への影響を低減できる。
次に、S1805(図18)で、CPU31bは、作成されたTG度数分布とTG設定情報管理テーブル200に設定されたTier2での最低使用量を用いて、Tier2最低使用量の制約条件処理(図25)を実行する。
<Tier2における最低使用量の制約条件処理>
図25は、実施例1でのTier2最低使用量の制約条件処理を示すフローチャート図である。
このTier2最低使用量の制約条件処理では、制約条件としてTG1におけるTier2の最低使用量が20GBに設定されているものとする。TG1の度数分布グラフ241の点線で囲われた部分252(容量20GB)については、必ず、Tier2を割り当てるものである。
S2501で、CPU31bは、TGの識別番号であるiを“0”とする。
S2502で、CPU31bは、TGi(TG0)にTier2最低使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。
Tier2最低使用量の制約条件の設定が無い場合(S2502:No)は、CPU31bは、S2505を実行する。制約条件の設定が有る場合(S2502:Yes)は、CPU31bは、S2503を実行する。なお、TG設定情報管理テーブル200からTG0のTier2最低使用量の制約条件は“未設定”であるので、CPU31bは、S2505を実行する。
S2505で、CPU31bは、TGの識別番号iに1を加算する。つまり、CPU31bは、iの値を“0”から“1”に更新する。
S2506で、CPU31bは、TGの識別番号iが最大TG番号を超えているかを判断する。POOL#0の場合、最大TG番号は“1”なので、CPU31bは、再び、S2502の処理を実行する。
S2502で、CPU31bは、TG1にTier2最低使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。TG設定情報管理テーブル200からTG1にTier2最低使用量の制約条件の設定(20GB)が有る(S2502:Yes)ので、CPU31bは、S2503を実行する。
S2503で、CPU31bは、TG1でのTier2使用量が最低使用量の20GBに達するまで、TG1に所属するページの内、I/O数が低い仮想ページを仮想ページI/O数管理テーブル80から検索し、順に検索した仮想ページをTier0ないしTier1からTier2へ移動する。
S2504で、CPU31bは、Tier2へ移動した仮想ページを移動済みページとして、アロケーションテーブル50や仮想ページI/O数管理テーブル80などの管理テーブルに登録する。
S2505で、CPU31bは、TGの識別番号iに1を加算し、処理対象のTGをTG2とし、最大TG番号を超えているかを判断する。なお、POOL#0ではTG2が存在しないので、CPU31bは、Tier2最低使用量の制約条件処理を終了する。なお、S2501からS2506までの処理をPOOL#0以外のプールに対しても、CPU31bが実行してもよい。
以上のように、TG1はTier2を最低20GB使用しなければならないので、TG1によるTier0またはTier1の専有及び使用量の制限を実現できる。この処理により、TG1のI/O数上昇によるTG0のアクセス性能への影響を低減できる。
再び、図18の処理を説明する。
S1806で、CPU31bは、 同一プールのTG毎度数分布を加算し、プール毎度数分布を作成する。例えば、POOL#0では、TG0の度数分布240とTG1の度数分布241を加算し、図17(b)に示すプール度数分布を作成する。その作成処理をCPU31bは、各プールに対し実行する。
S1807で、CPU31bは、移動済みページ以外の仮想ページを対象にドライブ性能、またはTier容量を満たすまで、仮想ページを上位Tierに上詰めして配置していき、ドライブ性能を超過したら、CPU31bは、次のTier(同一レベルまたは下位レベル)に上詰めして配置する。
次に、S1806(図18)で、CPU31bは、作成されたTG度数分布とTG設定情報管理テーブル200に設定されたTier0での最低使用量を用いて、Tier0最大使用量の制約条件処理(図26)を実行する。
<Tier0における最大使用量の制約条件処理>
図26は、実施例1でのTier0最大使用量の制約条件処理を示すフローチャート図である。
このTier0最大使用量の制約条件処理では、制約条件としてTG1におけるTier1の最大使用量が30GBに設定されているものとする。TG1の度数分布グラフ241で、矢印260の範囲(点線囲み261と実線囲み262)の容量が50GBであるものとする。
S1808で、CPU31bは、作成されたTG度数分布とTG設定情報管理テーブル200に設定されたTier0での最大使用量を用いて、Tier0最大使用量の制約条件処理(図26)を実行する。
S2601で、CPU31bは、TGの識別番号であるiを“0”とする。
S2602で、CPU31bは、TGi(TG0)にTier0最大使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。
Tier0最大使用量の制約条件の設定が無い場合(S2602:No)、CPU31bは、S2606を実行する。制約条件の設定が有る場合(S2602:Yes)は、CPU31bは、S2603を実行する。なお、TG設定情報管理テーブル200からTG0のTier0最大使用量の制約条件は“未設定”であるので、CPU31bは、S2606を実行する。
S2606で、CPU31bは、TGの識別番号iに1を加算する。つまり、CPU31bは、iの値を“0”から“1”に更新する。
S2607で、CPU31bは、TGの識別番号iが最大TG番号を超えているかを判断する。 例えば、POOL#0の場合、最大TG番号は“1”なので、CPU31bは、再び、S2602の処理を実行する。
S2602で、CPU31bは、TG1にTier0最大使用量の制約条件の設定が有るかを、TG設定情報管理テーブル200で判断する。TG設定情報管理テーブル200からTier0最大使用量の制約条件が“30GB”と設定されている(S2602:Yes)ので、CPU31bは、S2603を実行する。
S2603で、CPU31bは、 現在のTGi(TG1)のTier0使用量が、制約条件であるTier0最大使用量より大きいかを判断する。TG1のTier0の使用量が制約条件“30GB”より大きくない場合(S2603:No)、CPU31bはS2606を実行し、大きい場合(S2603:Yes)、S2604を実行する。
図26では、前述のように、TG1が既にTier0を50GB使用しているので、制約条件30GBを20GB分超えている。そこで、CPU31bは、最大使用量を超えた容量20GB(実線囲み262)の割当てをTG1からTG0に変更する。ちなみに、割当て変更前では、TG0はTier0を10GB(矢印265の容量)しか使用できない状態であった。
S2604で、CPU31bは、TGi(TG1)のTier0に配置された仮想ページの内、最大使用量を超えた容量20GB分(実線囲み262)だけI/O数の少ない仮想ページを仮想ページI/O数管理テーブル80から検索し、順にTier0からTier1へ移動する。
S2605で、CPU31bは、TGi(TG1)以外のTG(図26では、TG0)のTier1に属する仮想ページの内、I/O数の高い仮想ページを仮想ページI/O数管理テーブル80から検索し、順に空いたTier1からTier0へ容量20GB分(実線囲み266)移動する。
そして、CPU31bは、Tier0またはTier1へ移動した仮想ページを移動済みページとして、アロケーションテーブル50や仮想ページI/O数管理テーブル80などの管理テーブルに登録する。
S2606で、CPU31bは、TGの識別番号iに1を加算し、処理対象のTGをTG2とし、S2607で最大TG番号を超えているかを判断する。なお、POOL#1ではTG2が存在しないので、CPU31bは、Tier0最大使用量の制約条件処理を終了する。なお、S2601からS2607までの処理をPOOL#0以外のプールに対してもCPU31bは実行できる。
以上のように、TG1でのTier0使用量を最大30GBと制約できるので、TG1によるTier0全ての使用を防止できる。すなわち、Tier0の最大容量が60GBであれば、TG0もTier0使用量を10GBから30GBへと増やすことが可能となる。そのため、TG1のI/O数上昇によるTG0のアクセス性能への影響を低減できる。
例えば、プール0に属する仮想ボリュームが、ホスト計算機34上で動作するデータベースアプリケーションに使用されているのであれば、索引部分であるINDEX部に使用される仮想ボリューム群をTG0、実データを格納したBODY部に使用される仮想ボリューム群をTG1とする。
高速アクセスが要求されるINDEX部が使用しているTG0には、前述のTier0最低使用量の制約条件で、30GBは必ず使用できるので、高速なアクセス性能を実現できる。また、INDEX部程アクセス性能を要求されないBODY部が使用しているTG1には、Tier0最大使用量の制約条件とTier2最低使用量の制約条件により、TG0のレスポンス性能への影響を低減できる。
<<実施例2>>
<<概要>>
実施例2でのストレージ装置30は、下記(1)及び(2)の機能を有するものとする。
(1)同一のプールに属する複数の仮想ボリュームをグループ化する機能
(2)TG毎に重み付け条件を設定する機能
重み付け条件の設定項目は”範囲”および”重み”である。”範囲”は各TGの重み付けを行う範囲を指定する。”重み”は重み付けの倍率を指定する。例えばTG0の容量が100GBで、範囲を30GB、重みを2倍とした場合、TG0の全仮想ページのうちI/O数が高い30GBの範囲に重み付けを行う。また、重みが2倍なので、30GBの範囲に属する仮想ページのI/Oカウント数を2倍にする。
作成した各TGのTG毎度数分布と事前に設定した重み付け条件の範囲条件に該当する仮想ページのI/O数に重み付けを行い、重み付け結果を元に仮想ページI/O数管理テーブルおよびTG毎度数分布を更新する。
次に、同一プールに属するTGの重み付け更新済みのTG毎度数分布を加算してプール毎度数分布を作成する。
I/O数が高い仮想ページから順に、ドライブ性能、またはTier容量を満たすまで上位Tierに上詰めで移動させる。ドライブ性能またはTier容量を超過したら次のTier(同一レベルまたは下位レベル)を選択し移動する。
以上のようにTG毎に重み付け条件を設けることで、各TGの重み付けした範囲は上位レベルのTier0に配置され易くなるため、他TGの負荷増加による自TGのレスポンス性能への影響を低減できる。
<<重み付けによるページ再配置処理>>
図27は、実施例2でのTG毎の重み付けによるページ再配置処理を示すフローチャート図である。図28は、実施例2でのTG設定の処理を示すフローチャート図である。
S2701で、CPU31bは、図28に示すTG設定の処理を実行する。
<TG設定/TG設定情報管理テーブル2>
図28のS2801からS2803の処理で、図29に示すTG設定項目に対して所定情報を設定する。
<TG設定情報管理テーブル2>
図29は、実施例2でのTG設定情報管理テーブルの構成例を示す図である。図30は、実施例2でのTG設定情報管理テーブルで、重み付け前後の構成例を示す図である。
図29のTG設定情報管理テーブル290は、POOL#290a、TG#290b、各TGに属する仮想ボリューム#290c、重み付け条件290dから構成される。POOL#290a、TG#290b、各TGに属する仮想ボリューム#290cは、図20のTG設定情報管理テーブル200と同じである。
また、重み付け条件290dは、前述のように、”範囲”と“重み”で構成される。“範囲”は各TGの度数分布で重み付けを行う範囲(容量)を指定する。”重み”は各TGの度数分布でI/O数(IOPS)への重み付けの倍率を指定する。
例えば、POOL#0のTG#0の容量が100GBで、範囲を30GB、重みを2倍とした場合、TG#0の全仮想ページのうちI/O数が高い30GB分の仮想ページのI/O数(IOPS)に対し重み付けを行うものである。本例では、重みが2倍なので、30GBの範囲に属する仮想ページのI/Oカウント数を2倍にする。
具体的には、図30(a)重み付け前の仮想ページI/O数管理テーブル300において重み付けする仮想ページは、仮想ボリューム#300aが“0”で仮想ページ#300bが“2”である仮想ボリューム#0の仮想ページ#2と、仮想ボリューム#300aが“2”で仮想ページ#300bが“0”である仮想ボリューム#2の仮想ページ#0である。
また、当該仮想ページの仮想ページ毎I/O数300cは、符号301より“512”、符号302より”635“と分かる。
本実施例では、前述の仮想ページに対し2倍の重み付けを実行する。すなわち、図30(b)重み付け後の仮想ページI/O数管理テーブル310において、符号311及び符号312に示すように、仮想ページ毎I/O数300cをそれぞれ、“1024”、“1270”とするものである。
まず、S2801(図28)で、管理端末33のCPU33bは、ユーザないしシステム管理者がディスプレイなどの出力装置33aに表示された設定画面でキーボードなどの入力装置33eにより入力されたTGとして用途毎にグループ化する仮想ボリュームの情報を取得する。
S2802で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定したTG毎の重み付けする範囲条件を取得する。
S2803で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定したTG毎の重み(倍率)条件を取得する。
TG毎の重み(倍率)条件の取得後に、CPU33bは、取得した各種情報をTG設定情報管理テーブル290として纏める。そして、CPU33bは、纏めたTG設定情報管理テーブル290をNIC33d経由でストレージ装置30に送信する。
ストレージ装置30のCPU31bは、管理端末33より送信されたTG設定情報管理テーブル290をNIC31d経由で取得し、メモリ31c上の共有メモリ領域に格納する。
<TGの新規設定>
図31は、実施例2での仮想ボリューム作成時のTG設定画面の構成例を示す図である。実施例2のTG設定画面310の特徴は、TG設定項目の入力領域311が、TG番号を入力する“TG Number”、範囲を入力する“Scope”、重みを入力する“Weighting Coefficient”の入力領域で構成されている点である。また、表示領域312には、TG番号、入力された重み付け範囲と重みがCPU33bにより表示される。
<TGの追加設定/TG設定内容の確認>
図32は、実施例2での仮想ボリューム作成後のTG設定変更を行うTG設定画面の構成例を示す図である。図33は、実施例2でのTG設定内容を確認するTG設定確認画面の構成例を示す図である。
仮想ボリューム作成後にTGの設定変更を実行する場合も、図31と同様に設定画面320の入力領域321に所定のTG番号と重み付け条件を入力し設定する。
また、ユーザまたはシステム管理者は、仮想ボリューム作成時または仮想ボリューム作成後に設定されたTG番号や重み付け条件などの入力情報を、図33の確認画面330の表示領域331で確認できる。なお、TG番号や重み付け条件は動的に、すなわち、ストレージ装置30を稼働したままで、設定ないし変更することが可能である。
再び、図27の処理を説明する。
S2702とS2703の処理は図18のS1802とS1803の処理と同じであるので説明を省く。
S2704で、CPU31は、重み付け条件に従い仮想I/Oページ毎I/O数に重み付けを実施し、TG毎度数分布を変更する。すなわち、TG0の度数分布270の範囲272(30GB分)における仮想ページのIOPSに対し、2倍という重み273で重み付けし、TG0の度数分布270を度数分布270aとする。
これにより、範囲272におけるTG0の度数分布でのIOPSが、TG1の度数分布でのIOPSより大きくなるので、TG0の仮想ページへ上位TierであるTier0が優先的に配置される。
S2705で、CPU31bは、S1806と同様に同一プールのTG毎度数分布を加算し、プール毎度数分布を作成する。また、S2706で、CPU31bは、ドライブ性能、またはTier容量を満たすまで、仮想ページを上位Tierに上詰めで配置する。ドライブ性能が超過したら、CPU31bは、次のTierを選択しそのTierに仮想ページを上詰めで配置する。
以上のようにTG毎に重み付け条件を設けることで、各TGの重み付けした範囲は上位階層Tier0に配置され易くなるため、他TGの負荷変動による自TGのアクセス性能への影響を低減できる。
<<実施例3>>
<<概要>>
実施例3でのストレージ装置30は、下記(1)及び(2)の機能を有するものとする。
(1)同一のプールに属する複数の仮想ボリュームをグループ化する機能
(2)TG毎に目標平均レスポンスタイムを設定する機能
ユーザは管理端末33を使用しグループ化したい仮想ボリューム群を各TGに登録し、TG毎に目標平均レスポンスタイムを設定し、設定された情報をストレージ装置30は取得する。
ストレージ装置30は、取得情報と仮想ページI/O数管理テーブル80などの管理情報よりプール毎度数分布を作成し、I/O数が高い仮想ページから順に、ドライブ性能、またはTier容量を満たすまで上位Tierに上詰めで移動させる。
ドライブ性能またはTier容量を超過したら次のTier(同一レベル又は下位レベル)を選択し移動する。
プールに属するすべての仮想ページの移動が完了したらTG毎の平均レスポンスタイムを計算し、その計算値と事前に設定した目標平均レスポンスタイム(目標値)とを比較し、計算値が目標値を満たしているかを確認する。
計算値が目標値を満たしていなかった場合、当該TG以外のTGの仮想ページでTier0(上位Tier)に配置されている仮想ページからTier1(下位Tier)へ移動しても、そのTGの平均レスポンスタイムの計算値が目標平均レスポンスタイム未満にならない仮想ページを検索する。
そして、当該TGのTier1に属する仮想ページの中でもっともI/O数が高い仮想ページを前述のTier0の仮想ページと入れ替える処理を実行する。以上の処理を全てのTGで計算した平均レスポンスタイムが目標平均レスポンスを満足するまで繰り返し処理を実行する。
図34を用いて、前述の動作を具体的に説明する。図34は、実施例3での目標平均レスポンスタイム設定によるページ再配置/再−再配置処理の概念を説明する図である。
図34(a)は、各TG度数分布を元にページ再配置プランを決定しページの再配置を実施した状態である。なお、符号340はTG0度数分布で、符号341はTG1度数分布である。
この状態では、TG1の仮想ページには符号342に示す容量のTier0が配置され、一方、TG0の仮想ページには、Tier0は配置されない。
この状態で、TG0とTG1の平均レスポンスタイムを計算して、それを計算値とし、設定された目標平均レスポンスタイム(目標値)と計算値とを比較する。
TG0では、平均レスポンスタイムの目標値より計算値の方が上回っている状態、すなわち、実際のレスポンスタイムが大きく、応答が遅い状態である。TG1では、平均レスポンスタイムの目標値より計算値の方が下回っている状態、すなわち、実際のレスポンスタイムが小さく、応答が速い状態である。
そこで、(a)の結果を元にTG1の性能余剰分に相当するTier0をTG0へ移動させてTG0の目標平均レスポンスタイムを達成させる。
つまり、図34(b)に示すように、Tier0に配置されているTG1の仮想ページでI/O数が少ない仮想ページから、TG0の仮想ページに容量343(性能余剰分)だけ移動し符号344のように配置する。これをページ再−再配置処理と呼ぶ。
このページ再−再配置処理により、TG1での平均レスポンスタイムの計算値は大きくなるが目標値を満足しつつ、TG0での平均レスポンスタイムの計算値を小さくでき目標値を満足させることができる。
このように、TG毎に目標平均レスポンスタイムの設定機能を設けることで、他TGの負荷変動に関係なく各TGがユーザの要求するレスポンス性能を満たすことができる。また、ホスト計算機34またはストレージ装置30上で動作するアプリケーションで使用される仮想ボリューム毎にTG化すれば、アプリケーション間でのアクセス性能への影響を低減できる。
<<目標平均レスポンスタイム設定によるページ再配置処理>>
図35は、実施例3での目標平均レスポンスタイム設定によるページ再配置の処理を示すフローチャート図である。図36は、実施例3でのTG設定の処理を示すフローチャート図である。
S3501で、CPU31bは、図36に示すTG設定の処理を実行する。
<TG設定/TG設定情報管理テーブル3>
図36のS3601からS3602の処理で、図37に示すTG設定項目に対して所定情報を設定する。
図37は、実施例3でのTG設定情報管理テーブルの構成例を示す図である。
図37のTG設定情報管理テーブル370は、POOL#370a、TG#370b、各TGに属する仮想ボリューム#370c、目標平均レスポンスタイム370dから構成される。POOL#370a、TG#370b、各TGに属する仮想ボリューム#370cは、図20のTG設定情報管理テーブル200及び図29のTG設定情報管理テーブル290と同じである。
目標平均レスポンスタイム370dは、各TGで必要とされる平均レスポンスタイムの値を設定するものである。例えば、POOL#0のTG#0に5msecを、TG#1に8msecを設定し、計算された平均レスポンスタイムと比較する。このようにプールのTG全てに目標平均レスポンスタイムを設定してもよい。
また、POOL#1のように1つのTGのみ値を設定するし、その他のTGには値を設定せず“未設定”のままとすることも可能である。
まず、S3601(図36)で、管理端末33のCPU33bは、ユーザないしシステム管理者がディスプレイなどの出力装置33aに表示された設定画面でキーボードなどの入力装置33eにより入力されたTGとして用途毎にグループ化する仮想ボリュームの情報を取得する。
S3602で、CPU33bは、用途毎にグループ化する仮想ボリュームの情報と同様に、ユーザないしシステム管理者が設定した目標平均レスポンスタイムを取得する。
目標平均レスポンスタイムの取得後に、CPU33bは、取得した各種情報をTG設定情報管理テーブル370として纏める。そして、CPU33bは、纏めたTG設定情報管理テーブル370をNIC33d経由でストレージ装置30に送信する。
ストレージ装置30のCPU31bは、管理端末33より送信されたTG設定情報管理テーブル370をNIC31d経由で取得し、例えば、メモリ31c上の共有メモリ領域に格納する。
<TGの新規設定>
図38は、実施例3での仮想ボリューム作成時のTG設定画面の構成例を示す図である。TG設定画面380のTG設定項目の入力領域381は、TG番号を入力する“TG Number”と目標平均レスポンスタイムを入力する“Targeted Response Time”で構成されている点である。入力された情報は、CPU33bにより表示領域382に表示される。
<TGの追加設定/TG設定内容の確認>
図39は、実施例3での仮想ボリューム作成後のTG設定変更を行うTG設定画面の構成例を示す図である。図40は、実施例3でのTG設定内容を確認するTG設定確認画面の構成例を示す図である。
仮想ボリューム作成後にTGの設定変更を実行する場合も図38と同様、設定画面390の入力領域391に所定のTG番号と目標平均レスポンスタイムをユーザまたはシステム管理者が入力し設定する。
また、ユーザまたはシステム管理者は、仮想ボリューム作成時または仮想ボリューム作成後に設定されたTG番号や目標平均レスポンスタイムを、図40の確認画面400の表示領域402で確認できる。なお、TG番号や目標平均レスポンスタイムは動的に設定や変更、すなわち、ストレージ装置30を稼働したままでの設定や変更が可能である。
再び、図35の処理を説明する。
S3502からS3506の処理は、実施例2のS2702からS2706の処理と同じであるので説明を省く。なお、図35のフローチャートでは、実施例2での重み付け処理を実行し、TG1でのI/O数増加によるTG0のアクセス性能への影響を低減した後、目標平均レスポンスタイムを用いたページ再−再配置処理で更に、影響を低減するものである。
なお、S3504の重み付け処理を実行せず、S3507のページ再−再配置処理のみでもアクセス性能への影響を低減できる。
S3507で、CPU31bは、図41に示すTG毎レスポンスタイムチェックとページ再-再配置処理を実行する。
<ページ再−再配置処理>
図41は、実施例3での目標平均レスポンスタイム設定によるページ再−再配置の処理を示すフローチャート図である。
S4101で、CPU31bは、TGの識別番号であるiを0とする。
S4102で、CPU31bは、TGiの全体の平均レスポンスタイムR_allを式3に用いて算出する。まず、TGの識別番号iが“0”なのでTG0の平均レスポンスタイムR_allを式3に用いて算出する。
R_all=(総和(Tj * Rj)(j=0〜n))/(総和(Tj )(j=0〜n))・・・式3
1)j:Tier#の番号
2)Rj:Tier#jの平均レスポンスタイム
3)Tj:Tier#jへの合計I/O数
S4103で、CPU31bは、式3で算出したTG0の平均レスポンスタイム(計算値)と設定されたTG0の目標平均レスポンスタイム(目標値)とを比較する。目標値より計算値が大きい場合(S4103:Yes)、TG0の仮想ページに高速な上位Tierを配置する必要があるので、CPU31bは、S4104を実行する。
ちなみに、TG0の仮想ページでTier0に配置されているものはなく、Tier0は、全てTG1の仮想ページに配置されている。
目標値より計算値が大きくない場合(S4103:No)、すなわち、現状の平均レスポンスタイムが目標値を満足している場合、CPU31bは、次のTGを処理するため、S4111を実行する。
S4104で、CPU31bは、Tier0の交換可能ページを検索する。すなわち、TG0以外のTG(例えば、TG1)の仮想ページで、Tier0に配置されている仮想ページでTier1へ移動しても、そのTG(TG1)の平均レスポンスタイム(計算値)が目標平均レスポンスタイムを超えない仮想ページを検索する。
S4105で、CPU31bは、Tier0に交換可能ページがあるかを判断する。Tier0に交換可能ページが有る場合(S4105:Yes)、CPU31bは、S4106を実行する。
Tier0に交換可能ページが無い場合(S4105:No)、CPU31bは、S4107以降のTier1での交換可能ページの検索と仮想ページの移動処理を実行する。
S4106で、CPU31bは、TG0以外(例えば、TG1)のTier0に属する仮想ページの内、I/O数が低い仮想ページをTier1へ、TG0のTier1に属する仮想ページの内、I/O数が高い仮想ページをTier0へ移動する。
CPU31bは、S4106の処理を完了した後、再びS4102からS4106の処理を、平均レスポンスタイムの目標値より計算値が下回るか、Tier0での交換可能ページが無くなるまで実行する。
S4107で、TG0の目標平均レスポンスタイム(目標値)とTier1での平均レスポンスタイムとを比較する。Tier1での平均レスポンスタイムが目標値より小さい場合(S4107:Yes)、CPU31bは、S4108を実行する。この場合、TG0のTier2に配置されている仮想ページをTier1に移動(配置)することでTG0での平均レスポンスタイムを小さくできる。
Tier1での平均レスポンスタイムがTG0の目標平均レスポンスタイム(目標値)より小さくない場合(S4107:No)、CPU31bは、S4113を実行する。
S4108で、CPU31bは、Tier1の交換可能ページを検索する。すなわち、TG0以外のTG(例えば、TG1)の仮想ページで、Tier1に配置されている仮想ページからTier2へ移動してもそのTGが目標レスポンスタイム未満にならない仮想ページを検索する
S4109で、CPU31bは、Tier1に交換可能ページがあるかを判断する。Tier1に交換可能ページが有る場合(S4109:Yes)、CPU31bは、S4110を実行する。
S4110で、CPU31bは、TG0以外(例えば、TG1)のTier1に属する仮想ページの内、I/O数が低い仮想ページをTier2へ、TG0のTier2に属する仮想ページの内、I/O数が高い仮想ページをTier1へ移動する。
CPU31bは、S4110の処理を完了した後、再びS4102からS4110の処理を、平均レスポンスタイムで目標値より計算値が下回る条件を満足するか、Tier0またはTier1での交換可能ページが無くなるまで実行する。
Tier1に交換可能ページが無い場合(S4109:No)、CPU31bは、S4113を実行する。
S4111で、CPU31bは、TGの識別番号iに1を加算する。つまり、CPU31bは、iの値を“0”から“1”に更新する。
S4112で、CPU31bは、TGの識別番号iが最大TG番号を超えているかを判断する。例えば、TG設定情報管理テーブル370よりPOOL#0の最大TG番号は“1”なので、CPU31bは、再び、S4102以降の処理をTG1で実行する。
S4113で、CPU31bは、当該TGでの平均レスポンスタイム(計算値)が目標平均レスポンスタイム(目標値)を満足することが不可能であると判断する。そのため、CPU31bは、ストレージ装置30に実装されている記憶ドライブの構成では、要求レスポンス性能を満足できないことを示すSIM(Service Information Message)を出力してページ再−再配置処理を終了する。
以上のように、TG毎に目標平均レスポンスタイム(目標値)を設定し、各TGでの平均レスポンスタイムの算出と目標値との比較によるTierの変更により、各TGの仮想ページに上位階層Tier0ないしTier1へ平準的に配置され易くできる。そのため、他TGの負荷変動によるTGのアクセス性能への影響を低減できる。また、ストレージ装置でのアクセス性能低下が原因となるアプリケーションソフトの処理遅延や停止なども防止できる。
実施例3では、実施例2の重み付けでの処理を組み合わせた場合を説明したが、実施例1と組み合わせてもよい。また、実施例1から実施例3を全て組み合わせてもよい。
なお、実施例1から実施例3の説明では、アプリケーションが使用する仮想ボリューム単位、仮想ボリュームを纏めたTG単位、更にTGを纏めたプール単位を例として説明した。
例えば、アプリケーション単位ではなく、OS単位やファイル単位で本発明を適用することができる。つまり、OS単位やファイル単位で使用する仮想ボリュームをTGとしてグループ化することで、前述の実施例1から実施例3でのページ再配置処理/ページ再−再配置処理を実行することで、ストレージ装置でのアクセス性能への影響を低減できる。また、ストレージ装置でのアクセス性能低下が原因となるアプリケーションソフトの処理遅延や停止なども防止できる。
また、同様に、ホスト計算機単位、ホスト計算機上で動作する仮想マシン単位、記憶ドライブを2つ以上に区切ったパーティション単位でも本発明を適用できる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。 また、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置いてもよい。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。