SSD学习笔记3-SSD controller

SSD(固态硬盘)控制器是SSD中负责管理数据存储和访问的关键组件。它的主要组成部分及其功能和原理如下:

1. 主处理器(Main Processor)

简介

  • 功能:这是SSD控制器的核心部分,负责执行固件代码,处理数据读写请求,并协调其他组件的工作。
  • 原理:通常基于ARM或RISC架构,主处理器执行固件中的代码来处理主机传来的命令,管理数据的读写和存储策略。

SSD主控技术

SSD在构成上类似一台结构简单的计算机,由主控芯片、闪存颗粒和缓存单元等组成,其关系如下:

SSD结构示意

很多SSD主控都使用Arm处理器架构,通常选择Cortex-R系列。除了Arm的R系列内核,也有选择其他处理器内核的,比如美国Synopsys公司的ARC处理器。还有部分SSD厂家采用RISC-v架构、MIPS架构等。

ARM-CORTEX-R5官网结构图
主控芯片的指令包括数据访问和硬件管理相关指令。虽然具体的指令集可能会根据处理器架构和制造商有所不同,但以下是一些常见的指令:

  1. 读写指令(Read/Write Commands)

    • 读数据(READ/R):从NAND闪存中读取数据到缓存或DRAM中。指令通常包含逻辑地址、数据长度等参数。
      • 原理:通过闪存接口从指定的物理地址读取数据,并将其传输到主机或缓存。
    • 写数据(WRITE/W):将数据从主机或缓存写入到NAND闪存中。
      • 原理:将数据写入指定的物理地址,并更新映射表。
  2. 擦除指令(Erase Command)

    • 擦除块(BLOCK ERASE/BE):擦除NAND闪存中的一个或多个块。
      • 原理:在写入新的数据之前,必须先擦除旧数据。这是由于NAND闪存的特性决定的。
  3. 地址转换指令(Address Translation Commands)

    • 逻辑地址到物理地址转换(L2P Translation/L2P):将主机提供的逻辑地址(LBA)转换为物理地址(PBA)。
      • 原理:查找映射表(通常存储在DRAM中),将逻辑地址映射到实际存储的数据块地址。
  4. 错误检测和纠正指令(Error Detection and Correction Commands)

    • ECC计算和校验(ECC Encode/ECCE/Decode/ECCD):计算数据的ECC校验码,或对读取的数据进行ECC校验和纠正。
      • 原理:通过特定的ECC算法(如BCH、LDPC)生成和校验数据的冗余信息,纠正错误。
  5. 垃圾回收指令(Garbage Collection Commands)

    • 触发垃圾回收(TRIGGER GC/GC):启动垃圾回收过程,整理和重新分配存储空间。
      • 原理:搬移有效数据到新的块中,并释放空闲空间,提高写入效率。
  6. 磨损均衡指令(Wear Leveling Commands)

    • 执行磨损均衡(PERFORM WEAR LEVELING):重新分配写入操作以均匀分布在所有存储块上。
      • 原理:记录每个块的擦写次数,优先将写入操作分配到使用较少的块,防止某些块过早损坏。
  7. 坏块管理指令(Bad Block Management Commands)

    • 标记坏块(MARK BAD BLOCK):将检测到的坏块标记为不可用。
      • 原理:在制造或使用过程中发现坏块时,将其标记并使用备用块进行替换。
  8. 数据缓存指令(Data Caching Commands)

    • 数据缓存(CACHE DATA):将数据缓存到DRAM或其他高速存储器中以加速读写操作。
      • 原理:临时存储频繁访问的数据,减少直接访问NAND闪存的次数,提高性能。
  9. 固件更新指令(Firmware Update Commands)

    • 更新固件(UPDATE FIRMWARE):将新的固件代码写入SSD控制器,以修复错误或提升性能。
      • 原理:安全地写入新的固件版本,并验证其完整性和正确性。
  10. 主机通信指令(Host Communication Commands)

    • 主机命令处理(HOST CMD PROCESSING):处理从主机系统传来的命令,如读取、写入、刷新缓存等。
      • 原理:根据协议(如SATA、NVMe)解析和执行主机发送的命令。

这些指令共同确保SSD控制器能够有效地管理数据存储和访问,实现高性能和高可靠性的存储解决方案。具体的指令集和实现细节可能会因控制器的架构和设计而有所不同。

2. 闪存接口(Flash Interface)

简介

  • 功能:连接SSD控制器和NAND闪存芯片,负责数据在控制器和闪存芯片之间的传输。
  • 原理:通过ONFI(Open NAND Flash Interface)或Toggle模式等协议,与多个NAND闪存通道进行并行数据传输,提高数据传输效率。

FTL(闪存转换层)

FTL完成主机(或者用户,Host)逻辑地址空间到闪存(Flash)物理地址空间的翻译(Translation),或者说映射(Mapping)。SSD每把一笔用户逻辑数据写入闪存地址空间,便记录下该逻辑地址到物理地址的映射关系。当主机想读取该数据时,SSD便会根据这个映射,从闪存读取这笔数据然后返回给用户。

FTL除了完成基本的地址映射,还需要处理垃圾回收(GC)、磨损平衡(Wear Leveling)、坏块管理、读干扰(ReadDisturb)处理、数据保持(Data Retention)处理等事情。随着闪存质量变差,FTL除了完成上述常规处理,还需要针对具体闪存特性,去做一些特殊处理以获得好的性能和高的可靠性。

在这里插入图片描述目前主流SSD都是Device Based FTL,Device Based表示的是,FTL是在Device(设备)端实现的,用的是SSD上的控制器和RAM资源,如图所示。

