Linux Kernel Dev - cgroup - Как вывести список id задач из группы? - PullRequest
0 голосов
/ 18 июня 2020

Я разрабатываю модуль ядра и хотел бы иметь возможность выводить список идентификаторов задач из группы.

Например: я создаю две группы в подсистеме cpuset: A и B. В / задачах ставлю PID. Из своего модуля я получаю указатель на группу subsys (например, &top_cpuset.css) и перебираю ее дочерние элементы (здесь A и B благодаря struct list_head children; в struct cgroup_subsys_state).

Что мне не хватает, так это способ от детей перечислить задачи.

В struct cgroup (доступно благодаря struct cgroup_subsys_state) есть это поле: struct list_head pidlists. Существует struct cgroup_pidlists, но похоже, что эта структура и ее функции являются внутренними компонентами cgroup и не предназначены для использования (функции, структура и перечисление stati c определены в файле. c с номером .h).

Также в struct css_set есть это поле struct list_head tasks;. Но я не нашел пути от struct cgroup или struct cgroup_subsys_state до struct css_set.

Я больше не знаю, что я могу сделать, чтобы перечислить различные задачи группы. Есть идеи?

Редактировать: я изменяю Linux 5.7.0

Редактировать 2:

Из struct task_struct есть поле struct nsproxy *nsproxy;. Что дает доступ к полю struct cgroup_namespace *cgroup_ns;. Это дает доступ к struct css_set *root_cset, где есть struct list_head tasks.

Но моя проблема остается той же. Над struct list_head tasks есть комментарий «Списки, выполняемые через все задачи, использующие эту группу контрольной группы». Но я не понимаю, как выбрать группу cgroup. То есть задача может быть в разных группах cgroup. Как получить struct list_head tasks определенной c группы.

...