LINUX.ORG.RU

Время выполнения потоков в Linux


0

0

Проблема такая: надо узнать время выполнения потоков данного процесса в режиме юзера и режиме ядра. Для процесса все просто: вызываешь times и имеешь счастье. Существует ли что-нить подобное для потоков?

В принципе данная информация должна храниться в какой-нить из таблиц ядра. Как до нее добраться? Если нет сишных функций, может существует какой-нить системный вызов?

anonymous

Ответ на: комментарий от lb

Интервальные таймеры привязаны к процессу, а не к потоку. Тем более, как я понял, нужно еще писать обработчик сигнала SIGPROF.

anonymous
()

А можно глупый вопрос?

А нельзя вначале потока посмотреть время, и в конце, из конца вычесть начальное значение и порадоваться результату? :-)

AIv ★★★★★
()
Ответ на: А можно глупый вопрос? от AIv

> А нельзя вначале потока посмотреть время, и в конце, из конца
> вычесть начальное значение и порадоваться результату? :-)

вы узнаете сколько прошло времени, и только.

требуется же узнать сколько времени этот поток
занимал cpu.

ok, если это непонятно, представьте, что у вас
два потока на одном процессоре крутят пустой
цикл в течение 2-х секунд. тогда каждый из них
получит около 1 секунды процессорного времени,
хотя разница во времени будет 2 секунды.

idle ★★★★★
()
Ответ на: комментарий от idle

Ступил под вечер)))))))

Сорри, вы абс. правы.

AIv ★★★★★
()
Ответ на: комментарий от idle

2 idle Это вариант. А то после копания в манах и pthread.h нашел только pthread_getcpuclockid, но он позволет получить только общее время( user time + kernel time), а хотелось бы по раздельности.

Не подскажешь где в stat'е находится эта инфа? или ссылку на доку по формату stat'а.

anonymous
()
Ответ на: комментарий от anonymous

> Не подскажешь где в stat'е находится эта инфа?
> или ссылку на доку по формату stat'а.

не знаю, где найти доку, но она где-то наверняка есть :)

проще всего глянуть на fs/proc/array.c:do_task_stat().

там длиннючий sprintf() в конце, нужно просто посчитать
номер полей utime и stime.

idle ★★★★★
()
Ответ на: комментарий от idle

idle

> требуется же узнать сколько времени этот поток занимал cpu.

А что clock() вернет? Казалось бы, в Линухе он должен возвращать как раз искомое...

Die-Hard ★★★★★
()

Смотря что в Linux называть "нитью".

Для thread group результаты и правда придется вытягивать через /proc.
А для подобных LinuxThreads (CLONE_VM) можно и times вызвать.

Murr ★★
()
Ответ на: комментарий от Die-Hard

Die-Hard:
> А что clock() вернет?

clock() это libc wrapper над times().

times() и getrusage() суммируют utime и stime для
thread group (кстати, как это будет по русски???)

Murr:
> Смотря что в Linux называть "нитью".
> А для подобных LinuxThreads (CLONE_VM) можно и times вызвать.

кстати, да. "проблемы" есть только если был CLONE_THREAD.

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.