7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

timeよりスゴイ! multitimeを使って実行時間を計測

Last updated at Posted at 2021-05-14

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

ビルドしてインストールする場合は以下のリンクを参照してください.

Laurence Tratt: 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 さんのツイートで見つけました.研究のデータ測定で大活躍しました.

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?