getrusage против clock_gettime()

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

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

Благодарю.

1 ответ

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.

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

Другие вопросы по тегам