硬盘驱动在CentOS如何优化
小樊
45
2025-11-22 01:59:20
CentOS 硬盘与 I/O 优化实操指南
一 基线评估与监控
- 使用以下工具建立性能基线并定位瓶颈:
- iostat:iostat -dxm 2(关注 await、r/s、w/s、util%)
- 进程级 I/O:iotop -oPa
- 基准测试:fio(4K 随机/顺序场景)、bonnie++(综合吞吐与延迟)
- 示例 fio 命令(4K 随机读,libaio,运行 60 秒):
- fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=1G --runtime=60
- 建议先记录优化前后指标,便于量化收益与回滚。
二 内核与虚拟内存参数
- 调整脏页阈值与回写间隔,平衡突发写入与延迟抖动:
- 建议范围(按内存与负载微调):
- vm.dirty_ratio:5–20(默认通常为 20;写压力高或延迟敏感可下调)
- vm.dirty_background_ratio:3–10(默认通常为 10;先触发后台回写)
- vm.dirty_writeback_centisecs:100–500(单位 1/100 秒;持续写入可适当减小以降低尖峰)
- vm.dirty_expire_centisecs:1500–30000(单位 1/100 秒;重载写入可适当缩短)
- 临时生效示例:
- sysctl -w vm.dirty_ratio=10
- sysctl -w vm.dirty_background_ratio=5
- echo 100 > /proc/sys/vm/dirty_writeback_centisecs
- echo 1500 > /proc/sys/vm/dirty_expire_centisecs
- 持久化:写入 /etc/sysctl.d/99-io-tuning.conf,执行 sysctl -p
- 原理要点:当脏页占比达到 dirty_background_ratio 时触发后台回写;达到 dirty_ratio 时应用写可能被同步阻塞,需结合业务容忍度与内存容量权衡。
三 I/O 调度器选择与设置
- 查看与切换(示例设备 sda):
- 查看:cat /sys/block/sda/queue/scheduler
- 临时切换:echo deadline > /sys/block/sda/queue/scheduler
- 启动项设置(可选,CentOS 7/8 GRUB2):
- grubby --update-kernel=ALL --args=“elevator=noop”
- 注意:部分新内核忽略内核命令行 elevator 参数,优先使用 /sys/block 接口
- 适用场景建议:
- SSD/NVMe/虚拟化:NOOP(或 mq-deadline)
- HDD 高并发/数据库:Deadline
- 通用桌面/交互负载:CFQ(已逐步弱化)
- 队列与预读(按设备调整):
- 队列深度:echo 256 > /sys/block/sda/queue/nr_requests(默认常见为 128)
- 预读:blockdev --setra 512 /dev/sda 或 echo 256 > /sys/block/sda/queue/read_ahead_kb
- 说明:CFQ 支持 ionice 做 I/O 优先级;NOOP/CFQ 不支持 ionice。
四 文件系统与挂载选项
- 文件系统选择(重负载/大文件/海量小文件优先 XFS;通用稳定可选 EXT4):
- XFS:动态 inode、并行日志、对大文件/高并发更友好
- EXT4:稳定性成熟、工具链完善
- 挂载选项(减少不必要元数据开销):
- 通用:defaults,noatime,nodiratime
- 日志策略:XFS 可用 data=writeback(权衡一致性,需业务允许)
- 对齐与格式化(SSD/NVMe 强烈建议 4K 对齐):
- 分区对齐:parted /dev/sdX --align optimal
- XFS:mkfs.xfs -f -s size=4096 /dev/sdX
- EXT4:mkfs.ext4 -E stride=16,stripe_width=16 /dev/sdX(视条带参数而定)
- TRIM(SSD 定期执行,建议每周一次):
- 注意:修改文件系统与挂载选项涉及数据风险,务必先备份并离线验证。
五 硬件与阵列层优化
- RAID 控制器:启用 WriteBack 缓存并配置 BBU(或超级电容)保护,可显著提升写吞吐;无电池保护不建议开启 WB。
- 条带与对齐:RAID 条带大小与文件系统 stride/stripe_width 对齐,减少跨条带写放大。
- NVMe 队列亲和性(多队列设备):echo 1 > /sys/block/nvme0n1/queue/rq_affinity(提升中断与队列利用)
- 存储网络(iSCSI/FCoE):确保 MTU=9000(jumbo frame)、多路径(multipath)与队列深度匹配,降低时延波动。