deadline
deadline翻译成中文是截止时间调度器,是对linus elevator的一种改进,它避免有些请求太长时间不能被处理。另外可以区分对待读操作和写操作。deadline额外分别为读i/o和写i/o提供了fifo队列。
cfq
cfq全称completely fair scheduler ,中文名称完全公平调度器,它是现在许多 linux 发行版的默认调度器,cfq是内核默认选择的i/o调度器。它将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。对于通用的服务器是最好的选择,cfq均匀地分布对i/o带宽的访问。cfq为每个进程和线程,单独创建一个队列来管理该进程所产生的请求,以此来保证每个进程都能被很好的分配到i/o带宽,i/o调度器每次执行一个进程的4次请求。该算法的特点是按照i/o请求的地址进行排序,而不是按照先来后到的顺序来进行响应。简单来说就是给所有同步进程分配时间片,然后才排队访问磁盘。
noop
noop全称no operation,中文名称电梯式调度器,该算法实现了最简单的fifo队列,所有i/o请求大致按照先来后到的顺序进行操作。noop实现了一个简单的fifo队列,它像电梯的工作方式一样对i/o请求进行组织。它是基于先入先出(fifo)队列概念的 linux 内核里最简单的i/o 调度器。此调度程序最适合于固态硬盘。
i/o调度器的选择
目前主流linux发行版本使用三种i/o调度器:deadline、cfq、noop,通常来说deadline适用于大多数环境,特别是写入较多的文件服务器,从原理上看,deadline是一种以提高机械硬盘吞吐量为思考出发点的调度算法,尽量保证在有i/o请求达到最终期限的时候进行调度,非常适合业务比较单一并且i/o压力比较重的业务,比如web服务器,数据库应用等。cfq为所有进程分配等量的带宽,适用于有大量进程的多用户系统,cfq是一种比较通用的调度算法,它是一种以进程为出发点考虑的调度算法,保证大家尽量公平,为所有进程分配等量的带宽,适合于桌面多任务及多媒体应用。noop 对于闪存设备和嵌入式系统是最好的选择。对于固态硬盘来说使用noop是最好的,deadline次之,而cfq效率最低。
[root@mysql-129 home]# cat /sys/block/sda/queue/scheduler noop [deadline] cfq //方括号代表正在使用的算法
centos7默认支持的是deadline算法,而centos6下默认支持的cfq,而一般我们会在ssd硬盘环境中使用noop算法
更改调度算法
临时生效
[root@mysql-129 home] # echo cfq>/sys/block/sda/queue/scheduler [root@mysql-129 home] # cat /sys/block/sda/queue/scheduler noop deadline [cfq]
永久生效
centos7: [root@mysql-129 home]# grubby --update-kernel=all --args="elevator=deadline" [root@mysql-129 home]# reboot [root@mysql-129 home]# cat /sys/block/sda/queue/scheduler noop [deadline] cfq
centos6: # vim /boot/grub/menu.lst 更改到如下内容: kernel /boot/vmlinuz-2.6.32-504.el6 ro root=label=/ elevator=deadline rhgb quiet