以下、本発明の一実施形態を添付図面に基づいて説明する。
{1.物理計算機}
図1に、本発明の仮想計算機システムを動作させる物理計算機130の構成を示す。100〜10nはCPU0〜CPUnを、120〜12kはI/O0〜I/Okを示す。111は主記憶を表し、110はCPU(100〜10n)とI/O(120〜12k)を主記憶111と結合するメモリコントローラを示す。
なお、CPUは1台でも良いし、2台以上であっても良い。CPUが2台以上の場合、各CPU(110〜10n)は主記憶111を共有する密結合型マルチプロセッサであるとする。
140は本物理計算機のコンソールでありI/O0(120)に接続されている。
{2.仮想計算機システム}
図2に本発明を構成する仮想計算機システムの階層図を示す。
物理計算機130上でハイパバイザ200を動作させる。ハイパバイザは物理計算機130を2つ以上の論理区画(LPAR:Logical PARtition)LPAR0(210)〜LPARm(21m)に分割する。LPAR0〜LPARmのそれぞれでOS0(220)〜OSm((22m)を動作させ、各OS上でそれぞれアプリケーション0(230)〜アプリケーションm(23m)を動作させる。
ハイパバイザは、各LPAR(210〜21m)に対して物理計算機130のCPU(100〜10n)、主記憶111、I/O(120〜12k)(計算機資源と呼ぶ)を割当てる。
{3.専用割当と共用割当}
ハイパバイザが計算機資源を各LPARに割当てる方法は、専用割当と共用割当の二種類ある。
専用割当は、特定の計算機資源を特定のLPARに専用的に割当てる方法である。計算機資源のうち、主記憶(111)とI/O(120〜12k)は共用割当される。
なお、CPU(100〜10n)を専用割当にすることもできる。CPUの専用割当の場合、あるLPARに対して専用割当するCPUの数をそのLPARに対するCPUの割当量と呼ぶ。
一方、共用割当は、計算機資源を各LPARに少しづつ時分割によって割り当てる。この共用割当は、CPUに対してのみ行われる。あるLPARに対しCPUを割当てている時間の、全LPARにCPUを割当てている時間に対する割合を、CPU割当率と呼ぶ(%で表す。値は0〜100の間)。
このように、専用割当は量を単位とするが、共用割当は率を単位とする。しかし、専用割当において、あるLPARに専用割当するCPU数の全CPU数k+1に対する割合をCPU割当率(%で表現する。値は0〜100の間)とすれば、専用割当も共用割当も同様に率を単位として割当を指示することができる。
例えば、2つのCPU(CPU0とCPU1)を持つ物理計算機を2つのLPAR(LPAR0と1)に分割して使用する場合、LPAR0とLPAR1に対するCPUの割当率をそれぞれ50%とすると、空間分割では各LPARに対しCPUが一つづつ割当てられ、時間分割では2つのCPUを同一の時間(タイムスライス)だけLPAR0とLPAR1に交互に割当てるという意味になり、どちらの場合にも適用できる。
ただし、空間分割では割当率はCPUの台数によって規格化されてしまうが(例えば2CPUの場合の割当率は0%、50%、100%のいずれか)、時間分割にはそのような制約はなく、割当率を0〜100%の範囲で自由に指定できる。
従って以後の説明では、割当率に制約の無い時間分割を割当方法として考えるが、空間分割の場合も割当率に制約を設けることによって適用できる。
また、以下の説明では各LPARに対して動的に配分する計算機資源は、CPU(100〜10n)のみであるとする。主記憶111やI/O装置(120〜12k)に対する動的配分もCPUの場合と同様である。
{4.計算機資源の動的割当変更}
ハイパバイザ200は予めシステム運用前に設定された各LPAR(210〜21m)に対する計算機資源の割当率に従って、各LPARに対して計算機資源を割当てる。
管理者(オペレータ)が物理計算機のコンソール140から割当率を変更すると、ハイパバイザ200は各LPAR(210〜21m)に対する計算機資源の割当率を変更する。
あるいは、ハイパバイザ内に設定されたスケジュールに従い、設定された時刻が来ると割当率を変更する。
これらの変更方法に加えて、本発明では各LPAR(210〜21m)上のOS(220〜22m)の上で動作するアプリケーションからハイパバイザに対して資源割当変更命令を発行し、資源割当変更命令を受けたハイパバイザは即座にその要求に答えて割当変更を行う機能を設ける。
この機能は、OS上のアプリケーションから、ハイパバイザのコードをフックする仕組みを実装することによって、容易に実現することができる。
{5.構成}
図3に本発明を適用した仮想計算機システムの機能モジュールの構成を示す。
本発明の仮想計算機システムは、上記図2の一部に示した仮想計算機の機能モジュールに、負荷計測部0(400)〜負荷計測部m(40m)と、適応制御部300、および、ユーザインタフェース1000を加えた構成になっている。
{5.1負荷計測部}
負荷計測部0(400)〜負荷計測部m(40m)は、LPAR0(200)〜LPARm(21m)上で動作するOS0(220)〜OSm(22m)の上で動作するアプリケーションであり、OS0(220)〜OSm(22m)の負荷を計測する。
負荷計測部0(400)〜負荷計測部m(40m)はOS0(220)〜OSm(22m)の負荷計測ライブラリを呼び出し、CPU使用率、メモリ使用率、ディスク使用率(ビジー率)、ネットワーク使用率(ビジー率)などの負荷を取得(530〜53m)する。
これら負荷の値は%を単位とし、範囲は0〜100とする。負荷計測部0(400)〜負荷計測部m(40m)は、後述するユーザインタフェース1000から計測すべき負荷の種類や制御インターバルの設定情報を受け取り(540〜54m)、その設定情報に基づいて負荷を計測する。負荷計測部0〜負荷計測部mがそれぞれ計測したOS0〜OSmの負荷L0〜Lmは適応制御部300に送られる(520〜52m)。
{5.2適応制御部}
適応制御部300は、OS上のアプリケーションとしてOS0(220)〜OSm(22m)のいずれかに搭載する。適応制御部300は520〜52mで負荷計測部0(400)〜負荷計測部m(40m)のそれぞれからOS0(220)〜OSm(22m)の負荷L0〜Lmを受取り、LPAR0(210)〜LPARm(21m)に対する計算機資源の割当率を求め、割当率が前回の割当率と異なる場合は、ハイパバイザ200に対し資源割当変更命令502を発行する。
各負荷計測部(400〜40m)と適応制御部300との間のやり取りは、ソケット通信等の公知技術を用いる。あるいは、これも公知であるが、ハイパバイザ200を経由して各LPAR0(210)〜LPARm(21m)上のOS0(220)〜OSm(22m)同士が通信するLPAR間通信技術を用いても良い。
適応制御部300は、後述するユーザインタフェース1000から計算機資源の割当率の決定方法に関する様々な設定情報を受け取り(507)、この設定情報に従い計測負荷L0〜Lmから各LPAR(210〜21m)に対するCPUの割当率S0〜Smを求める。なお、各LPAR0〜LPARmに対するCPU割当率S0〜Smの合計S0+S1+・・・+Smは、100%となる。
適応制御部300から資源割当変更命令502を受けたハイパバイザは、LPAR0(210)〜LPARm(21m)に対する計算機資源の割当率をそれぞれS0〜Smに変更する(510〜51m)。
{5.3ユーザインタフェース}
ユーザインタフェース1000は、管理者やユーザが本発明の仮想計算機システムの負荷計測やCPUの割当率の判定に関する様々な設定を指示するためのインタフェース機能と、各OS(220〜22m)の負荷や各LPAR(210〜21m)に割当てるCPUの割当率を管理者やユーザに対して表示するインタフェース機能を備える。
設定情報はユーザインタフェース1000で入力され、各負荷計測部(400〜40m)と適応制御部300に渡される(540〜54m、507)。また、負荷や割当率の情報508は適応制御部300からユーザインタフェース1000に渡され表示される。
ユーザインタフェース1000は、OS0(220)〜OSm(22m)のいずれかの上に搭載する。ユーザインタフェースの入力画面や出力画面(後述)は、ユーザインタフェース1000を搭載したOSの画面上に表示される。ユーザインタフェース1000と負荷計測部(400〜40m)や適応制御部300とのやり取りは、前述のソケット通信やLPAR間通信技術を用いれば良い。
{5.4入力ユーザインタフェース}
図3のユーザインタフェース1000の機能のうち、各種の設定を指定する入力ユーザインタフェース1001の画面イメージを図4に示す。
第1入力項目(適応制御有効設定)1600は負荷適応制御を行うか(適応制御On)行わないかの設定である。1601と1602は二者択一のラジオボタンになっている。負荷適応制御を行う場合は1601を選択し、行わない場合は1602を選択する。
第2入力項目1500は制御インターバルの設定である。入力欄1501に制御インターバルの値を入力する。単位は秒であるが、ミリ秒や分などでも良い。入力欄1501に入力された制御インターバルは、負荷計測部(400〜40m)での負荷計測の間隔、および、適応制御部300での割当率判定の間隔として用いられる。
第3入力項目(計測負荷設定)1400は、負荷計測部(400〜40m)が計測すべきOS(220〜22m)の負荷の種類を示す。1401〜1404は四者択一のラジオボタンになっており、選択されたものが計測の対象となる。1401はCPU使用率を示し、初期設定ではCPU使用率を計測する。チェックボックス1402、1403、1404はそれぞれ、メモリ使用率、ディスク使用率、ネットワーク使用率を示し、選択したチェックボックスには「レ」の印が表示される。
第4入力項目(負荷加工設定)1300は、負荷計測部(400〜40m)が計測した負荷L0〜Lmに対し、どのような加工を施すかの設定を示す。1301、1302、1303は三者択一のラジオボタンになっており、1301を選択すると負荷L0〜Lmに対し加工を施さない。1302を選択すると、負荷L0〜Lmに対し移動平均を施す。移動平均のサンプル数は1304に指定する。入力欄1304はラジオボタン1302を選択した場合にのみ有効となる。また、ラジオボタン1303を選択すると、負荷L0〜Lmに対し規格化を施す。規格化の階数を入力欄1305に指定する。入力欄1305はラジオボタン1303が選択された場合にのみ有効となる。
以後負荷L0〜Lmに対し加工を施して得られた加工負荷を、LA0〜LAmと表す。ラジオボタン1301を選択して負荷に対し加工を施さない場合は、加工負荷は計測した負荷と同じ値とする(LA0=L0、…、LAm=Lm)。移動平均と規格化については後述の(負荷加工処理)で説明する。
第5入力項目(割当率計算設定)1200は、加工負荷LA0〜LAmの値から各LPAR(210〜21m)に対するCPU割当率を求める割当率計算の方法の設定を示す。1201と1202は二者択一のラジオボタンになっている。ラジオボタン1201を選択すると、割当率計算法として比例法を用いる。
ラジオボタン1202を選択すると割当率計算法として閾値法を用いる。閾値法を用いる際の高負荷判定閾値を入力欄1203に、低負荷判定閾値を入力欄1204に指定する。これら入力欄1203、1204は割当率計算法として閾値法が選択された場合にのみ有効となる。
割当率計算によって求めた各LPAR(210〜21m)に対するCPU割当率(仮CPU割当率)をSN0〜SNmと表す。比例法と閾値法については後述の(割当率計算処理)で説明する。
第6入力項目(割当率範囲設定)1100は、各LPAR(210〜21m)に対するCPU割当率の範囲(上限と下限または最大値と最小値)の設定を示す。LPAR毎に割当率の上限(1110〜111m)と下限(1120〜112m)を指定する。上限、下限とも0以上100以下の値を取る。割当率計算で求められた各LPAR(210〜21m)に対する仮CPU割当率(SN0〜SNm)は、各上限(1110〜111m)値を超えず下限値(1120〜112m)を下らないように修正される。
仮CPU割当率を修正したものをCPU割当率S0〜Smとする。この上限、下限を設定することにより、割当率の最低限の保証や割当率の最大値の制限を制御できる。本値は主に各LPARを用いる顧客との契約によって定められる。
設定した割当率範囲に基づく割当率の修正処理に関しては後述の(割当率修正処理)で説明する。
1700は1100〜1600で指定した設定を実際に有効にするためのボタンである。例えば、第1入力項目1600で負荷適応制御を行う(適応制御On)には、まず1601を選択し、続いて1700を押して設定を有効にする。
各入力項目1300、1400、1500にそれぞれ指定した設定は、負荷計測部(400〜40m)に渡される。また1100〜1600に指定した全ての設定は適応制御部300にも渡される。負荷計測部(400〜40m)と適応制御部300はこれらの各種設定に従って処理を行う。
管理者は各OS(220〜22m)上で動作するワークロードの性質を考慮して、各入力項目1100〜1600の各種の項目を設定する。
{5.5出力ユーザインタフェース}
ユーザインタフェース1000の機能のうち、各LPAR(210〜21m)の負荷やCPU割当率を表示する出力ユーザインタフェース1002の画面イメージを図5に示す。
表示欄1800〜180mは各LPAR(210〜21m)毎の負荷の時系列を示す。負荷は各負荷計測部(400〜40m)が計測した負荷L0〜Lmであっても良いし、負荷L0〜Lmに対し加工を施した加工負荷LA0〜LAmであっても良い。その両方を同時に表示しても良い。どちらの負荷を表示するかユーザが指定できるようになっていても良い。
表示欄1810は各LPAR(210〜21m)に対するCPU割当率の時系列を示す。全てのLPAR(210〜21m)のCPU割当率を合計すると100%となる。ある時刻におけるLPARiに対するCPU割当率は、1810のグラフ内のLPARiに相当する部分の縦方向の長さで表される。
表示欄1820は割当変更が発生した時刻と、割当変更の理由を逐一表示する。
出力ユーザインタフェース1002は、適応制御部300から負荷や割当率の情報508を取得し、それを上記図5のように表示する。
本発明の仮想計算機を管理する管理者は、出力インタフェース1002を見ることによって、各LPAR(210〜21m)の負荷がどのように変化しているか、適応制御が適切に動作しているかなどの情報を得ることができる。管理者はこの情報を負荷適応制御の設定にフィードバックすることにより、仮想計算機をより効率的に動作させることができる。
{5.6適応制御処理}
以下では本発明の仮想計算機システムにおける適応制御処理について、図6から図14のフローチャートを用いて説明する。
図6に負荷適応制御処理の概要を示す。負荷適応制御処理は、まず2001において図4の入力インタフェース1001で指定された設定を読み込む。設定の読み込みは負荷計測部(400〜40m)および適応制御部300で行われる。
次に2002において負荷の計測を行う。負荷計測は負荷計測部(400〜40m)にて行われる。
次に2003において、入力ユーザインタフェースにて指定された負荷適応制御(1600)を行うかどうかの設定を調べ、負荷適応制御を行う設定になっていれば2004以降で負荷適応制御を行い、そうでない場合は処理を終了する。
2004では各LPAR(210〜21m)に対するCPU割当率S0〜Smを決定し、2005において、決定した割当率の一つ以上が前回の割当率SO0〜SOmと異なる場合、2006においてハイパバイザ200に対しCPUの割当率を変更するように資源割当変更命令を発行して割当を変更し、処理を終了する。割当率が前回の割当率とまったく同じなら、資源割当変更命令を発行せずに処理を終了する。2003〜2006の割当変更指示までの処理は適応制御部300にて行われる。
本発明の仮想計算機システムは、図6に示した一連の処理を制御インターバル間隔で繰り返し行う。制御インターバルは入力インタフェース1001の1501に指定された値である。
{5.7負荷計測処理}
図6の適応制御処理の内、負荷計測処理2002の詳細を図7に示す。負荷計測処理は負荷計測部(400〜40m)毎に行われ、入力ユーザインタフェース1001の計測負荷種類1400で指定された負荷の種類に従って各OS(220〜22m)の負荷L0〜Lmを計測する。
すなわち、LPARiにおいては、2007で計測負荷種類がCPU使用率である場合は、2008でCPU使用率を計測し、得られた値を負荷Liとする。
そうでなく、2009で計測負荷種類がメモリ使用率であれば、2010でメモリ使用率を計測し、得られた値を負荷Liとする。
そうでなく、2011で計測負荷種類がディスク使用率であれば、2012でディスク使用率を計測し、得られた値を負荷Liとする。
そうでなく、2013で計測負荷種類がネットワーク使用率であれば、2014でネットワーク使用率を計測し、得られた値をLiとする。各種の使用率の計測はOS(220〜22m)が備える負荷計測ライブラリ等を用いる。ここで、ネットワーク使用率とは、例えば、接続数、リクエスト数などであり、適宜設定されるものである。
{5.8割当率決定処理}
図6の適応制御処理の中の割当率決定処理2004の詳細を図8に示す。割当率決定処理は、まず2020において負荷計測処理によって計測された各OS(220〜22m)の負荷L0〜Lmに対し加工を施し加工負荷LA0〜LAmを求める。
そして2021において、加工負荷LA0〜LAmに基づいて、LPAR0(210)〜LPARm(21m)に対する仮CPU割当率SN0〜SNmを求める(割当率計算)。
そして2022で、仮CPU割当率SN0〜SNmが入力ユーザインタフェース1001によって指定されたLPAR毎の割当率範囲の上限(1110〜111m)と下限(1120〜112m)の間に収まるように仮CPU割当率SN0〜SNmを修正してCPU割当率S0〜Smを求め、処理を終了する。
{5.9負荷加工処理}
図8の割当率決定処理の中の負荷加工処理2020の詳細を図9に示す。
まず、入力ユーザインタフェース1001の1300において負荷加工を施さない設定(無変換)が選択された場合を2030でチェックし、加工を施さない場合は2031において、負荷L0〜Lmをそのまま加工負荷LA0〜LAmとし(LA0=L0、…、LAm=Lm)、処理を終了する。
一方、加工を施す場合は2032において、加工の種類が移動平均法であるかどうかを判定し、移動平均法であれば、2033において、負荷に移動平均を施す。
移動平均は、負荷計測部(400〜40m)が計測した負荷L0〜Lmの過去の値を保存しておく。保存する数は、入力ユーザインタフェース1001の負荷加工設定1300の1304に指定されたサンプル数(Sと表す)から1を引いたS−1個である。
ここで、k個前(0<k<S)のLPARi上のOSiの負荷LiをLi(k)と表す。OSi毎に負荷Li(S−1)、…、Li(1)を保存しておくことになる。移動平均はOS毎に最新の負荷Liを含めたS個の負荷系列Li(0)、Li(1)、…、Li(S−1)の平均値を求める。そして求めた値を加工負荷LAiとする。すなわち、LAi = (Li(0)+Li(1)+…+Li(S−1))/Sとなる。この計算をすべてのOS(LPAR)について行いLA0〜LAmを求め処理を終了する。
一方、加工方法として規格化法が選択された場合は、2034において、OSiの負荷Liに対して規格化を施す。
規格化は、値を予め設定された飛び飛びの値のいずれかに合わせる。規格化の階数は入力ユーザインタフェース1001の負荷加工設定1300の1305(階数)に指定された値(N)とする。
OSiの負荷Liに対し、階数Nの規格化を施して得られた加工負荷LAiは、LAi=(floor(Li×N/100)+1)×100/Nから求める。この計算をすべてのOS(LPAR)について行い、加工負荷LA0〜LAmを求め処理を終了する。
なお、負荷の加工はOS(220〜22m)毎に負荷計測部(400〜40m)で行っても良いし、適応制御部300でまとめて行っても良い。負荷計測部で行う場合は、負荷計測部(400〜40m)から適応制御部300に送る値520〜52mは加工負荷LA0〜LAmである。
適応制御部300で負荷加工を行う場合は、負荷計測部(400〜40m)から適応制御部300に送る値520〜52mは負荷L0〜Lmである。
{5.10割当率計算処理}
図8の割当率決定処理の中の割当率計算処理2021の詳細を図10に示す。 まず2040において、入力インタフェース1001の割当率計算設定1200で比例法が選択されたか、閾値法が選択されたか調べ、比例法であれば2042〜2045の処理を行う。
(5.10.1 比例法の処理)
2042でループカウンタiを0に初期化し、2043ではループカウンタiの値がmより大きくなるまで、2044と2045の処理を繰り返し行う。
2044では、加工負荷LA0〜LAmに基づき仮CPU割当率SNiを求める。2044の計算でΣLAiは、全ての加工負荷LA0〜LAmの和を示す。
SNi:=100LAi/ΣLAi
は、全加工負荷値の和に対するOSiの加工負荷LAiの割合をパーセントで表したものであり、LPARiに対するCPU割当率SNiは、OSiの加工負荷LAiに比例した値となる。
2045では、ループカウンタiを1だけインクリメントし、2043に戻る。2043から2045の一連の処理が繰り返し行われ、LPAR0(210)〜LPARm(21m)に対する仮CPU割当率SN0〜SNmが求まり、処理を終了する。
(5.10.2 閾値法の処理)
一方、割当計算方法が閾値法の場合は2041を実行する。2041の詳細は図11のようになっている。
まず、2050においてループカウンタiを0に初期化し、2051においてループカウンタiがmより大きくなるまで2052以降の処理を繰り返す。2052では、OSiの加工負荷LAiが入力ユーザインタフェース1001の割当率計算方法設定1200の閾値法の1203に指定された高負荷判定閾値THの値より大きく(LAi>TH)、かつOSiが高負荷状態にあることを示すフラグHiが立っていなければ(Hi=0)、つまりこれまで低負荷状態であったが負荷が上がった場合、2053に進んでOSiが高負荷状態になった場合の処理を行う。
すなわち、2053では仮CPU割当率SNiを100−(100−SPi)Loi/Bとする。ここで、SPiはLPARiに対する前回の負荷適応制御で求めたCPU割当率を示す。またLoiは、OSi以外の各OSjの加工負荷LAjの和を示す。Bは低負荷状態のLPAR上のOSの負荷を高くしていく上限値を示す。
現在OSi以外のOSの負荷の合計はLoiであり、このとき、LPARi以外のLPARに対するCPU割当率は(100−SPi)である。
現在OSiの負荷が高いので、OSiが動作するLPARi以外のLPARに対するCPU割当率を削減し、LPARiに対するCPU割当率を増加させたい。
そこで、LPARi以外のLPARに対するCPU割当率を、LPARi以外のLPARで動作するOSの合計負荷がBになるように減らし、減らした分をLPARiに対するCPU割当率に加える。
この計算を式で表すと、
SNi := 100−(100−SPi)Loi/B
と表される。また、SNiを計算すると同時に、OSiが高負荷状態であることを示すフラグHiを1にセットする。またループカウンタjを0にセットする。
2053は高負荷状態になったOSiに対する仮CPU割当率の計算であったが、2054〜2057はOSi以外のLPARにいてCPU割当率を減らす計算を示す。
すなわち、2054ではjがmより大きくなるまで2055〜2057の処理を繰り返す。2055では、LPARiに対する仮CPU割当率SNiはすでに2053で計算済みなので、jがiである場合を判定し、j=iなら2056の処理を行わない。
2056では、LPARi以外のLPARに対する仮CPU割当率SNjを計算する。計算方法は、LPARiに対する仮CPU割当率を除いた(100から引いた)値をLPARi以外のLPARの数で割ることによって求める。これを式で表すと、
SNj:= (100−SPi)Loi/(B*m)
となる。
2057ではループカウンタjを1だけインクリメントして、2054に戻る。2054のループを抜けると、各LPAR(210〜21m)に対する仮CPU割当率SNjが全て求まり、処理が終了する。
一方、2052において加工負荷LAiの値が高負荷判定閾値THを超えないか、または、高負荷状態を示すHiフラグが立っている(Hi=1)場合は、2058以降の処理を行う。
2058では、加工負荷LAiが低負荷判定閾値TLより小さく、かつOSiが高負荷状態であることを示すフラグHiが立っている状態、すなわち、これまで高負荷状態であったが負荷が下がった場合、どのLPARも平等なCPU割当率となるように割当率を計算する。
つまり、2059でループカウンタjを0に初期化し、OSiが高負荷状態であることを示すフラグを下ろし(Hi:=0)、2060でループカウンタjがmとなるまで繰り返し2061を行う。2061では、LPARjの仮CPU割当率SNjを100/mとし、ループカウンタを1インクリメントして2060に戻る。2060の条件判定が真となってループを抜けると、各LPAR(210〜21m)に対する仮CPU割当率SN0〜SNmはすべて100/mとなり、処理を終了する。
また、2058においてOSiの加工負荷LAiが、低負荷判定閾値より大きいかあるいはOSiが高負荷状態でない(Hi=0)場合は、2062でループカウンタiを1だけインクリメントし、2051に戻る。
2051で条件が真となると、いずれのOS(220〜22m)においても、2052や2058の条件を満足する(真となる)ような負荷の変化はないため、2063以降でLPARjに対する仮CPU割当率SNjの値を、一回前の適応制御の際に求めたLPARjに対するCPU割当率SPjの値とする(SNj:=SPj)ことを各LPAR(210〜21m)について行い(2063、2064、2065)、処理を終了する。
{5.11割当率修正処理}
図8の割当率決定処理に示した割当率修正処理2022の詳細を図12、図13、図14に示す。
まず、図12の2071〜2078において、LPARiに対する仮CPU割当率SNiの値が、入力ユーザインタフェース1001の割当率範囲設定1100で指定されるLPARi(21i)に対する割当率の上限MaxSi(111i)と下限MinSi(112i)の間に入っているかどうか調べ(MinSi ≦ SNi ≦ MaxSi)、この上限と下限に入っていない場合には、SNiに対して、
MinSi ≦ SNi+di ≦ MaxSi
を満足する最小限のdiの値を求める。
すなわち2071においてループカウンタiを0に初期化し、2072においてiがmより大きくなるまで2073〜2078の処理を繰り返し行う。2073は仮CPU割当率SNiがMaxSiより大きな値か調べ、もし大きければ2074でdiの値をMaxSi−SNiから求める(diは負の値)。
もし2073でSNiがMaxSi以下である場合は、2075において仮CPU割当率SNiがMinSiより小さいか調べ、小さい場合は2076でdiの値をMinSi‐SNiから求める(diは正の値)。
2075において、SNiがMaxSi以上である場合は、MinSi≦SNi≦MaxSiを満足するから、2077においてdiを0とする。2074、2076、2077のいずれかによってdiの値が求まると、2078においてループカウンタiの値を1インクリメントし、2072に戻る。
2072の条件判定が真となれば、各LPAR(210〜21m)に対するdiが求まっている。
求めたdiの値を、SNiに加えてCPU割当率Siとすれば(Si:=SNi+di)、いずれのLPARに対するCPU割当率Siも、
MinSi≦Si≦MaxSi
を満足する。
しかし、diによって仮CPU割当率を増減しているため、ΣSiが100%とならない可能性がある。
そこで、2079以降で、Siが上限MaxSiと下限MinSiの範囲を満足しつつ、ΣSi=100となるようにSiの値を修正する。
2079ではΣdi(diをi=0〜i=mまで合計した値)が正であるか調べ、正であった場合は、2080においてdiの値が0以下となるようなdiの個数をxmとして図13の2082以降を実行する。
2079でΣdiが0以下であった場合は、2081においてdiの値が0以上となるようなdiの個数をxpとして図14の2101以降を実行する。
図13の2082ではループカウンタjを0に初期化し、2083でjがmより大きいか、Σdiの値が0となるまで、2084〜2089を繰り返し行う。
CPU割当率計算処理によって求められた仮CPU割当率SNiの合計ΣSNiは100%となるように求められているので、Σdiが正であるということは、Σ(SNi+di)>100%となる。
そこで、一部のLPARに対するCPU割当率を、より小さな値にするように修正しなければならない。diが0より大きな値になっているということは、仮CPU割当率SNjそのものはMinSjより小さな値であり、従ってSNj + diはMinSjとなるから、このLPARに対するCPU割当率を小さくするわけには行かない。
つまりCPU割当率の値を小さく修正する対象は、diが0以下の場合についてということになる。そこで2084において、diの値が0以下であるものについてのみ2085〜2089の処理を行っている。
さて、割当率をどれだけ小さくするかは、最終的なCPU割当率の合計が100%となるようにすれば良い。そこで、割当率が100%を超える分Σdjを、割当率を修正できる対象の数xmで等分したΣdj/xmを修正対象から引いて修正する。ただし、SNj+di−Σdj/xmが逆にMinSjより小さくなってはならないので、これを2085において判断する。小さくならない場合は、2086において新たに、
dj:=dj−Σdj/xm
とする。
一方、SNj+di−Σdj/xmがMinSjより小さい場合は、2087において、CPU割当率がMinSjとなるように、新たに、
dj:=MinSj−SNj
とする。djの値を修正すると2088においてxmを1だけデクリメントし、2089でループカウンタjを1だけインクリメントして2083に戻る。
2083の条件判定が真となってループを終了すると、修正されたdjが求まっている。そこで、2090〜2092においてLPARiに対する最終的なCPU割当率Siを、
Sk := SNk+dk
より計算して求め、処理を終了する。なお、2092では、カウンタkを1だけインクリメントする。
次に、図14の2101ではループカウンタjを0に初期化し、2102でjがmより大きいか、Σdiの値が0となるまで、2103〜2108を繰り返し行う。
CPU割当率計算処理によって求められた仮CPU割当率SNiの合計ΣSNiは、100%となるように求められているので、Σdiが負であるということは、Σ(SNi+di)<100%となる。
そこで、一部のCPU割当率をより大きな値にするように修正しなければならない。diが0より小さな値になっているということは、仮CPU割当率SNjそのものはMaxSjより大きな値であり、従ってSNj+diはMaxSjとなるから、このLPARに対するCPU割当率を大きくするわけには行かない。
つまりCPU割当率の値を大きな値に修正する対象はdiが0以上の場合についてということになる。
そこで2103において、diの値が0以上であるものについてのみ2104〜2107の処理を行っている。
さて、割当率をどれだけ大きくするかは、最終的なCPU割当率の合計が100%となるようにすれば良い。そこで、割当率が100%を下回る分Σdjを、割当率を修正できる対象の数xpで等分したΣdj/xpを修正対象から引いて(Σdj/xpは負の値なので)修正する。
ただし、SNj+di−Σdj/xpが逆にMaxSjより大きくなってはならないので、これを2104において判断する。大きくならない場合は、2105において新たに、
dj:=dj−Σdj/xp
とする。
一方大きい場合は、2106において、CPU割当率がMaxSjとなるように、新たに、
dj:=MaxSj−SNj
とする。djの値を修正すると2107においてxpを1だけデクリメントし、2108においてループカウンタjを1だけインクリメントして2102に戻る。
2102の条件判定が真となってループを終了すると、修正されたdjが求まっている。そこで、上記2090〜2092(図13)においてLPARiに対する最終的なCPU割当率Siを、
Si:=SNi+di
より計算して求め、処理を終了する。
{6.全体的な作用}
以上の処理により、各LPAR上のOS上で実行されるアプリケーション(サービス、デーモンを含む)のワークロード性質(定常時の負荷、ピーク時の負荷、ピーク幅などの特性)に応じて、入力ユーザインタフェース1001で各LPARの計測負荷種類を適宜選択し、また、適切な制御インターバル1500を設定することにより、ワークロードの急増(ピークの発生)に対して適切な割当率の変更を行うことが可能となって、各LPARに対する計算機資源の適切な割当の自動化を実現できるのである。
例えば、LPARaのOSa上でWebサーバが稼動し、LPARb上のOSb上でデータベースサーバが稼動している場合、各LPARのCPU使用率が同等であったとしても、負荷が掛かる部分が異なり(ワークロード特性)、Webサーバでは、負荷の増大はネットワーク使用率の増大が伴い、データベースサーバでは、負荷の増大はディスク使用率(またはキャッシュ用のメモリ使用率)が増大するという特性がある。
そこで、管理者は、入力ユーザインタフェース1001で、各LPARiのOSi上で稼動するアプリケーションのワークロード特性に応じて、計測負荷種類を決定すればよく、上記の例では、Webサーバが稼動するLPARaではネットワーク使用率を選択し、データベースサーバが稼動するLPARbではディスク使用率を選択することで、負荷の種類と大きさに応じた計算機資源の動的な割当率変更を適切に行うことが可能となるのである。
特に、Webサーバ等では、負荷のピークが現れる時刻等を予測するのが非常に難しいため、本発明のように、ワークロード特性に応じて適宜負荷計測の種類を選択して適応制御を行うことにより、負荷の増減に応じた計算機資源の割当率変更を自動的かつ適切に行うことが可能となるのである。
また、入力ユーザインタフェース1001では、計測した負荷の加工について、無変換、移動平均、規格化のいずれかを選択するようにしたので、各LPARのピークの発生状況などに応じたチューニング(最適化)を行うことが可能となる。
つまり、負荷加工で無変換を選択すれば、計算機資源の動的な割当率変更が、負荷変動に対してリニアに応答可能となり、移動平均を選択した場合には、負荷の微小な変動に対して割当率の変更が頻繁になるのを抑制して、割当率変更に伴うオーバーヘッドを低減できるとともに、制御インターバル及びサンプル数との組み合わせで幅広いチューニング(最適化)を行うことができ、あるいは、規格化を選択した場合では、負荷の微小な変動に対して割当率の頻繁な変更を抑制して、割当率変更に伴うオーバーヘッドを低減でき、制御インターバル及び規格化の階層数の組み合わせに応じて幅広いチューニングを行うことができる。
さらに、割当変換(割当率計算)1200では、比例法と閾値法を選択可能としたので、負荷変動に対してリニアに応答する必要がある場合では比例法を適用し、負荷の微小な変動に対して割当率の頻繁な変更を抑制したい場合には閾値法を用いることで、頻繁な割当率変更に伴うオーバーヘッドを低減でき、さらに高負荷、低負荷の閾値に応じて幅広いチューニング(最適化)を行うことができる。
また、出力ユーザインタフェース1002により、各LPARi毎の負荷と時刻の関係と、割当率変更の内容を時系列的に表示するようにしたので、負荷変動に対してどのように計算機資源の割当率が変更されたのかをユーザ(管理者)に知らせることができ、管理者はこの負荷と割当率の履歴に基づいて、入力ユーザインタフェース1001で設定する各種パラメータの検討を行い、各LPARi毎に最適なチューニングを行うことが可能となる。
図15は第2の実施形態を示し、前記第1実施形態の一部を変更し、ユーザインタフェース1000を搭載するLPARを独立させたものである。
以下、前記第1実施形態との相違点についてのみ説明する。
図15は、前記1実施形態の図3に示したLPAR0(210)〜LPARm(21m)以外に管理目的のLPAR(LPARx)を設け、この上でOSxを動作させ、このOSx上に適応制御部300とユーザインタフェース1000を搭載する。
ユーザインタフェース1000の入力画面や出力画面はOSxの画面上に表示される。また、OSx上には負荷計測部は搭載しない。各負荷計測部(400〜40m)と適応制御部300とユーザインタフェース1000との間のやり取りは、ソケット通信やLPAR間通信技術を用いる。その他は前記第1実施形態と同様である。
この例では、適応制御部300及びユーザインタフェース1000が管理用のLPARx(22x)上で稼動するため、他のLPAR0〜mではLPARの動的な割当率変更に要する計算機資源が不要となって、各OS0〜mは負荷計測部400〜40mの処理を除いてアプリケーションの実行に専念でき、各LPARの利用効率を向上させることが可能となる。
図16は第3の実施形態を示し、前記第1実施形態の一部を変更し、適応制御部300とユーザインタフェース1000をハイパバイザ200の内部に設けたものである。
以下、前記第1実施形態との相違点についてのみ説明する。
図16は、前記実施形態1の図3に示した適応制御部300とユーザインタフェース1000を、ハイパバイザ200の内部に設けたものである。ユーザインタフェース1000の入力画面や出力画面は物理計算機130のコンソール140に表示される。
各負荷計測部(400〜40m)と適応制御部300やユーザインタフェース1000とのやり取りはLPAR間通信で用いられる共有メモリを介して行う。また、適応制御部300とユーザインタフェース1000との間のやり取りはハイパバイザ200の内部メモリを用いれば良い。その他の構成は前記第1実施形態と同様である。
図17は第4の実施形態を示し、前記第1実施形態のユーザインタフェースの一部変を更したものである。
以下、前記第1実施形態との相違点についてのみ説明する。
図17の入力ユーザインタフェース1003は、前記第1実施形態の図4に示した入力ユーザインタフェースに、Saveボタン1701とRestoreボタンを加えたもので、その他の構成は、前記第1実施形態の図4と同様である。
この入力ユーザインタフェース1003は、表示領域の下部にSaveボタン1701とRestoreボタン1702を付け加えたものである。
Saveボタン1701を押す(クリックする)と、入力項目1100〜1600で指定された各種の設定を、予め設定したディスク上の設定保存ファイルに書き出す。Restoreボタン1702を押すと、設定を保存している上記設定保存ファイルを読み出し、入力項目1100〜1600を保存された時点の設定に復元する。
これにより、管理者は本発明の仮想計算機システムを起動するたびに、設定を入力ユーザインタフェース1003から入力する必要がなくなり、設定保存ファイルを呼び出すだけで保存されていた設定を復元できる。
図18は、第5の実施形態を示し、前記第1実施形態のユーザインタフェースの出力インタフェース(出力部)を変更して、ログ記録部1004としたもので、その他の構成は前記第1実施形態と同様である。以下、前記第1実施形態との相違点についてのみ説明する。
図18のログ記録部1004は、前記第1実施形態のOS0(210)〜OSm(22m)の何れかの上に搭載する。
ログ記録部1004は、適応制御部300から各OS(220〜22m)の負荷L0〜Lm又は加工負荷LA0〜LAmと、各LPAR(210〜21m)に対するCPU割当率S0〜Smおよび、割当変更がなされた際の変更理由を一定時間毎に受け取り、それらを時系列としてログファイル1005に書き出す。
管理者は、このログファイル1005を参照することにより、負荷変動に対してどのように計算機資源の割当率が変更されたのかを知ることができ、管理者はこの負荷と割当率の履歴に基づいて、入力ユーザインタフェース1001で設定する各種パラメータの検討を行って、各LPARi毎に最適なチューニングを行うことが可能となる。
なお、このログ記録部1004を前記第2実施形態に適用する場合では、ログ記録部1004を適応制御部300を搭載した管理LPAR(LPARx)上に搭載する。
また、同じく前記第3実施形態に適用する場合は、ハイパバイザ200の内部にログ記録部1004が設けられる。
図19は、第6の実施形態を示し、前記第1実施形態のユーザインタフェース1000に、各LPARを利用する顧客に対して提供する契約ユーザインタフェースを付加したもので、その他の構成は、前記第1実施形態と同様である。
契約ユーザインタフェース0(3000)〜契約ユーザインタフェースm(300m)は、それぞれ、LPAR0(210)〜LPARm(21m)に対応して設けられている。
本実施形態の仮想計算機においは、契約を結んだ顧客毎にLPARを用意し、顧客はインターネット(またはネットワーク)を介して、その顧客に割当てられたLPARにアクセスして処理を行う。したがって、契約ユーザインタフェース(3000〜300m)は契約を結んだ顧客の計算機の画面(表示手段)上に表示される。
契約ユーザインタフェース0(3000)は、入力データ600と出力データ610によってユーザインタフェース1000と接続されている。また契約ユーザインタフェースm(300m)は、入力データ60mと出力データ61mによってユーザインタフェース1000と接続されている。
契約ユーザインタフェース(3000〜300m)は、顧客が契約内容を更新したり、本発明の仮想計算機システムが当該顧客に対して割当てている計算機資源の割当率等のサービス状況の表示などを実行する。
契約ユーザインタフェース(3000〜300m)は、図20に示す契約入力ユーザインタフェース3100と、図21の契約確認ユーザインタフェース3200から構成される。あるいは、図22の契約出力ユーザインタフェースを含んでも良い。
次に、図20の契約入力ユーザインタフェース3100)について説明する。
図20の契約入力ユーザインタフェースは、契約顧客が契約の内容を変更するためのインタフェースである。ここでの契約内容とは、契約しているLPARに対するCPU割当率の上限3101と下限3102の入力欄である。
顧客は自らに割当てられているLPARに対するCPU割当率の上限と下限を、当該LPAR上で行う処理のワークロードに関する知識を利用しながら、契約入力ユーザインタフェース3100の上限3101と下限3102に指定する。
3103は、図20の3101と3102に入力された割当率の上限と下限(割当率範囲)を有効とする(契約を変更する)ためのボタンである。
変更ボタン3103が押され(クリックされ)ると、入力欄3101と3102で指定された割当率の上限と下限の情報が、図19の入力データ600を介してユーザインタフェース1000の入力ユーザインタフェース1001に送られる。
入力ユーザインタフェース1001は、指定された割当率範囲が妥当なものかを確認し、妥当であれば、入力ユーザインタフェース1001の割当率範囲設定1100の当該LPARiの上限(111i)と下限(112i)に送られてきた上限と下限の値を設定し、図4に示した更新ボタン1700を押したのと同様に設定を有効にする。
割当率範囲が妥当でない場合(他の顧客が下限の値を大きく設定し、当該顧客に対して指定された値を下限に設定できない場合は妥当ではないと判断される。)、送られてきた上限と下限は割当率範囲設定1100には反映されない。
そして、入力ユーザインタフェース1001は、当該顧客の画面に図21の契約確認ユーザインタフェース3200を表示し、先の契約変更が正しく受付けられたかどうかを顧客に通知する。
次に、図21の契約確認ユーザインタフェースについて説明する。
図21の契約確認ユーザインタフェース3200は、顧客が契約入力ユーザインタフェース3100によって指示した契約変更要求が、正しく受付けられたかどうかの確認を顧客に提示するユーザインタフェースである。3201は契約変更の受付け状況を示す。この受付け状況3201は、契約変更要求が正しく受付けられた場合はAcceptedを表示し、正しく受付けられない場合はInvalid等を表示する。
正しく受付けられるためには、契約入力ユーザインタフェース3100から入力ユーザインタフェース1001に送られた割当率範囲が妥当なものである必要がある。
契約内容3202には、契約変更が正しく受付けられた場合には、変更された契約内容が表示され、契約変更が正しく受付けられなかった場合には、その理由が表示される。
次に、図22の契約出力ユーザインタフェースについて説明する。
図22の契約出力ユーザインタフェース3300は、当該顧客に対応したLPARの上で動作するOSの負荷又は加工負荷の時系列(3301)、当該LPARに割当てられている計算機資源の割当率の時系列(3302)、および割当変更が発生した場合の変更理由3303を表示する。前記第1実施形態に示した図5の出力ユーザインタフェース1002とは異なり、ここで表示されるのは、当該顧客が契約して使用しているLPARに関する情報のみであり、他の顧客が契約しているLPARの情報は表示されない。
以上により、各LPARを利用する顧客は、契約ユーザインタフェース3000〜300mにより、利用するLPAR毎の負荷と割当率の変化を時系列に確認できるとともに、契約の範囲内で割当率の変更を行うことが可能となり、顧客は契約内容を常時確認できるようになるとともに、負荷と割当率の変化の履歴に基づいて、自らが割当率を変更することができるため、LPARの利用者に対するサービスの向上を図ることができる。
なお、契約出力ユーザインタフェース3300は、画面(コンソール140)に値を表示するユーザインタフェースであるが、これを前記図18に示したログ記録部1004で置き換えても良い。このときログ記録部1004は、顧客が本発明の仮想計算機にインターネットを介してアクセスする際に使用するアクセス装置(計算機等)に搭載し、ログ記録部1004は顧客のアクセス装置にログファイルを出力するようにしてもよい。
図23は、第7の実施形態を示し、前記第6実施形態の契約入力ユーザインタフェース3100の入力を変更したものであり、その他の構成は前記第6実施形態と同様である。
図23において、契約入力ユーザインタフェース3400は、前記図20の契約入力ユーザインタフェース3100に比べて、指定する内容が抽象的になっており、LPARの利用者の割当率の変更にかかる操作を簡易にするものである。
すなわち、サービスのレベルをS、A、B、Cから選択するために、図中3401〜3404は四者択一のラジオボタンになっており、3401はレベルSの選択を、3402はレベルAの選択を、3403はレベルBの選択を、3404はレベルCの選択を示す。
レベルSは最も性能重視の契約を示す。レベルCは最も価格重視の契約を示す。レベルAは性能重視だが、レベルSほど価格は高くなく、レベルBは価格重視だがレベルCより性能を重視する契約である。どのレベルがどのようなサービスを提供するかは、契約書などの記述に基づくものである。
図中3403は契約変更ボタンであり、このボタンを押すと選択されたサービスレベルが入力ユーザインタフェース1001に送られる。入力ユーザインタフェース1001は、サービスレベルが送られてくると、そのサービスレベルを予め定められたチャート(図示省略)等を参照して、計算機資源の割当率の上限と下限に変換し、それらの値が妥当かどうか判断し(他の顧客と契約したサービスレベルが守れなければ、当該顧客の指示したサービスレベルは妥当でないと判断される)、妥当であれば、入力ユーザインタフェース1001の割当率範囲設定1100の当該LPARiの上限(111i)と下限(112i)に、チャートを参照して得られた上限と下限の値を設定し、1700の更新ボタンを押したのと同様に設定を有効にする。妥当でない場合は、上限と下限の値は割当率範囲設定1100には反映されない。
契約入力ユーザインタフェース3400によって契約内容の変更指示が発行され、それに対して、入力ユーザインタフェース1001が顧客画面に出力する契約確認ユーザインタフェース3200は、前記第6実施形態の場合と同様である。また、契約出力ユーザインタフェース3300についても前記第6実施形態と同様である。
なお、負荷計測手段が計測した負荷または適応制御手段が決定した各論理区画に対する計算機資源の割当率とを出力する出力ユーザインタフェースを有し、該出力ユーザインタフェースは、前記負荷計測手段が計測した各LPAR上のOSの負荷と該適応制御手段が決定した各LPARに対する計算機資源の割当率を時系列として表示することを特徴とする仮想計算機システムであってもよい。
また、負荷計測手段が計測した負荷または該適応制御手段が決定した各論理区画に対する計算機資源の割当率とを出力する出力ユーザインタフェースを有し、適応制御手段が各LPARに対する計算機資源の割当率を変更すると、前記出力ユーザインタフェースは当該変更の理由を表示することを特徴とする仮想計算機システムとしてもよい。
また、物理計算機を複数のLPARに分割し、各LPAR上でそれぞれOSが動作させ、各LPARに対する物理計算機の資源の割当を制御するハイパバイザを有する仮想計算機システムであって、各LPAR上のOSの負荷を計測する負荷計測手段と、該負荷計測手段によって計測された各LPAR上のOSの負荷に基づいて、各LPARに割当てる計算機資源の割当率を決定し、該割当率がこれまで割り当ててきた割当率と異なる場合は、ハイパバイザに対し資源の割当率変更を指示する適応制御手段と、前記負荷計測手段が計測した負荷と適応制御手段が決定した各LPARに対する計算機資源の割当率を時系列としてファイル(ログファイル)に記録するログ記録手段を有し、前記ハイパバイザは該適応制御手段からの指示に従って各LPARに対する計算機資源の割当率を動的に変更する手段を設けたことを特徴とする仮想計算機システムとしてもよく、さらに、前記ログ記録手段は、適応制御手段が各LPARに対する計算機資源の割当率を変更した履歴をログファイルに記録することを特徴とする仮想計算機システムとしてもよい。
また、各顧客毎に契約条件を設定する契約ユーザインタフェースとを設け、該契約ユーザインタフェースに、顧客に割当られた論理区画上のOSの負荷や論理区画に対する計算機資源の割当率や割当率の切り替え理由を時系列的に顧客の計算機の画面に表示する手段を設けたことを特徴とする仮想計算機システムであっても良い。
また、ユーザインタフェースには、指定された設定を設定ファイルに書き出す手段と、該設定ファイルを読みこんで該設定ファイルに保存されていた設定を該ユーザインタフェース上に復元する手段を設けたことを特徴とする仮想計算機システムとしてもよい。
今回開示した実施の形態は、全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び内容の範囲での全ての変更が含まれることが意図される。