0

用户进程的亲和性可以通过设置cpuset(7)

内核创建的线程的亲和性可以通过cpuset(7)?

我发现一些kthreads的affinity可以通过cpuset确实([rcu_sched],[rcu_bh])设置,一些kthreads不能([nvme-delete-wq],[kthreadd],我得到了错误:“ echo: write错误:无效的参数”)。

如果您有更好的解决方案,请告诉我。

4

1 回答 1

2

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

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

  • kthread_bind(),可用于将 kthread 绑定到由其数字 ID 指定的单个 CPU。
  • kthread_bind_mask(),可用于将 kthread 绑定到由 a 定义的一个或多个 CPU struct cpumask。您可以struct cpumask通过cpumask_set_cpu(). 此 API 类似于sched_setaffinity(2)系统调用,但用于 kthreads。
于 2020-05-21T16:00:37.523 回答