0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux IO系统简介和调度器的工作流程详细概述

C语言专家集中营 来源:未知 作者:易水寒 2018-05-27 10:41 次阅读

Linux I/O 系统简介

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

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

Linux IO系统简介和调度器的工作流程详细概述

当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的工作流程

Linux IO系统简介和调度器的工作流程详细概述

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的工作流程

Linux IO系统简介和调度器的工作流程详细概述

5 NOOP

NOOP全称No Operation,中文名称电梯式调度器,该算法实现了最简单的FIFO队列,所有I/O请求大致按照先来后到的顺序进行操作。NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织。它是基于先入先出(FIFO)队列概念的 Linux 内核里最简单的I/O 调度器。此调度程序最适合于固态硬盘。NOOP的工作流程如图4 所示。

图4 NOOP的工作流程

I/O调度器的选择

目前主流Linux发行版本使用三种I/O调度器:DeadLine、CFQ、NOOP,通常来说Deadline适用于大多数环境,特别是写入较多的文件服务器,从原理上看,DeadLine是一种以提高机械硬盘吞吐量为思考出发点的调度算法,尽量保证在有I/O请求达到最终期限的时候进行调度,非常适合业务比较单一并且I/O压力比较重的业务,比如Web服务器,数据库应用等。CFQ 为所有进程分配等量的带宽,适用于有大量进程的多用户系统,CFQ是一种比较通用的调度算法,它是一种以进程为出发点考虑的调度算法,保证大家尽量公平,为所有进程分配等量的带宽,适合于桌面多任务及多媒体应用。NOOP 对于闪存设备和嵌入式系统是最好的选择。对于固态硬盘来说使用NOOP是最好的,DeadLine次之,而CFQ效率最低。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IO
    IO
    +关注

    关注

    0

    文章

    435

    浏览量

    39077
  • Linux系统
    +关注

    关注

    4

    文章

    591

    浏览量

    27353
  • 调度器
    +关注

    关注

    0

    文章

    98

    浏览量

    5238

原文标题:调整 Linux I/O 调度器优化系统性能

文章出处:【微信号:C_Expert,微信公众号:C语言专家集中营】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入探讨Linux的进程调度

    ,以及其运行的顺序。这篇文章将详细探讨Linux进程调度工作原理、主要算法、调度策略以及其在
    的头像 发表于 08-13 13:36 893次阅读
    深入探讨<b class='flag-5'>Linux</b>的进程<b class='flag-5'>调度</b><b class='flag-5'>器</b>

    AndroidWifi工作流程

    AndroidWifi工作流程
    发表于 11-02 10:52

    Linux系统调度简介

    系统资源的使用,提高系统使用效率。  Linux内核中实现了Scheduler Classes,来实现多个调度类(Scheduler class)的协同
    发表于 01-18 14:12

    AndroidWifi工作流程

    AndroidWifi工作流程
    发表于 09-25 11:17

    AndroidWifi工作流程

    AndroidWifi工作流程
    发表于 11-08 09:07

    数字式雷达信号处理系统工作原理是什么?基本工作流程有哪些?

    数字式雷达信号处理系统组成及工作原理是什么?数字式雷达信号处理的基本工作流程有哪些?
    发表于 04-21 06:36

    保存FLASH工作流程写数据流程

    STM32F407HAL用FLASH写掉点保存FLASH工作流程写数据流程:Flash解锁——擦除扇区——写数据到指定空间——上锁写保护;读数据流程:从指定地址读出指定长度数据。源文件flash.c
    发表于 08-23 07:02

    Linux 2.6进程调度

    分析了与Linux 2.6 进程调度密切相关的一些重要数据结构,详细描述了进程调度的时机、调度的策略和
    发表于 06-13 10:13 11次下载

    SIwave 3.0 工作流程简介

    SIwave 3.0 工作流程简介  一、PCB 文件调入 SIwave 3.0(两种方式) :     Allegro版本为 15.2。   1.运行 allegro 的 AnsoftLaunch SIwave 菜单,如
    发表于 04-05 06:43 47次下载

    测试工程师工作流程有哪些

    测试工程师的工作流程,与公司的整体工作流程,项目的测试要求等因素相关。本文主要讨论测试工程师的一般工作流程
    的头像 发表于 10-03 16:56 7675次阅读

    雷电的4K工作流程

    在4K的雷电工作流程
    的头像 发表于 05-31 11:20 2402次阅读

    英创信息技术Linux系统调度简介

    系统资源的使用,提高系统使用效率。 Linux内核中实现了Scheduler Classes,来实现多个调度类(Scheduler class)的协同
    的头像 发表于 02-05 10:31 1214次阅读
    英创信息技术<b class='flag-5'>Linux</b><b class='flag-5'>系统</b><b class='flag-5'>调度</b><b class='flag-5'>简介</b>

    工作流程图怎么用?有哪些绘制工作流程图的软件

    工作流程图是清晰地展示工作中各个环节的流程图图示,主要用于工作活动和效率的管理。工作流程图这种图示方法具有直观描述性、简洁性、可操作性和指导
    的头像 发表于 07-28 14:22 3510次阅读

    机器视觉系统的组成及工作流程

    机器视觉系统的组成及工作流程介绍。
    发表于 04-19 15:24 16次下载

    一套完整的机器视觉系统工作流程有哪些?

    机器视觉系统工作流程
    的头像 发表于 06-06 15:17 2853次阅读
    一套完整的机器视觉<b class='flag-5'>系统</b>的<b class='flag-5'>工作流程</b>有哪些?