Linux 3.19中的CPU亲和性



我在设置多个内核线程上的CPU亲和度时遇到了问题。内核是3.19 (SMP 100Hz)的一个变种,在6核Intel上禁用了超线程。我设置了isolcpus=1-5。目的是让这些核心处于动态模式(RCU和中断被卸载)。

启动多个线程后,运行掩码为3f(即cpu允许0-5)…

手动分配不应该是Cpu绑定的pid后,我留下了以下任务集-pc 0 pid总是给我"无效掩码"(EINVAL)。Cpusets没有被编译到内核:

khelper、perf、writeback、crypto、bioset、kblock、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- converver, ext4-rsv- converver

发行版是Ubuntu 14.04。有没有人知道为什么它看起来isolcpus不工作,为什么这些线程不能移动到给定的核心?

提前感谢。

有没有人知道为什么isolcpus不工作

isolcpus用于隔离cpu和用户空间线程。
内核线程(主要在启动期间创建)不考虑isolcpus

为什么这些线程不能移动到一个给定的核心?Linux内核限制用户空间更改某些线程的cpu亲和性。

例如,工作线程被锁定到默认的cpu亲和性
in kernel/workqueue.c:create_worker()

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

这里有一些关于在系统上隔离cpu的指南
(通常用于减少cpu延迟增加系统的"实时性")

    linux -核心分区技术
  • 提高Linux的实时性

相关内容

  • 没有找到相关文章

最新更新