Zoned Storage-Linux Kernel Support之总览

本文详细介绍了Linux内核对分区块设备的支持,包括文件和原始块访问接口,以及内核版本中逐步增加的功能。从4.10内核开始支持,后续版本增加了设备映射器支持和文件系统改进,如F2FS和zonefs。文章还讨论了ZBD支持的限制,如区域大小和读取限制,并强调了直接I/O在顺序写入中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zoned Storage - Linux Kernel Support之总览

前言

Linux 内核通过具有不同访问特性的各种 I/O 路径支持分区存储设备,例如原始设备访问、文件系统和设备映射器目标。
从4.10 的 Linux® 内核中就开始支持分区块设备。 后续版本改进了这种支持,并在原始块设备访问接口之外添加了新功能。 现在可以使用更高级的功能,例如设备映射器支持和 ZBD 感知的文件系统。

概述

应用程序的开发人员可以通过各种不同的 I/O 路径来使用分区的块设备,可以通过不同的编程接口对其进行控制,并且可以以不同的方式公开分区块设备。 下图显示了各种访问路径的简化表示。
在这里插入图片描述
上图中有三个不同的 I/O 路径实现了两个 POSIX 兼容接口,这些接口隐藏了分区块设备的顺序区域的写入约束。 这三个 I/O 路径可以运行遗留应用程序(未修改以实现全顺序写入流的应用程序)。从左至右依次为:

文件访问接口

这是文件系统实现的接口,允许应用程序将其数据组织到文件和目录中。 文件访问接口有两种不同的实现:

  • ZBD 兼容文件系统:通过此实现,文件系统被修改为直接处理分区块设备的顺序写入约束。 应用程序对文件的随机写入被文件系统转换为顺序写入流,从而对应用程序隐藏了设备约束。 F2FS 文件系统就是一个例子。
  • Legacy File System:使用此实现,使用未修改的文件系统,并且设备顺序写入约束由设备映射器目标驱动程序处理,该驱动程序将分区块设备公开为常规块设备。 此设备映射器称为 dm-zoned。 它的特性和使用在
### 关于 `dm-zoned` 的介绍 #### 设备映射器模块中的 `dm-zoned` 设备映射器(Device Mapper)是一个 Linux 内核框架,用于管理块设备的抽象层。它允许创建虚拟块设备,这些设备可以基于其他物理或逻辑块设备构建复杂的功能[^3]。 `dm-zoned` 是 Device Mapper 中的一个特定目标类型,旨在处理分区设备上的写入操作优化。对于现代大容量 SSD 和 HDD 存储介质而言,它们通常具有内部区域划分特性,即所谓的 Zoned Block Devices (ZBD),这使得某些部分只支持顺序写入而不能随机覆盖旧数据。为了更好地适应这种新型存储技术并提高性能,Linux 社区开发了 `dm-zoned` 来作为解决方案之一[^1]。 当使用 `dm-zoned` 时,会通过识别底层设备是否为分区分块设备来决定如何管理和调度 I/O 请求。如果检测到的是一个 zone-aware 或者 zoned 型态的目标,则该驱动程序将会按照相应的规则执行读/写命令序列化控制以及重定位等动作以确保最佳效率。 此外,在初始化过程中,`dm-init()` 函数负责启动整个 Device Mapper 模块,并调用一系列必要的子功能完成设置工作;而对于具体像 `dm-zoned` 这样的组件来说,其配置参数可能涉及到指定哪些实际磁盘应当被当作带状结构看待等问题。 ```c // Example of initializing a dm-zoned target within the kernel code. static int __init dm_zoned_init(void) { // Initialization logic here... } module_init(dm_zoned_init); ``` #### 数据结构关联 在实现上,`dm-zoned` 需要依赖一些核心的数据结构来进行有效的资源管理和请求转发。例如: - **struct dm_dev**: 描述了一个低级别的块设备实例,包含了指向底层 block_device 结构体的指针以及其他元信息,如文件访问权限和名称等属性。 - **set_capacity()**: 此函数用来设定给定通用磁盘对象 (`gendisk`) 所表示的实际大小,这对于正确反映新加入系统的分区或者调整现有卷尺寸非常重要[^2]。 综上所述,`dm-zoned` 提供了一种机制让操作系统能够充分利用带有内置区域特性的现代化固态硬盘和其他类型的持久性内存装置所带来的优势。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值