Spec-Zone.ru › Fish 3.7

time - измерение времени выполнения команды или блока

Синтаксис

time COMMAND

Описание

time заставляет fish измерить время выполнения команды и вывести результаты. Команда может быть простой командой fish или блоком. В настоящее время результаты перенаправить нельзя.

Для проверки времени выполнения после завершения команды, проверьте $CMD_DURATION.

Скорее всего, у вашей системы есть команда time. Чтобы её использовать, используйте что-то вроде command time, как в command time sleep 10. Так как она не находится внутри fish, она не будет иметь доступа к функциям fish и не сможет отслеживать время выполнения блоков.

Как интерпретировать вывод

Time выводит несколько разных значений. Посмотрим на пример:

> time string repeat -n 10000000 y\n | command grep y >/dev/null
________________________________________________________
Executed in  805.98 millis    fish           external
   usr time  798.88 millis  763.88 millis   34.99 millis
   sys time  141.22 millis   40.20 millis  101.02 millis

Время после «Выполнено за» — это «время реальных часов». Это просто мера того, сколько времени потребовалось от начала команды до ее завершения. Как правило, оно довольно близко к CMD_DURATION, за исключением небольшого смещения, так как эти два момента времени берутся с небольшим временным сдвигом.

Другие значения — это значения процессорного времени. Это означает, что они измеряют, сколько времени процессор использовался в этой части, и они подсчитывают отдельные ядра. Так, программа с четырьмя потоками, использующими весь процессор в течение секунды, будет иметь время 4 секунды.

Время «usr» — это то количество процессорного времени, которое было потрачено внутри самой программы, время «sys» — это то время, которое было потрачено в ядре от имени этой программы.

Время «fish» — это то количество процессорного времени, которое было потрачено в fish, а время «external» — это то количество процессорного времени, которое было потрачено в внешних командах.

Итак, в этом примере, поскольку string является встроенной командой, всё, что string repeat делало, учитывается в fish. Любое время, которое она тратит на системные вызовы, такие как write(), учитывается во времени fish/sys.

А grep здесь явно вызывается как внешняя команда, поэтому её время будет учитываться в столбце «external».

Обратите внимание, что, как и в этом примере, время процессора может суммироваться больше, чем время выполнения. Это потому, что вещи могут выполняться параллельно — grep может совпадать, в то время как string repeat записывает.

Пример

(по очевидным причинам точные результаты будут различаться на вашей системе)

>_ time sleep 1s

________________________________________________________
Executed in    1,01 secs   fish           external
   usr time    2,32 millis    0,00 micros    2,32 millis
   sys time    0,88 millis  877,00 micros    0,00 millis

>_ time for i in 1 2 3; sleep 1s; end

________________________________________________________
Executed in    3,01 secs   fish           external
   usr time    9,16 millis    2,94 millis    6,23 millis
   sys time    0,23 millis    0,00 millis    0,23 millis

Присваивания переменных в строке необходимо выполнять после ключевого слова time:

>_ time a_moment=1.5m sleep $a_moment

________________________________________________________
Executed in   90.00 secs      fish           external
   usr time    4.62 millis    4.62 millis    0.00 millis
   sys time    2.35 millis    0.41 millis    1.95 millis

© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/time.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API