固态硬盘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 CellMLC
:Multi-Level CellTLC
:Trinary-Level CellQLC
: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.0PCI-E
(PCI Express):- Gen 2,Gen 3,Gen 4
- 应用广泛,先有PCI-E后有SSD
协议
AHCI
:两类总线均可使用NVME
:PCI-E
总线可用
硬件接口
- 走SATA总线:
SATA
:历史悠久SAS
:SATA改进,加入SCSI,稳定安全SATA Express
:并行加速,昙花一现mSATA
:微机接口M.2 B Key
:微机接口,笔记本电脑常见,特别地,支持PCI-E X2
总线
- 走PCI-E总线:
PCIE
- 同一Gen下,接口硬件长度对应最大带宽,用
X1
、X2
等标识 - 实际最大带宽要看是直连CPU还是经过南桥
- 可以连PCI-E转M.2等转接设备,增强泛用性
- 同一Gen下,接口硬件长度对应最大带宽,用
M.2 M Key
:采用NVME协议,理论上向下兼容B KeyU.2
:和SAS同形,但采用PCI-E总线,NVME协议
选取与安装
不仅是SSD,研究外设采用的协议和接口,安装合适的设备,可以找到一种泛用的方法,就是研究主板motherboard
的规格书与手册。通常配置的主机设备,都是在主板(通常采用ATX
等主板规格)的基础上安装CPU、直接通讯设备与各种外设
对于PC而言,主板上通常有如下组件:
内置通用外设:网卡、声卡等
芯片组:北桥、南桥
- 北桥负责同内存、GPU等高速设备通信,和南桥、CPU通信,近几年功能逐渐被整合进CPU中,在主板上消失
- 南桥负责同硬盘、键盘等低速设备通信,和北桥通信,由于北桥消失而整合剩余功能变成
PCH
(Platform Controller Hub)
各种接口:
SATA3.0
、PCI-E X16
等各种布线:总线通道等
其他部件:散热片、马甲板等
在定制设备的过程中,通过选用合适的主板可以节省已经内置的外设。由于同一种接口有时可以对接不同的设备(如PCI-E接口可以对接SSD、GPU乃至高速网卡),因此可以灵活变通。对于一种设备,弄清它安装的接口(尺寸)与数据的通道,并查阅主板的手册进行印证即可
特别地,主板规格一般和CPU特定的芯片组对应,例如,Intel Z370 Chipset
这一芯片组就兼容intel的8代和9代的很多CPU,主板厂商也会在支持的主板型号中加上Z370
的名称,在官网查找文档即可相互匹配
参考教程
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)