用户进程的相似性可以通过cpuset(7)
设置。
是否可以通过cpuset(7)
设置内核创建的线程的亲和力?
[我发现某些kthread的亲和力确实可以由cpuset
设置([rcu_sched],[rcu_bh]),某些kthread不能([nvme-delete-wq],[kthreadd],我得到了错误:“ echo:写错误:参数无效”)。
如果您有更好的解决方案,请告诉我。
cpuset(7)
是一个手册页,通常描述Linux userspace API。如页面所示,您可以使用sched_setaffinity(2)
syscall将任务限制为一组特定的CPU。
sched_setaffinity(2)
是系统调用的事实应该已经使您注意到该功能旨在用于用户空间使用。因此无法通过此API设置kthread亲和力。
内核线程为此使用不同的内部API(请参见kthread.h
):
kthread.h
,可用于将kthread绑定到由其数字ID指定的单个CPU。 kthread_bind()
,可用于将kthread绑定到由kthread_bind()
定义的一个或多个CPU。您可以通过kthread_bind_mask()
初始化右边的kthread_bind_mask()
。该API与struct cpumask
syscall类似,但适用于kthreads。