具体调整 /sys/block/device/queue/scheduler
目前Linux版本主要支持3种调度机制:
CFQ,完全公平队列调度。
早期Linux 内核的默认调度算法,它给每个进程分配一个调度队列,默认以时间片和请求数限定的方式分配IO资源,以此保证每个进程的 IO 资源占用是公平的。这个算法在IO压力大,且IO主要集中在某几个进程的时候,性能不太友好。
DeadLine,最终期限调度。
这个调度算法维护了4个队列,读队列,写队列,超时读队列和超时写队列。当内核收到一个新请求时,如果能合并就合并,如果不能合并,就会尝试排序。如果既不能合并,也没有合适的位置插入,就放到读或写队列的最后。一定时间后, I/O调度器会将读或写队列的请求分别放到超时读队列或者超时写队列。这个算法并不限制每个进程的IO资源,适合IO压力大且IO集中在某几个进程的场景,比如大数据、数据库使用HDD磁盘的场景。
NOOP,也叫NONE,是一种简单的FIFO调度策略。
因为固态硬盘支持随机读写,所以固态硬盘可以选择这总最简单的调度策略,性能最好。
目前机械盘 SDA 选用 DeadLine 固态盘 SSD 选用 NOOP 云上宿主机都是NOOP
临时生效的方法
echo deadline > /sys/block/sda/queue/scheduler
永久生效的方法
grubby --update-kernel=ALL --args="elevator=deadline"
reboot
-------------------------------------------------------------------------------------------------------------------------------
echo 512 > /sys/block/sda/queue/nr_requests (默认值是128)
有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。