SSD虽小,但五脏六腑都全

2023-11-02 18:11
文章标签 ssd 五脏六腑 虽小

本文主要是介绍SSD虽小,但五脏六腑都全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载:全面理解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的寿命就越趋近于最佳。

这篇关于SSD虽小,但五脏六腑都全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332375

相关文章

树莓派 4 使用 WiFi 从 SSD Headless 启动

树莓派 4 使用 WiFi 从 SSD Headless 启动 树莓派已经默认支持从 SSD 启动,可以根据官方提供的工具初始化树莓派系统并启动;尝试通过安装 Ubuntu Server,不使用网线、显示器、键盘等,从 SSD 直接启动 依赖 树莓派 4MacSSD 安装 Ubuntu Server 1. 安装 Raspberry Pi Imager Raspberry Pi Imag

E1.S接口如何解决SSD过热问题?

针对SSD接口标准,目前业内有两大组织: PCI-SIG:这个就是定义pcie协议标准的那个组织,我们常见的传统接口M.2, U.2, 2.5英寸的接口都归这个组织定义规范。M.2,U.2起源与客户端,也是企业级当前最常用的接口形式。 SNIA:这个组织主要定义EDSFF接口标准。包括了E1.S、E1.L、E3.S、E3.L 在存储领域,M.2固态硬盘支持NVME/P

RTX3060Ti + Intel Wi-fi 6 AX201 + 512G SSD 2T HD 台式机 双系统 Ubuntu 16.04 安装 + Qt catkin cmake 开发环境部署

目录 Ubuntu 16.04系统安装: RTX3060Ti显卡驱动安装: 其他软件环境的安装: 无线网卡驱动安装: 升级内核: Qt 的安装 catkin安装: CMake安装: Git安装: SVN安装: 搜狗输入法的安装: Ubuntu 16.04系统安装: Ubuntu 16.04系统盘制作就先不多说了,后续有时间的时候再详细补充 具体可参考:Ubunt

faster RCNN/YOLO/SSD算法的比较

只要是做过物体检测(object detection)的人,都会对这三种算法比较熟悉,起码听说过。那么这三种算法各自有什么特点呢?为什么他们不能相互取代?接下来我们将慢慢分析。 RCNN系列 SSD YOLO系列 faster RCNN 这个算法是一个系列,是RBG大神最初从RCNN发展而来,RCNN->fast RCNN->faster RCNN,那么简单的介绍下前两种算法。 首先R

SSD深度解析:MLC颗粒和TLC颗粒到底有多大差别?

计算机技术发展到今天,CPU和内存性能早已不是性能瓶颈,但是硬盘依然是电脑常见瓶颈! 固态硬盘的出现极大的改善机械硬盘的存储效率,但是因为固态硬盘还处于行业发展初期,所以成本很高,为了解决成本高的难题,厂商推出了很多改进方法,通过技术研发“偷工减料”降低成本不失为一种好方法! 闪存颗粒最早只有SLC技术颗粒;为了降低成本,厂商研发出了MLC颗粒;为了进一步降低成本,厂商研发出了TLC颗

【SSD】pytorch版本的SSD训练

调试的代码源码:https://github.com/amdegroot/ssd.pytorch 环境: python3.7cuda10.0cudnn7pytorch1.2.0torchvision0.4.0 问题1 使用的是VOC,没有COCO数据,那么就需要将COCO的部分注释掉,如果不注释就会报错。 解决方法 将train.py中的COCO的部分直接注释掉,修改如下 #

SSD Fresh:固态硬盘优化专家

在追求高性能计算体验的今天,固态硬盘(SSD)已成为提升系统响应速度的关键组件。然而,如何有效延长SSD的使用寿命,同时保持其最佳性能,是许多技术爱好者和专业人士面临的问题。今天,电脑天空为大家介绍一款专业的固态硬盘优化工具——SSD Fresh。 功能亮点 全面维护:提供SSD状态的实时预览和维护建议。性能分析:动态分析SSD性能,帮助用户了解当前状态。深度优化:通过一系列优化措施,提升

SSD: Single Shot MultiBox Detector解读

此SSD非彼SSD,不过都有一个特点快,我之前读过了这篇,这次算是重温,而且前面介绍了很多检测网络,尤其是FPN时更是对SSD有一个很根本的解读,所以这篇博客算是一个SSD精华介绍,哈哈。 贡献和特点 SSD最大的贡献,就是在多个feature map上进行预测,这点我在上一篇FPN也说过它的好处,可以适应更多的scale。第二个是用小的卷积进行分类回归,区别于YOLO及其faster

西部数据考虑拆分NAND和SSD业务:潜在价值或与Solidigm相当,市场估值有望超400亿美元

据EETimes中国和Blocks & Files报道,西部数据(Western Digital,简称WD)正考虑将其NAND闪存和固态硬盘(SSD)业务剥离,这一业务的价值可能会与Solidigm相似。 据报道,WD计划将其业务拆分为两个独立的部门:一个专注于生产硬盘驱动器(HDD),另一个则专注于NAND闪存和SSD。此举旨在提高各业务单元的运营效率,让它们能够专注于各自的核心优势,并最终实

如何在OS中获得SSD的寿命耐久度

这里还是以DELL的机器为例,通常DELL的服务器带有的磁盘会有显示SSD耐久度,当然也不排除SSD更新太快,有部分SSD无法在戴尔的服务器上查看到SSD的耐久度,但实际上本身只要是SSD肯定还是可以有方法查看SSD的耐久度,可以通过OS的方式进行查看,以RHEL7.9为例 首先我们需要下载安装DELL的PERCCLI的阵列卡工具,该工具可以很好的查看DELL服务器上的阵列卡对应的信息,如阵列卡