最近,我正在尝试使用 fio 测试我的磁盘。我的fio配置如下:
[global]
invalidate=0 # mandatory
direct=1
#sync=1
fdatasync=1
thread=1
norandommap=1
runtime=10000
time_based=1
[write4k-rand]
stonewall
group_reporting
bs=4k
size=1g
rw=randwrite
numjobs=1
iodepth=1
在此配置中,您可以看到我将 fio 配置为使用直接 io 进行随机写入。在测试运行时,我使用 iostat 来监控 I/O 性能。而且我发现:如果我将fdatasync设置为1,那么fio观察到的iops大约是64,而iostat观察到的iops大约是170。为什么会这样呢?如果我不配置“fdatasync”,两个 iops 大致相同,但要高得多,大约为 450。为什么?据我所知,直接 io 不经过页面缓存,在我看来,这意味着无论是否使用 fdatasync 都应该花费大约相同的时间。
我听说 iostat 在某些情况下可能会得出错误的统计数据。那是真的吗?究竟什么情况会导致 iostat 出错?有没有其他工具可以用来监控 I/O 性能?