シェルスクリプトの時間は安定していますか?

シェルスクリプトの時間は安定していますか?

スクリプトの実行時間は大きく異なります。 Matlabのtimeitに似た時間関数を探したいです。ここ

たとえば、次のコマンドを評価しています。ここすばやく計算される一致に対してtime LC_ALL=C grep -ao CDA r328_0002.raw | wc -lループを実行する

---------------------------------------------
Events      real        user        sys
----------- ----------- ----------- ---------
40          0m0.044s    0m0.042s    0m0.005s
40          0m0.064s    0m0.062s    0m0.005s
40          0m0.046s    0m0.044s    0m0.005s
40          0m0.043s    0m0.042s    0m0.005s
40          0m0.047s    0m0.044s    0m0.005s
---------------------------------------------

Table: Events when Macbook Air 2013-Mid in Power Supply. 

---------------------------------------------
Events      real        user        sys
----------- ----------- ----------- ---------
40          0m0.056s    0m0.041s    0m0.011s
40          0m0.060s    0m0.047s    0m0.008s
40          0m0.041s    0m0.039s    0m0.006s
40          0m0.046s    0m0.044s    0m0.006s
40          0m0.047s    0m0.045s    0m0.006s
---------------------------------------------

Table: Events when Macbook Air in Battery Supply, 6h later.  

リアルタイム時間は0.044秒から0.064秒に変動し、ユーザー時間は0.042秒から0.062秒に変動し、システム時間は0.005秒に安定していることがわかります。時間についての私の考え

  • タイミング前にコマンドを1k繰り返す
  • 10回のタイミングを測定して平均と標準偏差をとる

厚い /dev/nul

このアイデアは lcd047 のコメントにあり、time LC_ALL=C ggrep -ao CDA r328_0002.raw >/dev/nullループで実行されます。

--------------------------------------------
real            user            sys
--------------  --------------  ------------
0m0.006s        0m0.003s        0m0.002s
0m0.006s        0m0.003s        0m0.002s
0m0.006s        0m0.003s        0m0.002s
0m0.008s        0m0.003s        0m0.003s
0m0.006s        0m0.003s        0m0.002s
0m0.005s        0m0.002s        0m0.002s
0m0.006s        0m0.002s        0m0.002s
0m0.009s        0m0.003s        0m0.003s
0m0.007s        0m0.003s        0m0.003s
0m0.006s        0m0.003s        0m0.002s
0m0.006s        0m0.003s        0m0.002s
0m0.008s        0m0.003s        0m0.003s
--------------------------------------------

Table: Events when Macbook Air 2013-Mid in Battery Supply. 

ノートパソコンに電源が入っていて実行中のプログラムが少ない場合は、この時間をさらに改善できると思います。

シェルスクリプトの時間を確実に測定する方法は?

ベストアンサー1

私の答えはいいえ! Linuxはリアルタイムシステムではありません。 UNIXとLinuxの哲学は、システムが複数のユーザーとシステムプロセスで共有されている間に最短の応答時間を提供することです。起動コマンドのタイミングによっては、重要なシステムプロセスがプロセッサ時間を割り当てるのを待つ必要があるかもしれません。さらに、ファイルシステムはディスクから読み取られたファイルをバッファリングできますが、最終的にシステムの他のプロセスがファイルを所有している場合、これらのファイルシステムバッファはキャッシュからデータをロードできません。一般的に、Linuxシステムでプロセスにかかる時間は、宇宙の時間とスペースに関係なく、システムの周りのエントロピーに依存します。

ライブチューニング専用のライブシステムとコマンドと、あなただけのために予約されている特定の量のリソースが必要です。プロセッサ、メモリの一部、環境の基本ファイルシステム自体の反映をスケジュールできる最新のカーネルの新しいCGROUP機能を使用すると、同様の結果が得られます。

あなたの例の主なタイミング問題の1つは、grepとwcが入力を読み取る方法です。ファイルをramfsにコピーして作業するときは、タイミングをより安定させることができます。

おすすめ記事