Как найти время простоя процесса

У меня есть процесс, который в более раннем выпуске занял некоторое время.
Теперь тот же процесс в текущем выпуске занимает больше времени. Но нет никаких изменений в коде по сравнению с ранее. Одно наблюдение, которое я видел, — это то, что на сервере есть и другие процессы, которые потребляют много ресурсов процессора по сравнению с предыдущими выпусками. Поэтому я сомневаюсь, что мой процесс не получает процессорного времени, поэтому он занимает больше времени.
Но мне нужно доказать, что процесс ждет (простаивает) большую часть времени.
Так что для этого я думаю об использовании getrusage(), Но так как я не уверен, как рассчитать время простоя процесса, используя это.
Может кто-нибудь, пожалуйста, скажите мне простой пример о том, как использовать getrusage специально для расчета простоя процесса.

Заранее спасибо.

1

Решение

Вместо того, чтобы вычислять время простоя процесса, вы можете рассчитать время его выполнения и уменьшить его по сравнению со временем настенных часов.

В ОС, соответствующей новым стандартам 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,

1

Другие решения


По вопросам рекламы [email protected]