内核创建线程的affinity可以用"cpuset"设置吗?

Could the affinity of thread created by kernel be set by "cpuset"?

用户进程的关联度可以通过cpuset(7)设置。

内核创建线程的affinity可以通过cpuset(7)设置吗?

我发现有些kthreads的affinity确实可以通过cpuset设置([rcu_sched],[rcu_bh]),有些kthreads不能([nvme- delete-wq],[kthreadd],我收到错误:“echo: write error: Invalid argument”).

如果你有更好的解决办法,请告诉我。

cpuset(7) 是描述 Linux userspace API 的手册页。如页面所述,您可以使用 sched_setaffinity(2) 系统调用将任务限制为一组特定的 CPU。

sched_setaffinity(2) 是系统调用这一事实应该已经让您注意到该功能旨在供 用户空间使用 。如果您正在编写内核代码,内核线程为此目的具有不同的内部 APIs(参见 kthread.h):

  • kthread_bind(),可用于将 kthread 绑定到由其数字 ID 指定的单个 CPU。
  • kthread_bind_mask(), which can be used to bind the kthread to one or more CPUs defined by a struct cpumask. You can initialize the right struct cpumask through cpumask_set_cpu()。此 API 类似于 sched_setaffinity(2) 系统调用,但适用于 kthreads。