multitimeとは
timeコマンドは,コマンドの実行時間を計測するコマンドです.
multitimeコマンドは,コマンドを繰り返し発行し,実行時間を計測するコマンドです.
実行例
multitimeコマンドに -n
オプションで実行する回数を渡します.
以下は,multitimeコマンドを使いsleep 1
を5回実行しています.
$ multitime -n 5 sleep 1
===> multitime results
1: sleep 1
Mean Std.Dev. Min Median Max
real 1.012 0.002 1.010 1.012 1.015
user 0.001 0.000 0.000 0.001 0.001
sys 0.002 0.000 0.002 0.002 0.003
インストール方法
Ubuntuの場合はパッケージがあるので,コマンド1つでインストールできます.
sudo apt install multitime
Homebrewもパッケージがあります.
brew install multitime
ビルドしてインストールする場合は以下のリンクを参照してください.
基本的な使い方
sleep 1
を5回実行した時間を計測し,結果を出力します..
$ multitime -n 5 sleep 1
===> multitime results
1: sleep 1
Mean Std.Dev. Min Median Max
real 1.010 0.001 1.008 1.010 1.011
user 0.000 0.000 0.000 0.000 0.000
sys 0.002 0.000 0.001 0.002 0.002
平均時間のみ出力
sleep 1
を5回実行した平均時間だけを出力します.
$ multitime -p -n 5 sleep 1
real 1.01
user 0.00
sys 0.00
標準出力を別コマンドに渡す
sleep 1
を3回実行した平均時間だけを出力します.また,3回それぞれの実行結果を cowsay
コマンドに標準入力として渡します.これは, sleep 1; date | cowsay
を3回実行した場合と同様の結果が得られます.
$ multitime -p -n 3 -o cowsay bash -c "sleep 1; date"
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時44分55秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時44分56秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時44分58秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
real 1.02
user 0.00
sys 0.01
上記は,-s
オプションを使うことで以下に書き換えられます.-s
オプションは指定がない場合,ランダムな待ち時間になるため,上記とは厳密には異なります.
$ multitime -p -n 3 -o cowsay -s 1 date
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時51分32秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時51分33秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
_____________________________
/ 2021年 5月14日 金曜日 \
\ 14時51分33秒 JST /
-----------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
real 0.00
user 0.00
sys 0.00
発展した使い方
SSH先でmultitimeを実行
以下のコマンドでは,遠隔のホストにSSH接続を行いsleep 10
を10回実行します.その後,sleep 1
を1回実行してSSHを切断します.事前に遠隔ホストにmultitimeコマンドのインストールが必要です.
ssh admin@host "(multitime -p -n 10 bash -c \"sleep 10\"; sleep 1;)"
realだけを出力
realだけを計測したい場合は以下のコマンドを実行します.以下では,sleep 4
を3回実行した結果の real
を含む行の第2フィールド(数値)だけを絞って出力します.
$ multitime -p -n 3 sleep 4 2>&1 >/dev/null | grep real | awk '{print $2}'
4.01
余談
同様のコマンドでsharkdp/hyperfineを見つけました.
@kazuho さんのツイートで見つけました.研究のデータ測定で大活躍しました.
そういえばだけど、linuxでコマンドのベンチマーク取るときに使うコマンドは time(1) ではなく multitime(1) がオススメ。指定回数試行してくれて、平均以外に標準偏差や中央値も教えてくれるよ! https://t.co/8X82Ag0opy pic.twitter.com/z7H4fSiv4p
— Kazuho Oku (@kazuho) April 9, 2021