IT技术博客大学习 共学习 共进步

SSD的随机写一定很慢吗?

风轻扬 2011-07-09 22:43:51 累计浏览 4,185 次
对SSD一种常见的认识是随机读、顺序读、顺序写都很快,但随机写很慢。从很多目前公布的产品性能指标数据和测试结果看,确实如此。一般SSD小块随机读性能可以达到几万甚至过十万,但小块随机写性能则一般只有3-5千,相差一个数量级。

    我认为这一认识不完全正确。SSD是一个很复杂的硬件,也还在不断改进,各代产品的性能表现往往有很大差异,针对不同的IO操作模式,SSD的性能表现可能有非常大的差异,它的性能表现决不能用“三快一慢”来简单的描述。要用好SSD,需要从原理上对SSD有深刻的理解,这样才能预计各种应用模式下SSD的性能表现,特别是才能预计出未来SSD的性能特征将走向何方。

    SSD最基础的硬件是一堆可以并行操作的NAND Flash,之上的控制器提供了读写缓存、LBA到HBA的映射、wear-leveling、garbage collection等众多功能。控制器非常复杂,各个产商的实现也都不同,但基本上可以认为一个设计的还不错的SSD应该能够较好的发挥出底层NAND Flash的性能。如此,了解底层NAND Flash的性能特征非常重要。根据Wikipedia和《Design Tradeoffs for SSD Performance》论文的数据,NAND Flash的基本性能指标大致如下:

     4K Page read latency: 25us

     4K Page write latency: 200us

     256K Block erase latency: 1.5ms

    相对于SSD产品升级换代带来的性能差异,基础NAND Flash的性能指标保持比较稳定。

    根据这一基础硬件的性能指标作些简单计算。

     256K Block read latency: 1.6ms,单NAND颗粒读带宽:160MB/s

     256K Block write latency: 13ms,单NAND颗粒写带宽:20MB/s

    回收一个空的Block:1.5ms

    回收一个近满(50个有效页面)的Block:(25us + 200us) * 50 + 1.5ms = 13ms

    据此可以对SSD的性能作出一些分析和预测。

    首先,从基本的硬件指标来看,写性能只有读性能的1/8,但目前的SSD产品顺序写的性能不比顺序读要慢很多。无论是Intel X-25/320还是Fusion IO,顺序写性能仅仅只比顺序读低10-20%,而不是只有1/8。这个问题,再仔细看一下可以发现主要原因是SSD的带宽已经到了接口的限制。比如Intel 320系列,顺序读270MB/s,顺序写也有220MB/s,这主要是因为接这个SSD的SATA 3的带宽极限就只有375MB/s,再加上内存拷贝,200多MB/s其实已经接近整个硬件系统的极限了,SSD本身的读写性能再高也没用。但如果将来接口带宽大幅提高不成为瓶颈,则SSD顺序读写之间的性能差异就可能突显出来。

    其次,无论是随机写还是顺序写,由于SSD都采用Copy on Write机制,最终对NAND Flash来说都是顺序写。那为什么经常随机写的性能要远差于顺序写?这里主要的差异在于页面的失效模式。随机写会导致随机的页面失效,顺序写会导致连续的大块页面失效。页面随机失效时,要回收block,需要将block中的有效页面读出并写到新位置,然后erase block,而连续的大块页面失效时,由于要erase的block中一般已没有有效页面,拷贝写到新位置的过程就没有了。

    如果应用的IO访问有高峰和低谷,使得在低谷时可以完成垃圾回收的话,则erase的性能影响可不再考虑,此时随机写的吞吐率应该跟顺序写相当。反之,则erase对写性能的影响很大程度上取决于要回收的Block中的有效页面数。可以看到回收空Block和回收近满Block的用时相关很大。这可以解释为什么Intel SSD中用越多的Over Provisioning,随机写性能越高。Intel 320系列300G型,如果只用180G留120G用作Over Provisioning,则随机写IOPS就从用足300G的1400/s提高到6600/s。如果应用只用8G的话,则随机写IOPS更是可以高到23000/s。由此可见SSD随机写的性能并不一定很差,如果系统能在空闲时完成垃圾回收,或应用操作少量数据,则随机写性能应与随机读没有数量级上的差异。

    不过从基础的理论数据计算,erase对性能的影响不应该像Intel 320系列那样有10多倍的影响,回收一个近满Block用时与写一个Block是差不多的,理论上应只会导致性能相差一半。这里有可能是因为Intel SSD的硬件内部IO并行不好,比如垃圾回收不能在所有NAND Flash上并行进行,或者控制器的算法还不够好。高端的硬件如Fusion IO,其随机写就不比随机读差。Intel还未发布的Ramsdale SSD的随机写IOPS也将过5万,我预计将来随着SSD技术的进步,其性能表现可能接近于基础NAND Flash的性能,随机写与顺序写之间的性能差异可能大幅缩减。

    而未来的SSD,将可能更多的体现出基础硬件NAND Flash的性能特征,即:

    1、无论顺序写还是随机写,其性能都远比顺序读或随机读差,可能接近一个数量级;

    2、随机写性能与顺序写性能之间可能只存在2-3倍左右的差异。

    有一些推测还有待实验来验证。对SSD这样的复杂硬件,分析和预测都很容易出错。有可能是我错了,也有可能是硬件设计错了,呵呵。

建议继续学习

  1. 我对技术方向的一些反思 (累计阅读 11,145)
  2. SSD的主要缺陷及Wear Leveling技术详解 (累计阅读 10,024)
  3. 基于SSD的数据库性能优化 (累计阅读 8,664)
  4. SSD 寿命的检查和健康判断 (累计阅读 7,163)
  5. SSD磨损数据的分析报告 (累计阅读 5,024)
  6. Linux 中对 SSD 的优化 Discard,类 TRIM 的功能 (累计阅读 4,988)
  7. SSD 想说爱你不容易 (累计阅读 3,383)
  8. 不同SSD盘组合搜索引擎单机性能测试[2013年版] (累计阅读 3,185)
  9. 数据的存储介质-固态存储SSD (累计阅读 2,826)