Fusion Drive揭秘
我测试用的是一台新的27英寸iMac。最开始,我用了一个128KB的顺序写入操作(队列深度为1),并使用iStat Menus 4来监测两个驱动器的状态,我发现只有SSD接收了最初的写入操作,HDD上没有活动。 SSD的写入速度是322MB / s。但在写入117GB之后,HDD接管了写入活动,最初速度大约为133 到175MB / s。
初步测试证实,Fusion Drive确实使用了两个驱动器。最初117GB写入到了SSD,接下来的1TB直接写入到HDD。我觉得它排定优先级的方式是:Fusion Drive假设SSD上有足够的可用空间(后面将详细讨论),首先尝试写入SSD。
接下来,我想进行随机IO测试,因为这才是SSD在性能方面超过HDD的地方,通常也是SSD缓存或混合方案功亏一篑的地方。我首先尝试了最糟糕的情况:涵盖所有的逻辑块地址的随机写入测试。鉴于Fusion Drive的总容量是1.1TB,从这个测试中,我们可以了解苹果如何在这两个驱动器之间映射LBA(逻辑块地址)。
结果很有趣的,不过也不算意外。 SSD和HDD都有写入活动,但HDD更多一些(消耗了更大比例的可用LBA)。普通的4KB(QD16)随机写入测试结果大约是0.51MB / s,它受到了Fusion Drive中HDD部分的限制。
但在随机写入任务结束之后,HDD和SSD之间出现了直接的数据移动。因为LBA是随机选择的,一些(相同或只是空间上相似的)地址可能被挑选了不止一次,这些逻辑块立即被标记为提升到SSD。这是我第一次看到Fusion Drive主动在驱动器之间移动数据。
对于消费级SSD来说,进行全覆盖的随机写入测试可能有点不公平,对SSD / HDD混合方案来说就更不公平了。要了解Fusion Drive处理随机IO的能力有多强,我把随机写入测试限制在LBA的第一个8GB之内。
结果有很大的不同。在第一轮中,平均速度大约是7 到9MB /s,IO绝大部分都发生在SSD上,一小部分在HDD上。 3分钟的测试后,我等着Fusion Drive移动数据,然后又重复了一遍。在第二轮中,速度跳升到了21.9MB / s,更多的IO发生在SSD上,尽管HDD上仍然看得到写入活动。
图:大部分的随机写入都发生在SSD上,但仍然有部分到了HDD,移动了一番数据和重映射LBA之后,几乎所有的随机写入都到了SSD上,速度也快了很多
在第三次尝试中,几乎所有的随机写入发生在SSD上,速度达到98MB / s的峰值,碎片增多时,速度下降到最低35MB / s。我认为,苹果似乎依据访问频率,把LBA动态地映射到了SSD上,这是一个非常积极的性能提升方法。归根结底,这是通常的SSD缓存方案和Fusion Drive之间存在的重大区别。大多数SSD缓存方案似乎都以读取频率为基础,而Fusion Drive看似(至少部分是)考虑了哪些LBA被频繁写入,并把它们映射到SSD上。
要注意的是,随后的随机写入测试产生的结果大不一样。当我用更多的数据和应用程序填充Fusion Drive(用真实的数据和应用程序填充到80%)时,我没有见到随机写入性能能再次达到这样高的水平。在每次运行中,我看到有很短的时间数据到处移动,但随机IO发生在HDD和SDD的比例约为7:1。鉴于这两种驱动器之间的容量差异,这个比例具有很大意义。如果你的工作负载包含大量的随机写入,涵盖所有可用空间,Fusion Drive可能就不太适合你。不过这样的工作负载大多出现在企业用户中,所以对你来说这应该不是问题。
数据精细度探究
苹果公司在宣传Fusion Drive时,谈到了文件和应用程序级别的数据移动,但在现实使用中,数据可以以128KB的文件块在SSD和HDD之间移动。
使用fs_usage工具,你可以看到苹果Fusion Drive的内部工作原理。 文件以128KB的文件块在驱动器之间移动,这也是由文件块的使用频率来决定的。由于客户工作负载往往是顺序的(在最糟的情况下也是伪随机),我们可以比较有把握地说,如果你在一个 128KB的文件块中访问一个LBA,你实际上会访问同一空间中更多的LBA。数据迁移过程似乎主要是发生在闲置期间,虽然我也看到,在IO负载较轻的时候,驱动器之间也有迁移活动进行。
迁移的快速触发机制十分有趣。一旦文件被复制或者创建出来,应用程序启动,或者其他IO活动完成时,SSD和HDD之间立刻开始进行数据迁移。当你填充Fusion Drive时,在SSD和HDD之间移动的数据量就大幅收缩了。事情本来就应该是这样。不常访问的数据应该放置在HDD 上,真正重要的东西会留在SSD上。当Fusion Drive在写入时,苹果就不会那么积极地释放SSD上的数据。
数据迁移过程本身是非常简单的,数据被标志为promotion和demotion,它被物理复制到新的存储设备上,然后它才移走。在迁移过程中,如果出现电源故障,Fusion Drive不会造成任何数据丢失,只有当一个128KB文件块的两个副本就位之后,源块才会被移除。苹果去年就告诉过我这件事了,但我现在才亲眼看到。
用128KB的文件块在HDD和SSD之间移动数据,苹果可以在写入SSD的时候进行部分碎片整理。尽管Fusion Drive 的所有写入首选目的地都是SSD(可以包括小于128KB的文件块,随机和伪随机写入),任何从HDD到SSD的迁移却都是大块顺序写入的,如果驱动器中有大量碎片,这就会触发垃圾块回收过程。SSD的性能肯定会随着时间的推移降低,但是这个过程有助于保持它的性能,因为SSD几乎一直都是在充满的状况下运行的,而且它会接收各种不相关的写入。我前面提到过,我希望苹果把更多的PM830 NAND空间预留为备用区。我怀疑苹果没有预留更大的备用区是出于成本方面的考虑。
应用体验
在现实使用中,Fusion Drive能给我们带来怎样的体验呢?简单说来,它的效果出乎意料的好。我之前使用过的SSD缓存方案全部都更像是HDD而不是SSD,不过苹果公司的Fusion Drive体验则是几乎处于HDD和SSD的正中间。
它在安装几乎所有程序时,都是先用SSD,因此Fusion Drive感觉真的像SSD。不仅是在安装应用程序的时候,复制任何东西时,一般也是先去SSD。似乎到