问题标签 [numactl]
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.
c++ - C++ 中的最大线程数
琐事
通常,当我想用 C++ 编写多线程程序时,我会询问硬件支持的并发线程数,如下所示:
这将返回支持的并发总数。因此,如果我们有 2 个 CPU,每个 CPU 可以支持 12 个线程,numThreads
则等于 24。
问题
最近我曾经numactl
强制一个程序只在一个 CPU 上运行。
问题是std::thread::hardware_concurrency()
即使我使用它运行它也会返回 24 numactl -N 1
。但是,在这样的设置下,输出nproc
为 12。
问题
也许std::thread::hardware_concurrency()
不是为了支持这种情况而设计的。那不是我关心的问题。我的问题是,当我想用numactl
.
更多信息
如果您还没有处理过numactl
,它可以用于使用 NUMA 策略运行进程。例如,您可以使用它来强制您的程序仅在一个 CPU 上运行。这种情况的用法如上所示。
linux - 局部变量是否在不同的 numa 节点上分配?
如果我们有一个应用程序有两个内存分配 malloc 和 numa_alloc(1)(假设我们有两个 numa 节点 0 和 1),malloc 将在节点 0 上使用内存,而 numa_alloc 将在节点 1 上分配。
在这个应用程序中,如果我们有像 int x 或 sem_t tst 这样的局部变量;这些局部变量在哪里分配;在节点 0 或 1 上?
如果它们在节点 1 上分配,有什么方法可以限制所有与应用程序相关的分配需要在节点 0 上完成,而节点 1 仅用于 numa 分配?
performance - numactl & perf 如何更改子进程的内存放置策略?
我注意到 numactl对流基准有一些奇怪的影响
更具体地说,“numactl ./stream_c.exe”报告的内存带宽比“./stream_c.exe”低 40%。
我检查了 numactl源代码,如果我不给它任何参数,它应该没有什么特别之处。所以我天真地期望 numactl 在“numactl ./stream_c.exe”中没有性能影响,根据我的实验,这是不正确的。
这是具有高核数处理器的双插槽服务器。
使用 numastat,我可以看到 numactl 命令导致内存分配不平衡:两个 numa 节点将内存分配拆分为 80:20。
没有 numactl,内存以非常平衡的方式分配:46:54。
我还发现这不仅仅是一个 numactl 问题。如果我使用 perf 调用 stream_c.exe,内存分配甚至比使用 numactl 更不平衡。
所以这更像是一个内核问题:numactl 和 perf 如何更改子进程的内存放置策略?谢谢!
parallel-processing - 当所有 lscpu 显示 4 个 numa 节点时,使用 --membind=1 或 3 了解失败的 numactl
我一直在试图找出numactl
命令失败的问题,但看起来我可能并不完全理解这种方式numactl
或OMP_MP_THREAD
工作方式。
我正在尝试使用 运行main.py
绑定到 numa-node-1 的 4 个 cpu 的 1 个实例的脚本numactl --physcpubind=24-27 --membind=1 python -u main.py
,如图lscpu
所示 CPU 24-27 绑定到 numa-node-1。
但我收到以下错误。
如果我使用--membind=3,我会得到同样的错误,但是当我使用--membind=2 时它会运行。
问题:
1.对于 numa-node=0 是物理内核中的每个 0-230-23,96-119
还是只有一些 0-23 是物理内核,因为每个内核有 2 个线程?如何知道 0-23,96-119 中哪些是第二个线程?
2.我是否将物理核心正确绑定到节点?为什么会出现上述失败?
3.哪 2 个 numa 节点在 socket-0 上,哪些在 socket-1 上?
输出:
lscpu:
numactl --硬件:
parallel-processing - 对 OMP_NUM_THREADS 和 numactl NUMA-cores 绑定感到困惑
我对同一 python 命令的多次启动如何绑定到 NUMA Xeon 机器上的内核感到困惑。
我读到OMP_NUM_THREADS
env var 设置了为numactl
进程启动的线程数。因此,如果我在超线程 HT 机器上运行numactl --physcpubind=4-7 --membind=0 python -u test.py
(OMP_NUM_THREADS=4
下面的 lscpu 输出),它会将这个 numactl 进程限制为 4 个线程。但是由于机器有 HT,我不清楚4-7
上面是 4 个物理还是 4 个逻辑。
如何找到其中的哪些 numa-node-0 核心
0-23,96-119
是物理的,哪些是逻辑的?都是96-119
合乎逻辑的还是穿插的?如果
4-7
都是物理内核,那么在启用 HT 的情况下,将只需要 2 个物理内核,那么另外 2 个会发生什么?在将线程绑定到物理内核时,OpenMP 库在哪里被调用?
(根据我有限的理解,我可以使用不同的 numactl 绑定python main.py
在sh
shell 中启动命令 20 次,并且 OMP_NUM_THREADS 仍然适用,即使我没有在任何地方明确使用 MPI lib,对吗?)
db2 - db2prereqcheck 实用程序找不到库文件 libnuma.so.1。在 ubi7/ubi: 最新的 docker 镜像
我在 ubi7/ubi:latest Docker 映像上安装 numactl-libs(或 libnuma.so.1)以运行 db2 安装时遇到问题。
我已经为 db2 构建了一个 Docker 镜像,想测试一下 DB2 安装是否运行成功。但是,我收到以下错误消息:
DB2 数据库“服务器”的要求不匹配。版本:“11.1.4.6”。
当前系统上未满足的先决条件摘要:
DBT3609E db2prereqcheck 实用程序找不到库文件 libnuma.so.1。
该映像具有 ubi7/ubi:latest 作为基础映像,并且还安装了以下库,如下所示:
除numactl-libs(或libnuma.so.1?)外,所有库均已成功安装。
注意:手动安装 numactl-libs 没有问题,因此 DB2 安装成功:
yum install -y numactl-libs
但是,我希望使用命令或其他等效命令自动完成 numactl-libs 的安装。
不幸的是,尝试使用该命令yum install -y libnuma.so.1
或yum install -y libnuma.so.*
没有更改任何内容,并且显示了相同的错误消息。
你能帮我么?我会很感激
注意:在我的例子中,使用的是 64 位版本。
更新:
- 不幸的是,即使尝试安装
libnuma-dev
并libnuma1
没有更改任何内容,错误消息仍然相同。 - 的输出
yum provides libnuma.so.1
是:
加载的插件:ovl、product-id、search-disabled-repos、
subscription-manager 此系统未向
授权服务器注册。您可以使用订阅管理器进行注册。
未找到匹配项
- 看来问题是
numactl-libs
无法安装: 的输出yum install numactl-libs
是:
加载的插件:ovl、product-id、search-disabled-repos、subscription-manager。此系统未向授权服务器注册。您可以使用订阅管理器进行注册。没有可用的包 numactl-libs。
gpu - QEMU“GPU”NUMA节点设置
当我在具有 2 个 CPU 插槽和 4 个 GPU 的裸机主机系统上安装 Nvidia CUDA Toolkit 时,NUMA 设置如下所示:
在哪里:
- 0 和 8 是 CPU
- 252,253,254,255 是 GPU
安装 CUDA 后,我们可以检查 cpuset.mems:
现在我的问题是:当我将 2 个 GPU 传递给 KVM 来宾时,使用:
我希望设置是
- CPU0 NUMA ID 0
- GPU1 NUMA ID 255
- GPU2 NUMA ID 254
但似乎他们正在获得随机值:
有时是0,7-8
有时0,5-6
KVM/libvirt 中是否有可能修复 GPU 编号,或者至少告诉他们从 255 开始倒退,因为它是裸机完成的?
谢谢!