Linux
如何配置掛鐘時間?
在我的程序中,實時持續時間有時是 CPU 時間的 3 倍。這是一個執行大量記憶體分配和 NFS 基礎讀/寫的單執行緒應用程序。所以我懷疑是記憶體交換或 NFS 讀寫會減慢速度。例如,以下是輸出
/usr/bin/time a.out
2165.32user 64.93system 6036.33elapsed
是否有任何實時分析工具?我知道並使用了多種工具進行 cpu 時間分析,但不確定是否有任何東西可以幫助並指出 NFS / mem-swap 或任何其他掛鐘減速。
我的程序是用 C++ 編寫的
編輯:
/usr/bin/time
最後給我一個總結——我不是在找那個。我正在尋找一種方法來關聯我的應用程序的特定程序塊期間的實時消耗。像 collect/gprof 這樣的分析器可以告訴我類似的事情
- 由於等待而發生大多數上下文切換的區域。
- 發生 NFS 訪問的特定功能。
由於我的系統是專用的,我不擔心可能影響這些配置文件的其他程序。
不確定..但看起來你可能需要 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
以及這裡: