使用O_SYNC标志格式化SSD顺序写入吞吐量

时间:2017-08-19 05:35:12

标签: fwrite throughput ssd

我有一台Western Digital 500 GB内置SSD(WDS500G1B0A)。其规范规定了525 mbps的连续写入速度。我用f2fs格式化了这个SSD。

然后,我使用O_SYNC标志在文件系统上执行大小为4k的顺序写入(以确保写入返回时写入将提交到磁盘)。我的测试程序是单线程的。

据我所知,这个吞吐量将是底层SSD的IOP和延迟等级的组合。这样的执行我应该期望什么吞吐量?我的IOPS只有8k左右。

如果我遗漏了一些基本的东西,我也可以分享我的测试程序。

我还缺少格式化SSD等的其他内容吗?

当我在相同的格式化SSD上运行没有O_SYNC标志的相同程序时,我得到10倍更好的结果(大约80k IOPS)。我可以做些什么额外的调整或测试来更好地处理正在发生的事情?

1 个答案:

答案 0 :(得分:0)

首先我要承认,我对80 k IOPS没有O_SYNC标志感到困惑,因为它们恰好与SSD IOPS(525 MB / 4k blockize~100 k IOPS)相吻合。对于我的分析,我应该坚持525 MB的吞吐量规格。我观察到的是,即使使用O_SYNC标志,SSD吞吐量确实接近此规范,尽管块大小非常大(大约16 MB),这是可以理解的。

由于没有O_SYNC标志,linux必须在内存内核缓冲区中提交写入,我们无法真正将其用于底层SSD IO性能分析。它必须依赖于硬件的其他因素,如内存,CPU等。在功能更强大的服务器上,我甚至可以看到2000 MBps,这在SSD级别是不现实的。

即使没有O_SYNC标志,SSD也可以比HDD更好地执行,而写入会定期刷新到磁盘,因为这对于顶部的IO应用程序来说是一个合理的模型。如果有兴趣的话,我可以通过这种分析来分享我的数据。

很抱歉与我原来的问题不同。无论如何,这是一个很好的学习。因此我想在这里发布我的答案。