硬盘存储

非易失性存储器

磁芯存储器

磁表面存储器

  • 如何保存? 磁颗粒的不同磁化偏转方向
  • 如何表示? 磁记录方式
  • 如何组织? 扇区、磁道、柱面、硬盘
  • 如何管理? 操作系统的文件系统

磁记录方式:

  • 归零制(RZ)
    • 线圈中正脉冲为“1” ,负脉冲表示“0” ,两位信息位之间线圈中电流为零。
  • 不归零制(NRZ)
    • 线圈中一直有正或负脉冲(包括两位信息位之间)。
  • 见 1 翻转的不归零制(NRZ1)
    • 只有见到“1”才改变电流的方
  • 调相制(PM)
    • 用脉冲的边沿来表示“0”和“1”
  • 调频制(FM)
    • “1”: 位周期中心和位与位之间都翻转
    • “0”: 位周期中心不翻转,位与位之间翻转
  • 改进的调频制(MFM)
    • 只有连续两个或以上的“0”时,才在位周 期的起始位置翻转

随机访问和串行访问

随机访问

  • 随机访问任何单元,访问时间与信息存放位置无关
  • 每一位都有各自的读写设备

串行访问

  • 顺序地一位一位地进行,访问时间与存储位的物理位置有关
  • 共用一个读写设备
  • 顺序访问和直接访问

技术指标

存储密度

  • 单位长度(磁带)或单位面积(磁盘)磁层表面所存储的二进制信息量

存储容量

  • 磁表面存储器所能存储的二进制信息的总量,以字节为单位

寻址时间

数据传输率

误码率

价格

磁盘结构

