Linux线程和进程 - CPU亲和性

时间:2013-09-13 06:48:36

标签: linux multithreading process pthreads

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

  1. 当我的进程进入休眠状态并唤醒时,是否始终将它安排在之前安排的同一CPU上?
  2. 当我从进程创建一个线程时,它是否也会在同一个CPU上执行?即使其他CPU是免费的并且正在睡觉。
  3. 我想知道Linux中的机制具体。我也通过pthread库创建线程。我面临一个随机的挂断问题,这个问题总是无法重现的。需要此信息才能朝着正确的方向前进。

2 个答案:

答案 0 :(得分:7)

在单处理器/核心系统上

  1. 在多处理器/核心系统上

    1. 没有
    2. 没有
    3. 使用taskset检索或设置进程在多核系统上的CPU关联。将CPU关联性设置为特定处理器/核心将更改

      的答案
      1. 也适用于多核系统。

        在应用程序中,您可以使用sched_setaffinity and/or sched_getaffinity来调整CPU亲和力。


        编辑:有关如何/何时管理CPU替代缓存缺点的其他详细信息:

        The Linux/SMP Scheduler“...为了获得良好的系统性能,Linux / SMP(2.4内核)采用经验规则来解决困境......”阅读详情在链接的参考中, Linux / SMP调度程序部分。

        对于较新的CFS(完全公平计划程序),您需要查看sched_migration_cost“...如果任务的实际运行时间小于此参数的值,则调度程序假定它仍在缓存中并尝试避免在负载平衡过程中将任务移动到另一个CPU。 。“(例如:Completely Fair Scheduler and its tuning)。

答案 1 :(得分:0)

当进程进入休眠状态并且唤醒时,它没有必要在相同的cpu上进行调度。如果你有多处理器环境,那么根据调度程序策略,它将在任何cpu上进行调度。当进程进入睡眠状态时是不同的原因,它进入睡眠状态,因为它正在等待io,任何资源。当事件发生时,它会从等待状态进入就绪状态。那个时间cpu将是免费的调度程序将在free cpu上安排该进程。它是没必要它会安排在相同的CPU上。          有关在Linux发行版树路径中调度程序的调度程序开源代码的更多信息。