问题标签 [numa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11480 浏览

c - numactl --physcpubind

我正在使用带有 --physcpubind 选项的 numactl。手册说:

假设我有 3 个 NUMA 节点的 NUMA 系统,每个节点都有 4 个内核。NUMA 节点 0 具有 0、1、2、3 作为核心编号。NUMA 节点 1 有 4,5,6,7,NUMA 节点 2 有 8,9,10,11。我的问题是假设我按如下方式运行程序:

即,我将使用 6 个线程运行我的程序,并且我要求它们位于 CPU 内核 0、1、4、5、8、9 上。例如,如果在程序线程 0-5 的某个时间点分配了 CPU 内核 0、1、4、5、8、9 (setup1)。是否有可能在程序执行期间的某个其他时间点,例如,线程 0 可能正在 CPU 核心 9 上运行,等等?即CPU内核之间会有线程迁移吗?或者线程唯一地绑定到 CPU 内核(如 setup1 中)?谢谢。

0 投票
1 回答
146 浏览

windows - GetNumaProcessorNodeEx 的驱动程序等价物是什么?

我目前正在尝试将驱动程序中的一些内核线程连接到特定的 NUMA 节点。为此,我需要查询各个处理器的 NUMA 节点。

不幸的是,GetNumaProcessorNodeEx 在驱动程序中不可用(它需要 Windows.h)。该功能的驱动程序等效项是什么?

0 投票
1 回答
3791 浏览

linux-kernel - NUMA 和 SMP 上的 Linux 调度程序

我想知道 schedule() 函数的副本是在每个处理器上运行,还是只是为每个处理器运行一个 schedule()。

如果在每个处理器/核心上运行 schedule() 的副本,进程如何分派到特定的 CPU/cpu 运行队列。它是负载均衡器的工作吗?是否只有一个负载均衡器为所有 CPU 运行,还是使用标志/通信方法以分布式方式完成?

ps-我知道调度类等的工作,但我很难弄清楚各种运行队列之间的进程分布。

0 投票
2 回答
2358 浏览

python - Python multiprocessing.Pool 与许多进程

我正在尝试创建许多并行进程来利用 32 核机器,但是当我查看顶部屏幕时,它只显示了 5 个 Python 进程。这是我的代码:

这是机器的配置:

谢谢!


现在可以了。我的代码一定有问题,但我无法回滚查看它是什么。关闭。

0 投票
1 回答
1029 浏览

c - 有多个套接字时Linux OS如何调度线程

例如,在具有 2 个四核处理器的双插槽系统中,线程调度程序是否尝试将线程保持在同一处理器中的同一进程中?因为在一个进程中的线程有很多共享内存访问的情况下,在不同的处理器中交错不同进程的线程会降低性能。

0 投票
2 回答
3956 浏览

windows-server-2008-r2 - 如果我的应用程序不支持 NUMA,我应该禁用 NUMA

运行 Windows Server 2008 R2 SP1。我正在运行的应用程序在设计时并未考虑到 NUMA。在我的双路系统上禁用 NUMA 会更好吗?我的猜测是肯定的,但我想确认一下。我的服务器是 Westmere 双路系统。

0 投票
1 回答
1100 浏览

scala - JVM的NUMA意识

我的问题涉及 JVM 应用程序可以在多大程度上利用主机的 NUMA 布局。

我有一个 Akka 应用程序,其中参与者通过将传入数据与已加载到不可变(Scala)对象中的“通用”数据组合来同时处理请求。该应用程序在云中可以很好地扩展,使用许多双核 VM,但在单个 64 核机器上表现不佳。我认为这是因为公共数据对象驻留在一个 NUMA 单元中,并且从其他单元同时访问的许多线程对于互连来说太多了。

如果我运行 64 个单独的 JVM 应用程序,每个应用程序包含 1 个参与者,那么性能又会很好。更温和的方法可能是运行与 NUMA 单元(在我的情况下为 8 个)一样多的 JVM 应用程序,让主机操作系统有机会将线程和内存保持在一起?

但是有没有更聪明的方法可以在单个 JVM 中实现相同的效果?例如,如果我用案例类的多个实例替换我的公共数据对象,JVM 是否有能力将它们放置在最佳 NUMA 单元上?

更新:

我正在使用 Oracle JDK 1.7.0_05 和 Akka 2.1.4

我现在尝试使用 UseNUMA 和 UseParallelGC JVM 选项。在使用一个或几个 JVM 时,两者似乎都不会对缓慢的性能产生任何显着影响。我也尝试过使用 PinnedDispatcher 和 thre-pool-executor,但没有任何效果。我不确定配置是否有效,因为启动日志中似乎没有什么不同。

当我为每个工作人员(约 50 个)使用单个 JVM 时,最大的改进仍然存在。但是,这个问题似乎是在 FailureDector 注册 Akka 集群 JVM 之间“第一次心跳”的成功交换之前有很长的延迟(最多几分钟)。我怀疑这里还有其他一些我尚未发现的问题。我已经不得不增加 ulimit -u 因为我达到了默认的最大进程数(1024)。

只是为了澄清一下,我不是试图获得大量消息,只是试图让许多单独的参与者同时访问一个不可变对象。

0 投票
3 回答
6668 浏览

c++ - NUMA 获取当前节点/核心

我在 Linux 上使用 libnuma。我的线程应该知道它们正在运行的节点/核心。是否有可能以某种方式获取当前线程的节点/核心?我已经通过文档,但我没有找到这样的功能......

0 投票
1 回答
1189 浏览

mpi - numactl --physcpubind 处理器迁移

我正在尝试使用numactl启动我的 mpi 应用程序(Open MPI 1.4.5) 。由于显然使用--cpu-nodebind的负载平衡不会在可用节点之间以循环方式分配我的进程,因此我想专门将我的进程限制为一组封闭的 cpu。通过这种方式,我计划在每个节点上运行的线程数方面确保节点之间的负载平衡。--physcpubind似乎根据 numactl 手册完成了这项工作。

问题是 - 从我可以从这篇文章中提取的内容 - 使用--phycpubind,允许进程在这个 cpu 集中迁移。另一个问题是,该集合中的一些 cpu 仍未使用,而其他 cpu 被分配了两个或更多进程,因此仅以 50% 或更少的 CPU 使用率运行。为什么会发生这种情况,是否有解决这种现象的方法?

亲切的问候

0 投票
1 回答
222 浏览

c++ - 在 Windows 中移动或指定线程堆栈空间

我正在 NUMA 计算机上进行并行编程(我还没有计算机,它计划很快到货™)。

我在每个 NUMA 节点上都有一个工作线程池(带有处理器关联集)和一个平衡器,可以在池/节点之间均匀分布工作。这是为了确保所有内存分配都在本地内存上。这一切都很好,花花公子。

在启动期间,池工作线程是从主线程创建的,它们必须先进行一些初始设置,然后才能设置自己的关联性(第三方库要求,我对此无能为力)。

我担心由于工作线程的堆栈帧被分配在错误的节点上,会导致隐藏的性能损失,从而导致外部内存访问。

这是一个真正的问题吗?不知怎的,我相信它已经解决了......

无论如何,我正在寻找一种确保每个线程的堆栈在正确的 NUMA 节点上分配的方法。

我敬业的谷歌男孩想出了这个:在特定的 NUMA 内存上分配线程堆栈,这是我想做的,但它是 pthreads,我需要一个 Windows 解决方案。