许多SSD用户都会发现一个问题:随着SSD剩余空间越来越小,传输性能也会大打折扣。显然,这是主控的垃圾回收机制在辛苦运作,不停地对页和块的数据进行搬运、擦除、合并,当然也就无法全身心扑到数据传输上。只是对于不同的主控而言,它们“回收垃圾”的效率,谁会表现得更好一点?
主控芯片在SSD中的作用归纳起来有两个:一是合理调配数据在各个数据通道、闪存芯片上的负荷;二是承担了整个数据的中转,并负责连接闪存芯片和外部SATA接口。主控市场曾经也是百家争鸣,Intel、SandForce、Marvell、Indilinx、Jmicron、三星等厂商纷纷参与竞争。但经过市场的自然选择之后,目前占据了绝大部分市场份额的主要是SandForce、Marvell以及三星这三家。
目前消费级SSD中使用普遍的就是SandForce SF-2281主控。它所特有的DuraWrite压缩算法,可以把数据压缩后再写入NAND闪存中。例如需要写入100MB的数据,SF-2281可以将这些数据压缩到50MB以内,然后再写入闪存中,这样一来就可以大大减少闪存的实际写入量,延长使用寿命,而且在读写可压缩数据时其大读写速度都非常高(这也是许多SandForce主控SSD喜欢标注的读写速度)。不过DuraWrite算法对已经压缩或者被加密的数据无效。在实际使用中,SandForce主控的SSD在打开或运行常见的文件和应用程序时,其响应速度在同类产品中比较出众,但是在读写视频和图片等无法压缩的文件时性能较低。
此外,数据压缩算法还会产生一定的延迟,因此该主控的随机读取IOPS就受到影响,也就是说它在低深度下随机读取能力并不是很出色。尽管如此,SandForce主控的性能依然是可圈可点,更重要是它就像非智能手机时代的联发科,能够为客户提供一整套SSD设计方案,极大降低了SSD行业的门槛,因此是许多SSD厂商的首选。包括Intel、威刚、OCZ、金士顿、海盗船等都推出过基于SandForce主控方案的产品。由于方案相同,所以它们的性能也都大同小异。不过Intel是个例外,SandForce专门为其开发了固件,再搭配Intel自家的优质闪存颗粒,使得520系列SSD无论各方面性能都要优于其他相同主控的产品。
Marvell主控在机械硬盘是里一枝独秀。在SSD时代,它的88SS9174主控同样占据着很大的市场份额,Intel、英睿达、海盗船、浦科特等都是Marvell的“忠实”用户。88SS9174并未采用类似DuraWrite的压缩算法,因此无论目标数据是否压缩或加密,其性能表现均始终如一。在面对不可压缩数据时,其持续写入速度明显高于同级别的SF-2281主控产品。新的88SS9187主控采用了高性能嵌入式双核处理器技术,在持续写入速度上甚至能够突破450MB/s。
三星在主控市场上很另类,它是目前唯一采用自家主控和闪存的厂商,它的主控也只在自家SSD产品上出现,但其市场份额足以让其他竞争者倍感压力。三星830系列SSD采用了三星新一代的S4LJ204X01主控芯片,该主控基于Cortex A9系列三核ARM处理器,能够更利索地同时执行多个指令。处理数据读写、垃圾回收和TRIM指令等繁琐工作时效率也更高。其连续读写速度分别能够达到520MB/s、400MB/s,十分强劲,但在随机4KB小文件写入速度上就较前面两款主控产品落后不少。
NAND闪存颗粒在写入数据时是以一个页面(通常是4KB)为单元,但在擦除数据时却是以块为单位。一般来说,一个块相当128个页面单元,即512KB。假如在X块中包含了A、B、C、D等几个页面单元,当需要擦除A页面单元中的数据时,SSD主控会读取整个X块的数据并写入缓存,然后分别擦除缓存中的A页面数据和NAND芯片中的X块,后将缓存中不包含A页面的X块数据重新写入SSD中(写入过程也称为编程)。也就是说,虽然擦除的只是A页面的数据,但B、C、D页面的数据也要重新擦除并写入。因此即便是只需要擦除4KB的数据,其实也要进行512KB的数据“搬运”工作。这个过程可以简单的概括为“读取→擦除→修改→写入”。听起来似乎没什么问题,但其实NAND闪存芯片的编程/擦除(P/E)周期次数是一定的。目前普遍使用的MLC闪存P/E周期为3000次左右,一些优质颗粒可以达到5000次,超过这个阈值闪存芯片就会报废。
所谓垃圾回收就是主控将闪存中所有的有效页面合并成一个新的块,并将旧的块擦除,以减少寻址负担并留出更多空闲的块。目前的垃圾回收机制包括主动和被动两种。前者就是在SSD闲置时运行垃圾回收机制,这样就不会占用额外的主控资源,但缺点是会对闪存产生额外的写入操作,这就是所谓的“写入放大”。被动垃圾回收则是在SSD读写数据的同时进行垃圾回收,此时会大量占用主控资源,因此会对性能产生影响。
了解了闪存擦写和垃圾回收原理之后我们就会知道,无论主动还是被动垃圾回收,都会对闪存的页和块进行频繁的擦写,对闪存寿命会有一定影响。如何将垃圾回收与磨损平衡算法相结合,达到性能与寿命兼顾的平衡,这是主控固件必须考虑的问题。
接下来我们将实际测试三种主流主控方案的典型产品,看看它们的垃圾回收运作效率,以及对SSD性能的影响。三款SSD容量均为128GB,采用IOMeter填充数据,Anvil SSD Benchmark进行性能评估。测试结果见表格。
SandForce SF-2281为了减少对NAND闪存的读写操作,因此并不会做主动垃圾回收,而是采用被动垃圾回收机制。这样做虽然可以减少NAND的损耗,但SSD被占用大部分存储空间之后,会频繁依靠被动垃圾回收技术来整理存储空间,从而出现性能的大幅度下降。从测试结果来看,SF-2281填充80%空间再闲置30分钟之后性能恢复也不够理想。TRIM后可以恢复近90%的性能,要想“满血复活”还是需要进行全盘重置。
Marvell主控更多采用主动和被动垃圾回收结合的策略,在SSD闲置时主控芯片就会在后台进行垃圾回收操作。从测试结果来看,88SS9187尽管在被动垃圾回收状态下性能下降幅度更大,但闲置30分钟后就基本上已经恢复了初始性能,TRIM与否影响已经不大,更不需要进行重置。不过在这种垃圾回收机制下,理论上采用Marvell主控的SSD使用寿命会稍逊于采用相同闪存颗粒的SandForce主控SSD,但目前对此并没有权威的对比和统计数据。
在NAND闪存里,写入4KB的页面数据,也需要搬运512KB的块数据。
三星S4LJ204X01主控的垃圾回收机制与Marvell主控类似,主动垃圾回收及全盘TRIM之后性能均可以恢复至95%以上,优于SandForce主控,但略低于Marvell。
从测试结果来看,显然Marvell 88SS9187主控可以称得上“佳环卫工”。在三款产品对比中无论空盘还是满盘性能表现都非常好。但实际使用中用户很少会将SSD填满80%以上,即使填满也几乎不会立即进行大量数据读写,并且厂商也都建议用户为SSD预留充足的空间,所以不论主控运作被动还是主动垃圾回收,对大部分用户都不会产生很明显的影响。不过SandForce主控的SSD性能无法自然恢复,除了Intel外几乎所有的厂商都没有提供官方重置工具,只能使用HDDErase这种用起来很麻烦的第三方工具。相比之下,三星和Marvell主控的SSD自动“满血复活”则让用户省了很多事。
此外,垃圾回收机制对于颗粒寿命虽然有一定的影响,但这绝对不是用户需要纠结的问题。从三款产品的对比测试来看,Marvell主控的垃圾回收对颗粒寿命影响似乎大,但实际上一些Marvell主控的SSD保修年限比SandForce方案的SSD更长,所以还需要结合闪存颗粒类型来综合考虑选择产品。