https://zhuanlan.zhihu.com/p/102089411

SSD 主要由 SSD 控制器,Flash 存储阵列,板上 DRAM 和 HOST 接口(SATA、SAS、PCIe 等)组成

闪存基础

Flash 的基本存储单元是浮栅晶体管,工作原理和场效应管类似,都是利用电压控制源极和漏极之间的通断来工作的

SSD 硬件构成

image.png

存储原理

NAND 的一个特性是读写必须以 Page 为单位

NAND 的另一个特性覆盖写必须先清空 Page 的内容,再进行写入(先擦除再写)并且由于清空内容的电压较高,必须以 Block 为单位进行擦除(为了提高效率)

SSD 中会维护一个 mapping table,维护逻辑地址到物理地址的映射,与传统机械硬盘相比,省去了寻道时间和旋转时间

SSD 读写流程

与 HDD 的比较

顺序读测试中,由于定位数据只需要一次,定位之后,则是大批量的读取数据的过程,此时,HDD和SSD的性能差距主要体现在读取速度上,HDD能到200M左右,而普通SSD是其两倍。

随机读测试中,由于每次读都要先定位数据,然后再读取,HDD的定位数据的耗费时间很多,一般是几毫秒到十几毫秒,远远高于SSD的定位数据时间(一般0.1ms左右),因此,随机读写测试主要体现在两者定位数据的速度上,此时,SSD的性能是要远远好于HDD的。

新写入

image.png

  1. 找到一个空闲Page H。
  2. 数据写入到空闲Page H。
  3. 更新mapping table。

更新写

image.png

  1. SSD不能覆盖写,因此先找到一个空闲页H。
  2. 读取Page G中的数据到SSD内部的buffer中,把更新的字节更新到buffer。
  3. buffer中的数据写入到 Page H。
  4. 更新mapping table中 Page G,置为无效页。
  5. 更新mapping table中 Page H,添加映射关系。

GC

image.png

SSD GC操作的有效数据迁移过程为:

OP 空间

Over-Provisioning 是指SSD实际的存储空间比可写入的空间要大,OP 空间要用来做 GC

SSD的GC机制会带来两个问题:

如果频繁的在某些Block上做GC,会使得这些元件比其他部分更快到达擦写次数限制。因此,需要损耗均衡控制(Wear-Leveling)算法,使得原件的擦写次数比较平均,进而延长SSD的寿命。

Trim 机制

Trim 指令也叫 Disable Delete Notify (禁用删除通知),是微软联合各大SSD厂商所开发的一项技术,属于ATA8-ACS规范的技术指令。

Trim(Discard)的出现主要是为了提高GC的效率以及减少写入放大的发生,最大作用是清空待删除的无效数据

通常SSD掉速很大一部分原因就是待删除的无效数据太多,每次写入的时候主控都要先做清空处理,所以性能受到了限制。

在文件系统上删除某个文件时候,简单的在逻辑数据表内把存储要删除的数据的位置标记为可用而已,而并不是真正将磁盘上的数据给删除掉。使用机械硬盘的系统根本就不需要向存储设备发送任何有关文件删除的消息,系统可以随时把新数据直接覆盖到无用的数据上。固态硬盘只有当系统准备把新数据要写入那个位置的时候,固态硬盘才意识到原来这写数据已经被删除。而如果在这之前,SSD执行了GC操作,那么GC会把这些实际上已经删除了的数据还当作是有效数据进行迁移写入到其他的Block中,这是没有必要的。

image.png

Trim 命令的用途,表面上仅是告诉SSD:”某段LBA空间的数据对我不再有用了,你看着办吧“,隐含的意思是这样的:”你别再把这些数据搬来搬去了,直接扔掉,擦掉就最好了。

Trim 一般涉及到后台 GC,一般是 log 住 Trim 命令,然后异步执行相应的修改

不同颗粒 SSD 的理论读写性能比较

QQ_1729049851907.png