赞
踩
SSD主要由两大模块构成——主控和闪存介质
。其实除了上述两大模块外,可选的还有缓存单元。主控是SSD的大脑,承担着指挥、运算和协调的作用,具体表现在
可以说,一款主控芯片的好坏直接决定了SSD的性能、寿命和可靠性
SSD作为数据存储设备,其实是一种典型的(System on Chip)单机系统,有主控CPU、RAM、操作加速器、总线、数据编码译码
等模块,见图2-1,操作对象为协议、数据命令、介质,操作目的是写入和读取用户数据
图2-1 SSD主控模块硬件图 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
图2-1所示仅是一个SSD系统架构的概略图,这款主控采用ARM CPU,主要分为前端和后端
两大部分。前端(Host Interface Controller,主机接口控制器)跟主机打交道,接口可以是SATA、PCIe、SAS等。后端(Flash Controller,闪存控制器)跟闪存打交道并完成数据编解码和ECC。除此之外还有缓冲(Buffer)、DRAM
。模块之间通过AXI高速和APB低速总线互联互通,完成信息和数据的通信。在此基础之上,由SSD固件开发者构筑固件(Firmware)统一完成SSD产品所需要的功能,调度各个硬件模块,完成数据从主机端到闪存端的写入和读取
主机接口:与主机进行通信(数据交互)的标准协议接口
,当前主要代表为SATA、SAS和PCIe等。表2-1所示是三者的接口速率
表2-1 SATA、SAS、PCIe接口速率 表格来源于《深入浅出SSD:固态存储核心技术、原理与实战》
SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件),是一种基于行业标准的串行硬件驱动器接口,如图2-2所示
图2-2 SATA接口 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度,并通过缩短连接线改善内部空间等,如图2-3所示
图2-3 SAS接口 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,主要优势就是数据传输速率高,目前最高的4.0版本可达到2GB/s(单向单通道速率),如图2-4和2-5所示
图2-4 PCIe接口式插卡(AIC) 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
图2-5 U.2接口 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
前端是负责主机和SSD设备通信的接口,命令和数据传输通过前端总线流向或流出SSD设备
俗称物理层
,接收串行比特数据流,转化成数字信号给前端后续模块处理。这些模块处理NVMe/SATA/SAS命令,它们接收并处理一条条命令和数据信息,涉及数据搬移会使用到DMA。一般命令信息会排队放到队列中,数据会放到SRAM快速介质中。如果涉及加密和压缩功能,前端会有相应的硬件模块来做处理,若软件无法应对压缩和加密的快速需求,则会成为性能的瓶颈
图2-6 SAT A Write FPDMA命令协议处理步骤 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
SSD接收命令和数据并放到SSD内部缓冲区之后,前端固件模块还需要对命令进行解析,并分派任务给中端FTL。命令解析(Command Decoder)将命令FIS解析成固件和FTL(Flash Translation Layer)能理解的元素:
当命令解析完成后,放入命令队列里等待中端FTL排队去处理。由于已经有了起始LBA和数据长度两大主要信息元素,FTL可以准确地映射LBA空间到闪存的物理空间。至此,前端硬件和固件模块完成了它应该完成的任务
SSD控制器SoC模块和其他嵌入式系统SoC模块并没有什么本质的不同,一般由一颗或多颗CPU核组成,同时片上有I-RAM、D-RAM、PLL、IO、UART、高低速总线等外围电路模块。CPU负责运算、系统调度,IO完成必要的输入输出,总线连接前后端模块
通常所说的固件就运行在CPU核上,分别有代码存储区I-RAM和数据存储区D-RAM。如果是多核CPU,需要注意的是软件可以是对称多处理(SMP)和非对称多处理(AMP)。对称多处理多核共享OS和同一份执行代码,非对称多处理是多核分别执行不同代码。前者多核共享一份I-RAM和D-RAM,资源共享;后者每核对应一份I-RAM和D-RAM,每核独立运行,没有内存抢占导致代码速度执行变慢的问题。当SSD的CPU要求计算能力更高时,除增加核数和单核CPU频率外,AMP的设计方式更加适应计算和任务独立的要求,消除了代码和数据资源抢占导致执行速度过慢的问题
固件根据CPU的核数进行设计,充分发挥多核CPU的计算能力是固件设计考虑的一方面。另外,固件会考虑任务划分,会将任务分别加载到不同CPU上执行,在达到并行处理的同时让所有CPU有着合理且均衡的负载,不至于有的CPU忙死有的CPU闲死,这是固件架构设计要考虑的重要内容,目标是让SSD输出最大的读写性能
SSD的CPU外围模块包括UART、GPIO、JTAG,这些都是程序必不可少的调试端口,另外还有定时器模块Timer及其他内部模块,比如DMA、温度传感器、Power regulator模块等
后端两大模块分别为ECC模块和闪存控制器,如图2-7
图2-7 SSD中的ECC模块和闪存控制器 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
ECC模块是数据编解码单元,由于闪存存储天生存在误码率,为了数据的正确性,在数据写入操作时应给原数据加入ECC校验保护,这是一个编码过程。读取数据时,同样需要通过解码来检错和纠错,如果错误的比特数超过ECC纠错能力,数据会以“不可纠错”的形式上传给主机。这里的ECC编码和解码的过程就是由ECC模块单元来完成的。SSD内的ECC算法主要有BCH和LDPC,其中LDPC正逐渐成为主流
闪存控制器使用符合闪存ONFI、Toggle标准的闪存命令,负责管理数据从缓存到闪存的读取和写入
从单个闪存角度看,一个Die/LUN是一个闪存命令执行的基本单元,闪存控制器和闪存连接引脚按照如下操作,如图2-8
图2-8 闪存芯片接口 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
从闪存控制器角度看,为了性能需求需要并发多个闪存Die/LUN,通常配置有多个通道(channel)。一个通道挂多少个闪存Die/LUN,取决于SSD容量和性能需求,Die/LUN个数越多,并发的个数越多,性能越好
Die/LUN是闪存通信的最小基本管理单元,配有上述的一套总线,即8个I/O口,5个使能信号(ALE、CLE、WE#、RE#、CE#),1个状态引脚(R/B#),1个写保护引脚(WP#)
如果一个通道上挂了多个闪存Die/LUN,每个Die共用每个通道上的一套总线,闪存控制器通过选通信号CE#识别和哪个Die通信。在闪存控制器给特定地址的闪存Die发读写命令和数据前,先选通对应Die的CE#信号,然后进行读写命令和数据的发送。一个通道上可以有多个CE,SSD主控一般设计为4~8个,对于容量而言选择有一定的灵活度
SSD主控是一个技术深度和市场广度都很大的芯片产品
Marvell在高端SoC设计上处于领先地位,Marvell通过复杂的SoC架构、领先的纠错机制、接口技术、低功耗等多项优势建立起领先竞争对手的技术壁垒
三星的主控基本上都是三星自己的SSD在用,830系列使用是MCX主控,而840及840Pro使用的则是MDX主控,850Pro/840EVO用的是MEX主控,850EVO 500GB以下的和750EVO用的是MGX主控,650用的是MFX主控
本节以国产主控厂商硅格的SATA3.2SSD主控SG9081为例,剖析一下主控如何实现高性能。图2-14为SG9081主控的结构框图
图2-14 SG9081主控的结构框图 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
HAM是硬件加速模块的简称,SSD主控中除了MCU以外,还有一个硬件加速模块HAM。该模块将部分算法处理的动作硬件化,一方面释放了MCU的资源,另外一个方面则加速了算法的实现,尤其是对小数据的处理。另外,主控中集成了GoCache(SiliconGo独有技术),可高效地实现映射关系的管理,从而更高效地提高对小数据的传输能力。两者的结合实现了SSD成品模组性能的提升
DMAC是Direct Memory Access Controller的缩写。该模块的存在使得SSD在进行连续大数据传输的时候,不用一直占据MCU的资源。当DMA请求被发起时,内部总线裁决逻辑将交由DMAC控制,接着数据高速传输动作开启。传输过程中,MCU可以去处理其他的事务,而当数据传输结束之后,DMAC又会将总线让给MCU。在这样的机制保证下,SSD进行读写操作时的效率极大地提高,从而表现出优秀的顺序读写性能
目前闪存正从2D转向3D架构,对闪存纠错处理的要求也越来越高,早期的BCH已经无法满足先进制程或先进工艺的闪存。SG9081主控采用LDPC实现ECC,LDPC码在相同的用户数据条件下,与BCH校验码相比能纠正更多的错误,同时也增强了闪存的使用寿命。而RAID功能的引进则给数据保护加上了一个双保险。主控中的RAID功能可以理解为给数据做了一层校验保护,必要的时候可以通过校验的内容恢复为原始数据。LDPC和RAID功能大大地提高了数据的稳定性
SSD有企业级与消费级之分。企业级SSD产品更加注重随机性能、延迟、IO QoS的保证及稳定性;而消费级产品则更加注重顺序性能、功耗、价格等,如表2-3所示
表2-3 企业级和消费级SSD对比 表格来源于《深入浅出SSD:固态存储核心技术、原理与实战》
是否有一款归一化的SSD控制器,能同时满足企业级和消费级需求?主要的问题在于能否在控制器硬件架构上实现成本、功耗和功能的统一
从上面几点不难看出,在企业级与消费级SSD设计指标趋于一致的趋势下,硬件规格实现统一是极有可能的。而SSD产品形态的差异化则由SSD控制器上的固件体现。忆芯科技的STAR1000芯片在设计中对此做了比较成功的尝试,如图2-15所示
图2-15 STAR1000关键技术 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
NVMe协议面向现代多核计算系统结构设计,充分发挥NVM介质高并发及低延迟的特性,为实现高吞吐量、低延迟的存储设备打下了良好的生态基础。DERA Storage遵循协议标准,面向企业计算市场,开发提供高性能、高可靠的NVMe SSD解决方案
控制器是NVMe SSD的核心部件,是连接主机总线和闪存单元的桥梁。本质上,一个NVMe SSD设备内部需要处理高并发的大量IO事务,每个IO事务都伴随多种硬件操作和事件处理,其中一些功能特性需要结合计算密集型的操作,比如用于数据错误检测的编解码,或者数据加密、解密,在完成这些处理的同时还要满足苛刻的功耗要求,因此不可避免地需要使用专用的硬件加速单元。综合考虑,NVMe SSD控制器一般是紧密结合NAND闪存管理软件进行高度定制化设计的ASIC(专用集成电路)。只有将数据通路、计算资源都经过合理安排调配,最终实现的NVMe SSD才能在可靠性、性能、功耗几个方面实现良好统一的目标
DERA NVMe控制器是DERA NVMe SSD产品的核心部件,TAI是DERA的第一款控制器,如图2-16。DERA TAI前端支持PCIe Gen3x8或x4接口,集成多个NAND接口通道和高强度ECC硬件编解码单元,所有数据通道均运用ECC和CRC多重硬件保护机制。在TAI控制器基础上,紧密协同设计的闪存转换层(FTL)算法负责调度管理,综合运用多种技术实现企业级的数据存储可靠性,充分发挥NAND闪存的高速存取特点,实现高可靠、低延时、高吞吐量的数据存储要求
图2-16 DERA TAI控制器 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
闪存ECC是SSD的核心功能。为了处理新结构、新工艺节点下闪存芯片的高原始误码率,以及满足高并发访问时的低延迟要求,DERA TAI控制器为每个闪存通道都配备了独立的ECC单元,纠错能力为100b/1KB,满足主流闪存器件对主控纠错能力的要求,即在复杂度、面积和功耗、解码延迟时间确定性和可控性等多个方面达到了良好的均衡。此外,DERA TAI对完整数据通道的ECC保护和CRC校验,也在不影响性能的前提下为数据可靠性提供了进一步的基础保障
DERA SSD提供完备的硬件手段持续监测供电情况,并在供电异常时触发保护策略,自动切换到后备电容或其他不间断电源供电,在整体的软件策略上予以充分配合,在发生意外掉电时最大限度保证用户数据的完整性
图2-17所示是一个标准的XtremIO全闪存阵列,含有两个X-Brick,之间用Infiniband互联。可以看出,X-Brick是核心
图2-17 XtremIO全闪存阵列结构 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
一个X-Brick包括:
如图2-18所示,存储控制器其实就是个Intel服务器,配有2个电源,看起来是NUMA架构的2个独立CPU、2个Infiniband控制器、2个SAS HBA卡。Intel E5CPU,每个CPU配有256GB内存
图2-18 存储控制器机箱内部 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
如图2-19所示,其后面插有各种线缆,看着感觉乱糟糟的,如图2-19所示。设计的架构适用于集群,所以线缆有很多是冗余的
图2-19 X-Brick背面连线图 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
阵列正面照,LCD显示的是UPS电源状态。图2-20所示是一个个竖着的就是SSD阵列
图2-20 Xtrem-IO全闪存阵列正面照片 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
如表2-5所示,一个X-Brick容量是10TB,可用容量7.5TB,但是考虑到数据去重和压缩大概为5∶1的比例,最终可用容量为37.5TB
表2-5 XtremIO配置表 表格来源于《深入浅出SSD:固态存储核心技术、原理与实战》
EMC XtremIO是EMC对全闪存阵列市场的突袭,它从底层开始完全根据闪存特性设计。如图2-23所示,1个X-Brick包含2个存储控制器,一个装了25个SSD的DAE,还有2个电池备用电源(Battery Backup Unit,BBU)。每个X-Brick包含25个400GB的SSD,原始容量10TB,使用的是高端的eMLC闪存,一般擦写寿命比普通的MLC长一个数量级。如果只买一个X-Brick,配有两个BBU,其中一个是为了冗余。如果继续增加X-Brick,那么其他的X-Brick只需要一个BBU
图2-23 X-Brick尺寸 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
存储行业发展到今天,硬件越来越标准化,所以已经很难靠硬件出彩了。若能够制造存储芯片,例如三星这种模式,从底层开始都自己做,则可靠巨大的出货量坐收硬件的利润
如图2-28所示,XIO的全闪存阵列软件架构,XIO OS和XIO的软件都运行在Linux的用户态。Linux系统分为内核态和用户态,我们的应用程序都在用户态运行,各种硬件接口等系统资源都通过内核态管理,用户态通过system call访问内核资源。XIO软件运行在用户态有几大优点:
图2-28 XIO软件架构 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
在每个CPU上运行着一个XIOS程序:X-ENV,如果敲一下“top”命令,就会发现这个程序掌控所有的CPU和内存资源
XIO是完全脱离了硬件的软件,而且,XIO的硬件基本没有自己特殊的组件,不包含FPGA,没有自己开发的芯片、SSD卡、固件等,用的都是标准件。这样做的好处是可以使用最新、最强大的X86硬件,还有最新的互联技术,比如比Infiniband更快的技术
XIO软件分为6个模块,以实现复杂的功能,其中包括三个数据模块R、C、D,三个控制模块P、M、L
读流程如下:
不重复的写流程如下,见图2-29:
图2-29 不重复的写流程 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
可去重的写流程如下,见图2-30:
图2-30 可去重的写流程 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
ESXi内嵌在操作系统中,所以ESXi可以看成是虚拟机平台,上面运行着很多虚拟机
VAAI(vStorage APIs for Array Integration)是虚拟化领域的标准语言之一,其实就是ESXi等发送命令的协议
图2-31所示是复制前的数据状态,复制流程见图2-32,如下:
图2-31 复制前的数据状态 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
图2-32 复制流程 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
R和上层打交道,C是中间层,D和底层SSD打交道,1个X-Brick的控制服务器有2个CPU,每个CPU运行一个XIOS软件。如图2-33所示,R、C模块运行在一个CPU上,D则运行在另一个CPU上
图2-33 X-Brick内部互联图 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
因为Intel Sandy Bridge CPU集成了PCIe控制器(Sandy Bridge企业版CPU集成了PCIe 3.0接口,不需要通过南桥转接)。所以,在多CPU的架构中,让设备直连CPU的PCIe接口,性能就会很高,而R、C、D的分布也是按照这个需求来设计的。例如SAS转接卡插到了CPU 2的PCIe插槽上,所以D模块就要运行在CPU 2上,这样性能才能达到最优。从这里,我们又可以看出XIO的架构上的优点,就是软件完全可以按照标准化硬件来配置,通过布局达到最优的性能。如果CPU的分布变化了,也会根据新的架构简单调整软件分布来提升性能
模块间如何通信?其实并不要求模块必须在同一个CPU上,就像图2-33所示一样,R和C并不一定要在一个CPU上才行。所有模块之间的通信通过Infiniband实现,数据通路使用RDMA,控制通路通过RPC实现。XIO的IO总共延时是600~700μs,其中Infiniband只占了7~16μs。使用Infiniband来互联的优点是为了扩展性,X-Brick即使增加,延迟也不会增加,因为通信路径没变化。任意两个模块之间还是通过Infiniband通信,如果系统里面有很多R、C、D模块,当一个4KB数据块发到一个前端R模块上,它会计算Hash值,Hash会随机落在任意一个C上,没有谁特殊。这样一切都是线性的,X-Brick的增减会线性地导致性能增减
支撑巨大数据网络的根基是IT基础设施,主要包括网络、计算和存储三大部分。如图2-34所示,IT基础架构的功能就跟加工贸易差不多,网络是数据的搬运工,计算是数据的加工商,存储就是数据的窝。自从有了固态硬盘之后,存储就不是事儿了,最新的PCIe 3.0x8SSD,读写带宽能达到4GB/s以上!一方面存储进步快,而另一方面CPU又受摩尔定律失效限制,工艺进展缓慢,所以,计算成了瓶颈,尤其是在图像和视频处理、深度学习等方面。海量数据能够从PCIe SSD高速读写,但就是CPU处理不过来
图2-34 IT基础架构 图片来源于《深入浅出SSD:固态存储核心技术、原理与实战》
带FPGA的SSD——CFS(Computing Flash System,计算闪存系统)。它采用PCIe 3.0x8高速接口,性能可达5GB/s。SSD提供高速数据存储,FPGA能提供计算加速,这样数据从SSD出来就由FPGA顺带算好,释放了CPU。一切回归原位,CPU做控制,FPGA做计算,SSD做存储
它的优势主要体现在海量数据高速存储和人工智能计算方面。想一想就会有很多场景,比如无人驾驶汽车,目前一般的无人驾驶汽车配备了毫米波雷达、激光雷达、高速摄像头等各类传感器。每秒会产生1GB数据,要分析这么多数据需要强大的计算能力。很多无人驾驶汽车还在使用GPU进行计算。目前市场上在卖的一个CPU+GPU计算盒,功耗能达到5000W,对于汽车来说,这个小火罐的散热会带来很大的安全风险,同时也很耗电。但是,如果换用了FPGA方案,功耗就可以降下来,根据无人驾驶的应用场景对算法进行优化之后,计算性能也能满足需求。例如,奥迪公司的无人驾驶汽车就采用了FPGA计算平台。这些传感器产生的数据目前都是丢掉,非常可惜,未来商用之后,不管是政府还是厂商都有存储宝贵的行驶数据并备份到云端的需求。这些数据对于完善无人驾驶、分析车祸现场都非常有用。要保存这些数据,只有PCIe SSD才能达到1GB/s以上的写速度。所以,FPGA SSD一方面能够快速存储行驶数据,一方面又可以提供FPGA进行数据分析,完美满足无人驾驶的计算与存储需求
自从人工智能开始新一轮的热潮之后,很多公司都开始用FPGA做人工智能计算,用了CFS,就可以直接用FPGA里的人工智能硬件算法对SSD内部的海量数据进行高速分析,最后把分析结果发送给主机
致谢《深入浅出SSD:固态存储核心技术、原理与实战》
希望本文对大家有帮助,上文若有不妥之处,欢迎指正
分享决定高度,学习拉开差距
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。