大家都知道购买了VPS云主机后,使用自带的CentOS镜像或者Debian镜像,然后安装建站环境等,高级一点的话知道更新内核,安装BBR加速等进行VPS的性能或网络的优化。今天搬主题主要介绍一下通过调整Linux I/O调度器优化VPS读写性能。
什么是I/O调度器
目前主流的Linux发行版本一般提供以下三种I/O调度器,下面进行简单的介绍:
CFQ
CFQ全称Completely Fair Scheduler
,中文名称完全公平调度器,它是目前多数Linux发行版默认使用的调度器,其由内核默认选择。CFQ将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。对于通用的服务器是最好的选择,CFQ均匀地分布对I/O带宽的访问。CFQ为每个进程和线程,单独创建一个队列来管理该进程所产生的请求,以此来保证每个进程都能被很好的分配到I/O带宽,I/O调度器每次执行一个进程的4次请求。该算法的特点是按照I/O请求的地址进行排序,而不是按照先来后到的顺序来进行响应。简单来说就是给所有同步进程分配时间片,然后才排队访问磁盘。
DeadLine
Deadline为截止时间调度器,是对Linus Elevator的一种改进(在2.4内核中使用的第一种I/O调度器。主要作用是为每个设备维护一个查询请求,当内核收到一个新请求时,如果能合并就合并。如果不能合并,就会尝试排序。如果既不能合并,也没有合适的位置插入,就放到请求队列的最后),可以避免有些请求太长时间不能被处理,并可以区分对待读操作和写操作。Deadline分别额外为读I/O和写I/O提供了FIFO队列。
在Debian9系统下,如果使用官方提供的4.16版本内核,将会同时默认启用mq-deadline
,其可以并行执行I/O调度,提高执行效率。
NOOP
NOOP全称No Operation
,中文名称电梯式调度器,其实现了最简单的FIFO队列,所有I/O请求大致按照先来后到的顺序进行操作。NOOP实现了一个简单的FIFO队列,像电梯的工作主法一样对I/O请求进行组织。它是基于先入先出(FIFO)队列概念的Linux内核里最简单的I/O调度器。此调度程序比较适合固态硬盘。
查看使用的I/O调度器
先查看系统支持的I/O调度器:使用命令
dmesg | grep -i scheduler
如下图
[ 0.055544] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[ 0.218701] io scheduler mq-deadline registered
[ 0.218703] io scheduler kyber registered
[ 0.218753] io scheduler bfq registered
如图,可以看到有3个调度器,分别是mq-deadline、kyber、bfq
再查看自己VPS云主机的硬盘
fdisk -l
得知自己的硬盘名称为vda,然后再查自己目前的硬盘使用的I/O调度器:
cat /sys/block/vda/queue/scheduler
[mq-deadline] kyber bfq none
结果显示,mq-deadline是此硬盘使用的I/O调度器。
注意,此命令在VPS上可能无法执行。
修改使用的I/O调度器
修改Linux的调度器十分简单,可以通过shell
命令或者修改grub
配置文件来达到目的。这里先说答案:
如果是VPS,硬盘是SSD的,建议把I/O调度器修改为none或mq-deadline,如果是HDD普通硬盘的话,那就改为bfq。通过下面的方法进行修改
Shell
此方法可以随时更改I/O调度器而无需重启计算机。
echo deadline > /sys/block/vda/queue/scheduler
注意,此命令在VPS上可能无法执行。
GRUB
此方法将永久修改默认的I/O调度器,与使用shell命令的临时修改不同,系统重启后,修改的调度器不会失效。 修改/etc/default/grub
,在GRUB_CMDLINE_LINUX
内增加:
elevator=none
保存之后执行update-grub
命令,然后重启计算机即可。如果是CentOS 7的话,保存方式如下
[root@ION2 ~]# sudo readlink -e /etc/grub2.cfg
/boot/grub2/grub.cfg
[root@ION2 ~]# sudo grub2-mkconfig --output /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.16.7
Found initrd image: /boot/initramfs-5.16.7.img
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-96cdfb16f9c7495ebbd1cf755fca0865
Found initrd image: /boot/initramfs-0-rescue-96cdfb16f9c7495ebbd1cf755fca0865.img
Found linux image: /boot/vmlinuz-0-rescue-0a0a3679cc2ae8d3279cb44b6d541c79
Found initrd image: /boot/initramfs-0-rescue-0a0a3679cc2ae8d3279cb44b6d541c79.img
done
技术参考文章:
https://documentation.suse.com/zh-cn/sled/15-SP3/html/SLED-all/cha-tuning-io.html
https://www.phoronix.com/scan.php?page=article&item=linux-56-nvme&num=1
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容