# Apache HTTP Server ## 概要 Apache HTTP Serverは、ワーカ(スレッドまたはプロセス)のプールとして構成されたWebサーバである。HTTPリクエストはaccept queueで待機した後、`idle`(空き)状態のワーカに割り当てられる。ワーカは処理中は`busy`状態、HTTP 1.1の持続的接続によりリクエスト処理後は同一クライアントからの後続リクエストに備えて`wait`状態に遷移する。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 1 Introduction and Overview]] §1.6.3) 2つの設定パラメータが資源消費と性能に影響する。`MaxClients`はワーカプールの上限数を定め、処理能力の上限を左右する。`KeepAlive`はワーカが`wait`状態にとどまる最大時間を定め、大きすぎるとCPUが遊休状態になり、小さすぎるとTCP接続の再構築コストが増えCPU消費が増加する。両パラメータともCPU利用率に影響するため、Apache HTTP Serverは多入力多出力(MIMO)制御系として扱う必要がある。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 1 Introduction and Overview]] §1.6.3) ## wiki 内での位置づけ 本書全体を通じて繰り返し使われる4つの実例(M/M/1/K待ち行列、IBM Lotus Domino Server、Apache HTTP Server、差別化サービス付きキャッシング・負荷分散)の一つ。第1章では、不適切なコントローラ設計によるCPU利用率制御の発振例(不安定性の例)と、`KeepAlive`・`MaxClients`によるCPU・メモリ利用率のMIMO定値制御の例として登場する。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 1 Introduction and Overview]] §1.3, §1.6.3) 第3章では、`KeepAlive`をオフセット入力 $u(k)$、CPU利用率のオフセットを出力 $y(k)$ とする一次差分方程式 $y(k)=0.6y(k-1)-0.014u(k-1)$ をZ変換して伝達関数 $G_{KA}(z) = -0.014/(z-0.6)$ を導出する例として繰り返し用いられる。この伝達関数は極0.6が単位円内にあるためBIBO安定であり、定常ゲインは $G(1)=-0.035$(`KeepAlive`の増加はCPU利用率を下げる)。ただし線形モデルは動作点近傍でのみ妥当で、`KeepAlive`を大きく変化させるとCPU利用率が実際には取り得ない値(0〜1の範囲外)を予測してしまう。もう一つの制御入力`MaxClients`についても同様の伝達関数 $G_{MC}(z)=d/(z-c)$ が導出され、両者の複合効果は(相互作用がなければ)伝達関数の加算で近似できるが、真の相互作用を扱うには第7章のMIMOシステム同定が必要になる。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 3 Z-Transforms and Transfer Functions]] §3.3, §3.5.3) 第3章はさらに、参照値を大きく増やしたときにCPU利用率が0と1の間で振動し続ける限界サイクル(limit cycle)の実測例を示す。この状態はBIBO安定性の定義(有界入力に対する有界出力)は満たすが、制御としては機能しておらず、飽和(saturation)による非線形性が原因であるとされる。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 3 Z-Transforms and Transfer Functions]] §3.3.1) 第4章§4.6.2では、`MaxClients`・`KeepAlive`によるCPU・MEM制御をブロック線図としてモデル化する2通りの方式を対比する。1つは`KeepAlive`→CPUと`MaxClients`→MEMをそれぞれ独立なSISOループとして扱う単純化(図4.9(a))、もう1つは両制御入力が両出力に影響しうることを認めるMIMOループ(図4.9(b))である。`MaxClients`の増加はMEMだけでなくCPUも増やすため、SISO近似は`KeepAlive`ループのフィードバックで部分的に補償されるが、逆方向(`KeepAlive`がMEMにも影響する場合)は補償が効かない可能性が指摘される。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 4 System Modeling with Block Diagrams]] §4.6.2) 第5章では、Apache HTTP Serverの実測過渡応答が一次系の解析を裏づける実例として使われる。§5.2.1では、CPU利用率の目標値を900秒時点で0.3から0.8へ切り替えたときの実測応答を、消極的なコントローラ(図5.1)と積極的なコントローラ(図5.2)の2条件で比較し、積極的な制御ほど振動とオーバーシュートが大きくなることを示す。§5.9.1では、`KeepAlive`→CPU利用率の伝達関数 $G(z)=-0.014/(z-0.59)$ から定常ゲイン $G(1)=-0.034$ を求め、CPU利用率が物理的に取り得る範囲 $[0,1]$ に収まる`KeepAlive`の動作範囲を逆算すると $[1,28]$ となることを示す(線形モデルは動作点近傍でのみ妥当なため、この逆算はあくまで初期評価の目安)。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 5 First-Order Systems]] §5.2.1, §5.9.1) 第6章では、Apache HTTP Serverに移動平均フィルタを加えた2次系を、高次系解析の中心的な実例として使う。`KeepAlive`→CPU利用率の伝達関数 $G(z)=-0.014/(z-0.59)$ にフィルタ $H(z)=(1-c)/(z-c)$ を直列接続すると、フィルタ係数 $c$ が大きいほど正弦波入力の平滑化は強まるが、ステップ応答の整定時間も延びる($c=0,0.5$ では整定時間8だが $c=0.95$ では78)。良い折衷案として $c$ をフィルタなし系の支配極の絶対値(0.59)程度に選ぶことが示される(§6.5.1)。さらに比例制御を追加した閉ループ系 $F_R(z)$ では、コントローラゲイン $K_P$ が $-47$ を下回ると閉ループ極が複素になり振動が生じる。$K_P=-80$(複素極 $0.77\pm0.15j$)では整定時間16・最大オーバーシュート2%、$K_P=-20$(実極 $0.91,0.63$)では整定時間41・オーバーシュートなしと、ゲインの絶対値が大きいほど整定時間は短くなるがオーバーシュートのリスクが増すトレードオフが実例で示される(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 6 Higher-Order Systems]] §6.5.1, §6.5.2)。 第7章では、Apache HTTP Serverが本書で唯一MIMO(多入力多出力)を正面から扱う実例として繰り返し使われる。`KeepAlive`・`MaxClients`を制御入力、CPU・MEMを測定出力・状態変数とする状態空間モデル $x(k+1)=Ax(k)+Bu(k),\ y(k)=Cx(k)$ が構成され、固有値0.65・0.52からBIBO安定性、定常ゲイン行列 $G(1)$ から各入力の定性的な効果(KeepAlive増加はCPUを下げMEMを上げる、MaxClients増加は両方を上げる)が導かれる。§7.8.1のMIMOシステム同定実験では、KeepAlive・MaxClientsを互いに素な周期のサイン波で同時に変化させて得たデータで単一のMIMOモデルを推定し、個別のSISOモデルの組み合わせと比較した。SISOモデルはMIMOデータに対する予測精度($R^2=0.78$)がMIMOモデル($R^2=0.92$)より明確に劣り、さらに定常状態で実現可能な(CPU, MEM)の領域についても、SISOモデルが予測する矩形とMIMOモデルが予測する平行四辺形が一致せず、実測はMIMOモデルの予測を支持した。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 7 State-Space Models]] §7.2, §7.5, §7.8.1) 第8章は、`KeepAlive`単独によるCPU利用率のSISO比例制御を中心に、限界サイクル・精度・外乱抑制・前置補償の実例を提供する。§8.2では、参照値変化後にCPU利用率が0と1の間で振動し続ける限界サイクルの実測例(図8.9)が、SASO特性のうち安定性を欠く実例として再登場する。§8.7.2-§8.7.3では、`KeepAlive`からCPU利用率への伝達関数 $G(z)=-0.014/(z-0.59)$ を用いた比例制御について、前置補償(precompensation)により参照値変化への定常偏差($K_P=-90,-43,-20$のいずれでも)を消去できる一方、外乱(非Apacheタスクによる追加CPU消費)への定常偏差は前置補償では消去できないことを式(8.15)-(8.17)で示す。外乱抑制の実験(図8.31, 図8.32)では、$|K_P|$が大きいほど定常偏差が小さくなる一方、整定時間は$K_P$に対して上に凸な放物線状の関係を持ち、$K_P=-43$付近で最小になることが示された。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 8 Proportional Control]] §8.2, §8.7.2, §8.7.3) 第9章は、`KeepAlive`によるCPU利用率制御をPI制御に拡張する実例として2つの節を割く。§9.6.1では、CPUへの加法的ノイズを抑制する目的でPI制御(伝達関数$G(z)=-0.014/(z-0.59)$)を分析し、ノイズ入力からの伝達関数$F_N(z)$が定常ゲイン0を持つため$K_I\neq0$かつ閉ループ安定なら定常偏差が常にゼロになることを示す。ゲイン$K_P,K_I$の掃引実験(図9.27)では整定時間が$K_P=-43$付近で最小になる一方、オーバーシュートは$K_I$の絶対値が小さいほど小さくなる傾向が示された。§9.6.2では極配置設計を適用し、目標整定時間2・目標オーバーシュート0の要求から$K_P=-41,K_I=-58$を導出し、両ゲインが負であることは対象システムのゲインが負であることと整合すると説明される。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 9 PID Controllers]] §9.6.1, §9.6.2) 第10章は、Apache HTTP ServerをMIMO状態フィードバック制御の拡張例として扱う(§10.5.1)。`KeepAlive`・`MaxClients`を制御入力、CPU・MEMを測定出力とする状態空間モデルに対して動的状態フィードバック制御系を構築し、極配置設計とLQR設計を実測で比較する。極配置設計(MATLABの`place`コマンド)ではMEMの追従は良好だがCPUの整定時間・最大オーバーシュートが仕様(60秒以内・5%以下)を満たさなかった。これに対しLQR設計では、`R`行列で`KeepAlive`の制御努力コストを高く設定することでその変化量を抑え、CPU・MEM双方で良好な追従性能を実測testbedで達成した。著者らは、LQRの`R`行列を通じた制御努力の調整が、極配置設計では難しいトレードオフの制御を容易にする点を指摘する。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 10 State-Space Feedback Control]] §10.5.1) 第11章では、Apache HTTP Serverが「定値制御ではなく最適化」というファジィ制御の実例として登場する。`MaxClients`を変数として応答時間を計測すると、値が小さすぎるとTCP accept queueでの待ちにより、大きすぎるとOS資源(CPU・メモリ)の競合により応答時間が悪化する凹凸のある(concave-upward)曲線が観測される。change-in-MaxClientsとchange-in-response-timeを言語変数とするファジィルール(表11.1)を用いた制御により、デフォルト値200から出発してMaxClientsが漸進的に600台まで増加し応答時間が大きく改善した。さらにワークロード変化前の定常値(650)へ固定する静的制御と比較する実験では、ワークロードが変化した後の応答時間の悪化がファジィ制御の方が小さく、静的制御より優れることが示された。(Source: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 11 Advanced Topics]] §11.6) ## 関連 - ソース: [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 1 Introduction and Overview]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 3 Z-Transforms and Transfer Functions]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 4 System Modeling with Block Diagrams]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 5 First-Order Systems]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 6 Higher-Order Systems]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 7 State-Space Models]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 8 Proportional Control]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 9 PID Controllers]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 10 State-Space Feedback Control]] / [[@2004__Wiley__Feedback Control of Computing Systems - Chapter 11 Advanced Topics]] - 書籍: [[Feedback Control of Computing Systems]] - 概念: [[計算機システムのフィードバック制御]] / [[Z変換と伝達関数]] / [[ブロック線図]] / [[状態空間モデル]] / [[過渡応答解析]] / [[支配極と高次系の近似]] / [[極配置設計]] / [[PID制御]] / [[適応制御]] ## 出典 - Hellerstein, Diao, Parekh, Tilbury, *Feedback Control of Computing Systems*, IEEE Press / John Wiley & Sons, 2004, Chapter 1, §1.3, §1.6.3; Chapter 3, §3.3, §3.3.1, §3.5.3; Chapter 4, §4.6.2; Chapter 5, §5.2.1, §5.9.1; Chapter 6, §6.5.1, §6.5.2; Chapter 7, §7.2, §7.5, §7.8.1; Chapter 8, §8.2, §8.7.2, §8.7.3; Chapter 9, §9.6.1, §9.6.2; Chapter 10, §10.5.1; Chapter 11, §11.6.