我有一个在基于 Linux 的机器上启动的进程,该机器恰好有两个内核。
假设我的进程是系统中唯一的进程(我将忽略其他进程甚至系统进程)。
我的流程分为两部分:
- 关键性能代码
- 低优先级代码
另外假设我的主进程在 Core 0 上启动,我想专门为关键性能代码保留 Core 1。
我想将问题分为两个:
我如何确保我的进程中的每个线程(包括我已链接我的代码的第 3 方库,可能会调用 pthread_create 等)将始终打开新线程核心 0 ?
我如何编写一个测试来验证核心 1 除了性能关键路径之外绝对没有做任何事情?
我熟悉以下 API:
pthread_setaffinity_np
可以设置特定的线程关联,但我想知道是否有更底层的方法来确保即使是第 3 方库(从进程内部)创建的线程也将固定到核心 0。
也许我可以将进程的默认亲和性设置为核心 0,并将特定线程设置为核心 1?
最佳答案
您已经描述了您想要的解决方案:
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
设置当前进程的亲和度。
要让新创建的线程在特定内核上运行,最简单的方法是初始化一个 pthread_attr_t
,并使用 pthread_attr_setaffinity_np
设置所需的核心亲和性.
关于c++ - Linux - 确保专门为关键任务保留一个核心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057990/