问题标签 [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 回答
1146 浏览

linux - 适用于 Linux 的 NUMA 感知命名共享内存

Windows API 提供 CreateFileMappingNuma 函数 ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa366539(v=vs.85).aspx ) 在特定 NUMA 上创建命名共享内存空间节点。

到目前为止,我还没有找到 Linux 的等效功能。

我目前的方法如下所示:

  1. 分配命名共享内存(使用 shm_open(...))
  2. 确定当前的 NUMA 节点(使用 numa_move_pages(...))
  3. 将页面移动到目标节点(再次使用 numa_move_pages(...) )

有谁知道更好的方法?

编辑:记录在案:我提出的实施确实按预期工作!

0 投票
0 回答
153 浏览

c - numa:下一次接触政策

谁能解释如何在 NUMA 系统上使用“mprotect”来实施“next-touch”策略?假设我有一个整数数组 A,我使用“mprotect”保护它。接下来,每当任何线程尝试访问它时,我只会获得有关尝试访问的单个地址的信息(c-sigsegv-handler-mprotect)。接下来我该怎么做?如果有人可以根据“下一次接触”政策解释所需的所有步骤(从头开始),那就太好了,谢谢!

0 投票
2 回答
3224 浏览

kernel - numactl 只检测一个节点,它应该是两个

我在 serverfault 中问过这个问题,但一周没有回复。

我有一个双 Xeon E5522 2.26Ghz CPU(一块主板上有两个四核 CPU)。据我所知,这是一个 NUMA 架构。这台机器正在运行带有 3.2 内核的 ubuntu 服务器 12.04。

内核应该是 numa-aware

问题是“numactl”无法识别这两个节点,它将它视为一台大型 SMP 机器。

我需要整个环境都支持 NUMA,这样我就可以编写一个 numa 应用程序。¿ 忽略这一点是否安全?¿ 可以做些什么让 numactl 识别 2 个节点?

0 投票
1 回答
2566 浏览

memory - 现代 Linux 中是否有 NUMA 下次接触策略

当我们在 NUMA 系统上工作时,内存可以相对于当前 NUMA 节点是本地或远程的。为了使内存更加本地化,​​有一个“first-touch”策略(默认内存到节点绑定策略): http: //lse.sourceforge.net/numa/status/description.html

默认内存绑定 重要的是,用户程序的内存分配在靠近包含运行它们的 CPU 的节点上。因此,默认情况下,页面错误由包含页面错误 CPU 的节点的内存来满足。因为第一个接触页面的 CPU 将是错误进入页面的 CPU,所以这个默认策略称为“第一次接触”。

http://techpubs.sgi.com/library/dynaweb_docs/0640/SGI_Developer/books/OrOn2_PfTune/sgi_html/ch08.html

默认策略称为首次接触。在此策略下,首先接触(即写入或读取)内存页面的进程会导致该页面在运行该进程的节点中分配。此策略适用于顺序程序和许多并行程序。

还有一些其他的非本地政策。还有一个函数要求将内存段显式移动到某个 NUMA 节点。

但有时(在单个应用程序的许多线程的上下文中)拥有“下一次接触”策略可能很有用:调用一些函数来“取消绑定”一些内存区域(最多 100 s MB)与一些数据并重新应用“第一次接触” - 这个区域上的类似处理程序,它将在下一次触摸(读取或写入)时将页面迁移到访问线程的 numa 节点。

当有大量数据要由许多线程处理并且有不同的访问该数据的模式时(例如,第一阶段 - 通过线程按列拆分 2D 数组;第二阶段 - 按行拆分相同的数据),此策略很有用。

自 9 以来,Solaris 通过带有 MADV_ACCESS_LWP 标志的 madvice 支持此类策略

https://cims.nyu.edu/cgi-systems/man.cgi?section=3C&topic=madvise

MADV_ACCESS_LWP 告诉内核下一个接触指定地址范围的 LWP 将最频繁地访问它,因此内核应该尝试为这个范围和 LWP 相应地分配内存和其他资源。

有(2009 年 5 月)名为“affinity-on-next-touch”的 Linux 内核补丁, http: //lwn.net/Articles/332754/线程),但据我了解,它未被主线接受,不是它?

还有 Lee Schermerhorn 的“migrate_on_fault”补丁 http://free.linux.hp.com/~lts/Patches/PageMigration/

所以,问题是:在当前的 vanilla Linux 内核或一些主要的分支中,如 RedHat linux 内核或 Oracle linux 内核,NUMA 是否有一些下一个接触?

