Linux 3.19中的CPU亲和性

时间:2015-08-12 10:09:58

标签: linux multiprocessing real-time smp preemptive

我在许多内核线程上设置CPU关联性时遇到问题。内核是6核Intel上3.19(SMP 100Hz)的变体,禁用超线程。我设置了isolcpus = 1-5。目的是让这些内核处于dyntick模式(RCU和中断卸载)。

启动一些使用掩码3f运行的线程(即Cpus允许0-5)......

在手动设置了不应该是Cpu绑定的pid后,我留下了以下任务集-pc 0 pid总是给我“无效掩码”(EINVAL)。 cpusets没有编译到内核中:

khelper,perf,writeback,crypto,bioset,kblockd,devfreq_wq,rpciod ,nfsiod,deferwq,kworker / u12:1,scsi_tmf_0,scsi_tmf_1,scsi_tmf_2,scsi_tmf_3,kworker / u12:4,ext4-rsv-conver,ext4-rsv-conver,ext4-rsv-convere

该发行版是Ubuntu 14.04。有没有人知道为什么它出现isolcpus不起作用以及为什么这些线程无法移动到给定的核心?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

  

有人知道为什么isolcpus无法正常工作吗

isolcpus用于将CPU与用户空间线程隔离。
内核线程(主要是在引导过程中创建的)不考虑isolcpus

  

为什么这些线程无法移动到给定的内核?   Linux内核限制用户空间更改某些线程的cpu亲和力。

例如,工作线程被锁定为其默认的cpu-affinities
kernel/workqueue.c:create_worker()

         /* prevent userland from meddling with cpumask of workqueue workers */
         worker->task->flags |= PF_NO_SETAFFINITY;

以下是在系统上隔离CPU的一些指南
(通常是为了减少CPU延迟 OR 来增加系统的“实时性”)