【发布时间】:2017-03-14 23:12:45
【问题描述】:
我正在尝试测量 FIO 基准测试的执行时间。我目前正在这样做在 gettimeofday() 之间包装 FIO 调用:
gettimeofday(&startFioFix, NULL);
FILE* process = popen("fio --name=randwrite --ioengine=posixaio rw=randwrite --size=100M --direct=1 --thread=1 --bs=4K", "r");
gettimeofday(&doneFioFix, NULL);
并将经过的时间计算为:
double tstart = startFioFix.tv_sec + startFioFix.tv_usec / 1000000.;
double tend = doneFioFix.tv_sec + doneFioFix.tv_usec / 1000000.;
double telapsed = (tend - tstart);
现在,问题是
-
经过的时间与 FIO 输出的 runt 不同(更大)。你能帮我理解为什么吗?事实可以在 FIO 输出中看到:
randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=posixaio, iodepth=1 fio-2.2.8 Starting 1 thread randwrite: (groupid=0, jobs=1): err= 0: pid=3862: Tue Nov 1 18:07:50 2016 write: io=102400KB, bw=91674KB/s, iops=22918, runt= 1117msec ...而 telapsed 是:
telapsed: 1.76088 seconds FIO 执行的实际时间是多少: a) FIO 给出的 runt,或 b) getttimeofday() 所经过的时间
- FIO 如何衡量其runt? (可能这个问题与 1 有关。)
PS:我试图替换 gettimeofday(用 std::chrono::high_resolution_clock::now()),但它的行为也相同(同样,我的意思是它也提供了比 更大的经过时间矮个子)
提前感谢您的时间和帮助。
【问题讨论】:
标签: c++ linux performance io execution-time