Linux Taskset:多线程进程的线程是否总是在特定核心上运行?

3

我使用taskset命令在Linux主机上设置了一个多线程进程,如下所示:

taskset -c 1,2 ./myprocess

一个特定的线程是否总是运行在特定的CPU上,例如,线程1总是在c1上运行?还是它会在不同的时间运行在c1或c2上?

1个回答

3
不,筛选器应用于整个进程,线程可以在(受限制的)核心列表之间移动。如果您希望线程不移动,则需要单独设置每个线程的亲和力(例如使用pthread_setaffinity_np)。请注意,您可以使用强大的hwloc工具(hwloc-ps -t)检查给定进程的线程亲和力。
请注意,一些库/框架有更轻松的方法来实现此功能。这适用于OpenMP程序,您可以使用环境变量(例如OMP_PLACES)来设置每个线程的亲和力。

谢谢,那我将启动多个进程实例,每个实例在一个拥有较少线程的核心上运行。 - flyisland
我正在使用例如 taskset -c 7,8 ./executable,但它只占用了7和8核中的一个。其中7和8是CentOS机器上的独立核心。请问有什么方法可以确保可执行文件同时使用第7和第8个核心吗? - SatKetchum
@SatKetchum 在 taskset 文档中,“processor”(又名“CPU”)的含义不太清楚。据我所知,在这个上下文中,“processor”是指处理单元,因此它可以是支持SMT或简单核心的微处理器芯片上的硬件线程。如果第7和8位置是映射在同一个核心上的两个硬件线程,那么效率通常会比提供两个不同核心的硬件线程 ID 低。实际上,这甚至更加复杂:有逻辑和物理 ID,并且您需要选择正确的 ID,即使文档几乎从不告诉您哪一个是必需的... - Jérôme Richard
@SatKetchum 对于系统命令,物理 ID 通常是正确的选择。像 hwloc 这样的工具可以使所有这些更加清晰,并避免(非常常见的)错误,特别是 lstopohwloc-calc - Jérôme Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接