一部のコマンドをtime
ingしています。メジャーを平均化するために、コマンドを指定した回数実行して時間を計り、計算された平均と標準偏差で結果を取得します。結果は次のようになります。
avgtime -n 100 my_command
real 0m5.388s stdev 0m0.068s
user 0m5.380s stdev 0m0.067s
sys 0m0.004s stdev 0m0.000s
このためのUNIXツールはありますか? GNU/Linuxにはありますか?
Pythonを使用するすべてのシステムで利用可能なtimeitモジュールを使用してみることができます。
$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop
これは正確にはUNIXまたはGNU/Linuxツールではありませんが、 [〜#〜] r [〜#〜]統計計算のためのソフトウェア環境 このため。 (しかし、私はできません あなたのタスクにもっと具体的なものを見つけることはできません 。)
編集どうすれば疑うことができますか?もちろん、R
のベンチマークパッケージがあります: rbenchmark
。明らかにsystem.time()
をラップしているため、直接使用することもできます。 または、これを見てください。単純なストップウォッチ関数のペアです。"システムコマンドの実行" @Rosettaコード も参照してください(または、そうしないと、system("command")
になります) 。)
Edit2ちょうど見た この質問、「スクリプト内の時間の測定」 右側の「関連」列に、これは使用されます。つまり、時間がかかり、forループ(N
回)を実行し、もう一度時間をとり、タイムスパンを計算し、N
で除算します。 (さらに簡単に、time ( for-loop )
を試して、その出力を解析し、N
で除算します)。
R
を使用すると、平均、標準偏差、その他の興味深い値をすばやく計算できます。
たとえば、GNU timeを使用して、いくつかの実行時測定を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
オプション1- sqlite :
コマンドと時間の列を持つ単純なテーブルを作成し、適切な aggregation 計算で表示します。タイミングの後、 行を追加 をテーブルに追加します。
利点:ソリューション2に比べてテーブルを定義するのが簡単です。
短所:データの保持に注意する必要がありますか(必要ですか)。
オプション2- rrdtool :
RRDデータベースファイル、データ定義、および集計関数を定義します。計時後、データベースにrrdtool update ...
を入力します。
利点:rrdtool graph ...
を使用して簡単にグラフを生成できます。データ保持の問題はありません(ラウンドロビンデータベース)。
短所:単純なSQLテーブル/ビューと比較して、RRDデータベースの定義が少し難しい