选择合适的磁盘调度器并调整内核参数可显著提升Linux IO性能。1. 根据设备类型选用noop、deadline或kyber等调度器,避免cfq在服务器环境使用;2. 调整vm.dirty_ratio、vm.dirty_background_ratio、vm.swappiness等参数优化内存与IO交互,降低写延迟和交换;3. 采用XFS或ext4文件系统,挂载时启用noatime,nodiratime,barrier=1等选项减少元数据开销;4. 使用iostat、iotop和blktrace监控IO状态,识别%util、await等瓶颈指标。结合硬件与业务负载持续调优,确保系统高效稳定运行。

Linux 磁盘 IO 性能优化是提升系统响应速度和吞吐能力的关键环节,尤其在高负载服务器、数据库或文件服务场景中尤为重要。通过合理调整内核参数、文件系统配置和磁盘调度策略,可以显著减少 IO 延迟,提高数据读写效率。
1. 选择合适的磁盘调度器
Linux 内核提供多种 IO 调度算法,不同场景适用不同的调度器:
- noop:适合 SSD 或带内部调度的设备(如 RAID 卡),仅做基本合并,减少 CPU 开销。
- deadline:注重 IO 延迟控制,适合数据库类应用,防止请求长时间等待。
- cfq(已弃用):为多任务公平分配 IO 带宽,适用于桌面环境,但在服务器上性能较差。
- none:在虚拟化环境中使用,由底层宿主处理调度。
- kyber / mq-deadline:较新的 blk-mq 调度器,适合高性能 NVMe 设备。
查看当前调度器:
cat /sys/block/sda/queue/scheduler临时切换调度器(以 deadline 为例):
echo deadline > /sys/block/sda/queue/scheduler永久生效需在内核启动参数中添加:elevator=deadline
2. 调整内核 IO 参数
通过修改 /proc/sys/vm 下的参数优化内存与 IO 的交互行为:
- vm.dirty_ratio:脏页占总内存最大百分比(默认 20),超过则强制回写。可调低至 10 减少突发写压力。
- vm.dirty_background_ratio:后台开始回写脏页的阈值(默认 10),建议设为 5~8,提前触发写入。
- vm.swappiness:控制内存交换倾向,默认 60,对数据库服务器建议设为 1~10,减少 swap 导致的 IO 抖动。
- vm.vfs_cache_pressure:调节 inode/dentry 缓存回收强度,默认 100,若文件操作频繁可降低至 50,保留更多缓存。
设置示例:
sysctl -w vm.dirty_ratio=103. 文件系统优化
选用合适文件系统并启用优化挂载选项:
- XFS:适合大文件和高并发写入,支持延迟分配、条带化等特性。
- ext4:通用性强,开启 data=ordered 或 data=writeback 可提升写性能(注意数据安全性)。
关键挂载选项:
- noatime,nodiratime:禁止更新访问时间,减少元数据写入。
- barrier=1:确保数据一致性,但关闭(不推荐)可提升性能(依赖后备电源)。
- journal_async_commit(ext4):异步提交日志,降低延迟。
/etc/fstab 示例:
/dev/sdb1 /data xfs defaults,noatime,logbufs=8 0 04. 使用 IO 监控工具定位瓶颈
持续监控 IO 状态,识别性能热点:
- iostat -x 1:查看 %util(设备利用率)、await(平均等待时间)、svctm(服务时间),判断是否饱和。
- iotop:实时显示进程级 IO 使用情况,找出高 IO 消耗进程。
- blktrace:深入分析块设备层级的 IO 路径延迟。
重点关注指标:
- %util 接近 100% 表示磁盘过载。
- await 明显高于 svctm,说明存在队列积压。
基本上就这些。结合硬件特性、业务负载和监控反馈,逐步调优才能达到最佳效果。不复杂但容易忽略细节。