0 投票
1 回答
2102 浏览

linux - NUMA 机器上的共享库瓶颈

我正在使用 NUMA 机器(SGI UV 1000)同时运行大量数值模拟,每个都是使用 4 核的 OpenMP 作业。但是,运行大约 100 多个这样的作业会导致性能显着下降。我们关于为什么会发生这种情况的理论是,软件所需的共享库只加载到机器的全局内存中一次,然后系统就会遇到通信瓶颈,因为所有进程都在访问单个节点上的内存。

这是一个旧软件,没有修改范围,静态 make 选项不会静态链接它需要的所有库。据我所知,最方便的解决方案是以某种方式强制系统在每个进程或节点上加载所需共享库的新副本(我在每个进程或节点上运行 3 个进程),但我没有能够找到如何做到这一点。谁能告诉我如何做到这一点,或者对如何解决这个问题有任何其他建议?

0 投票
1 回答
266 浏览

haskell - 多核处理器上的 Haskell 运行时结构

我知道 Haskell 运行时会在每个内核上创建一个操作系统线程。然后运行时将轻量级线程/用户线程调度到这些预先部署的操作系统线程上。大致。

但是 Haskell 运行时是如何构建的——它是整体的,还是由单独的部分组成的?

我真正想知道的是 RT 本身在内核之间的可扩展性和可分布性如何——例如,我理论上是否可以拥有 1000 个内核的系统并在 5% 的内核上启动 Haskell RT(作为 50 个独立或分布式 RT) ?

0 投票
0 回答
474 浏览

c - 从多个 NUMA 节点中保留内存块

这个问题讨论了如何强制 linux 内核排除一些内存被使用(因此对内核可见)。与memmap=nn[KMG]$ss[KMG]您一起可以排除 1 块内存。

是否可以多次提供此内核启动参数以从各种 NUMA 节点中排除物理内存的多个部分。

你试过了吗?有什么建议么 ?

0 投票
1 回答
516 浏览

java - 为什么我的 Opteron 内核每个都只以 75% 的容量运行?(25% CPU 空闲)

我们刚刚交付了功能强大的 32 核 AMD Opteron 服务器,容量为 128Gb。我们有 2 个 6272 CPU,每个 CPU 有 16 个内核。我们正在 30 个线程上运行一个长时间运行的大型 java 任务。我们开启了针对 Linux 和 java 的 NUMA 优化。我们的 Java 线程主要使用该线程私有的对象,有时会读取其他线程将要读取的内存,并且非常偶尔会写入或锁定共享对象。

我们无法解释为什么 CPU 内核有 25% 空闲。以下是“top”的转储:

Java 堆栈的转储确认没有任何线程位于使用锁的少数地方附近,也没有任何靠近任何磁盘或网络 i/o 的地方。

我很难找到关于“空闲”与“等待”的“顶部”含义的清晰解释,但我得到的印象是“空闲”意味着“没有更多需要运行的线程”,但这在我们的案例。我们正在使用“Executors.newFixedThreadPool(30)”。有大量待处理的任务,每个任务持续 10 秒左右。

我怀疑解释需要对NUMA有很好的理解。当 CPU 等待非本地访问时,您会看到“空闲”状态吗?如果不是,那么解释是什么?

0 投票
2 回答
1054 浏览

numa - 如何将所有内存分配限制到一个 NUMA 节点

我是 NUMA 感知多线程编程的新手。我正在编写我的代码,以便所有线程及其内存分配都限制在一个节点上。在程序开始时,我进行了以下调用:

我的理解是,以这种方式调用 numa_bind 会将所有线程和所有内存分配绑定到节点 0。

此外,当我从此代码启动 pthread 时,我使用以下方法将它们绑定到特定 CPU:

但是,当我查看 /proc//numa_maps 时,我仍然可以看到某些库(例如 libc)绑定到节点 1 上的内存。如何确保进程所需的所有内存都绑定到节点0?

0 投票
1 回答
481 浏览

numa - SGI Numatools 的源代码(dplace 实用程序和内核模块)

我很好奇是否有 SGI Numatools 的源代码,它是专有包 (SGI ProPack) 的一部分;但包含 GPL 代码。该软件包由 dlook、dplace NUMA 实用程序和 numatools 内核模块组成。

GPL 许可证在 SGI ProPack 的发行说明中列出:http: //techpubs.sgi.com/library/dynaweb_docs/linux/usr/relnotes/sgi-propack-5-sp3-for-linux-for-amd64-em64t -for-use-with-sles10-sp1/PACKAGE_LICENSES.txt