6.1 大 folio 优化
内核 6.x 引入**大 folio(Large Folio)**机制:
- 将传统 4KB 页面扩展为大页(如 2MB、1GB)
- 减少 page 结构体数量,降低内存管理开销
- 减少 TLB miss,提升大文件 I/O 效率
- 特别有利于大文件顺序读写场景
性能收益:
- 减少 99% 的 page 结构体内存开销(2MB folio vs 512 个 4KB page)
- 提升大文件 I/O 吞吐量 15%~30%
- 降低内核内存管理 CPU 开销
6.2 iomap 框架
iomap是替代传统buffer_head的现代文件系统 I/O 映射框架:
- xfs、ext4(部分路径)已迁移到 iomap
- 简化代码路径,减少锁竞争
- 更好的 folio 集成
- 提升大文件 I/O 映射效率
6.3 Per CPU BIO 缓存(6.19)
内核 6.19 版本默认启用 Per CPU BIO 缓存:
# 查看 Per CPU BIO 缓存状态 cat /sys/kernel/debug/block/bio_alloc_stats # 6.19+ 可用 # 确认内核版本 uname -r # 需 6.19+性能收益:
- BIO 分配从全局锁变为 per-CPU 无锁分配
- 高并发 IOPS 场景下分配开销降低 50%+
- 减少内存分配/释放系统调用
6生产案例:MySQL 数据库 I/O 优化
场景:MySQL 8.0 主库,16 核 64GB 内存,NVMe SSD 4TB,高并发随机读写,IOPS 要求 50000+。
问题:默认配置下 IOPS 仅 30000,P99 延迟 8ms,高峰期出现 IO 等待。
优化方案:
1. 调度器选型
# NVMe 设备使用 Kyber 调度器 echo kyber > /sys/block/nvme0n1/queue/scheduler2. 队列深度
# NVMe SSD 高并发场景,队列深度设为 256 echo 256 > /sys/block/nvme0n1/queue/nr_requests3. 预读关闭
# 数据库随机读写为主