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

c# - 您预计 CLR 会很快适应 NUMA 吗?

似乎 NUMA 有望用于并行编程,如果我没记错的话,当前最新的 cpus 已经内置了对它的支持,比如 i7。

您预计 CLR 会很快适应 NUMA 吗?

编辑:我的意思是支持它,并利用它。

0 投票
3 回答
847 浏览

windows - Nehalem Xeon 在 32 位操作系统、XP 与 2003 上的性能

我必须在 WinXP 或 Win2003 上运行 32 位代码。Nehalem Xeons(5500 系列)应该是最快的,但我不确定内存安排会发生什么。我不确定两个部分:

  1. 为了获得最大速度的内存设置,我需要安装至少 6gb 的 RAM(让每个 CPU 3 块都可以使用)。内存交错的方式是否可以让 32 位操作系统(WinXP 或 2003)从中获得最大性能?(我很好浪费了几 GB 的 RAM)。
  2. Win2003 的 NUMA 支持是否适用于 Xeon 5500s?(如果是这样,我想我应该使用 Win2003 而不是 WinXP?)
0 投票
2 回答
1201 浏览

c++ - 获取 NUMA 系统中的节点距离(跳数)

是否有任何 API/方法可以获取两个 NUMA 节点之间的“距离”(在文献中称为“跳数”)?我想实现一个利用这一点的内存分配系统(从最近的节点重用内存,因为访问速度更快)。
Windows 似乎没有这样的功能……而 libnuma (在 Linux 下)似乎也没有。有什么方法可以获取此信息(即使使用'cpuid'之类的东西)?

0 投票
1 回答
286 浏览

linux - 同时启动进程比惊人的慢;为什么?

我正在评估具有 16GB RAM 的 8 核机器上的实验系统设置的性能。我有两个主内存 Java RDBMS (hsqldb) 正在运行,并且针对其中的每一个运行一个 TPCC 客户端(从 jTPCC/BenchmarkSQL 派生)。

我有脚本来启动东西,所以例如 hsqldb 实例开始于:

如果我几乎同时启动客户端:

然后,每个客户的初始速率都在 500-1000 tpmC 左右(这基本上是每分钟的交易量),然后很快(在不到一秒的时间内)稳定到 200-250 tpmC 左右的速率。OTOH,如果我在启动第二个客户端之前等待一两秒:

然后每个客户端以 2500+ tpmC 运行。等待超过一秒钟没有任何区别。

这很奇怪,因为客户端 0 只与服务器 0 对话,而客户端 1 只与服务器 1 对话。目前尚不清楚为什么会有如此剧烈的性能干扰。

我认为这可能是由于客户端的 CPU 调度程序亲和性,但它们在缓慢运行时仅占用单个内核的 1-3%(快速运行时为 20-25%)。另一个怀疑是客户端的 NUMA 绑定(同一内存节点上的内存争用),但机器显然只有 1 个内存节点(只有 /sys/devices/system/node/node0),而且每个客户端只占 0.8%的记忆。

这似乎也不是由于 hsqldb 实例的 CPU 绑定,因为只需重新启动客户端(并等待/不等待一秒钟)就可以看到快速和慢速行为,让相同的 hsqldb 实例在两者上运行(即hsqldb 不必重新启动)。hsqldb 慢时占用 4-8% 的 CPU,快速时占用 80% 的 CPU,以及 4.3% 的内存。

任何其他想法为什么会发生这种情况?不涉及磁盘 IO,而且我还没有接近耗尽系统的内存。提前致谢。其他相关信息如下:

0 投票
1 回答
191 浏览

c++ - 如何使用 GetNumaProximityNode (Win7+)?

