带 O_SYNC 标志的格式化 SSD 顺序写入吞吐量

formatted SSD sequential write throughput with O_SYNC flag

我有一个 Western Digital 500 GB 内置 SSD (WDS500G1B0A)。其规格说明顺序写入速度为 525 mbps。我使用 f2fs 格式化了这个 SSD。

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

我知道它的吞吐量将是底层 SSD 的 IOP 和延迟等级的组合。这样的执行我应该期望什么样的吞吐量?我只有大约 8k IOPS。

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

我是否还遗漏了格式化 SSD 等其他内容?

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

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

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

即使没有 O_SYNC 标志,SSD 也可以比 HDD 表现更好,同时写入会定期刷新到磁盘,因为这对于顶部的 IO 应用程序来说是一个合理的模型。如果有人感兴趣,我可以与此分析分享我的数字。

很抱歉与我原来的问题发生了不同的切线。然而,无论如何,这是一些很好的学习。因此我想到在这里发布我的答案。