« プログラミングErlang | Main | 情報処理試験:システム管理 »

Wednesday, April 30, 2008

Erlangのhttpドーピング

Erlangで書かれたWebサーバのyawsはかなり速い.
Apache並の性能が出る.

それはErlangが速いからだと思っていた.

でも,ソースを読んでみたら,ドーピングされていることがわかった.

同様のアプリで,mochiwebというErlangで書かれたWebサーバのフレームワークもあるけれど,これも同じでその方法を使っていた.

Erlangでは,TCP通信のドライバにいろいろなモードがあって,行単位で応答を返したり,FCGIやCORBAのパケットをあつかったりすることができる.
Erlangのマニュアルには書かれていないけれど,このモードにhttpというものがあって,それを使うと,httpヘッダの解析などをC言語で書かれたドライバ内で行うことができる模様.
undocumentedだけども,どちらのフレームワークも使用しているということは,その辺よく研究しているということなのかな.

Erlang本体についているWebサーバ(inetsのhttp_server)はそのモードは使っておらず,自前でパケットの解析をしているのは謎.
Erlang ML で,Erlangについているものは古くさくて,新しい設計のyawsがよい,というような話が以前流れていたけども,それはこの辺が理由だったのかも.

httpモードの内容は,Erlangソースの erts/emulator/drivers/common/inet_drv.c を読むといろいろ書いてある.

erts/AUTHORS を見ると,HTTP packet mode (R8) とあるので,だいぶ前から使えるようにはなっていた模様.

結局のところ,Erlang自体はそこまで速くなくて,ほかのWebサーバに対抗できる性能を出すには,C言語レベルでのパケット解析が必要な模様.
言い換えれば,自前でHTTP以外のプロトコルをがんばって実装する場合,C言語比でそれなりに性能が落ちてしまうということかな.
自前でinet_drvをいじるとか,BIFを追加してがんばる必要がある…と.

Erlangは動的な型の言語だし,バイトコードを実行するタイプなので(HiPE使えばコンパイルされるけど),やっぱりその辺が限界ということなのかも.

|

« プログラミングErlang | Main | 情報処理試験:システム管理 »

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のhttpドーピング:

« プログラミングErlang | Main | 情報処理試験:システム管理 »