<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">This is what we did for experiments, we told erlang scheduler to bind with numa0 cores with +s 16 option and we got good result <div><br></div><div>After that we told erlang to bind numa1 cores and we got good result. </div><div><br></div><div>But when I tell erlang bind both NUMA cores then getting worst result, it seems erlang is messing with NUMA when it try to run on both NUMA. </div><div><br></div><div>We are running 18.x version. <br><br><div dir="ltr">Sent from my iPhone</div><div dir="ltr"><br><blockquote type="cite">On Feb 17, 2020, at 8:28 AM, Ameretat Reith <ameretat.reith@gmail.com> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"><div>I did what you suggested, I’m getting best result on CPU pinning on single NUMA0 but in that case I’m wasting my CPU resources. When I trying to CPU pinning with dual NUMA then performance is 50% less, I have use all available option to correct CPU Topology, threads sibling on same core etc. but still erlang doesn’t like dual NUMA VM. </div></div></blockquote><div>I know libvirt can do CPU pinning so OpenStack can leverage that but never tested that. Until someone come with better idea, I suggest fire up Qemu instances with two NUMA nodes and two cpusets. Then find Qemu VCPu processes (pstree is your friend) and pin them to actual cores in according to NUMA nodes. If you still got poor performance, I suggest testing something non-Erlang based, like Redis.<br></div></div></div>
</div></blockquote></div></body></html>