linux - 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?
解决方案
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
,+sbt
如http://erlang.org/doc/man/erl.html#+sbt中所述
推荐阅读
- c# - 如何根据另一个属性从 json 列表中获取属性?
- django - 如何将 django 中的查询集转换为 json
- mysql - Mysql:如何在字符串列表中查找列值
- bash - 如何使用 Cadaver 上传名称中带有空格的文件?
- php - 在 PHP POST 表单中传递一个巨大的数组,以便基于这个数组创建一个 CSV 文件
- java - 如何修复 couchbase “获取对 rev hotel_4396 的错误响应 - > 错误的用户”
- rest - 尝试使用 Symfony 4 / Apli Platform Token not found 401 构建身份验证
- java - Java NIO 套接字阻塞通道已连接/打开
- python-3.x - Selenium 错误:缺少 1 个必需的位置参数:'url'
- php - 从 PHP 中的数组中删除空的 stdclass 对象