首页 > 解决方案 > Erlang NUMA 技术配置

问题描述

我正在尝试在 openstack vm 上运行 erlang 应用程序并且性能非常差,在测试后我发现 NUMA 发生了一些事情,这就是我在测试中观察到的。

我的 openstack 计算主机有 32 个核心,所以我在它上面创建了 30 个 vCPU 核心 vm,它具有所有 NUMA 意识,当我在这个虚拟机上运行 Erlang 应用程序基准测试时,性能最差,但是我创建了具有 16 个 vCPU 核心的新虚拟机(在这种情况下我的所有 VM cpu 都固定在 Numa-0 节点上),在这种情况下,基准测试结果非常好。

根据上面的测试,如果我将 VM 保留在单个 numa 节点上,那么性能会好得多,但是当我将它分散到多个 numa 区域时,它会变得更糟。

但有趣的是,当我在裸机上运行相同的 erlang 应用程序时,性能非常好,所以试图理解为什么在 VM 上运行的相同应用程序性能不佳?

在虚拟机上运行时,erlang 中是否有任何设置可以更好地适应 NUMA?

标签: linuxperformanceerlangopenstacknuma

解决方案


Erlang 可能无法正确检测 VM 的 CPU 拓扑。

lscpu您可以使用hwloclstopo-no-graphics包检查 VM 所看到的 cpu 拓扑:

#lscpu | egrep '^(CPU\(s\)|Thread|Core|Socket|NUMA)'
#lstopo-no-graphics --no-io

如果看起来不正确,请考虑使用 OpenStack 选项重建 VM hw:cpu_treads=2 hw:cpu_sockets=2,如https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/virt-driver-vcpu-topology.html中所述

在 Erlang 方面,您可以尝试使用 Erlang VM 选项+sct+sbthttp://erlang.org/doc/man/erl.html#+sbt中所述


推荐阅读