我尝试在openstack vm上运行erlang应用程序,但性能非常差,在测试后,我发现NUMA发生了一些问题,这是我在测试中观察到的。
我的openstack计算主机有32个核心,所以我在它上面创建了30个NUMA核心的VM,当我在这个VM上运行Erlang应用程序基准测试时,性能最差,但然后我创建了一个16 vCPU核心的新VM (在这种情况下,我的所有vm cpu都固定在Numa-0节点上),在这种情况下,基准测试结果很好。
根据上面的测试,很明显,如果我将VM放在单个numa节点上,那么性能会更好,但当我将其分散到多个numa区域时,情况会变得更糟。
但有趣的是,当我在裸机上运行相同的erlang应用程序时,性能真的很好,所以试图理解为什么在VM上运行的相同应用程序性能不好?
当在虚拟机上运行时,erlang中有没有更适合NUMA的设置?
发布于 2020-02-08 03:48:44
Erlang可能无法正确检测VM的cpu拓扑。
您可以使用hwloc包中的lscpu和lstopo-no-graphics检查虚拟机看到的cpu拓扑:
#lscpu | egrep '^(CPU\(s\)|Thread|Core|Socket|NUMA)'
#lstopo-no-graphics --no-io如果看起来不正确,请考虑使用OpenStack选项(如https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-vcpu-topology.html中所述的hw:cpu_treads=2 hw:cpu_sockets=2 )重建虚拟机
在Erlang端,您可以尝试使用Erlang VM选项+sct、+sbt,如http://erlang.org/doc/man/erl.html#+sbt所述
https://stackoverflow.com/questions/60106482
复制相似问题