Скорость выполнения команды linux

How can I measure the execution time of a terminal process?

I’m trying to measure the execution time of a process that I call via the command line (i.e., I want to find out how long it takes to for the process to finish). Is there any command that I can add to the command calling the process that will achieve this?

8 Answers 8

Add time before the command you want to measure. For example: time ls .

The output will look like:

real 0m0.606s user 0m0.000s sys 0m0.002s 

Explanation on real , user and sys (from man time ):

  • real : Elapsed real (wall clock) time used by the process, in seconds.
  • user : Total number of CPU-seconds that the process used directly (in user mode), in seconds.
  • sys : Total number of CPU-seconds used by the system on behalf of the process (in kernel mode), in seconds.

@ninjalj, can you provide more information on what the real , user , and sys times are that this command returns?

Note that you may need sudo apt-get install time if you are using a shell where time is not a builtin.

Note that this is the output from Bash’s time builtin, but man time would be about an executable (like /usr/bin/time , from the time package), and its output would look different. Also in Bash, you can run help time for help with the builtin.

Note that the process end does not mean all the work is finished. A copy may take additional minutes after the «time» returns for flushing system bufffers (therefor with unallocated sys time also).

For a line-by-line delta measurement, try gnomon.

It is a command line utility, a bit like moreutils’s ts, to prepend timestamp information to the standard output of another command. Useful for long-running processes where you’d like a historical record of what’s taking so long.

Piping anything to gnomon will prepend a timestamp to each line, indicating how long that line was the last line in the buffer—that is, how long it took the next line to appear. By default, gnomon will display the seconds elapsed between each line, but that is configurable.

Источник

Команда time в Linux

В некоторых случаях при работе с терминалом Linux нужно знать время выполнения тех или иных команд, например, для отслеживания проблем. Для этой задачи существует утилита time. Конкретно про нее и пойдет речь в нашей статье.

Читайте также:  Установить wireshark linux kali

Мы расскажем, как работает команда time Linux и какой у неё синтаксис. Затем перейдем к описанию доступных опций. А в конце упомянем несколько популярных сценариев использования.

Синтаксис и опции time

Утилита запускает заданную пользователем команду и после этого выводит информацию о времени ее выполнения. У нее достаточно удобный синтаксис. Сначала нужно указать опции для time, затем – выполняемую команду, а в конце – аргументы к ней:

$ time опции команда_для_выполнения аргументы

Рассмотрим список доступных опций:

  • -o, —output – сохранять данные в выбранный файл вместо стандартного вывода в терминале. При этом старые данные в файле будут перезаписаны.
  • -a, —append – добавлять в файл новую информацию, а не перезаписывает старую. Опция полезна только в сочетании с -o.
  • -f, —format – выбрать определенный формат вывода. Подробности о форматировании описаны в следующем разделе статьи.
  • -p, —profitably – использовать формат вывода данных для соответствия со стандартом POSIX 1003.2.
  • -v, —verbose – выводить подробную информацию о выполнении программы.
  • -V, —version – вывести версию утилиты time.

В этом списке представлены только основные опции. Получить подробную информацию можно командой:

Опции форматирования вывода

По умолчанию time может выводить информацию в не комфортном для чтения виде.

wOkvH25Ll+XQwAAAABJRU5ErkJggg==

По этой причине для нее желательно задавать опции форматирования вывода, о которых и пойдет сейчас речь. Всего их три штуки. В качестве примера для их рассмотрения возьмем команду apt-get update.

Опция -v используется для вывода подробной информации:

sudo time -v apt-get update

wF9RgGh8lwdFwAAAABJRU5ErkJggg==

Опция -p нужна для вывода данных в формате, соответствующем стандарту POSIX 1003.2:

sudo time -p apt-get update

F6XReMMI8NXTAAAAAElFTkSuQmCC

А с помощью опции -f или —format детально задается форматирование вывода. Этот момент стоит рассмотреть более детально.

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

С помощью знака \ задается разделительный символ. Есть три доступных варианта: \t – табуляция, \n – новая строка, \\ – обратная косая черта. Если после \ указать любой другой символ, то в терминале появится вопросительный знак (?), который говорит об ошибке ввода.

Остальной текст в строке формата полностью копируется в поле вывода. При этом time всегда начинает вывод данных с новой строки после информации о выполнении самой команды.

Рассмотрим доступные спецификаторы ресурсов:

  • % – литерал %. То есть для вывода знака процента нужно в команде указать %%.
  • С – имя команды и использованные аргументы.
  • D – средний размер неразделенной области данных. Отображается в килобайтах.
  • E – реальное время выполнения команды в привычном часовом формате. Выводится в виде [часы:]минуты:секунды.
  • N – количество мажорных ошибок или ошибок, связанных с вводом-выводом, возникших при выполнении процесса.
  • I – количество входов в файловую систему.
  • K – среднее значение задействованной памяти для кода (text), инициализированных данных (data) и стека (stack). Отображается в килобайтах.
  • M – максимальный размер резидентного множества во время выполнения процесса в килобайтах.
  • O – количество выходов из файловой системы.
  • P – процент загруженности CPU (центрального процессора).
  • R – количество минорных ошибок.
  • S – время в секундах, в течении которого CPU использовался системой от имени процесса в режиме супервизора (kernel mode).
  • U – время в секундах, в течении которого CPU использовался процессом напрямую в пользовательском режиме (user mode).
  • W – сколько раз процесс был выгружен из оперативной памяти.
  • Xтут не понял.
  • Z – размер системной страницы. Это значение – константа, но она различается между системами.
  • c – количество невольных переключений контекста при выполнении процесса.
  • e – реальное время выполнения команды в привычном часовом формате. Выводится в секундах.
  • k – количество сигналов, дошедших до процесса.
  • p – средний размер неразделенного стека процесса, в килобайтах.
  • r – количество полученных сокетных сообщений.
  • s – количество отправленных сокетных сообщений.
  • t – средний размер резидентного множества процесса, в килобайтах.
  • w – количество добровольных переключений контекста при выполнении процесса.
  • x – код возврата для команды.
