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

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.dtcms.com/a/299293.html

相关文章:

  • Aerospike Java客户端核心API实战指南:从基础操作到高级功能全解析
  • JAVA算法题练习day1
  • 迅为RK3568开发板OpeHarmony学习开发手册1.1-内核移植优化
  • Caffeine 缓存库的常用功能使用介绍
  • 端到端测试:确保Web应用程序的完整性和可靠性
  • Spark-TTS 使用
  • CPU 为什么需要缓存?揭开速度与效率的底层逻辑
  • 网安-中间件-Redis未授权访问漏洞
  • Flutter控件归纳总结
  • 解决VSCode中Github Copilot无法登陆的问题
  • 从零开始的云计算生活——第三十六天,山雨欲来,Ansible入门
  • Windows 平台源码部署 Dify教程(不依赖 Docker)
  • 电脑开机后网络连接慢?
  • Rust嵌入式开发实战
  • 垃圾回收算法与垃圾收集器
  • 数字迷雾中的安全锚点:解码匿名化与假名化的法律边界与商业价值
  • 深入解析三大Web安全威胁:文件上传漏洞、SQL注入漏洞与WebShell
  • MySQL 8.0 OCP 1Z0-908 题目解析(37)
  • Qt 异步编程模式与应用
  • LeetCode——1717. 删除子字符串的最大得分
  • JVM参数
  • 7月26日京东秋招第一场第二题
  • sssss
  • python面向对象编程详解
  • 机器学习的工作流程
  • JVM-GC 相关知识
  • 配置DNS正反向解析
  • 深度学习(鱼书)day03--神经网络(后两节)
  • 【教程】无需迁移IDE!Augment原生插件实现Cursor无缝平替 Claude-4无限用
  • ClickHouse高性能实时分析数据库-消费实时数据流(消费kafka)