« ErlangでOOP | Main | マルチコアでスケールしないErlang その2 »

Friday, September 28, 2007

マルチコアでスケールしないErlangVM

マルチコア時代のErlang・・・のような書かれ方をしていることが多いけれども,
実際試してみるとそううまくスケールしてくれない.

Erlang の ring benchmark を Squeak Smalltalk で
の ring_bench を利用させていただいて,smp有無で測定をしてみると,こんな感じ.

smpを使うと,速くなるどころか約1/7の性能しか出なくなってしまう.

> erl -noshell -eval 'ring_bench:start(1000,10000), halt().' N = 1000, M = 10000; elapsed time = 1470 (1494) miliseconds

> erl -smp -noshell -eval 'ring_bench:start(1000,10000), halt().'
N = 1000, M = 10000; elapsed time = 9810 (9826) miliseconds

測定環境は,クアッドコアの Intel(R) Xeon(R) CPU E5335 @ 2.00GHz × 2,の環境.(合計8コア)

実際に利用していても,-smpを付けると遅くなるケースが目立つ.うーむ...

今後Erlang言語のバージョンアップで,改善するとよいんだけども...

----

追記.jijixiさんに言及いただいたので.

うーん、たしか ring benchmark ってシーケンシャルにメッセージを送っていくものだから、スケールしないのはむしろ当たり前なんじゃないのかな。

並列性が期待できない処理を smp にやらせても、逆にオーバーヘッドが増えて遅くなるだけというのは納得の行く結果だけど……なんかわし、勘違いしてるだろうか。

ええ,確かにその通り.(^^;

元々smp環境で処理が遅くなる問題があって,メッセージの速度をテストしてみたら
あまりにも遅かったので書いたという経緯だったのです.
でも,スケールしないことをテストするなら,リングを複数用意する等の方が適切ですね.

本家のMLにも投げてみたのですが,以下の返事でした.

I ran your benchmark on a machine similar to yours and got a time 6.7 times longer for the R11B-5 emulator with smp support compared to the emulator without smp support. With the, to be, R12B release I got a time 4.4 times longer.

ってわけで,R12Bでだいぶ良くなる模様です.

また,メッセージサイズを増やせば,差は縮まるとのこと.
確かに増やせば縮まりました.

そのほか,リンクインドライバのほとんど(fileとinet以外全部?)は
ドライバ単位でロックされてしまうので,その辺の影響も大きいかもしれない.

もう少し調べたらまた書いてみます...


|

« ErlangでOOP | Main | マルチコアでスケールしないErlang その2 »

Comments

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference マルチコアでスケールしないErlangVM:

« ErlangでOOP | Main | マルチコアでスケールしないErlang その2 »