我在 GNU/Linux 上用 C 语言进行了一些 I/O 密集型编程,我希望能够跟踪所有 I/O 调用并了解应用程序 sleep 、等待的时间每次调用的IO
除了到处使用 gettimeoftheday 的 DIY 方法之外,还有什么工具可以做到这一点吗?我希望能够区分彼此的调用。
有用的输出示例:
sendto at myprog.c:42 : 30µs recvfrom at myprog.c:48 : 45µs ...
注意:我想要的是实时,而不是像分析器通常给出的那样的CPU时间。
谢谢
最佳答案
strace
命令具有选项 -T
,它应该可以满足您的需要。我检查了源代码,它调用 gettimeofday
(2) 来获取时间,因此它报告的是挂钟时间,而不是 CPU 时间。
我的计算机上 strace -p 2956 -T
的输出示例:
stat("/proc/sys/fs/binfmt_misc", {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0 <0.000028>
stat("/media/Klatch", {st_mode=S_IFDIR|0711, st_size=4096, ...}) = 0 <0.000021>
stat("/media/Drum", {st_mode=S_IFDIR|0711, st_size=4096, ...}) = 0 <0.000021>
close(18) = 0 <0.000019>
munmap(0x7fa088e60000, 4096) = 0 <0.000022>
open("/etc/mtab", O_RDONLY) = 18 <0.000024>
fstat(18, {st_mode=S_IFREG|0644, st_size=742, ...}) = 0 <0.000015>
时间位于行尾,以秒为单位。上例中的系统调用需要 15 到 28 微秒。
关于c - 跟踪 io 系统调用时间的工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248291/