После наличия говорят с разработчиком брелока для ключей гнома на последнем настольном саммите - это не возможно GUI/командной строкой (необходимо программировать его).
Это не точно инструмент UNIX или GNU/Linux, но Вы могли вполне удобно использовать программную среду R для статистического расчета для этого. (Я ничто не могу найти более специфичным для Вашей задачи, все же.)
Редактирование, Как я мог сомневаться относительно этого, конечно, существует тестовый пакет для R
: rbenchmark
. Это, по-видимому, переносится system.time()
который Вы могли также просто использовать непосредственно. Или взгляните на это, простую пару функции секундомера. Также см. "Выполнение системной команды" @Rosetta Код (или не делайте, это system("command")
.)
Edit2 я просто видел этот вопрос, "Измеряя время в рамках сценария" в правильном столбце "Related", это могло использоваться также т.е. занять время, сделайте для цикла (N
времена), займите время снова, вычислите промежуток, разделитесь на N
. (Еще легче, попробовать time ( for-loop )
, проанализируйте его вывод, разделитесь на N
).
Опция 1 - sqlite:
составьте простую таблицу с командой и столбцами времени и представлением с надлежащими вычислениями агрегирования. После синхронизации добавьте строку к таблице.
Преимущества: более простой определить таблицу по сравнению с решением 2.
Недостатки: Вам нужно (сделайте Вас?) заботятся о хранении данных.
Опция 2 - rrdtool:
Определите rrd файл базы данных, определение данных и функции агрегирования. После синхронизации наполняйте базу данных с rrdtool update ...
.
Преимущества: можно легко генерировать графики с rrdtool graph ...
. Никакая проблема хранения данных (круговая база данных).
Недостатки: бит тяжелее для определения rrd базы данных по сравнению с простой таблицей/представлением SQL
Вы можете использовать R
, чтобы быстро вычислить среднее значение, стандартное отклонение и другие интересные значения.
Например, вы можете использовать время GNU для записи нескольких измерений времени выполнения в файл CSV:
function measure
{
f=$1; shift
n=$2; shift
echo wall,user,sys,rss > "$f"
for i in $(seq $n); do
/usr/bin/time --output "$f" --append --format '%e,%U,%S,%M' "$@" >/dev/null
done
}
Затем вы можете сгенерировать значения с помощью R следующим образом:
Rscript --vanilla -e "b=read.csv(file='$f');summary(b);sapply(b, sd);"
Я создал небольшой сценарий тестирования , который также неплохо распечатывает вывод R, например:
$ benchmark.sh 100 ./some_prog arg1 arg2
n=100 | min | Q1 | med | mean | Q3 | max | std
wall | 0.0400 | 0.0400 | 0.0500 | 0.0471 | 0.0500 | 0.0800 | 0.00624
user | 0.0400 | 0.0400 | 0.0400 | 0.0426 | 0.0400 | 0.0700 | 0.00562
sys | 0 | 0 | 0 | 0 | 0 | 0 | 0.00000
rss | 2608 | 2657 | 2704 | 2728 | 2764 | 2920 | 95.06524
Сверхтонкий — еще один вариант.
Пример использования:
hyperfine --warmup 3 'my_command'
См. связанный вопрос .
Еще две опции (теперь доступны в debian et al.):
multitime -q -n 10 sleep 1
(изhttps://superuser.com/a/1301756/129608)perf stat -r 10 -B sleep 1
(изhttps://superuser.com/a/1279724/129608)