GNU/Linux >> Linux の 問題 >  >> Linux

UNIX の「time」コマンドは、ベンチマークに対して十分正確ですか?

最近では、 time を使用する理由はありません ベンチマーク目的で。 perf stat を使用 代わりは。はるかに有用な情報を提供し、ベンチマークプロセスを任意の回数繰り返して、結果の統計を行うことができます。つまり、分散と平均値を計算します。これははるかに信頼性が高く、time と同じくらい簡単に使用できます。 :

perf stat -r 10 -d <your app and arguments>

-r 10 アプリを 10 回実行し、統計を行います。 -d キャッシュミスなど、さらにデータを出力します。

だから time perf stat ほど信頼性が低いことは間違いありません。 .代わりにそれを使用してください。

補遺: 本当に time を使い続けたいなら 、少なくとも bash-builtin コマンドは使用しないでください。ただし、冗長モードの real-deal を使用してください:

/usr/bin/time -v <some command with arguments>

出力は次のようになります:

    Command being timed: "ls"
    User time (seconds): 0.00
    System time (seconds): 0.00
    Percent of CPU this job got: 0%
    Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
    Average shared text size (kbytes): 0
    Average unshared data size (kbytes): 0
    Average stack size (kbytes): 0
    Average total size (kbytes): 0
    Maximum resident set size (kbytes): 1968
    Average resident set size (kbytes): 0
    Major (requiring I/O) page faults: 0
    Minor (reclaiming a frame) page faults: 93
    Voluntary context switches: 1
    Involuntary context switches: 2
    Swaps: 0
    File system inputs: 8
    File system outputs: 0
    Socket messages sent: 0
    Socket messages received: 0
    Signals delivered: 0
    Page size (bytes): 4096
    Exit status: 0

特に、これがどのようにピーク RSS を測定できるかに注意してください。これは、ピーク メモリ消費に対するパッチの効果を比較したい場合に十分な場合が多いです。つまりその値を使用して前後を比較し、RSS ピークが大幅に減少している場合は、正しいことをしています。


time ベンチマークが 1 秒以上実行されるのに十分な時間を生成し、それ以外の場合は exec() かかりました 実行時間に比べてプロセスが大きくなる可能性があります。

ただし、ベンチマークを行うときは、コンテキストの切り替えに注意する必要があります。つまり、別のプロセスが CPU を使用している可能性があるため、ベンチマークと CPU を競合し、実行時間が長くなります。他のプロセスとの競合を避けるために、次のようなベンチマークを実行する必要があります:

sudo chrt -f 99 /usr/bin/time --verbose <benchmark>

または

sudo chrt -f 99 perf stat -ddd <benchmark>

sudo chrt -f 99 優先度 99 の FIFO リアルタイム クラスでベンチマークを実行します。これにより、プロセスが最優先プロセスになり、コンテキストの切り替えが回避されます (/etc/security/limits.conf を変更できます)。 リアルタイムの優先度を使用するために特権プロセスを必要としないように)。

time にもなります ベンチマークで発生したコンテキスト スイッチの数を含む、利用可能なすべての統計を報告します。これは通常 0 である必要があります。それ以外の場合は、ベンチマークを再実行することをお勧めします。

perf stat -ddd /usr/bin/time よりもさらに有益です サイクルごとの命令、分岐およびキャッシュ ミスなどの情報を表示します。

また、CPU 周波数のスケーリングとブーストを無効にして、ベンチマーク中に CPU 周波数が一定に保たれ、一貫した結果が得られるようにすることをお勧めします。


Linux
  1. Linuxatコマンドでタスクをスケジュールする

  2. 初心者向けのLinuxターミナルガイド

  3. `time Command`でコマンドの出力をリダイレクトしますか?

  1. Linuxコマンドラインに関する8つのヒント

  2. Nala:APTコマンド用のよりきれいなフロントエンド

  3. cd コマンドの man ページがない

  1. Linuxでのコマンドまたはプロセスの実行時間を検索する

  2. `builtin`ビルトインが必要ですか?

  3. Unix Less Command:効果的なナビゲーションのための 10 のヒント