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