Измерить уровень быстрого сценария удара?

На языках программирования я обычно измерял бы уровень чего-то относительно быстро (<1 второе завершение) цикличным выполнением это несколько тысяч раз и затем получением среднего времени на завершение.

Как я сделал бы то же в ударе для сравнения выполнения выполнения двух очень быстрых команд?

1
задан 14 May 2017 в 19:51

4 ответа

Можно использовать модуль Python timeit (который обычно используется для фрагментов кода Python), с subprocess.call функция для выполнения внешних команд:

$ python3 -m timeit -s 'import subprocess' 'subprocess.call(["sleep", "0.1"])' 
10 loops, best of 3: 103 msec per loop

можно изменить количество циклов с -n:

$ python3 -m timeit -n 5 -s 'import subprocess' 'subprocess.call(["sleep", "0.1"])' 
5 loops, best of 3: 103 msec per loop

И с тех пор sleep 0.1 должен спать для 100 мс, похоже, что измерение довольно точно.

Также см.:

2
ответ дан 3 December 2019 в 06:30

Nevermind, получил его:

N=10000
time(for i in $(eval echo "{1..$N}"); do
./mycommand &>/dev/null
done)
1
ответ дан 3 December 2019 в 06:30

В целом простой способ состоит в том, чтобы сделать time ./myscript.sh, но это покажет, что Вы обнуляете второй, поскольку Ваш сценарий действительно быстр.

Вместо этого использование этот ответ , что GNU date использования (способный показать наносекунды) и PS4.

0
ответ дан 3 December 2019 в 06:30

Лучше использовать что-то как time команда.

Bash также имеет a time встроенный, то, что я предлагаю, использует time двоичный файл, расположенный в: /usr/bin/time.

Для одного времени выполнения:

command time -f "\nElapsed: %E \nUser: %U \nSystem: %S \nMemory: %M\n" \
./MyCommand 1> /dev/null

Какие выводы:

Elapsed: 0:00.01 
User: 0.00 
System: 0.00 
Memory: 2412
  • command: силы колотят использованию /usr/bin/time вместо time встроенный.

Можно использовать time с циклом для получения "avrage" "минуты", "макс." определенного ресурса говорят память:

Этот код будет работать ./COMMAND команды 1000 раз, затем распечатывает "минуту, макс., в среднем" ее общего количества (data+stack+text) использование памяти.

#/bin/bash
tmpfile=`mktemp`
for i in {1..1000}; do  command time -ao $tmpfile -f "%K" ./COMMAND 1>/dev/null; done;
awk 'NR == 1 {min = $0} $0 > max {max = $0} {total += $0} END {print total/NR, min, max}' $tmpfile
rm $tmpfile

Вот:

2436.89 2524 2324

Можно измениться %K с:

  • %E: Прошедшее реальное время
  • %I: Количество исходных данных файла
  • %P: Процент ЦП, который получило это задание
  • %k: Количество сигналов поставляется процессу
  • %U: Использование ЦП в непривилегированном режиме
  • %S: Использование ЦП в привилегированном режиме

посмотрите man time

Благодаря muru для записи более ясного awk оператор.

3
ответ дан 3 December 2019 в 06:30

Другие вопросы по тегам:

Похожие вопросы: