SSD Firmware 开发

SSD firmware开发分为前端,中端,后端。

前端:主要负责和Host打交道,主要需要考虑和host的联系方式(PCIe协议,NVMe协议 etc).

中端:属于SSD的核心部分,因为SSD的大部分卖点就得靠这里,比如说性能,中端的磨损均衡算法,垃圾回收等算法起到了决定性的作用。

后端:主要和真正的存储介质打交道,比如说NAND。

SSD 固件中涉及的一些算法:

SSD的固件是确保SSD性能的最重要组件,用于驱动控制器。主控将使用SSD中固件算法中的控制程序,去执行自动信号处理,耗损平衡,错误校正码(ECC)及坏块管理、垃圾回收算法GC、FTL算法、trim算法等等。

二、固件主要算法简介

1、磨损平衡写入算法:

SSD需要一个非常完善的平衡写入算法,让所有的颗粒都均衡消耗,不至于导致有一部分颗粒写入寿命耗尽,而其它颗粒未使用的情况。

SSD拥有磨损平衡算法,大致分为动态和静态两种。

动态的算法就是当写入新数据的时候,会自动往比较新的Block中去写,老的闪存就放在一旁歇歇。

它们都加入对Trim指令的支持。这可以让操作系统在删除逻辑表中删除逻辑扇区地址的同时通知固态硬盘某些数据已经无用了。

而静态的算法就更先进,就算没有数据写入,SSD监测到某些闪存Block比较老,会自动进行数据分配,让比较老的闪存Block承担不需要写数据的储存任务,同时让较新的闪存Block腾出空间,平日的数据读写就在比较新的Block中进行。如此一来,各个Block的寿命损耗,就都差不多了。

2、错误校正码ECC及坏块管理算法:

ECC是一种用于差错检测和修正的算法。NAND闪存在生产和使用中都会产生坏块,BBM就是坏块的管理机制。

而要有效管理坏块的首要前提,就是有可靠的坏块检测手段,ECC的能力也影响到NAND闪存的寿命和数据保存期。

3、FTL算法:

把SSD的架构虚拟成HDD的算法,叫做“FTL”。

NAND Flash是固态硬盘的基本存储单元,主要用来存储数据,相当于机械硬盘的磁盘。

SSD由闪存构成,没有盘片,也就没有扇区,这就得靠一些算法来进行转换了。

FTL算法是由SSD主控提供的,比操作系统更加底层。FTL作为一个软件中间层,可以把SSD基于Page的硬件架构映射成HDD基于扇区的硬件架构。

操作系统为SSD建立文件系统的时候,有了FTL,操作系统看到的SSD和HDD是完全相同的,就可以用传统的方法对SSD进行分区、格式化等操作。

利用FTL软件算法,SSD才能顺利接替HDD,没它SSD就无法识别。

4、垃圾回收算法GC:

SSD内部都有垃圾回收机制。功能与磁盘整理功能相当,但算法不同。

首先介绍一下SSD的页面管理机制,即闪存的硬件架构。

在固态硬盘闪存内,数据存储一般按页(Page)为最小单位存储的(典型的为4KB),而128个页组成了一个块(block),数据可以以4KB大小的页来读取和写入,但却只能以512KB(128页)的块大小来删除。

SSD Firmware 开发_第1张图片

                         SSD中的1页=4KB,1块=128页

垃圾回收的基本原理是把几个Block中的有效数据集中搬到一个新的Block上面去,然后再把这几个Block擦除掉,这样就产生了新的可用Block了。

垃圾回收相当于固态硬盘的碎片整理功能,这是固态硬盘自身固件软件自动运行回收,不需要人工操作。

垃圾回收的功能是将所有Block中的有效Page合并到一个新的Block中,并将旧的Block进行擦除,这样做的好处一方面减少寻址负担,另一方面留出更多的空闲Block。所以垃圾回收对固态硬盘的性能和寿命都起到至关重要的作用。

SSD Firmware 开发_第2张图片

       SSD固态硬盘固件垃圾回收原理图

5、Trim算法:对无用的页进行标记,这个指令本身并不去删除无用的块。它协助垃圾回收,减少删除次数,提高了垃圾回收效率。

这个trim指令是win 7以上操作系统默认开启的,不需人工开启,也不需人工去操作这条指令,固件软件会自动运行这条指令的。

对支持TRIM的系统,在用户写入数据时并没有什么不同。但是当用户删除文件的时候,因为系统支持了TRIM指令,固态硬盘立刻就把数据标记为“无用”。

垃圾回收算法等待到所有Block中的有效Page(标记为无用的页,就不会搬动了)合并到一个新的Block中,剩下的是无用的页,最后统一将旧的Block擦除干净。这样做减少了闪存删除数据的次数,节约了时间。

简言之,就是对无效数据所在的整个块,先把这块内有效数据集中起来,转移到空闲的块中,然后把“已搬迁的块连同无效数据”整个擦除。

SSD读写是按1页为单位进行的,但整理擦除是按128页即一块为单位进行的。

SSD 需要考虑的问题:

OP空间选择:OP空间的大小直接关联成本和写放大,OP大则写放大小成本高,OP空间小则写放大大成本低,需要找到一个均衡点;

NAND空间的组织管理:如何组织所有空间,粒度是多大;如果划分用户空间和firmware运行使用空间;

Raid机制:需要N个lun划分一组,来做raid,从而达到数据保护的目的。

Wear leveling(磨损均衡):如何让写入数据均匀分布,如何避免某些块被擦除次数太多;

FTL管理:如何存储FTL,FTL是否有并发访问,如何控制;

GC策略:主动回收还是被动触发回收,选择何种回收策略以及写放大可以降低到多少。

background task:为应对NAND存储失效特性,需要定期扫描重新写入某些数据,如何安排这个工作。

你可能感兴趣的:(SSD Firmware 开发)