在 I/O C++ 中花费的分析时间

Posted

技术标签:

【中文标题】在 I/O C++ 中花费的分析时间【英文标题】:Profiling time spent in I/O C++ 【发布时间】:2012-04-10 08:11:42 【问题描述】:

我有一个需要 11 秒的功能。 我想分析它在 I/O 上花费的时间。 是否有任何工具用于分析函数内的 I/O 时间花费? 哪个可以给出静态的

Total Time  I/O TIME Function Name
x           y        f  

【问题讨论】:

您对花费在 I/O 上的时间的真正含义有明确的定义吗? Linux 有很好的文件系统缓存,它会影响花费在 I/O 上的时间。只需尝试使用相同的输入多次运行相同的程序... @cnicutar 抱歉,我是 gprof 的新手。示例 gprof 示例 0.00 0.06 0.00 1 0.00 50.00 main 从中我如何才能确定它在 I/O 上花费了多少时间? @Basile Starynkevitch 我会尝试禁用文件缓存。 @tauran 我试着寻找老问题。但其他问题集中在通过排除 I/O 时间来进行分析。但我的问题是我需要所有时间 Total Time , I/O time 和 cpu times 来获取配置文件数据。 禁用文件缓存并不简单,也不代表常见的运行时情况。 【参考方案1】:

This method will tell you.

只需暂停 10 次。 每次查看堆栈。

如果您在执行 IO 的过程中发现它,例如,其中 6 次暂停,这意味着大约 60% 的时间都在 IO 中。

如果您想知道函数 F 请求的 IO 中花费了多少,只需计算函数 F 在堆栈上时执行 IO 的样本数。

gprof 不会告诉你这一点,因为它会在 IO 期间暂停采样。)

添加:或者,您可以在函数 F 中将 IO 调用存根,并测量有和没有 IO 的总体时间。

【讨论】:

以上是关于在 I/O C++ 中花费的分析时间的主要内容,如果未能解决你的问题,请参考以下文章

gprof 输出不准确

分析特定函数 C++

如何获取应用程序从文件系统读取/写入文件所花费的总时间?

如何在 C++ 应用程序中模拟高存储活动

如何在 Visual Studio (C++) 中设置发布分析

分配向量所花费的 C++ 时间