« 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

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 マルチコアでスケールしないErlangVM:

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