典型磁盘结构
- 盘片platter, 盘面 surface, 磁头 R/W head, 磁道 track, 柱面 cylinder, 扇区 sector
磁盘块存取时间
相关计算概念
块(Block)
- OS或DBMS进行磁盘数据存取的最小逻辑单元,由若干连续扇区构成
- 块是DBMS中数据存取的最小单元
- 扇区是磁盘中数据存储的最小单元
读块时间
- 从“发出块存取请求”到“块位于主存”的时间
- 读块时间=寻道时间S+旋转延迟R+传输时间T+其它延迟
寻道时间(Seek Time)
- 磁头定位到所要的柱面所花费的时间
平均寻道时间
旋转延迟(Rotation Latency)
- 磁盘转动到块的第一个扇区到达磁头所需的时间
- 平均时间为旋转1/2周所费的时间
- 一个7200RPM的磁盘 平均旋转延迟 R≈4.17 ms
传输延迟(Transfer Time)
- 块的扇区及其间隙旋转通过磁头所需的时间
- 如果磁道大约有100 000字节,约10ms转一周,则每秒可从磁盘读取约10M字节,一个4K字节的块传输时间小于0.5ms
其它延迟
- CPU请求I/O的时间 (CPU time to issueI/O)
- 争用磁盘控制器时间 (Contention for controller)
- 争用总线和主存的时间 (Contention forbus, memory)
如何读下一块?
- CASE 1:下一块在同一柱面上
- Sequential I/O
- 旋转延迟+传输时间+其它(忽略)
- CASE 2:不在一个柱面上
- Random I/O
- 寻道+旋转+传输+其它
写块
- 与读块类似
- 如果需要校验块是否正确写入,则需要加上一次旋转时间和一次块传输时间
块修改
- 将块读入主存
- 在主存中完成修改
- 将块重新写入磁盘
块地址
- 物理设备号
- 柱面号
- 盘面号(或磁头号)
- 扇区号
磁盘例子: Megatron747计算磁盘块存取时间
参数 3.5 inch 3840 RPM 8 surfaces 8192 tracks/surface 256 sectors/track 512 bytes/sector
Megatron 747大小 = 8*8192*256*512 = 233 = 8 GB
寻道时间 (最大):17.4 ms
磁头启动停止1 ms,每移动500个柱面需1ms
1 block = 4 KB = 8 sectors
块之间的间隙占块的10%大小
每磁道大小=(256/8)*4 KB=128KB=32块
每柱面大小=8*128KB=1 MB
3840 RPM → 1/64 秒/转 = 15.625 ms
读取一个磁道时间=15.625 ms, 其中
- 用于磁道数据的时间=15.625 * 0.9=14.0625 ms
- 用于扇区间隙的时间=15.625*0.1=1.5625 ms
读取一个块的时间=15.625/32-1.5625/256 ≈0.482 ms
读取数据的时间=15.625/32 * 0.9 ≈ 0.439 ms
OS或DBMS随机读取一块的最大时间
- T=S+R+T=17.4 + 15.625 + 0.482 ≈ 33. 507 ms
最小时间:0.482 ms
平均时间
- T=S+R+T=6.5 + 7.8125 + 0.482 ≈ 14.8 ms
- 平均寻道数=8192/3=2730 (see Fig.13.9)1+2730/500 = 6.5
例题
磁盘存取优化
- 按柱面组织数据
- 减少平均寻道时间
- 磁盘调度算法
- 如电梯算法 (Elevator Algorithm)
- 磁盘阵列(Disk Arrays)
- 磁盘镜像(Disk Mirrors)
- Random IO to Sequential IO
- 预取(Pre-fetch)和缓冲(Buffering)
Random IO to Sequential IO
随机I/O(Random I/O):
定义:随机I/O 是指以随机的顺序访问数据的方式,即不按照存储介质上的物理顺序进行读取或写入。在随机I/O 中,数据块的访问顺序不是连续的,可能是分散的。
特点:随机I/O 通常需要更多的时间和资源,因为存储设备不能有效地预取下一个数据块,而需要在不同位置之间移动磁头或访问不同的存储块。随机I/O 对于小型数据集或需要随机查找的操作比较常见。
示例:从数据库表中随机读取特定记录,访问随机分布的文件块,或执行随机的内存访问操作。
顺序I/O(Sequential I/O):
定义:顺序I/O 是指按顺序访问数据的方式,通常从存储介质中按照顺序读取或写入数据。这种访问模式通常涉及连续的数据块,一次读取或写入一个数据块,然后按照顺序移动到下一个数据块。
特点:顺序I/O 是按照数据的物理存储顺序来操作的。这意味着数据块的读取或写入通常是高效的,因为存储设备可以预取(预读取)下一个数据块,以提高性能。顺序I/O 对于大型文件和数据集的扫描操作非常高效。
示例:顺序读取或写入文件的内容,如逐行读取文本文件,逐个扇区地写入磁盘,以及顺序扫描数据库表中的记录等。
在数据库中,我们经常会遇到两种类型的输入/输出(IO)操作:随机IO和顺序IO¹²³⁵。
随机IO是指读写操作的访问地址不连续,随机分布在磁盘的地址空间中³。在数据库中,索引访问就是典型的随机读IO¹。例如,当我们需要查找特定的行时,由于I/O的粒度是页级的,其中大部分可能是浪费的⁵。
顺序IO则是指读写操作的访问地址连续³。在顺序IO访问中,硬盘驱动器(HDD)所需的磁道搜索时间显着减少,因为读/写磁头可以以最小的移动访问下一个块³。在数据库中,全表扫描就是连续读IO¹。例如,当我们进行数据备份和日志记录等业务时,通常会发生在想要的数据块上的所有行⁵。
在数据库系统的设计中,日志文件采用顺序写入(sequential logging),这是基于传统磁盘访问特性的最大特点¹。数据库中的日志文件,要求必须在事务提交时写入到磁盘,对响应时间的要求很高,所以设计为顺序写入的方式,可以有效降低磁盘寻道花费的时间,减少延迟时间¹。
然而,数据文件的写入通常包括写数据(写聚簇索引)和写索引(普通索引),所以一般不可能在同一个文件中顺序写入。因此,数据文件的写入通常被视为随机写IO。
总的来说,“Random IO to Sequential IO"可能是指通过某种方式或策略,尽可能地将随机IO转化为顺序IO,以提高数据库的性能。具体的实现方式
3.2. 存储器结构3.3. 不同类型存储介质之间的差异3.3.1. 闪存(NAND)3.3.2. 相变存储器(PCM)
预取/缓冲
单缓冲(Single Buffering)
- 例:一个文件由一系列块构成:B1, B2,…设有一程序,按下面顺序处理数据:1、处理B1 2、处理B23、处理B3
- 单缓冲处理策略
- (1) 将B1读入缓冲区
- (2) 在缓冲区中处理B1中的数据
- (3) 将B2读入缓冲区
- (4) 处理缓冲区中的B2数据
- 设 P = 在缓冲区中处理一块的时间,R = 将一块读入缓冲区的时间,n = 块数.单缓冲处理时间 = n(P+R)
双缓冲(Double Buffering)
- 双缓冲处理时间=R+nP(P>=R)= nR+P(R>=P)
操作系统-单缓冲区与双缓冲区计算_哔哩哔哩_bilibili 19-磁盘管理-磁盘单缓冲区与双缓冲区读取_哔哩哔哩_bilibili
缓冲的缺点
- 主存代价
- 缓冲区管理
- 一致性维护
块大小选择
- I/O次数 ↓
- 可能读入大量无用数据
- 每次I/O要花费更多时间
- 趋势 - 大块
新型存储
- 计算机系统性能依赖于
- 处理器的数据计算能力
- 存储层次向处理器传输数据的能力
- 随着多/众核、多线程技术的发展,传统存储器件构成的存储层次面临的存储墙问题愈发严重
- 处理单元(核)数的增长与存储数据供应能力(容量)不匹配
- SRAM/DRAM的功耗过高
- 新型存储器件包括:闪存、相变存储器、磁阻式存储、电阻式存储器、忆阻器等等。具备一个共同特点:非易失性
- 优点:高存储密度、低功耗、无机械延迟、存取速度快、便携、抗震、低噪音等
- 缺点:读写性能不对称、读写次数有限、可靠性不高等
闪存
相变存储器
闪存的工业化程度最高
- SSD(solid state drive)
- 闪存芯片+控制器+FTL(WL, LBA-PBA, GC)
(NAND)闪存的特点
- 读写不对称
- 写慢读快
- 写前擦除:异位更新、块擦除操作
- 寿命有限:块擦除次数有限 SLC (约10万次擦写) MLC(小于1万次) TLC(小于1000次)
- 按页读写
- E.g., 1 page =2 KB
- 按块擦除
- E.g., 1 block = 64 pages
- 读写不对称
相变存储器 Phase Change Memory
- PCM
- 起源于20世纪60年代
- 电阻式非易失性半导体存储器
- 以硫族化物材料作为存储介质,利用相变材料在不同结晶状态时呈现出显著的电阻值差异性来实现数据存储