【问题标题】:CPU affinity in Linux 3.19Linux 3.19 中的 CPU 亲和性
【发布时间】:2015-08-12 10:09:58
【问题描述】:

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

在启动多个线程后,使用掩码 3f(即 Cpus 允许 0-5)运行...

在手动对不应该受 Cpu 绑定的 pid 进行任务分配后,我留下了以下内容,taskset -pc 0 pid 总是给我“无效掩码”(EINVAL)。 cpuset 未编译到内核中:

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 不起作用以及为什么这些线程不能移动到给定的核心?

提前谢谢你。

【问题讨论】:

    标签: linux multiprocessing real-time smp preemptive


    【解决方案1】:

    有谁知道为什么 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 延迟增加系统的“实时性”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多