Potpourri-02.Feb.2022

固态硬盘SSD的英文全称是Solid State Drive,它使用了闪存作为存储介质,取代了传统的机械硬盘HDD(Hard Disk Drive)的磁盘寻道方式,在诸多方面都有了显著的提升,是现在最流行的存储介质之一,本文简要介绍SSD的基本原理与相关的接口知识。

常用术语

  • Host Page

    主机页,主机在向存储设备发出读写请求时,以主机页为抽象单位,它和设备具体采用的存储介质无关,一般为512B的大小

  • Physical Page

    物理页,存储设备收到主机请求后,看待设备上存储介质的基本单位,单位之下的存储介质可能是磁盘扇区,也可能是闪存颗粒,一般与主机页大小对应

  • LBA:Logical Block Address

    逻辑块地址,主机在存储设备上寻址使用的抽象地址,它的地址空间往往是线性的

  • CHS:Cylinders-Heads-Sectors

    柱面-磁头-扇区地址,传统的HDD的控制器在内部寻址时,需要将LBA转换成这样的多维地址才能定位到物理页所在的扇区,#lba=(#c*H+#h)*S+#s-1,而SSD可能采用(block, page)这样更为简单的寻址方法

SSD基础知识

分类

SSD是将闪存作为主要存储介质的一种存储设备,按照闪存内部存储单元的不同分为四类:

  • SLC:Single-Level Cell
  • MLC:Multi-Level Cell
  • TLC:Trinary-Level Cell
  • QLC:Quad-Level Cell

由于闪存单元将信息用电信号的形式存放并用于读取,这四类分别代表一个存储单元内能存放几位信息,从1到4,能存放的信息增加,读写的时候需要调整的电位精度也逐渐严格,因而从上至下SSD的存储密度上升,价格低廉,但使用寿命和读写速度也会随之下降

厂商常会在SSD中加入更快的存储单元构成的小容量缓存,因而测试SSD时,不光要看初始速度,还要看大量读写缓存用完后的真实速度

硬件架构

部件简介

SSD设备上通常有以下部件:

  • Controller:控制SSD的读写、更新映射表、垃圾回收等
  • Memory:存放SSD的映射表等关键数据
  • NAND flash:
    • NAND闪存通常是SSD真正的存储介质,掉电后数据不丢失
    • 闪存从单元开始逐步封装,一般会封装至芯片的规模,在SSD上成为不同的channel,方便使用RAID0方式提高访存速度

闪存自底向上

常见的NAND架构是2D NAND,存储单元按照行(rows)与列(columns)的方式排列,同一行组成页(pages)被管理,不同的页组成块(block)进行擦除等操作,多个块再组成颗粒(die)(芯片封装前的晶粒),多个颗粒封装成为芯片(chip),芯片最后构成SSD设备(device)的存储介质

因此,在SSD的控制器上常采用(block, page)的方式对物理页寻址

映射表

  • 映射表在主机页写之后形成或修改,并可能在SSD的垃圾回收过程中改动,记录了主机页到物理页的映射

  • 映射表不需要很大:(SSD标识容量/物理页大小)*物理页地址位长即可

  • 映射表一般存放在SSD片上的DRAM中,读取主机页只需要访问一次闪存,如果存放在闪存中则需要访问两次,更慢一些

SSD运行原理

读写

  • 以页为单位

  • 读(Read):根据主机页查找映射表,寻址得到物理页,返回数据

  • 写(Write/Program):

    • 闪存不能覆写(overwrite),只能写空闲页,或者先擦除再写
    • 有空闲页时,根据主机页的数据,找到空闲物理页,写入数据,更新映射表,更新后可能产生无效页,后续被垃圾回收
    • 没空闲页时,先进行垃圾回收得到空闲页再写

擦除与垃圾回收

  • 擦除(Erase)以块为单位
  • 擦除时,确认块上没有仍被映射表映射的有效页(valid page),然后将一整块上的数据擦除
  • 如果空闲页过少就要进行垃圾回收,将多个块上的有效页集中到一块,然后将这几块分别擦除
  • 厂商设计一定的OP(over-provisioning)率,标识容量<实际容量,让宏观的垃圾回收花费更少

