Linux – 确保核心专门保存为关键任务

我有一个在基于Linux的机器上正确启动的进程。

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

我的过程分为两部分:

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

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

我想把问题分成两部分:

  1. 我怎样才能确保我的过程中的每个线程(包括第三方库,我已经链接我的代码可能会调用pthread_create等)将始终打开新的线程在核心0?

  2. 我如何编写一个能够validationCore 1除了性能关键path之外什么都不做的testing呢?

我熟悉API,例如:

pthread_setaffinity_np 

可以设置一个特定的线程亲和力,但我想知道是否有更低层次的方法来确保第三方库创build(从进程内)的线程也将被固定到核心0。

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

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

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

但是,也许问题是你不知道如何做到这一点。

Linux提供了sched_setaffinity来设置当前进程的相关性。

为了让新创建的线程在特定内核上运行,最简单的方法是初始化pthread_attr_t ,并使用pthread_attr_setaffinity_np设置所需的核心关联。

其中一个解决方案是安装(如果您还没有安装)并运行Cpuset实用程序。 详情可以在这里找到