如何获取应用程序从文件系统读取/写入文件所花费的总时间?
Posted
技术标签:
【中文标题】如何获取应用程序从文件系统读取/写入文件所花费的总时间?【英文标题】:How to get the total time an application spends on reading/writing from/to the file system? 【发布时间】:2010-09-29 02:18:09 【问题描述】:我现在正在分析一个执行大量磁盘 I/O 的应用程序。
此时,我想知道在磁盘 I/O 上花费了多少时间。这样,我就可以将 I/O 和整个执行时间进行比较,以决定下一个优化目标。
简而言之,我正在寻找工具或方法来:
-
计算并汇总我的应用程序的磁盘 I/O 操作的总时间。
堆栈跟踪不是强制性的,但很有帮助
适用于 Windows 或 OSX。
我无法控制执行磁盘 I/O 操作的组件。所以我无法在我的应用程序中添加分析代码来手动记录 I/O 时间。
我已经尝试过 Xcode Instruments 的 time profiler
。但它太重了。我只想要 I/O 操作的摘要时间。
谢谢
【问题讨论】:
【参考方案1】:在 Windows 上使用 XPerf 可以详细地告诉您有关文件 I/O 时间的详细信息。您也可以使用它来获取堆栈跟踪 - Michael Milrud 有一个关于使用 XPerf 的精彩 PDC09 视频。
【讨论】:
Xperf 还可以让您查看系统上的其他磁盘活动,以了解磁盘 I/O 缓慢的原因。并且,它区分调用花费了多长时间,以及其中有多少是磁盘处理请求而不是请求在队列中等待。这种区别对于负载很重的系统至关重要。【参考方案2】:我曾经为 Win32 下的 ReadFile/WriteFile 写过一些简单的钩子。您只需从 main 调用 init()
函数,整个过程的调用将被拦截。
我只是不知道如何发布它们,因为它们很大。
【讨论】:
以上是关于如何获取应用程序从文件系统读取/写入文件所花费的总时间?的主要内容,如果未能解决你的问题,请参考以下文章