Linux I/O调度器(Linux I/O Scheduler)Linux内核中的一个组成部分,是LinuxI/O体系的一个组件,它介于通用块层和块设备驱动程序之间,可以通过调整调度器来优化系统性能。
1.调度算法说明
目前 Linux 上主要有如下几种 I/O 调度算法:
- noop(No Operation) : noop称为电梯调度算法,是基于FIFO队列实现的。所有的请求都是先进先出的,因为SSD的随机读、随机写速度快,因此该算法适合SSD硬盘。
- cfq(Completely Fair Scheduler ) :完全公平调度器。进程平均使用IO带宽。cfq称为绝对公平调度算法,为每个进程及线程单独创建一个队列来管理IO请求,起到每个进程和线程均匀分布IO的效果。此算法适用于通用服务器,centos6中为默认的IO调度算法。
- Deadline : 针对延迟的调度器,每一个 I/O,都有一个最晚执行时间。Deadline在机械盘的情况下对数据库环境(ORACLE RAC,MySQL等)是最好的选择。cfq称为绝对公平调度算法,为每个进程及线程单独创建一个队列来管理IO请求,起到每个进程和线程均匀分布IO的效果。此算法适用于通用服务器,centos6中为默认的IO调度算法。
2.查看和修改调度算法
在Linux 7中有如下类型:
[dave@www.cndba.cn www]# dmesg | grep -i scheduler
[ 1.307640] io scheduler noop registered
[ 1.308944] io scheduler deadline registered (default)
[ 1.310445] io scheduler cfq registered
[ 1.311733] io scheduler mq-deadline registered
[ 1.313133] io scheduler kyber registered
[dave@www.cndba.cn www]#
在Linux 6中有如下类型:
[dave@www.cndba.cn www]# dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
这里要注意,CentOS 7.x中默认支持的是deadline算法,CentOS 6.x下默认支持的cfq算法。
当然也可以查看和修改每个磁盘的IO Scheduler。
[root@hf-172-31-101-17 ~]# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
[root@hf-172-31-101-17 ~]#
临时修改为noop算法
[dave@www.cndba.cn ~]# echo 'noop' >/sys/block/sda/queue/scheduler
[dave@www.cndba.cn ~]# cat /sys/block/sda/queue/scheduler
[noop] deadline cfq
临时修改为cfq算法
[dave@www.cndba.cn ~]# echo 'cfq' >/sys/block/sda/queue/scheduler
[dave@www.cndba.cn ~]# cat /sys/block/sda/queue/scheduler
noop deadline [cfq]
永久生效的方法
CentOS 7.x
#grubby --update-kernel=ALL --args="elevator=deadline"
#reboot
#cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
CentOS 6.x
vim /boot/grub/menu.lst 或vim /boot/grub/grub.conf
更改如下内容
kernel /boot/vmlinuz.......... elevator=deadline rhgb quiet
3.性能压测数据对比
根据前面的说明,简单的说就是:
- SSD盘使用: noop/deadline
- SAS盘: deadline
因为在CentOS 7 以后默认就是deadline,所以在linux 7以后基本可以不用调整,但在Linux 6中还是需要注意下IO Scheduler。
如下是基于SSD 对MySQL进行sysbench 进行压力测试的一个结果,可以看出在SSD盘情况下选择noop磁盘IO调度算法确实最优的。
算法 | IOPS | 磁盘写速度 | IOPS | 磁盘读速度 | oltp_write_only | oltp_read_only |
---|---|---|---|---|---|---|
deadline | 6935.37 | 118.37MiB/s | 7956.88 | 124.33MiB/s | TPS为491.43 ,查询次数为2948.62 | TPS为393.13 ,查询次数为6290.13 |
noop | 7057.60 | 110.27MiB/s | 8399.89 | 131.25MiB/s | TPS为 544.38 ,查询次数为3266.28 | TPS为 379.97,查询次数为6079.59 |
cfq | 6614.37 | 103.35MiB/s | 7481.39 | 116.90MiB/s | TPS为498.54 ,查询次数为2991.25 | TPS为 344.66,查询次数为5514.58 |
版权声明:本文为博主原创文章,未经博主允许不得转载。
- 上一篇:Oracle 示例 用户 安装
- 下一篇:openGauss 创建 测试库 SQL