Читайте также:  Linux поиск файла содержащего

Это были все спецификаторы ресурсов, использующиеся при выборе форматирования для time. Теперь перейдем к сценариям использования команды.

Как узнать время выполнения команды Linux

Мы рассмотрим три основных примера, которые довольно часто используются: вывод данных в терминал, вывод в отдельный файл и вывод с форматированием.

1. Вывод времени выполнения в терминал

В качестве примера мы возьмем команду sleep, которая делает паузу на указанное время. Это будет очень наглядный пример, ведь время паузы будет совпадать с временем выполнения команды в time:

A75zxCHQlT8cAAAAAElFTkSuQmCC

Еще хотелось бы упомянуть ситуацию, когда выполнение команды переводит окно терминала в другой режим, например, при запуске редактора nano для изменения файла /home/root-user/script.txt:

time nano /home/root-user/scripts/main_script.txt

После завершения работы редактора вы увидите общее время, в течение которого вы работали с файлом.

Информацию о результатах работы команды time можно сохранить в отдельный файл с помощью опции -o. В таком случае в окне терминала они выводиться не будут. Возьмем для примера извлечение содержимого архива ~/data/data.tar.gz с помощью утилиты tar. Информацию о времени выполнения сохраним в новом файле ~/data/data_time.txt. Еще добавим к команде опцию -v, чтобы получить подробные сведения:

sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data

AQzh6DI6rLe2AAAAAElFTkSuQmCC

3. Вывод с форматированием

Исходный вариант форматирования данных подходит далеко не во всех случаях. В качестве примера мы возьмем ранее использованную команду для извлечения архива, но не станем сохранять данные в файл. При ее выполнении нам интересно:

  • Информация о самой команде и заданных опциях – это спецификатор %C.
  • Загруженность CPU – спецификатор %P.
  • Общее время выполнения в секундах – спецификатор %e.

Для комфортного восприятия каждый пункт будет выводиться в отдельной строке с помощью разделителя \n. При этом они все будут подписаны понятным образом.

Читайте также:  Multiple commands on linux command line

Вот как выглядит итоговый вариант команды:

sudo time -f «Информация о команде:\n%C\nЗагруженность CPU: %P\nВремя выполнения: %e сек» tar -xvf ~/data/data.tar.gz -C ~/data

8f7FfBnBvsvoYAAAAASUVORK5CYII=

Обратите внимание, что весь текст, кроме символов после % и \, полностью отображается в терминале. Это удобный способ разметки

Выводы

В рамках данной статьи вы узнали как работает команда time Linux, которая следит за выполнением заданной команды и выдает подробную информацию о времени выполнения и т. д. Основная сложность при ее использовании – понимание опций для форматирования вывода. Но если в них разобраться, то больше никаких проблем не возникнет. Для вашего удобства мы упомянули конкретные примеры использования.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Bash время выполнение скрипта в милисекундах

Есть обычный тестовый скрипт, который копирует содержимое папки и показывает в конце время выполнения операции. Но это время указывается в секундах, а реальный скрипт может выполняться гораздо быстрее и обычно мне возвращается 0 секунд, хотя он то может быть выполнен за 0,5 сек или 0,005 сек. Вопрос: Есть ли возможность подсчёта времени в милисекундах?

#!/bin/bash START=$(date +%s) # начало скрипта cp -r /home/it/Downloads /home/it/Downloads/bash-time # конец скрипта END=$(date +%s) DIFF=$(( $END - $START )) echo "It took $DIFF seconds" 

bash имеют встроенную команду time в случае если нужен настраиваемый вывод, то следует обращаться напрямую /usr/bin/time, к примеру команда /usr/bin/time -f %E sleep 0.03 вернет фактически затраченное время на выполнение команды sleep 0.03 .

3 ответа 3

Используя ваш код немного модифицируем и получим следующее:

#!/bin/bash START=$(date +%s%N) # начало скрипта cp -r /home/it/Downloads /home/it/Downloads/bash-time # конец скрипта END=$(date +%s%N) DIFF=$(($($END - $START)/1000000)) echo "It took $DIFF milliseconds" 

Аргумент %N вернет наносекунды, 1 миллисекунда равна 1000000 наносекундам.

UPD: Не проверял, но должно работать.

DIFF=$(($($END — $START)/1000000)) лишний знак доллара у вас в команде: DIFF=$((($END — $START)/1000000))

real 0m0,125s user 0m0,001s sys 0m0,001s 

Для вывода минут секунд и тысячных секунды можно использовать следующую конструкцию скрипта:

#!/bin/bash TIMEFORMAT="время выполнения %lR" time < cp -r /home/it/Downloads /home/it/Downloads/bash-time #Набор команд, возможно использование функций #и конструкций проверки типа [ $a ] && < echo 1; exit 0; >> #конец скрипта либо exit 

Вывод:
время выполнения 1m2.004s

Таймер возвращает общее время выполнения перечисленных команд между родительскими < >, возможно так же вызвать несколько time <. >в одном скрипте и переобъявить переменную TIMEFORMAT для каждого.

Более подробно о формате вывода времени команды time можно почитать тут http://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html

UPD: если вы изменили переменную TIMEFORMAT в терминале и хотите вернуть ее в текущей сессии по умолчанию, то выполните команду unset TIMEFORMAT .

Источник

Оцените статью
Adblock
detector