« 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

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


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

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