0
fio -numjobs=8 -directory=/mnt -iodepth=64 -direct=1 -ioengine=libaio -sync=1 -rw=randread -bs=4k
FioTest: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64

iops:(8 个线程和 iodepth=64)-> 356, 397, 399, 396, ... 但是当 -numjobs=1 和 iodepth=64 时,iops -> 15873

我觉得有点困惑。为什么 -numjobs 越大,iops 就越小?

4

2 回答 2

0

很难做出笼统的陈述,因为正确的答案取决于给定的设置。

例如,假设我有一个廉价的旋转 SATA 磁盘,它的顺序速度是公平的,但随机访问很差。我使访问越随机,事情就越糟糕(因为每个被服务的 I/O 所涉及的延迟 - https://people.eecs.berkeley.edu/~rcs/research/interactive_latency.html建议 3ms 是必须寻求的成本)。所以 64 个同时随机访问是不好的,因为在最后一个 I/O 服务之前,磁盘头正在寻找 64 个不同的位置。如果我现在将工作数量增加到 8 个,那么 64 * 8 = 512 意味着更多的寻找。更糟糕的是,在任何给定时间实际上可以提供服务的同时 I/O 数量有限。因此,磁盘的同时进行的 I/O 队列可能会完全满,其他队列开始备份,延迟又再次上升,IOPS 开始下降。另请注意,这很复杂,因为您要防止磁盘说“它在我的缓存中,您可以继续”,因为sync=1在将 I/O 标记为完成之前,它必须在非易失性介质上。

这可能不是您的情况,而是“假设”场景的一个示例。

于 2017-08-28T16:32:06.953 回答
0

我认为您应该在您的 fio 命令中添加“--group_reporting”。

group_reporting 如果设置,则在指定 numjobs 时显示每个组的报告而不是每个作业。

于 2018-12-01T06:21:07.813 回答