问题标签 [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 投票
2 回答
848 浏览

java - DB2 信息中心无法在 Windows 7 中启动 - NUMA 错误

我下载了 DB2 信息中心,然后解压缩并启动。但是,此时发生了崩溃,应用程序从未启动。它在目录中创建了一个转储文件。javacore 文件包含这部分:

这是什么意思?我在 Google 中搜索,在 boot.ini 文件中找到了有关 /usepmtimer 的内容,但是,Windows 7 没有此文件。为了在 Windows 7 中本地使用信息中心,我该怎么做?

0 投票
2 回答
2314 浏览

python - NUMA 硬件上的内存分配和访问

我正在用 python 开发一个科学计算工具,它应该能够在 NUMA 共享内存环境中的多个内核上分配工作。我正在研究最有效的方法。

由于 python 的全局解释器锁,线程 - 不幸地 - 退出了游戏,这使得 fork 成为我唯一的选择。对于进程间通信,我想我的选择是管道、套接字或 mmap。如果此列表中缺少某些内容,请指出。

我的应用程序需要在进程之间进行相当多的通信,并访问一些公共数据。我主要担心的是延迟。

我的问题:当我分叉一个进程时,它的内存是否会位于分配给它的核心附近?作为 *nix 副本中的 fork,最初我认为情况并非如此。我是否要强制复制以更快地访问内存,如果是这样,最好的方法是什么?如果我使用 mmap 进行通信,该内存是否仍可以分布在内核上,还是位于单个内核上?是否有透明地重新定位数据以优化访问的流程?有没有办法直接控制物理分配,或者请求有关分配的信息以帮助优化?

在更高的层次上,哪些是我的硬件决定的,哪些是由操作系统决定的?我正在购买一台高端多路机器,并在 AMD Opteron 和 Intel Xeon 之间犹豫不决。特定硬件对上述任何问题的影响是什么?

0 投票
1 回答
447 浏览

windows - NUMA - 本地内存

请多多包涵,我刚刚开始深入研究整个 CPU 问题。

RAM下图所示的方块,它们代表什么?内存页?据我所知,CPU 只有一件事与内存有关——它们的缓存。

那么RAM图上的只是一个共享缓存,还是它是什么?

NUMA 架构图

0 投票
4 回答
6110 浏览

c - 我可以从指针地址(在 Linux 上的 C 中)获取 NUMA 节点吗?

我已经设置了我的代码,以便在我的 NUMA 系统上小心地在本地加载和处理数据。我认为。也就是说,出于调试目的,我真的希望能够使用在特定函数内部访问的指针地址(由许多其他函数设置)来直接识别内存指向的 NUMA 节点居住在上面,所以我可以检查所有东西是否都位于它应该位于的位置。这可能吗?

我在 msdn http://social.msdn.microsoft.com/Forums/en-US/parallelcppnative/thread/37a02e17-e160-48d9-8625-871ff6b21f72上找到了这个请求,但答案使用的是 QueryWorkingSetEx()似乎是特定于 Windows 的。这可以在Linux上完成吗?准确地说,我正在使用 Debian Squeeze。

谢谢。

0 投票
1 回答
1812 浏览

c - 为什么使用 numa_alloc_onnode() 进行分配会导致“页面不存在”?

当我使用 numa_alloc_onnode() 在特定的 NUMA 节点上分配内存时,如下所示:

然后使用 move_pages() 尝试确认分配的内存确实在节点 1 上:

在哪里

我得到答案“ptr 在节点 -2 上”。从 errno-base.h 我发现 2 是 ENOENT,move_pages() 手册页说 -ENOENT 在这种情况下的状态意味着“页面不存在”。

如果我用普通的 malloc() 替换 numa_alloc_onnode() 它工作正常:我得到一个节点号。

有谁知道这里发生了什么?

提前致谢。

0 投票
2 回答
9480 浏览

linux - NUMA 感知缓存对齐内存分配

在 linux 系统中,pthreads 库为我们提供了一个用于缓存对齐的函数(posix_memalign),以防止错误共享。要选择架构的特定 NUMA 节点,我们可以使用 libnuma 库。我想要的是两者都需要的东西。我将某些线程绑定到某些特定处理器,并且我想从相应的 NUMA 节点为每个线程分配本地数据结构,以减少线程内存操作的延迟。我怎样才能做到这一点?

0 投票
1 回答
915 浏览

linux - 如何在用户模式 ​​NUMA 感知内存分配器中实现交错页面分配?

我正在为 linux 构建一个用户模式的 NUMA 感知内存分配器。分配器在初始化期间会获取一大块内存,每个 NUMA 节点一个块。在此之后,通过从大块池中提供尽可能多的内存页面来满足用户请求的内存页面。

如果用户要求 n 页,则很容易从特定块中给出 n 页。但是现在我想实现一个交错分配策略,用户从每个块中获取一个页面,循环最多 n 个页面。这带来了这些页面的虚拟地址不再连续的问题。

Q1:有没有办法返回虚拟可寻址的连续内存?我能想到的唯一解决方案是使用知道如何从一页跳转到另一页的“智能”指针。

我走这条路的原因之一是我对循环策略不严格(确定性)的 linux 的 MPOL_INTERLEAVE 内存分配策略不满意。

Q2:是否有一种廉价的方法可以知道给定的虚拟地址范围映射到哪个页面和 NUMA 节点?更准确地说,我不知道如何通过阅读 /proc/< proc_id >/numa_maps 获得细粒度的页面级信息。

谢谢您的回答。

0 投票
2 回答
6792 浏览

powershell - Powershell: Find out if NUMA is configured and how many CPUs are assigned to each NUMA node?

Using Powershell, how can I find out if my server has NUMA enabled and how many CPUs are assigned to each NUMA node?

Update:

I found out here that the microsoft.sqlserver.management.smo.server object object has an affinityinfo field. However, that field doesn't exist in my server object in Powershell when I create it (SQL Server 2005 on Windows XP).

Update:

It appears that the affinityinfo field only exists in SQL Server 2008 R2 and later.

0 投票
2 回答
686 浏览

matlab - performance issues with parallel MATLAB on a NUMA machine

I'm running memory-intensive parallel computations in MATLAB on a 64-core NUMA machine under Windows 7, 8 cores per socket. I'm using parallel computing toolbox to do that. I've noticed a very strange cpu load pattern: then running say 36 parallel MATLABs, the cores on the 1st socket are fully loaded, 2nd socket is almost fully loaded too, third socket is about 50% and so on. The last socket is usually almost completely free and doing nothing. Running more than 12 parallel workers simultaneously seem to very adversely affect performance of all workers.

I tried to experiment with cpu affinity, pinning different workers to different cores. While it helps in simple tests (i.e. cpu load pattern becomes uniform across all cores), it doesn't help in our real-life memory-intensive computations.

I suspect the problem is with memory locality. I.e. all memory is allocated on 1st and 2nd sockets. This would explain strange cpu load: OS tires to run computational threads closer to the data. But I don't know neither how to confirm this suspicion directly, nor how to fix it, if it's true.

I use maxNumCompThreads(4) in all my parallel workers, if that's important. Hyperthreading is off.

0 投票
1 回答
2057 浏览

c++ - Windows SetThreadAffinityMask 无效

我编写了一个小型测试程序,在其中尝试使用 Windows API 调用 SetThreadAffinityMask 将线程锁定到单个 NUMA 节点。我使用 GetNumaNodeProcessorMask API 调用检索节点的 CPU 位掩码,然后将该位掩码与 GetCurrentThread 返回的线程句柄一起传递给 SetThreadAffinityMask。这是我的代码的一个大大简化的版本:

我当然会检查 API 调用是否在我的代码中返回 0,并且我还打印了 NUMA 节点掩码,这正是我所期望的。我还遵循了其他地方给出的建议,并打印了第二次相同调用 SetThreadAffinityMask 返回的掩码,它与节点掩码匹配。

但是,通过查看 DoWork 函数执行时的资源监视器,工作被分配到所有内核中,而不仅仅是表面上绑定的内核。使用 SetThreadAffinityMask 时我可能错过了哪些错误?我正在运行 Windows 7 Professional 64 位,DoWork 函数包含一个与 OpenMP 并行的循环,该循环对三个非常大的数组的元素执行操作(它们组合起来仍然能够适合节点)。

编辑:为了扩展 David Schwartz 给出的答案,在 Windows 上,任何使用 OpenMP 产生的线程都不会继承产生它们的线程的亲和性。问题在于,而不是 SetThreadAffinityMask。