购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.4 SSD基本工作原理

从主机开始,用户从操作系统应用层面对SSD发出请求,文件系统将读写请求经驱动转化为相应的符合协议的读写和其他命令,SSD收到命令执行相应操作,然后输出结果。每个命令的输入和输出经协议标准组织标准化,这和HDD无异,只不过将HDD替换成SSD硬件来存储数据,访问的对象变成SSD。

SSD的输入是命令(Command),输出是数据(Data)和命令状态(Command Status)。SSD前端(Front End)接收用户命令请求,经过内部计算和处理,输出用户所需要的数据或状态。

从图1-13可以看出,SSD主要由三大功能模块组成:

❑ 前端接口和相关的协议模块。

❑ 中间的FTL(Flash Translation Layer)模块。

❑ 后端和闪存通信模块。

SSD前端负责和主机直接通信,接收主机发来的命令和相关数据,命令经SSD处理后,最终交由前端将命令状态或数据返回给主机。SSD通过SATA、SAS和PCIe等接口与主机相连,实现对应的ATA、SCSI和NVMe等协议,如表1-5所示。

图1-13 SSD系统调用

表1-5 SATA/SAS/PCIe接口协议

①AHCI即Advanced Host Controller Interface,高级主机控制器接口。

我们看看SSD是怎么进行读写的。下面以写为例。

主机通过接口将写命令发送给SSD,SSD收到该命令后执行命令,并接收主机要写入的数据。数据一般会先缓存在SSD内部的RAM中,FTL会为每个逻辑数据块分配一个闪存地址,当数据达到一定数量后,FTL便会给后端发送写闪存请求,然后后端根据写请求把缓存中的数据写到对应的闪存空间。

由于闪存不能覆盖写,所以闪存块需擦除才能写入。主机发来的某个数据块不是写在闪存固定位置,SSD可以为其分配任何可能的闪存空间以供其写入。因此,SSD内部需要FTL来完成逻辑数据块到闪存物理空间的转换或者映射。

举个例子。假设SSD容量为128GB,逻辑数据块大小为4KB,则该SSD一共有128GB/4KB=32M个逻辑数据块。每个逻辑块都有一个映射,即每个逻辑块在闪存空间中都有一个存储位置。闪存地址的大小如果用4B表示,那么存储32M个逻辑数据块在闪存中的地址则需要32M×4B=128MB大小的映射表。

正因为SSD内部维护了一张逻辑地址到物理地址转换的映射表,所以当主机发来读命令时,SSD能根据需要读取的逻辑数据块查找该映射表,获取这些逻辑数据在闪存空间中的位置,后端便能从闪存上把对应数据读到SSD内部缓存空间,然后前端负责把这些数据返回给主机。

由于前端接口协议都是标准化的,后端和闪存的接口及操作也是标准化的(闪存遵循ONFI或者Toggle协议),因此,一个SSD在前端协议及闪存确定下来后,差异化就体现在FTL算法上了。FTL算法决定了性能、可靠性、功耗等SSD的核心指标。

其实,FTL除了要完成逻辑数据到闪存空间的映射外,还要做很多其他事情。

前面提到,闪存不能覆盖写,因此随着用户数据的不断写入,闪存空间会产生垃圾(无效数据)。FTL需要做垃圾回收(Garbage Collection),以腾出可用闪存空间来写用户数据。

以图1-14为例,在块 x 和块 y 上有很多垃圾数据,其中块 x 上的A、B、C为有效数据,块 y 上的D、E、F、G为有效数据。垃圾回收就是把一个或者几个块上的有效数据搬出来集中写到某个空闲块上(比如块 z )。当这些块上的有效数据都搬走后,FTL便能擦除这些块,然后把这些块拿出来供SSD写入新的数据。

图1-14 垃圾回收

还有,闪存都是有寿命的,每个闪存块不能一直写数据,因此,为保证最大的数据写入量,FTL必须尽量让每个闪存块均衡写入,这就是磨损平衡。

除此之外,FTL还需要实现坏块管理、读干扰处理、数据保持处理、错误处理等很多其他事情。理解了FTL,SSD的工作原理也就掌握了。关于FTL,后文会详细介绍,这里暂不展开。 1JlLNKhtm+WeCom8zERGzpaLSxAMaNoYJraby0RCoPduQxA4dkrxqWCdqK0c3oZh

点击中间区域
呼出菜单
上一章
目录
下一章
×