如何使用 numactl 强制进程仅在单个线程上运行?

如何使用 numactl 强制进程仅在单个线程上运行?

我的本地计算机有多个 CPU,每个 CPU 都有多个核心,并且每个 CPU 都可以支持多个线程。我有一个多线程进程,我想强制仅在单个线程上运行。我知道numactrl可以做到这一点。

我如何使用numactl它来强制进程仅在单个线程上运行?或者,是否有更简单的内置实用程序可以做到这一点?

答案1

numactl --physcpubind=+1 /path/to/your/executable

这应该在分配给您的芯片组(索引 1)的第二个核心/CPU 上运行您的进程。有关更多详细信息,请参阅手册页的示例部分: http://linux.die.net/man/8/numactl

编辑:我应该指出,这意味着程序将最多同时运行一个线程,但这并不意味着整个过程将仅由一个线程组成。如果程序被编写为产生一个新线程,它会这样做,但它将在与其余进程相同的核心/CPU 上执行。区别很小,但仍然可能很重要。

答案2

要将程序限制到一个 CPU 硬件核心/线程,也可以使用taskset 1 prog [args]

附言

限制程序可以拥有的进程数(线程)的程序是prlimit --nproc=1 prog [args]。我尝试使用它rsync并得到“fork 不可用... IPC 错误”,最后 -rsync被写入不能作为一个线程工作。

strace prlimit --nproc=1 rsync  

运行strace已显示如下面的 SO 链接中所述,clone调用的返回值是-1 EAGAIN (resource temporary unavailable).

PS 想法取自https://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread

相关内容