以下に、図面を参照し、本願の開示するストレージ装置およびストレージ装置制御プログラムの実施形態について、詳細に説明する。ただし、以下に示す実施形態は、あくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。また、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能を含むことができる。そして、各実施形態は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
〔1〕本実施形態の構成
まず、図1〜図5を参照しながら、本実施形態の構成について説明する。
〔1−1〕本実施形態のストレージシステムの構成
図1は、本実施形態に係るストレージシステム1の構成の一例を示す図である。図1に示すように、ストレージシステム1は、ホスト10a,ホスト10bおよびストレージ装置100を有する。また、ストレージシステム1において、ストレージ装置100は、ホスト10aおよびホスト10bと接続される。なお、ストレージ装置100と接続するホストの数は図示に限定されるものではなく、変更可能である。
〔1−2〕ホストの構成
続いて、図1を参照しながら、ホスト10aおよびホスト10bの構成について説明する。ホスト10aおよびホスト10bは、サーバなどの情報処理装置である。ホスト10aは、FC(Fibre Channel)−A(Adapter)11a,FC−A12a,iSCSI(internet Small Computer System Interface)−A13a,iSCSI−A14aを有する。FC−A11a,12bは、通常、FC−HBA(Host Bus Adapter)の形態であり、iSCSI−A13a,14aは、通常、NIC(Network Interface Card)を使用し、そこでiSCSIプロトコルを動作させる形態である。
FC−A11aは、後述するCM(Controller Module)200a内のFC−CA(Communication Adaptor)201aとFCで接続するインターフェースである。また、同様に、FC−A12aは、後述するCM200b内のFC−CA201bとFCで接続するインターフェースである。また、iSCSI−A13aは、後述するCM200a内のiSCSI−CA202aとiSCSIで接続するインターフェースである。同様に、iSCSI−A14aは、後述するCM200b内のiSCSI−CA202bとiSCSIで接続するインターフェースである。
ホスト10bは、FC−A11b,FC−A12b,iSCSI−A13b,iSCSI−A14bを有する。FC−A11bは、FC−A11aに対応し、FC−A12bは、FC−A12aに対応する。また、iSCSI−A13bは、iSCSI−A13aに対応し、iSCSI−A14bは、iSCSI−A14aに対応する。なお、以下の説明では、ホスト10aとホスト10bとを区別せず一般化して称する場合には、ホスト10として記載する。
〔1−3〕本実施形態に係るストレージ装置の構成
続いて、図1を参照しながら、本実施形態に係るストレージ装置100の構成について説明する。本実施形態に係るストレージ装置100は、HDD(Hard Disk Drive)101a〜101dと、CM200a,200bとを有する。
HDD101a〜101dは、RAIDを構成し、ユーザデータを記憶する。CM200a,200bは、ストレージ装置100のシステム全体を制御するストレージ制御モジュールである。CM200a,200bとで冗長化されている。なお、ストレージ装置100が有するHDD,CMの数は、図示したものに限定されるものではなく、変更可能である。また、コントローラエンクロジャーのストレージ装置(ストレージ制御装置)として、複数のCMを搭載し、HDD等の物理ディスクは、ディスクエンクロージャのストレージ装置に搭載して、接続することでストレージシステムを構成してもよい。
また、ストレージ装置100は、HDD101a〜101d(一以上の物理記憶装置)を論理的に分割した論理ユニット(以下LUという)として使用される。各LU(記憶装置)は、それぞれが論理的な1台のHDDとしてホスト10a,10bにより認識される。
CM200aは、FC−CA201a,iSCSI−CA202a,SAS(Serial Attached SCSI)203a,メモリ210aおよびCPU(Central Processing Unit)220aを有する。
FC−CA201aは、ホスト10aおよびホスト10bとFCで接続するインターフェースである。iSCSI−CA202aは、ホスト10aおよびホスト10bとiSCSIで接続するインターフェースである。SAS203aは、HDD101a〜101dと、SASで接続するインターフェースである。なお、以下の説明においてFC−CA201aおよびiSCSI−CA202aのことを一般化して称する場合には、適宜、ポートと記載する。
メモリ210aは、例えば、RAM(Random Access Memory)などの半導体メモリ素子であり、キャッシュ域211aと制御域212aとを有する。キャッシュ域211aは、ホスト10aまたはホスト10bと、HDD101a〜101dのいずれかとの間でやり取りされるデータを一時的に保持する。制御域212aは、ストレージ装置100が実行する各種の処理に要する情報を保持する。また、制御域212aは各種プログラム等も格納されている。さらに、制御域212aは、後述するQoS制御域213(図3参照)および後述するテーブル域214(図3参照)を有する。
CPU220aは、演算や制御などの各種処理を行う電子回路であり、後述する処理部300(図2参照)を実現するために用いられる。
CM200bは、FC−CA201b,iSCSI−CA202b,SAS203b,メモリ210bおよびCPU220bを有する。FC−CA201bは、FC−CA201aに対応し、iSCSI-CA202bは、iSCSI-CA202aに対応し、SAS203bは、SAS203aに対応する。また、メモリ210bは、メモリ210aに対応し、CPU220bは、CPU220aに対応する。
このようなストレージシステム1では、ストレージ装置100のCPU220a,220bは、ファームウェアによって以下の処理を実行する。即ち、ストレージ装置100は、複数のLUに設定された優先度に基づいて決定される入出力処理量の上限値をLU毎に算出する。また、ストレージ装置100は、ホスト10から受信した入出力要求に係る処理量と、算出された上限値とに基づいて、入出力要求に係る処理の実行順をスケジュールし、スケジュールされた実行順で入出力要求に係る処理を実行する。そして、ストレージ装置100は、LU毎に、当該LUに対する入出力要求に係る処理量が第1所定時間(例えば30秒)に亘って当該LUの処理性能を超えているか否かを判定する。さらに、ストレージ装置100は、当該LUに対する入出力要求に係る処理量が当該LUの処理性能を超えていると判定された場合、当該LUについての上限値を、所定の性能融通単位(ユニット)で変更する。このようにして、ストレージ装置100は、ホスト10からの入出力要求(I/O要求,コマンド)の状況やホスト10の接続環境の変化に応じて、ストレージ性能を最適に制御する。特に、ストレージ装置100は、所定の性能融通単位(ユニット)で上限値を変更調整することで、ホスト10から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。
なお、入出力処理量の上限値は、例えば、後述する限界I/O数や限界ブロック数であり、上限値,限界I/O数,限界ブロック数のことを、限界値、または、性能限界値という場合がある。
〔1−4〕ファームウェアにより実現される処理部の機能構成
次に、図2を参照しながら、ストレージ装置100により実行されるファームウェアにより実現される処理部300の機能構成について説明する。図2は、ストレージ装置100により実行されるファームウェアにより実現される処理部300の機能構成を示すブロック図である。なお、処理部300は、メモリ210aおよびメモリ210bと、CPU220aおよびCPU220bとが協働して実現される。
図2に示すように、処理部300は、FC I/F(InterFace)制御部301,iSCSI I/F制御部302,SCSIターゲット制御部303,SCSIコマンド制御部304,リソース制御部305,キャッシュ制御部306,RAID制御部307を有する。また、処理部300は、ディスク制御部308,SAS I/F制御部309,メモリ制御部310,カーネル部311,システム構成制御部312,保守インタフェース制御部313を有する。
FC I/F制御部301は、ホスト10とFC接続する場合のFCプロトコルチップの制御を行なう。iSCSI I/F制御部302は、ホスト10とiSCSI接続する場合のiSCSIプロトコルチップの制御を行なう。
SCSIターゲット制御部303は、SCSIターゲットの制御を行なう。SCSIターゲット制御部303は、例えば、ホスト管理,LU管理,コマンド実行管理,コマンド以外の異常系イベント管理などを行なう。なお、SCSIターゲット制御部303の詳細な機能については、図3を参照しながら後述する。
SCSIコマンド制御部304は、SCSIコマンド種ごとの制御を行なう。リソース制御部305は、全CMをまたいでの論理ボリューム管理,ホストパス管理,負荷管理を行なう。キャッシュ制御部306は、キャッシュメモリの管理を行なう。RAID制御部307は、RAIDグループの管理を行なう。ディスク制御部308は、ディスクコマンド制御を行なう。SAS I/F制御部309は、HDD101a〜101dとSAS接続するプロトコルチップの制御を行なう。
メモリ制御部310は、各制御部が使用する制御メモリを管理する。カーネル部311は、基本ソフト部であり、各制御部の下位に位置する。システム構成制御部312は、ストレージ装置100の構成情報を管理する。保守インターフェース制御部313は、保守用のユーザインターフェースを制御する。
〔1−5〕本実施形態に係るSCSIターゲット制御部の機能構成およびQoS制御域の情報
次に、図3を参照しながら、SCSIターゲット制御部303の機能構成とQoS制御域213およびテーブル域214の情報とについて説明する。図3は、本実施形態に係るSCSIターゲット制御部303の機能構成とQoS制御域213およびテーブル域214の情報とを示すブロック図である。
図3に示すように、SCSIターゲット制御部303は、後述するQoS管理テーブル501や、後述する各LU(LUN#1〜#m;mは2以上の整数)の性能融通情報や、後述するミクロ融通有フラグや、後述するテーブル域214における情報などに基づき、制御を行なう。QoS管理テーブル501や、各LUの性能融通情報や、ミクロ融通有フラグは、例えば、メモリ210a,210bの制御域212a,212bにおけるQoS制御域213に保存される。
また、図3に示すように、SCSIターゲット制御部303は、待ちキュー格納部502,性能設定部503,コマンド受信部504,算出部505,スケジュール部506,実行部507を有する。さらに、SCSIターゲット制御部303は、マクロ融通チェック部510,マクロ融通処理部520,マクロ融通復旧処理部530,ミクロ融通処理部540を有する。なお、以下に説明するSCSIターゲット制御部303の各機能は、メモリ210aおよびメモリ210bと、CPU220aおよびCPU220bとが協働して実現される。
〔1−5−1〕優先順位と性能値との対応関係、および、QoS管理テーブル
QoS管理テーブル501は、対象毎に、「優先順位」と「性能値」と「実行可能な入出力処理数」と「実行した入出力処理数」とを対応付けた情報を記憶する。ここで、QoS管理テーブル501の詳細な説明をする前に、まず、図4を参照しながら「優先順位」と「性能値」との対応関係について説明する。図4は、優先順位と性能値との対応関係の一例を示す図である。
図4に示すように、「優先順位」は、優先度を示し、例えば、1から15までの15段階のレベルとして設定される。なお、優先順位のレベルは、例示に過ぎず、1から15の15段階に限定されるものではない。
また、「優先順位」の段階毎に「性能値」が対応付けられる。言い換えると、「優先順位」は、性能制限を示す。「性能値」としては、単位時間当たりの通信量であるMB/s(megabytes per second)と、単位時間当たりに実行可能な入出力処理数であるIOPS(Input Output Per Second)とが用いられる。「優先順位」(性能設定レベル)のそれぞれに対する具体的な「性能値(MB/s)」および「性能値(IOPS)」は、例えば、ディスクドライブなどの現実的な性能を考慮して、図4に示すように設定される。
図4に示す例では、「優先順位」が「1」に設定される場合、単位時間当たりの通信量が「800(MB/s)」であり、単位時間当たりに「15000」の入出力処理が実行されることを示す。同様に、「優先順位」が「3」に設定される場合、単位時間当たりの通信量が「600(MB/s)」であり、単位時間当たりに「10000」の入出力処理が実行されることを示す。
また、図4に示す例では、優先順位1〜8での性能値(MB/s)の間隔は100であり、優先順位8〜10での性能値(MB/s)の間隔は30であり、優先順位10〜11での性能値(MB/s)の間隔は15であり、優先順位11〜15での性能値(MB/s)の間隔は5である。つまり、性能値(MB/s)は、「優先順位」の低いレベル(15)から高いレベル(1)に向かって大きくなるように設定されている。
同様に、優先順位1〜5での性能値(IOPS)の間隔は2500であり、優先順位5〜7での性能値(IOPS)の間隔は2000であり、優先順位7〜10での性能値(IOPS)の間隔は200であり、優先順位10〜11での性能値(IOPS)の間隔は100であり、優先順位11〜15での性能値(IOPS)の間隔は60である。つまり、性能値(IOPS)も、「優先順位」の低いレベル(15)から高いレベル(1)に向かって大きくなるように設定されている。
また、図3に示すテーブル域214には、ストレージ100に属すRAIDグループごとに、各RAIDグループ内で融通先LU(後述する融通フラグFINがオンのLU)に対し融通されるユニット数(RAIDグループ融通ユニット数)NKが保存される。RAIDグループ融通ユニット数)NKは、後述する1ミクロサイクルごとにクリアされる。
さらに、図3に示すテーブル域214には、ストレージ100に属すRAIDグループごとに、各RAIDグループのビジー率(RAIDグループビジー率)Lが保存される。RAIDグループビジー率Lは、ストレージ装置100全体における性能余裕に係る値であり、後述するビジー率算出部545によって、所定の時間(例えば後述するNミリ秒またはN×n秒;nは2以上の整数)ごとに算出される。RAIDグループビジー率Lの算出手順については、図22〜図26を参照しながら後述する。
また、RAIDグループ内で融通先LUに対する性能融通が行なわれる場合、ビジー率算出部545によって、当該性能融通の量がビジー率増加分に換算される。そして、換算されたビジー率増加分がRAIDグループビジー率Lに加算され、テーブル域214におけるRAIDグループビジー率Lが更新される。ビジー率増加分の換算等の手順については、図27,図28,図30,図31を参照しながら後述する。
次に、図5を参照しながら、QoS管理テーブル501の一例について説明する。図5は、QoS管理テーブル501の一例を示す図である。図5に示すように、QoS管理テーブル501は、「対象」,「優先順位」,「Nミリ秒I/O数」,「Nミリ秒ブロック数」,「限界I/O数」,「限界ブロック数」,「現I/O数」および「現ブロック数」を対応付けた情報を記憶する。
ここで、QoS管理テーブル501が記憶する「対象」は、優先順位を設定する対象を示す。ここで、「ポート」,「ホスト」,「ホストとLUNとの組合せ」,「ポートとLUNとの組合せ」のそれぞれが優先順位を設定する対象となる。例えば、「対象」には、「FC−CA201a」,「ホスト10a」,「ホスト10a−LUN−A」などが格納される。なお、以下の説明では、「対象」として「ホストとLUNとの組合せ」または「ポートとLUNとの組合せ」を指す場合については、単に、「LU」として適宜記載する。
「優先順位」は、対象に設定された優先度を示す。ここでは、優先順位のレベルが1から15までの15段階のいずれかのレベルが設定されるものとする。「優先順位」には、例えば「3」,「5」,「7」などのレベルが格納される。
「Nミリ秒I/O数」は、所定の時間(Nミリ秒)の間に実行可能なI/O数(入出力要求数,入出力コマンド数)を示す。ここで、所定の時間(Nミリ秒)として、例えば10ミリ秒、つまりN=10が設定される。また、「Nミリ秒I/O数」には、例えば「100」,「50」,「10」などの値が格納される。
「Nミリ秒ブロック数」は、所定の時間(Nミリ秒)の間に書込み可能なブロック数を示す。ブロック数は、1ブロックを512バイトとして、単位時間当たりの通信量(MB/s)から算出される。なお、ここでは、所定の時間(Nミリ秒)として、例えば10ミリ秒が設定される。すなわち、「Nミリ秒ブロック数」には、10ミリ秒間に書込み可能なブロック数として、例えば「12288」,「8192」,「4096」などの値が格納される。
「限界I/O数」は、現時点での実行可能なI/O数(入出力処理量)の上限値を示す。限界I/O数は、「Nミリ秒I/O数」に「Nミリ秒が経過した回数(n)」を乗じた値から、後述する「現I/O数」を減算することによって算出される。例えば、「限界I/O数」には、「100×n−a」,「50×n−b」,「10×n−c」などの値が格納される。なお、「n」は、「Nミリ秒が経過した回数」であり、「a」から「c」は、後述するように、対応する「現I/O数」の値である。
「限界ブロック数」は、現時点での書込み可能なブロック数(入出力処理量)の上限値を示す。限界ブロック数は、「Nミリ秒ブロック数」に「Nミリ秒が経過した回数(n)」を乗じた値から、後述する「現ブロック数」を減算することによって算出される。例えば、「限界ブロック数」には、「12288×n−A」、「8192×n−B」、「4096×n−C」などの値が格納される。なお、「n」は、「Nミリ秒が経過した回数」であり、「A」から「C」は、後述するように、対応する「現ブロック数」の値である。
「現I/O数」は、所定の時間までに要求されたI/O数の累積値を示す。例えば、「現I/O数」には、「a」,「b」,「c」などが格納される。「現ブロック数」は、所定の時間までに要求されたブロック数の累積値を示す。例えば、「現ブロック数」には、「A」,「B」,「C」などが格納される。
図5に示す例では、QoS管理テーブル501は、「ポート」の優先順位が「3」であり、「Nミリ秒I/O数」が「100」であり、「Nミリ秒ブロック数」が「12288」であることを示す。また、QoS管理テーブル501は、「限界I/O数」が「100×n−a」であり、「限界ブロック数」が「12288×n−A」であり、「現I/O数」が「a」であり、「現ブロック数」が「A」であることを示す。
なお、QoS管理テーブル501が記憶する「対象」,「優先順位」,「Nミリ秒I/O数」,「Nミリ秒ブロック数」は、後述する性能設定部503により初期設定される値である。また、QoS管理テーブル501が記憶する「限界I/O数」,「限界ブロック数」,「現I/O数」および「現ブロック数」はNミリ秒ごとに更新される値である。
〔1−5−2〕待ちキュー格納部
待ちキュー格納部502は、キューであり、コマンド受信部504が受信したコマンドのうち、所定時間経過後にスケジュールされるコマンドを格納する。また、待ちキュー格納部502は、ホストとLUNとの組合せ毎またはポートとLUNとの組合せ毎(LU毎)に設けられる。
〔1−5−3〕性能設定部
性能設定部503は、QoS管理テーブル501が記憶する情報のうち「対象」,「優先順位」,「Nミリ秒I/O数」,「Nミリ秒ブロック数」のそれぞれに、管理者から受け付けた値を設定する。また、性能設定部503は、表1を参照しながら後述するミクロ性能融通およびマクロ性能融通の各種条件や、当該各種条件に係る値などを、管理者からの指示に応じて設定する機能も有する。なお、管理者は、各ホスト10の性能や各ホスト10が実行するアプリケーションなどを加味して、優先順位や各種条件に係る値などを設定する。さらに、性能設定部503は、ストレージ装置100に接続するホスト10や、ホスト10とLUNとの組合せ(LU)が変化した場合に、QoS管理テーブル501が記憶する情報を更新する。
〔1−5−4〕コマンド受信部
コマンド受信部504は、ホスト10からコマンド(入出力要求)を受信して受け付けるとともに、実行待ちのコマンドがあるか否かを判定する。例えば、コマンド受信部504は、実行待ちのコマンドがあると判定した場合、受信したコマンドを待ちキュー格納部502に格納させる。また、コマンド受信部504は、実行待ちのコマンドがないと判定した場合、後述するスケジュール部506に受信したコマンドの実行順をスケジュールさせる。なお、コマンド受信部504の詳細な動作(コマンド受信処理の処理手順)については、図10を参照しながら後述する。
〔1−5−5〕算出部
算出部505は、ホスト10,ポートおよびLUのそれぞれに対して設定された優先順位に基づいて決定される入出力処理量の上限値(即ち限界I/O数と限界ブロック数)を所定の時間(Nミリ秒)毎に算出する。ここで、算出部505は、10ミリ秒毎に限界I/O数と限界ブロック数とを算出するものとして説明する。例えば、算出部505は、10ミリ秒毎に、限界I/O数にNミリ秒I/O数を加算する。また、算出部505は、10ミリ秒毎に、限界ブロック数にNミリ秒ブロック数を加算する。算出部505は、算出した限界I/O数と限界ブロック数とをQoS管理テーブル501に格納させる。
さらに、算出部505は、後述するマクロ性能融通に対応すべく、以下のような機能を有する。つまり、算出部505は、10ミリ秒毎に、融通先LU(後述する融通フラグFINがオンのLU)の限界I/O数に、上述のごとくNミリ秒I/O数を加算するとともに、後述する融通ユニット数NBに対応するI/O数をさらに加算する(図7参照)。同様に、算出部505は、10ミリ秒毎に、当該融通先LUの限界ブロック数に、上述のごとくNミリ秒ブロック数を加算するとともに、上記融通ユニット数NBに対応するブロック数をさらに加算する(図7参照)。
一方、算出部505は、10ミリ秒毎に、融通元LU(後述する融通フラグFOUTがオンのLU)の限界I/O数に、上述のごとくNミリ秒I/O数を加算した値から、上記融通ユニット数NBに対応するI/O数を減算する(図7参照)。同様に、算出部505は、10ミリ秒毎に、当該融通元LUの限界ブロック数に、上述のごとくNミリ秒ブロック数を加算した値から、上記融通ユニット数NBに対応するブロック数を減算する(図7参照)。
〔1−5−6〕スケジュール部
スケジュール部506は、ホスト10から受け付けたコマンド数と、算出部505により算出された限界I/O数および限界ブロック数とに基づいて、コマンドの実行順をスケジュールする。例えば、スケジュール部506は、所定の時間が経過する毎に、コマンドの実行順をスケジュールする。なお、スケジュール部506の詳細な動作(QoS I/O起動スケジュール処理の処理手順)については、図8および図9を参照しながら後述する。
また、スケジュール部506は、マークしたホストとマークしたLUNとを復元する。そして、スケジュール部506は、復元したホストとLUNとの組合せから順に、以下の処理を実行する。なお、ホストのマークおよびLUNのマークについては後述する。
まず、スケジュール部506は、ホスト10から受け付けたコマンド数が、算出部505により算出されたホスト,ポート,LUNそれぞれの限界I/O数および限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部506は、受け付けたコマンド数が限界I/O数および限界ブロック数以内であり、処理可能であると判定した場合、実行部507にコマンドを起動させる。
また、スケジュール部506は、処理可能であると判定した場合、QoS管理テーブル501が記憶する「現I/O数」に、起動したコマンド分のI/O数を加算した値を格納させる。同様に、スケジュール部506は、処理可能であると判定した場合、QoS管理テーブル501が記憶する「現ブロック数」に、起動したコマンド分のブロック数を加算した値を格納させる。
また、スケジュール部506は、処理可能であると判定した場合、QoS管理テーブル501が記憶する「限界I/O数」に、起動したコマンド分のI/O数を減算した値を格納させる。同様に、スケジュール部506は、処理可能であると判定した場合、QoS管理テーブル501が記憶する「限界ブロック数」に、起動したコマンド分のブロック数を減算した値を格納させる。
一方、スケジュール部506は、受け付けたコマンド数が限界I/O数および限界ブロック数以内ではないと判定した場合、所定の時間が経過した後に、ホスト10から受け付けたコマンド数が、新たに算出された限界I/O数および限界ブロック数以内であるか否かを判定する。
例えば、スケジュール部506は、受け付けたコマンド数がポートの限界I/O数および限界ブロック数以内ではないと判定した場合、ホストとLUNとの組合せをマークし、所定の時間が経過後に、マークしたホストとLUNとの組合せからスケジュールを実行する。また、例えば、スケジュール部506は、ポートの限界I/O数および限界ブロック数以内ではあるが、ホストの限界I/O数および限界ブロック数以内ではないと判定した場合、LUNをマークする。そして、スケジュール部506は、次のLUNをセットし、ホスト10から受け付けたコマンド数が、新たに算出された限界I/O数および限界ブロック数以内であるか否かを判定する。ここで、次のLUNが無い場合、スケジュール部506は、次のホストをセットし、受け付けたコマンド数が、新たに算出された限界I/O数および限界ブロック数以内であるか否かを判定する。
また、スケジュール部506は、コマンド受信部504により実行待ちのコマンドがないと判定された場合、所定の時間が経過するのを待つことなくコマンドの実行順をスケジュールする。例えば、スケジュール部506は、ホスト10から受け付けたコマンド数が、算出部505により算出されたホスト,ポート,LUNそれぞれの限界I/O数および限界ブロック数以内で処理可能であるか否かを判定する。ここで、スケジュール部506は、ホスト10から受け付けたコマンド数がポート,ホスト,LUNのいずれかの限界I/O数および限界ブロック数以内で処理可能ではないと判定した場合、コマンドを待ちキュー格納部502に格納する。そして、スケジュール部506は、所定の時間が経過した後に、ホスト10から受け付けたコマンド数が、新たに算出された限界I/O数および限界ブロック数以内であるか否かを判定する。
〔1−5−7〕実行部
実行部507は、スケジュール部506によりスケジュールされた実行順でコマンドを待ちキュー格納部502からデキューし、コマンドを起動して入出力処理を実行する。
〔1−5−8〕ミクロ性能融通、およびマクロ性能融通
次に、マクロ融通チェック部510,マクロ融通処理部520,マクロ融通復旧処理部530,ミクロ融通処理部540について説明するのに先立ち、本実施形態で採用される2種類の性能融通方式について説明する。2種類の性能融通方式は、ミクロ性能融通方式とマクロ性能融通方式とである。
なお、以下では、ストレージ装置100の処理性能を改善すべく、各LU(または各ホスト)における入出力処理量の上限値つまり性能限界値を調整することを「性能融通」という。「性能融通」では、処理性能不足を解消するために性能限界値を高く変更するLUを、「融通先LU」という。また、「性能融通」では、「融通先LU」の性能限界値を高くする場合、「融通先LU」の性能限界値を高くする分だけ、処理性能に余裕のあるLUの性能限界値を低く変更する。これにより、処理性能に余裕のあるLUから「融通先LU」への性能融通が行なわれる。上述のごとく「融通先LU」に対して処理性能を融通した「処理性能に余裕のあるLU」を、「融通元LU」という。
「ミクロ性能融通」は、一時的なスパイク性能などを吸収する際に用いて有効な方式である。「ミクロ性能融通」では、例えば1秒以下のサイクル(ミクロサイクル)で、処理性能が不足するLUに、処理性能に余裕のあるLUから処理性能が融通される。このときの融通量(後述するミクロ融通ユニット数NH)は、記憶されず、次のミクロサイクルでは性能限界値の調整に反映されない。従って、ストレージ装置100は、次のミクロサイクルでは、元の処理性能で動作する。このように、「ミクロ性能融通」は一時的な融通であるため、「ミクロ性能融通」を用いることで一度に大量の性能融通が可能である。
「マクロ性能融通」は、ホスト10から要求される処理性能が様々な状況に変動する場合に、性能融通量(性能限界値の調整量)を学習して調整し、各LUの処理性能を実際の入出力性能に追従させる方式である。「マクロ性能融通」では、例えば2秒以上の、より大きなサイクル(マクロサイクル)で処理性能が監視される。そして、所定時間(例えば1マクロサイクル)に亘り連続して性能不足となっているLUに対し、前記所定時間に亘り連続して処理性能に余裕のあるLUから、処理性能が融通される。このように、「マクロ性能融通」は、性能融通量を学習により調整するため、ホスト10から要求される処理性能の継続的な変動に有効に対応することができる。
なお、本実施形態の「マクロ性能融通」では、各LUについて、例えば、1秒毎に処理性能の不足/余裕をチェックすることで、2秒以上のマクロサイクル毎にマクロ性能融通を実行するか否かの判定が行なわれる。例えば、1マクロサイクル内において、1秒毎に、処理性能が不足しているか、あるいは、処理性能に余裕があるかがチェックされる。このとき、1マクロサイクルの間、常に処理性能が不足している融通先LUが存在し、且つ、1マクロサイクルの間、常に処理性能に余裕のある融通元LUが存在していることが、マクロ性能融通の実行条件として設定される。そして、マクロ性能融通の実行条件を満たす場合、融通元LUから融通先LUへのマクロ性能融通が、所定の性能融通単位で実行される。
また、本実施形態の「マクロ性能融通」では、1マクロサイクル当たりの融通量の変更は、所定の性能融通単位(ユニット単位)で行なわれる。本実施形態において、所定の性能融通単位(ユニット単位)の入出力処理量は、上記優先度に基づいて決定される入出力処理量(性能値MB/s,IOPS)の最小間隔以下に設定される。以下、所定の性能融通単位の入出力処理量を「ユニット」という。例えば、図4に示す優先順位と性能値との対応関係では、上記優先度についての性能値の最小間隔は、5MB/sおよび60IOPSであるので、「1ユニット」は、例えば、5MB/sおよび60IOPSに設定される。
ここで、上述のごとく優先度を変更して負荷状況の変化に対応する従来技術を用いた場合を考える。この場合、図4に示す例では、優先順位1〜7の範囲における性能限界値の変更間隔(融通量)は、性能値MB/sについて100、性能値IOPSについて2500または2000であり、優先順位8〜15の範囲における変更間隔(融通量)に比べ、かなり大きい。性能限界値の変更間隔が大きいと、優先順位を上下させるだけでは調整範囲が限定的となり、ホスト10から要求される性能の変動に細かく追従することができない。これに対して、本実施形態の「マクロ性能融通」では、上記優先度についての性能値の最小間隔5MB/s,60IOPSを「1ユニット」とする単位で、性能融通が行なわれる。したがって、優先度を変更して性能限界値を変更する場合に比べ、性能限界値の変更間隔(融通量)を大幅に小さくすることができ、ホスト10から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。
本実施形態では、上述したミクロ性能融通およびマクロ性能融通の特徴を踏まえ、ミクロ性能融通およびマクロ性能融通のいずれか一方が使用されてもよいし、両方が同時に使用されてもよい。一方のみを使用する場合、表1におけるパラメータ等を適切に設定することにより、より有効な融通が行なわれる。また、両方を使用する場合、一時的なスパイク性能などを吸収する際にはミクロ性能融通を使用する一方、継続的な性能変動を吸収する際にはマクロ性能融通を使用するように制御を行なうことで、両方の特徴を有効に利用することができる。
ついで、下記表1を参照しながら、ミクロ性能融通およびマクロ性能融通の各種条件や、当該各種条件に係る値などについて説明する。当該各種条件や、当該各種条件に係る値などは、前述した通り、性能設定部503により、管理者からの指示に応じて設定される。下記表1のごとく設定された各種条件や値に基づいて、ミクロ性能融通およびマクロ性能融通がそれぞれ実行される。
下記表1に示すように、本実施形態の「ミクロ性能融通」および「マクロ性能融通」では、それぞれ、以下のように各種条件や値が設定され使用される。各種条件や値としては、「サイクル」,「1サイクルでの融通LU数」,「融通回数制限」,「融通量」,「融通を受ける条件」,「融通する条件」,「復帰条件」が設定される。
「サイクル」は、性能融通を実行する周期(秒)である。ミクロ性能融通を実行するサイクル(ミクロサイクル)は、例えば、0.5秒とし、マクロ性能融通を実行するサイクル(マクロサイクル)は、例えば、30秒とする。
「1サイクルでの融通LU数」は、1サイクルの間に性能融通を行なうLUの数の上限値である。ミクロ性能融通の「1サイクルでの融通LU数」は、例えば、最大4LU(デフォルト)とし、16LUまでチューニング可能とする。また、マクロ性能融通の「1サイクルでの融通LU数」も、例えば、最大4LU(デフォルト)とし、16LUまでチューニング可能とする。
「融通回数制限」は、性能融通の実行回数の制限に係る情報である。ミクロ性能融通の「融通回数制限」は、例えば、一つのLUについて、マクロ性能融通1サイクル(マクロサイクル;30秒)当たり4回までとし、チューニング可能とする。また、マクロ性能融通の「融通回数制限」は、「なし」に設定される。ただし、上限および下限は設定される。
「融通量」は、性能融通1回当たりに融通される量である。ミクロ性能融通の「融通量」は、例えば、1回当たり、設定性能(例えば図4に示す優先度に応じて設定された性能値)の2倍とし、チューニング可能とする。また、マクロ性能融通の「融通量」は、例えば、1回当たり、上述した1ユニット(所定の性能融通単位)、つまり60IOPSおよび5MB/sの両方で同時に融通する。
「融通を受ける条件」は、LUが他のLUから性能融通を受ける条件、つまりLUが融通先LUになる条件である。ミクロ性能融通の「融通を受ける条件」は、待ちI/O(I/O数またはブロック数)を検出したLUであることとする。また、マクロ性能融通の「融通を受ける条件」は、30秒(第1所定時間)の間、継続して処理性能不足を検出したLUであることとする。
「融通する条件」は、LUが他のLUへ性能融通を行なう条件、つまりLUが融通元LUになる条件である。ミクロ性能融通の「融通する条件」は、ミクロ性能融通を行なう際の上記「融通量」以上の余裕があることとする。また、マクロ性能融通の「融通する条件」は、30秒(第2所定時間)の間、継続して処理性能に余裕のあるLUであることとする。
「復帰条件」は、融通元LUから融通先LUへ融通された入出力処理量を、融通先LUから融通元LUに復帰(復旧)させる条件である。ミクロ性能融通では、上述したように、融通量は記憶されず次のミクロサイクルでストレージ装置100は元の処理性能で動作するため、ミクロ性能融通の「復帰条件」は設定されない。また、マクロ性能融通の「復帰条件」は、他のLUに性能融通を行なっている融通元LUで処理性能不足を検出することとする。また、マクロ性能融通の復帰(復旧)は、QoS関連設定変更時にも実行される。
〔1−5−9〕LUの性能融通情報
次に、上述したミクロ性能融通およびマクロ性能融通を実行すべく、図3に示すように、QoS制御域213に、LU(LUN#1〜#m;mは2以上の整数)毎に保持される、各LUの性能融通情報について説明する。つまり、QoS制御域213には、LU毎に、例えば、6種類の融通フラグFIN,FOUT,FINMAX,FOUTMAX,FMICIN,FMICOUTと8種類の数値NB,NC,ND,NE,NF,NG,NH,NIとが性能融通情報として保存される。これらの融通フラグや数値は、管理者からの指示に応じて性能設定部503により設定されるか、もしくは、ミクロ性能融通およびマクロ性能融通の実行中にSCSIターゲット制御部303の機能によって設定・更新される。
融通フラグFINは、対象LUが他のLUからマクロ性能融通を受けている場合つまり対象LUが融通先LUである場合にオンに設定され、それ以外の場合にオフに設定される。
融通フラグFOUTは、対象LUが他のLUに対しマクロ性能融通を行なっている場合つまり対象LUが融通元LUである場合にオンに設定され、それ以外の場合にオフに設定される。
融通フラグFINMAXは、対象LUが他のLUから受けているマクロ性能融通の融通量が予め設定された上限に到達している場合(上限到達時)にオンに設定され、それ以外の場合にオフに設定される。
融通フラグFOUTMAXは、対象LUから他のLUに対するマクロ性能融通の融通量が予め設定された下限に到達している場合(下限到達時)にオンに設定され、それ以外の場合にオフに設定される。
融通フラグFMICINは、対象LUが他のLUからミクロ性能融通を受けている場合にオンに設定され、それ以外の場合にオフに設定される。
融通フラグFMICOUTは、対象LUが他のLUに対しミクロ性能融通を行なっている場合にオンに設定され、それ以外の場合にオフに設定される。
融通ユニット数NBは、対象LUが他のLUからマクロ性能融通を受けている場合あるいは対象LUが他のLUに対しマクロ性能融通を行なっている場合の融通量に対応するユニット数である。ここで、融通ユニット数NBは、当該融通量を、上述した所定の性能融通単位(ユニット)の数に換算した値である。
待ちI/O数NCは、対象LUにおける、QoS制御で待ち状態のI/O(ホスト10からの入出力要求またはコマンド)の数である。
待ちブロック数NDは、対象LUにおける、QoS制御で待ち状態のI/O(ホスト10からの入出力要求またはコマンド)の総ブロック数である。
これらの待ちI/O数NCおよび待ちブロック数NDから、QoS制御で待ち状態のI/Oに対応するユニット数(待ちユニット数)が換算される。
最小余りユニット数NEは、対象LUにおける1秒毎の余りユニット数NIの最小値(最小余り量)である。ここで、余りユニット数NIは、対象LUに対するI/Oに係る処理量の、対象LUの処理性能に対する処理余り量(余裕値)に対応するもので、当該処理余り量を、上述した所定の性能融通単位(ユニット)の数に換算した値である。
最小待ちユニット数NFは、対象LUにおける1秒毎の待ちユニット数の最小値(最小待ち量)である。ここで、待ちユニット数は、上述したように、待ちI/O数NCおよび待ちブロック数NDから換算される、QoS制御で待ち状態のI/Oに対応するユニット数である。
ミクロ融通数NGは、対象LUがミクロ性能融通を行なう際の「融通回数制限」(表1参照)に対応する値で、対象LUにおける、1マクロサイクル(例えば30秒)内のミクロ性能融通の実行回数の制限値(例えば4回)である。
ミクロ融通ユニット数NHは、今回のミクロ性能融通によって、対象LUが他のLUから受ける一時的な融通量、もしくは、対象LUが他のLUに対し融通する一時的な融通量に対応するユニット数である。つまり、ミクロ融通ユニット数NHは、当該一時的な融通量を、上述した所定の性能融通単位(ユニット)の数に換算した値である。
余りユニット数NIは、最小余りユニット数NEの説明において上述した通り、対象LUに対するI/Oに係る処理量の、対象LUの処理性能に対する処理余り量(余裕値)に対応する。そして、余りユニット数NIは、当該処理余り量を、上述した所定の性能融通単位(ユニット)の数に換算した値である。
〔1−5−10〕マクロ融通チェック部
マクロ融通チェック部510は、第1判定部521および第2判定部522によりマクロ性能融通を実行するか否かを判定するために必要な情報(最小余りユニット数NEおよび最小待ちユニット数NF)をチェックして取得する。このため、マクロ融通チェック部510は、第1取得部511および第2取得部512を有する。なお、マクロ融通チェック部510の詳細な動作(マクロ融通1秒チェック処理の処理手順)については、図13を参照しながら後述する。
第1取得部511は、後述する第1判定部521がマクロ性能融通の上記「融通を受ける条件」の判定を行なうために必要な情報である最小待ちユニット数NFを取得する。つまり、第1取得部511は、LU毎に、1マクロサイクル(例えば30秒;第1所定時間)よりも短い時間間隔(例えば1秒間隔)で、当該LUに対する待ちユニット数(I/Oの処理待ち量)を取得する。このとき、1秒毎の待ちユニット数は、上述したように、待ちI/O数NCおよび待ちブロック数NDから換算される。
そして、第1取得部511は、LU毎に、1マクロサイクル中に取得される待ちユニット数のうち最小のものを最小待ちユニット数(最小待ち量)NFとして取得する。このとき、第1取得部511は、1マクロサイクル中の1秒毎に待ちユニット数を取得する都度、今回取得した待ちユニット数と、QoS制御域213に保存されている値(現時点までの最小待ちユニット数)NFとを比較する。今回取得した待ちユニット数が値NFよりも小さい場合、第1取得部511は、値NFを、今回取得した待ちユニット数に置き換える。第1取得部511が以上の処理を繰り返すことにより、1マクロサイクルが経過した時点でQoS制御域213に保存されている値NFが、最小待ちユニット数NFとなる。
第2取得部512は、後述する第2判定部522がマクロ性能融通の上記「融通する条件」の判定を行なうために必要な情報である最小余りユニット数NEを取得する。つまり、第2取得部512は、LU毎に、1マクロサイクル(例えば30秒;第2所定時間)よりも短い時間間隔(例えば1秒間隔)で、当該LUについての余りユニット数(処理余り量)を取得する。このとき、1秒毎の余りユニット数は、QoS制御域213に保存される余りユニット数NIを1秒毎に参照することで取得される。
そして、第2取得部512は、LU毎に、1マクロサイクル中に取得される余りユニット数NIのうち最小のものを最小余りユニット数(最小余り量)NEとして取得する。このとき、第2取得部512は、1マクロサイクル中の1秒毎に余りユニット数NIを取得する都度、今回取得した余りユニット数NIと、QoS制御域213に保存されている値(現時点までの最小余りユニット数)NEとを比較する。今回取得した余りユニット数が値NEよりも小さい場合、第2取得部512は、値NEを、今回取得した余りユニット数NIに置き換える。第2取得部512が以上の処理を繰り返すことにより、1マクロサイクルが経過した時点でQoS制御域213に保存されている値NEが、最小余りユニット数NEとなる。
〔1−5−11〕マクロ融通処理部
マクロ融通処理部520は、マクロ融通チェック部510の第1取得部511および第2取得部512によりそれぞれ取得された最小待ちユニット数NFおよび最小余りユニット数NEに基づき、マクロ性能融通を実行する。マクロ融通処理部520は、第1判定部521,第2判定部522および変更部523を有する。なお、マクロ融通処理部520の詳細な動作(マクロ融通処理の処理手順)については、図14および図15を参照しながら後述する。
第1判定部521は、各LUがマクロ性能融通の上記「融通を受ける条件」を満たすか否かを判定する。つまり、第1判定部521は、LU毎に、当該LUに対するI/Oに係る処理量が1マクロサイクル(第1所定時間;30秒)に亘って当該LUの処理性能を超えているか否かを判定する。より具体的に、第1判定部521は、当該LUについて第1取得部511により取得された最小待ちユニット数NFが0でない場合、当該LUに対するI/Oに係る処理量が1マクロサイクルに亘って当該LUの処理性能を超えていると判定する。つまり、第1判定部521は、当該LUがマクロ性能融通の上記「融通を受ける条件」を満たす融通先LUであると判定する。
第2判定部522は、各LUがマクロ性能融通の上記「融通する条件」を満たすか否かを判定する。つまり、第2判定部522は、LU毎に、当該LUに対するI/Oに係る処理量が1マクロサイクル(第2所定時間;30秒)に亘って当該LUの処理性能を下回っているか否かを判定する。より具体的に、第2判定部522は、当該LUについて第2取得部412により取得された最小余りユニット数NEが0でない場合、当該LUに対するI/Oに係る処理量が1マクロサイクルに亘って当該LUの処理性能を下回っていると判定する。つまり、第2判定部522は、当該LUがマクロ性能融通の上記「融通する条件」を満たす融通元LUであると判定する。
変更部523は、第1判定部521および第2判定部522による判定結果に従って、対象LUの性能限界値をユニット単位で変更することで、融通元LUから融通先LUへのマクロ性能融通を、1ユニット単位で行なう。つまり、第1判定部521による判定結果が下記項目(a1)に示す場合であり、且つ、第2判定部522による判定結果が下記項目(a2)に示す場合である時、変更部523は、下記項目(a3)に示す変更処理を行なう。
(a1)第1判定部521による判定結果: 一のLU(第1記憶装置)がマクロ性能融通の上記「融通を受ける条件」を満たす融通先LUである場合。
(a2)第2判定部522による判定結果: 他のLU(第2記憶装置)がマクロ性能融通の上記「融通する条件」を満たす融通元LUである場合。
(a3)変更処理: 融通先LUについて算出された性能制限値に、上記所定の性能融通単位で1ユニット分に対応する値を加算するとともに、融通元LUについて算出された性能制限値から、上記所定の性能融通単位で1ユニット分に対応する値を減算する。
〔1−5−12〕マクロ融通復旧処理部
マクロ融通復旧処理部530は、各LUが上記「復帰条件」を満たした場合、融通先LUに融通した処理量を、融通先LUから融通元LUに復帰させる復旧処理を実行する。マクロ融通復旧処理部530は、第3判定部531および復旧処理部532を有する。なお、マクロ融通復旧処理部530(特に復旧処理部532)の詳細な動作(マクロ融通復旧処理の処理手順)については、図16〜図20を参照しながら後述する。
第3判定部531は、各LUがマクロ性能融通の上記「復帰条件」を満たすか否かを判定する。つまり、第3判定部531は、LU毎に、当該LUが、一以上の融通先LU(第1記憶装置)へのマクロ性能融通を行なった融通元LU(第2記憶装置)であり、且つ、当該LUに対するI/Oの処理待ちの生じた融通復旧対象であるか否かを判定する。
復旧処理部532は、第3判定部531により当該LUが融通復旧対象(以下、融通復旧LUという)であると判定された場合、融通復旧LUが他のLUに融通した処理量を一以上の融通先LUから融通復旧LUに復帰させる復旧処理を実行する。その際、復旧処理部532は、一以上の融通先LUに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を一以上の融通先LUから融通復旧LUに復帰させる。
〔1−5−13〕ミクロ融通処理部
ミクロ融通処理部540は、ミクロ性能融通を実行するもので、第4判定部541,融通処理部542,融通後処理部543,第5判定部544,ビジー率算出部545を有する。なお、ミクロ融通処理部540の詳細な動作(ミクロ融通処理およびミクロ融通後処理の処理手順)については、図11,図12および図22〜図31を参照しながら後述する。ミクロ融通処理部540によるミクロ性能融通の実行回数は、1マクロサイクル当たり、QoS制御域213においてミクロ融通数NGとして設定される値(例えば4)に制限される。
第4判定部(待ち入出力要求判定部)541は、各LUがミクロ性能融通の「融通を受ける条件」を満たすか否かを判定する。つまり、本実施形態において、第4判定部541は、LUのそれぞれについて、待ち状態のI/O要求が有るか否か(待ち状態のI/O要求の有無)を判定する。
第5判定部(性能余裕判定部)544は、第4判定部541によって待ち状態のI/O要求が有ると判定された融通先LUが存在する場合、当該融通先LUを含むRAIDグループ(ストレージ装置100)における性能余裕の有無を判定する。このとき、第5判定部544は、ビジー率算出部545によって算出されるRAIDグループビジー率Lが所定値(例えば80%)未満である場合、当該RAIDグループに性能余裕が有ると判定する。
ビジー率算出部545は、ストレージ装置100において複数のLUが属するRAIDグループのビジー率(RAIDグループビジー率)Lを算出する。その際、ビジー率算出部545は、RAIDグループに含まれる複数のディスクドライブ(HDD101a〜101d)のそれぞれについてビジー率を算出し、複数のディスクドライブの平均ビジー率を、RAIDグループビジー率Lとして算出する。
なお、複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、ビジー率算出部545は、各ディスクドライブのビジー率に対し種別に応じた係数(図25参照)を乗算してRAIDグループビジー率Lを算出する。また、複数のRAIDグループが自動階層化プール(Flexible Tieredのプール)を構成する場合、ビジー率算出部545は、全てのRAIDグループにおける全てのディスクドライブを考慮してRAIDグループビジー率Lを算出する。つまり、ビジー率算出部545は、複数のRAIDグループについて算出された複数のRAIDグループビジー率のそれぞれに、各RAIDグループに含まれるディスクドライブの種別に応じた係数(図26参照)を乗算して、複数のRAIDグループ全体についてのビジー率Lを算出する。ビジー率算出部545によるRAIDグループビジー率Lの算出手順については、図22〜図26を参照しながら後述する。
また、ビジー率算出部545は、融通先LUに対する性能融通量をビジー率増加分に換算し、換算されたビジー率増加分をRAIDグループビジー率Lに加算した値を性能融通後のRAIDグループビジー率Lとして用いる。ビジー率算出部545によるビジー率増加分の換算等の手順については、図27,図28,図30,図31を参照しながら後述する。
融通処理部542は、第5判定部544によってRAIDグループに性能余裕が有ると判定された場合つまりRAIDグループビジー率Lが所定値(例えば80%)未満であると判定された場合、融通先LUに対しRAIDグループの未割当帯域から性能融通を行なう。このとき、複数のLUの中に性能余裕をもつ融通元LUが存在しない場合、融通処理部542は、融通先LUに対し、RAIDグループにおける複数のLU用帯域以外の未割当帯域から性能融通を行なう。一方、複数のLUの中に融通元LUが存在する場合、融通処理部542は、融通先LUに対し、融通元LU用帯域における未割当帯域から性能融通を行なう。
つまり、本実施形態では、処理性能に余裕のあるLUが無く融通先LUへの処理性能の融通を行なえない際、融通先LUの属するRAIDグループに性能余裕があれば、RAIDグループにおけるLU用帯域以外の未割当帯域からミクロ性能融通が行なわれる。また、本実施形態では、処理性能に余裕のある融通元LUから融通先LUへの性能融通が可能であっても、これらのLUの属するRAIDグループに性能余裕がなければ、融通元LUから融通先LUへのミクロ性能融通を行なわないように構成される。
融通処理部542と融通後処理部543とは、協働して、第4判定部541により「融通を受ける条件」を満たすと判定された融通先LUに対するミクロ性能融通を行なう。その際、上述したように、融通先LUの属するRAIDグループに性能余裕がある場合つまり当該RAIDグループのビジー率が所定値未満である場合、融通先LUに対するミクロ性能融通が行なわれる。
なお、ミクロ性能融通の「融通量」は、QoS制御域213においてミクロ融通ユニット数NHとして保持される。QoS制御域213におけるミクロ融通ユニット数NHの値は、図29を参照しながら後述するように、1ミクロサイクルの開始時にクリアされる。このため、ミクロ融通ユニット数NHの値に応じた融通量でのミクロ性能融通は、1回(1ミクロサイクル)だけ実行される。
融通処理部542は、スケジュール部506によるQoS I/O起動スケジュール処理前(図6参照)に動作する。融通処理部542は、1ミクロサイクル毎に、性能不足となる融通先LU(待ちLU)を検索し、もし該当する融通先LUがあれば、処理性能に余裕のある融通元LU(余りLU)を検索する。そして、融通処理部542は、検索された待ちLUの待ちユニット数と検索された余りLUの余りユニット数とを、それぞれ大きい順に並べた待ちLU配列および余りLU配列として記憶する。融通処理部542は、待ちLU配列および余りLU配列に基づき、全ての余りユニット数(合計値)を待ちLUで分配し各待ちLUに対するミクロ融通ユニット数NHを決定する。また、融通処理部542は、上述のごとくRAIDグループに性能余裕があれば、性能融通を行なう待ちLUおよび余りLUについてQoS制御域213にミクロ融通ユニット数NHおよび融通フラグFMICIN,FMICOUTを設定する。さらに、融通処理部542は、ミクロ性能融通を行なう待ちLUと余りLUとの組合せを一組でも決定した場合、QoS制御域213のミクロ融通有フラグ(図3参照)をオンに設定し、ミクロ性能融通を行なう旨を融通後処理部543に通知する。
さらに、融通処理部542は、待ちLUが有るが余りLUが無い場合、上述のごとくRAIDグループに性能余裕があれば、RAIDグループにおけるLU用帯域以外の未割当帯域から待ちLUへのミクロ性能融通を行なう。このとき、融通処理部542は、ミクロ融通ユニット数NHを、以下の4つのパターンのうちの一つで決定し、待ちLUについてQoS制御域213にミクロ融通ユニット数NHおよび融通フラグFMICINを設定する。そして、融通処理部542は、QoS制御域213のミクロ融通有フラグ(図3参照)をオンに設定し、ミクロ性能融通を行なう旨を融通後処理部543に通知する。
パターン1: ミクロ融通ユニット数NH=[所定閾値(例えば80%)]−[RAIDグループビジー率L]の値を換算したユニット数
パターン2: ミクロ融通ユニット数NH=待ち(不足)ユニット数のn倍(nは1以上の整数)
パターン3: ミクロ融通ユニット数NH=所定の固定ユニット数
パターン4: ミクロ融通ユニット数NH=対象LU(融通先LU)のQoS設定値に依存(比例)したユニット数
融通処理部542は、以上のようなミクロ融通処理を、図29〜図31を参照しながら詳述する処理手順で実行する。
融通後処理部543は、スケジュール部506によるQoS I/O起動スケジュール処理後(図6参照)、QoS制御域213のミクロ融通有フラグ(図3参照)がオンに設定されている場合に動作する。融通後処理部543は、1ミクロサイクル毎に、ミクロ融通ユニット数NHおよび融通フラグFMICIN,FMICOUTに基づいて、待ちLUおよび余りLUの限界値に対する加減算処理を行ない、次のNミリ秒サイクルでミクロ性能融通を実行する。ただし、本実施形態では、QoS制御用のメモリで保持可能な数値範囲を超えるのを抑止すべく、図6に示すように、1秒毎に、QoS制御に係るQoSカウントがクリアされる。当該QoSカウントのクリアに対応すべく、融通後処理部543は、1秒毎のQoSカウントクリアタイミングとそれ以外のタイミングとで異なる処理を行なっている。各タイミングでの、融通後処理部543による処理については、図12を参照しながら後述する。融通後処理部543は、以上のようなミクロ融通後処理を、図12を参照しながら詳述する処理手順で実行する。
〔2〕本実施形態の動作
次に、図6〜図20を参照しながら、本実施形態に係るストレージ装置100の動作、特に、本実施形態に係るストレージ装置100による処理の処理手順について説明する。
〔2−1〕Nミリ秒タイマスケジュール処理
まず、図6に示すフローチャート(ステップS101〜S111)に従って、本実施形態のSCSIターゲット制御部303によって実行されるNミリ秒タイマスケジュール処理の処理手順について説明する。Nは、例えば、10であり、SCSIターゲット制御部303は、各ポートについて、10ミリ秒毎に、図6に示すNミリ秒タイマスケジュール処理を実行する。これにより、図7〜図9および図11〜図20を参照しながら詳述するごとく、QoS制御(QoS I/O起動スケジュール),マクロ性能融通およびミクロ性能融通が実行される。
Nミリ秒タイマスケジュール処理が起動されると、まず、算出部505は、各ポートの限界値である限界I/O数および限界ブロック数に、それぞれNミリ秒I/O数およびNミリ秒ブロック数を加算する。加算結果のポート限界値は、QoS管理テーブル501に上書き保存される(ステップS101)。ポート限界値に加算される限界I/O数および限界ブロック数は、QoS設定(図4の性能値)のN/1000(N=10の場合、1/100)の値となる(図5参照)。
また、算出部505は、全てのホスト10の限界値である限界I/O数および限界ブロック数に、それぞれNミリ秒I/O数およびNミリ秒ブロック数を加算する。加算結果の全ホスト限界値は、QoS管理テーブル501に上書き保存される(ステップS102)。各ホスト限界値に加算される限界I/O数および限界ブロック数は、QoS設定(図4の性能値)のN/1000(N=10の場合、1/100)の値となる(図5参照)。
さらに、本実施形態では、LUを性能融通対象としているため、算出部505は、全てのLUのそれぞれに対し、図7に示す全LU限界値加算処理を実行する(ステップS103)。ここで、図7に示すフローチャート(ステップS121〜S125)に従って、全LU限界値加算処理の処理手順について説明する。
図7に示すように、算出部505は、全てのLUの限界値である限界I/O数および限界ブロック数に、それぞれNミリ秒I/O数およびNミリ秒ブロック数を加算する。加算結果の全ホスト限界値は、QoS管理テーブル501に上書き保存される(ステップS121)。各ホスト限界値に加算される限界I/O数および限界ブロック数は、QoS設定(図4の性能値)のN/1000(N=10の場合、1/100)の値となる(図5参照)。
そして、算出部505は、QoS制御域213を参照し、各LUの融通フラグFINがオンであるか否かを判定する(ステップS122)。融通フラグFINがオンである場合(ステップS122のYESルート)、つまり対象LUがマクロ性能融通を受けている融通先LUである場合、算出部505は、さらに、以下の加算処理を行なう(ステップS123)。
即ち、算出部505は、対象LUの限界値である限界I/O数に、QoS制御域213の融通ユニット数NBに対応するI/O数をさらに加算する。具体的には、[融通ユニット数NB]×[ユニット当たりのI/O数]のN/1000の値が限界I/O数に加算される。同様に、算出部505は、対象LUの限界値である限界ブロック数に、QoS制御域213の融通ユニット数NBに対応するI/O数をさらに加算する。具体的には、[融通ユニット数NB]×[ユニット当たりのブロック数]のN/1000の値が限界ブロック数に加算される。加算結果は、QoS管理テーブル501に上書き保存される。
ステップS123の処理後、もしくは、融通フラグFINがオフである場合(ステップS122のNOルート)、算出部505は、QoS制御域213を参照し、各LUの融通フラグFOUTがオンであるか否かを判定する(ステップS124)。融通フラグFOUTがオンである場合(ステップS124のYESルート)、つまり対象LUがマクロ性能融通を行なっている融通元LUである場合、算出部505は、さらに、以下の減算処理を行なう(ステップS125)。
即ち、算出部505は、対象LUの限界値である限界I/O数から、QoS制御域213の融通ユニット数NBに対応するI/O数を減算する。具体的には、[融通ユニット数NB]×[ユニット当たりのI/O数]のN/1000の値が限界I/O数から減算される。同様に、算出部505は、対象LUの限界値である限界ブロック数から、QoS制御域213の融通ユニット数NBに対応するブロック数を減算する。具体的には、[融通ユニット数NB]×[ユニット当たりのブロック数]のN/1000の値が限界ブロック数から減算される。減算結果は、QoS管理テーブル501に上書き保存される。
ステップS125の処理後、もしくは、融通フラグFOUTがオフである場合(ステップS124のNOルート)、算出部505は、全LU限界値加算処理を完了する。
上述のような全LU限界値加算処理(ステップS103,S121〜S125)をNミリ秒毎に実行することで、マクロ性能融通がNミリ秒毎に実行される。なお、ホスト10を性能融通対象とする場合には、算出部505は、ステップS102において、全てのホストのそれぞれに対し、図7に示す全LU限界値加算処理と同様の全ホスト限界値加算処理を実行する。
さて、限界値加算処理(ステップS101〜S103)を完了すると、図6に示すように、ビジー率算出部545によって、全てのRAIDグループのビジー率Lの算出処理および蓄積処理が、例えば0.5秒(1ミクロサイクル)毎に実行される(ステップS1041)。ビジー率算出部545によるRAIDグループビジー率Lの算出手順については、図22〜図26を参照しながら後述する。
この後、第4判定部541,融通処理部542,第5判定部544およびビジー率算出部545によるミクロ融通処理が、例えば0.5秒(1ミクロサイクル)毎に実行される(ステップS1042)。第4判定部541,融通処理部542,第5判定部544およびビジー率算出部545によるミクロ融通処理については、図29〜図31を参照しながら後述する。また、ミクロ融通処理に含まれる、ビジー率算出部545によるビジー率増加分の換算等の手順については、図27および図28を参照しながら後述する。
そして、マクロ融通チェック部510によるマクロ融通1秒チェック処理が、1秒毎に実行されてから(ステップS105)、第3判定部531により融通元LUで処理性能不足が発生したか否かが、Nミリ秒毎に判定される(ステップS106)。融通元LUで処理性能不足が発生した場合(ステップS106のYESルート)、つまり融通復旧LUが存在する場合、復旧処理部532によるマクロ融通復旧処理が実行される(ステップS107)。上述したステップS105〜S107の処理は、マクロ融通前処理に相当する。なお、マクロ融通チェック部510によるマクロ融通1秒チェック処理については、図13を参照しながら後述し、復旧処理部532によるマクロ融通復旧処理については、図16および図17を参照しながら後述する。
ステップS107の処理後、もしくは、融通復旧LUが存在しない場合(ステップS106のNOルート)、スケジュール部506は、QoS I/O起動スケジュール処理を実行する(ステップS108)。QoS I/O起動スケジュール処理については、図8および図9を参照しながら後述する。
ついで、マクロ融通処理部520によるマクロ融通処理が、例えば30秒(1マクロサイクル)毎に実行され(ステップS109)、1秒毎に、QoS制御に係るQoSカウントがクリアされる(ステップS110)。QoSカウントのクリアにより、QoS制御用のメモリで保持可能な数値範囲を超えることが抑止される。この後、融通後処理部543によるミクロ融通後処理が、例えば0.5秒(1ミクロサイクル)毎に実行され(ステップS111)、Nミリ秒タイマスケジュールの1サイクル分(Nミリ秒毎)の処理が完了する。マクロ融通処理部520によるマクロ融通処理については、図14および図15を参照しながら後述する。また、融通後処理部543によるミクロ融通後処理については、図12を参照しながら後述する。
〔2−2〕QoS I/O起動スケジュール処理
次に、図8および図9に示すフローチャート(ステップS201〜S217)に従って、本実施形態のスケジュール部506によって実行されるQoS I/O起動スケジュール処理(図6のステップS108)の処理手順について詳細に説明する。QoS I/O起動スケジュール処理では、LU毎に設けた待ちキュー内にコマンドが待機している場合、以下のように、当該LUの限界I/O数および限界ブロック数に従って、待ちキュー内のコマンドが実行される。
スケジュール部506は、マークしたホストを復元する(ステップS201)。続いて、スケジュール部506は、マークしたLUを復元する(ステップS202)。そして、スケジュール部506は、待ちキュー格納部502内に次のコマンドがあるか否かを判定する(ステップS203)。
ここで、スケジュール部506は、待ちキュー格納部502内に次のコマンドがあると判定した場合(ステップS203のYESルート)、コマンド数がポートの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS204)。そして、スケジュール部506は、コマンド数がポートの限界I/O数および限界ブロック数以内であると判定した場合(ステップS204のYESルート)、コマンド数がホストの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS205)。
ここで、スケジュール部506は、コマンド数がホストの限界I/O数および限界ブロック数以内であると判定した場合(ステップS205のYESルート)、コマンド数がLUの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS206)。そして、スケジュール部506は、コマンド数がLUの限界I/O数および限界ブロック数以内であると判定した場合(ステップS206のYESルート)、ポートの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数およびブロック数を減算する(ステップS207)。
また、スケジュール部506は、ホストの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数およびブロック数を減算する(ステップS208)。続いて、スケジュール部506は、LUの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数およびブロック数を減算する(ステップS209)。そして、実行部507は、コマンドを起動する(ステップS210)。また、コマンドを起動した後、実行部507は、コマンドを待ちキュー格納部502からデキューする(ステップS211)。この処理の後、ストレージ装置100は、ステップS203に移行する。
また、スケジュール部506は、コマンド数がポートの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS204のNOルート)、ホストとLUとをマークし(ステップS212)、処理を終了する。また、スケジュール部506は、コマンド数がホストの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS205のNOルート)、LUをマークし(ステップS213)、ステップS214に移行する。
また、スケジュール部506は、待ちキュー格納部502内に次のコマンドがないと判定した場合(ステップS203のNOルート)、ステップS214に移行する。また、スケジュール部506は、コマンド数がLUの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS206のNOルート)、ステップS214に移行する。
ステップS214において、スケジュール部506は、次のLUをセットする。そして、スケジュール部506は、次のLUがマークしたLUと同じLUであるか否かを判定する(ステップS215)。ここで、スケジュール部506は、次のLUがマークしたLUと同じLUではないと判定した場合(ステップS215のNOルート)、ステップS203に移行する。
一方、スケジュール部506は、次のLUがマークしたLUと同じLUであると判定した場合(ステップS215のYESルート)、次のホストをセットする(ステップS216)。続いて、スケジュール部506は、次のホストがマークしたホストと同じホストであるか否かを判定する(ステップS217)。ここで、スケジュール部506は、次のホストがマークしたホストと同じホストではないと判定した場合(ステップS217のNOルート)、ステップS202に移行する。一方、スケジュール部506は、次のホストがマークしたホストと同じホストであると判定した場合(ステップS217のYESルート)、処理を終了する。
〔2−3〕コマンド受信時の処理
ここで、図10に示すフローチャート(ステップS301〜S309)に従って、本実施形態のコマンド受信部504によって実行されるコマンド受信処理の処理手順について詳細に説明する。ストレージ装置100は、例えば、コマンドを受信したことを契機にこのコマンド受信処理を実行する。コマンド受信処理では、ホストからコマンドを受信した際、以下のように、受信したコマンドは、限界I/O数および限界ブロック数に応じて、即座に実行されるか、もしくは、待ちキューにエンキューされる。
図10に示すように、コマンド受信部504は、受信したコマンドの発行元ホストとLUとの間で待ちI/Oがあるか否かを判定する(ステップS301)。ここで、コマンド受信部504により発行元ホストとLUNとの間で待ちI/Oがないと判定された場合(ステップS301のNOルート)、スケジュール部506は、以下の処理を実行する。すなわち、スケジュール部506は、コマンド数がポートの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS302)。そして、スケジュール部506は、コマンド数がポートの限界I/O数および限界ブロック数以内であると判定した場合(ステップS302のYESルート)、コマンド数がホストの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS303)。
ここで、スケジュール部506は、コマンド数がホストの限界I/O数および限界ブロック数以内であると判定した場合(ステップS303のYESルート)、コマンド数がLUの限界I/O数および限界ブロック数以内であるか否かを判定する(ステップS304)。そして、スケジュール部506は、コマンド数がLUの限界I/O数および限界ブロック数以内であると判定した場合(ステップS304のYESルート)、ポートの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数とブロック数とを減算する(ステップS305)。
また、スケジュール部506は、ホストの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数およびブロック数を減算する(ステップS306)。続いて、スケジュール部506は、LUの限界値(限界I/O数および限界ブロック数)から、コマンド分のI/O数およびブロック数を減算する(ステップS307)。また、実行部507は、コマンドを起動する(ステップS308)。ストレージ装置100は、ステップS308の終了後、処理を終了する。
コマンド受信部504は、受信したコマンドの発行元ホストとLUとの間で待ちI/Oがあると判定した場合(ステップS301のYESルート)、ステップS309に移行する。また、スケジュール部506は、コマンド数がポートの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS302のNOルート)、ステップS309に移行する。また、スケジュール部506は、コマンド数がホストの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS303のNOルート)、ステップS309に移行する。また、スケジュール部506は、コマンド数がLUの限界I/O数および限界ブロック数以内ではないと判定した場合(ステップS304のNOルート)、ステップS309に移行する。そして、コマンド受信部504は、ステップS309において、コマンドを待ちキュー格納部502にエンキューし、処理を終了する。
〔2−4〕ミクロ融通処理
ここで、図11を参照しながら、本実施形態に係るミクロ融通処理の概要について説明する。図11に示す例では、RAIDグループの帯域幅の中に3つのLU#0,LU#1,LU#2のためのQoS設定範囲(帯域幅)が確保されている。また、3つのLU#0,LU#1,LU#2のそれぞれについての帯域上限がQoS設定範囲内で設定されている。そして、図11に示す例では、LU#1およびLU#2に対するI/O要求は帯域上限に達しているとともに、LU#0に対するI/O要求は帯域上限を超えている。このため、LU#0は、処理性能不足の状態であり、LU#1およびLU#2は、いずれも処理性能不足ではないが処理性能に余裕がある状態でもない。したがって、従来、QoS設定範囲内において、処理性能不足のLU#0に対しLU#1,LU#2から性能融通を行なうことができない。
このような状態において、LU#0〜LU#2の属するRAIDグループの帯域幅に余裕があれば、図11に示すように、余裕のある帯域(未割当帯域)を処理性能不足のLU#0に融通することが望まれる。本実施形態では、処理性能に余裕のあるLUが無く融通先LU#0への処理性能の融通を行なえない際、融通先LU#0の属するRAIDグループに性能余裕があれば、RAIDグループにおけるQoS設定範囲以外の未割当帯域からミクロ性能融通が行なわれる。
〔2−4−1〕RAIDグループビジー率およびその増加分の算出手順
まず、ミクロ融通処理に先立ち、図6のステップS1041でビジー率算出部545によって行なわれる、RAIDグループビジー率Lの算出手順について、下記項目(A),(B)において図22〜図26を参照しながら説明する。
RAIDグループビジー率Lの基本的な算出手順では、RAIDグループに属する各ディスクドライブのビジー率が算出され、RAIDグループに属する全ディスクドライブのビジー率の平均値が、RAIDグループビジー率Lとして算出される。各ディスクドライブのビジー率の算出について下記項目(A)で説明し、RAIDグループビジー率Lの算出について下記項目(B)で説明する。各ディスクドライブのビジー率は、ディスクドライブ種別ごとの実力値(最大値)とされる性能値に基づき算出される。
そして、ミクロ融通処理中にビジー率算出部545によって行なわれるRAIDグループビジー率増加分の算出手順について、下記項目(C)において図27および図28を参照しながら説明する。RAIDグループビジー率増加分の算出処理は、図30のステップS417および図31のステップS424で実行される。
(A)ディスクドライブビジー率について
まず、ビジー率算出についての説明に際して用いられる、具体的な数値例を図22および図23に示す。図22は、本実施形態におけるディスクドライブのビジー率の算出に用いられる、平均スループット値(シーケンシャル性能値)と、当該スループット値が得られる際の平均レスポンス時間とを、ディスクドライブ種別ごとに示す図である。また、図23は、本実施形態におけるディスクドライブのビジー率の算出に用いられる、平均IOPS値(ランダム性能値)と当該平均IOPS値が得られる際の平均レスポンス時間とを、ディスクドライブ種別ごとに示す図である。
なお、図22〜図27におけるディスクドライブ種別は、SSD(Solid State Drive)、15K SAS、10K SAS、7.2K NL(nearline)−SAS、5.4K SATA(Serial Advanced Technology Attachment)の5種類である。
ここで、図22の上側4段には平均スループット値[MB/s]が示されている。そして、1段目および2段目には、それぞれ、シーケンシャルリードおよびシーケンシャルライトの平均スループット値の実力値(最大値)[MB/s]が示される。3段目および4段目には、それぞれ、ビジー率算出に用いられるリード使用値およびライト使用値[MB/s]が示される。リード使用値およびライト使用値としては、それぞれ、シーケンシャルリードおよびシーケンシャルライトの平均スループット値の実力値以下の値が設定される。図22の下側4段には、それぞれ、図22の上側4段に示される平均スループット値に対応する平均レスポンス時間[ms]が示されている。
また、図23の上側4段には平均IOPS値が示されている。そして、1段目および2段目には、それぞれ、ランダムリードおよびランダムライトの平均IOPS値の実力値(最大値)が示される。また、3段目および4段目には、それぞれ、ビジー率算出に用いられるリード使用値およびライト使用値[IOPS]が示される。リード使用値およびライト使用値としては、それぞれ、ランダムリードおよびランダムライトの平均IOPS値の実力値以下の値が設定される。図23の下側4段には、それぞれ、図23の上側4段に示される平均IOPS値に対応する平均レスポンス時間[ms]が示されている。
図22および図23に示すリード使用値やライト使用値に基づき、まず、図24に示すような最大リードブロック数,最大ライトブロック数,最大リードコマンド数,最大ライトコマンド数が、ディスクドライブ種別ごとに算出される。最大リードブロック数および最大ライトブロック数は、それぞれ、リードおよびライトのスループットを平均レスポンス時間で処理する場合の、平均実行中におけるブロック数であり、以下のように算出される。また、最大リードコマンド数および最大ライトコマンド数は、それぞれ、リードおよびライトのIOPSを平均レスポンス時間で処理する場合の、平均実行中におけるコマンド数であり、以下のように算出される。
[最大リードブロック数]=[シーケンシャルリードの1ms当たりのスループット値をブロック数に換算した値]×[シーケンシャルリードの平均レスポンス時間]
[最大ライトブロック数]=[シーケンシャルライトの1ms当たりのスループット値をブロック数に換算した値]×[シーケンシャルライトの平均レスポンス時間]
[最大リードコマンド数]=[ランダムリードの1ms当たりのコマンド数]×[ランダムリードの平均レスポンス時間]
[最大ライトコマンド数]=[ランダムライトの1ms当たりのコマンド数]×[ランダムライトの平均レスポンス時間]
例えば、SSDの最大リードブロック数は、以下のように算出される。つまり、シーケンシャルリードの1ms当たりのスループット値(リード使用値)は485/1000である。当該1ms当たりのスループット値485/1000をブロック数に換算すると、485/1000×2000となる。また、シーケンシャルリードの平均レスポンス時間(リード使用値)は9である。したがって、SSDの最大リードブロック数は、485/1000×2000×9=8730となる。
また、例えば、SSDの最大ライトコマンド数は、以下のように算出される。つまり、ランダムライトの1ms当たりのコマンド数(ライト使用値)は11170/1000である。また、ランダムライトの平均レスポンス時間(ライト使用値)は3である。したがって、SSDの最大ライトコマンド数は、11170/1000×3≒33となる。
なお、最大リードコマンド数や最大ライトコマンド数は、ディスクドライブのキュー数になる。本実施形態では、ディスクドライブ種別がSSD、15K SAS、10K SASである場合、最大リードコマンド数および最大ライトコマンド数の上限値として40が用いられてもよい。また、ディスクドライブ種別がNL−SAS、5.4K SATAである場合、最大リードコマンド数および最大ライトコマンド数の上限値として30が用いられてもよい。
そして、ビジー率算出部545は、各ディスクドライブのビジー率を算出するタイミングで、各ディスクドライブにおける以下の情報(1)〜(4)を取得する。
(1) 実行中のリードコマンド数
(2) 実行中のリードコマンドの全ブロック数
(3) 実行中のライトコマンド数
(4) 実行中のライトコマンドの全ブロック数
ついで、ビジー率算出部545は、上記情報(1)〜(4)のそれぞれについて、以下のようなビジー率情報(a)〜(d)を算出する。
(a) [リードブロック数からのビジー率]=[実行中リードブロック数(上記情報(2))]÷[最大リードブロック数(図24の1段目参照)]
(b) [ライトブロック数からのビジー率]=[実行中ライトブロック数(上記情報(4))]÷[最大ライトブロック数(図24の2段目参照)]
(c) [リードコマンド数からのビジー率]=[実行中リードコマンド数(上記情報(1))]÷[最大リードコマンド数(図24の3段目参照)])
(d) [ライトコマンド数からのビジー率]=[実行中ライトコマンド数(上記情報(3))]÷[最大ライトコマンド数(図24の4段目参照)]
ビジー率算出部545は、上述のようなビジー率情報(a)〜(d)の算出処理を、ミクロ性能融通チェック期間である例えば0.5秒の間において、Nミリ秒間隔で実施する。N=10の場合、50回分の算出結果の平均によってビジー率が求められ、求められたビジー率の値で性能融通の判断を行なうことができる。N=100の場合、5回分の算出結果の平均によってビジー率が求められ、求められたビジー率の値で性能融通の判断を行なうことができる。
ついで、ビジー率算出部545は、ミクロ性能融通チェック期間である例えば0.5秒間のシーケンシャル/ランダム比率情報(e)〜(l)を取得する。シーケンシャルは、例えば128ブロック以上のサイズのコマンドとし、ランダムは、例えば128ブロック未満のサイズのコマンドとする。ここで、取得される情報(e)〜(l)は、以下の通りである。
(e) シーケンシャルリードコマンド数(ブロックサイズが128以上)
(f) シーケンシャルライトコマンド数(ブロックサイズが128以上)
(g) ランダムリードコマンド数(ブロックサイズが128未満)
(h) ランダムライトコマンド数(ブロックサイズが128未満)
(i) シーケンシャルリードブロック数(ブロックサイズが128以上)
(j) シーケンシャルライトブロック数(ブロックサイズが128以上)
(k) ランダムリードブロック数(ブロックサイズが128未満)
(l) ランダムライトブロック数(ブロックサイズが128未満)
ビジー率算出部545は、ディスクドライブごとに、0.5秒間のディスクドライブビジー率を、下式によって算出する。
[ディスクドライブビジー率]=
(a)×((i)÷((i)+(j)+(k)+(l)))+(b)×((j)÷((i)+(j)+(k)+(l)))+
(c)×((g)÷((e)+(f)+(g)+(h)))+(d)×((h)÷((e)+(f)+(g)+(h)))
(B)RAIDグループビジー率について
上述のようにして、ディスクドライブごとにディスクドライブビジー率が算出されると、ビジー率算出部545は、算出されたディスクドライブビジー率に基づき、RAIDグループビジー率Lを算出する。
このとき、RAIDグループビジー率Lは、下式のように、当該RAIDグループを構成する全てのディスクドライブについて算出されたディスクドライブビジー率の平均値(平均ビジー率)とする。RAIDレベルごとの違いは全てのディスクドライブに対するコマンド数に反映されているため、RAIDレベルごとのビジー率の求め方に差異はないものとする。なお、以下では、RAIDグループを構成するディスクドライブのことを、「構成ディスクドライブ」という場合がある。
[RAIDグループビジー率L]=[RAIDグループを構成する全てのディスクドライブのそれぞれについて算出されたディスクドライブビジー率の和]÷[構成ディスクドライブの数]
なお、RAIDグループを構成する複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、ビジー率算出部545は、下式の通り、各ディスクドライブのビジー率に対し種別に応じた係数を乗算してRAIDグループビジー率Lを算出してもよい。RAIDグループの性能は、実力性能の低いディスクドライブの性能に依存するところが大きくなる。このため、係数は、図25においてディスクドライブ混在係数として示すように、ディスクドライブの性能が低くなるほど大きくなるよう設定されている。
[RAIDグループビジー率L]=
〔[RAIDグループを構成する全てのディスクドライブのそれぞれについて算出されたビジー率]×[各ディスクドライブの種別に応じたディスクドライブ混在係数]の和〕÷[各ディスクドライブのビジー率に乗じたディスクドライブ混在係数の和]
また、複数のRAIDグループが自動階層化プール(Flexible Tieredのプール)を構成する場合も、RAIDグループビジー率Lは、全RAIDグループに属する全ディスクドライブのビジー率の平均値として算出することができる。その際、高速なRAIDグループほど大きな重みを付与することが望ましい。このため、ビジー率算出部545は、下式の通り、各RAIDグループのビジー率に対し当該RAIDグループに属するディスクドライブの種別に応じた重み付け(重み係数の乗算)を行なってもよい。このとき、重み係数は、図26においてFlexible Tiered重み係数として示すように、ディスクドライブの処理速度が速くなるほど大きくなるように設定される。
[RAIDグループビジー率L]=
〔[各RAIDグループに属するディスクドライブの平均ビジー率]×[各RAIDグループに属するディスクドライブの種別に応じたFlexible Tiered重み係数]の和〕÷〔[各RAIDグループに属するディスクドライブの数]×[各RAIDグループに属するディスクドライブの種別に応じたFlexible Tiered重み係数]の和〕
上述のように、Flexible Tieredの場合、プールを構成する全RAIDグループの全ディスクドライブについて上記計算を行なうことで、RAIDグループビジー率Lが求められる。しかし、このとき、プールを構成するRAIDグループの管理を担当するCMが、CM200aとCM200bとの二つに分かれる場合が問題になる。基本的には、一方のCM側のみでビジー率を保持して当該一方のCM側で性能融通を可能にする。当該一方のCMとしては、最高速のRAIDグループを管理下にもつCMが選択され、該当するCMが無い場合、容量の大きい方のCMが選択される。ビジー率を保持しない方のCM(他方のCM)において性能融通は行なわれない。
(C)RAIDグループビジー率増加分について
次に、ビジー率算出部545によるビジー率増加分の換算等の手順について、図27および図28を参照しながら説明する。
本実施形態では、ミクロサイクル(例えば0.5秒)ごとにLU(ボリューム)ごとの性能融通が行なわれる。このとき、ビジー率Lが例えば所定値(例えば80%)未満のRAIDグループは、次のミクロサイクル向けに性能融通を受けることで、ビジー率Lが上昇することが予想される。また、ビジー率Lの上昇を考慮せずに、複数のLU(ボリューム)に対し性能融通を行なうと、ビジー率Lが一気に跳ね上がることが予想される。
そこで、本実施形態では、LUに対し性能融通を行なう際には、当該性能融通の量がビジー率Lをどれだけ上昇(増加)させるか、その増加分をビジー率算出部545によって算出しながら性能融通が行なわれる。融通先LUが複数存在する場合、優先順(例えば待ちユニット数の大きい順)に性能融通が行なわれる。その際、当該性能融通後のビジー率増加分をビジー率Lに反映することで、ビジー率Lが所定閾値を大きく超えるような性能融通の実行が抑止される。
以下、LUに対する性能融通量が、RAIDグループビジー率Lをどれほど増加させるか、そのビジー率増加分の換算手順について説明する。
まず、ビジー率算出部545は、RAIDグループの0.5秒の最大性能値を求める。シンプロビジョニング(thin provisioning)プールの場合、プールに含まれるRAIDグループごとに得られる最大性能値の和が求められる。また、Flexible Tieredのプールの場合、層ごとに得られる最大性能値にディスクドライブ種別の重み係数(図26参照)を乗算した値の和が求められる。
各ディスクドライブが0.5秒間に処理可能なブロック数およびコマンド数(最大性能値)としては、図27に示すような値が求められる。図27では、ディスクドライブ種別ごとに算出された「ブロック数/0.5秒」および「コマンド数/0.5秒」が示されている。ここでは、性能の低いライト動作から、最大性能値を求めている。
図27の例えばディスクドライブ種別「SSD」の欄においては、シーケンシャルライトの平均スループット値340 MB/s(図22のSSDのライト使用値参照)が記入されている。当該平均スループット値340に、2048と0.5とを乗算することにより、シーケンシャルライトの平均スループット値340は「ブロック数/0.5秒」の値348160に換算される。同様に、図27の例えばディスクドライブ種別「SSD」の欄においては、ランダムライトの平均IOPS値11170(図23のSSDのライト使用値参照)が記入されている。当該平均IOPS値11170に、0.5を乗算することにより、ランダムライトの平均IOPS値11170は「コマンド数/0.5秒」の値5585に換算される。
また、Volume 1I/O(LU 1I/O)に対するRAIDレベルごとのディスクドライブI/O数は、例えば図28に示す通りである。
上述のような各ディスクドライブの0.5秒間の最大性能値に基づき、RAIDグループの0.5秒間に処理可能なブロック数およびコマンド数は、通常、それぞれ下式(101), (102)のように算出される。ここでは、ディスクドライブの種別は同一であるとする。
[RAIDグループブロック数/0.5秒]=
[構成ディスクドライブのブロック数/0.5秒の和]×[RAIDレベルごとのディスクドライブI/O数] (101)
[RAIDグループコマンド数/0.5秒]=
[構成ディスクドライブのコマンド数/0.5秒の和]×[RAIDレベルごとのディスクドライブI/O数] (102)
また、RAIDグループを構成するディスクドライブの種別が異なる場合、RAIDグループの性能は、実力性能の低いディスクドライブの性能に依存するため、RAIDグループの0.5秒間に処理可能なブロック数およびコマンド数は、下式(103), (104)のように算出される。
[RAIDグループブロック数/0.5秒]=
[構成ディスクドライブのうち最も性能の低いディスクドライブのブロック数/0.5秒]×[構成ディスクドライブの数]×[RAIDレベルごとのディスクドライブI/O数] (103)
[RAIDグループコマンド数/0.5秒]=
[構成ディスクドライブのうち最も性能の低いディスクドライブのコマンド数/0.5秒]×[構成ディスクドライブの数]×[RAIDレベルごとのディスクドライブI/O数] (104)
また、Flexible Tieredのプールの場合、当該プールの性能は、下式(105), (106)のように、当該プールを構成する各RAIDグループの[ブロック数/0.5秒]または[コマンド数/0.5秒]に、ディスクドライブ種別ごとのFlexible Tiered重み係数(図26参照)を乗算した値の和として算出される。
[Flexible Tieredプールブロック数/0.5秒]=
〔[プールを構成するRAIDグループのブロック数/0.5秒]×[RAIDレベルごとのディスクドライブI/O数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]〕の和 (105)
[Flexible Tieredプールコマンド数/0.5秒]=
〔[プールを構成するRAIDグループのコマンド数/0.5秒]×[RAIDレベルごとのディスクドライブI/O数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]〕の和 (106)
そして、本実施形態において、ビジー率算出部545は、下式(107), (108)のごとく、性能融通によるRAIDグループのビジー率増加分を、以下の分母および分子をもつ分数の値として算出する。つまり、分母は、上式(101)〜(104)のように算出された、0.5秒当たりのRAIDグループブロック数あるいは0.5秒当たりのRAIDグループコマンド数とする。また、分子には、性能融通を受けるブロック数あるいはコマンド数(性能融通量)に、RAIDレベルごとのディスクドライブI/O数を乗算した値が使用される。
[RAIDグループビジー率増加分]=
〔[融通ブロック数]×[RAIDレベルごとのディスクドライブI/O数]÷[RAIDグループブロック数/0.5秒]〕と
〔[融通コマンド数]×[RAIDレベルごとのディスクドライブI/O数]÷[RAIDグループコマンド数/0.5秒]〕と
で大きい方の値 (107)
また、Flexible Tieredのプールの場合、性能融通によるRAIDグループのビジー率増加分は、下式(108)のように算出される。
[RAIDグループビジー率増加分]=
〔[融通ブロック数]×[RAIDレベルごとのディスクドライブI/O数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]÷[RAIDグループブロック数/0.5秒]〕と
〔[融通コマンド数]×[RAIDレベルごとのディスクドライブI/O数]×[ディスクドライブ種別ごとのFlexible Tiered重み係数]÷[RAIDグループコマンド数/0.5秒]〕と
で大きい方の値 (108)
〔2−4−2〕ミクロ融通処理の詳細
次に、図29〜図31に示すフローチャート(ステップS401〜S424)に従って、本実施形態のミクロ融通処理部540(第4判定部541および融通処理部542)によって実行されるミクロ融通処理(図6のステップS1042)の処理手順について説明する。ミクロ融通処理は、図6に示すNミリ秒タイマスケジュール処理がNミリ秒毎に実行される中で、1ミクロサイクル(例えば0.5秒=500ミリ秒)毎に、スケジュール部506によるQoS I/O起動スケジュール処理前に実行される。なお、図29にはステップS401〜S407の処理が示され、図30にはステップS408〜S417の処理が示され、図31にはステップS418〜S424の処理が示されている。
図11に示すように、ミクロ融通処理部540は、0.5秒毎に起動されると、まず、各RAIDグループについて、テーブル域214のRAIDグループ融通ユニット数NKをクリアして0にする(ステップS401)。また、ミクロ融通処理部540は、各LUについて、QoS制御域213の融通フラグFMICINおよびFMICOUTをクリアしてオフ状態にする(ステップS402)。また、ミクロ融通処理部540は、各LUについて、QoS制御域213のミクロ融通ユニット数NHをクリアして0にする(ステップS403)。これにより、前回のミクロ性能融通に係る情報が全てクリアされる。従って、ミクロ融通ユニット数NHの値に応じた融通量でのミクロ性能融通は、1回(1ミクロサイクル)だけ実行される。
この後、第4判定部541は、LU毎に、当該LU(対象LU)について、待ち状態のI/O要求が有るか否かを判定する(ステップS404)。そして、待ち状態のI/O要求が有る場合(ステップS404のYESルート)、第5判定部544が、対象LU(融通先LU)を含むRAIDグループにおける性能余裕の有無を判定する(ステップS405)。このとき、第5判定部544は、ビジー率算出部545によって算出されテーブル域214に保存される、当該RAIDグループについてのビジー率Lが所定値(例えば80%)以上であるか否かを判定する。
当該RAIDグループについてのビジー率Lが所定値未満である場合(ステップS405のNOルート)、当該RAIDグループに性能余裕が有ると判定され、融通処理部542は、今回の対象LUを、待ちLU配列(リスト)の適切な位置に挿入する(ステップS406)。待ちLU配列は、待ち状態のI/O要求をもつ融通先LUを、優先度の高い順に配列してから、待ち状態のI/O要求量(待ちユニット数)の大きい順に配列したものである。待ちユニット数は、QoS制御域213の待ちI/O数NCおよび待ちブロック数NDから換算される。ミクロ性能融通用の待ちLU配列(リスト)は、例えばQoS制御域213内に作成され、LUを特定するLUNと当該LUにおける待ちユニット数とを対応付けて保存している。なお、本実施形態において、ミクロ性能融通での「1サイクルでの融通LU数」は、例えば、4LUとしているので、待ちLU配列における要素数は4で十分である。
ステップS406の処理後、もしくは、対象LUに対するI/O要求が無い場合(ステップS404のNOルート)、もしくは、ビジー率Lが所定値以上で当該RAIDグループに性能余裕が無いと判定された場合(ステップS405のYESルート)、融通処理部542は、ステップS407の処理を行なう。つまり、融通処理部542は、全てのLUについて待ち状態のI/O要求の有無の判定を行なったか否かを判定する(ステップS407)。全てのLUについて待ち状態のI/Oの有無の判定を行なっていない場合(ステップS407のNOルート)、ミクロ融通処理部540は、ステップS402の処理に戻る。一方、全てのLUについて待ちユニット数の判定を行なった場合(ステップS407のYESルート)、融通処理部542は、ミクロ性能融通用の待ちLU配列に待ちLUが存在するか否かを判定する(ステップS408)。
待ちLU配列に待ちLUが存在する場合(ステップS408のYESルート)、融通処理部542は、対象LUを、余りLU配列(リスト)の適切な位置に挿入する(ステップS409)。余りLU配列は、性能余裕をもつ融通元LUを、性能余裕量(余りユニット数)の大きい順に配列したものである。ミクロ性能融通用の余りLU配列(リスト)は、例えばQoS制御域213内に作成され、LUを特定するLUNと当該LUにおける余りユニット数とを対応付けて保存している。対象LUの余りユニット数としては、QoS制御域213に保存される余りユニット数NIが読み出されて用いられる。
この後、融通処理部542は、ミクロ性能融通用の余りLU配列に余りLUが存在するか否かを判定する(ステップS410)。余りLU配列に余りLUが存在する場合(ステップS410のYESルート)、融通処理部542は、待ちLU配列および余りLU配列に基づき、全ての余りユニット数(合計値)を待ちLUで分配し各待ちLUに対するミクロ融通ユニット数NHを決定する(ステップS411)。
そして、融通処理部542は、待ちユニットの有無を確認する(ステップS412)。待ちユニットが有る場合(ステップS412のYESルート)、ステップS405と同様、第5判定部544が、対象LU(融通先LU)を含むRAIDグループにおける性能余裕の有無を判定する(ステップS413)。当該RAIDグループについてのビジー率Lが所定値以上で当該RAIDグループに性能余裕が無いと判定された場合(ステップS413のYESルート)、融通処理部542は、ステップS412の処理に戻る。
一方、当該RAIDグループについてのビジー率Lが所定値未満である場合(ステップS413のNOルート)、当該RAIDグループに性能余裕が有ると判定され、融通処理部542は、余りLUから待ちLUへのミクロ性能融通を行なうべく、ステップS414の処理を行なう。つまり、融通処理部542は、性能融通を受ける待ちLUのQoS制御域213において、余りLUから融通されるミクロ融通ユニット数NHを設定するとともに、当該待ちLUがミクロ性能融通を受けることを示す融通フラグFMICINをオンに設定する。また、融通処理部542は、決定された組合せの余りLUのQoS制御域213において、待ちLUに融通するミクロ融通ユニット数NHを設定するとともに、当該余りLUがミクロ性能融通を行なっていることを示す融通フラグFMICOUTをオンに設定する(ステップS414)。なお、性能融通により待ち状態や余り状態を解消されうる待ちLUや余りLUについては、待ちLU配列や余りLU配列から削除される。
また、融通処理部542は、ミクロ性能融通を行なう待ちLUと余りLUとの組合せを一組でも決定すると、QoS制御域213のミクロ融通有フラグをオンに設定し(ステップS415)、ミクロ性能融通を行なう旨を融通後処理部543に通知する。そして、融通処理部542は、性能融通を受ける待ちLUが属するRAIDグループの融通ユニット数NK(テーブル域214)に、ステップS411で決定されたミクロ融通ユニット数NHを加算する(ステップS416)。
さらに、ビジー率算出部545は、ステップS411で決定されたミクロ融通ユニット数NH(性能融通量)を、RAIDグループビジー率Lの増加分(ビジー率増加分)に換算する。その換算手法は、上記項目(C)で説明した通りである。ビジー率算出部545は、換算したビジー率増加分を、テーブル域214における、性能融通対象の待ちLUの属するRAIDグループについてのビジー率Lに加算する(ステップS417)。この後、ミクロ融通処理部540は、ステップS412の処理に戻る。
ステップS408,S410,S412のそれぞれにおいてNO判定となった場合、融通処理部542は、待ちユニットが存在するか、あるいは、さらに性能不足のLUが存在するを判定する(ステップS418)。待ちユニットや性能不足LUが存在しない場合(ステップS418のNOルート)、ミクロ融通処理部540は、ミクロ融通処理を完了する。
一方、待ちユニットや性能不足LUが存在する場合、融通先LUに対するミクロ性能融通を行なうことのできる余りLUが存在しない状態になっているものと考えられる。このような状態になった際、本実施形態では、待ちLU(性能不足LU)の属するRAIDグループに性能余裕があれば、RAIDグループにおけるLU用帯域以外の未割当帯域からミクロ性能融通が行なわれる。
そこで、本実施形態では、待ちユニットや性能不足LUが存在する場合(ステップS418のYESルート)、ステップS405と同様、第5判定部544が、待ちLU(待ちユニット)を含むRAIDグループにおける性能余裕の有無を判定する(ステップS419)。当該RAIDグループについてのビジー率Lが所定値以上で当該RAIDグループに性能余裕が無いと判定された場合(ステップS419のYESルート)、融通処理部542は、ステップS418の処理に戻る。
一方、当該RAIDグループについてのビジー率Lが所定値未満である場合(ステップS419のNOルート)、当該RAIDグループに性能余裕が有ると判定される。そして、融通処理部542は、RAIDグループにおけるLU用帯域以外の未割当帯域(性能余裕のある帯域)から、待ちLUへのミクロ性能融通を行なうべく、ステップS420,S421の処理を行なう。
このとき、融通処理部542は、RAIDグループの未割当帯域から待ちLUへ融通するミクロ融通ユニット数NHを、上述する4つのパターンのうちの一つによって決定する(ステップS420)。そして、融通処理部542は、性能融通を受ける待ちLUのQoS制御域213において、余りLUから融通されるミクロ融通ユニット数NHを設定するとともに、当該待ちLUがミクロ性能融通を受けることを示す融通フラグFMICINをオンに設定する(ステップS421)。なお、性能融通により待ち状態を解消されうる待ちLUについては、待ちLU配列から削除される。
また、融通処理部542は、QoS制御域213のミクロ融通有フラグをオンに設定し(ステップS422)、ミクロ性能融通を行なう旨を融通後処理部543に通知する。そして、融通処理部542は、性能融通を受ける待ちLUが属するRAIDグループの融通ユニット数NK(テーブル域214)に、ステップS420で決定されたミクロ融通ユニット数NHを加算する(ステップS423)。
さらに、ステップS417と同様、ビジー率算出部545は、ステップS420で決定されたミクロ融通ユニット数NHを、RAIDグループビジー率Lの増加分(ビジー率増加分)に換算する。そして、ビジー率算出部545は、換算したビジー率増加分を、テーブル域214における、性能融通対象の待ちLUの属するRAIDグループについてのビジー率Lに加算する(ステップS424)。この後、ミクロ融通処理部540は、ステップS418の処理に戻る。
〔2−5〕ミクロ融通後処理
次に、図12に示すフローチャート(ステップS501〜S507)に従って、本実施形態の融通後処理部543によって実行されるミクロ融通後処理(図6のステップS111)の処理手順について説明する。ミクロ融通後処理は、図6に示すNミリ秒タイマスケジュール処理がNミリ秒毎に実行される中で、1ミクロサイクル(0.5秒)毎に、スケジュール部506によるQoS I/O起動スケジュール処理後に実行される。特に、ミクロ融通後処理は、図6に示すように、QoS I/O起動スケジュール処理およびマクロ融通処理が実行され、1秒毎のQoSカウントがクリアされた後の、Nミリ秒タイマスケジュール処理の最終ステップS111で実行される。
図12に示すように、融通後処理部543は、まず、QoS制御域213のミクロ融通有フラグがオンであるか否かを判定する(ステップS501)。ミクロ融通有フラグがオフである場合(ステップS501のNOルート)、融通後処理部543は、何ら処理を行なうことなく、ミクロ融通後処理を完了する。
ミクロ融通有フラグがオンである場合(ステップS501のYESルート)、融通後処理部543はQoS制御域213のミクロ融通有フラグをオフに設定する(ミクロ融通有設定クリア後;ステップS502)。この後、融通後処理部543は、各LUについて、融通フラグFMICINがオンであるか否かを判定する(ステップS503)。
融通フラグFMICINがオンである場合(ステップS503のYESルート)、即ち対象LUが待ちLUである場合、融通後処理部543は、当該LUの限界I/O数にミクロ融通ユニット数NH分のI/O数を加算する。また、融通後処理部543は、当該LUの限界ブロック数にミクロ融通ユニット数NH分のブロック数を加算する(ステップS504)。
ステップS504の処理後、もしくは、融通フラグFMICINがオフである場合(ステップS503のNOルート)、融通後処理部543は、各LUについて、下記所定の判定条件を満たしているか否かを判定する(ステップS505)。ここで、所定の判定条件は、対象LUの融通フラグFMICOUTがオンで、且つ、今回のタイミングが1秒毎のQoSカウントクリア後ではないという条件である。
所定の判定条件を満たす場合(ステップS505のYESルート)、即ち今回のタイミングが1秒毎のQoSカウントクリア後ではなく且つ対象LUが余りLUである場合、融通後処理部543は、以下の減算処理を行なう(ステップS506)。つまり、融通後処理部543は、当該LUの限界I/O数からミクロ融通ユニット数NH分のI/O数を減算するとともに、当該LUの限界ブロック数からミクロ融通ユニット数NH分のブロック数を減算する。
所定の判定条件を満たさない場合(ステップS505のNOルート)、つまり対象LUの融通フラグFMICOUTがオフ、または、今回のタイミングが1秒毎のQoSカウントクリア後である場合、融通後処理部543は、ステップS506の減算処理を行なうことなくステップS507の処理に移行する。今回のタイミングが1秒毎のQoSカウントクリア後である場合、QoSカウントがクリアされているため、減算処理を行なう必要が無いからである。
ステップS506の処理後、もしくは、ステップS505でNO判定後、融通後処理部543は、判定対象のLUがまだ有るか否か判定する(ステップS507)。判定対象のLUがまだ有る場合(ステップS507のYESルート)、融通後処理部543は、ステップS503の処理に戻る。判定対象のLUが無い場合(ステップS507のNOルート)、融通後処理部543は、ミクロ融通後処理を完了する。
〔2−6〕マクロ融通1秒チェック処理
次に、図13に示すフローチャート(ステップS601〜S608)に従って、本実施形態のマクロ融通チェック部510によって実行されるマクロ融通1秒チェック処理(図6のステップS105)の処理手順について説明する。マクロ融通1秒チェック処理では、第1判定部521および第2判定部522によりマクロ性能融通を実行するか否かを判定するために必要な情報である、最小余りユニット数NEおよび最小待ちユニット数NFが取得される。マクロ融通1秒チェック処理は、図6に示すNミリ秒タイマスケジュール処理がNミリ秒毎に実行される中で、例えば1秒毎に実行される。
図13に示すように、マクロ融通チェック部510は、まず、復帰値のデフォルト値として“FALSE”をQoS制御域213等に記憶させる(ステップS601)。ここで、復帰値“FALSE”は、マクロ性能融通による融通量を復帰させる融通復旧LUが存在しないことを示す情報である。この後、マクロ融通チェック部510は、各LUについて、以下の処理(ステップS602〜S608)を実行する。
マクロ融通チェック部510は、対象LUの融通フラグFOUTがオンで、且つ、対象LUに待ちI/Oがあるか否か、つまり、対象LUが、融通元LUでありながら処理性能不足の生じた融通復旧LUであるか否かを判定する(ステップS602)。
対象LUが融通復旧LUである場合(ステップS602のYESルート)、マクロ融通チェック部510は、復帰値として“TRUE”をQoS制御域213等に記憶させる(ステップS608)。ここで、復帰値“TRUE”は、融通復旧LUが存在することを示す情報である。この後、マクロ融通チェック部510は、ステップS607の処理に移行する。
対象LUが融通復旧LUでない場合(ステップS602のNOルート)、第2取得部512は、当該LUの現在の余りユニット数NIを取得する。各LUの余りユニット数NIは、QoS制御域213に保存される各LUの余りユニット数NIを参照することで取得される。そして、第2取得部512は、今回取得した余りユニット数NIと、QoS制御域213に保存されている値(現時点までの最小余りユニット数)NEとを比較する(ステップS603)。
今回取得した余りユニット数NIが値NEよりも小さい場合(ステップS603のYESルート)、第2取得部512は、値NEを今回取得した余りユニット数NIに置き換える(ステップS604)。
ステップS604の処理後、もしくは、今回取得した余りユニット数NIが値NE以上である場合(ステップS603のNOルート)、第1取得部511は、当該LUの現在の待ちユニット数を取得する。各LUの待ちユニット数は、上述したように対象LUの待ちI/O数NCおよび待ちブロック数NDから換算される。そして、第1取得部511は、今回取得した待ちユニット数と、QoS制御域213に保存されている値(現時点までの最小待ちユニット数)NFとを比較する(ステップS605)。
今回取得した待ちユニット数が値NFよりも小さい場合(ステップS605のYESルート)、第1取得部511は、値NFを、今回取得した待ちユニット数に置き換える(ステップS606)。
ステップS606やS608の処理後、または、今回取得した待ちユニット数が値NF以上である場合(ステップS605のNOルート)、マクロ融通チェック部510は、全てのLUについてマクロ融通1秒チェック処理を終了したか否か判定する(ステップS607)。全てのLUについてチェック処理を終了していない場合(ステップS607のNOルート)、マクロ融通チェック部510は、ステップS602の処理に戻る。全てのLUについてチェック処理を終了した場合(ステップS607のYESルート)、マクロ融通チェック部510は、マクロ融通1秒チェック処理を完了する。
以上のようなマクロ融通1秒チェック処理を、1マクロサイクル(30秒)の間、1秒毎に実行することで、最終的にQoS制御域213に保存されている値NEが、1マクロサイクル中の最小余りユニット数NEとなる。また、同様に、最終的にQoS制御域213に保存されている値NFが、1マクロサイクル中の最小待ちユニット数NFとなる。なお、ステップS603およびS604の処理と、ステップS605およびS606の処理とは、逆の順序で実行されてもよい。
〔2−7〕マクロ融通処理
次に、図14および図15に示すフローチャート(ステップS701〜S713)に従って、本実施形態のマクロ融通処理部520によって実行されるマクロ融通処理(図6のステップS109)の処理手順について説明する。マクロ融通処理は、図6に示すNミリ秒タイマスケジュール処理がNミリ秒毎に実行される中で、1マクロサイクル(例えば30秒)毎に、スケジュール部506によるQoS I/O起動スケジュール処理後に起動される。マクロ融通処理では、QoS I/O起動スケジュール後に、1マクロサイクル毎のタイミングで、連続的に処理性能に余裕のあるLUから連続的に処理性能が不足しているLUにマクロ性能融通が行なわれる。
まず、第1判定部521は、各LUについて、当該LUの最小待ちユニット数NFが0以外の値で、且つ、当該LUの融通フラグFINMAXがオフであるかを判定する(ステップS701)。ここで、当該LUの最小待ちユニット数NFが0以外の値である場合、当該LUは、1マクロサイクルにおける一秒刻みのタイミングでは、常に待ち状態である。したがって、当該LUは、1マクロサイクルに亘って処理性能不足の状態であるとみなせ、本実施形態では、上記「融通を受ける条件」を満たしているものと判断される。ただし、当該LUの融通フラグFINMAXがオンである場合、当該LUにおいては、他のLUから受けているマクロ性能融通の融通量が上限に到達しており、マクロ性能融通を行なうことができない。そこで、本実施形態では、各LUについて、当該LUの最小待ちユニット数NFが0以外の値で、且つ、当該LUの融通フラグFINMAXがオフであるかが判定されている。
当該LUの最小待ちユニット数NFが0以外の値で、且つ、当該LUの融通フラグFINMAXがオフである場合(ステップS701のYESルート)、第1判定部521は、今回の対象LUの最小待ちユニット数NFを、待ちユニット数の大きい順に並べた待ちユニット配列の適切な箇所に挿入する(ステップS702)。マクロ性能融通用の待ちユニット配列は、例えばQoS制御域213内に作成され、LUを特定するLUNと当該LUにおける最小待ちユニット数NFとを対応付けて保存している。なお、本実施形態において、マクロ性能融通での「1サイクルでの融通LU数」は、例えば、4LUとしているので、待ちユニット配列における要素数は4で十分である。
ステップS702の処理後、もしくは、当該LUの最小待ちユニット数NFが0又は当該LUの融通フラグFINMAXがオンである場合(ステップS701のNOルート)、第1判定部521は、全てのLUについて最小待ちユニット数NFの判定を行なったか否かを判定する(ステップS703)。全てのLUについて待ちユニット数の判定を行なっていない場合(ステップS703のNOルート)、第1判定部521は、ステップS701の処理に戻る。全てのLUについて待ちユニット数の判定を行なった場合(ステップS703のYESルート)、マクロ融通処理部520は、マクロ性能融通用の待ちユニット配列に待ちユニットが存在するか否かを判定する(ステップS704)。マクロ性能融通用の待ちユニット配列に待ちユニットが存在しない場合(ステップS704のNOルート)、マクロ融通処理部520は、マクロ融通処理を完了する。
マクロ性能融通用待ちユニット配列に待ちユニットが存在する場合(ステップS704のYESルート)、第2判定部522は、各LUについて、当該LUの最小余りユニット数NEが0以外の値で、且つ、当該LUの融通フラグFOUTMAXがオフであるかを判定する(ステップS705)。ここで、当該LUの最小余りユニット数NEが0以外の値である場合、当該LUは、1マクロサイクルにおける一秒刻みのタイミングでは、常に余り状態である。したがって、当該LUは、1マクロサイクルに亘って処理性能に余裕のある状態であるとみなせ、本実施形態では、上記「融通する条件」を満たしているものと判断される。ただし、当該LUの融通フラグFOUTMAXがオンである場合、当該LUにおいては、他のLUに対するマクロ性能融通の融通量が下限に到達しており、マクロ性能融通を行なうことができない。そこで、本実施形態では、各LUについて、当該LUの最小余りユニット数NEが0以外の値で、且つ、当該LUの融通フラグFOUTMAXがオフであるかが判定されている。
当該LUの最小余りユニット数NEが0以外の値で、且つ、当該LUの融通フラグFOUTMAXがオフである場合(ステップS705のYESルート)、第2判定部522は、今回の対象LUの最小余りユニット数NEを、余りユニット数の大きい順に並べた余りユニット配列の適切な箇所に挿入する(ステップS706)。マクロ性能融通用の余りユニット配列は、例えばQoS制御域213内に作成され、LUを特定するLUNと当該LUにおける最小余りユニット数NEとを対応付けて保存している。なお、本実施形態において、マクロ性能融通での「1サイクルでの融通LU数」は、例えば、4LUとしているので、余りユニット配列における要素数は4で十分である。
ステップS706の処理後、もしくは、当該LUの最小余りユニット数NEが0又は当該LUの融通フラグFOUTMAXがオンである場合(ステップS705のNOルート)、第2判定部522は、全てのLUについて最小余りユニット数NEの判定を行なったか否かを判定する(ステップS707)。全てのLUについて待ちユニット数の判定を行なっていない場合(ステップS707のNOルート)、第2判定部522は、ステップS705の処理に戻る。
全てのLUについて待ちユニット数の判定を行なった場合(ステップS707のYESルート)、マクロ融通処理部520は、待ちユニット配列の要素[i]が0であるか、あるいは、余りユニット配列の要素[i]が0であるかを判定する(ステップS708)。待ちユニット配列の要素[i]が0、または、余りユニット配列の要素[i]が0である場合(ステップS708のYESルート)、マクロ融通処理部520は、マクロ融通処理を完了する。
待ちユニット配列の要素[i]も余りユニット配列の要素[i]も0でない場合(ステップS708のNOルート)、マクロ融通処理部520(変更部523)は、以下の処理(ステップS709〜S713)を実行する。ここでは、待ちユニット配列のi番目の要素[i]に係る融通先LUと、余りユニット配列のi番目の要素[i]に係る融通元LUとを、マクロ性能融通を行なう一つの組合せとする。本実施形態において、各配列の要素数は4としているので、iは、例えば0,1,2,3とする。また、ステップS708〜S713の処理は、各配列の待ちユニット数または余りユニット数の大きい順に実行される。
なお、ステップS709〜S713の処理のうち、ステップS709の処理は、融通先LUのQoS制御域213を対象としている。また、ステップS709〜S713の処理のうち、ステップS710〜S712の処理は、融通元LUのQoS制御域213を対象としている。
変更部523は、待ちユニット配列のi番目の融通先LUに係る、QoS制御域213における性能融通情報を、以下のように設定・変更する(ステップS709)。つまり、変更部523は、i番目の融通先LUの融通フラグFINをオンに設定する。また、変更部523は、i番目の融通先LUの融通ユニット数NBを1インクリメントする。これにより、融通先LUについて算出される性能制限値に、1ユニット分に対応する値(例えば5MB/s,60IOPS)が加算される(図7のステップS123参照)。さらに、変更部523は、融通ユニット数NBを1インクリメントすることで他のLUからの融通量が上限に到達した場合、融通フラグFINMAXをオンに設定する。
そして、変更部523は、余りユニット配列のi番目の融通元LUの融通フラグFINがオンであるか否かを判定する(ステップS710)。融通フラグFINがオンである場合(ステップS710のYESルート)、i番目の融通元LUは、処理性能に余裕があるにもかかわらず他のLUから性能融通を受けているものと考えられる。そこで、変更部523は、余りユニット配列のi番目の融通元LUに係る、QoS制御域213における性能融通情報を、以下のように設定・変更する(ステップS711)。
つまり、変更部523は、i番目の融通元LUの融通ユニット数NBを1デクリメントする。これにより、融通元LUについて算出される性能制限値から、1ユニット分に対応する値(例えば5MB/s,60IOPS)が減算されることになる(図7のステップS123参照)。また、i番目の融通元LUの融通フラグFINMAXがオンである場合、即ち他のLUからの融通量が上限に到達していた場合、変更部523は、i番目の融通元LUの融通フラグFINMAXをオフに設定する。さらに、融通ユニット数NBを1デクリメントすることで融通ユニット数NBが0になった場合、i番目の融通元LUが他のLUから受ける融通量は0となるので、変更部523は、i番目の融通元LUの融通フラグFINをオフに設定する。
i番目の融通元LUの融通フラグFINがオフである場合(ステップS710のNOルート)、変更部523は、i番目の融通元LUに係る、QoS制御域213における性能融通情報を、以下のように設定・変更する(ステップS712)。つまり、変更部523は、i番目の融通元LUの融通フラグFOUTをオンに設定する。また、変更部523は、i番目の融通元LUの融通ユニット数NBを1インクリメントする。これにより、融通元LUについて算出される性能制限値から、1ユニット分に対応する値(例えば5MB/s,60IOPS)が減算される(図7のステップS125参照)。さらに、変更部523は、融通ユニット数NBを1インクリメントすることで、他のLUへの融通量が上限に到達した場合、融通フラグFOUTMAXをオンに設定する。
ステップS711またはS712の処理後、マクロ融通処理部520は、マクロ性能融通用の待ちユニット配列に、次の要素[i]があるか否かを判定する(ステップS713)。次の要素[i]がある場合(ステップS713のYESルート)、マクロ融通処理部520は、ステップS708の処理に戻る。次の要素[i]がない場合(ステップS713のNOルート)、マクロ融通処理部520は、マクロ融通処理を完了する。
〔2−8〕マクロ融通復旧処理
次に、図16および図17に示すフローチャート(ステップS801〜S818)に従って、本実施形態の復旧処理部532によって実行されるマクロ融通復旧処理(図6のステップS107)の処理手順について説明する。マクロ融通復旧処理は、図6に示すNミリ秒タイマスケジュール処理がNミリ秒毎に実行される中で、他のLUへ性能を融通しているLUで性能不足を検出した場合(図6のステップS106のYESルート)、当該LUの性能を元の設定性能に戻すために実行される。つまり、マクロ融通復旧処理では、融通復旧LUが他のLUに融通した処理量が、融通先LUから融通復旧LUに復帰される。その際、復旧処理部532は、融通先LUに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を融通先LUから融通復旧LUに復帰させる。
復旧処理部532は、まず、融通復旧LUが存在するか否かを確認する(ステップS801)。融通復旧LUが存在しない場合(ステップS801のNOルート)、復旧処理部532は、マクロ融通復旧処理を完了する。
融通復旧LUが存在する場合(ステップS801のYESルート)、復旧処理部532は、各LUについて、以下の処理(ステップS802〜S805)を実行する。復旧処理部532は、対象LUの融通フラグFINがオンであるか否か、つまり対象LUが融通先LUであるか否かを判定する(ステップS802)。
対象LUが融通先LUである場合(ステップS802のYESルート)、復旧処理部532は、今回の対象LUの融通ユニット数NBを、融通ユニット数NBの大きい順に並べた融通先ユニット配列の適切な箇所に挿入する(ステップS803)。併せて、復旧処理部532は、融通先LUを特定するLUNと、融通先LUに係るホストを特定する番号とを対応付ける配列も作成する(ステップS804)。LU/ホスト番号配列を含む融通先ユニット配列は、例えばQoS制御域213内に作成され、融通先LUを特定するLUNと当該LUにおける融通ユニット数NBとを対応付けて保存している。なお、融通先ユニット配列(LUN/ホスト番号配列)の一例については、図18を参照しながら後述する。また、融通先ユニット配列における要素数は、例えば15である。対象が「ポートとLUNとの組合せ」である場合、復旧処理部532は、ステップS804において、融通先LUを特定するLUNと、融通先LUに係るポートを特定する情報とを対応付ける配列も作成する。
ステップS804の処理後、もしくは、対象LUが融通先LUでない場合(ステップS802のNOルート)、復旧処理部532は、全てのLUについて融通フラグFIN の判定を行なったか否かを判定する(ステップS805)。全てのLUについて融通フラグFIN の判定を行なっていない場合(ステップS805のNOルート)、復旧処理部532は、ステップS802の処理に戻る。全てのLUについて融通フラグFINの判定を行なった
場合(ステップS805のYESルート)、復旧処理部532は、ステップS803,S804で作成された融通先ユニット配列を参照しながら、以下の処理(ステップS806〜S818)を実行する。これにより、復旧処理部532は、融通先LUに対し融通された処理量の残量が均等もしくはほぼ均等になるように、当該処理量を融通先LUから融通復旧LUに復帰させる。
復旧処理部532による以下の処理を実行するに際し、融通復旧LUに復旧させるべきユニット数(必要ユニット数)をA、復旧残りユニット数をRとする。復旧残りユニット数Rの初期値は、必要ユニット数Aである。また、融通先ユニット配列数(融通先ユニット配列の要素数)をM、配列内ユニット数をX0,X1,X2,…,XM-1(ただしX0≧X1≧X2≧…≧XM-1)、配列内LUをL0,L1,L2,…,LM-1とする(ステップS806)。
そして、復旧処理部532は、i=0としてから(ステップS807)、復旧残りユニット数Rが(Xi−Xi+1)×(i+1)以下であるか否かを判定する(ステップS808)。復旧残りユニット数Rが(Xi−Xi+1)×(i+1)よりも大きい場合(ステップS808のNOルート)、復旧処理部532は、QoS制御域213において、配列内LUのL0からLiまでの融通ユニット数NBから、(Xi−Xi+1)を減算する。このとき、L0〜Liのそれぞれの融通フラグFINMAXがオンであれば、復旧処理部532は、融通フラグFINMAXをオフに設定する。そして、復旧処理部532は、復旧残りユニット数RをR−(Xi−Xi+1)×(i+1)に置き換える(ステップS809)。この後、復旧処理部532は、iをi+1にインクリメントしてから(ステップS810)、iがM−1と一致するか否かを判定する(ステップS811)。iがM−1と一致しない場合(ステップS811のNOルート)、復旧処理部532は、ステップS808の処理に戻る。
一方、復旧残りユニット数Rが(Xi−Xi+1)×(i+1)以下である場合(ステップS808のYESルート)、復旧処理部532は、以下の処理(ステップS812)を実行する。つまり、復旧処理部532は、復旧残りユニット数Rを(i+1)個以内の整数値に分割する。そして、復旧処理部532は、QoS制御域213において、配列内LUのL0からLiまでの融通ユニット数NBから、分割して得られた整数値を減算する。このとき、L0〜Liのそれぞれの融通フラグFINMAXがオンであれば、復旧処理部532は、融通フラグFINMAXをオフに設定する。そして、復旧処理部532は、融通ユニット数NBの減算処理に伴い融通ユニット数NBが0になった場合、融通フラグFINをオフに設定する。そして、復旧処理部532は、復旧残りユニット数Rを0に置き換える。
ステップS812の処理後、もしくは、iがM−1と一致した場合(ステップS811のYESルート)、復旧処理部532は、復旧残りユニット数Rが0と一致しているか否かを判定する(ステップS813)。復旧残りユニット数Rが0でない場合(ステップS813のNOルート)、復旧処理部532は、融通フラグFINがオンの全LUの中から、LUNの最も若いLUを選択する(ステップS814)。この後、復旧処理部532は、復旧残りユニット数Rが、選択したLUの融通ユニット数NB以下であるか否かを判定する(ステップS815)。
復旧残りユニット数Rが融通ユニット数NBよりも大きい場合(ステップS815のNOルート)、復旧処理部532は、復旧残りユニット数Rを、Rから融通ユニット数NBを減算した値に置き換える。また、復旧処理部532は、QoS制御域213において、選択したLUの融通ユニット数NBを0に設定する。さらに、選択したLUの融通フラグFINMAXがオンであれば、復旧処理部532は、融通フラグFINMAXをオフに設定する。そして、復旧処理部532は、融通フラグFINをオフに設定する(ステップS816)。
ステップS816の処理後、復旧処理部532は、ステップS814に戻り、融通フラグFINがオンの全LUの中から、LUNが次に若いLUを選択し、同様の処理(ステップS815,S816)を実行する。
復旧残りユニット数Rが融通ユニット数NB以下である場合(ステップS815のYESルート)、復旧処理部532は、QoS制御域213において、選択したLUの融通ユニット数NBから、復旧残りユニット数Rを減算する。また、選択したLUの融通フラグFINMAXがオンであれば、復旧処理部532は、融通フラグFINMAXをオフに設定する。さらに、復旧処理部532は、融通ユニット数NBの減算処理に伴い融通ユニット数NBが0になった場合、融通フラグFINをオフに設定する。そして、復旧処理部532は、復旧残りユニット数Rを0に置き換える(ステップS817)。
ステップS817の処理後、または、復旧残りユニット数Rが0である場合(ステップS813のYESルート)、復旧処理部532は、QoS制御域213において、融通復旧LUの融通フラグFOUTおよびFOUTMAXをいずれもオフに設定する。また、復旧処理部532は、QoS制御域213において、融通復旧LUの融通ユニット数NBを0に設定する(ステップS818)。この後、復旧処理部532は、マクロ融通復旧処理を完了する。
次に、図17のステップS807〜S813の処理について、図18〜図20に示す例を参照しながら、具体的に説明する。なお、図18は、本実施形態に係るマクロ融通復旧処理(図16のステップS803,S804)で作成される融通先ユニット配列(LUN/ホスト番号配列)の一例を示す図である。また、図19および図20は、本実施形態に係るマクロ融通復旧処理(特に図17のステップS807〜S813)を具体的に説明する図である。
図18に示す融通先ユニット配列では、「ホストとLUNとの組合せ」を特定するホスト番号およびLUNと、当該LUNに対応する融通先LUの融通ユニット数NBとが、対応付けられ、融通ユニット数NBの大きい順にソートされている。図18および図19に示す例において、配列内LUのL0は、ホスト#1およびLUN#1に対応し、L0の融通ユニット数NB(=X0)は、50である。また、配列内LUのL1は、ホスト#2およびLUN#3に対応し、L1の融通ユニット数NB(=X1)は、25であり、配列内LUのL2は、ホスト#1およびLUN#4に対応し、L2の融通ユニット数NB(=X2)は、15である。さらに、配列内LUのL3は、ホスト#2およびLUN#2に対応し、L3の融通ユニット数NB(=X3)は、10であり、配列内LUのL4は、ホスト#2およびLUN#5に対応し、L4の融通ユニット数NB(=X4)は、8である。なお、融通先ユニット配列数(融通先ユニット配列の要素数)Mは10とする。
以下では、図18および図19に示す融通先ユニット配列に基づき、復旧処理部532が、必要ユニット数A=64のユニットを融通復旧LUに復旧させる場合の処理手順について具体的に説明する。このとき、復旧残りユニット数Rの初期値は、必要ユニット数Aの64となる。復旧処理部532は、i=0を設定してから(ステップS807)、まず、i=0のときの値(Xi−Xi+1)×(i+1)=(X0−X1)×(0+1)=25×1=25を算出する。Rの値は64であるので、R>25であり(ステップS808のNOルート)、L0から融通復旧ユニットに25ユニット分の性能を復旧させるべく、復旧処理部532は、L0の融通ユニット数NBから25を減算する。そして、復旧処理部532は、復旧残りユニット数Rを、64から、64−25=39に置き換える(ステップS809;図20の最上段の式参照)。
ついで、復旧処理部532は、iを1インクリメントしてi=1にする(ステップS810)。このとき、i=1≠M−1=9であるため(ステップS811のNOルート)、復旧処理部532は、ステップS808に戻り、i=1のときの値(Xi−Xi+1)×(i+1)=(X1−X2)×(1+1)=10×2=20を算出する。Rの値は39であるので、R>20であり(ステップS808のNOルート)、L0およびL1から融通復旧ユニットに20ユニット分の性能を復旧させるべく、復旧処理部532は、L0およびL1の融通ユニット数NBからそれぞれ10を減算する。そして、復旧処理部532は、復旧残りユニット数Rを、39から、39−20=19に置き換える(ステップS809;図20の上から2段目の式参照)。
ついで、復旧処理部532は、iを1インクリメントしてi=2にする(ステップS810)。このとき、i=2≠M−1=9であるため(ステップS811のNOルート)、復旧処理部532は、ステップS808に戻り、i=2のときの値(Xi−Xi+1)×(i+1)=(X2−X3)×(2+1)=5×3=15を算出する。Rの値は19であるので、R>15であり(ステップS808のNOルート)、L0,L1,L2から融通復旧ユニットに15ユニット分の性能を復旧させるべく、復旧処理部532は、L0,L1,L2の融通ユニット数NBからそれぞれ5を減算する。そして、復旧処理部532は、復旧残りユニット数Rを、19から、19−15=4に置き換える(ステップS809;図20の上から3段目の式参照)。
ついで、復旧処理部532は、iを1インクリメントしてi=3にする(ステップS810)。このとき、i=3≠M−1=9であるため(ステップS811のNOルート)、復旧処理部532は、ステップS808に戻り、i=3のときの値(Xi−Xi+1)×(i+1)=(X3−X4)×(3+1)=2×4=8を算出する。Rの値は4であるので、R≦8であり(ステップS808のYESルート;図20の上から4段目の式参照)、復旧処理部532は、復旧残りユニット数R=4を(i+1)=4個以内の整数値に分割する。ここでは、R=4は、4つのLUであるL0〜L3に分割され、復旧処理部532は、4つのL0〜L3の融通ユニット数NBから、それぞれ1を減算し、復旧残りユニット数Rを4から0に置き換える(ステップS812)。このときR=0であるため(ステップS813のYESルート)、復旧処理部532は、ステップS818の処理に移行する。
以上の処理によって、融通復旧LUが他のLUに融通した性能(処理量)が、融通先LUから融通復旧LUに復帰される。その際、融通先LUに対し融通された性能(処理量)の残量が均等もしくはほぼ均等になるように、当該性能を融通先LUから融通復旧LUに復帰させることができる。
〔3〕本実施形態の効果
本実施形態のストレージ装置100によれば、使用されるホストとLUとの組合せの性能レベル(優先度)に従って、ストレージ装置100の性能を配分し、ストレージのQoS機能を容易に実現することができる。
また、本実施形態のストレージ装置100によれば、ホスト10からの入出力要求(I/O要求,コマンド)の状況やホスト10の接続環境の変化に応じて、ストレージ性能を最適に制御することができる。特に、本実施形態のマクロ性能融通では、上記優先度についての性能値の最小間隔5MB/s,60IOPSを「1ユニット」とする単位で、性能融通が行なわれる。したがって、優先度を変更して性能限界値を変更する場合に比べ、性能限界値の変更間隔(融通量)を大幅に小さくすることができ、ホスト10から要求される処理性能の変動に細かく追従することができ、様々な性能変動に対応することができる。その際、複数ボリューム(LU)間で、処理性能に余裕のあるLUから、性能不足のLUに対し、性能が融通されるため、性能融通を確実に行なうことができる。
さらに、本実施形態のストレージ装置100では、ミクロ性能融通およびマクロ性能融通の特徴を踏まえ、ミクロ性能融通およびマクロ性能融通のいずれか一方が使用される。ミクロ性能融通およびマクロ性能融通の一方を使用する場合、ストレージ装置100のストレージQoSを使用する動作環境に応じて、適切な性能融通を選択することができる。また、両方を使用する場合、一時的なスパイク性能などを吸収する際にはミクロ性能融通を使用する一方、継続的な性能変動を吸収する際にはマクロ性能融通を使用するように制御を行なうことで、両方の特徴を有効に利用することができる。
また、本実施形態のミクロ性能融通では、例えば1秒以下ミクロサイクルで、処理性能が不足するLUに、処理性能に余裕のあるLUから処理性能が融通される。このときの融通量は、記憶されず、次のミクロサイクルでは性能限界値の調整に反映されない。従って、ストレージ装置100は、次のミクロサイクルでは、元の処理性能で動作する。このように、ミクロ性能融通は一時的な融通であるため、ミクロ性能融通を用いることで一度に大量の性能融通が可能である。
特に、本実施形態のミクロ性能融通では、融通先LU(待ちLU)が存在する場合、ビジー率Lに基づき当該待ちLUを含むRAIDグループに性能余裕が有るか否かが判定される。性能余裕が無い場合には、融通元LU(余りLU)が存在したとしてもミクロ性能融通を実行しない。これにより、余りLUから待ちLUへの性能融通によってRAIDグループ全体の性能余裕が無くなるのを回避することができる。
また、本実施形態のミクロ性能融通では、処理性能に余裕のあるLUが無く融通先LUへの処理性能の融通を行なえない際、融通先LUの属するRAIDグループに性能余裕が有るか否かが確認される。そして、性能余裕が有る場合には、図11に示すように、RAIDグループにおけるLU用帯域(QoS設定帯域)以外の未割当帯域からミクロ性能融通を行なうことが可能になる。したがって、性能不足を招くことなくRAIDグループにおける未割当帯域を有効に利用して、性能不足のLUを解消することができる。
さらに、本実施形態のミクロ性能融通では、融通先LUに対し性能融通を行なう際、当該性能融通の量がビジー率Lをどれだけ増加させるか、その増加分をビジー率算出部545によって算出しながら性能融通が行なわれる。また、融通先LUが複数存在する場合、例えば待ちユニット数の大きい順に性能融通が行なわれる。その際、当該性能融通後のビジー率増加分をビジー率Lに反映することで、ビジー率Lが所定閾値を大きく超えるような性能融通の実行が確実に抑止される。
さらに、本実施形態のマクロ性能融通では、例えば2秒以上の、より大きなマクロサイクルで処理性能が監視される。そして、所定時間(例えば1マクロサイクル)に亘り連続して性能不足となっているLUに対し、前記所定時間に亘り連続して処理性能に余裕のあるLUから、処理性能が融通される。このように、マクロ性能融通は、性能融通量を学習により調整するため、ホスト10から要求される処理性能の継続的な変動に有効に対応することができる。
またさらに、本実施形態のストレージ装置100では、融通元LUで処理性能不足が発生した場合、つまり融通復旧LUが存在する場合、融通復旧LUが他のLUに融通した性能(処理量)が、融通先LUから融通復旧LUに復帰される。その際、融通先LUに対し融通された性能(処理量)の残量が均等もしくはほぼ均等になるように、当該性能を融通先LUから融通復旧LUに復帰させることができる。つまり、融通復旧LUの性能復旧後の複数の融通先LUにおいて融通量を均等もしくはほぼ均等に残すことができ、複数の融通先LUにおいて融通量の偏りがなくなる。したがって、当該複数の融通先LUを含むストレージ装置100において、以降の処理を効率よく行なうことができる。
〔4〕その他
以上、本発明の好ましい実施形態について詳述したが、本発明は、係る特定の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲内において、種々の変形、変更して実施することができる。
また、図示した各構成部は、機能概念的なものであり、必ずしも物理的に図示のごとく構成されていることを要しない。例えば、SCSIターゲット制御部303において、コマンド受信部504とスケジュール部506とは統合されてもよい。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
また、本実施形態において説明した各種処理は、予め用意されたプログラムをストレージ装置が有するコンピュータで実行することによって実現することができる。そこで、以下では、図21を参照しながら、本実施形態と同様の機能を有するストレージ装置制御プログラムを実行するコンピュータの一例を説明する。図21は、本実施形態のストレージ装置制御プログラムを実行するコンピュータを示すブロック図である。
図21に示すように、コンピュータ1000は、ホストとのインターフェースであるFC−CA1010と、ホストとのインターフェースであるiSCSI−CA1020と、ディスク装置とのインターフェースであるSAS1030とを有する。また、コンピュータ1000は、各種情報を一時記憶するRAM1040と、書き換え可能であり、電源を切ってもデータが消えない不揮発性のフラッシュメモリ1050とを有する。さらに、コンピュータ1000は、読み出し専用メモリであるROM(Read Only Memory)1060と、各種演算処理を実行するCPU1070とを有する。また、コンピュータ1000が有する各部は、バス1080を介して接続される。
そして、フラッシュメモリ1050には、図3および図5に示したQoS管理テーブル501に対応するQoS管理テーブル1051や、図3に示した各LUの性能融通情報などが記憶される。また、ROM1060には、図3に示した算出部505,スケジュール部506,実行部507,マクロ融通チェック部510,マクロ融通処理部520,マクロ融通復旧処理部530,ミクロ融通処理部540と同様の機能を有するストレージ装置制御プログラム1061が記憶される。
そして、CPU1070は、フラッシュメモリ1050から読み出したQoS管理テーブル1051や各LUの性能融通情報を参照し、ROM1060から読み出したストレージ装置制御プログラム1061をストレージ装置制御プロセス1071として実行する。
なお、上記ストレージ装置制御プログラム1061は、必ずしもROM1060に格納されている必要はない。例えば、当該プログラム1061は、フレキシブルディスク,CD(CD−ROM,CD−R,CD−RWなど),DVD(DVD−ROM,DVD−RAM,DVD−R,DVD−RW,DVD+R,DVD+RWなど),ブルーレイディスク等のコンピュータ読取可能な記録媒体に記録された形態で提供されてもよい。この場合、コンピュータ1000はその記録媒体からプログラム1061を読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。また、公衆回線,インターネット,LAN(Local Area Network),WAN(Wide Area Network)等を介してコンピュータ1000に接続される他のコンピュータ(またはサーバ)等にこのプログラム1061を記憶させておき、コンピュータ1000がこれらからプログラム1061を読み出して実行するようにしてもよい。
〔5〕付記
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定する待ち入出力要求判定部と、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定する性能余裕判定部と、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう融通処理部と、を有する、ストレージ装置。
(付記2)
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通処理部は、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、付記1に記載のストレージ装置。
(付記3)
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通処理部は、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、付記1または付記2に記載のストレージ装置。
(付記4)
前記ストレージ装置において前記複数の記憶装置が属するRAID(Redundant Arrays of Inexpensive Disks)グループのビジー率(以下RAIDグループビジー率という)を算出するビジー率算出部をさらに有し、
前記性能余裕判定部は、算出された前記RAIDグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、付記1〜付記3のいずれか一項に記載のストレージ装置。
(付記5)
前記ビジー率算出部は、前記RAIDグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記RAIDグループビジー率として算出する、付記4に記載のストレージ装置。
(付記6)
前記複数のディスクドライブに異なる種別のディスクドライブが含まれている場合、前記ビジー率算出部(545)は、各ディスクドライブのビジー率に対し前記種別に応じた係数を乗算して前記RAIDグループビジー率を算出する、付記5に記載のストレージ装置。
(付記7)
複数の前記RAIDグループが自動階層化プールを構成する場合、前記ビジー率算出部は、複数の前記RAIDグループについて算出された複数の前記RAIDグループビジー率のそれぞれに、各RAIDグループに含まれるディスクドライブの種別に応じた重み付けを行なって、前記複数のRAIDグループについてのRAIDグループビジー率を算出する、付記5に記載のストレージ装置。
(付記8)
前記ビジー率算出部は、前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記RAIDグループビジー率に加算した値を性能融通後のRAIDグループビジー率として用いる、付記4〜付記7のいずれか一項に記載のストレージ装置。
(付記9)
ストレージ装置が、
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定し、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定し、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう、ストレージ装置の制御方法。
(付記10)
前記ストレージ装置が、さらに、
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、付記9に記載のストレージ装置の制御方法。
(付記11)
前記ストレージ装置が、さらに、
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、付記9または付記10に記載のストレージ装置の制御方法。
(付記12)
前記ストレージ装置が、さらに、
前記ストレージ装置において前記複数の記憶装置が属するRAID(Redundant Arrays of Inexpensive Disks)グループのビジー率(以下RAIDグループビジー率という)を算出し、
算出された前記RAIDグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、付記9〜付記11のいずれか一項に記載のストレージ装置の制御方法。
(付記13)
前記ストレージ装置が、さらに、
前記RAIDグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記RAIDグループビジー率として算出する、付記12に記載のストレージ装置の制御方法。
(付記14)
前記ストレージ装置が、さらに、
前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記RAIDグループビジー率に加算した値を性能融通後のRAIDグループビジー率として用いる、付記12または付記13に記載のストレージ装置の制御方法。
(付記15)
ストレージ装置に含まれるコンピュータに、
複数の記憶装置のそれぞれについて、待ち状態の入出力要求の有無を判定し、
前記複数の記憶装置の中に、前記待ち状態の入出力要求が有ると判定された融通先記憶装置が存在する場合、前記複数の記憶装置を含むストレージ装置における性能余裕の有無を判定し、
前記ストレージ装置に性能余裕が有ると判定された場合、前記融通先記憶装置に対し、前記ストレージ装置の未割当帯域から性能融通を行なう、
処理を実行させる、ストレージ装置制御プログラム。
(付記16)
前記コンピュータに、さらに、
前記複数の記憶装置の中に性能余裕をもつ融通元記憶装置が存在しない場合、前記融通先記憶装置に対し、前記ストレージ装置における前記複数の記憶装置用帯域以外の未割当帯域から性能融通を行なう、
処理を実行させる、付記15に記載のストレージ装置制御プログラム。
(付記17)
前記コンピュータに、さらに、
前記複数の記憶装置の中に前記融通元記憶装置が存在する場合、前記融通先記憶装置に対し、前記融通元記憶装置用帯域における未割当帯域から性能融通を行なう、
処理を実行させる、付記15または付記16に記載のストレージ装置制御プログラム。
(付記18)
前記コンピュータに、さらに、
前記ストレージ装置において前記複数の記憶装置が属するRAID(Redundant Arrays of Inexpensive Disks)グループのビジー率(以下RAIDグループビジー率という)を算出し、
算出された前記RAIDグループビジー率が所定値未満である場合、前記ストレージ装置に性能余裕が有ると判定する、
処理を実行させる、付記15〜付記17のいずれか一項に記載のストレージ装置制御プログラム。
(付記19)
前記コンピュータに、さらに、
前記RAIDグループに含まれる複数のディスクドライブのそれぞれについてビジー率を算出し、前記複数のディスクドライブの平均ビジー率を、前記RAIDグループビジー率として算出する、付記18に記載のストレージ装置制御プログラム。
処理を実行させる、
(付記20)
前記コンピュータに、さらに、
前記融通先記憶装置に対する性能融通量をビジー率増加分に換算し、換算された前記ビジー率増加分を前記RAIDグループビジー率に加算した値を性能融通後のRAIDグループビジー率として用いる、
処理を実行させる、付記18または付記19に記載のストレージ装置制御プログラム。