0%

存储读书笔记 01

1. 历史

  • 穿孔卡
  • 穿孔纸带
  • 磁带
  • 硬盘存储器
    • IBM Model 250 Disk File 1956年 50张 24 inch盘片
  • 软盘
    • IBM 在1971年引入
  • 光盘
  • Flash芯片
  • 磁盘阵列
  • 网格化磁盘阵列

2. IO

总线

  • 高速总线 : 北桥
    • PCIE
  • 低速总线 : 南桥

    3. 硬盘

HDD 磁盘

  • 盘片 Platters
    • 盘面 一个盘片有两个盘面
    • 磁道 Track (同心圆)300-1024个磁道
    • 柱面 Cylinder
    • 扇区 Sector
    • 簇(NTFS)Cluster,块(Ex4,Linux)Block,一般由2,4,8…个扇区构成
  • 磁头 head
  • 主轴

扫描方式:

  • 高负载:
    • SCAN
      • 回旋扫描模式,从最内侧依次向外圈寻道,不在中途折返
    • C-SCAN
      • 总是从内圈向外圈,到达外圈后迅速返回
    • C-LOOK
      • LOOK模式:完成最两端的IO即可折返
      • C-LOOK是单向扫描
  • 低负载:
    • SSTF
      • 跳到最近的IO去读写,会有IO饿死的问题(远的IO扫描不到)

寻址方式:

  • CHS
    • 柱面(10bit)+磁头(8bit)+扇区(6bit)
  • LBA(Logical Block Addressing)
    • 同密度片,内外磁道数量不同
    • 三维寻址改为一维线性寻址

SSD固态硬盘
分类

  • NAND Flash
    • 0表示有电
  • NOR Flash
    • 每个Cell引出独立的位线,然后并联到总位线上
    • 缺点:多了很多导线,面积增大;擦除单位小,擦除效率比NAND低,不利于频繁写的场景
    • 优点:地址线直接寻址,读取效率高,可以直接当RAM用

原理
Flash芯片、EPROM、EEPROM等,原理是利用了浮动门场效应管

  • 浮动门是(Floating Gate,FG)是一块氮氧化物,四周被二氧化硅的绝缘层包围,在字线上抬高电势的时候,电流通过,电子电荷存储在浮动门中,断开电场后仍然存储在FG中。
    • MLC模式的SSD,每个cell表示2bit信息
    • SLC 每个Cell表示1bit信息
  • 有电子0, 无电子1

多个这样的Cell一起形成阵列,就可以同时操作多个Bit了,NAND Flash(充电的表示0)就是利用这种排列的一种Flash芯片,Page是Flash芯片IO的最小单位。

从Flash中读

从Flash中读的时候导通所有Cell的MOS,拉高位线的电平,若FG中有电子存储,那么漏电很慢(栅源电压降低),根据漏极电压大小就知道存储的是0还是1.


根据上图,当想读出一个page的时候,将其他page的字线电平升高(导通,但不至于影响浮动门的电子存储), 然后再抬高位线电平,就可以读出page的信息了,放置于SSD的RAM Buffer中保存。

从Flash中写
流程:放电(Erase)->充电(0的Cell)

在修改一个Cell中的位之前需要Erase这个Cell

  • Erase动作:
    • 将一大片连续的Cell一下子全部放电,每次Erase擦除一整个Block,将Cell变为1
  • 当写入数据恰好为1,不动
  • 为0则将电路对应的Cell字线电压提高(足以让电子穿过绝缘体),FG进行充电,充电后1变为0(有电子了)

Flash缺点

  • Erase Before Overwrite
    • 需要Erase整个Block,然后再写进去
    • 写惩罚倍数:512KB Block中的4KB Page,512/4 = 128
    • 小块随机写IO会产生大倍数写惩罚(解决:重定向写RoW,避免写时复制(CoW))
  • Wear Off
    • 充放电次数增多使得二氧化硅绝缘层遭到损坏
    • MLC寿命较低,小于10000次

克服Flash缺点

  • 避免一个Cell频繁写:重定向写设计 RoW
    • 直接重定向写到一个全盘Erase后的Block/Page(Free Block)中,因为已经放电所以可以直接写(不用Copy On Write)
    • 如果再次遇到写操作,SSD将数据重定向到Free Space,然后之前的Page标记Garbage
    • Garbage多的Block执行Copy On Write CoW(写时复制):
      • 复制非Garbage 的Page到RAM Buffer,然后写入新Erase的Block
      • 将原有Block Erase掉
  • 定期清除Garbage
  • TRIM指令:文件系统删除某个文件后实时通知SSD回收对应空间
  • 延迟写 Delay Write:
    • 相同地址的IO合并成一个
  • 合并写:
    • 对于HDD来说,连续的小IO合并成一个大IO,一次性写入连续地方
    • SSD:逻辑地址映射本身就是杂乱无章的,所以不连续的IO合并成大IO直接写到一个Free Block中即可
  • 防止写满,SSD预留一部分备用空间用于重定向写
    • 普通SSD大概6-7%
    • Intel X25-E 20%

