有没有可靠的方法来判断 I/O 的时间

有没有可靠的方法来判断 I/O 的时间

我正在对一些代码进行计时,我想知道有多少时间是由于从磁盘读取数据而花费的。我不相信它time给出的结果。例如,我有一个 1.3GB 的文件,如果我运行,wc我会得到

time wc largefile.file 
  50000000  150000000 1316665179 largefile.file

real    0m26.835s
user    0m18.363s
sys     0m0.495s

从我的旧硬盘中读取文件不可能只花费不到 0.5 秒的时间。

是否有可靠的方法来判断有多少时间是由于 I/O 造成的?


进一步说明为什么我不知道如何解释time。如果我明白

time cat largefile.file > /dev/null

real    0m24.230s
user    0m0.060s
sys     0m1.473s

那么很容易得出 I/O 耗时约为 22.5 秒的结论。但wc上面的数字暗示耗时是 8 秒。这两个数字并不一致。

答案1

sys意味着在内核中花费的 CPU 时间,但您想要 io 等待时间。

谷歌搜索找到了另一个指向“的堆栈交换答案来自 /proc/$pid/stat 的每个进程的 iowaitexit()“。(并且可能需要在调试器下运行编程器并在/上设置断点_exit(),这样您就可以在进程消失之前读出 iowait?)。

我经常通过从实际时间中减去 CPU 时间(用户时间 + 系统时间)来计算。这假设进程不会等待不计入“IO”的事情。

相关内容