2016-09-29 16 views
2

Существует ли низкоуровневый системный API для Linux и для Darwin, чтобы получить «моментальный снимок» планировщика, чтобы увидеть, какие потоки были в заданное время (активное), выгружено , ожидание ресурса или подобное?Системный API для просмотра, когда потоки активны

Например, у системного монитора Ubuntu имеется столбец «Ожидающий канал» для процессов, есть ли способ получить аналогичный вывод для всех потоков внутри процесса?

У меня есть многопоточная система очередей, где задания отправляются в потоки с визуальной временной шкалой, показывающей, когда задания начинаются/заканчиваются. Чтобы оптимизировать его, я хочу добавить некоторые визуальные указания о том, когда действительно выполняются задания (например, на одном ядре процессора), а также при их выгрузке.

ответ

1

top -H показывает темы и их состояния. Следующим переключателем -H в its source будет один из способов узнать это. С быстрым взглядом функция int cmd_threads(globalstate *gstate) в commands.c, похоже, переключает настройку.

ОБНОВЛЕНИЕ: Procfs предоставляет эту информацию для пользовательского пространства. /proc/<pid>/task/<thread-id>/status дает именно то, что вам нужно. Это то, что использует top. Вот пример вывода из моей системы:

$ cat /proc/418/task/448/status | grep State 
State: S (sleeping) 

В этом каталоге есть много полезной информации.