第五节:磁盘顺序IO与随机IO

1.磁盘的基本概念

 盘片与盘面 : 一块硬盘一般有多块盘片,盘片分为上下两面,其中有效面称为盘面(一般上下都有效),盘片数一般与磁头数相等.也就是说:磁头数 = 盘面数 = 盘片数*2
 磁头 : 磁头切换磁道读写数据时通过机械设备实现的,速度较慢;而磁头切换盘面读写数据是通过电子设备实现的,速度较快,因此磁头一般是先读写完柱面后才开始寻道的(不用切换磁道),这样磁盘读写效率更快.
file
 磁道 : 磁道就是以中间轴为圆心的圆环,盘面有多个磁道,磁道之间有间隙,磁道也就是磁盘存储数据的介质.磁道上布有一层磁介质,通过磁头可以使磁介质的极性转换为操作系统的数据信号(即磁盘的读,磁盘写刚好相反)
 柱面 : 磁盘中不同盘面中半径相同的磁道组成的. 也就是说 柱面数 = 某个盘面的磁道数
 扇区 : 单个磁道就是多个弧形扇区组成的,当然某个盘面上的每个磁道拥有的扇区数量是相等.扇区是硬盘/磁盘的最小存储单元.但不是文件系统的最小存储单元(文件系统的最小存储单元是block,可以人为设定).一般扇区大小为512bytes(最新的硬盘好像可以有4K了)
file

2.磁盘的读写方式

 文件系统不是一个扇区,一个扇区的来读数据,太慢了,所有有了block(块)的概念,它是一个块一个块的读取的.block才是文件存取的最小单位.
 一个block块中扇区的个数依文件系统而不同,如一个block有8个扇区,那一个block块的大小为4K.

3.磁盘读取时间

寻道时间 : 表示磁头在不同磁道之间移动的时间
旋转延迟 : 表示在磁道找道时,中轴带动盘面旋转到合适的扇区开头处
传输时间 : 表示盘面继续转动,实际读取数据的时间
7200转/min,旋转一周需要8.33ms
寻道约10ms

磁头不动,盘动的过程
磁盘的转速;5400转,7200转,10000转,15000转 每分钟

4.顺序读写与随机读写

对于从磁盘中读取和写入数据的操作,叫做磁盘IO,分两种情况:
随机IO就是读写的内容分散在磁盘的不同位置,需要来回查找所以效率低;
顺序IO就是读写的内容集中存储在磁盘的一块,从前到后依次读取,免去了查找的过程,所以效率高。

详解如下:
 当读取第一个block时,要经历寻道,旋转延迟,传输三个步骤才能读取完这个block的数据.而对于下一个block,如果它在磁盘的某个位置,访问它会同样经历寻道,旋转,延时,传输才能读取完这个block的数据, 我们把这种方式的IO叫做随机IO.但是如果这个block的起始扇区刚好在我刚才访问的block的后面,磁头就能立刻遇到.不需等待,直接传输.这种IO就叫顺序IO.
ps: 只有顺序写才能保证顺序读

机械磁盘的顺序IO和随机IO的性能差异巨大。
顺序IO时缓存命中率高,节省寻道时间。
随机IO不停寻址,缓存失效。

应用:
复制文件夹:复制文件夹的时候,如果包含许多小文件,复制速度很慢。为了提高复制速度,可以先打一个包,打包把文件夹变成一个大文件。再复制的时候,变成顺序IO

数据库事务:数据库事务在实现的时候,要保证数据落盘成功才能返回。落盘是指落盘到自己的事务日志文件里就返回成功,而不是直接写入到数据库表文件里。原因还是磁盘读写性能问题,事务只要落盘成功就可以,写到哪里不重要。写到数据文件就变成随机IO了。如果写到一个日志文件中,就是顺序IO

MySql的B+树:无论是顺序IO还是随机IO,增加每次IO的单位,性能都会上涨。B+树节点更大,IO起来磁盘工作更舒服。

上一篇
下一篇
Copyright © 2022 Egon的知识星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术