Linux - 确保一个核心专门用于关键任务
Linux - make sure a core is exclusively saved for critical tasks
我有一个在基于 Linux 的机器上启动的进程,只有两个内核。
假设我的进程是系统中唯一的进程(我将忽略其他进程甚至系统进程)。
我的过程分为两部分:
- 关键性能代码
- 低优先级代码
另外假设我的主进程是在 Core 0 上启动的,我想专门为关键性能代码保留 Core 1。
我想把问题分成两个:
我如何确保我进程中的每个线程(包括我已将我的代码链接到的第 3 方库可能调用 pthread_create 等)将始终在 Core 0 上打开新线程 ?
我如何编写一个 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
。
我有一个在基于 Linux 的机器上启动的进程,只有两个内核。
假设我的进程是系统中唯一的进程(我将忽略其他进程甚至系统进程)。
我的过程分为两部分:
- 关键性能代码
- 低优先级代码
另外假设我的主进程是在 Core 0 上启动的,我想专门为关键性能代码保留 Core 1。
我想把问题分成两个:
我如何确保我进程中的每个线程(包括我已将我的代码链接到的第 3 方库可能调用 pthread_create 等)将始终在 Core 0 上打开新线程 ?
我如何编写一个 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
。