Long Story of Block - 1 Data Unit

本文探讨了Linux IO栈中block层的角色,它作为文件系统和设备驱动之间的桥梁,实施QoS策略并优化数据传输。文章介绍了sector、block和segment等数据传输单元,阐述了它们在不同层级中的应用,特别是如何在硬盘和内存之间进行数据交互。
摘要由CSDN通过智能技术生成

计算、存储、网络构成了云计算的基本组件。Linux 中的 IO 栈主要分为 filesystem 与 block 两层,前者包括 VFS 与各种类型的文件系统(包括 Ext4、XFS 等),描述了数据的组织形式、提供管理数据的接口;而后者包括通用块层 (generic block layer) 与各种类型的块设备驱动(包括 SCSI、NVMe、Virtio 等),主要实现了数据在非易失性存储(HDD、SSD)中的存储。

block 层处于 IO 栈的中间位置,既要对上管理,满足文件系统的各种需求,又要对下管理,指唤下面的设备驱动干活。正如每一位中层领导所发挥的作用那样,block 层绝不仅仅只是一个传声筒,而是要充分理解上层精神的基础上,统筹资源(request queue),指挥下面的设备驱动干活;block 层的最终目标是满足上层的需求,因而实现了一系列的QOS策略(elevator algorithm)来实现这一目标。此外 block 层还需要充分释放下面的能动性,压榨干设备的所有能力(multi-queue)。

系列文章由点及面地介绍 block 层,每篇介绍 block 层的一个特性或一个框架。源于代码,但不堆砌代码。话不多说,Here We Go。

先献祭一张 IO 栈的架构图。

从文件系统到设备驱动, IO 栈的路径比较长,这一路径中的各个层级会采用不同的数据传输单元,理解这些数据传输单元对理解整个 IO 栈具有重要作用。本文就主要介绍 IO 栈中的各种数据单元。

 

sector

hardware disk controller 和 block device driver 都使用 sector 对块设备的地址空间进行寻址;

sector 的概念最早源于 HDD 磁盘,后来的 SSD 设备也沿用这一概念,sector 的大小固定为 512 bytes。

 

block

文件系统使用 block 对块设备的地址空间进行寻址,block 的大小是文件系统初始化的时候配置的,例如 mkfs.ext4 的时候可以配置 ext4 文件系统的 block size,ext4 中 block size 可以在 1K ~ 64K 范围内以 2 倍递增,因而一个 block 可以包含多个 sector。

文件系统会使用内存对磁盘上的 block 进行缓存,这一部分用于缓存 block 的内存就称为 block buffer;

block size 不能超过 page frame size,否则就无法使用 block buffer 特性

以下描述内存中的 block buffer 与磁盘上的 block 之间的映射关系:

  • 如果 page frame size == block size,那么一个 page frame 中只能容纳一个 block buffer,此时一个 page frame 只能缓存一个 block;

  • 如果 page frame size > block size,那么一个 page frame 中可以容纳多个 block buffer,一个 page frame 中缓存的多个 block 不一定连续;

 

segment

segment 的概念实际来自 DMA controller,DMA controller 可以实现一段内存物理地址区间与一段设备物理地址区间之间的数据拷贝,segment 就描述 DMA 数据传输过程中的一段连续的内存空间,也就是说 DMA controller 可以将内存中一个 segment 中的数据拷贝到设备,或将设备中的数据拷贝到 segment 中;

disk controller 正是使用 DMA 来实现内存和磁盘之间的数据传输,老式的控制器只能支持 adjacent disk sectors 与 continuous physical memory 之间的 DMA 映射,而新式的磁盘控制器支持 scatter-gather DMA 特性,即支持 adjacent disk sectors 与多个 discontinuous physical memory 之间的 DMA 映射,此时将每一段 continuous physical memory 区间都称为一个 segment;

segment 可以是一个 page,也可以是一个 page 的其中一部分,通常存储一个或多个相邻的 sector 的数据;

一次 scatter-gather DMA transfer 实际上就包含一个或多个 segment。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值