解读SSD基本工作原理和产品的核心参数

描述

请SSD基本工作原理

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

SSD

图1-13 SSD系统调用

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

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

1. 前端接口和相关的协议模块;

2. 中间的FTL层(Flash Translation Layer)模块;

3. 后端和闪存通讯模块。

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

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

SSD

我们看看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的核心参数。

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

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

SSD

图1-14 垃圾数据回收

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

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

除此之外,FTL还需要实现坏块管理、读干扰处理、数据保持处理、错误处理等等其它很多事情。理解了FTL,SSD的工作原理也就掌握了。关于FTL,本书有专门章节介绍,读者可自行跳到第四章阅读。

1.2 SSD产品核心参数

用户在购买SSD之前,会关注它的一些参数指标,比如能跑多快、用的是什么闪存等等。特别是企业级用户,需要全方位研究SSD的核心指标,解决关注什么指标,如何关注,竞争产品对比这些问题,最终逐一拨开产品内在本质。本节以SSD产品为例,带大家一起解读SSD产品的核心参数。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分