想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我买了一张Highpoint带有4个Samsung 960PRO的HBA卡,因为官方网站说该卡的写入速度为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()”之类的函数。
最佳答案
我只是注意到您指定的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时)。甚至不同步
引擎可能会施加OS限制,从而导致所需深度无法达到
实现。 [重点添加]
您没有发布fio输出,因此我们无法确定您是否达到了iodepth大于1的深度。 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进行合并)会更好。
关于linux - 如何实现磁盘写入速度高达fio呢? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53553945/