1. 历史
- 穿孔卡
- 穿孔纸带
- 磁带
- 硬盘存储器
- IBM Model 250 Disk File 1956年 50张 24 inch盘片
- 软盘
- IBM 在1971年引入
- 光盘
- Flash芯片
- 磁盘阵列
- 网格化磁盘阵列
2. IO
总线
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是单向扫描
- SCAN
- 低负载:
- SSTF
- 跳到最近的IO去读写,会有IO饿死的问题(远的IO扫描不到)
- SSTF
寻址方式:
- 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都要占用校验盘,可能性能没有多少提升,面临淘汰
- 增加条带深度,支持并发IO,一次只能读写一块盘,要在文件系统层做优化
RAID 5
- 把校验盘分割开,组合于数据盘中(分布式校验盘)
- 把校验块打散到不同的盘中 ,这样就可以支持并发IO(同一个盘不能同时读写)
- 三种模式:
- 整条写 Full Stripe Write
- 重构写 Reconstruct Write
- 读改写 Read-Modify Write
- 优点:
- 解决了校验盘争用的问题,在底层实现了并发(盲并发),随机IO效率更高
- 缺点:
- 写性能较差:读老数据->读出校验数据->写校验数据和新数据
- 把校验盘分割开,组合于数据盘中(分布式校验盘)
RAID 5E,5EE :增加热备盘
RAID 6
- RAID 6之前的任何RAID界别,最多能保障坏掉一块数据仍然可以访问,如果两块坏了那就将会丢失。
- 两个校验盘,放置两个等式需要的校验值
- 安全性增强但是写性能更差了