Может ли сродство потока, созданного ядром, быть установлено "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.
Другие вопросы по тегам