磁盘访问过程:

  • 寻道:将读写磁头移动到正确的磁道上(平均需要 8~20 ms )
  • 寻找扇区:等待磁盘旋转到需要访问的扇区( 0.5 / RPM)
  • 数据传输:读写数据(1 个或多个扇区)( 2 to 15 MB/sec

磁盘参数:

  • 与容量有关
    • 500 至 2,000 磁道(每面)
    • 32 至 128 个扇区(每个磁道)
      • 扇区是磁盘访问的最小单位
  • 早期硬盘上每个磁道上的扇区数是一样的
  • 增加容量:位密度不变:外磁道比内磁道扇区数多一些
  • 柱面:位于同一半径的磁道集合
  • 读/写数据的三个步骤:
    • 寻道时间:将磁头移动到正确的磁道上
    • 旋转延迟:等待磁盘上扇区旋转到磁头下
    • 传输时间:真正的数据读/写时间
  • 当前平均寻道时间:一般为 8 至 12 ms
  • 旋转延迟:
    • 旋转速度:3,600 至 7200 RPM
    • 旋转时间:16 ms 至 8 ms 每转
    • 平均寻址时间 8ms 至 4ms
  • 访问速度:
    • 数据量(通常为 1 个扇区): 1 KB / sector
    • 旋转速度: 3600 RPM 至 7200 RPM
    • 存储密度:磁道上单位长度存储的位数
    • 磁盘直径: 2.5 至 5.25 in
    • 一般为: 2 至 12 MB 每秒
  • 磁盘访问时间 = 寻道时间 + 旋转延迟 + 传输时间 + 磁盘控制器延迟

磁盘性能参数

磁盘驱动器工作时,磁盘以恒定速度旋转,为了读写数据,磁头需要位于指定磁道的指定扇区开始处。因此

  • 寻道时间 (seek time):磁头定位到指定磁道所需要的时间;
  • 旋转延迟 (rotational time):磁盘控制器等待指定扇区开始处旋转到磁头所需要的时间;
  • 传输时间 (transfer time):磁头定位完成后开始读写操作,进行数据传输的时间;
  • 排队延迟 (wait time):进程发出 I/O 请求后,需要在等待队列中等待设备可用;同样若设备共享 I/O 通道,则还需要等待通道可用

旋转定位感知技术

Rotational Positional Sensing, RPS:

  1. 发出寻道命令时,通道被释放以处理其它 I/O 操作;
  2. 寻道完成后,设备确定何时数据扇区旋转到磁头下面;
  3. 当扇区接近磁头时,设备试图重建到主机的通信路径
  4. 若控制单元或通道正忙于处理另一个 I/O,则重建连接的尝试失败,设备必须旋转一周后再重新尝试连接,这称为 RPS 失败,也是一种额外延迟

寻道时间

  • 很难减少的延迟;
  • 主要两个部分:
    • 最初启动时间
    • 访问臂达到一定速度后,横跨必要的磁道所需的时间:由于横跨时需要验证磁道标识,这个稳定时间导致横跨磁道的时间不是磁道数量的线性函数;

旋转延迟

  • 平均旋转延迟 = 旋转一周的时间的一半
  • 假设旋转速率 15000 rpm,相当于 250 rps,则旋转一周时间为 1000/250=4 ms,则平均旋转延迟=(0+4)/2=2 ms

传输时间

  • 取决于磁盘的旋转速度;
  • ,T 表示传输时间,b 表示传送字节数,N 表示一个磁道中的字节数,r 表示旋转速度 (单位 rps)
  • 实际上是磁盘需要旋转的圈数;
  • 因此总平均存取时间为:

时序比较

磁盘举例:平均寻道时间 4ms,转速 7500rpm,每个磁道 500 扇区,每个扇区 512Bytes。要读取 2500 个扇区、1.28MB 的文件,分别以顺序读取和随机读取作讨论。

  1. 顺序读取:文件紧凑地保存在磁盘的相邻磁道(不考虑磁道切换的寻道时间)

    • 旋转延迟=(0+1000/125)/2=4 ms,(7500 rpm=125 rps)
    • 读第一个磁道时间:4+4+8=16 ms
    • 接下来读取其余 4 磁道各自只需要旋转延迟 4 ms + 数据传输 8 ms;
    • 故总时间=16+4x12=64ms=0.064s
  2. 随机读取:文件随机分布在磁盘上

    • 每个扇区需要:寻道时间 4 ms,旋转延迟 4 ms,读取时间 8/500=0.016 ms;
    • 总时间=2500 x 8.016=20040 ms=20.04s

因此如何提升文件在磁盘上存储的局部性,是提高 I/O 速度的关键方法。

指向原始笔记的链接

对磁盘访问的思考

页容量大,为什么扇区却如此小呢?

  • 理由 1 : 可用性。 可以在扇区物理损坏时不再使用该扇区。
  • 理由 2 : 还是可用性。检错纠错码分布在每个扇 区,扇区容量小,检错速度快,效率高。
  • 理由 3 :灵活性。使用不同的操作系统,不同的页面大小。

采用并行方式和大容量传输方式克服磁盘控制器延迟

  • 大容量传输: 每次读取多个扇区,可以节约时间。
  • 也可以分担部分总线延迟
  • 并行
    • 1 :并行读多个层面
    • 2 :并行读多个磁盘

访问磁盘过程

对磁盘的访问总是由缺页引起的:

  • CPU 给出地址,需要访问某存储单元;
  • 并行进行 TLB 查找和 cache 查找;
  • TLB 查找后申明没有找到;
  • 停止并行查找,并通知操作系统处理;
  • 操作系统检查页表,发现该页不在内存中,需要从硬盘调入。应该如何进行呢?

操作系统从主存中选择一页准备换出,为调入的页安排存放空间;

  • 若被换出的页是“脏”页,需要将其写回磁盘存储;
  • 操作系统申请 I/O 总线;
    • 获得批准后,发送写命令给 I/O 设备 (磁盘)。
    • 紧跟着传送需要写回的页的全部数据。
    • I/O 控制器发现发给自己的写命令,加入到握手协议,并接受数据。
    • 根据数据要写入的地址,读/写头移动到正确的柱面,同时,将数据接收到缓冲区。
  • 寻道结束后,等待相应的扇区旋转到磁头下面,将数据写入扇区中。
  • 在写入数据间隙,计算校验码并写入扇区中。
  • 下一步,操作系统继续申请总线(如果还保持总线控制权,则不必申请)。
  • 得到授权后,向磁盘发出读命令。
    • 然后,磁盘识别地址,并转换为相应的地址段。
    • 寻道,将读/写头移动到指定位置。
    • 从指定扇区中读去数据,并进行校验。
    • 磁盘申请 I/O 总线。
    • 得到授权后,将数据通过总线送到内存。

[! note] 区分可用性和可靠性 两个经常混淆的词汇: n 可靠性:设备出现故障的几率来衡量。 n 可用性:系统能正常运行的几率来衡量。 p可用性可以增加硬件冗余来提高: n 例如:在存储器中增加校验码。 p可靠性只能通过下面途径提高: n 改善使用环境 n 提高各部件的可靠性 n 减少组成部件 n可用性的提高可能带来可靠性的降低

RAID

RAID

基于通过并行提高性能的基本原理:

  • 如果使用一个组件对性能的影响有限,则并行使用多个组件可获得额外的性能提高。
  • 因此,通过将访问的数据块分布在多个磁盘上,可以并行提高 I/O 请求的速度。

RAID 的特点

Redundant Array of Independent Disks:

  1. 物理上是一组磁盘驱动器,但 OS 视作单个逻辑驱动器;
  2. 数据分布在物理驱动器阵列中,称为条带化 (striping);
  3. 使用冗余磁盘容量保存奇偶校验信息,保证在一个磁盘失效时数据仍然具有可恢复性。

RAID 指标参数总览

  • 磁盘请求:表明该 RAID 需要多少个磁盘,其中 RAID 2 通过汉明码冗余,因此需要 m=logN 个冗余磁盘;
  • 数据可用性:指数据的可恢复性,安全性;
  • 大 I/O 数据传送能力:读写速度;
  • 小 I/O 请求率:完成 I/O 请求的能力;

RAID 性能总结

  • 磁盘请求:单磁盘 < RAID0 < 2 < 3 = 4 = 5 < 6 < 1
  • 数据可用性排序:RAID0 < 单磁盘 << 2 ~ 3 ~ 4 ~ 5 < 1 < 6;
  • 大 I/O 数据量传送能力:
    • 读:单磁盘 < RAID0 ~ 4 ~ 5 ~ 6 < 1 < 2 ~ 3
    • 写:RAID6 < 4 ~ 5 < 单磁盘 ~ 1 < 0 < 2 ~ 3
  • 小 I/O 请求率:
    • 读:单磁盘 < RAID0 ~ 4 ~ 5 ~ 6 < 2 ~ 3 ~ 1
    • 写:RAID6 < 4 ~ 5 < 单磁盘 < 1 < 0 < 2 < 3

RAID 0

用户数据和系统数据分布在所有阵列的所有磁盘中。当被请求的块不在同一磁盘,则多个请求可以并行发出,减少 I/O 排队等待的时间;

存储数据的策略

  • 在整体的逻辑磁盘上,存储空间被划分成多个条带,每个条带可以是物理块、扇区等单元;
  • 这些条带被循环映射到连续的 RAID 成员的物理磁盘上,逻辑条带映射到相同大小的物理磁盘区域中,阵列的每个磁盘的第一个区域连接成物理上的一个条带 (A1 A2 是条带 1,A3 A4 是条带 2)
  • 优点是:若一个 I/O 请求由多个逻辑上连续的条带组成,则可以并行处理(每个磁盘都发挥作用)

如何实现高数据传送能力

  1. 不考虑冗余性;
  2. 应用程序需要请求逻辑上连续的数据,这样能够物理地并行使用多个磁盘,从而提高传送速率;

如何实现高速 I/O 请求率

  1. 事务处理环境中响应性比数据传送能力更重要,而 RAID0 可以通过在多个磁盘中平衡 I/O 负载来提供较高的执行速率
  2. 当存在多个未完成的 I/O 请求时,能够实现有效的负载平衡;
  3. 若条带相对较大,则一个 I/O 请求可能只包括对一个磁盘的访问,从而多个等待的 I/O 请求可以并行处理;

RAID 1

  • 通过临时复制所有数据实现冗余,每个逻辑条带映射到两个单独的物理磁盘。

优点

  1. 读请求可由包含请求数据的任一磁盘提供服务,因此读最快是 RAID 0 的两倍;
  2. 写请求需要对两个条带都进行更新,但这是并行完成的,因此写操作由较慢者决定,较 RAID 0 写速度稍慢一点,但并没有冗余校验的性能损失;
  3. 失效恢复只需要从镜像磁盘中直接复制即可;

缺点

  • 成本过高,所需磁盘要两倍于支持的逻辑空间;

RAID 2

策略描述

  • RAID 2 和 RAID 3 采用了并行访问技术,通过同步所有磁盘的轴心,每个时刻磁头都处于各自磁盘的同一位置,使得所有磁盘都参与每个 I/O 请求的执行
  • RAID 2 和 RAID 3 中使用小条带,通常只有 1 个字或字节
  • RAID 2 对每个数据磁盘的相应位都计算一个错误校正码,这个码位保存在多个奇偶校验磁盘的相应位中;
  • 错误校正使用汉明码,能够纠正 1 位错误、检出 2 位错误;
  • 冗余磁盘数量与数据磁盘数量的对数成正比,读操作需要访问所有磁盘,被请求的数据及相关错误校正码被送达并计算,写操作则要访问所有数据磁盘和奇偶校验磁盘;

优点

  • RAID 2 和 RAID 3 的数据传送能力最强,请求率是单个磁盘的两倍

缺点

RAID 3

  • 为所有数据磁盘的同一位置的位的集合计算一个奇偶校验,存放在单独的奇偶校验冗余磁盘中;

数据恢复

  1. 磁盘故障时访问奇偶校验驱动器,根据其余设备重建数据
  2. 考虑 5 个磁盘,前四个是数据磁盘,第五个是校验磁盘,则第 i 位奇偶检验计算如下:,
  3. 则恢复指定驱动器 ,可以两边都加
  4. 即每个磁盘上的内容都可由其它所有磁盘对应内容通过异或运算获得;

性能

  • 数据分成了很小的条带,RAID 3 能实现非常高的数据传送率,任何一个 I/O 请求都是从所有数据磁盘中并行传送数据,对大数据量的传送性能提高明显;
  • 但是一次只能执行一个 I/O 请求,在面向事务处理的环境中性能不乐观。

RAID 4

策略描述

  • RAID 4 到 RAID 6 采用独立访问技术,每个磁盘成员都单独运转,不同的 I/O 请求并行地满足;
  • 数据条带相对较大;
  • 适合较高 I/O 请求率的应用程序,但不适合需要较高数据传送率的应用程序;
  • RAID 4 对每个数据磁盘的相应条带计算一个逐位奇偶校验,保存在奇偶校验磁盘的相应条带中。

数据恢复

  1. 考虑 5 个磁盘,前四个是数据磁盘,第五个是校验磁盘,则第 i 位奇偶检验计算如下:
  2. 更新 ,标记为 ,则:

性能

  • I/O 写请求时会引发性能损失,RAID 4 必须更新数据和奇偶校验位
  • 要计算新的奇偶校验,RAID 4 必须读取旧用户条带和旧奇偶校验条带,然后用新数据和新奇偶校验更新这两个条带,因此每个条带的写都包含两次读和两次写
  • 因此读性能接近 RAID 0,写性能慢于单个磁盘
  • 奇偶校验盘可能成为瓶颈;

RAID 5

  • 奇偶校验条带循环分布在所有磁盘中
  • 可避免 RAID 4 中一个奇偶校验磁盘的潜在 I/O 瓶颈问题;
  • 损失任何一个磁盘而不会损失数据的特性

RAID 6

  • 策略

    • 采用两种不同的奇偶校验计算,保存在不同磁盘的不同块中;
    • P 校验使用异或计算,Q 校验使用独立数据校验,使得即使有两个数据磁盘错误,也可以重新生成数据;
  • 性能

    • MTTR (mean time to repair)时间内,只有同时丢失三个以上条带时数据才会丢失,数据可用性很高
    • 写性能很差,比 RAID5 还慢,读性能接近 RAID0
指向原始笔记的链接

SSD

62-SSD

Introduction

SSD 是一种非易失性存储设备,代表固态驱动器,可以使用传统硬盘驱动器(HDD)的 SATA 和 SAS 等协议。新的外形规格(如 M.2 外形)和新的 I/O 协议(如 NVM Express)已被开发出来,以满足 SSD 中使用的闪存技术的特定要求。

What is SSD?

固态硬盘 (SSD) 是一种固态存储设备,它使用集成电路组件作为内存来存储数据, 没有物理磁盘(指旋转的以磁性方向做记录的盘)。
SSD 中没有移动的机械组件。这使得它们不同于传统的机电驱动器,如硬盘驱动器(HDD)或软盘,后者包含可移动的读/写磁头和旋转磁盘。与机电设备相比,SSD 通常更能抵抗物理冲击、静默运行、访问时间更快、延迟更低。随着时间的推移,SSD 的价格持续下降。

在 2017 年,大多数 SSD 使用基于 3D TLC NAND 的闪存。它是一种==非易失性==存储器,即使在断电时也能保留数据。SSD 可以从随机存取存储器 (RAM) 构建,用于需要快速访问但不一定在断电后保持数据持久性的应用。电池可以用作此类设备中的集成电源,以便在外部电源丢失后将数据保留一定时间。

SSD 将数据存储在电荷中,如果没有电源,电荷会随着时间的推移而缓慢泄漏。这就是为什么 SSD 不适合存档目的的原因,因为磨损的驱动器(已超过其耐用性等级)通常在存储一年(如果在 30°C 下存储)到两年(在 25°C 下)后开始丢失数据。

混合驱动器或固态混合驱动器 (SSHD) 包含一个大型硬盘驱动器和一个 SSD 缓存,以提高经常访问的数据的性能。Apple 的 Fusion Drive 在同一单元中结合了 SSD 和 HDD 的功能,可以被视为混合驱动器的一个例子。

Features

  • 更快的读/写速度:
    • SSD 的读写速度明显快于使用旋转磁盘和机械读/写磁头的传统硬盘驱动器 (HDD)。这意味着更快的启动时间、应用程序加载时间和整体系统性能。
  • 低功耗:
    • SSD 比 HDD 消耗更少的功率,使其成为笔记本电脑、平板电脑和其他依赖电池供电的移动设备的理想选择。
  • 无移动部件:
    • 与具有旋转磁盘和机械读/写磁头的 HDD 不同,SSD 没有移动部件。这使得它们更能抵抗冲击和振动,并且不易发生机械故障。
  • 更高的可靠性:
    • 由于 SSD 没有移动部件,因此它们通常比易受机械磨损影响的 HDD 更可靠。由于读/写错误,SSD 的数据丢失率也较低。
  • 更低的噪音和发热:
    • SSD 产生的噪音和热量比 HDD 少,非常适合在安静的环境或冷却有限的系统中使用。
  • 更高的每 GB 成本
    • 按每 GB 成本计算,SSD 通常比 HDD 贵,尽管近年来价格有所下降。这使得 SSD 在需要大量存储的系统中使用不太实用。(2023 考古,现在长存的 SSD 每 GB 成本低于 HDD)
  • 有限的写入耐久性:
    • 在基于 NAND 的闪存单元降级之前,SSD 的写入周期数有限。但是,现代 SSD 使用磨损均衡和过度配置等技术来延长驱动器的使用寿命。

SSD vs. HDD

参数HDDSSD
长期储存HDD 对于长期存储更可靠。SSD 对于长期存储的可靠性相对较低,因为如果长时间不通电超过一年,可能会发生数据泄漏。
访问速度与 SSD 相比,数据访问速度较慢。与 HDD 相比,数据访问速度要高得多。
性能性能因碎片化而受到影响。性能不会因为碎片而受到影响。
适用于硬盘适用于: 大容量存储、长期储存固态硬盘适用于:快速数据检索、笔记本电脑或台式机,因为低功耗和尺寸低。

Structure

只是为了提高容量、存取性能,SSD 提供了多个闪存芯片以及闪存翻译层:

  • 闪存芯片代替传统旋转磁盘中的机械驱动器,
  • 闪存翻译层将来自 CPU 的逻辑块读写请求翻译成对底层物理设备的读写控制信号,扮演磁盘控制器的角色;

  • 闪存存储阵列中,Die 就是晶片——最大的一个物理结构:每个 NAND 闪存芯片通常由多个 “die” 组成,每个 “die” 包含多个 NAND 存储块和相应的控制逻辑。每个 “die” 都可以独立操作,但它们通常协同工作以提供更大的存储容量和更好的性能

  • Die 接下来会分块,块内分页和有各自的寄存器,页是读写的基本单位;
  • SSD 的随机写较慢,主要原因在于擦除块较慢。写操作若试图修改已有数据的页 Pi,那这个块中所有含有用数据的页都必须复制到另一个新块中,之后才能进行对页 Pi 的写操作。

[! info] What is 0-die problem? “0-die” 问题是一个与 SSD 的性能和可用性有关的概念,通常涉及到 RAID(冗余磁盘阵列)配置。在某些 RAID 配置中,如果系统中的所有 SSD 都失效,或者其中一个 “die” 失效,那么整个 RAID 组可能会无法正常工作。这被称为 “0-die” 问题,因为在这种情况下,整个存储系统的可用性降为零。

为了解决 “0-die” 问题,一些 RAID 配置需要至少一个冗余 “die”,这意味着即使一个 “die” 失效,仍然可以继续运行。这可以通过使用不同级别的 RAID(如 RAID 1、RAID 5 或 RAID 6)来实现,这些级别提供了不同程度的冗余性,以保护数据免受 “0-die” 问题的影响。

OS Operate flow

graph TD
A[Applications]--File system API-->B[File system]

B --Block-level commands-->C[Flash translation layer]

C --Flash commands-->D[Memory technology device]

D --Control Signals-->E[Flash memory media]

Flash translation layer

提供的功能:

  • 逻辑到物理的地址映射
  • 垃圾回收:
    • 确保在 SSD 中释放被删除或标记为无效的数据块。这些已删除的数据块中可能包含坏块或高度耗损的存储单元。垃圾回收会擦除这些块,将它们恢复为可用状态,从而减少存储单元的不均匀耗损。
  • 掉电保护和数据恢复
  • 坏块管理
  • 磨损均衡
  • 错误校验码

更详细的内容,可以参考:PPT - Flash Translation Layer (FTL)

Scheduling algo

SSD 没有物理磁头,且本身随机读的速度相当快,因此

  • 直接采用 FCFS 进行 I/O 请求的调度。

Wear Leveling

固态硬盘的闪存擦写寿命有限,通常是几百次到几千次。如果读写数据集中在 SSD 的一部分闪存,那么这部分闪存的寿命损耗会特别快,而部分闪存的损坏会导致整块 SSD 性能大幅下降或直接损坏,因此使得磨损均衡是有效提升 SSD 使用寿命的合适手段。

动态磨损均衡

写入数据时,自动选择较新的闪存块。

静态磨损均衡

在没有数据写入时,SSD 检测并自动进行数据分配,让老的闪存块承担无需数据覆写的存储任务,同时给新的闪存块让出空间。

相对而言,静态磨损均衡更佳。

指向原始笔记的链接