Linux 的 I/O (输入/输出) 系统是操作系统最核心的子系统之一,负责管理所有硬件设备与应用程序之间的数据传输。理解 Linux I/O 系统对于系统性能调优、故障排查和高效编程至关重要。
Linux I/O 系统采用分层架构:
虚拟文件系统 (VFS)
文件系统层
页缓存 (Page Cache)
块 I/O 层
设备驱动层
同步 I/O:调用者等待 I/O 操作完成
异步 I/O (AIO):I/O 操作在后台执行,完成后通知调用者
缓冲 I/O:通过页缓存进行,默认方式
直接 I/O:绕过页缓存,直接操作设备
O_DIRECT
标志打开文件监控 I/O 性能的重要指标:
常用监控工具:
- iostat
- 查看设备级 I/O 统计
- vmstat
- 系统级 I/O 活动概览
- iotop
- 按进程查看 I/O 使用情况
- blktrace
- 深入分析块设备 I/O
Linux 内核提供多种 I/O 调度算法,影响 I/O 请求的排序和合并:
查看和修改调度器:
cat /sys/block/sda/queue/scheduler
echo "deadline" > /sys/block/sda/queue/scheduler
mmap (内存映射文件)
sendfile
splice
io_uring
针对旋转磁盘 (HDD)
blockdev --setra 256 /dev/sda
针对固态硬盘 (SSD)
fstrim -v /
discard
挂载选项通用优化
vm.swappiness
)vm.dirty_ratio
, vm.dirty_background_ratio
)查看进程 I/O
pidstat -d 1
iotop -o
跟踪系统调用
strace -e trace=open,read,write,close -p PID
分析块设备 I/O
blktrace -d /dev/sda -o - | blkparse -i -
检查文件描述符
ls -l /proc/PID/fd
lsof -p PID
深入理解 Linux I/O 系统需要结合理论知识和实际观测工具的使用。通过持续监控和调优,可以显著提高系统 I/O 性能,满足不同应用场景的需求。