使用寿命

  • SSD的使用寿命常用擦写数P/E(Program/Erase Count)作为参数进行衡量

  • 为了提高寿命,SSD具有磨损平衡(Wear Leveling,WL)机制

    • 动态:每次擦写时优先选择擦写次数少的单元
    • 静态:SSD闲置时将数据从擦写次数多的块搬运到擦写次数少的块

    中心思想是让擦写次数均衡

SSD装机

SSD作为外设,需要安装到主机正确的接口上,通过支持正确协议的总线通道来使用

考虑影响SSD性能的因素,除了上一节中,颗粒、OP率等SSD设备自身的指标,还有使用的总线通道与协议决定的瓶颈速率

常用接口与协议

引用胡老师的一句名言:硬件进行连接,软件解决访问,研究接口的过程中,也既要关注硬件连接,又要关注实际采用的总线和协议

在SSD应用的领域,则有如下常用的总线、协议与接口:

总线

  • SATA:1.0,2.0,3.0
  • PCI-E(PCI Express):
    • Gen 2,Gen 3,Gen 4
    • 应用广泛,先有PCI-E后有SSD

协议

  • AHCI:两类总线均可使用
  • NVMEPCI-E总线可用

硬件接口

  • 走SATA总线:
    • SATA:历史悠久
    • SAS:SATA改进,加入SCSI,稳定安全
    • SATA Express:并行加速,昙花一现
    • mSATA:微机接口
    • M.2 B Key:微机接口,笔记本电脑常见,特别地,支持PCI-E X2总线
  • 走PCI-E总线:
    • PCIE
      • 同一Gen下,接口硬件长度对应最大带宽,用X1X2等标识
      • 实际最大带宽要看是直连CPU还是经过南桥
      • 可以连PCI-E转M.2等转接设备,增强泛用性
    • M.2 M Key:采用NVME协议,理论上向下兼容B Key
    • U.2:和SAS同形,但采用PCI-E总线,NVME协议

选取与安装

不仅是SSD,研究外设采用的协议和接口,安装合适的设备,可以找到一种泛用的方法,就是研究主板motherboard的规格书与手册。通常配置的主机设备,都是在主板(通常采用ATX等主板规格)的基础上安装CPU、直接通讯设备与各种外设

对于PC而言,主板上通常有如下组件:

  • 内置通用外设:网卡、声卡等

  • 芯片组:北桥、南桥

    • 北桥负责同内存、GPU等高速设备通信,和南桥、CPU通信,近几年功能逐渐被整合进CPU中,在主板上消失
    • 南桥负责同硬盘、键盘等低速设备通信,和北桥通信,由于北桥消失而整合剩余功能变成PCH(Platform Controller Hub)
  • 各种接口:SATA3.0PCI-E X16

  • 各种布线:总线通道等

  • 其他部件:散热片、马甲板等

在定制设备的过程中,通过选用合适的主板可以节省已经内置的外设。由于同一种接口有时可以对接不同的设备(如PCI-E接口可以对接SSD、GPU乃至高速网卡),因此可以灵活变通。对于一种设备,弄清它安装的接口(尺寸)与数据的通道,并查阅主板的手册进行印证即可

特别地,主板规格一般和CPU特定的芯片组对应,例如,Intel Z370 Chipset这一芯片组就兼容intel的8代和9代的很多CPU,主板厂商也会在支持的主板型号中加上Z370的名称,在官网查找文档即可相互匹配

参考教程

SSD 闪存颗粒详解

SSD Firmware Development — Part2 — NAND Basics

SSD Firmware Development — Part 3 — Addressing

谈一谈不同固态硬盘颗粒(SLC,MLC,TLC,QLC)的区别

Overview of SSD Structure and Basic Working Principle(2)

逻辑区块地址

Understanding SSD Over-provisioning (OP)

Intel® Z370 Chipset

主板上的南北桥是什么东西?

PCI-E通道是个什么东西?他是干啥的?

SSD接口详解,再也不会买错固态硬盘了

Understanding SSD Technology: NVMe, SATA, M.2