我有一个西部数据500 GB的内部固态硬盘(WDS500G1B0A)。其规格说明525 mbps的顺序写入速度。我用f2fs格式化了这个固态硬盘。
然后,我使用O_SYNC标志在文件系统上执行大小为4k的顺序写操作(以确保在写操作返回时将写操作提交到磁盘)。我的测试程序是单线程的。
据我所知,吞吐量将是底层SSD的IOPs和延迟评级的组合。对于这种执行,我应该期望多大的吞吐量?我只有大约8k IOPS。
我也可以分享我的测试程序,以防我遗漏了一些基本的东西。
我是否还遗漏了格式化、SSD等方面的其他内容?
当我在相同格式化的固态硬盘上运行没有O_SYNC标志的相同程序时,我得到了10倍好的结果(大约80k IOPS)。我可以做哪些额外的调优或测试来更好地处理正在发生的事情?
发布于 2017-08-29 15:03:11
首先让我承认,没有O_SYNC标志的80k IOPS让我感到困惑,因为它们恰好与固态硬盘IOPS (525MB/ 4k数据块大小~100k IOPS)一致。在我的分析中,我应该坚持525MB的吞吐量规范。我观察到的是,即使使用O_SYNC标志,固态硬盘的吞吐量也确实接近这个规范,尽管块大小非常大(大约16MB),这是可以理解的。
由于没有O_SYNC标志,linux必须将写操作提交到内存中的内核缓冲区中,我们不能真正使用它来分析底层的固态硬盘IO性能。它必须依赖于硬件的其他因素,如内存、中央处理器等。例如,在功能更强大的服务器上,我甚至可以看到2000 MBps,这在固态硬盘级别上是不现实的。
固态硬盘可以比硬盘更好的性能,即使没有O_SYNC标志,而写入是定期刷新到磁盘,因为这将是一个合理的模式,IO应用程序在顶部。如果有人对此感兴趣,我可以将我的数据与此分析分享。
很抱歉,我的问题与原问题的主题不同。然而,无论如何,这是一些很好的学习。因此,我想把我的答案贴在这里。
https://stackoverflow.com/questions/45768055
复制相似问题