Linux I/O调度器是什么

36次阅读
没有评论

共计 3526 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要介绍 Linux I/ O 调度器是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Linux I/O 调度器是 Linux 内核中的一个组成部分,用户可以通过调整这个调度器来优化系统性能。

Linux I/O 系统简介

Linux I/ O 调度器 (Linux I/O Scheduler) 是 LinuxI/ O 体系的一个组件,它介于通用块层和块设备驱动程序之间。如图 1   所示。

图 1 Linux I/ O 调度器介于通用块层和块设备驱动程序之间

当 Linux 内核组件要读写一些数据时,并不是请求一发出,内核便立即执行该请求,而是将其推迟执行。当传输一个新数据块时,内核需要检查它能否通过。Linux  IO 调度程序是介于通用块层和块设备驱动程序之间,所以它接收来自通用块层的请求,试图合并请求,并找到最合适的请求下发到块设备驱动程序中。之后块设备驱动程序会调用一个函数来响应这个请求。

Linux 整体 I / O 体系可以分为七层,它们分别是:

1. VFS 虚拟文件系统:内核要跟多种文件系统打交道,内核抽象了这 VFS,专门用来适配各种文件系统,并对外提供统一操作接口。

2.   磁盘缓存:磁盘缓存是一种将磁盘上的一些数据保留着 RAM 中的软件机制,这使得对这部分数据的访问可以得到更快的响应。磁盘缓存在 Linux 中有三种类型:Dentry  cache,Page cache,Buffer cache。

3. 映射层:内核从块设备上读取数据,这样内核就必须确定数据在物理设备上的位置,这由映射层 (Mapping Layer) 来完成。

4.   通用块层:由于绝大多数情况的 I / O 操作是跟块设备打交道,所以 Linux 在此提供了一个类似 vfs 层的块设备操作抽象层。下层对接各种不同属性的块设备,对上提供统一的 Block  IO 请求标准。

5. I/ O 调度层:大多数的块设备都是磁盘设备,所以有必要根据这类设备的特点以及应用特点来设置一些不同的调度器。

6. 块设备驱动:块设备驱动对外提供高级的设备操作接口。

7. 物理硬盘:这层就是具体的物理设备。

5 种类型的 Linux I/ O 调度器

Linux 从 2.4 内核开始支持 I / O 调度器, 到目前为止有 5 种类型:Linux 2.4 内核的 Linus Elevator、Linux 2.6 内核的  Deadline、Anticipatory、CFQ、Noop,其中 Anticipatory 从 Linux  2.6.33 版本后被删除了。目前主流的 Linux 发行版本使用 Deadline、CFQ、Noop 三种 I / O 调度器。下面依次简单介绍:

1 Linus Elevator

在 2.4   内核中它是第一种 I / O 调度器。它的主要作用是为每个设备维护一个查询请求,当内核收到一个新请求时,如果能合并就合并。如果不能合并,就会尝试排序。如果既不能合并,也没有合适的位置插入,就放到请求队列的最后。

2 Anticipatory

Anticipatory 的中文含义是 预料的,预想的,顾名思义有个 I / O 发生的时候,如果又有进程请求 I / O 操作,则将产生一个默认的 6 毫秒猜测时间,猜测下一个进程请求 I / O 是要干什么的。这个 I / O 调度器对读操作优化服务时间,在提供一个 I / O 的时候进行短时间等待,使进程能够提交到另外的 I /O。Anticipatory 算法从 Linux  2.6.33 版本后被删除了,因为使用 CFQ 通过配置也能达到 Anticipatory 的效果。

3 DeadLine

Deadline 翻译成中文是截止时间调度器,是对 Linus  Elevator 的一种改进,它避免有些请求太长时间不能被处理。另外可以区分对待读操作和写操作。DEADLINE 额外分别为读 I / O 和写 I / O 提供了 FIFO 队列。Deadline 的工作流程如图  2 所示。

图 2 Deadline 的工作流程

4 CFQ

CFQ 全称 Completely Fair Scheduler,中文名称完全公平调度器,它是现在许多 Linux   发行版的默认调度器,CFQ 是内核默认选择的 I / O 调度器。它将由进程提交的同步请求放到多个进程队列中,然后为每个队列分配时间片以访问磁盘。对于通用的服务器是最好的选择,CFQ 均匀地分布对 I / O 带宽的访问。CFQ 为每个进程和线程, 单独创建一个队列来管理该进程所产生的请求, 以此来保证每个进程都能被很好的分配到 I / O 带宽,I/ O 调度器每次执行一个进程的 4 次请求。该算法的特点是按照 I / O 请求的地址进行排序,而不是按照先来后到的顺序来进行响应。简单来说就是给所有同步进程分配时间片,然后才排队访问磁盘,CFQ 的工作流程如图  3 所示。

图 3 CFQ 的工作流程

5 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 效率最低。

查看 Linux 系统的 I/ O 调度器

查看 Linux 系统的 I / O 调度器一般分成两个部分,一个是查看 Linux 系统整体使用的 I / O 调度器,另一个是查看某磁盘使用的 I / O 调度器。

查看当前系统支持的 I / O 调度器,使用如下命令:

# dmesg | grep -i scheduler [ 1.508820] io scheduler noop registered [ 1.508827] io scheduler deadline registered [ 1.508850] io scheduler cfq registered (default)

显示 cfq 是目前的 I / O 调度器。

查看某块硬盘的 IO 调度算法 I / O 调度器,使用如下命令:

# cat /sys/block/sda/queue/scheduler noop deadline [cfq]

显示当前使用的调度器是 cfq,就是括号括起来的那一个。

修改 Linux 系统的 I/ O 调度器

修改 Linux 系统的 I/ O 调度器有三种方法,分别是使用 shell 命令、使用 grubby 命令或者修改 grub 配置文件。下面依次介绍:

1、使用 shell 命令

Linux 下更改的 I / O 调度器很简单。不需要更新内核,可以使用 shell 命令修改:

#echo noop   /sys/block/sdb/queue/scheduler

清单 3 的命令把 noop 设置为一个磁盘的 I / O 调度器,你可以随时更改而无需重启计算机。

2、永久修改默认的 I / O 调度器

使用 shell 命令修改 I / O 调度器,只是临时修改,系统重启后,修改的调度器就会失效,要想修改默认的调度器,有两种方法使用 grubby 命令或者直接编辑 grub 配置文件。

使用 grubby 命令

例如需要把 I / O 调度器从 cfq 调整成 DeadLine,命令如下:

# grubby --grub --update-kernel=ALL --args= elevator=deadline

通过设置内核加载参数, 这样当机器重启的时候,系统自动把所有设备的 I/ O 调度器变成 DeadLine。

3、使用编辑器修改配置文件

也可以直接编辑 grub 的配置文件,通过修改 grub 配置文件,系统自动把所有设备的 I/ O 调度器变成 cfq。操作过程如下:

#vi cat /etc/default/grub # 修改第五行,在行尾添加 # elevator= cfq  然后保存文件,重新编译配置文件, #grub2-mkconfig -o /boot/grub2/grub.cfg

重新启动计算机系统即可。

以上是“Linux I/ O 调度器是什么”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-16发表,共计3526字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)