Hacking Apache HTTP Server at Yahoo! (Michael J. Radwin)

Michael J. RadwinがApacheCon 2005で喋った講演のスライドが公開されているが,これが結構面白い.

http://public.yahoo.com/~radwin/talks/yapache-apachecon2005.htm

これでやられている性能向上のためのチューニングは,次のような項目に整理できるかもしれない.

  • プロセス生成やコンテクストスイッチのコストの低減.プロセス数固定,OSのバッファリングの有効利用(一回のread()で全リクエストを読む,write()でブロックしないようにバッファサイズを拡大)など.
  • プロセス処理時間の短縮.レスポンス直後にソケットを閉じるなど.
  • 通信データサイズの削減.ヘッダ情報の絞り込み,gzip圧縮,
  • ログファイルの処理コストの低減.
  • SSLアクセラレータの利用.
  • 高負荷に合わせたシグナル処理の改良.コアダンプの廃止やシグナルの間引きなど.

なお,この講演ではスレッドプログラミングは大変で苦痛なものとしている(たとえば,「Winnyの技術」にも同様の記述がある)が,これは当時のスレッドプログラミングは,低レベルAPIしか提供されていなかったから大変だったのだが,実際にはWebサーバにおける並行処理は非常に単純なモデルに整理できるので,あまり問題ではないと思う.

それより問題だったのは,OSが安定していなかったことではないだろうか.Solarisは1から2に移行した際に対称型マルチプロセッシングを可能にしようとしたのだが,なかなかスレッド回りの大きなバグが修正できなくて,本格的に使えるようになったのはSolaris 2.6以降であったと記憶している.それ以上に問題だったのが,(このスライドから見る限り)Yahoo!が使っていると思われるLinuxFreeBSDで,これらのスレッド処理はかなり長い間安定性に問題を抱えていて,私の周辺では非常に困っていた.つまり,当時スレッドよりプロセスを採用したのは,スレッドプログラミング自体の問題ではなく,OSの安定性の問題であると言えるのではないだろうか.

なお,他に彼のページには,他にもキャッシュに関する話など面白い資料が公開されている.

http://public.yahoo.com/~radwin/