第1章 SSD综述
SSD 发展史:http://www.storagesearch.com/chartingtheriseofssds.html
# 第一章 SSD 综述
# 1.概述、组成、介质类型
SSD(Solid State Drive)固态硬盘,以半导体闪存(NAND Flash)为主要存储介质的存储设备。
主要由:主控,内存,缓存芯片 DRAM(可选,有些 SSD 上可能只有 SRAM,并没有配置 DRAM),PCB(电源芯片,电阻,电容等),接口(SATA,SAS,PCIe等)。主体就是一块 PCB。
SSD 控制器、闪存和固件是 SSD 的三大技术核心。
存储介质:
光学存储介质:DVD,CD等光盘介质,靠光驱等主机读取或写入。
磁性存储介质:HDD。
半导体芯片存储介质:SSD。主要方向还是:闪存,3DX Point,MRAM,RRAM等。
生产闪存的知名企业:Micron(美光)、Samsung(三星)、SK Hynix(现代海力士)、Toshiba(东芝)、WD(西数--公司是西部数据,产品闪存叫西数)、Sandisk(闪迪)
# 2. SSD 和 HHD 的对比
# 2.1结构对比
- 传统的 HDD 是“马达+磁头+磁盘”的机械结构
- SSD 则变成了“闪存介质+主控”的半导体存储芯片结构
- 两者有完全不同的数据存储介质和读写方式。
SSD 和 HDD 结构的对比,如图所示。
# 2.2物理结构对比
再看一下 SSD 和 HDD 物理结构的不同,如图所示。
# 2.3性能对比
SSD 相对 HDD 的优势
- 性能好:能超过几倍甚至几百倍,特别是在随机读写上。
- 功耗低:HDD 为6~8W,SATA SSD 为5W,待机时 SSD 可以降到(mW)级别。
- 抗震防摔:SSD 内部没有机械部件,而 HDD 磁头和磁片发送碰撞,会产生物理损坏。
- 无噪音:因为 SSD 不需要 HDD 的马达。
- 小巧:HDD 一般 3.5/2.5 寸。SSD 除此之外还有可以贴在主板的M.2,甚至 16mm*30mm 的芯片级别。
# 2.4 功耗对比
- 首先,读写功耗主要集中在闪存上,其中 16KB 闪存页的读写功耗对整体平均读写功耗起决定性作用。
- 其次,主控功耗占总功耗的约20%,受主控 CPU 频率和个数、后端通道数量、数据 ECC 编码器/解码器个数等因素影响。
- 最后,功耗的科学比较方法是 Power/IOPS,即单位 IOPS 性能上的功耗输出,此值越低越好。
由于SSD极高的性能,相对于HDD而言,相当于单位功耗产生出了百倍的性能,所以SSD被称为高性能、低功耗的节能产品,符合数据中心(Data Center)的使用定位。
# 3. 固态存储及 SSD 技术发展史
# 3.1 昂贵的 RAM SSD 时代
RAM 的优点:
- 可以随机寻址(即每次只读写一个字节的数据),速度快
RAM 的缺点:
- 掉电数据就没了,价格昂贵
# 3.2 机械硬盘(HDD)称霸世界
1988年费尔和格林贝格尔发现了巨磁阻效应,这个革命性的技术使得 HDD 容量变得很大,HDD进入千家万户。可以看出,从2010年开始,HDD出货量一直在下滑(2014年有小的反弹)。
# 3.3 闪存 -- 源于华人科学家的发明
1967年,贝尔实验室的韩裔科学家姜大元和华裔科学家施敏一起发明了浮栅晶体管(Floating Gate Transistor),这是现在 SSD 基础——闪存的技术来源。
MOS 管相比 MOSFET 就多了个 Floating Gate,悬浮在中间,所以叫浮栅。它被高阻抗的材料包裹,和上下绝缘,能够保存电荷,而电荷通过量子隧道效应进入浮栅。
下图是:浮栅晶体管结构
# 3.4 SSD 基本工作原理
- 从主机 PC 端开始,用户从操作系统应用层面对 SSD 发出请求
- 文件系统将读写请求经驱动转化为相应的符合协议的读写和其他命令
- SSD 收到命令执行相应操作,然后输出结果,每个命令的输入和输出经协议标准组织标准化,这是标准的东西,和 HDD 无异,只不过 HDD 替换成 SSD 硬件存储数据,访问的对象变成 SSD。
- SSD 的输入是命令(Command),输出是数据(Data)和命令状态(Command Status)。SSD 前端(Front End)接收用户命令请求,经过内部计算和处理逻辑,输出用户所需要的数据或状态。
从上图可以看出,SSD 主要有三大功能模块组成:
- 前端接口和相关的协议模块;
- 中间的 FTL 层(Flash Translation Layer)模块;
- 后端和闪存通信模块。
SSD 前端负责和主机直接通信,接收主机发来的命令和相关数据,命令经 SSD 处理后,最终交由前端返回命令状态或数据给主机。SSD 通过诸如 SATA、SAS 和 PCIe 等接口与主机相连,实现对应的 ATA、SCSI 和 NVMe 等协议,如下表所示。
接口 | 协议命令 | 主机控制器接口 | 标准组织 |
---|---|---|---|
SATA | ATA/SATA命令集 | AHCI(Advanced Host Controller Interface) | ATA_IO |
SAS | SCSI命令集 | SCSI | T10 of INCITS |
PCIe | NVMe命令集 | NVMe | PCIExpress/NVMe Express |
# 3.4.1 SSD 进行读写示例,以写为例:
- 主机通过接口发送写命令给 SSD,SSD 接收到该命令后执行,并接收主机要写入的数据。
- 数据一般会先缓存在SSD内部的RAM中,FTL会为每个逻辑数据块分配一个闪存地址,当数据凑到一定数量后,FTL便会发送写闪存请求给后端,
- 然后后端根据写请求,把缓存中的数据写到对应的闪存空间。
由于闪存不能覆盖写,闪存块需擦除才能写入。主机发来的某个数据块,它不是写在闪存固定位置,SSD可以为其分配任何可能的闪存空间写入。因此,SSD内部需要FTL这样一个东西,完成逻辑数据块到闪存物理空间的转换或者映射。
举个例子,假设 SSD 容量为 128GB,逻辑数据块大小为 4KB,所以该 SSD 一共有 128GB/4KB=32M 个逻辑数据块。每个逻辑块都有一个映射,即每个逻辑块在闪存空间都有一个存储位置。闪存地址大小如果用4字节表示,那么存储 32M 个逻辑数据块在闪存中的地址则需要32M×4B = 128MB 大小的映射表。
正因为 SSD 内部维护了一张逻辑地址到物理地址转换的映射表,当主机发来读命令时,SSD能根据需要读取的逻辑数据块查找该映射表,获取这些逻辑数据在闪存空间所在的位置,后端便能从闪存上把对应数据读到SSD内部缓存空间,然后前端负责把这些数据返回给主机。
由于前端接口协议都是标准化的,后端和闪存的接口及操作也是标准化的(闪存遵循ONFI或者Toggle协议),因此,一个SSD在前端协议及闪存确定下来后,差异化就体现在FTL算法上了。FTL算法决定了性能、可靠性、功耗等SSD的核心参数。
# 3.4.2 垃圾回收
前面提到,闪存不能覆盖写,因此随着用户数据的不断写入,闪存空间会产生垃圾(无效数据)。FTL需要做垃圾回收(Garbage Collection),以腾出可用闪存空间用以写用户数据。
以下图所示为例,在 Block x 和 Block y 上有很多垃圾数据,其中 Block x 上的 A、B、C 为有效数据,Block y 上的 D、E、F、G 为有效数据。垃圾回收就是把一个或者几个 Block 上的有效数据搬出来集中写到某个空闲 Block 上(比如 Block z)。当这些 Block 上的有效数据都搬走后,FTL 便能擦除这些 Block,然后又能把这些 Block 拿出来供 SSD 写入新的数据了。
# 3.4.3 磨损平衡
闪存都是有寿命的,每个闪存块不能一直写数据,因此,为保证最大的数据写入量,FTL 必须尽量让每个闪存块均衡写入,这就是磨损平衡(Wear Leveling)。
除此之外,FTL 还需要实现坏块管理、读干扰处理、数据保持处理、错误处理等很多其他事情。
# 3.5 SSD 基本信息剖析
# 3.5.1 SSD 容量
以二进制为单位的容量行业内称为裸容量,以十进制为单位的容量称为用户容量。裸容量比用户容量多出7%。这里指GB级,当进入到TB级时,数值差距更大。
- 十进制128GB:128×1000×1000×1000=128000000000字节
- 二进制128GB:128×1024×1024×1024=137438953472字节
那么,裸容量多出的 7% 容量在 SSD 内部做什么用呢?SSD 可以利用这多出来的 7% 空间管理和存储内部数据,比如把这部分额外的空间用作 FTL 映射表存储空间、垃圾回收所需的预留交换空间、闪存坏块的替代空间等。
这里的7%多余空间也可以转换为OP概念(Over Provisioning),公式是:
# 3.5.2 介质信息
当前 SSD 盘核心存储介质是闪存,闪存这种半导体介质有其自身物理参数,例如寿命(PE cycles,编程擦除次数)、Program(写编程)、Erase(擦除)和Read(读)时间、温度对读写擦的影响、闪存页的大小、闪存块的大小……这些都是介质的信息,介质的好坏直接影响数据存储的性能和完整性。
闪存分 SLC、MLC、TLC(甚至QLC),它指的是一个存储单元存储的比特数(见表1-6):
表1-6 SLC、MLC和TLC参数比较
闪存类型 | SLC | MLC | TLC |
---|---|---|---|
每单元比特数 | 1 | 2 | 3 |
擦除次数(k) | 100 | 3 | 1 |
读取时间(μs) | 30 | 50 | 75 |
编程时间(μs) | 300 | 600 | 1000 |
擦除时间(μs) | 1500 | 3000 | 4500 |
- SLC(Single-Level Cell)即单个存储单元存储 1bit 的数据。SLC 速度快,寿命长(5万~10万次擦写寿命),但价格超贵(约是 MLC 3倍以上的价格)。
- MLC(Multi-Level Cell)即单个存储单元存储 2bit 的数据。MLC 速度一般,寿命一般(约为3k~10k次擦写寿命),价格一般。
- TLC(Trinary-Level Cell)即单个存储单元存储 3bit 的数据,也有闪存厂家叫8LC,速度慢,寿命短(约500~1500次擦写寿命),价格便宜。
目标:在制程允许的范围内,发展更密、更快、价格更低的闪存产品。
来看一下 2D 到 3D 的单位面积比特数的比较(见表1-7),48层 Samsung 的 3D V-NAND 每平方毫米能生产出 2600Mb 的数据,3倍于 2D 闪存,所以同样的晶元可以切割3倍的数据量,简单计算的话每 GB 的价格能降为原来的1/3。
Micron 16nm | Hynix 16 nm | Samsung 16 nm | Samsung 48L V-NAND | |
---|---|---|---|---|
年份 | 2014 | 2014 | 2015 | 2016 |
制程节点(nm) | 16 | 16 | 16 | 21 |
Die容量(Gb) | 128 | 64 | 64 | 256 |
Die面积(mm^2^) | 176 | 93 | 86.4 | 99 |
密度(Mb/mm^2^) | 730 | 690 | 740 | 2600 |
# 3.6 性能剖析
# 3.6.1 性能指标
硬盘性能指标一般包括 IOPS(Input Output Operations Per Second,反映的是随机读写性能)、吞吐量(Throughput,单位MB/s,反映的是顺序读写性能)、Response Time/Latency(响应时间/时延,单位ms或μs)。
- IOPS:单位 IOPS,即设备每秒完成 IO 请求数,一般是小块数据读写命令的响应次数,比如4KB数据块尺寸。IOPS 数字越大越好。
- 吞吐量:单位 MB/s,即每秒读写命令完成的数据传输量,也叫带宽(Bandwidth),一般是大块数据读写命令,比如 512KB 数据块尺寸。吞吐量越大越好。
- 响应时间:也叫时延(Latency),即每个命令从发出到收到状态回复所需要的响应时间,时延指标有平均时延(Average Latency)和最大时延两项(Max Latency)。响应时间越小越好。
# 3.6.2 访问模式
性能测试设计上要考虑访问模式(Access Pattern),包括以下三部分:
- Random/Sequential:随机(Random)和连续(Sequential)数据命令请求。何为随机和连续?指的是前后两条命令LBA 地址是不是连续的,连续的地址称为 Sequential,不连续的地址称为 Random。
- Block Size:块大小,即单条命令传输的数据大小,性能测试从 4KB~512KB 不等。随机测试一般用小数据块,比如 4KB;顺序测试一般用大块数据,比如 512KB。
- Read/Write Ratio:读写命令数混合的比例。
任何测试负荷(workload)都是这些模式的组合,比如:
- 顺序读测试:指的是 LBA 连续读,块大小为 256KB、512KB 等大尺寸数据块,读写比例为 100%:0;
- 随机写测试:指的是 LBA 不连续的写,块大小一般为 4KB,读写比例为 0:100%;
- 随机混合读写:指的是 LBA 不连续的读写混合测试,块大小一般为 4KB,读写保持一定的比例。
# 3.6.3 时延指标
时延有平均时延和最大时延,数值越低越好。
- 平均时延计算公式是整个应用或者测试过程中所有命令响应时间总和除以命令的个数,反映的是 SSD 总体平均时延性能;
- 最大时延取的是在测试周期内所有命令中响应时间最长的那笔,反映的是用户体验,例如最大时延影响应用通过操作系统操作 SSD 时有无卡顿的用户体验。时延上了秒级,用户就会有明显的卡顿感知。
对消费级 SSD 来说,商家给的测试数据一般是空盘下测试的数据,数字相当好看,“最高可达”常挂嘴边。新买的盘,我们测试时会发现性能和商家标称的差不多,但随着盘的使用,会出现掉速问题。垃圾回收是其中一个原因,还有可能就是 SLC 缓存用完了,这里就不具体展开了。 对企业级 SSD 来说,客户更关注的是稳态性能,即满盘性能。所以,商家给出的性能参数一般是满盘数据,“最高可达”字眼消失。我们可以从有没有“最高可达”来快速判断一个盘是企业级还是消费级。
# 3.7 寿命剖析
衡量 SSD 寿命主要有两个指标,一是 DWPD(Drive Writes Per Day),即在 SSD 保质期内,用户每天可以把盘写满多少次;另一指标是 TBW(Terabytes Written),在 SSD 的生命周期内可以写入的总的字节数。
# 3.7.1 DWPD
回头看一下上面的 S3710SSD 的 Endurance 项:
200GB SSD五年使用期限内对应的寿命是 3600TB,平均到每天可以写入3600TB/(5×365)=1972GB,这块盘本身200GB,1972GB相当于每天写入10次,也就是规范书说的10Drive Writes Per Day,简称10DWPD。DWPD为5年的寿命期内每天可以满盘写入的次数。
# 3.7.2 TBW
TBW 就是在 SSD 的生命周期内可以写入的总的字节数,用来表达 SSD 的寿命指标。
- NAND PE Cycles:SSD 使用的闪存标称写擦除次数,如 3K、5K。
- Capacity:SSD 单盘用户可使用容量。
- WA:写入放大系数,这跟 SSD FW 的设计和用户的写入的数据类型(顺序写还是随机写)强相关。
TBW 和 DWPD 的计算公式:
# 3.8 数据可靠性剖析
SSD 有几个关键指标来衡量其可靠性:UBER、RBER 和 MTBF。
- UBER:Uncorrectable Bit Error Rate,不可修复的错误比特率。
- RBER:Raw Bit Error Rate,原始错误比特率。
- MTBF:Mean Time Between Failure,平均故障间隔时间。
# 3.9 SSD、HDD 应用场合
SSD 主要用于存放和用户贴近的热数据,其对总容量需求较小,性能优先;
HDD 主要用于存放和用户较远的温(warm)数据或冷(cold)数据,其对总容量需求较大,价格优先。
- 数据加速层:采用 PCIe 接口的高性能的 SSD。
- 热数据(频繁访问)层:采用普通 SATA、SAS SSD。
- 温数据层:采用高性能 HDD。
- 冷数据层:采用 HDD。
- 归档层:采用大容量价格低廉的 HDD,甚至磁带。