#硬盘 #计算机组成
固态硬盘(Solid State Drive 即SSD)是指用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。相比起传统硬盘,它没有磁头,马达,磁盘等一系列的零件,搭载NAND Flash芯片作为存储介质,在运行速度,功耗,轻便等方面是传统硬盘所无法比拟的。
一个固态硬盘上有多个NAND闪存,主控通过若干个通道并行控制多个NAND闪存,大大提高底层的带宽。NAND闪存(即Flash)由多个Block组成,一个Block内部又有多个Page(物理页),Page里才是我们保存的数据。
在SSD中,一般会维护一个mapping table,维护逻辑地址到物理地址的映射。每次读写时,可以通过逻辑地址直接查表计算出物理地址,与传统的机械磁盘相比,省去了寻道时间和旋转时间。机械硬盘定位数据的时间大约在几毫秒到十几毫秒左右,而固态硬盘定位数据只需要约0.1ms左右,所以在随机读写上固态硬盘的速度远远高于机械硬盘。
Over-Provisioning 是指SSD实际的存储空间比可写入的空间要大。比如一块SSD实际空间128G,可用容量却只有120G。之所以要这样设计是因为SSD数据擦除的最小颗粒度是Block,当出现只需要擦除单个Page的情况时,为了保护Block内其他Page上的数据,需要把他们迁移到一个空的Block中。如果没有多余的Block,则无法完成这个操作。为了保证SSD在任何情况下都能提供数据擦除的能力,必须要多预留一些空间。
SSD的写入流程根据Page中是否有数据而分为新写入和覆盖写。
新写入流程
新写入流程很简单,可以分为三步。
SSD的读取流程比较简单,分为两步。
上面提到的覆盖写操作会产生大量包含无效数据的Page,这些Page无法被正常使用。极端情况下,当空Page被写满后就无法进行写入操作了,这时就需要进行垃圾回收。当然垃圾回收的时机肯定不止在空闲Page被用完之后,系统或者软件在运行过程中会为了顺序读而做数据整理,这时也会进行垃圾回收。SSD的垃圾回收流程和JVM的垃圾回收有些相似。
SSD的GC机制会带来两个问题:
均衡算法分为动态均衡和静态均衡。分别针对动态数据和静态数据,动态数据指的是经常发生变更数据, 静态数据则是写入后极少变更的数据。两种均衡方法都需要记录当前SSD中每个Block的擦写次数。
动态均衡是在写数据时优先用擦写次数最少的Block。粗看动态均衡已经非常均衡了,但事实上擦写次数最小的Block大概率存放着静态数据,静态数据极少变更则Block就不会被释放,也就不能被再写入,所以还需要静态均衡。
静态均衡针对静态数据,由于静态数据很少变更 ,长期占用擦写次数小的Block,所以需要找机会把静态数据迁移到擦写次数多的Block中。静态均衡的做法是找到擦写次数小于阈值的Block,将这些Block中的数据与擦写次数高的Block中的数据进行交换。
程序员需要知道的SSD基本原理
SSD固态硬盘的结构和基本工作原理概述
硬盘三大种类(SSD;HHD;HDD)
《数据库系统实现 第二版》
浅谈分布式存储之SSD基本原理
SSD的随机读写与顺序读写?