据我从所有关于NVMe固态硬盘的相关文章中了解到,NVMe固态硬盘的优点之一是多队列。利用多个NVMe I/O队列,可以极大地利用NVMe带宽。然而,我从自己的实验中发现的并不符合这一点。
我想从NVMe固态硬盘执行并行4k粒度顺序读取。我使用的是三星970 EVO Plus 250‘m。我使用FIO对SSD进行基准测试。我使用的命令是:
fio --size=1000m --directory=/home/xxx/fio_test/ --ioengine=libaio --direct=1 --name=4kseqread --bs=4k --iodepth=64 --rw=read --numjobs 1/2/4 --group_reporting
下面是我在测试1/2/4并行顺序读取时得到的结果:
numjobs=1: 1008.7MB/s
numjobs=2: 927 MB/s
numjobs=4: 580 MB/s
带宽的减少有点违反直觉。减少的可能原因是什么?
谢谢。
发布于 2021-08-20 06:30:50
我想强调一下您可能会看到这个问题的3个原因:
驱动器有效队列深度过高,测试下的驱动器容量仅限于1 1GB,
首先,为每个Job指定参数--iodepth=X。这对于你的硬盘来说可能太高了。根据250 1GB驱动器的供应商规格,对于队列深度为32的情况,4KB随机读取应显示250 KIOPS (1 1GB/s)。它不会提高性能。
其次,将测试容量限制在如此小的范围(1 1GB)可能会导致SSD内部发生大量冲突。这是读取将命中同一介质物理读取单元(也称为Die,又称为LUN)的情况。将测试容量增加到整个驱动器或至少增加到50-100 at应可最大限度地减少冲突。
第三,为了获得符合规范的性能数字,需要对Drive进行相应的预处理。对于测量顺序和随机读取的情况,最好使用全驱动顺序前提条件。
文件--大小=100% --ioengine=libaio --直接=1--名称=128KB_SEQ_write_QD32 --bs=128k --iodepth=4 --rw=write --numjobs=8
https://stackoverflow.com/questions/65177413
复制相似问题