内核创建线程的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。
用户进程的关联度可以通过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 astruct cpumask
. You can initialize the rightstruct cpumask
throughcpumask_set_cpu()
。此 API 类似于sched_setaffinity(2)
系统调用,但适用于 kthreads。