zoukankan      html  css  js  c++  java
  • 全面理解SSD和NAND Flash

      Flash Memory又叫做闪存,是一种非易失性存储器。非易失性是指断电之后数据不会丢失,这里就涉及到断电保护(后面详细讲解)。

    总体思路

    1、前言:HDD和SSD的比较引出Flash。

    2、Flash的分类:NAND Flash和NOR Flash。

    3、NAND Flash规则介绍。

    4、SSD固件(Firmware,FW)包括:映射表(Mapping Table)、垃圾回收(Garbage Collection)、磨损平衡(Wear Leveling,WL)等。

    5、补充概念:写入放大(Write Application)、预留空间(Over Provisioning)、Flash寿命(Program/Erase Count,P/E)等。

    6、断电保护机制。 

    7、对SSD的评价标准:稳定性、性能、寿命。

    1、前言

    (1)HDD

      HDD是指机械硬盘,是传统普通的硬盘。

      介质:采用磁性碟片来存储。

      包括:盘片、磁头、磁盘旋转轴及控制电机、磁头控制器、数据转接器、接口、缓存。

    机械式硬盘最大速率约为100MB/s,由于容易发热等原因已经无法再进一步提升速度,所以引入了固态硬盘

    (2)SSD

      SSD(Solid State Drives)是固态硬盘。

      介质:采用闪存颗粒来存储。

      包括:控制单元、存储单元(DRAM芯片/FLASH芯片)。

    (3)性能&外观区别

      HDD是机械式寻找数据,所以防震远低于SSD,数据寻找时间也远低于SSD。SSD(左图)和HDD(右图)的模样区别如下:

    (图片来自百度)

    2、Flash的分类

      Flash又分NAND Flash和NOR Flash,NOR型存储内容以编码为主,其功能多与运算相关;NAND型主要功能是存储资料,如数码相机中所用的记忆卡。

      现在大部分的SSD都是用来存储不易丢失的资料,所以SSD存储单元会选择NAND Flash芯片。这里我们讲的就是SSD中的NAND Flash芯片。

    (1)Nor Flash:主要用来执行片上程序

      优点:具有很好的读写性能和随机访问性能,因此它先得到广泛的应用;

      缺点:单片容量较小且写入速度较慢,决定了其应用范围较窄。

    (2)NAND Flash:主要用在大容量存储场合

      优点:优秀的读写性能、较大的存储容量和性价比,因此在大容量存储领域得到了广泛的应用;

      缺点:不具备随机访问性能。

    3、NAND Flash的规则

    (1)Flash都不支持覆盖,即写入操作只能在空或已擦除的单元内进行。

      更改数据时,将整页拷贝到缓存(Cache)中修改对应页,再把更改后的数据挪到新的页中保存,将原来位置的页标记为无效页;

      指定在已有无效数据的位置写入时,需要先擦除无效页才能在该位置写入新数据。

     

    (2)以page为单位写入,以Block为单位擦除;擦除Block前需要先对里面的有效页进行搬迁。

    (3)每个Block都有擦除次数限制(有寿命),擦除次数过多会成为坏块(bad block)。

     4、SSD固件内容

    (1)映射表 Mapping Table

      逻辑地址:用户程序中使用的相对地址;

      物理地址:实际存储单元的绝对地址;

      所以,映射表里面存储的内容是逻辑地址到物理地址的映射信息,利用逻辑地址查询映射表,找到对应的物理地址,再对实际存储单元做读写访问。

      SSD内部就维护了一张映射表;一般SSD内部会板载DRAM,用于存储程序运行的临时数据,断电会丢失;映射表存放在SDRAM中(方便快速访问),同时NAND Flash中会存储几份映射表(防止断电后映射关系丢失),而且会定期对NAND Flash中的映射便进行更新。

    (2)垃圾回收 Garbage Collection

      垃圾回收就是把几个Block中的有效数据集中搬移到新的Block上去, 然后再把这几个Block擦除掉。

      垃圾回收机制有很多,都是根据不同的侧重点提出的,所以没有最优的算法,就像伴侣一样只有适不适合之说。如:Greedy算法,每次选择包含最少有效页的Block来回收,也就是对垃圾的贪心,每次尽可能回收最多的垃圾。还有Cost-Benefit算法(考虑Block的擦除次数)、Cat回收算法、CICL算法等。

    另外有两种回收策略:

    • 被动回收策略:当有写入请求的时候,首先判断当前可用空间大小与临界值大小的比较;如果空间足够,直接写入空闲空间;如果空间不够了,首先启用垃圾回收,再往空闲区域完成写入请求。
      • 不足之处:当空间不够的时候写请求会被延迟。
    • 主动回收策略:通过固件设定周期性任务,定时检查可用空间大小,如果需要就执行垃圾回收。
      • 巧妙之处:利用空闲时间提前进行垃圾回收,避免对请求造成不必要的延时。
      • 不足之处:倘若系统一直没有空闲时间,垃圾回收依旧无法有效执行。

    (3)磨损平衡 Wear Leveling

      每个Block都是有寿命(Program/Erase Count,P/E值)的,他们的擦除次数是有限的。NAND Flash的寿命类似“木桶原理”,取决于所有Block中的最小寿命。如果拼命对某一块进行擦除,NAND Flash的寿命将会被缩减到最小。所以引入了磨损平衡,平衡所有Block的擦除次数。

      有很多不同的磨损平衡机制,大体可以分为两大类:动态WL、静态WL。

    • 动态WL:使用Block进行擦写时,优先挑选P/E值低的Block。
    • 静态WL:把P/E值低的Block中的数据挪到P/E值高的Block中存放。

    5、补充概念

    (1)写入放大 Write Application

    • 写放大原理

      写入放大倍数 = 闪存写入数据量 / 主控写入数据量 = 实际写入数据量 / 要求写入数据量

      例如,现在有一个写入一页的请求;即主控写入数据量为1;

     

      然而这个一页请求触发了垃圾回收,当前的写请求会被延迟,直到垃圾回收完毕后再执行写入操作;

      如果垃圾回收只挪了5页有效数据,那么实际的写入量应该为6页(1页写请求,5页挪动);即闪存写入数据量为6;

      所以写放大为6/1 = 6。

      理想的写放大为1,但是Sandforce的数据写入时会进行压缩写入,最优情况下,写放大可以为0.5,打破了Intel的“写放大不可能小于1”之说。

    • 压缩写入

      三大好处:减少待存储数量,节约存储空间;减小待存储数据翻转可能性,增加NAND Flash的寿命和减少能耗;获得较小NAND Flash的写放大,提高读写速度。

      压缩写入方法又分为有损压缩和无损压缩。

      有损压缩:存在信息丢失,无法100%的保存原始信息。

      无损压缩:不允许精度损失,能100%恢复原始信息;无损压缩的压缩和解码复杂度较高,往往会大大的降低了NAND Flash的读写速度上的优势。

      现如今,数据压缩编码算法还不够强大,所以大部分厂家都不会采用压缩写入。Sandforce除外。

    (2)预留空间 Over Provisioning

    • OP介绍

      通过垃圾回收的过程,不难知道,垃圾回收的前提是要提供空闲区域来拷贝,如果连空闲区域都没有,垃圾回收将无法执行,这时将不再支持任何数据的写入。为了避免这种情况的发生,提出了预留空间。

      预留空间不仅仅只是用来保证垃圾回收的正常完成,还存储着SSD内部的系统数据(包括:出厂坏块信息、SSD固件、Mapping Table等)。

      所以如果说明存储大小为256GB,实际上的存储空间可能只有238GB(一般预留空间为7%)。

      另外,OP越大,垃圾回收就会越快,相应写放大会变小,所以读写性能就会越好;但用户能使用的空间会被缩小。

    • OP与SA区别

      Over Provisioning(OP,预留空间)不仅仅只是用来保证垃圾回收的正常完成,还存储着SSD内部的系统数据(包括:出厂坏块信息、SSD固件、Mapping Table等)。是基于SSD的概念。

      Spare Area(SA区)一般用来标记坏块,和保存对main区数据的ECC校验码。是基于NAND Flash中一个Block的概念。

      

    (3)Flash寿命 Program/Erase Count

      前面也已经提及到了,每个Block都是有擦除次数限制的,所以引入了寿命这个说法。

    6、断电保护机制

      为了提升读写性能,通常使用SDRAM做缓存,如果在读写过程中遭遇异常掉电,SDRAM中的数据可能来不及写进Nand Flash导致数据丢失,或者更新的映射表来不及写进Nand Flash导致映射表丢失。

      中控里板载的SDRAM是易失性存储器,断电之后数据会丢失,这个时候SDRAM中的数据主要包括:用户数据、映射表;

      如果没有断电保护机制,再次上电时,先去NAND Flash中找上次更新时的映射表,这时拿到的信息并不是最新的,是上次更新NAND Flash中映射表时的数据信息,所以发生了大部分数据丢失。

      因此SSD板上会加上钽电容或者超级电容,当检测到非法断电时,首先停止数据操作,钽电容或超级电容开始放电,以保证SDRAM中的数据能够写入到NAND Flash中。

      至于是用钽电容还是超级电容,得看具体要保护的数据量;不是电容的容量越大越好,因为只要电容开始放电,就要等待它的电放完之后才可以进行其他操作。假如电容容量过大,用户只是点了个电脑重启,这时候SSD的电容会开始放电,放电还没完成的时候,电脑已经重新上电,这时无法认盘。所以电容电量应该选最时候的。

      基于SDRAM中的内容,断电保护机制主要分为3种:

    (1)保存SDRAM中所有数据

      再次上电后,相当于断电前的操作被中断,重新上电后就可立马进入待命状态。

    (2)只保存SDRAM中的用户数据

      再次上电后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,再将保存的用户数据提取出来,两者结合更新映射信息,更新完之后才进入待命状态。

    (3)只保存SDRAM中的映射表

      再次上电后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,只是丢掉了用户断电前正在操作的数据,无法更新。

    7、SSD的评价标准

    (1)稳定性:SSD是否稳定,最大的影响因素是垃圾回收机制的选择,恰当的垃圾回收可以提供稳定的读写速率;例如主动垃圾回收机制,在空闲的时候做垃圾回收,读写速度不会因为延时而波动不定。

    (2)性能:预留空间的大小主要决定了SSD的性能,OP大,垃圾回收快,相应写放大小,读写性能就越好。

    (3)寿命:所有Block的P/E值越趋近于均衡,SSD的寿命就越趋近于最佳。

  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/Christal-R/p/7230304.html
Copyright © 2011-2022 走看看