c - 跟踪 io 系统调用时间的工具

标签 c performance io trace

我在 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/

相关文章:

c++ - getline 函数的多个分隔符,c++

C Makefile,用不同的规则编译项目的各个部分

ruby - 使用 ruby​​ 将大量关键字与字符串匹配

C - 在循环中创建结构成员?

JSF Composite 组件的性能

Java 哈希实用程序

c++ - 用于独立于平台的二进制文件 I/O 的 C/C++ 库

.net - 是否值得同步 I/O 密集型线程以提高总体磁盘性能?

c - 在 C 中访问多维数组的等效语法

c - 无法让 Unix FIFO 正常工作?