fio -numjobs越大,iops越小,原因是?

问题描述:

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 - > 15873fio -numjobs越大,iops越小,原因是?

我感觉有点困惑。为什么-numjobs更大,iops会更小?

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

例如,假设我有一个廉价的旋转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必须在非易失性媒体上标记为完成之前。

这可能不是你的情况发生的情况,但是是一个“假设”情景的例子。