Применение команды time для измерения нагрузки процессора

Команда time позволяет просмотреть параметры производительности отдельной программы и ее дочерних процессов, работающих в синхронном режиме.

Команда time показывает время, прошедшее с момента запуска до завершения работы программы, то есть фактическое время. Кроме того, она показывает, сколько времени процессор затратил на выполнение этой программы. Время процессора делится на две категории: пользовательское и системное. Пользовательское время - это время выполнения самой программы и всех вызовов библиотечных функций. Системное время - это время обработки вызванных программой (напрямую или косвенно) системных процедур и функций.

В сумме пользовательское и системное время дают общее время процессора, затраченное на выполнение программы. Сюда не входит обработка процессором компонентов ядра, которые могут быть запущены в ходе выполнения программы, но в настоящее время не запущены в данной нити. Например, захват страниц физической памяти для замещения страниц, полученных из списка свободных страниц при запуске программы, не учитывается при подсчете времени процессора, затраченного на выполнение программы.

On a uniprocessor, the difference between the real time and the total microprocessor time, that is:
фактическое - (пользовательское + системное)
обусловлена влиянием всех факторов, которые могут замедлить обработку программы; кроме того, в него входят не учтенные ранее затраты времени на обработку самой программы. В системе SMP эту разницу можно вычислить по следующей формуле:
фактическое * число-процессоров - (пользовательское + системное)

Ниже в порядке убывания значимости перечислены некоторые из этих факторов:

  • Операции ввода-вывода, необходимые для считывания кода и данных программы
  • Операции ввода-вывода, связанные с выделением памяти для программы
  • Процессорное время, затраченное на выполнение других программ
  • Процессорное время, затраченное на выполнение задач операционной системы
В приведенном ниже примере программа откомпилирована с опцией -O3 для повышения скорости ее работы. Разность между фактическим временем выполнения программы и суммой пользовательского и системного времени в этом примере очень мала. Программе было предоставлено все запрошенное время - возможно, за счет других программ в системе.
# time looper
фактическое    0m3.58s
пользов.       0m3.16s
сист.          0m0.04s
В следующем примере перед запуском той же программы ее приоритет был понижен путем добавления 10 к значению nice. Время выполнения программы увеличилось почти вдвое, однако при этом другие программы не были приостановлены:
# time nice -n 10 looper
фактическое    0m6.54s
пользов.       0m3.17s
системное     0m0,03s
Обратите внимание, что команда nice указана после команды time, а не наоборот. Если бы мы ввели команду
# nice -n 10 time looper

то была бы выполнена другая команда time (/usr/bin/time), отличающаяся меньшей точностью по сравнению с применяемой нами командой time, встроенной в оболочку ksh. Если команда time указана первой, то запускается встроенная версия, если явно не указано полное имя команды /usr/bin/time. Если команду time вызывает другая команда, то запускается программа /usr/bin/time.