Может ли сродство потока, созданного ядром, быть установлено "cpuset"?
Сходство пользовательских процессов может быть установлено cpuset(7)
.
Можно ли установить привязку потока, созданного ядром, через cpuset(7)
?
Я обнаружил, что сродство некоторых kthreads может быть установлено cpuset
действительно ([rcu_sched],[rcu_bh]), некоторые kthreads не смогли ([nvme-delete-wq],[kthreadd], я получил ошибку: " echo: ошибка записи: недопустимый аргумент").
Если у вас есть лучшее решение, дайте мне знать.
1 ответ
cpuset(7)
- это справочная страница, которая описывает API пользовательского пространства Linux в целом. Как указано на странице, вы можете использоватьsched_setaffinity(2)
syscall, чтобы ограничить задачу определенным набором процессоров.
Дело в том, что sched_setaffinity(2)
это системный вызов, который уже должен заставить вас заметить, что функциональность предназначена для использования в пользовательском пространстве. Если вы пишете код ядра, потоки ядра имеют для этой цели разные внутренние API (см. kthread.h
):
-
kthread_bind()
, который можно использовать для привязки kthread к одному процессору, указанному его числовым идентификатором. -
kthread_bind_mask()
, который можно использовать для привязки kthread к одному или нескольким процессорам, определеннымstruct cpumask
. Вы можете инициализировать правильныйstruct cpumask
черезcpumask_set_cpu()
. Этот API похож наsched_setaffinity(2)
syscall, но для kthreads.