磁盘相关技术

讲讲磁盘相关。不是什么新鲜的东西,主要是自己作下笔记……

为什么需要磁盘调度

机械手臂换道速度很慢,单纯地按照FCFS来执行操作的话,性能太差,所以需要调度策略。

但调度也需要磁盘控制器支持。因为磁盘控制器是按照顺序将指令发给磁盘,如果读出的数据与指令顺序不一致,磁盘控制器就乱套了。

所以预先读出来的数据只能先存放在磁盘驱动器的缓存之中,然后等磁盘控制器主动拉取

无序传输技术

因为磁盘只能朝着一个方向旋转,所以考虑这样一种情况:控制器发出一条指令要读某个数据,该数据当然位于某个扇区中,但如果此时磁头刚好位于这个扇区的偏尾部位置,如果要按顺序读的话,那么就需要等待磁盘旋转几乎一整圈,才能从扇区头部开始读数据。

为了解决这个问题,会有无序传输的机制,磁盘会先把尾部的数据读出来,通过DMA放到内存中,等后面旋转到扇区头部后,再把头部的数据读出来发给控制器,这样就避免了浪费时间

几种磁头扫描的算法

  • FCFS 不多解释
  • SSTF(Shortest Seek Time First) 每次选择距离当前磁道最近的磁道来移动,缺点是对于远距离的磁道会有饥饿问题
  • SCAN 类似于电梯算法,磁头来回摆动
  • C-SCAN(单向扫描)磁头由内圈向外圈扫描,然后马上回到内圈
  • LOOK 类似于SCAN,磁道不需要走到最边缘的磁道,只需要走到所有请求的最边缘
  • C-LOOK 类似于C-SCAN

磁盘接口协议

  • SATA
  • SCSI
  • NVMe

RAID

  • RAID 0:不冗余,不备份
  • RAID 1:RAID 0 数据不安全,一块盘坏掉,整个阵列就坏了.因此RAID 1 拿另一磁盘做备份,即一次性写两份.
  • RAID 2:将原本一个扇区的数据以一位为单位(即条带长度为1)分在多块物理磁盘中。使用Hamming Code ECC进行校验,只能允许一块磁盘出错,如果>=两块出错,这个阵列就坏了。
  • RAID 3:使用亦或特性求校验值,一般条带为文件系统的block大小
  • RAID 4:加大条带长度,增加IO读写的并发性
  • RAID 5:将校验数据分散在各个磁盘上
  • RAID 6:增加一个校验盘

如果随机小块IO多,则适当加大条带深度;如果连续大块IO多,则适当减少条带深度.

RAID按照实现的位置,也分为软件层和硬件层的实现

  • 软件层的实现:由OS实现,缺点是占用CPU资源(比如计算校验码),而且安装操作系统的那个磁盘不能做成RAID模式
  • 硬件层的实现:RAID卡。缺点是扩展时不灵活。

为了解决扩展不灵活的问题,引入一个中间层:逻辑卷管理(Logical Volume Manager LVM),其作用是将RAID卡虚拟出来的逻辑磁盘(其实在OS看来,那就是物理磁盘了)进行切分管理

LVM相关概念

  • PV(physical volume):OS识别到的物理磁盘
  • VG(volume group):多个PV的集合,卷组
  • PP(physical partition):将VG分割成逻辑上连续的小块,但物理上不一定连续
  • LP:逻辑区块。多个PP的集合
  • LV:多个LP组成的逻辑卷

一些数据

10000转的SCSI磁盘,内部传输速率为100MB/s(内部传输速率就是,完全不换道时的理想速度,实际上使用起来只有80MB/s左右)

IO延迟:控制器发出IO指令,到IO完成所消耗的时间。 一般认为,20ms以内的延迟,是可以接受的

意思是一秒可以处理50个IO请求,怎么可能只有这么点

实际上当IO请求很少时,IO延迟很低,可能不足1ms。而且控制器会有批量发命令的机制,批量的个数与Queue Depth的大小有关


存储

72 Words

2021-10-22 20:32 +0800