私のプログラムでは、リアルタイムの持続時間は時々CPU時間の最大3倍です。これは、多くのメモリ割り当てとNFSネイティブ読み取り/書き込み操作を実行するシングルスレッドアプリケーションです。そのため、mem-swap や NFS の読み書きが遅くなると思われます。たとえば、次の出力は次のようになります。/usr/bin/time a.out
2165.32user 64.93system 6036.33elapsed
リアルタイム分析ツールはありますか?私はCPU時間分析のためにいくつかのツールを知って使用してみましたが、NFS / mem-swapやその他の壁時計の速度低下を指摘し、役に立つツールがあるかどうかはわかりません。
私のプログラムはC ++で書かれています。
編集する:/usr/bin/time
最後にまとめました。私が探していたのではありませんでした。私はアプリケーションの特定のブロック中にリアルタイムの消費を関連付ける方法を探しています。 Collect/gprof などのプロファイラは、次の内容を通知できます。
- 待機によってほとんどのコンテキスト遷移が発生する領域。
- NFS アクセスが発生する特定の機能です。
私のシステムは専用なので、これらの設定ファイルに影響を与える可能性がある他のプロセスについて心配することはありません。
答え1
わかりませんが、..straceが必要なようです...
例:
ここでは、プロセスIDが1055のプロセスがあるとし、次の操作を実行します。
neo $ sudo strace -w -c -p1055
strace: Process 1055 attached
^Cstrace: Process 1055 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
77.38 5.738820 534 10730 read
5.35 0.396752 114 3480 clone
4.17 0.309514 10 30741 rt_sigprocmask
2.31 0.171203 13 12761 close
1.56 0.115981 16 6960 3480 wait4
1.47 0.108800 10 10441 rt_sigaction
1.43 0.106307 8 11890 fcntl
0.98 0.072344 19 3770 openat
0.86 0.063769 18 3480 write
0.85 0.062820 18 3480 pipe
0.84 0.062443 15 4060 dup2
0.67 0.049338 9 5220 lseek
0.57 0.042007 11 3770 3770 ioctl
0.49 0.036669 10 3480 rt_sigreturn
0.47 0.035150 10 3480 fchmod
0.29 0.021420 12 1740 unlink
0.25 0.018666 10 1740 getpid
0.06 0.004745 16 290 stat
詳しくはこちらをご覧ください。
man strace
そしてここ:
答え2
あなたが見つけることができるかどうか疑わしいperf timechart
とても便利です。デフォルトでは、CPUとプロセスの状態を記録し、経時的な状態変化を示すグラフを表示します。
上部にはCPU使用率が表示され、下部にはプロセスが表示されます。青は「実行中」を意味し、黄色はプロセスがCPUを待っていることを意味し、赤はプロセスがI / Oでブロックされたことを意味し、灰色はプロセスがスリープモードであることを意味します。perf timechart
必要な詳細レベルに拡張できるSVGを出力します。
また、I/O (ディスクとネットワーク) と分岐を追跡できます。
perf
詳細を確認するのに役立つ他のモジュールがあります。perf record
興味のあるイベント(システムがサポートしている場合)を使用してタイムスタンプを記録し、時間ベースの情報を表示できます。
答え3
これがあなたが求めているものであるかどうかは完全にはわかりませんが、これは/usr/bin/time
壁時計に似ており、測定のみを行います。
#!/bin/bash
start=$(date +%s%N)
"$@"
end=$(date +%s%N)
echo "$(($end - $start)) nanoseconds elapsed"
保存し、wallclock
次のように実行します。
$ ./wallclock sleep 1
1006622540 nanoseconds elapsed
答え4
私も壁時計アナライザを探していました。私の期待に最もよく合うツールは次のとおりです。https://softwarerecs.stackexchange.com/a/55146/78636。その原理はとても簡単です。 GDBでプロセスを開始し、定期的にGDBを停止してバックトレースを記録します。