У меня есть процесс, который в более раннем выпуске занял некоторое время.
Теперь тот же процесс в текущем выпуске занимает больше времени. Но нет никаких изменений в коде по сравнению с ранее. Одно наблюдение, которое я видел, — это то, что на сервере есть и другие процессы, которые потребляют много ресурсов процессора по сравнению с предыдущими выпусками. Поэтому я сомневаюсь, что мой процесс не получает процессорного времени, поэтому он занимает больше времени.
Но мне нужно доказать, что процесс ждет (простаивает) большую часть времени.
Так что для этого я думаю об использовании getrusage()
, Но так как я не уверен, как рассчитать время простоя процесса, используя это.
Может кто-нибудь, пожалуйста, скажите мне простой пример о том, как использовать getrusage
специально для расчета простоя процесса.
Заранее спасибо.
Вместо того, чтобы вычислять время простоя процесса, вы можете рассчитать время его выполнения и уменьшить его по сравнению со временем настенных часов.
В ОС, соответствующей новым стандартам POSIX (читайте Linux), вы можете легко сделать это, используя clock_gettime
функция:
CLOCK_REALTIME
Общесистемные часы реального времени.CLOCK_PROCESS_CPUTIME_ID
Таймер высокого разрешения для каждого процессора от процессора.CLOCK_THREAD_CPUTIME_ID
Поток-специфичные часы процессора.
Ты можешь использовать CLOCK_REALTIME
чтобы получить время настенных часов, и взять разницу между возвращенным временем в начале и конце программы, чтобы понять, сколько времени потребовалось программе для выполнения (включая время простоя). С помощью CLOCK_PROCESS_CPUTIME_ID
, вы можете точно измерить, сколько ваш процесс потратил на запуск процессора аналогичным образом. С помощью CLOCK_THREAD_CPUTIME_ID
Вы даже можете получить время выполнения каждого потока отдельно.
Заметка: если процесс / поток мигрирует из ЦП в другой, CLOCK_*_CPUTIME_ID
может стать противоречивым. Запомни. Если это произойдет, вы можете попытаться привязать ваш процесс или его потоки к конкретным процессорам.
Как примечание стороны, time(1)
дает вам информацию о времени выполнения процесса, поэтому, если время настенных часов достаточно велико, чтобы измеряться, например, вашими часами, вы также можете использовать этот инструмент.
Постскриптум Не забудьте связаться с -lrt
,