« jQuery 1.1.3 リリース♪ | Main | jQuery 1.1.3.1リリース »

Wednesday, July 04, 2007

ErlangなWebサーバyawsを速くする方法

Erlangで書かれたyawsがある.
一般的なWebサーバの機能の他,HTMLにErlangで書かれたコードを埋め込んで動的に処理させることが出来るようになっている.(JSPやPHPのように)

このWebサーバは,サーバのコードがほぼすべてErlangで書かれているのだけども,十分な処理速度を持っている.
Erlangベースということで,接続数に対しても十分スケールするので,動的コンテンツの環境としてはなかなか優秀.
しかし,デフォルトでは Erlang VM をそのままの状態で利用するため,最近のSMP・マルチコア環境では性能を十分発揮できない.

以下の2つのことをすれば,それだけでかなり性能を上げることが出来る.
1.SMP・マルチコア環境では,yaws を実行する Erlang 環境に,-smp オプションを渡す(-erlarg '-smp')
2.yaws本体を,HiPEでコンパイルし直す(+nativeオプション付きでコンパイル)


実際にどの程度優秀なのか,上記を試しつつ,簡単にベンチマークを取ってみた.

環境は,SuSE Linux 9.2,Xeon 3.0GHz (Cache 2M) HyperThreading × 2,メモリ4GB.
別のマシンから,Apache1.3付属の ab を使って,並列度を 1, 10, 100 と変えながら測定を行った.
結果の数値はすべて req/sec.従って数が大きいほど優秀.


静的コンテンツ(1406bytesの画像 /favicon.ico)

並列標準対策1対策1+2Apache1.3
並列 11270.651326.261278.77961.54
並列 102066.121924.193232.063167.56
並列 1002039.362421.013161.223338.53


次は,簡単な内容を表示する arg2.yaws でベンチを取ってみた.
Apache1.3の方は,環境変数をテキストですべて表示するスクリプトをPerlで書いて,FastCGIで実行するようにしてみた.
(処理内容は異なるので,あくまで参考程度ということで)

動的コンテンツ(軽い処理 /arg2.yaws)

並列標準対策1対策1+2Apache1.3
並列 1776.40793.021062.70615.01
並列 10918.192243.163571.431846.04
並列 100820.652464.883347.841857.36


次は重たいトップページ.
対策を取ってもかなり遅いです.
おそらく,ファイルを遅い方法でアクセスしているため.
Erlangのファイルアクセスは,標準だとローカルのファイルを直接見に行くのではなく,ファイルを管理するサーバプロセスを経由してアクセスするために,そのオーバーヘッドがかなりかかっているのではないかと思う.
ローカルのファイルであることを前提に,高速に処理するオプションを指定すれば,速くなるはず….(試していない)

動的コンテンツ(重い処理 /)

並列標準対策1対策1+2
並列 127.0124.5743.75
並列 1026.9365.3096.45
並列 10025.5858.8090.05



具体的な対策の方法は以下の通り

1.SMP・マルチコア環境では,yaws を実行する Erlang 環境に,-smp オプションを渡す(-erlarg '-smp')
yaws --erlarg '-smp' --daemon
のように,yaws起動時に -smp オプションを渡します.

2.yaws本体を,HiPEでコンパイルし直す(+nativeオプション付きでコンパイル)

yaws の src/Makefile の ERLC_FLAGS の行を以下のように変更
ERLC_FLAGS+=-W $(DEBUG_FLAGS) -pa ../../yaws -smp +native
この修正を行ってから,make すればOKです.
実行時は1の対策も同時に行う必要があります.

2の対策のみ行う場合は,-smp オプションを削ってください.
(nativeコンパイル時の-smp有無と,実行時の-smp有無は一致していないと,nativeコンパイル結果が利用されないため)

|

« jQuery 1.1.3 リリース♪ | Main | jQuery 1.1.3.1リリース »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference ErlangなWebサーバyawsを速くする方法:

« jQuery 1.1.3 リリース♪ | Main | jQuery 1.1.3.1リリース »