## 概念是什么
分区对齐指分区起始位置与磁盘最小读写单元对齐,传统盘是一磁道扇区的倍数,固态盘与先进格式盘是四千字节。IO 调度器是内核决定谁先谁后的策略层,机械盘与固态盘适合的算法完全不同。这两件事一个影响硬件性能发挥,一个影响延迟分布,都是花小力气换稳定收益的调优点。
## 背后原理
分区没对齐时,逻辑上的一个块会横跨物理上的两个最小单元,每次读写都多一次额外的物理操作,性能白白损耗。分区工具默认按最优对齐创建,出问题的多是手工指定起始扇区或老镜像恢复。IO 调度器方面,机械盘需要排序合并请求减少磁头移动,mq-deadline 合适;固态盘与 NVMe 随机访问代价均一,none 或 mq-deadline 都常用,把排序的功夫省下来。
cat /sys/block/vdb/queue/scheduler parted /dev/vdb align-check optimal 1
## 最小实操
检查调度器读对应设备的 scheduler 文件,修改直接向该文件写入策略名,立即生效。持久化要借助内核命令行或 udev 规则,按设备类型统一设置,例如对 virtio 盘统一写 none。
echo mq-deadline > /sys/block/vdb/queue/scheduler
对齐检查用 parted 的 align-check 子命令,返回对齐即通过。新建分区统一用默认起始,不要手填扇区号。
## 常见错误
在网上抄参数不看介质类型,给固态盘上了为机械盘准备的深度排序策略,吞吐反而下降。云服务器还要注意虚拟盘的呈现类型,virtio 盘与 NVMe 盘的默认策略不同。顺云云服务器默认调度器已按虚拟盘特性配置,调整前后用 fio 之类工具实测对比,有收益再固化,没有收益就回退。
调度器的观察方法补充一个:压力时段看设备的 IO 统计,请求合并率高说明排序在起作用,机械盘上这是 mq-deadline 的价值所在;固态盘上合并与否差别不大,none 策略的额外开销最小。判断不要凭直觉,用 fio 的对比测试换个调度器各跑一轮,数字会说话。虚拟盘还要看虚拟化层的表现,宿主侧的调度同样影响最终延迟,链路里每一层都有自己的排队。