壁時計の時間を分析する方法は?

壁時計の時間を分析する方法は?

私のプログラムでは、リアルタイムの持続時間は時々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

そしてここ:

https://strace.io/

答え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を停止してバックトレースを記録します。

関連情報