(57)【特許請求の範囲】
【請求項１】
第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得する処理と、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断する処理と、
前記イベントが発生したと判断された場合には、前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知する処理と、
前記制御部に対して前記第２のアクセス数を通知した後に、前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得する処理と、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新する処理と、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出する処理と、
前記第４のアクセス数を、前記制御部に対して通知する処理と、
を、コンピュータに実行させるためのプログラム。
【請求項２】
前記第１の記憶領域が複数の記憶領域を含み、当該複数の記憶領域の各々について単位時間あたりの第３のアクセス数が指定されており、
前記複数の記憶領域の各々について、当該記憶領域にアクセスするアプリケーションの単位時間あたりのアクセス数を、前記単位時間あたりの第３のアクセス数に制限するように、前記複数の記憶領域の各々の制御部に指示する処理
を、さらに前記コンピュータに実行させるための請求項１記載のプログラム。
【請求項３】
前記判断する処理が、
前記ビジー率が上限値に達する回数が所定回数に達したか否かを判断する処理
を含む請求項１又は２記載のプログラム。
【請求項４】
前記更新する処理が、
前記ビジー率の上限値を当該ビジー率が上限値に達した場合の単位時間あたりのアクセス数で除することにより得られる値と、前記第２のモニタ結果に含まれる前記ビジー率を前記第２のモニタ結果に含まれる単位時間あたりのアクセス数で除することにより得られる値との差に対して、前記ビジー率が上限に達した場合の単位時間あたりのアクセス数及び所定の係数を乗ずることで得られる値を、前記第１の指標の値から引く処理
を含む請求項１乃至３のいずれか１つ記載のプログラム。
【請求項５】
前記第１の指標の値を更新した後に、前記記憶装置のビジー率及び単位時間あたりのアクセス数の第３のモニタ結果を取得する処理と、
取得した前記第３のモニタ結果から算出される、前記ビジー率についての第２の指標の値と、当該第２の指標の過去の値の平均値との差が所定値以上である場合には、前記第１の指標の値を初期値に戻す処理と、
を、さらに前記コンピュータに実行させるための請求項４記載のプログラム。
【請求項６】
第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得する処理と、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断する処理と、
前記イベントが発生したと判断された場合には、前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知する処理と、
前記制御部に対して前記第２のアクセス数を通知した後に、前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得する処理と、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新する処理と、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出する処理と、
前記第４のアクセス数を、前記制御部に対して通知する処理と、
を、コンピュータが実行する制御方法。
【請求項７】
第１の記憶領域と第２の記憶領域とを備える記憶装置と、
前記記憶装置における前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部と、
処理部とを有し、
前記処理部が、
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得し、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断し、
前記イベントが発生したと判断された場合には、前記制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知し、
前記制御部に対して前記第２のアクセス数を通知した後に、前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得し、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新し、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出し、
前記第４のアクセス数を、前記制御部に対して通知する
コンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、記憶装置に対するＩＯ（Input and Output）制御技術に関する。
【背景技術】
【０００２】
記憶装置等の性能保証を行う方法については様々な提案がなされている。このような提案においては、何れもＩＯＰＳ（Input and Output per Second）やスループットを使用している。
【０００３】
ところで、記憶装置のビジー（Busy）率とは、記憶装置の忙しさを表す指標であって、たとえば、ＩＯキューにＩＯ要求が滞留する時間の割合により求められる。従って、記憶装置のビジー率が１００％（０以上１以下の数値として取り扱う場合には「１」）のときは、これ以上性能を出すことが出来ないことを意味する。より具体的には、記憶装置のビジー率が１００％となると、常にＩＯキューにＩＯ要求がたまっていて、常に何らかのＩＯを実行中であることを表しており、これ以上ＩＯ性能を上げることが難しい状態にある。また、ＩＯＰＳとは、たとえば、単位時間あたりの、ブロック単位で数えるアクセス数（ＩＯ数）により求められる。
【０００４】
ここで、記憶装置へのアクセスを行う場合に、同じＩＯＰＳを確保しようとしても、ＩＯが発生する、記憶装置におけるディスク上の位置及び範囲、read命令及びwrite命令の割合、ＩＯサイズの分布の態様が異なる態様に変化すると、記憶装置のビジー率は同じ値とならず、変動してしまう。例えば、ＩＯが発生する、記憶装置上の範囲の違いに関して考察すると、記憶領域全域にＩＯが発生することが支配的な場合と、記憶領域の一部にＩＯが発生することが支配的な場合とでは、データ転送以外のオーバーヘッド時間（例えばシーク時間など）が、前者の方が大きくなるため、同じＩＯＰＳであっても前者の方がよりビジー率が高くなる傾向にある。すなわち、ＩＯの発生状況によっては、ＩＯＰＳやスループットといった指標値によるＩＯの帯域保証が出来たり出来なかったりすることを意味する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−４３０３２号公報
【特許文献２】特表２００５−５２４８８６号公報
【特許文献３】特開２００３−１４０８３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従って、本技術の目的は、一側面において、ＩＯの発生状況によらず、ＩＯの帯域保証を可能にするための技術を提供することである。
【課題を解決するための手段】
【０００７】
本技術に係る制御方法は、（Ａ）第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得するステップと、（Ｂ）取得した第１のモニタ結果から、ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断するステップと、（Ｃ）イベントが発生したと判断された場合には、第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知するステップと、（Ｄ）記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得するステップと、（Ｅ）少なくとも取得した第２のモニタ結果に基づき、第１の指標の値を更新するステップと、（Ｆ）取得した第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した第１の指標の値となるように、単位時間あたりの第４のアクセス数を算出するステップと、（Ｇ）第４のアクセス数を、制御部に対して通知するステップとを含む。
【発明の効果】
【０００８】
ＩＯの発生状況によらず、ＩＯの帯域保証が可能になる。
【図面の簡単な説明】
【０００９】
【図１】図１は、ＩＯＰＳとビジー率及びサービスタイムとの関係の違いを表す図である。
【図２】図２は、図１の測定結果の測定条件を説明するための図である。
【図３】図３は、ＩＯＰＳとビジー率の関係を模式的に示す図である。
【図４】図４は、ＩＯＰＳとビジー率の関係を模式的に示す図である。
【図５】図５は、第１の実施の形態におけるコンピュータの構成を示す図である。
【図６】図６は、第１の実施の形態における処理プログラムの処理フローを示す図である。
【図７】図７は、カーネルから取得されるモニタ結果の一例を示す図である。
【図８】図８は、処理フローを説明するための図である。
【図９】図９は、第１の実施の形態における処理プログラムの処理フローを示す図である。
【図１０】図１０は、ディスクドライバの処理フローを示す図である。
【図１１】図１１は、目標ビジー率の更新処理の処理フローを示す図である。
【図１２】図１２は、第２の実施の形態におけるコンピュータの構成を示す図である。
【図１３】図１３は、第２の実施の形態における処理プログラムの処理フローを示す図である。
【図１４】図１４は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
［実施の形態１］
上でも述べたように、ＩＯが発生する、記憶装置におけるディスク上の位置及び範囲、read命令及びwrite命令の割合、ＩＯサイズの分布などの態様（以下、ワークロードと呼ぶ）によって、ＩＯＰＳとＩＯビジー率の関係は変動する。例えば、あるワークロードＡのみ負荷した場合と、あるワークロードＢのみ負荷した場合と、ワークロードＡ＋Ｂを負荷した場合とについて、ＩＯＰＳとＩＯビジー率（以下、略してビジー率と呼ぶ）との関係を計測すると、図１のような結果を得た。なお、図２に示すように、１台のディスク装置（容量２Ｔバイト）のうち、離れた５００Ｇバイトの２つの領域に対して、ワークロードＡについてのＩＯと、ワークロードＢについてのＩＯとが行われるものとする。また、図１には、１ＩＯあたりの平均実行時間であるサービスタイムとＩＯＰＳとの関係も示されている。すなわち、図１においては、左縦軸はビジー率（％）を表し、右縦軸はサービスタイム（ｍｓ）を表し、横軸はＩＯＰＳを表す。
【００１１】
このように、どのワークロードについても、ＩＯＰＳが増加してビジー率が１００％付近になると、点線で囲んだ部分で分かるように、サービスタイムが急激に増加する。すなわち、点線で囲んだ部分では、１ＩＯＰＳが変化すると、サービスタイムが大きく変動する。一方、それ以外の部分では、ＩＯＰＳに比例してビジー率が増減することが分かる。このようにＩＯＰＳに比例してビジー率が増減する部分については、ＩＯＰＳとビジー率との関係からＩＯＰＳによる帯域保証を行うことが可能となる。
【００１２】
図３に、図１をより簡略的に表す。図３で分かるように、ワークロード１乃至３のいずれについても、ＩＯＰＳに対してビジー率が線形である部分Ｂと、ＩＯＰＳに対してビジー率が非線形である部分Ａとの境界に、比例限界ビジー率ｘ乃至ｚが存在している。但し、実際のワークロードは時間経過と共に変動してゆき、ある時にはワークロード１であり、ある時にはワークロード３であり、さらにある時にはワークロード２であり、比例限界ビジー率は、ｘ乃至ｚで変動する。また、比例限界ビジー率が予め分かるわけではない。さらに、ここでは３つのワークロードを示したが、ワークロードは多数存在しており、いずれのワークロードが負荷されているのかは、結果として分かるだけで事前に分かるわけではない。従って、ある時点でＩＯＰＳに対してビジー率が線形である状態であったとしても、時間経過に応じてワークロードが変化すると、不意に比例限界ビジー率を超えてビジー率が１００％に張り付く状態になる可能性がある。そうすると、ＩＯＰＳによる帯域保証は困難になる。
【００１３】
具体的には、図４に示すように、ポイント１乃至５（矩形で囲まれた数字）が観測される。すなわち、第１の時点でＩＯＰＳとビジー率との組み合わせ（ポイント１）が得られた後に、第２の時点でＩＯＰＳとビジー率との組み合わせ（ポイント２）が得られると、ワークロード３における線形区間にあることが分かる。但し、次の第３の時点においては、ＩＯＰＳと１００％のビジー率との組み合わせ（ポイント３）が得られるので、ワークロード３から他のワークロード（ここではワークロード２）に遷移したことが分かる。ここで、ＩＯＰＳを下げるように制御した後、第４の時点において、ＩＯＰＳとビジー率との組み合わせ（ポイント４）が得られる。さらに時間が経過して、第５の時点においては、ＩＯＰＳとビジー率との組み合わせ（ポイント５）が得られ、ＩＯＰＳとビジー率との関係からしてワークロード２から他のワークロード（ここではワークロード１）へ遷移したことが分かる。
【００１４】
このように離散的に状態のデータが得られるだけで、ビジー率が１００％となっていれば、比例限界ビジー率を超えていることが分かるが、比例限界ビジー率そのものが分かるわけではない。ＩＯＰＳに対してビジー率が線形である線形区間であれば、ＩＯＰＳによる帯域保証を行うことができるが、比例限界ビジー率が分からなければ、線形区間を正確には把握できない。そこで、本実施の形態では、０＜目標ビジー率≦比例限界ビジー率を満たすように目標ビジー率を設定して、記憶装置全体に対して発行されるＩＯが目標ビジー率以下となるように制御を行うものとする。但し、比例限界ビジー率がワークロードによって変化するので、ワークロードの変化が検出されれば、比例限界ビジー率を算出し直し、目標ビジー率も設定し直す。
【００１５】
以下、このような目標ビジー率設定及び帯域保証のための制御技術について具体的に説明する。
【００１６】
本技術の第１の実施の形態に係るコンピュータの構成を図５に示す。図５に示すコンピュータ１００は、例えばハードディスク（名前はｈｄａ）である記憶装置２００と接続されており、カーネル内に記憶装置２００内のパーティションＡ（名前はｈｄａ１）のためのディスクドライバＡと、記憶装置２００内のパーティションＢ（名前はｈｄａ２）のためのディスクドライバＢとを実行している。また、コンピュータ１００は、アプリケーションＡ及びＢを実行しており、アプリケーションＡが記憶装置２００のパーティションＡにディスクドライバＡを介してアクセスし、アプリケーションＢが記憶装置２００のパーティションＢにディスクドライバＢを介してアクセスするものとする。
【００１７】
また、コンピュータ１００は、以下で詳細に述べる帯域制御のための処理を実施するデーモン（daemon）である処理プログラム１１０も実行している。
【００１８】
本実施の形態では、以下で詳細に説明するように、現在のＩＯ状況に応じた記憶装置２００のビジー率とＩＯＰＳとから、ＩＯ帯域保証するには現状のビジー率からして、どのような態様で帯域制御を行うべきであるかを、処理プログラム１１０で決定して、ディスクドライバに対して指示を行う。なお、以下では、説明を分かりやすくするため、アプリケーションＡについてＩＯ帯域保証を行うことを想定する。
【００１９】
次に、図６乃至図１１を用いて、図１に示した処理プログラム１１０の処理について説明する。なお、アプリケーションＡ及びＢと処理プログラム１１０とディスクドライバＡ及びＢとは、コンピュータ１００のプロセッサにより実行されて、以下で述べるような機能を実現する。
【００２０】
まず、処理プログラム１１０は、例えば１分毎など周期的に、カーネルから記憶装置２００の最新ＩＯＰＳ及びビジー率を含むモニタ結果を取得して、メインメモリなどの記憶装置に格納する（図６：ステップＳ１）。
【００２１】
例えばＬｉｎｕｘ（登録商標）であれば、”ｉｏｓｔａｔ  −ｘ”コマンドをカーネルに出力して、例えば図７のようなデータを取得する。
【００２２】
図７に示すようなデータにおいて、ｒ／ｓの値とｗ／ｓの値との和がＩＯＰＳを表しており、％ｕｔｉｌの値がビジー率を表している。
【００２３】
次に、処理プログラム１１０は、ステップＳ１で取得したモニタ結果を含む直近１０回のモニタ結果においてビジー率１００％が所定回数（例えば３回など予め設定する）以上発生しているか判断する（ステップＳ３）。このような条件を満たす場合には、ワークロードが変化して目標ビジー率を更新すべきイベントが発生したものと判断する。一方、このような条件を満たしていない場合には、端子Ａを介して図９のステップＳ２０に移行する。
【００２４】
目標ビジー率を更新するイベントが発生したと判断された場合には、処理プログラム１１０は、ビジー率１００％となっているモニタ結果のＩＯＰＳの値Ｃから、１ＩＯＰＳあたりのビジー率ｃを、１００／Ｃで算出し、メインメモリなどの記憶装置に格納する（ステップＳ５）。なお、Ｃは複数の値が得られるが、例えば平均値や最小値であっても良い。なお、この段階で直近１０回分のモニタ結果をクリアするようにしても良い。
【００２５】
ここで図８を用いて、本処理フローで計算される値を説明する。点線は直前のワークロードについて、ＩＯＰＳとビジー率の関係を表したものであり、このワークロードを前提として帯域保証の制御が行われていたものとする。但し、その後、ＩＯＰＳがＣである場合にビジー率が１００％となるポイント１１が所定回数検出されると、上で述べたようにワークロードが変化して目標ビジー率を更新すべきイベントが発生したと判断される。この時、ステップＳ５では、非線形区間を直線として表した場合の直線ｐの傾きｃを算出したことになる。なお、比例限界ビジー率に対応する点ｑは、実際には得られない。
【００２６】
次に、処理プログラム１１０は、非帯域保証側の上限ＩＯＰＳを、現在値よりＺ％引き下げるように、デバイスドライバＢに対して指示する（ステップＳ７）。デバイスドライバの処理については後に説明するが、デバイスドライバは、アプリケーションからのＩＯを、処理プログラム１１０から通知されたＩＯＰＳ値以下になるように、制御する。
【００２７】
比例限界ビジー率に対応する点ｑは実際には得られないが、点ｑよりも低いビジー率となるようにＩＯＰＳを設定する。そのため、点ｑよりビジー率が十分に低くなる点１２を得るために、実験的に決定されるＺ％（例えば２０％）だけ、現在値より低い値をデバイスドライバＢに通知する。
【００２８】
その後、処理プログラム１１０は、最新ＩＯＰＳ及びビジー率を含むモニタ結果を取得して、メインメモリなどの記憶装置に格納する（ステップＳ９）。このようにすれば、図８における点１２におけるモニタ結果が得られる。そして、処理プログラム１１０は、ビジー率／最新ＩＯＰＳにより、線形区間における１ＩＯＰＳあたりのビジー率ｄを算出し、メインメモリなどの記憶装置に格納する（ステップＳ１１）。図８において、直線ｒの傾きｄが算出される。
【００２９】
その後、処理プログラム１１０は、現在の目標ビジー率Ｘ１、１ＩＯＰＳあたりのビジー率ｃ及びｄから新たな目標ビジー率Ｘ２を算出し、メインメモリなどの記憶装置に格納する（ステップＳ１３）。具体的には以下の式で算出される。
Ｘ２＝Ｘ１−（ｃ−ｄ）×Ｃ×ｙ
（ｃ−ｄ）×Ｃは、図８における点１１と直線ｒをＩＯＰＳ＝Ｃまで延長した際における点ｓとの長さ（＝ビジー率の差）を表している。本実施の形態では、（ｃ−ｄ）×Ｃに対して係数ｙ（０以上１以下の実数）を設定することで、現在の目標ビジー率Ｘ１の引き下げ幅ΔＸが算出される。ｙについても、実験的に適切な値を設定するが、大きな値を設定すると、実際の比例限界ビジー率より大きく下回った値が目標ビジー率として設定されてしまう。一方、ｙに小さな値を設定すると、実際の比例限界ビジー率よりも大きな値が目標ビジー率として設定されるので、直ぐに目標ビジー率を更新しなければならなくなる。ここでは例えば、ｙ＝０．５を設定する。なお、この段階で直近１０回分のモニタ結果をクリアするようにしても良い。
【００３０】
処理は端子Ｂを介して図９の処理に移行して、処理プログラム１１０は、ｄに対して、アプリケーションＡについての帯域保証ＩＯＰＳを乗じることで、帯域保証側のビジー率を算出し、メインメモリなどの記憶装置に格納する（ステップＳ１５）。帯域保証ＩＯＰＳの値は、例えばアプリケーションＡ又はアプリケーションＡのユーザから指示されるものとする。
【００３１】
なお、帯域保証ＩＯＰＳの値が大きすぎる場合も生じ得る。例えばビジー率を％で表す場合には帯域保証側のビジー率が１００を超えたり、ビジー率を０乃至１までの値で表す場合には帯域保証側のビジー率が１を超えたりする場合もあり得る。また、他のアプリケーションが記憶装置２００を使用できなくなるのは問題である。そのため、閾値を予め設定しておき、帯域保証側のビジー率がその閾値を超えてしまうか判断し、閾値を超えてしまう場合には、ＩＯＰＳの保証不可ということで以下の処理を行わないようにしても良いし、帯域保証ＩＯＰＳの値を下げるように要求するようにしても良い。また、自動的に帯域保証ＩＯＰＳ値を保証できる範囲に下げるようにしてもよい。
【００３２】
ここでは、例えばｄ＝０．７［％／ＩＯＰＳ］であるものとし、帯域保証ＩＯＰＳの値が１００であるとすると、帯域保証ＩＯＰＳの値を実現するためには、０．７×１００＝７０％のビジー率となることが分かる。すなわち、アプリケーションＡの要求に従ってＩＯＰＳ値を保証しようとすると、ビジー率７０％を確保することになる。
【００３３】
その後、処理プログラム１１０は、（新たな目標ビジー率−帯域保証側のビジー率）／ｄにより、非帯域保証側の上限ＩＯＰＳを算出し、メインメモリなどの記憶装置に格納する（ステップＳ１７）。
【００３４】
すなわち、帯域保証側のビジー率と非帯域保証側のビジー率との和が、新たな目標ビジー率と一致するように非帯域保証側のビジー率を設定する。そして、線形区間においては、１ＩＯＳＰあたりのビジー率はｄであるから、非帯域保証側のビジー率をｄで除すれば、非帯域保証側の上限ＩＯＰＳが得られる。
【００３５】
例えば、新たな目標ビジー率が９１で、ステップＳ１５で帯域保証側のビジー率として７０が得られ、ｄ＝０．７であれば、（９１−７０）／０．７＝３０が、非帯域保証側の上限ＩＯＰＳとして算出される。
【００３６】
そして、処理プログラム１１０は、非帯域保証側のデバイスドライバＢに対して、非帯域保証側の上限ＩＯＰＳを通知する（ステップＳ１９）。デバイスドライバＢは、この通知に応じて、以下に述べるような処理を実施する。
【００３７】
その後、処理プログラム１１０は、コンピュータ１００のシャットダウン、処理プログラム１１０の停止など処理終了のイベントが発生したか判断する（ステップＳ２０）。処理終了ではない場合には端子Ｃを介して図６のステップＳ１に戻る。一方、処理終了のイベントが発生した場合には、処理を終了する。
【００３８】
以上のような処理を実施することによって、現在のＩＯ発生状況に応じたビジー率を考慮して、ＩＯ性能保証を実施することができるようになる。特に、ワークロードが変化してしまうような場合にも対処できる。
【００３９】
なお、ディスクドライバでは、図１０に示すような処理を実施する。上で述べた例では、ディスクドライバＢが図１０に示すような処理を実施する。ディスクドライバは、処理プログラム１１０からＩＯＰＳの通知を受信したか判断する（ステップＳ２１）。受信していない場合には、現在の処理状態を維持し、ステップＳ２７に移行する。一方、処理プログラム１１０からＩＯＰＳの通知を受信した場合には、ディスクドライバは、通知されたＩＯＰＳで、自らが使用可能なＩＯＰＳの値を更新する（ステップＳ２３）。上で述べた例では、３０ＩＯＰＳがディスクドライバＢに通知されるので、ディスクドライバＢの使用可能ＩＯＰＳの値を３０ＩＯＰＳに変更する。
【００４０】
そして、ディスクドライバは、使用可能ＩＯＰＳに応じて、ＩＯの制限を実施する（ステップＳ２５）。例えば、毎秒４３のＩＯを処理した後は、ＩＯをブロックすることで最大でもＩＯＰＳが４３になるように制限する。これによって全体のＩＯＰＳが、目標ビジー率に対応するＩＯＰＳ以下となるように制御される。以上の処理を処理終了になるまで繰り返す（ステップＳ２７）。
【００４１】
以上のような処理を実施することによって、非帯域保証側のパーティションについてはＩＯが制限され、帯域保証側のパーティションについては制限無くＩＯが処理されて、結果として、指定された帯域保証ＩＯＰＳが実現されるようになる。
【００４２】
なお、図６及び図９の処理フローでは、新たな目標ビジー率は従前の値からΔＸ減ずる処理しか行われていないので、例えば以下のような処理を実施して目標ビジー率を初期値に戻す。
【００４３】
具体的には、処理プログラム１１０は、最新のＩＯＰＳ及びビジー率を含むモニタ結果を取得し、例えばメインメモリなどの記憶装置に格納する（図１１：ステップＳ３１）。そして、処理プログラム１１０は、ビジー率／ＩＯＰＳにより、１ＩＯＰＳあたりの最新ビジー率を算出し、メインメモリなどの記憶装置に格納する（ステップＳ３３）。また、処理プログラム１１０は、過去所定回数（例えば１０回）分の１ＩＯＰＳあたりのビジー率の平均値を算出し、メインメモリなどの記憶装置に格納する（ステップＳ３５）。メインメモリなどの記憶装置に格納されている過去所定回数分のモニタ結果を用いて１ＩＯＰＳあたりのビジー率の平均値を算出する。
【００４４】
そうすると、処理プログラム１１０は、１ＩＯＰＳあたりの最新ビジー率が、ステップＳ３５で算出された平均値から所定レベル以上乖離しているか判断する（ステップＳ３７）。例えば、Ｎ％（例えば２０％）乖離しているか又は差がＮ以上（例えば１０）となっているかを判断する。所定レベル以上乖離している場合には、処理プログラム１１０は、目標ビジー率Ｘを初期値に設定する（ステップＳ３９）。例えば図８のような観測がなされている場合には、例えばＸ＝９５（１が上限であればＸ＝０．９５）と設定する。さらに、過去１０回分のモニタ結果をクリアする。
【００４５】
１ＩＯＰＳあたりの最新ビジー率が所定レベル以上平均値から乖離していない場合、又はステップＳ３９の後に、処理プログラム１１０は、処理終了のイベントが発生したか判断する（ステップＳ４１）。処理終了のイベントが発生していなければステップＳ３１に戻る。一方、処理終了のイベントが発生していれば処理を終了する。
【００４６】
このように、１ＩＯＰＳあたりのビジー率が大幅に変動した場合には再度目標ビジー率を調整すべく、目標ビジー率を初期化する。
【００４７】
［実施の形態２］
第１の実施の形態では、記憶装置２００にパーティションが２つあり、帯域保証すべきアプリケーションＡがパーティションＡにアクセスし、帯域保証しなくても良いアプリケーションＢがパーティションＢにアクセスする例を説明したが、帯域保証すべきアプリケーションが複数の場合もある。本実施の形態では、複数のアプリケーションについて帯域保証する場合について説明する。
【００４８】
図１２に、本実施の形態に係るコンピュータの構成を示す。図１２に示すコンピュータ３００は、例えばハードディスク（名前はｈｄａ）である記憶装置４００と接続されており、カーネル内に記憶装置４００内のパーティションＡ（名前はｈｄａ１）のためのディスクドライバＡと、記憶装置４００内のパーティションＢ（名前はｈｄａ２）のためのディスクドライバＢと、記憶装置４００内のパーティションＣ（名前はｈｄａ３）のためのディスクドライバＣとを実行している。また、コンピュータ３００は、アプリケーションＡ乃至Ｃを実行しており、アプリケーションＡが記憶装置４００のパーティションＡにディスクドライバＡを介してアクセスし、アプリケーションＢが記憶装置４００のパーティションＢにディスクドライバＢを介してアクセスし、アプリケーションＣが記憶装置４００のパーティションＣにディスクドライバＣを介してアクセスするものとする。
【００４９】
また、コンピュータ３００は、以下で詳細に述べる帯域制御のための処理を実施するデーモン（daemon）である処理プログラム３１０も実行している。
【００５０】
本実施の形態では、以下で詳細に説明するように、現在のアクセス状況に応じた記憶装置４００のビジー率とＩＯＰＳとから、ＩＯ性能保証するには現状のビジー率からして、どのような態様で帯域制御を行うべきであるかを、処理プログラム３１０で決定して、ディスクドライバに対して指示を行う。本実施の形態では、アプリケーションＡ及びＢについてＩＯ帯域保証を行うことを想定する。
【００５１】
次に、図１３を用いて、図１２に示した処理プログラム３１０の処理について説明する。但し、第１の実施の形態について説明した図６の処理は同様であるから、ここでは説明を省略する。すなわち、端子Ｂで図１３の処理に移行して、処理プログラム３１０は、ｄに対して各帯域保証ＩＯＰＳを乗じることで、各帯域保証側のビジー率を算出し、メインメモリなどの記憶装置に格納する（ステップＳ５１）。ｄに対してアプリケーションＡの帯域保証ＩＯＰＳを乗じてアプリケーションＡについてのビジー率を算出すると共に、ｄに対してアプリケーションＢの帯域保証ＩＯＰＳを乗じてアプリケーションＢについてのビジー率を算出する。なお、帯域保証ＩＯＰＳの値は、例えばアプリケーション又はアプリケーションのユーザから指示されるものとする。また、帯域保証ＩＯＰＳの値が大きすぎる場合の対処については第１の実施の形態と同様である。
【００５２】
ここで例えばｄ＝０．７［％／ＩＯＰＳ］であるものとし、アプリケーションＡの帯域保証ＩＯＰＳの値が６０で、アプリケーションＢの帯域保証ＩＯＰＳの値が４０であるとすると、アプリケーションＡについての帯域保証ＩＯＰＳの値を実現するためには、０．７×６０＝４２％のビジー率となり、アプリケーションＢについての帯域保証ＩＯＰＳの値を実現するためには、０．７×４０＝２８％のビジー率となることが分かる。すなわち、アプリケーションＡの要求に従ってＩＯＰＳ値を保証しようとすると、ビジー率４２％を確保することになり、アプリケーションＢの要求に従ってＩＯＰＳ値を保証しようとすると、ビジー率２８％を確保することになる。
【００５３】
その後、処理プログラム３１０は、（新たな目標ビジー率−各帯域保証側のビジー率）／ｄにより、非帯域保証側の上限ＩＯＰＳを算出し、メインメモリなどの記憶装置に格納する（ステップＳ５３）。
【００５４】
すなわち、各帯域保証側のビジー率と非帯域保証側のビジー率との和が、新たな目標ビジー率と一致するように非帯域保証側のビジー率を設定する。そして、線形区間においては、１ＩＯＳＰあたりのビジー率はｄであるから、非帯域保証側のビジー率をｄで除すれば、非帯域保証側の上限ＩＯＰＳが得られる。
【００５５】
例えば、新たな目標ビジー率が９１で、ステップＳ５１で帯域保証側のビジー率として４２及び２８が得られ、ｄ＝０．７であれば、（９１−（４２＋２８））／０．７＝３０が、非帯域保証側の上限ＩＯＰＳとして算出される。
【００５６】
そして、処理プログラム３１０は、非帯域保証側のデバイスドライバＣに対して、非帯域保証側の上限ＩＯＰＳを通知する（ステップＳ５５）。デバイスドライバＣは、この通知に応じて、図１０の処理を実施する。
【００５７】
また、処理プログラム３１０は、各帯域保証側のデバイスドライバに対して、帯域保証ＩＯＰＳを通知する（ステップＳ５７）。デバイスドライバＡ及びＢは、この通知に応じて、図１０の処理を実施する。
【００５８】
その後、処理プログラム３１０は、コンピュータ３００のシャットダウン、処理プログラム３１０の停止など処理終了のイベントが発生したか判断する（ステップＳ５９）。処理終了ではない場合には端子Ｃを介して図６のステップＳ１に戻る。一方、処理終了のイベントが発生した場合には、処理を終了する。
【００５９】
以上のような処理を実施することによって、現在のＩＯ発生状況に応じたビジー率を考慮して、複数の帯域保証すべきアプリケーションが存在する場合であっても帯域保証を実施することができるようになる。特に、ワークロードが変化してしまうような場合にも対処できる。
【００６０】
また、ＩＯＰＳ非保証パーティションが１つのみであるが、ＩＯＰＳ非保証パーティションが複数存在している場合にも、各パーティションのディスクドライバに通知することになる。その際、ＩＯＰＳ非保証パーティションがどのような値にＩＯＰＳを制限するかについては、様々なバリエーションが考えられるが、例えば、均等にしても良いし、何らかの優先順位付けを行って、傾斜配分してもよい。
【００６１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、ディスクドライバがアプリケーションを識別できる場合には、複数のアプリケーションでパーティションを共用する場合にも、上で述べたような方式でＩＯＰＳ非保証アプリケーションの上限ＩＯＰＳを算出すれば、帯域保証を行うことができるようになる。
【００６２】
また、複数の記憶装置が存在する場合には、記憶装置毎に処理を行えばよい。
【００６３】
なお、上で述べたコンピュータ１００及び３００は、コンピュータ装置であって、図１４に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６４】
以上述べた本実施の形態をまとめると以下のようになる。
【００６５】
本技術の実施の形態に係る制御方法は、（Ａ）第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得するステップと、（Ｂ）取得した第１のモニタ結果から、ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断するステップと、（Ｃ）イベントが発生したと判断された場合には、第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知するステップと、（Ｄ）記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得するステップと、（Ｅ）少なくとも取得した第２のモニタ結果に基づき、第１の指標の値を更新するステップと、（Ｆ）取得した第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した第１の指標の値となるように、単位時間あたりの第４のアクセス数を算出するステップと、（Ｇ）第４のアクセス数を、制御部に対して通知するステップとを含む。
【００６６】
これによれば、たとえＩＯの発生状況が変化して現在の制御態様を続けられない状況になっても、現在のＩＯの発生状況に応じた態様で、単位時間あたりアクセス数を少なくとも非帯域保証側の制御部で制御するので、動的にＩＯの帯域保証が可能となる。
【００６７】
また、本実施の形態に係る制御方法において、第１の記憶領域が複数の記憶領域を含み、当該複数の記憶領域の各々について単位時間あたりの第３のアクセス数が指定されている場合もある。このような場合、本制御方法は、（Ｈ）複数の記憶領域の各々について、当該記憶領域にアクセスするアプリケーションの単位時間あたりのアクセス数を、単位時間あたりの第３のアクセス数に制限するように、複数の記憶領域の各々の制御部に指示するステップをさらに含むようにしても良い。このようにすれば、３以上の記憶領域が記憶装置に含まれる場合にも対処できる。
【００６８】
また、上で述べた判断するステップが、ビジー率が上限値に達する回数が所定回数に達したか否かを判断するステップを含むようにしても良い。
【００６９】
さらに、上で述べた更新するステップが、ビジー率の上限値を当該ビジー率が上限値に達した場合の単位時間あたりのアクセス数で除することにより得られる値と、前記第２のモニタ結果に含まれる前記ビジー率を前記第２のモニタ結果に含まれる単位時間あたりのアクセス数で除することにより得られる値との差に対して、ビジー率が上限に達した場合の単位時間あたりのアクセス数及び所定の係数を乗ずることで得られる値だけ、第１の指標の値を下げるステップを含むようにしても良い。所定の係数を調整することで、第１の指標の値の理論的な上限値（実施の形態における比例限界ビジー率）に近づけることができるようになる。但し、他の手法を用いて第１の指標値を更新しても良い。
【００７０】
また、本実施の形態に係る制御方法は、（Ｉ）記憶装置のビジー率及び単位時間あたりのアクセス数の第３のモニタ結果を取得するステップと、（Ｊ）取得した第３のモニタ結果から算出される、ビジー率についての第２の指標の値と、当該第２の指標の過去の値の平均値との差が所定値以上である場合には、第１の指標の値を初期値に戻すステップとをさらに含むようにしてもよい。より適切な第１の指標の値を設定することができるようになる。
【００７１】
なお、上記制御方法をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【００７２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７３】
（付記１）
第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得する処理と、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断する処理と、
前記イベントが発生したと判断された場合には、前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知する処理と、
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得する処理と、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新する処理と、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出する処理と、
前記第４のアクセス数を、前記制御部に対して通知する処理と、
を、コンピュータに実行させるためのプログラム。
【００７４】
（付記２）
前記第１の記憶領域が複数の記憶領域を含み、当該複数の記憶領域の各々について単位時間あたりの第３のアクセス数が指定されており、
前記複数の記憶領域の各々について、当該記憶領域にアクセスするアプリケーションの単位時間あたりのアクセス数を、前記単位時間あたりの第３のアクセス数に制限するように、前記複数の記憶領域の各々の制御部に指示する処理
を、さらに前記コンピュータに実行させるための付記１記載のプログラム。
【００７５】
（付記３）
前記判断する処理が、
前記ビジー率が上限値に達する回数が所定回数に達したか否かを判断する処理
を含む付記１又は２記載のプログラム。
【００７６】
（付記４）
前記更新する処理が、
前記ビジー率の上限値を当該ビジー率が上限値に達した場合の単位時間あたりのアクセス数で除することにより得られる値と、前記第２のモニタ結果に含まれる前記ビジー率を前記第２のモニタ結果に含まれる単位時間あたりのアクセス数で除することにより得られる値との差に対して、前記ビジー率が上限に達した場合の単位時間あたりのアクセス数及び所定の係数を乗ずることで得られる値を、前記第１の指標の値から引く処理
を含む付記１乃至３のいずれか１つ記載のプログラム。
【００７７】
（付記５）
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第３のモニタ結果を取得する処理と、
取得した前記第３のモニタ結果から算出される、前記ビジー率についての第２の指標の値と、当該第２の指標の過去の値の平均値との差が所定値以上である場合には、前記第１の指標の値を初期値に戻す処理と、
を、さらに前記コンピュータに実行させるための付記４記載のプログラム。
【００７８】
（付記６）
第１の記憶領域と第２の記憶領域とを備える記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得する処理と、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断する処理と、
前記イベントが発生したと判断された場合には、前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知する処理と、
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得する処理と、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新する処理と、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出する処理と、
前記第４のアクセス数を、前記制御部に対して通知する処理と、
を、コンピュータが実行する制御方法。
【００７９】
（付記７）
第１の記憶領域と第２の記憶領域とを備える記憶装置と、
前記記憶装置における前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部と、
処理部とを有し、
前記処理部が、
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第１のモニタ結果を取得し、
取得した前記第１のモニタ結果から、前記ビジー率についての第１の指標の値を設定し直すイベントが発生したか判断し、
前記イベントが発生したと判断された場合には、前記第２の記憶領域についての単位時間あたりのアクセス数を、通知されたアクセス数以下に制御する制御部に対して、直前に通知された第１のアクセス数より小さい第２のアクセス数を通知し、
前記記憶装置のビジー率及び単位時間あたりのアクセス数の第２のモニタ結果を取得し、
少なくとも取得した前記第２のモニタ結果に基づき、前記第１の指標の値を更新し、
取得した前記第２のモニタ結果に基づき、単位時間あたりの指定された第３のアクセス数に対応するビジー率と、単位時間あたりの第４のアクセス数に対応するビジー率との和が、更新した前記第１の指標の値となるように、前記単位時間あたりの第４のアクセス数を算出し、
前記第４のアクセス数を、前記制御部に対して通知する
コンピュータ。
【符号の説明】
【００８０】
１００，３００  コンピュータ
１１０，３１０  処理プログラム
【図１】
0005853569.tif 000002
【図２】
0005853569.tif 000003
【図３】
0005853569.tif 000004
【図４】
0005853569.tif 000005
【図５】
0005853569.tif 000006
【図６】
0005853569.tif 000007
【図７】
0005853569.tif 000008
【図８】
0005853569.tif 000009
【図９】
0005853569.tif 000010
【図１０】
0005853569.tif 000011
【図１１】
0005853569.tif 000012
【図１２】
0005853569.tif 000013
【図１３】
0005853569.tif 000014
【図１４】
0005853569.tif 000015