SSD系统架构
SSD系统由一块CPU主控,可以是ARM或者RISC-v;
整个主控芯片分为三个部分,分别是主机接口控制器,缓存控制器和闪存控制器,它可以分为前端和后端,前端就是主机接口控制器和主机之间的通信,用于获取主机的命令并且从主机获取数据;后端就是闪存控制器和闪存之间的通信,主要是做主机数据的逻辑地址和闪存的物理地址的地址映射,并且将数据写入闪存之中。其中还有一个缓存区(DRAM/SRSM)这也是一个可易失的存储,这个缓存区由缓存控制器控制,从主机来的数据会暂时存入缓存中,知道数据量达到存储标准才会进行后端的操作。接下来分别介绍:
DMA(Direct Memory Access)
这个可以理解为封装好的固件,作用是传输数据,只需要CPU发指令就能执行,无需占用CPU;又可以分为前端DMA和后端DMA,前端DMA一般在SATA/PCIe这些接口上;后端DMA一般在flash上。
前端
前端做的是将数据从主机接口控制器,通过接口(SATA/PCIe/USB3.2 这里的接口可以按需更换)--前端DMA 传输到SSD内部的缓存/寄存器,这个过程主要是数据的传输,速度很快(纳秒级别),影响这个速度的因素是接口的带宽 (PCIe4.0×4 比单个PCIe4.0快)和时钟频率。
逻辑层
在逻辑层中主要实现的是FTL算法,FTL过程包括逻辑地址和物理地址的映射,垃圾回收,磨损均衡,坏块处理等;
后端
后端主要做的有ECC纠错,后端DMA 过程,通过这些过程将缓存中的数据比较稳定的写入到闪存之中,这个处理过程是需要时间的,除此之外,影响SSD性能的瓶颈也是在这一块,有一个叫做**Flash编程时间(微秒级别)**的性质;
ECC纠错(BCH/LDBC)
闪存是把电子关进"浮栅极"来存储0和1的,这个过程中很有可能会发生"位翻转"的产生错误,对此,加入ECC纠错是必要的。
ECC纠错思想:在存数据的时候,附带一段"校验信息",这段校验信息是根据需要传输的数据信息计算出来的,也就是编码过程;然后带着校验信息的数据传输之后,对数据据根据算法进行解码,只需要比较和存进去的校验码是否匹配既可完成ECC检错;纠错:如果发生错误,通过矩阵运算能够计算出准确位置bit翻转了,然后把它翻转回来。
在缓存区------>闪存单元这一块,主控的 ARM CPU 运行 FTL 算法,决定数据该写到哪个 Die 的哪个页。随后,后端 DMA 接管,将这数据从主控缓冲区,通过闪存通道,搬运到目标闪存颗粒内部的页寄存器中。
Plane(平面):
Plane是Die下面的单元,一般一Die有4个Plane,每一个Plane都配备专属的页寄存器,页寄存器中存着来自于缓存区的数据(中转站)。
页寄存器:
页寄存器是在flash颗粒内部,连接主控缓存区和内部存储阵列(浮栅极)的结构,在每一个闪存Die中,通常每个Plane都会配备一个页寄存器。
Flash编程时间( tPROG**)**
是在flash中完成操作的 ,这是一个物理的过程(给浮栅晶体管充放电的过程,),速度收到材料的影响;为了尽可能使前端到后端的传输过程比较顺利(SSD不卡顿),就必须想方设法让多个Die并发干活;这要接触到几个专业的名词
Die(晶粒) 闪存上的一个最小物理独立单元,一颗Die里面包含成千上万个块和页,以及自己的控制逻辑,可以把它理解为一个流水线工人,同一时刻只能执行一个操作(例如对数据读or写or擦除),所以在向闪存写入数据的过程,为了提升速度,可以根据要求使用多个Die实现并发的数据写入。
CE(Chip Enable,片选信号) CE是闪存控制器引出的一根片选控制线,它的作用是激活/选中特定的闪存Die,让这个Die准备写入主控的指令和数据;主控和每一个Die之间都有一个专属CE线(这个是已经封装好的)
缓存
什么是缓存,为什么要存在缓存区:
缓存本质上是一个物理的储存DRAM/SRAM(易失性),它会和CPU一样焊接在主控板上,相当于是另一个挂载的临时存储;这个缓存区的作用如下:
1.前端读写速度和后端读写速度不一致,前端更快,后端(闪存编程时间)更慢,缓存区起到临时存储数据的作用;
2.在数据写入闪存的过程中需要做FTL,ECC等算法,也需要计算时间。
