<div>The test machine topology is [(0,1,4,5), (2,3,6,7)], and erlang:system_info(cpu_topology) outputs:</div>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<div>1> erlang:system_info(cpu_topology).</div>
<div>[{processor,[{core,{logical,0}},</div>
<div>             {core,{logical,4}},</div>
<div>             {core,{logical,1}},</div>
<div>             {core,{logical,5}}]},</div>
<div> {processor,[{core,{logical,2}},</div>
<div>             {core,{logical,6}},</div>
<div>             {core,{logical,3}},</div>
<div>             {core,{logical,7}}]}]</div></blockquote>
<div>So it's right.</div>
<div>Then I bind schedulers to cpu cores:</div>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<div> 2> erlang:system_flag(scheduler_bind_type,default_bind).</div>
<div>unbound</div>
<div> 3> erlang:system_info(scheduler_bindings). 
<div>{0,2,4,6,1,3,5,7}</div></div></blockquote>
<div>Re-run the hackbench:</div>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<div>4> c(hackbench).</div>
<div>./hackbench.erl:56: Warning: variable 'Msg' is unused</div>
<div>{ok,hackbench}</div>
<div>5> hackbench:main(300,1000).   </div>
<div>71.174117</div>
<div>// 300 groups, each groups has 20 pairs of processes, total 300*(20*2)=12000 processes, msg is sent 1000 times</div>
<div>6> hackbench:main(300,1000). 
<div>75.165799</div></div></blockquote>
<div dir="ltr">without binding and everything is in default:</div>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<div dir="ltr">3> hackbench:main(300,1000).</div>
<div dir="ltr">67.151053</div>
<div dir="ltr">4> hackbench:main(300,1000).</div>
<div dir="ltr">72.056573</div></blockquote>
<div dir="ltr">It doesn't change much.</div>
<div dir="ltr"> </div>
<div dir="ltr">With smp disable:</div>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<div dir="ltr">2> hackbench:main(300,1000).</div>
<div dir="ltr">53.942253</div></blockquote>
<div dir="ltr">*More info is in the attachment. (including uname -a, /etc/issue, /proc/cpuinfo, erlang version, gcc version)</div>
<div>
<div>  </div></div>
<div class="gmail_quote">2009/8/19 Zoltan Lajos Kis <span dir="ltr"><<a href="mailto:kiszl@tmit.bme.hu">kiszl@tmit.bme.hu</a>></span> 
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi, 
<div> </div>
<div>First check if the cpu topology is properly identified: erlang:system_info(cpu_topology). If not, set it manually: erlang:system_flag(cpu_topology, Topo). (see slide* 27 for Topo).</div>
<div>Then bind the schedulers to cpu cores: erlang:system_flag(scheduler_bind_type,default_bind). Check that the binding succeeded: erlang:system_info(scheduler_bindings).</div>
<div>Try the SMP test again with these settings, and please tell us the new results.</div>
<div> </div>
<div>*see slides 22-28 in Kenneth's talk on multicore:</div>
<div><a href="http://www.erlang-factory.com/upload/presentations/105/KennethLundin-ErlangFactory2009London-AboutErlangOTPandMulti-coreperformanceinparticular.pdf" target="_blank">http://www.erlang-factory.com/upload/presentations/105/KennethLundin-ErlangFactory2009London-AboutErlangOTPandMulti-coreperformanceinparticular.pdf</a></div>


<div> </div>
<div>Regards,</div>
<div>Zoltan.</div>
<div> </div>
<div>Jiang Wei wrote:</div>
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div class="im">Hi, list 
<div>    I write hackbench in erlang to test the performance, which is originally a benchmark for linux scheduler.</div>
<div>    (Hackbench contains several groups; each groups contains 20 pairs of senders and receivers; each sender needs to send some messages to the 20 receivers in the same group. The performance is measured by the time taken, less is better.)</div>


<div>      The tests are carried out on an Intel server with 2 quad-core processors and 4G memory.</div>
<div>    I am surprised with results I got:</div>
<div>    (1) SMP enable +S 8</div>
<div>    root@test:~/hackbench# \time ./run_one_erl.sh</div>
<div>    Time is 62.260995</div>
<div>    295.67user 110.62system 1:14.27elapsed 546%CPU (0avgtext+0avgdata 0maxresident)k</div>
<div>    11776inputs+8outputs (27major+90965minor)pagefaults 0swaps</div>
<div>       The performance is 62 sec and the oprofile shows 28% cpu time is using in pthread_mutex_*.</div>
<div>       (2) SMP disable</div>
<div> </div></div>     root@test:~/hackbench <mailto:<a href="mailto:root@test" target="_blank">root@test</a>:%7E/hackbench># \time ./run_one_erl.sh "-smp disable" 
<div class="im">
<div>     Time is 54.14644</div>
<div>     54.23user 0.33system 1:05.66elapsed 83%CPU (0avgtext+0avgdata 0maxresident)k</div>
<div>     3968inputs+8outputs (22major+36520minor)pagefaults 0swaps</div>
<div>       The performance is 54 sec and using only 83% cpu.</div>
<div>       So it seems the erlang has problems with using all the smp resources for serious lock contention in smp scheduler. Am I right?</div>
<div>     And because I am new to erlang, the hackbench.erl may be in bad encoding, which will harm the performance. Can anyone help me review my code?</div>
<div>       I attach both the original C version of hackbench and my erlang version one.</div>
<div>       Thanks a lot!</div>
<div>     (I am sorry If it is the wrong place to post this letter.)   </div>
<div>-- </div>
<div>Best Regards,</div>
<div>Jiang, Wei</div>
<div> </div></div>
<div class="im">------------------------------------------------------------------------ 
<div> </div>
<div> </div>
<div>________________________________________________________________</div>
<div>erlang-questions mailing list. See <a href="http://www.erlang.org/faq.html" target="_blank">http://www.erlang.org/faq.html</a></div>
<div>erlang-questions (at) <a href="http://erlang.org/" target="_blank">erlang.org</a></div>
<div> </div></div></blockquote>
<div> </div></blockquote></div>
<div> </div>
<div clear="all"> </div>
<div></div>
<div>-- </div>
<div>Best Regards,</div>
<div>Jiang, Wei</div>
<div> </div>