私はCで小さなプログラムを書いていますが、そのパフォーマンスを測定したいと思います。
プロセッサで実行される時間と、キャッシュヒットとミスの数を確認します。コンテキストの切り替えとメモリの使用に関する情報も必要です。
プログラムの実行には1秒もかかりません。
/ proc/[pid]/statの情報は好きですが、プログラムが死んだ/殺された後にそれを見る方法がわかりません。
何か案は?
編集: Valgrindは多くのオーバーヘッドを追加すると思います。そのため、/ proc/[pid]/statなどの簡単なツールが必要でした。
使用perf:
perf stat ./yourapp
詳細については kernel wiki perf tutorial をご覧ください。これはCPUのハードウェアパフォーマンスカウンターを使用するため、オーバーヘッドは非常に小さくなります。
Wikiからの例:
perf stat -B dd if=/dev/zero of=/dev/null count=1000000
Performance counter stats for 'dd if=/dev/zero of=/dev/null count=1000000':
5,099 cache-misses # 0.005 M/sec (scaled from 66.58%)
235,384 cache-references # 0.246 M/sec (scaled from 66.56%)
9,281,660 branch-misses # 3.858 % (scaled from 33.50%)
240,609,766 branches # 251.559 M/sec (scaled from 33.66%)
1,403,561,257 instructions # 0.679 IPC (scaled from 50.23%)
2,066,201,729 cycles # 2160.227 M/sec (scaled from 66.67%)
217 page-faults # 0.000 M/sec
3 CPU-migrations # 0.000 M/sec
83 context-switches # 0.000 M/sec
956.474238 task-clock-msecs # 0.999 CPUs
0.957617512 seconds time elapsed
カーネルモジュールを手動でロードする必要はありません。最新のdebianシステム(linux-baseパッケージを使用)では動作するはずです。 「perf record -a」/「perf report」コンボを使用すると、フルシステムプロファイリングも実行できます。デバッグシンボルを持つアプリケーションまたはライブラリは、レポートに詳細とともに表示されます。視覚化のために フレームグラフ はうまく機能しているようです。
使用することもできます
/usr/bin/time -v YourProgram.exe
このすべての情報が表示されます。
/usr/bin/time -v ls
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 60%
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): 4080
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 314
Voluntary context switches: 1
Involuntary context switches: 1
Swaps: 0
File system inputs: 0
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0
-fフラグを使用して、ニーズに合わせて出力をフォーマットすることもできます。
絶対パスを使用してこのプログラムを呼び出してください。そうしないと、「time」コマンドが呼び出されますが、それは必要なものではありません...
お役に立てれば!
あなたに最適なツールはvalgrindと呼ばれます。メモリのプロファイリング、コールグラフの作成などが可能です。
_Sudo apt get install valgrind
valgrind ./yourapp
_
ただし、プログラムの実行時間を取得するには、time(8)
linuxユーティリティを使用できます。
_time ./yourapp
_