getrusage против clock_gettime () - PullRequest
       25

getrusage против clock_gettime ()

5 голосов
/ 01 октября 2011

Я пытаюсь получить процессорное время, потребляемое процессом в Ubuntu. Насколько я знаю, есть две функции, которые могут выполнять эту работу: getrusage () и clock_gettime (CLOCK_PROCESS_CPUTIME_ID, & tp). В моем коде вызов getrusage () сразу после clock_gettime (CLOCK_PROCESS_CPUTIME_ID, & tp) всегда дает разные результаты.

Может ли кто-нибудь помочь мне понять, какая функция обеспечивает более высокое разрешение и какие преимущества / недостатки у этих функций есть?

Спасибо.

1 Ответ

0 голосов
/ 12 февраля 2013

getrusage (...)

  • Делит процессорное время на системные и пользовательские компоненты в ru_utime и ru_stime соответственно.
  • Примерно Разрешение в микросекундах: struct timeval имеет поле tv_usec, но это разрешение обычно ограничено примерно 4 мс / 250 Гц (источник)
  • Доступно в SVr4, 4.3BSD, POSIX.1-2001: это означает, что оно доступно как в Linux, так и в OS X

См. Справочную страницу


clock_gettime (CLOCK_PROCESS_CPUTIME_ID, ...)

  • Объединенное общее системное и пользовательское время без возможности разделения его на компоненты системного / пользовательского времени.
  • Разрешение наносекунд: struct timespec - это клон struct timeval, но с tv_nsec вместо tv_usec. Точное разрешение зависит от того, как таймер реализован в данной системе, и может быть запрошено с помощью clock_getres .
  • Требуется ссылка на librt
  • Часы могут быть недоступны. В этом случае clock_gettime вернет -1 и установит errno в EINVAL, так что это хорошая идея, чтобы обеспечить откат getrusage. (источник)
  • Доступно в SUSv2 и POSIX.1-2001: это означает, что оно доступно в Linux, но не в OS X.

См. Справочную страницу

...