【发布时间】:2013-02-05 09:44:26
【问题描述】:
假设我们有多个处理器/内核和两个线程。是否可以强制 linux 调度程序在其执行的每个实例中始终将特定线程(两者)调度到特定处理器。是否在创建时为线程设置处理器亲和性,足以达到此目的
【问题讨论】:
标签: linux multithreading multiprocessing scheduling multicore
假设我们有多个处理器/内核和两个线程。是否可以强制 linux 调度程序在其执行的每个实例中始终将特定线程(两者)调度到特定处理器。是否在创建时为线程设置处理器亲和性,足以达到此目的
【问题讨论】:
标签: linux multithreading multiprocessing scheduling multicore
如果您查看taskset 的手册页,您会看到以下语句:
Linux 调度程序将遵循给定的 CPU 亲和性,并且该进程不会在任何其他 CPU 上运行。
这意味着为特定进程设置 CPU 亲和性将确保它始终在该 CPU 上运行。
存在允许您为特定线程设置线程亲和性的 API,我想 OS 调度程序也会支持这一点。
如果您查看sched_setaffinity,您会看到一行内容:
这些对进程将运行的实际 CPU 集的限制是由内核静默施加的。
这意味着这将确保您的线程仅在此函数设置的 CPU 上运行。
【讨论】:
shed_setaffinity 在代码中进行设置。您应该能够查找的亲和力掩码。