cat /sys/block/sd[bc]/queue/scheduler
[mq-deadline] kyber bfq none
请问磁盘类型是sdb, 这个mq-deadline需要修改成none吧?
[mq-deadline] kyber bfq none
请问磁盘类型是sdb, 这个mq-deadline需要修改成none吧?
测试环境,随便玩玩就好
sdb是什么,调度类型是根据磁盘类型来的,ssd的tidb建议none,机械盘就是deadline。
TiKV 底层是 RocksDB,自己已经做了写限流和 IO 调度;SSD 没有寻道时间,块层再做请求合并、排队排序没有收益,反而多一层延迟。TiDB 官方部署建议里,SSD 盘的 IO 调度器就是 none(老内核叫 noop),HDD 才用 deadline。
文档写的是SD或VD设备都统一改用noop
建议先确认下磁盘类型,如果是NVMe SSD,改成none确实能减少一层调度开销,性能会好一些。但如果是普通SATA/SAS SSD,mq-deadline其实也够用,差距不大。
改的话可以这样:
echo none > /sys/block/sdb/queue/scheduler
echo none > /sys/block/sdc/queue/scheduler
不过要注意这是临时生效,重启就没了。
官方文档写的摸零两可,没写明白,小学生写的文档。
按官方文档说的就是sd或vd类接口硬盘统一修改为none
对,SSD 就改成 none:
# 先确认是 SSD(ROTA=0)
lsblk -d -o NAME,ROTA
# 临时改
echo none > /sys/block/sdb/queue/scheduler
# 永久改(写 udev 规则)
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"' > /etc/udev/rules.d/60-iosched.rules
udevadm control --reload && udevadm trigger
机械盘就保留 mq-deadline 别改。sdc 如果是 SSD 也一起改。
调度模式是根据磁盘介质类型来设置的
如果是普通的sata磁盘或普通+固态缓存混合磁盘,这种设置为none不知道有没有影响,按文档的意思是统一设置为none。
tidb文档真的是写的不明不白,不敢恭维,从来也不修正错误,就像没有错误一样。
ssd的tidb建议none,机械盘就是deadline
混合盘 rotational 报的是 1,块层按机械盘对待,直接改 none 随机读延迟会抖. 别照文档拍脑袋,fio 跑 4k randread 比 iops 和 p99 再定。NVMe 其实只有 none 可选,真要调收益更大的是 queue/nr_requests 和 read_ahead_kb。
建议设置为none,现在数据盘普遍是SSD的,另外,sdb不是磁盘类型,只是磁盘分区。
机械盘留mq-deadline就行,none是给ssd的