一、PCIe-SSD架构解析
PCIe作为CPU的局部总线,最大的特点在于数据传输吞吐量大和延迟低。对于NandFlash固态存储而言,传统磁盘存储领域存在的随机读写问题将不复存在,因此,整个存储系统的瓶颈从存储介质转移到了传输接口上来了。为存储而生的SATA/SAS接口在SSD上的表现不是那么理想了,非常影响IO的传输延迟。为此,显而易见,存储接口应该从传统的SATA/SAS往离CPU更近的系统总线PCIe或者DIMM方向发展。
大家其实很早就认识到了这一点,当年Fusion-io推出基于PCIe的闪存卡时,让整个业界为此眼前一亮,原来闪存也可以这么玩?为此,Fusion-io在前几年都一直非常的红火。NandFlash本身不是一个新东西,基于NandFlash的存储在电子设计领域,以及移动存储领域早就开始应用了。但是,将NandFlash作为数据中心的存储介质、在消费电子领域替代磁盘,也就发展了没有多少年。作为磁盘存储的第二选择,很多芯片厂商提供了基于SATA、SAS接口的NandFlash控制器,例如Marvell、LSI都有类似的芯片。
但是,为了能够充分利用NandFlash存储介质的特性,SATA、SAS接口本身就是一个性能瓶颈点。这两年基于PCIe接口的SSD存储一直在蓬勃发展,由于整个行业处于军阀混战的年代,nvme标准还没有充分的得到落实,所以,这方面的接口控制器也就五花八门,个具特色。
在市场早期,很多厂商为了能够快速进入市场,利用现有技术很快构建出了PCIe接口的闪存卡。典型的产品如上图所示,这是一款Oracle(SUN)的PCIe Flash卡,采用4个Marvell闪存控制器的SATA闪存模块,通过LSISAS1068E控制器连接到PCIe总线上。这种结构将已经成熟的HBA控制器和基于SATA/SAS接口的NandFlash控制器技术结合了起来,具体如下所示:
从技术的角度来看,采用这种方案显然引入了延迟,中间多了一层SATA/SAS接口的转换。所以,这种卡的性能往往会比Fusion-IO的性能要差。原因在于Fusion-IO没有采用这种简单的技术堆叠,而是采用FPGA自己做了一个基于PCIe的NandFlash控制器。采用这种技术方案的结构如下图所示:
上述方案最大的好处是降低了IO延迟,去除了无谓的SAS/SATA接口层,使NandFlash直接连到了PCI总线上。这种直接基于PCI总线的技术方案也被称之为Native PCIe方案,并且已经成为各个厂商公认的未来闪存存储的技术路线之一。所以,从芯片厂商的角度出发,急需需要研制基于PCI接口的闪存控制器,替代现有的接口转换方式。
如今以Intel为首的Nvme标准如火如荼的推进,并且慢慢的被各大厂商接受。一旦Nvme标准大范围的应用,基于该标准的控制器将会大量涌现,到那时,基于PCI总线的闪存存储将会和现在的SATA/SAS存储一样,成为应用主流。有时候在想,Fusion-IO为什么当年没有和Intel进行合作?或者为什么Fusion-IO没有自己来推动闪存控制器的变革,让更多的厂商一起加入到这个游戏圈中来?从短期来看,Fusion-IO的产品有很大的价值,但是,从长期来看,更大的价值在于控制器、基于Nandflash存储软件的标准化。Flash存储的市场空间巨大,标准化会是大势所趋。虽然Fusion-IO发展很早,但是,没有赶上标准化的快车,因此,标准化的集团军会对Fusion-IO进行围剿,从而导致Fusion-IO发展困难。
不管怎么样,总体看一下基于PCIe的闪存架构,有些PCIe Flash厂商直接采用FPGA自定义闪存控制器;有些PCIe Flash厂商采用现有SATA/SAS闪存模块结合HBA控制器;有些PCIe Flash厂商直接采用最新的PCIe闪存控制器。个人认为第三种方案是未来的趋势,虽然,目前能够提供这种Native PCIe闪存控制器的厂商不多,但是,最近几年此类芯片将会被大量研发,并且符合Nvme标准的控制器将会成为发展趋势。下面对目前市场上出现的几款Native PCIe闪存控制器进行介绍。
二、Marvell PCIe闪存控制器
Marvell可以说是第一个(2012年初)推出PCIe闪存控制器的厂商。该闪存控制器可以支持4通道NandFlash芯片,并且可以外扩DRAM,内置ARM处理器。看起来,这款控制器的能力不是很强,管理的NandFlash数量有限。在个人电脑领域,基于这款控制器的存储卡可以替代现有SSD盘。但是,如何利用这款芯片构建存储容量更大的PCIe卡呢?
其实,采用一个PCI桥就可以将多个基于Marvell控制器的Flash模块组合在一起,从而形成一块容量巨大的PCIe存储卡。Marvell控制器88NV9145内部结构和PCIe卡结构如下图所示:
通常可以采用8个存储模块来构建一个PCIe板卡,每个存储模块采用Marvell控制器管理4个闪存芯片,然后通过一个PCIe switch将所有闪存模块连接起来。采用该方案实现的板卡如下图所示:
这种方案的优点是去除了SATA/SAS转换接口,将NandFlash连接到了PCIe总线上。缺点是Marvell的控制器管理能力有限,存储容量将会很受限制。另外,这种方案还增加一层PCIe总线。在控制器模式下,Marvell控制器能够提供的性能为9.3万随机读的IOPS和7万随机写IOPS。
另一个问题需要讨论的是FTL在何处实现?从理论上来讲,FTL可以在Marvell的控制器内部实现。但是,该控制器内部的只提供了一个ARM处理器和ECC校验引擎,处理能力似乎有限。因此,个人认为,采用该控制实现的Flash卡,FTL在host端实现最佳。在Host端的驱动程序中实现FTL,可以对板卡上的存储模块统一管理,从数据冗余角度来看,数据会更加安全,另外,FTL所管理的资源块也会更多,优化空间更大。
三、LSI PCIe闪存控制器
2013年年底的时候,LSI收购Sandforce,获得了闪存控制器芯片。收购后不久推出了Native PCIe控制器SF3700系列。该控制器的内部结构如下图所示:
和Marvell闪存控制器相比,LSI控制器显得更加的高端、大气、上档次。该芯片不仅可以支持传统的SATA接口,而且可以支持PCIe接口。因此如下图所示,采用该系列控制器,可以实现SATA或者PCIe SSD盘。特别在一些笔记本电脑中,可以直接采用PCIe接口的存储卡替代SATA-SSD盘。在企业存储领域,可以采用该芯片实现Native PCIe存储卡。
LSI控制器内部分成三大部分:第一部分是SATA/PCIe接口,包括一个前端处理器,实现PCIe和SATA数据传输的功能;第二部分是SSD控制器的核心,解决NandFlash的写放大、数据映射、数据加密以及垃圾回收(Garbage collection)功能;第三部分后端NandFlash控制器,包含一个后端处理器。该控制器内部的数据压缩算法可以减少NandFlash数据写入量,提高使用寿命。另外,其内部还提供了RAISE(Redundant Array of Independent Silicon Elements)技术,通过该技术增强数据可靠性。RAISE技术类似于RAID,因此会降低空间使用率,每个NandFlash芯片内部都会预留一些资源块作为数据冗余空间。另外,在单个NandFlash芯片内部采用了Shield错误纠正技术,该技术采用了LDPC(Low-Density Parity Check)编解码方式。Shield技术有意思的地方是自适应动态编解码。在正常情况下,采用少量的ECC码,当NandFlash内部的出错达到一定情况后,增加ECC冗余度。增加冗余度之后,IO延迟将会增大。所以,Shield技术是一种性能和可靠性的动态平衡技术。
LSI闪存控制器在性能表现方面也不错,其公布的数据如下:
四、PMC闪存控制器
2013年中旬的时候PMC收购IDT公司的闪存控制器部门。使得PMC开始进攻闪存控制器市场。IDT公司推出的闪存控制器是业界第一款符合Nvme标准的PCIe闪存控制器。基于该控制器研制的PCIe闪存卡如下图所示:
通过IDT的控制器89HF32P08可以将Nand Flash芯片直接接入PCIe总线。和Marvell、LSI的控制器不同,PMC(IDT)的控制器显得更加强悍,其可以管理很多NandFlash芯片颗粒,即单芯片最多可以支持32通道NandFlash芯片。PMC的这款芯片主要的特点如下:
1,可订制的固件程序(Firmware)
2,支持SLC、MLC闪存芯片
3,支持第三代PCIe接口
4,标准的NVM Express控制接口
5,支持XTS-AES-256加密算法
6,防止电源故障、突然断电情况下的数据丢失或者损坏
7,数据完整性和可靠性:ECC数据纠错、闪存通道间RAID保护、端到端的数据保护
采用该控制器可以构建基于PCIe的存储卡和PCIe设备。一个Demo卡演示如下:
和LSI和Marvell的控制器相比,PMC的控制器很具竞争力。
五、总结
基于PCIe总线的闪存控制器是Flash存储的关键器件,也是未来的发展方向。个人认为基于Nvme标准的PCIe闪存控制器会是市场主力。