当前位置: 首页 > ops >正文

Linux内核设计与实现 - 第14章 块I/O层

目录

    • 1. 块设备基本概念
    • 2. 块I/O层架构
    • 3. 核心数据结构
      • 3.1 bio结构体
      • 3.2 request结构体
    • 4. I/O调度算法
    • 5. 请求队列处理流程
    • 6. 性能优化技术
    • 7. 实验:跟踪块I/O请求

在这里插入图片描述

1. 块设备基本概念

  • 定义:以固定大小数据块为单位进行寻址和访问的设备
  • 典型设备:硬盘、SSD、CD-ROM等
  • 与字符设备区别
    • 可随机访问
    • 通常需要缓冲
    • 支持复杂的I/O调度

2. 块I/O层架构

用户空间
VFS
文件系统
块I/O层
I/O调度层
设备驱动
物理设备

3. 核心数据结构

3.1 bio结构体

struct bio {struct bio *bi_next;       // 请求链表struct block_device *bi_bdev; // 关联的块设备unsigned long bi_flags;    // 状态和命令标志struct bvec_iter bi_iter;  // 当前处理位置struct bio_vec *bi_io_vec; // bio向量数组unsigned short bi_vcnt;    // bio向量数量// ...
};

3.2 request结构体

struct request {struct list_head queuelist; // 请求队列链表struct request_queue *q;    // 所属请求队列struct bio *bio;           // 关联的biostruct bio *biotail;       // 最后一个bio// ...
};

4. I/O调度算法

算法名称特点适用场景
Noop简单FIFO队列SSD设备
CFQ公平队列,时间片轮转桌面系统
Deadline读写请求分离,保证延迟数据库系统
Anticipatory预测性调度,减少磁头移动传统机械硬盘

5. 请求队列处理流程

  1. bio提交到块I/O层
  2. 合并到现有request或创建新request
  3. 进入I/O调度队列
  4. 驱动处理request
  5. 完成中断处理
  6. bio完成回调

6. 性能优化技术

  • 请求合并:前后相邻请求合并
  • 预读机制:预测性读取后续数据
  • 写回缓存:延迟写入提升吞吐量
  • 多队列(blk-mq):现代SSD优化技术

7. 实验:跟踪块I/O请求

# 使用blktrace工具
blktrace -d /dev/sda -o trace
blkparse -i trace.blktrace.* > output.txt# 查看调度器
cat /sys/block/sda/queue/scheduler
http://www.xdnf.cn/news/16302.html

相关文章:

  • RustFS for .NET 演示项目深度解析:构建 S3 兼容的分布式存储应用
  • 【VLLM】open-webui部署模型全流程
  • Compose笔记(三十八)--CompositionLocal
  • 如何从自定义或本地仓库安装 VsCode 扩展
  • lottie 动画使用
  • JavaEE初阶第十一期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(九)
  • Springboot+MongoDB简单使用示例
  • 哈希指针与数据结构:构建可信数字世界的基石
  • window上建立git远程仓库
  • Android 键盘
  • GCN模型的设计与训练(入门案例)
  • Rust Web框架性能对比与实战指南
  • 计算机结构-逻辑门、存储器、内存、加法器、锁存器、程序计数器
  • Aerospike与Redis深度对比:从架构到性能的全方位解析
  • npm ERR! cb() never called!
  • sssss
  • Ubuntu安装node-red
  • 刷题日记0726
  • 杰理蓝牙耳机开发--三轴加速度传感器与IIC通信
  • 关于树(按序遍历,搜索,LCA)
  • Git版本控制
  • Linux 系统调用详解:操作文件的常用系统调用
  • 大语言模型 LLM 通过 Excel 知识库 增强日志分析,根因分析能力的技术方案(3):使用云平台最小外部依赖方案
  • Spring AI 项目实战(二十):基于Spring Boot + AI + DeepSeek的智能环境监测与分析平台(附完整源码)
  • GRE及MGRE应用综合实验
  • Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 复杂产品系统集成协同研发平台的研究与实现
  • 【MySQL】MySQL 缓存方案
  • haproxy原理及实战部署
  • Vue3组件通信方法清单