Skip to main content

33 SSD硬盘

SSD 的读写原理

SLC、MLC、TLC 和 QLC

SLC 颗粒:给电容里面充上电有电压的时候就是 1,给电容放电里面没有电就是 0。全称 Single-Level Cell,即一个存储单元中只有一位数据。

同样的面积,能够存放的元器件有限。存储容量小,价格高。

MLC(Multi-Level Cell)、TLC(Triple-Level Cell)以及 QLC(Quad-Level Cell):能在一个电容里面存下 2 个、3 个乃至 4 个比特。

4 个比特一共可以从 0000-1111 表示 16 个不同的数。往电容里面充电的时候充上 15 个不同的电压,并且电压计能够区分出这 15 个不同的电压,电容被放空代表的 0,代表从 0000-1111 这样 4 个比特。

充电和读取的时候,对于精度的要求越高,导致充电和读取更慢。

P/E 擦写问题

FTL

闪存转换层(Flash-Translation Layer)

实际 I/O 设备

SSD 的读取和写入的基本单位,不是一个比特(bit)或者一个字节(byte),而是一个页(Page)。SSD 的擦除单位不能按照比特或者字节或页来擦除,必须按照块来擦除。

SSD 读写的生命周期

白色:页从来没有写入过数据

绿色:写入的是有效的数据

红色:数据在系统看来已经是删除的

预留空间(Over Provisioning)

磨损均衡、TRIM 和写入放大效应

FTL 和磨损均衡

磨损均衡(Wear-Leveling):让 SSD 硬盘各个块的擦除次数,均匀分摊到各个块上。

TRIM 指令的支持

操作系统对于文件的删除,SSD 硬盘不知道。为了磨损均衡搬运已经删除的数据,产生不必要的数据读写和擦除。

TRIM 命令在文件被删除的时候,让操作系统通知 SSD 硬盘对应的逻辑块已经标记成已删除。

写入放大

写入新数据时可能没有足够的空白,需要进行垃圾回收,合并一些块里面的页再擦除掉一些页。在后台定时进行垃圾回收,在硬盘比较空闲的时候,把搬运数据、擦除数据、留出空白的块的工作做完。