Linux - 确保一个核心专门用于关键任务

Linux - make sure a core is exclusively saved for critical tasks

我有一个在基于 Linux 的机器上启动的进程,只有两个内核。

假设我的进程是系统中唯一的进程(我将忽略其他进程甚至系统进程)。

我的过程分为两部分:

  1. 关键性能代码
  2. 低优先级代码

另外假设我的主进程是在 Core 0 上启动的,我想专门为关键性能代码保留 Core 1。

我想把问题分成两个:

  1. 我如何确保我进程中的每个线程(包括我已将我的代码链接到的第 3 方库可能调用 pthread_create 等)将始终在 Core 0 上打开新线程 ?

  2. 我如何编写一个 test 来验证核心 1 除了性能关键路径之外什么都不做?

我熟悉以下 API:

pthread_setaffinity_np

可以设置特定的线程亲和性,但我想知道是否有更底层的方法来确保即使是第 3 方库(从进程内部)创建的线程也将固定到核心 0。

也许我可以将进程的 默认 亲和力设置为核心 0,并将特定线程固定到核心 1?

解决方案之一是安装(如果您还没有)和 运行 Cpuset 实用程序。详情可见here

您已经描述了您想要的解决方案:

Perhaps I can set the default affinity for the process to be Core 0 and for a specific thread - pin it to Core 1?

但是,也许问题在于您不确定如何实现这一目标。

Linux提供sched_setaffinity设置当前进程的affinity

要让新创建的线程在特定核心上达到 运行,最简单的方法是初始化一个 pthread_attr_t, and set the desired core affinity with pthread_attr_setaffinity_np