从 Win7/Server2008R2 开始,GetNumaProximityNode(Ex) 函数可用。它应该有助于检索 NUMA 节点之间的距离,但我无法从文档(http://msdn.microsoft.com/en-us/library/ms683206(VS.85).aspx)中理解它应该如何工作. 它说你给它一个距离,它返回相应的节点(如果有的话)。

从 Linux 内核和一些 HP APIC 文档中阅读了一些代码,我看到距离以 10 的整数倍数表示(与自身的距离是 10),但它也可以是 18 之类的东西(不完全是慢两倍)。但我仍然无法弄清楚如何使用 Windows API 计算两个节点之间的距离(在 Linux libnuma 下有一个“距离”函数可以做到这一点)。

有谁知道如何使用这个功能?

0 投票
3 回答
1377 浏览

linux - gcc、icc 或 Microsoft 的 C/C++ 编译器是否支持或了解有关 NUMA 的任何信息?

如果我有一个多处理器板,它具有缓存一致的 非统一内存访问 (NUMA),即单独的“北桥”,每个处理器都有单独的 RAM,那么任何编译器是否知道如何在不同的内存系统中自动传播数据,例如处理本地线程的进程主要是从与运行线程的处理器相关联的 RAM 中检索数据?

我有一个设置,其中 1 GB 连接到处理器 0,1 GB 连接到处理器 1,等等。最多 4 个处理器。在相干内存空间中,第一个处理器上 RAM 的物理内存是地址 0 到 1GB-1。对于第二个处理器,它是 1GB 到 2GB-1,依此类推。

任何编译器,或者malloc具体来说,是否会将由特定内核上的进程分配的新内存与与该内核关联的物理 RAM 相关联?

0 投票
1 回答
718 浏览

atomic - _mm_mwait 是如何工作的?

如何_mm_mwaitpmmintrin.h工作?(我的意思不是它的 asm,而是行动以及如何在 NUMA 系统中采取这种行动store监控很容易在基于总线的 SMP 系统上实现,并具有总线侦听功能。)

什么处理器实现它?

它用于某些自旋锁吗?

0 投票
1 回答
922 浏览

memory - 在 Windows XP 中将内存地址映射到物理模块

我计划在具有双处理器、基于 Intel 的 Nehalem 微架构和三通道 RAM 的工作站上运行 32 位 Windows XP。即使 XP 被限制为 4 GB 的 RAM,我的理解是它可以在安装超过 4 GB 的情况下运行,但只会暴露 4 GB(或略少)。

我的问题是:假设 6 GB 的 RAM 安装在六个 1 GB 的模块中,Windows 实际将哪个物理 4 GB 映射到它的地址空间?

尤其:

  • 它会使用所有六个 1 GB 模块,利用所有内存通道吗?(我的猜测是肯定的,并且到组内各个模块的映射发生在硬件中。)

  • 它会将 2 GB 的地址空间映射到两个 NUMA 节点中的每一个(因为每个处理器都有自己的内存接口),还是一个处理器可以快速访问 3 GB RAM,而另一个处理器只有 1 GB?

谢谢!

0 投票
1 回答
1496 浏览

c++ - Windows 7 中的 NUMA 内存区域分配

我们的应用是:

  1. 硬件配置是运行 Windows 7/64 位的双 Xeon 服务器。每个 Xeon 都有自己的 12gb RAM,采用 [NUMA][1] 配置,通过桥接将两个内存区域连接在一起。
  2. 所有软件均使用 VS2008 用 c++ 编写并编译为 64 位应用程序。
  3. Generation 应用程序会创建一个大型共享内存 (4-6gb) 区域,该区域只能由设置为在第一个 Xeon 处理器上运行的处理器亲和性的进程访问。
  4. 接收应用程序会创建一个大型共享内存区域 (2-4gb),该区域主要由具有处理器亲和性的进程使用,以在第二个 Xeon 处理器上运行。但是,当 Generation App 完成构建一组数据(32mb 到 128mb)时,它会将这些信息传输到在此 Xeon 上运行的共享内存区域。
  5. 我们正在使用 Boost Interprocess 库来管理我们的共享内存区域。

我的问题是,当每个创建它的共享内存区域的进程时,Windows 是否在创建它的同一个 Xeon 芯片上分配该内存?或者我应该使用 Numa 内存功能之一将内存明确分配给特定的 Xeon 芯片吗?


编辑 - 帮助澄清 NUMA 是什么,来自维基百科 -

非统一内存访问或非统一内存架构 (NUMA) 是用于多处理器的计算机内存设计,其中内存访问时间取决于相对于处理器的内存位置。在NUMA下,一个处理器可以比非本地内存更快地访问自己的本地内存,即另一个处理器本地的内存或处理器之间共享的内存。处理器之间。

链接是http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access了解更多详情。对我来说,随着多处理变得越来越普遍,这是我们都必须了解更多的事情之一。

[1]: http: //msdn.microsoft.com/en-us/library/aa363804%28VS.85%29.aspx处理器之间。

0 投票
1 回答
1281 浏览

c++ - 在 Windows 7/64 上使用 VirtualAllocExNuma 的内存访问时间很慢

在我们的应用程序中,我们在双 Xeon 服务器上运行,每个处理器的内存配置为 12gb 本地,并且连接两个 Xeon 的内存总线。出于性能原因,我们希望控制分配大(>6gb)内存块的位置。以下是简化代码 -

代码原样,在 Win 7/64 上使用 VS2008 可以正常工作。

在我们的应用程序中,这块内存用作通常存储在硬盘驱动器上的静态对象(1-2mb ea)的缓存存储。我的问题是,当我们使用 memcpy 将数据传输到缓存区域时,它所花费的时间是使用new char[xxxx]. 并且没有其他代码更改。

我们不知道为什么会发生这种情况。关于在哪里看的任何建议?