gpt4 book ai didi

linux - 为什么fio观察到的iops和iostat观察到的不一样?

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:29 44 4
gpt4 key购买 nike

最近,我正在尝试使用 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观察到的是170左右。为什么不一样呢?如果我不配置“fdatasync”,两个 iops 大致相同,但更高,大约 450。为什么?据我所知,直接 io 不通过页面缓存,在我看来,这意味着无论是否使用 fdatasync,它都应该花费大约相同的时间。

而且我听说 iostat 在某些情况下可能会得出错误的统计数据。那是真的吗?究竟什么情况会导致 iostat 出错?我可以使用任何其他工具来监控 I/O 性能吗?

最佳答案

查看您的作业文件,您似乎不是针对 block 设备而是针对文件系统中的文件执行 I/O。因此,虽然您可能会要求文件系统“将此数据放在该文件的那个位置”,但文件系统可能会变成多个 block 设备请求,因为它还必须更新与该文件关联的元数据(例如日志、文件时间戳、写入时复制等) ) 也。因此,当请求向下发送到磁盘(这是您使用 iostat 测量的磁盘)时,原始请求已被放大。

还要记住的是,Linux 可能有一个用于该磁盘的 ioscheduler。这可以在提交到磁盘之前重新排列、拆分和合并请求/将它们返回到堆栈中的更上层。查看 https://www.kernel.org/doc/Documentation/block/queue-sysfs.txtnomerges 的不同参数有关如何避免某些合并/重新排列的信息,但请注意您无法控制对太大请求的拆分(但文件系统不会发出太大的请求)。

(PS:我不知道 iostat 是“错误的”,所以您可能需要直接询问那些说它的人以了解他们的意思)

关于linux - 为什么fio观察到的iops和iostat观察到的不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41262455/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com