固态硬盘知识梳理

发布时间:2024年01月22日

#硬盘 #计算机组成

1. 简介

固态硬盘(Solid State Drive 即SSD)是指用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。相比起传统硬盘,它没有磁头,马达,磁盘等一系列的零件,搭载NAND Flash芯片作为存储介质,在运行速度,功耗,轻便等方面是传统硬盘所无法比拟的。

  • 优点:读写速度快;防震抗摔性;低功耗;无噪音;工作温度范围大;轻便。
  • 缺点:容量小;寿命有限;售价高

2. 固态硬盘结构

在这里插入图片描述

  • 主控:一种嵌入式微芯片,SSD的大脑,负责发出SSD工作所需的所有指令。
  • NAND闪存:SSD中存储数据的地方。
  • DRAM:内存,存储SSD中的地址映射等信息。

2.1 NAND闪存

在这里插入图片描述
一个固态硬盘上有多个NAND闪存,主控通过若干个通道并行控制多个NAND闪存,大大提高底层的带宽。NAND闪存(即Flash)由多个Block组成,一个Block内部又有多个Page(物理页)Page里才是我们保存的数据。

  • Flash的特性一Page是SSD存取数据的最小单位,每次存取数据至少是一个Page,每个page的大小为4k或者8k。
  • Flash的特性二Page可以被读写,但是不能被覆盖,数据只能被写入到空Page中,如果要使用有数据的Page则必须先清空Page中的数据。但Page是不能被单独清空的,Flash清空操作的最小单位是Block,即每次清空至少一个Block

3. 固态硬盘工作原理

3.1 基础知识

3.1.1 mapping table

在SSD中,一般会维护一个mapping table,维护逻辑地址到物理地址的映射。每次读写时,可以通过逻辑地址直接查表计算出物理地址,与传统的机械磁盘相比,省去了寻道时间和旋转时间。机械硬盘定位数据的时间大约在几毫秒到十几毫秒左右,而固态硬盘定位数据只需要约0.1ms左右,所以在随机读写上固态硬盘的速度远远高于机械硬盘。

3.1.2 Over-Provisioning

Over-Provisioning 是指SSD实际的存储空间比可写入的空间要大。比如一块SSD实际空间128G,可用容量却只有120G。之所以要这样设计是因为SSD数据擦除的最小颗粒度是Block,当出现只需要擦除单个Page的情况时,为了保护Block内其他Page上的数据,需要把他们迁移到一个空的Block中。如果没有多余的Block,则无法完成这个操作。为了保证SSD在任何情况下都能提供数据擦除的能力,必须要多预留一些空间。

3.2 读写原理

3.2.1 写入流程

SSD的写入流程根据Page中是否有数据而分为新写入和覆盖写。
新写入流程
新写入流程很简单,可以分为三步。

  1. 找到一个空闲的Page
  2. 把数据写入空闲的Page
  3. 在mapping table中新增逻辑地址与物理地址的映射关系
    覆盖写流程
    Flash的特性中提到Page中的数据是无法被变更的,需要先清空Block后才能重新写入。而Block中不止一个Page,所以不能简单的随机找一个有无效数据的Page进行覆盖写,而是应该重新占用一个空闲的Page,然后修改数据的映射关系。
  4. 准备内容,如果是更新数据的话,要把原Page中的内容都读出来,不能只有更新的部分
  5. 找到一个空闲的Page
  6. 把数据写入空闲的Page
  7. 更新mapping table,把逻辑地址的映射改成新的Page(这样原来的Page就在mapping table中废弃了)

3.2.2 读取流程

SSD的读取流程比较简单,分为两步。

  1. 在mapping table中搜索数据所在的Page
  2. 读取Page中的数据
    这里的第一步对应机械硬盘中的物理定位(寻道和旋转),第二部对应的机械硬盘中的数据读取。
    在这两个步骤中,SSD的性能都要远高于机械硬盘。特别是在第一步中,相比机械硬盘的机械运动,SSD的数据定位方式要快上几十倍甚至百倍。

3.3 垃圾回收(GC)

上面提到的覆盖写操作会产生大量包含无效数据的Page,这些Page无法被正常使用。极端情况下,当空Page被写满后就无法进行写入操作了,这时就需要进行垃圾回收。当然垃圾回收的时机肯定不止在空闲Page被用完之后,系统或者软件在运行过程中会为了顺序读而做数据整理,这时也会进行垃圾回收。SSD的垃圾回收流程和JVM的垃圾回收有些相似。

  1. 确定Block中存在有效数据的Page
  2. 把存在有效数据的Page迁移到一个空闲的Block
  3. 擦除当前Block中的数据
  4. 把迁移出去的数据迁回来
  5. 擦除刚才临时存放数据的Block

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

  • SSD的寿命减少。NAND-Flash中每个原件都有擦写次数限制,超过一定擦写次数后,就只能读取不能写入了。
  • 写放大(Write Amplification)。Block中的空间不足以完成写入数据,则会触发上述的GC流程,导致内部真正写入操作大于用户请求写入的数据量。写放大最直观的表现是写入速度变慢。
    如果频繁的在某些Block上做GC,会使得这些元件比其他部分更快到达擦写次数限制。因此,需要损耗均衡控制(Wear-Leveling)算法,使得原件的擦写次数比较平均,进而延长SSD的寿命。

3.4 损耗均衡控制算法

均衡算法分为动态均衡和静态均衡。分别针对动态数据和静态数据,动态数据指的是经常发生变更数据, 静态数据则是写入后极少变更的数据。两种均衡方法都需要记录当前SSD中每个Block的擦写次数。

3.4.1 动态均衡

动态均衡是在写数据时优先用擦写次数最少的Block。粗看动态均衡已经非常均衡了,但事实上擦写次数最小的Block大概率存放着静态数据,静态数据极少变更则Block就不会被释放,也就不能被再写入,所以还需要静态均衡。

3.4.2 静态均衡

静态均衡针对静态数据,由于静态数据很少变更 ,长期占用擦写次数小的Block,所以需要找机会把静态数据迁移到擦写次数多的Block中。静态均衡的做法是找到擦写次数小于阈值的Block,将这些Block中的数据与擦写次数高的Block中的数据进行交换。

4. 参考资料

程序员需要知道的SSD基本原理
SSD固态硬盘的结构和基本工作原理概述
硬盘三大种类(SSD;HHD;HDD)
《数据库系统实现 第二版》
浅谈分布式存储之SSD基本原理
SSD的随机读写与顺序读写?

文章来源:https://blog.csdn.net/markzy/article/details/135749149
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。