理系学生日記

おまえはいつまで学生気分なのか

Apache の MPM 短所と長所

昨日の勉強会で取り上げられた Apache の Prefork、Worker モデルの短所と長所が微妙に気になったので、ちょっくら論文を漁ってみた。

見つけた中では、Apache Performance Tuning Part One: Scaling Up がまとまってる印象。ApacheConEu 2008 での発表らしく、こちらに発表資料があった。

3.1.4 に subsubsection ながら "Selecting you MPM" で取り上げられていたので、簡単に意訳してみるけど、worker を選択するメリットはやはりその「軽さ」にある。"一般には"プロセスのスイッチングとスレッドのスイッチングは前者の方がより重い処理として知られている。ただ、どれだけの違いがあるかは OS(カーネル) の実装に強く依存する。

Solaris、AIX ではプロセスのスイッチングが相対的に重いため、worker を選択するということは的を得ている。ただし、Linux におけるスレッドの実装は、1 thread/1 process のモデルである。そして Linux のプロセスは軽量プロセスであるため、worker を選択するメリットはそれだけ小さくなる*1

一方で、worker は当然ながらメモリを共有する点でそれなりのリスクがある。一つのスレッドがクラッシュすると、そのスレッドが紐付くプロセス全体に影響がでる。また、そのスレッド上で動かすアプリが必ずしもスレッドセーフを意識して作られているとは限らない。

*1:定量的にどのくらい軽いのかというのは、資料みつからなかった。参考:マルチスレッドのコンテキスト切り替えに伴うコスト - naoyaのはてなダイアリー