ZFS异步写入在不同队列深度下的异常性能疑问:为何QD2表现最优?
ZFS异步写入在不同队列深度下的异常性能疑问:为何QD2表现最优?
最近看到一篇对比不同SLOG驱动器的文章后,我好奇自己系统在不同队列深度下的性能表现,于是做了一系列测试,结果发现个挺奇怪的现象——ZFS异步写入时,队列深度2(QD2)的IOPS表现始终是最好的。不管我调整压缩算法、块大小还是记录大小,QD2都稳压QD1、QD4甚至QD8一头。按常理来说,队列深度越高性能应该越好才对,这到底是咋回事?
测试环境与配置
我的测试系统配置如下:
- CPU:i9-13900K
- 内存:128GB DDR5-4800
- 存储:两块三星980 PRO组成单镜像Vdev
- 运行平台:ProxMox 7上的容器
测试使用FIO工具,命令模板为(测试时会替换<4k/8k>和<1/2/4/8>为对应参数):
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=<4k/8k> --numjobs=1 --size=8g --iodepth=<1/2/4/8> --runtime=30 --time_based
测试发现的异常与细节
我前后测试了216种不同参数组合(压缩算法、块大小、记录大小、队列深度的搭配),平均结果都指向QD2的IOPS表现最优。同时还有几个额外的疑问点:
- 记录大小设为16k时性能最差,这点我完全摸不着头脑
- 块大小用8k时总带宽更高,这个相对容易理解
- Zstd压缩居然比LZ4表现还好,难道是我把这两块SSD的IO性能榨到极限了?测试过程中SSD的实际读写速度通常在400-700MB/s之间
- CPU governor的影响极大:设为"Performance"时才是上述结果,要是设为"Powersave",IOPS直接掉30%-50%!
核心疑问
目前我只给ZFS设置了ashift=12,没有做其他额外调优。有没有大佬能解释下,为啥ZFS异步写入在QD2时表现最优?会不会和这俩980 PRO每块只有2个NAND芯片有关?
备注:内容来源于stack exchange,提问作者Sam




