如何实现与fio一样高的磁盘写入速度?

时间:2018-11-30 08:35:55

标签: linux benchmarking disk ssd disk-io

我买了一张Highpoint HBA卡,其中装有4个三星960PRO。正如官方网站所说,该卡的写入速度为7500MB / s,读取速度为13000MB / s。

当我在ubuntu 16.04系统中用fio测试此卡时,写入速度约为7000MB / s,这是我的测试参数:

sudo fio -filename=/home/xid/raid0_dir0/fio.test -direct=1 -rw=write -ioengine=sync -bs=2k -iodepth=32 -size=100G -numjobs=1 -runtime=100 -time_base=1 -group_reporting -name=test-seq-write

我已经在卡中创建了raid0并创建了xfs文件系统。如果我想使用“ open(),read(),write等功能,我想知道如何实现与fio一样高的磁盘写入速度。 ()”或控制台应用程序中的“ fopen(),fread(),fwrite()”之类的功能。

1 个答案:

答案 0 :(得分:1)

我只是注意到您指定的fio工作似乎有点缺陷:

  

-direct = 1 -rw = write- ioengine = sync -bs = 2k- iodepth = 32

(为简单起见,我们假设破折号实际上是双破折号)

以上内容要求尝试让同步ioengine使用大于1的iodepth。这通常是没有意义的,而iodepth section of the fio documentation warns about this

  

iodepth = int

     

要针对文件运行的I / O单元数。注意   将iodepth增加到1以上不会影响同步 ioengine   (除了在使用verify_async时的小角度)。甚至不同步   引擎可能会强加操作系统限制,从而导致所需深度无法达到   实现。 [强调]

您没有发布fio输出,因此我们无法确定您是否达到了iodepth大于一的深度。 7.5GByte / s似乎可以胜任这项工作,我不禁想到您的文件系统已经安静运行并且在背后做了缓冲,但是谁知道呢?我不能说更多,因为恐怕您无法获得运行结果。

还要注意data fio was writing might not have been random enough to defeat compression,从而有助于达到人为的高I / O速度...

无论如何,您的主要问题:

  

如何实现与fio一样高的磁盘写入速度?

您的示例显示您正在告诉Fio使用ioengine that does regular write calls。考虑到这一点,从理论上讲,您应该能够通过以下方式达到类似的速度:

  1. 预分配文件,仅写入文件的已分配部分(因此您不进行扩展写入)
  2. 满足使用O_DIRECT的所有要求(必须满足严格的内存对齐和大小限制)
  3. 确保您的write操作正在以2048个字节(或更大,只要它们是2的幂)的块写入的缓冲区上工作
  4. 尽快提交您的write:-)

如果由于某种原因您无法每次都提交“大”对齐的缓冲区,您可能会发现不使用O_DIRECT(从而允许缓冲的I / O进行合并)会更好。