问题描述
SSD 的内存和硬盘是完全不同的,但我们使用 SSD 的主要目的是替换传统硬盘的某些功能,所以理解两者间的差异性是非常必要的;
解决方案
NAND Flash,一种存储设备,比硬盘驱动器更好。在 SSD 中,数据都存储在 NAND Flash 中;
结构概览
换算关系
1 * Package = 2 * Die
1 * Die = 2 * Plane
1 * Plane = 2048 Block
1 * Block = 256 Page
1 * Page = 4 K(最小的存储单位)
补充说明:该换算关系仅用作展示 Die Plane Block Page 间的关系,具体的换算关系取决于产品;
补充说明:该图示并未包含 Package(拆开固态硬盘,板上用于存储的黑色芯片就是 Package,也就是 NAND Flash)
特性特征
读取、写入,擦拭
HDD 仅存在读取与写入两种操作,即便擦除也只是写入 0 或特殊数据;
但在 SSD 的内存中,有读取、写入、擦拭三种操作:读取,对于 SSD 来说并不难,也不会影响其寿命,因此我们通常不在意;写入、擦拭,则和
SSD 的性能及寿命有巨大的关系;
在写入前,要先擦拭
针对 SSD 的写入,必须写入空白单位:
1)空白或未标注的单位,能够直接写入。全新 SSD 的所有单位均为空白;
2)未擦拭的单位,是无法写入的,所以要先擦拭后才能写入;
当 SSD 第一次使用时(全新),因为每个 NAND 都已经被标为干净,因此可以直接以 Page 为单位写入,速度也快。当幵始使用之后,每一次写入都必须先经过擦拭的动作,因此速度会越来越慢。鉴于每次写入 Page 前必须擦除 Page,所以 SSD 性能就会降低,SSD 颗粒厂家都在致力解决这个问题;
而写入和擦拭间还要完成其他动作,这也是影响 SSD 性能的一个参数;
补充说明:写前擦除,是指“在更新数据时,要先对旧数据进行擦除,然后再写入新数据”。现在 SSD 为了提高性能,一般会把数据写在空白块中,然后标记原块,擦除动作将单独进行;
写入,以页表为单位;擦拭,以块为单位;
在 SSD 中:
1)通常以 Page 为单位进行写入,为 4K 大小;
2)在单个 Block 中有 128 – 256 个 Page,数据要以 Block 为单位进行擦除。为了保护 Block 中包含有效数据的 Page,需要先将这些 Page 复制出来,然后再进行 Block 擦除(道理如此,但实现并非如此);
Q:擦除 Block 时,是如何保护 Block 中包含有效数据的 Page?或着说 Block 擦除时,是如何进行 Page 复制的?
A:操作系统是通过逻辑地址来访问存储的。逻辑地址(LBA)就是操作系统表顶的地址,物理地址(PBA)则是 NAND Flash 内存上数据具体存在的地址。而 LBA 及 PBA 非固定绑定关系,而是主控制器使用 LBA 和 PBA 的映像表来管理内存。当与入新数据盖掉旧数据时,SSD 控制器会把新数据写到空白 Page 上,并将该空白 Page 标记为“已擦除”,并刷新地址映像表,把 LBA 指向新的 PBA,此时旧 Page 标注为“无效”。若要在旧 Page 上再次写入数据,必须先擦除该数据(具体的擦除工作由控制器的垃圾回收进行单独处理,而非在下次写入时再擦除);
闪存寿命:P/E Cycle(Program/Erase cycle)
What is a program/erase cycle (P/E cycle) in solid-state storage?
全新的 SSD 有空 Page,所以写入数据是一种直接而高效的操作。但是,随着 SSD 使用,当数据填满时,控制器必须先移动数据并擦除块,然后才能添加新数据。这种擦除和写入(编程)数据的完整过程称为 P/E Cycle;
所有这些额外的 P/E Cycle 都会缩短 SSD 的使用寿命,并对驱动器的性能产生负面影响。为了帮助解决这些问题,SSD 供应商通常将 GC(垃圾收集)功能添加到存储控制器中(尤其是其企业级产品);
不同芯片的 P/E Cycle 也不同:SLC 10w;MLC 1w;
参考文献
百度百科 /NAND(计算机闪存设备)
Understanding Flash: Blocks, Pages and Program / Erases | flashdba