【发布时间】:2018-12-21 08:57:57
【问题描述】:
我有两块具有不同 ARM CPU 的板,一个 2x 内核 - 运行 Linux 内核 4.1.x,另一个 4x 内核 - 运行 3.10。 在那些 Linux 安装中,我总是以 root 身份登录。 在我的程序中,我为调用进程设置了 CPU 亲和性,就像 here,通过 sched_setaffinity(0, ... ),只是我总是将它设置为 cpu 1。 在 Linux 4.1 上,它按预期工作。 Linux 3.1 给了我一个负返回值,并且 perror(..): "Invalid argument"。
为什么会这样?四核肯定有cpu 1?
【问题讨论】:
-
如果关联位掩码掩码不包含当前物理上在系统上并且根据 cpuset cgroups 或所述“cpuset”机制可能施加的任何限制允许线程使用的处理器,则返回 EINVAL在 cpuset 中。
-
哦,根据我在这里读到的内容,linux.die.net/man/7/cpuset,如果支持的话,/proc/filesystems 中应该有一个“nodev cpuset”——在有问题的系统上它不支持。 IE。主板供应商选择为无法设置 CPU 亲和性的四核系统组合 Linux 映像?为什么有人会这样做……所以这意味着我必须构建一个自定义 Linux 映像,或者可以以某种方式启用它吗? (板子有一些封闭的驱动程序,我不能只安装任何发行版映像)
-
现在我真的很困惑 - 设置 cpu 亲和性的板显然有效,not 也有 /proc/filesystems 条目中所述的“nodev cpuset”手册页。
-
增加混乱:在两个系统的 /proc/config.gz 中,我发现:“#CONFIG_CPUSETS 未设置”。那为什么它可以在4.1系统上运行呢?我没有收到任何错误,很多 CPU 活动显然被推到了另一个核心。
标签: linux multiprocessing