gpt4 book ai didi

java - NUMA 架构如何影响 ActivePivot 的性能?

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:37 24 4
gpt4 key购买 nike

我们正在将 ActivePivot 应用程序迁移到新服务器(4 个 Intel Xeon 插槽,512GB 内存)。部署后,我们启动了我们的应用程序基准测试(这是大型 OLAP 查询并发与实时事务的混合)。测得的性能几乎比我们以前的服务器慢两倍,后者具有类似的处理器,但内核和内存少两倍。

我们调查了两台服务器之间的差异,看起来大的服务器有一个 NUMA 架构(非统一内存访问)。每个 CPU 插槽在物理上接近内存的 1/4,但离其余部分更远......运行我们应用程序的 JVM 分配了一个大的全局堆,每个 NUMA 节点上都有该堆的随机部分。我们的分析是,内存访问模式非常随机,CPU 核心经常浪费时间访问远程内存。

我们正在寻找有关在 NUMA 服务器上使用 ActivePivot 的更多反馈。我们能否配置 ActivePivot 多维数据集或线程池、更改我们的查询、配置操作系统?

最佳答案

Peter 描述了当今可用的通用 JVM 选项,以减少 NUMA 架构对性能的影响。为简短起见,支持 NUMA 的 JVM 将根据 NUMA 节点对堆进行分区,并且当线程创建新对象时,该对象将分配到运行该线程的核心的 NUMA 节点中(如果同一线程稍后使用它,对象将在本地内存中)。此外,在压缩堆时,支持 NUMA 的 JVM 避免在节点之间移动大数据 block (并减少 stop-the-world 事件的长度)。

因此,在任何 NUMA 硬件和任何 Java 应用程序上,-XX:+UseNUMA 选项都应该启用。

但对于 ActivePivot 来说帮助不大:ActivePivot 是一个内存数据库。有实时更新,但在应用程序的整个生命周期中,大部分数据都驻留在主内存中。无论 JVM 选项如何,数据都将在 NUMA 节点之间拆分,执行查询的线程将随机访问内存。众所周知,ActivePivot 查询引擎的大部分运行速度与内存获取速度一样快,因此 NUMA 的影响尤为明显。

那么如何在 NUMA 硬件上充分利用 ActivePivot 解决方案?

当 ActivePivot 应用程序只使用一小部分资源时,有一个简单的解决方案(我们发现,当多个 ActivePivot 解决方案在同一台服务器上运行时,情况经常如此)。例如,一个 ActivePivot 解决方案仅使用 64 个内核中的 16 个,以及 TeraByte 中的 256GB。在这种情况下,您可以将 JVM 进程本身限制为 NUMA 节点。

在 Linux 上,您使用以下选项 ( http://linux.die.net/man/8/numactl) 作为 JVM 启动的前缀:

numactl --cpunodebind=xxx

如果整个服务器专用于一个 ActivePivot 解决方案,您可以利用 ActivePivot 分布式架构对数据进行分区。如果有 4 个 NUMA 节点,则启动 4 个 JVM 托管 4 个 ActivePivot 节点,每个节点都绑定(bind)到其 NUMA 节点。通过此部署,查询分布在节点之间,每个节点将在正确的 NUMA 节点内以最大性能执行其工作份额。

关于java - NUMA 架构如何影响 ActivePivot 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13160456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com