我买了一张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()”之类的功能。
答案 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。考虑到这一点,从理论上讲,您应该能够通过以下方式达到类似的速度:
O_DIRECT
的所有要求(必须满足严格的内存对齐和大小限制)write
操作正在以2048个字节(或更大,只要它们是2的幂)的块写入的缓冲区上工作write
:-)如果由于某种原因您无法每次都提交“大”对齐的缓冲区,您可能会发现不使用O_DIRECT
(从而允许缓冲的I / O进行合并)会更好。