在进行同步 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
不会影响您的结果(因为它们是真正同步的!)。