我正在对一些代码进行计时,我想知道有多少时间是由于从磁盘读取数据而花费的。我不相信它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”的事情。