" 目录:RHCA+ -> 13 系统调优 -> 10 IO调度算法 "

随机读取时,大量时间移动磁头,移动过程浪费了时间;而顺序读取没有大量寻址时间,所以速度会更快;IO调度算法就是合并相近的IO请求,减少寻址时间
一、电梯算法,FIFO队列
noop
红帽7
对请求做简单的排序后,合并临近IO请求存储;按先后顺序执行IO
ceph集群中,SSD磁盘推荐使用
none
红帽8改进
无任何调优参数,本质上不做调优
因为调度是为了合并IO,减少寻址时间,而使用固态硬盘情况下,不用磁头寻址,所以固态盘适用此算法,还能减少算法消耗的cpu时间
二、完全公平调度器
cfq(Completely Fair Scheduler)
红帽7(默认调度算法)
为每个进程和线程单独创建一个队列,并为每个队列分配时间片,排队依次公平地访问存储;按IO请求地址
ceph集群中,适合多个进程同时读写磁盘,且请求大小不同;多任务处理,办公多窗口等场景
bfq
红帽8改进
三、截止时间调度算法,尽力而为地保障请求时延
deadline:单队列截止时间调度算法
红帽7
为读IO(最大等待时间500ms)和写IO(最大等待时间5s)分配不同的FIFO队列,将提交时间相近的请求放到同一批,当队列满或达到最大等待时间,则进行IO合并再写盘
读写分离,且读更优先;减少磁盘抖动,保障IO最大等待时间在可控范围内;单队列
ceph集群中,sata和sas建议使用
mq-deadline:多队列截止时间调度算法
红帽8改进(默认调度算法)
适合高并发的web服务、数据库,但IO小
四、令牌环
kyber
给每一个请求一个令牌(时间片),当IO的令牌消耗完后,不管是否处理完,由下一个由令牌的请求进行IO操作,未执行完的请求再次等待被分配令牌
较少使用此算法
root@wuzuniao \~# dmesg | grep -I scheduler #查看当前系统支持的调度算法
0.100093 rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
0.422262 io scheduler mq-deadline registered
0.422264 io scheduler kyber registered
0.422347 io scheduler bfq registered
root@wuzuniao \~# cat /sys/block/sda/queue/scheduler #查看指定磁盘使用的调度算法;默认算法mq-deadline
mq-deadline kyber bfq none
root@wuzuniao \~# ll /sys/block/sda/queue/iosched/ #查看当前算法所支持的参数
总用量 0
-rw-r--r--. 1 root root 4096 7月 8 21:27 fifo_batch #一次性处理多少IO,默认16
-rw-r--r--. 1 root root 4096 7月 8 21:27 front_merges #是否进行IO合并,默认为1合并
-rw-r--r--. 1 root root 4096 7月 8 21:27 read_expire #读过期时间
-rw-r--r--. 1 root root 4096 7月 8 21:27 write_expire #写过期时间
-rw-r--r--. 1 root root 4096 7月 8 21:27 writes_starved
root@wuzuniao \~# echo bfq > /sys/block/sda/queue/scheduler #修改算法
root@wuzuniao \~# cat /sys/block/sda/queue/scheduler #再次查看,可以看到算法已变更
mq-deadline kyber bfq none
root@wuzuniao \~# ll /sys/block/sda/queue/iosched/ #看到算法对应的可调参数已发生变更
总用量 0
-rw-r--r--. 1 root root 4096 7月 8 21:28 back_seek_max
-rw-r--r--. 1 root root 4096 7月 8 21:28 back_seek_penalty
-rw-r--r--. 1 root root 4096 7月 8 21:28 fifo_expire_async
-rw-r--r--. 1 root root 4096 7月 8 21:28 fifo_expire_sync
-rw-r--r--. 1 root root 4096 7月 8 21:28 low_latency
-rw-r--r--. 1 root root 4096 7月 8 21:28 max_budget
-rw-r--r--. 1 root root 4096 7月 8 21:28 slice_idle
-rw-r--r--. 1 root root 4096 7月 8 21:28 slice_idle_us
-rw-r--r--. 1 root root 4096 7月 8 21:28 strict_guarantees
-rw-r--r--. 1 root root 4096 7月 8 21:28 timeout_sync
root@wuzuniao \~#