根据映射粒度的不同,FTL映射有基于块的映射,有基于页的映射,还有混合映射(Hybrid Mapping)。

块映射中,用户空间被划分成一个个逻辑区域(Region),每个区域和闪存块大小相同。以闪存的块为映射粒度,一个用户逻辑块可以映射到任意一个闪存物理块,但是映射前后,每个页在块中的偏移保持不变。由于映射表只需存储块的映射,因此存储映射表所需空间小,但其性能差,尤其是小尺寸数据的写入性能,因为块内部分页的读写只能通过读取或写入整个块来完成。U盘一般都是采用块映射。

块映射
页映射中,用户空间被划分成一个个的逻辑区域,每个区域和闪存页大小相同。以闪存的页为映射粒度,一个逻辑页可以映射到任意一个物理页中,因此每一个页都有一个对应的映射关系,如图4-4所示。由于闪存页远比闪存块多,因此需要更多的空间来存储映射表。但它的性能更好,尤其体现在随机写上面。为追求性能,SSD一般都采用页映射。

混合映射是块映射和页映射的结合。

混合映射

用户通过LBA(Logical Block Address,逻辑块地址)访问SSD,每个LBA代表着一个逻辑块,我们把用户访问SSD的基本单元称为逻辑页(Logical Page)。而在SSD内部,SSD主控是以闪存页为基本单元读写闪存的,我们称闪存页为物理页(Physical Page)。用户每写入一个数据页,SSD主控就会找一个物理页把用户数据写入,SSD内部同时记录了这样一条映射(Map)。有了这样一个映射关系后,下次用户需要读某个逻辑页时,SSD就知道从闪存的哪个位置把数据读取上来。

SSD内部维护了一张逻辑页到物理页地址转换的映射表(Map Table)。用户每写入一个逻辑页,就会产生一个新的映射关系,这个映射关系会加入(第一次写)或者更改(覆盖写)映射表。当读取某个逻辑页时,SSD首先查找映射表中该逻辑页对应的物理页,然后再访问闪存读取相应的用户数据。

由于闪存页和逻辑页大小不同,一般前者大于后者,所以实际上不会是一个逻辑页对应一个物理页,而是若干个逻辑页写在一个物理页中,逻辑页其实是和子物理页一一对应的。

对于绝大多数SSD,我们可以看到上面都有板载DRAM,其主要作用就是存储这张映射表,如图所示:

带DRAM的SSD架构
二级表就是L2P(Logical address To Physical address,逻辑地址到物理地址转换)表,它被分成一块一块(Region)的,大部分存储在闪存中,小部分缓存在RAM中。一级表则存储这些块在闪存中的物理地址,由于它不是很大,一般都可以完全放在RAM中。

SSD工作时,对带DRAM的SSD来说,只需要查找DRAM当中的映射表,获取到物理地址后访问闪存便会得到用户数据,这期间只需要访问一次闪存。而DRAM less的SSD,该过程中可能需要进行两次闪存读写,在某些情况下可能导致速度和带宽的降低。

HMB

射表除了可以放在板载DRAM、SRAM和闪存中,它还可以放到主机的内存中。NVME1.2(及后续版本)有个重要的功能就是HMB(Host Memory Buffer,主机高速缓冲存储器):主机在内存中专门划出一部分空间给SSD用,SSD可以把它当成自己的DRAM使用。

网融智存–基于Ethernet-SsD 网存算融合闪存固态硬盘的存储系统精简了NVME协议栈,从而更高效地完成数据的访问与处理

HMB功能允许主控像使用SSD上的DRAM一样使用主机DRAM。具体说来,就是主机在主存中专门划出一块内存给SSD使用,该内存在物理上可以不连续,SSD不仅可以用它来存放映射表,还可以用它来缓存用户数据,具体怎么用,取决于SSD设计者。

映射表刷新

映射表在SSD掉电前,是需要把它写入到闪存中去的。下次上电初始化时,需要把它从闪存中部分或全部加载到SSD的缓存(DRAM或者SRAM)中。随着SSD的写入,缓存中的映射表不断增加新的映射关系,为防止异常掉电导致这些新的映射关系丢失,SSD的固件不仅仅只在正常掉电前把这些映射关系刷新到闪存中去,而是在SSD运行过程中,按照一定策略把映射表写进闪存。这样,即使发生异常掉电,丢失的也只是一小部分映射关系,上电时可以较快地重建这些映射关系。

3. 错误纠正编码(ECC,Error Correction Code)模块

  • 功能:检测并纠正数据传输和存储过程中发生的错误。
  • 原理:常用的ECC算法包括BCH、LDPC等,通过冗余数据校验和纠错,提高数据的可靠性和耐久性。

4. 主机接口(Host Interface)

  • 功能:连接SSD和主机系统,处理主机与SSD之间的数据传输。
  • 原理:支持SATA、NVMe、PCIe等协议,决定了SSD与主机之间的通信速度和带宽。NVMe协议特别优化了SSD的并行处理能力,提高了性能。

5. 固件(Firmware)

  • 功能:控制SSD的所有操作,包括垃圾回收、磨损均衡、坏块管理等。
  • 原理:固件运行在主处理器上,执行复杂的算法和策略来优化SSD性能和寿命。例如,垃圾回收机制定期整理和重新分配存储空间,磨损均衡技术分散写入操作以延长NAND闪存的使用寿命。

这些组成部分共同工作,确保SSD能够高效、可靠地存储和读取数据。通过优化控制器的设计和固件算法,可以显著提高SSD的性能和耐久性。

参考资料:
1. SSD固态硬盘主控技术简介-中国电信天翼云-https://zhuanlan.zhihu.com/p/672276329
2. 《深入浅出SSD:固态存储核心技术、原理与实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值