Linux线程和进程 - CPU亲和性

mk.*_*k.. 2 linux multithreading pthreads process

我几乎没有与线程和进程调度相关的查询.

  1. 当我的进程进入休眠状态并唤醒时,它是否始终安排在之前安排的同一CPU上?
  2. 当我从进程创建一个线程时,它是否也会在同一个CPU上执行?即使其他CPU是免费的并且正在睡觉.

我想具体了解Linux中的机制.我也通过pthread库创建线程.我面临一个随机的挂断问题,这个问题总是无法重现的.需要此信息才能朝着正确的方向前进.

Arn*_*rno 7

在单处理器/核心系统上

在多处理器/核心系统上

  1. 没有.
  2. 没有.

使用taskset在多核系统上检索或设置进程的CPU关联.将CPU关联设置为特定处理器/核心将更改答案

也适用于多核系统.

在应用程序中,您可以使用sched_setaffinity和/或sched_getaffinity来调整CPU亲和性.


编辑:有关如何/何时管理CPU交换的其他详细信息:

Linux/SMP调度程序: "...为了实现良好的系统性能,Linux/SMP(2.4内核)采用经验规则来解决困境......"阅读链接参考中的细节,Linux/SMP部分调度程序.

对于较新的CFS(完全公平调度程序),您可以查看sched_migration_cost."...如果任务的实际运行时间小于此参数的值,则调度程序假定它仍在缓存中并尝试避免在负载平衡过程中将任务移动到另一个CPU ......"(例如:完全公平的调度程序及其调整).