使用O_SYNC标记格式化的SSD顺序写入吞吐量
我有一个Western Digital 500 GB内置SSD(WDS500G1B0A)。其规格说明了525 mbps的连续写入速度。我使用f2fs格式化此SSD。使用O_SYNC标记格式化的SSD顺序写入吞吐量
然后,我使用O_SYNC标志在文件系统上执行大小为4k的顺序写入操作(以确保在写入操作返回时将写入操作提交到磁盘)。我的测试程序是单线程的。
我知道这将是基础SSD的IOP和延迟评级的组合。我应该期待这种执行的吞吐量?我只有大约8k IOPS。
我也可以分享我的测试程序,以防我缺少一些基本的东西。
我还错过格式化SSD等东西吗?
当我在同一个格式化的SSD上运行同一个没有O_SYNC标志的程序时,我得到了更好的结果(约80k IOPS)。我可以做些什么额外的调整或测试来更好地处理发生的事情?
让我首先承认,我没有O_SYNC标志,因为它们恰好与SSD IOPS(525 MB/4k块大小〜100 k IOPS)一致时,我被80 k IOPS所困惑。我应该坚持525 MB的吞吐量规格来进行分析。我观察到SSD的吞吐量确实接近这个规格,即使有O_SYNC标志,尽管块大小非常大(大约16 MB),这是可以理解的。
由于没有O_SYNC标志,linux必须提交内存内核缓冲区中的写入操作,所以我们无法将其用于底层SSD IO性能分析。它必须依赖于硬件的其他因素,如内存,CPU等。在更强大的服务器上,我甚至可以看到2000 MBps,这在SSD级别上是不切实际的。
即使没有O_SYNC标志,SSD也可以比HDD执行得更好,而写入操作会定期刷新到磁盘,因为这将是IO应用程序的合理模型。如果有人感兴趣,我可以通过分析分享我的数字。
对不起,我的原始问题不同。无论如何,这是一个很好的学习。因此我想在这里发布我的答案。