第 4 章 最大クライアント数の自動設定 23
4.3 最大クライアント数の設定機構
経過時間
標準偏差
180秒 prev
(前回設定完了時点の 推定標準偏差)
sd_reg
(現在の推定標準偏差)
現在時刻 前回設定完了時刻
本機構は回帰直線から推定標準偏差を計算する.
回帰直線は時間経過とともに移動する.
推定標準偏差が許容範囲を超えると 最大クライアント数の設定を開始する.
回帰直線 許容範囲
(prev +/- threshold)
図 4.6: ワークロードの変化の検出
ワークロードの変化の検出は,推定された現在の標準偏差の値と前回の最大ク ライアント数設定完了時点での値を比較することで行う.この2つの差がある閾 値を超えると,ワークロードが大きく変化したものとして,最大クライアント数 の設定を開始する.
図 4.7に設定機構全体の擬似コードを示す.関数tune_mc()がワークロードの 変化を検出する.この関数はシステムから1秒ごとに呼び出される.まず,Apache は最大クライアント数の範囲内でプロセス数を増減させるため,全てのプロセスが 使用中でなければその最大クライアント数での標準偏差の値を正確に測定すること はできない.そこで95%以上のプロセスが使用されているかどうかを最初に検出す る(6行).次に,標準偏差の値を回帰直線を利用して推定する(9行).推定した 標準偏差が前回設定完了時点での値と大きく異なっていれば,関数adjust_mc() を呼び出し,最大クライアント数の設定を開始する(11–16行).
4.3.3 最大クライアント数の設定
次に,さまざまな最大クライアント数の値を試行しながら,適切な最大クライ アント数に設定する(12–14行).
まず,適切な値を現在の最大クライアント数値から増加方向に探すか,減少方 向に探すか決める.現在の標準偏差が前回の設定完了地点より小さければ,増加 方向に探索する.反対に,大きければ減少方向に探索する.この手法では,最大ク ライアント数の設定中にワークロードが変わらないと仮定している.一般に,設 定にかかる時間はワークロードが大きく変化する周期に比べて遥かに短いと考え られるため,多くの場合正しく動作することが期待される.
図 4.8(a)に,適切な値を増加方向に探す場合について説明する.最大クライア
ント数を徐々に増加させながら,標準偏差を測定する.回帰直線の傾きが閾値を 超えた場合,標準偏差が大きくなったと判断し,最大クライアント数を現在の値 付近に確定する.図 4.8(b)に,減少方向に探す場合について説明する.最大クラ イアント数を徐々に減少させながら,標準偏差を測定する.標準偏差の傾きが閾 値以下になると,標準偏差が最大クライアント数の値に関わらずほぼ一定になっ たものと判断し,最大クライアント数をこの値付近に確定する.
上で説明した手法で最大クライアント数を確定した時点では,最大クライアン ト数は適切な値とは僅かながら離れている.増加方向に探索した場合は,標準偏 差が増加を始めた後の最大クライアント数の値に設定されており,減少方向に探
1: //tune_mc()– システムから1秒ごとに呼び出される
2: // win: 回帰直線計算用のスライディング・ウィンドウ
3: type Dir = (ASCEND, DESCEND);
4: procedure tune_mc();
5: //サーバの使用率が高いときのみ,最大クライアント数の設定を開始する 6: if Utilization()<0.95 then return;
7: x:=Now(); // 経過時間 [ms]
8: y:=GetSD(); //応答時間の標準偏差 [ms2] 9: sdreg,grad := Regression(win, x, y) 10: //もし,標準偏差に大きな変化があれば 11: if |sdreg−prev|>threshold then begin
12: // adjust_mc()を呼び出し,最大クライアント数の設定を行う 13: if sdreg −prev <0 thenadjust_mc(ASCEND);
14: elseadjust_mc(DESCEND);
15: // 最大クライアント数の設定完了後, prev :=sdreg
16: end;
17: end.
18:
19: //adjust_mc()– tune_mc()から最大クライアント数設定のために呼び出される 20: procedure adjust_mc(dir: Dir);
21: begin 22: repeat;
23: // (1)回帰直線の計算
24: x := Now();
25: y := GetSD();
26: sdreg,grad := Regression(win,x,y);
27: // (2)回帰直線の傾きを調べる
28: if (dir = ASCEND)then begin 29: MaxClients :=MaxClients +adj; 30: cond :=|grad|>th2;
31: end
32: else begin
33: MaxClients :=MaxClients−adj; 34: cond :=|grad|<th2;
35: end;
36: Sleep(sleeptime); // デフォルト値: sleeptime 1 sec 37: untilcond;
38: // (3)最大クライアント数の微調整
39: MaxClients := RegressionCenter(win);
40: end.
図 4.7: 最大クライアント数設定機構の疑似コード
経過時間
標準偏差
最大クライアント数を増加させながら,
回帰直線の傾きを計算する.
傾きが閾値を超えると,
最大クライアント数を この地点付近に設定する.
(a) 最大クライアント数を増加方向に探索する場合
経過時間
標準偏差
最大クライアント数を減少させながら,
回帰直線の傾きを計算する.
傾きが閾値を超えると,
最大クライアント数を現在地点付近に設定する.
(b) 最大クライアント数を減少方向に探索する場合 図 4.8: 最大クライアント数の設定
した場合には,標準偏差の値が十分一定となり,保守的な値に最大クライアント 数は設定されている.そのため,最大クライアント数の微調整を最後に行う.現 在の実装では90秒前の最大クライアント数の値に少しだけ戻している.
図 4.7の関数adjust_mc()がこの最大クライアント数の設定を行う.最初に,
回帰直線の傾きを計算する(23–26行).傾きが閾値を上回るとループを抜ける
(28–35行).最後に,最大クライアント数を90秒前の値に戻しながら,最大クラ イアント数の設定を完了する(39行).最大クライアント数を減少方向に探す場 合もほぼ同様である.