Linux磁盘IO原理深度解析
磁盘IO是系统性能的关键瓶颈。理解Linux磁盘IO的完整链路,有助于优化应用性能和排查IO问题。
一、IO完整链路
应用程序
↓ read()/write() 系统调用
VFS(虚拟文件系统层)
↓ 通用文件系统接口
具体文件系统(ext4/xfs/btrfs)
↓ 管理inode、目录结构、块分配
Page Cache(页缓存)
↓ 缓存热点数据,减少磁盘访问
块设备层(Block Layer)
↓ 管理IO队列和调度
设备驱动(SCSI/SATA/NVMe)
↓ 硬件交互
物理磁盘(HDD/SSD)
二、Page Cache机制
Page Cache是Linux文件系统的核心优化:
# 查看Page Cache使用情况
$ free -h
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 2.1Gi 512Mi 9.2Gi 10Gi
# buff/cache就是Page Cache
# Page Cache的作用:
# 1. 读缓存 - 首次从磁盘读,后续从内存读
# 2. 写缓冲 - 数据先写内存,后台刷盘
# 手动清空Page Cache(测试用)
sync # 先刷盘
echo 3 > /proc/sys/vm/drop_caches
三、IO调度算法
Linux内核提供多种IO调度算法:
# 查看当前调度算法 $ cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq none # 各算法特点: # mq-deadline - 默认,兼顾吞吐和延迟 # kyber - 针对NVMe优化 # bfq - 公平队列,适合桌面 # none - 无调度(NVMe推荐) # 修改调度算法 $ echo none > /sys/block/nvme0n1/queue/scheduler
四、文件系统对比
| 特性 | ext4 | xfs | btrfs |
|---|---|---|---|
| 最大文件 | 16TB | 8EB | 16EB |
| 最大卷 | 1EB | 8EB | 16EB |
| 快照 | 不支持 | 不支持 | 原生支持 |
| 压缩 | 不支持 | 不支持 | 支持 |
| 适用场景 | 通用 | 大文件/高并发 | 实验性/桌面 |
五、IO性能监控
# iostat查看磁盘IO $ iostat -x 1 5 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util nvme0n1 12.34 45.67 123.45 456.78 1.23 2.34 9.09 4.88 0.50 0.30 0.02 10.00 10.00 0.02 0.12 # 关键指标: # r/s, w/s - 每秒读写次数 # rkB/s, wkB/s - 每秒读写数据量 # r_await, w_await - 读写平均等待时间(ms) # %util - 设备利用率(接近100%说明饱和)
六、IO优化建议
# 1. 应用层优化 # - 批量读写,减少系统调用次数 # - 使用异步IO(aio) # - 顺序读写优于随机读写 # 2. 系统层优化 # 禁用atime更新(减少写操作) mount -o noatime /dev/sda1 /data # 3. 调整脏页刷新策略 # /etc/sysctl.conf vm.dirty_ratio = 40 # 脏页占总内存40%时强制刷盘 vm.dirty_background_ratio = 10 # 脏页占10%时后台开始刷盘 vm.dirty_expire_centisecs = 3000 # 脏页30秒后刷新 # 4. SSD优化 # 启用TRIM fstrim -av / # 5. 使用合适的文件系统 # 数据库用xfs,通用用ext4
七、LVM对IO的影响
# LVM增加了抽象层,有轻微性能损耗(通常<5%) # 但LVM提供的好处: # 1. 在线扩容 lvextend -L +100G /dev/vg0/lv_data resize2fs /dev/vg0/lv_data # 2. 快照备份 lvcreate -n snap -L 10G -s /dev/vg0/lv_data # 3. 条带化提升性能(多磁盘) lvcreate -n striped -L 100G -i 2 vg0 /dev/sdb /dev/sdc
总结
Linux磁盘IO涉及多个层次:应用→VFS→文件系统→Page Cache→块设备→硬件。理解每个层次的作用,才能针对性地优化性能。
