硬件 RAID5 设置中 5 个 SSD 的随机读取 IOP 较低

硬件 RAID5 设置中 5 个 SSD 的随机读取 IOP 较低

我们有 5 块 Toshiba Px04Srb192 SSD(根据规格,随机读取 IOP 为 270K),设置在硬件 Raid5 中。运行 fio 时,IOP 为 250K,这远低于我的预期。

/fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=/ae/disk1/test --bs=4k --iodepth=96 --numjobs=1 --size=8g --readwrite=randread

test: (g=0): rw=randread, bs=4K-4K/4K-4K, ioengine=libaio, iodepth=96
fio-2.0.9
Starting 1 process
Jobs: 1 (f=1): [r] [100.0% done] [961.6M/0K /s] [246K/0  iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=342604: Tue Feb 12 23:58:01 2019
  read : io=8192.0MB, bw=991796KB/s, iops=247948 , runt=  8458msec
  cpu          : usr=10.88%, sys=87.74%, ctx=437, majf=0, minf=115
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.1%
     issued    : total=r=2097152/w=0/d=0, short=r=0/w=0/d=0

Run status group 0 (all jobs):
   READ: io=8192.0MB, aggrb=991795KB/s, minb=991795KB/s, maxb=991795KB/s, mint=8458msec, maxt=8458msec

Disk stats (read/write):
  sdb: ios=2083688/0, merge=0/0, ticks=265238/0, in_queue=265020, util=98.53

lspci -nn | grep RAID
18:00.0 RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID Tri-Mode SAS3508 [1000:0016] (rev 01)

我原本预计 5 个 SSD 的 IOP 至少是单个 SSD 的 2 倍。对吗?有没有什么建议可以解释为什么我们看到 IOP 较低?

答案1

首先,您期望按照规格获得 270k iops,但是满足此值所需的块大小是多少?规格中实际上是 4k io 大小吗?

其次,如果您使用单个 io 线程对 raid5 进行基准测试,您将永远无法显示 raid5 的整体读取性能。每个读取 io 仅由 1 个 SSD 驱动器提供服务。因此,您必须将工作线程数(fio numjobs 参数)增加到至少 5。

答案2

(你的 fio 版本太旧了!请参阅https://github.com/axboe/fio/releases看看上游已经达到了什么……)

您在其他答案中得到的反馈很好,但我想强调这一点:

  cpu          : usr=10.88%, sys=87.74%, ctx=437, majf=0, minf=115

如果我们将用户空间和内核系统百分比相加,结果为 98.62%。这强烈表明您没有更多 CPU 时间来发送更多 I/O(请注意,您已经在使用加速条带,gtod_reduce=1我通常不建议使用这种条带,但对于您的情况来说,它似乎很合适)。

不过,还有一些其他的事情...

  sdb: ios=2083688/0, merge=0/0, ticks=265238/0, in_queue=265020, util=98.53

这暗示您的 RAID 控制器所呈现的“磁盘”非常繁忙(查看该util百分比)。这是需要牢记的一点。

您是否通过文件系统中的文件执行 I/O(/ae/disk1/)?如果是这样,您是否知道文件系统将带来一些开销,并且可能无法提供O_DIRECT您期望的行为?您可能希望从块级别(即 )执行 I/O 开始/dev/sdb,然后逐步确定任何开销的归属(警告:请小心 - 如果使用不当,fio 可能会破坏数据)。

如果你真的想要更快,我认为你需要:

  • 在块设备级别执行 I/O。
  • 使用多个线程或进程(例如通过增加numjobs)。这样,fio 线程/进程可能会迁移到不同的 CPU(但请注意,一切都是有代价的)...
  • 开始调整 fio 以批量提交和收获 I/O。
  • 开始调整你的内核。

正如我所说,大多数人很少需要付出这么多努力,但也许你是例外之一 :-)。fio 邮件列表主题回复“回复:推荐用于 PCI-E 压力测试的作业文件“提到了这一点:

您可能会看到使用线程(线程)而不是进程的好处(每个磁盘的负载更多)。您可能还需要每个磁盘使用多个线程。请参阅http://fio.readthedocs.io/en/latest/fio_doc.html了解更多选项。两者皆可https://www.spinics.net/lists/fio/msg05451.htmlhttp://marc.info/?l=linux-kernel&m=140313968523237&w=2给出人们使用 fio 来驱动高负载的例子,以便这些例子可能更有用。

相关内容