4. RAID

Redundant Array of Independent Disks 独立磁盘冗余阵列

并发IO的矛盾:

  • 并发IO系数(并发IO的数量)
  • IO SIZE / Stripe SIZE

Stripe SIZE(条带深度)越小,越能提高同时读写的速度,但是此时会占用大量物理盘,降低并发IO的数量

  • 随机小块IO多:条带深度加大,提高并发IO数量
  • 连续大块IO多:适当减小条带深度,可以多磁盘同时IO

IO相关的概念

  • 读写IO
  • 大/小IO
  • 连续、随机IO
  • 顺序IO,并发IO
    • 并发IO (Burst Mode):磁盘组同时执行多个IO命令
    • 顺序IO:有IO队列的概念,按顺序进行IO
  • 持续、间断IO
  • 稳定、突发IO
  • 实、虚IO
    • 实IO:包含实际LBA地址的,文件偏移量等的IO
    • 虚IO:控制性IO,如SCSI Sense Request
  • IOPS
    • 完成IO的时间=寻道时间+旋转延迟时间+数据传输时间,一般寻道时间要比传输时间大几个数据量级
    • IOPS = 并发系数/完成IO的时间
  • 每秒IO的吞吐量
    • IOPS×平均IO SIZE

七种RAID模式

名词解释:

  • Stripe 条带: 由多个磁盘组成,主要为了提高IO速度(几个磁盘同时IO)

  • Segment 段:一个条带在一个磁盘上的单位

  • 写惩罚:为了写入N数据,实际要写M 的数据,我们说写惩罚倍数是M/N

  • RAID 0

    • 优点
      • 不同硬盘的相同偏移的块组成条带(Stripe),可以几个盘同时读
    • 缺点
      • 其中任何一块盘坏了就全毁了,没有校验机制
      • Stripe SIZE小的时候无法并发IO
  • RAID 1

    • 两块盘提高鲁棒性,重复数据
    • 除了读性能可能高N倍其他跟单盘没有不同
  • RAID 2

    • 写入数据计算汉明码,4块盘数据需要3块盘的校验存储
    • 开销大,每块盘写入1b数据,只适合连续IO,大块IO;使用校验盘数量太多,已经被淘汰
    • 每一块都是并存并取,无法并发IO
  • RAID 3

    • 没有以bit为单位分散数据,而是以扇区为单位,每个段N个扇区
    • 条带长度4KB,也就是文件系统大小
    • 优点
      • 效率提升,成本小,XOR校验效率更高(专用XOR电路计算),只用一块校验盘
      • 每次IO都牵动所有磁盘并行读写
    • 缺点
      • 没有多IO并发,只是多磁盘并发读取,在IOSIZE/IOPS比例小的随机IO表现不佳
      • 达到最佳性能,需要多个磁盘的主轴同步
  • RAID 4

    • 增加条带深度,支持并发IO,一次只能读写一块盘,要在文件系统层做优化
      • 为了解决IOSIZE/IOPS小的问题,例如随机小块读写
    • 忽略了校验盘问题,每个IO都要占用校验盘,可能性能没有多少提升,面临淘汰
  • RAID 5

    • 把校验盘分割开,组合于数据盘中(分布式校验盘)
      • 把校验块打散到不同的盘中 ,这样就可以支持并发IO(同一个盘不能同时读写)
    • 三种模式:
      • 整条写 Full Stripe Write
      • 重构写 Reconstruct Write
      • 读改写 Read-Modify Write
    • 优点:
      • 解决了校验盘争用的问题,在底层实现了并发(盲并发),随机IO效率更高
    • 缺点:
      • 写性能较差:读老数据->读出校验数据->写校验数据和新数据
  • RAID 5E,5EE :增加热备盘

  • RAID 6

    • RAID 6之前的任何RAID界别,最多能保障坏掉一块数据仍然可以访问,如果两块坏了那就将会丢失。
    • 两个校验盘,放置两个等式需要的校验值
    • 安全性增强但是写性能更差了