« プログラミング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

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference Erlangのhttpドーピング:

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