Я собираюсь рискнуть и сказать, что в настоящее время такого инструмента не существует.
Я не знаю, как сделать дамп очереди выполнения, но вы можете получить другую информацию, используя perf
. Например, если создается буря новых процессов, вы можете отследить их с помощью
perf record -e sched:sched_process_exec -a
Остановить запись с помощью Ctrl-C и посмотреть результаты с помощью perf report
. Вы также можете просмотреть простые, но мощные скрипты, основанные на perf
, которые собрал Брендан Грегг .
Глядя прямо на исходный код ядра, вы можете просматривать задачи, подобные приведенным ниже.
struct task_struct *process, *thread;
int cnt = 0;
rcu_read_lock();
for_each_process_thread(process, thread) {
task_lock(thread);
/* do something with the task properties:
thread->state;
thread->wake_cpu;
thread->pid;
thread->comm;
*/
task_unlock(thread);
cnt++;
}
rcu_read_unlock();
Самая важная часть - заблокировать задачи RCU при входе и разблокировать при выходе. Вы запрограммируете этот дамп в модуле ядра и предоставите среднее для получения списка в команде пользовательского пространства.
Я предлагаю вам прочитать и улучшить мой пример в GitHub @ dumptask