在进行同步 IO 基准测试时使用队列深度是否有意义?

在进行同步 IO 基准测试时使用队列深度是否有意义?

在进行同步 IO 基准测试时,队列深度 > 1 是否有意义?

我期待 QD1 的结果相同,但是 QD32 确实给出了更好的结果吗?

我以为它会被忽略。在菲奥手动的对于选项--iodepth

请注意,将 iodepth 增加到超过 1 不会影响同步 ioengines...

fio命令:

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=1 --size=512MB --fsync=1  --filename=test.img 
Result:  5.210 IOPS / 20MB/s

fio --name=x --ioengine=posixaio --rw=write --bs=4k --iodepth=32 --size=512MB --fsync=1  --filename=test.img 
Result: 20.100 IOPS /  79MB/s

答案1

(以下内容参考菲奥

在进行同步 IO 基准测试时,队列深度 > 1 是否有意义?

否(这是一个简化,但您可以阅读特殊情况的 fio 文档)。

我认为它会被忽略。

请注意,将 iodepth 增加到超过 1 不会影响同步 ioengines...

posixaio[显示 iodepth 对ioengine影响的示例]

posixaio是一个A同步ioengine(aio = 异步 I/O:-) 如果你看https://github.com/axboe/fio/blob/fio-3.23/engines/posixaio.c#L246你会注意到它没有设置标志FIO_SYNCIO(参见https://github.com/axboe/fio/blob/fio-3.23/ioengines.h#L65用于定义标志的位置)。

当您使用大于 1 的异步 ioengine 时,iodepth根据定义,您正在尝试创建异步 I/O 基准测试。您可以(在某种程度上)通过使用 1 来模拟异步 ioengine 的同步行为,iodepth但您将为使用冗余异步机制付出一些(可能很小)的开销。或者,您可以使用纯同步 I/O 引擎(寻找名称中带有sync的ioengines)并且您应该发现这iodepth不会影响您的结果(因为它们是真正同步的!)。

相关内容