IO调度算法

IO调度算法的选择

一) I/O调度程序的总结

 

 

    1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.

    2) 每个块设备都有它自己的队列.

    3) I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/O操作变为有序的I/O操作.

    4) 内核必须首先确定队列中一共有多少个请求,然后才开始进行调度.

 

 

 

 

二) I/O调度的4种算法

 

    1) CFQ(Completely Fair Queuing, 完全公平排队)

 

    特点:

        在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.

        CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.

        CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择.

        CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级进程的读写不能自动地继承高的I/O优先级.

 

    工作原理:

        CFQ为每个进程/线程单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求.

 

 

    2) NOOP(电梯式调度程序)

 

    特点:

        在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.

        NOOP实现了一个FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.

        NOOP倾向饿死读而利于写.

        NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.

 

    电梯算法饿死读请求的解释:

        因为写请求比读请求更容易.

        写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.

        读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.

 

 

 

    3) Deadline(截止时间调度程序)

 

    特点:

        通过时间以及硬盘区域进行分类,这个分类和合并要求类似于noop的调度程序.

        Deadline确保了在一个截止时间内服务请求,这个截止时间是可调整的,而默认读期限短于写期限.这样就防止了写操作因为不能被读取而饿死的现象.

        Deadline对数据库环境(ORACLE RAC,MYSQL等)是最好的选择.

 

 

    4) AS(预料I/O调度程序)

 

    特点:

        本质上与Deadline一样,但在最后一次读操作后,要等待6ms,才能继续进行对其它I/O请求进行调度.

        可以从应用程序中预订一个新的读请求,改进读操作的执行,但以一些写操作为代价.

        它会在每个6ms中插入新的I/O操作,而会将一些小写入流合并成一个大写入流,用写入延时换取最大的写入吞吐量.

        AS适合于写入较多的环境,比如文件服务器

        AS对数据库环境表现很差.

 

 

 

三) I/O调度方法的查看与设置

 

    1) 查看当前系统的I/O调度

 

        [root@test1 tmp]# cat /sys/block/sda/queue/scheduler 

        noop anticipatory deadline [cfq]

 

    2) 临时更改I/O调度

        例如:想更改到noop电梯调度算法:

        echo noop > /sys/block/sda/queue/scheduler

 

    3) 永久更改I/O调度

        修改内核引导参数,加入elevator=调度程序名

        [root@test1 tmp]# vi /boot/grub/menu.lst

        更改到如下内容:

        kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ elevator=deadline rhgb quiet

 

        重启之后,查看调度方法:

        [root@test1 ~]# cat /sys/block/sda/queue/scheduler 

        noop anticipatory [deadline] cfq 

        已经是deadline了

 

四) ionice

 

    ionice可以更改任务的类型和优先级,不过只有cfq调度程序可以用ionice.

    有三个例子说明ionice的功能:

    采用cfq的实时调度,优先级为7

        ionice -c1 -n7  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&

    采用缺省的磁盘I/O调度,优先级为3

        ionice -c2 -n3  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&

    采用空闲的磁盘调度,优先级为0

        ionice -c3 -n0  -ptime dd if=/dev/sda1 f=/tmp/test bs=2M count=300&

 

    ionice的三种调度方法,实时调度最高,其次是缺省的I/O调度,最后是空闲的磁盘调度.

    ionice的磁盘调度优先级有8种,最高是0,最低是7.

    注意,磁盘调度的优先级与进程nice的优先级没有关系.

    一个是针对进程I/O的优先级,一个是针对进程CPU的优先级.

 

转载于:https://www.cnblogs.com/huangf714/p/5979952.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORA-01555 原因与解决

ORA-01555 原因与解决: 前面提到了ORA-01555错误,那么现在来看一下ORA-01555错误是怎样产生的。由于回滚段是循环使用的,当事务提交以后,该事务占用的回滚段事务会被标记为非活动,回滚段空间可以被覆盖重用。那么一个问…

使用css优雅解决文字两端对齐的方式之一

效果图 HTML <body><div>学校</div><div>班级</div><div>班主任</div><div>上课时间</div><div>名字</div></body>CSS div {margin: 10px 0;width: 70px;border: 1px solid brown;text-align: just…

学习《css世界》笔记之loading三点动画效果

动画实例 HTML <div>正在加载中<span>...</span></div>CSS span {display: inline-block;height: 1em;line-height: 1;text-align: left;vertical-align: -0.25em;/* 属性设置元素的垂直对齐方式。指定为负长度&#xff0c;可以使元素降低 */overfl…

关于今天

今天天气晴朗,晴空万里,万里无云,哈哈... 早上起来的时候,大雾,妖风四起. 然后早上起来居然就玩了一天的 冰封要塞. 说说玩了后的心得吧. 推塔游戏,额,这是CF第一次推出的这种模式.可以说和dota和英雄联盟有些相似.估计是某人从dota和英雄联盟这么火的情况下想出来的这招. 推塔…

学习《css世界》笔记之content自动添加开启闭合符号

实例 HTML <p lang"zh"><q>啦啦德玛西亚</q></p><p lang"en"><q>This book is very good!</q></p><p lang"no"><q>denne bog er fantasisk!</q></p><p class"…

maven+jetty项目在tomcat部署

步骤1&#xff1a;项目打包 clean install 步骤二&#xff1a;拷贝war 包到tomcat下 步骤三&#xff1a;修改server.xml文件的端口 步骤四&#xff1a;启动tomcat,注意jetty的项目是不需要带项目名的&#xff0c;Tomcat的项目需要加上项目名。 温馨提示&#xff0c;在启动tomca…

学习《css世界》笔记之多行文本实现垂直居中

效果图 HTML <div class"box"><div class"content">具有行高实现的多行文字垂直居中效果&#xff0c;需要属性vertical-align帮助</div> </div>CSS .box{width: 200px;line-height: 120px;background-color: #f0f0f0;}.content{…

学习《css世界》笔记之使用vertical-align数值实现文字和小图标对齐

效果图 HTML <p>请选择<i class"icon-arrow"></i></p> <p>请选择<i class"icon-arrow valing-1"></i></p> <p>请选择<i class"icon-arrow valing-2"></i></p>CSS .i…

MS SQL 能否修改实例名称

前几天研究了了一下修改数据库名称的方式后&#xff0c;今天突然冒出一个问题&#xff0c;MS SQL的命名实例是否也可以修改呢&#xff1f;例如下图&#xff0c;我在本机上安装了一个命名实例GSP&#xff0c;如果我想将其改为GSPS&#xff0c;能行吗&#xff1f; 如果可以&#…

MYSQL数据库时间字段INT,TIMESTAMP,DATETIME性能效率比较

from: http://www.piaoyi.org/database/MYSQL-INT-TIMESTAMP-DATETIME.html Author&#xff1a;飘易 Source&#xff1a;飘易 Categories&#xff1a;数据库 PostTime&#xff1a;2016-10-28 13:12:22 正 文&#xff1a; 在数据库设计的时候&#xff0c;我们经常会需要设计时…

学习《css世界》笔记之使用overflow做文字溢出点点点效果

效果图 HTML <p class"p1">qwertyuiopasdfghjklzxcvbnm</p><div class"d1"><p> 冯塘村过去经济较为落后。几年前&#xff0c;镇里以400多年的冯塘古村为基础&#xff0c;引来社会资金投资休闲农庄和共享民宿&#xff0c;把这里建…

Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action

Portal-Basic Java Web应用开发框架&#xff08;简称 Portal-Basic&#xff09;是一套功能完备的高性能Full-Stack Web应用开发框架&#xff0c;内置稳定高效的MVC基础架构和DAO框架&#xff08;已内置Hibernate、MyBatis和JDBC支持&#xff09;&#xff0c;集成 Action拦截、F…

类似No module named 'bs4'等错误的解决方法

from: https://www.cnblogs.com/xisheng/p/7856334.html 最近开始接触爬虫&#xff0c;写了如下源代码&#xff1a; from bs4 import BeautifulSoup import requests urlhttps://www.tripadvisor.cn/Attractions-g60763-Activities-New_York_City_New_York.html wb_datereque…

js中的Object.create(null) 和 {} 的区别

console.log(Object.create(null))console.log({})结果图 根据结果我们不难发现&#xff0c;两者最大区别在于Object.create(null)创建的对象没有继承Object 所有Object.create(null)创建的对象也没有Object提供的方法&#xff0c;是一个非常纯净的对象 ps: Object.create(obj…

java web 中的转发和重定向路径问题

为什么80%的码农都做不了架构师&#xff1f;>>> 假设应用程序的 contextPath 为 /ctx&#xff0c;在 http://localhost:8080/ctx/a/b 资源中&#xff0c;我们转发和重定向到 http://localhost:8080/ctx/x/y 资源&#xff0c;分别应该怎么写&#xff1f; 转发&…

断言assert使用方法

测试代码 console.log(开始)console.assert(true, true)console.assert(false,false)console.log(结束)结果 可以发现&#xff1a; assert方法中&#xff0c;第一个参数是判断条件&#xff0c;当为true时&#xff0c;不执行 。当为false时&#xff0c; 输出后面提示内容 且我们…

AngularJs学习笔记(四)

1、AngularJs中的Module可以包含哪些组件&#xff1f;&#xff08;1&#xff09;value&#xff1a;保存可以在不同的controller之间共享的对象、数据&#xff08;2&#xff09;constant&#xff1a;保存可以在不同的controller之间共享的常量&#xff08;3&#xff09;service&…

[你必须知道的异步编程]——异步编程模型(APM)

本专题概要&#xff1a;引言你知道APM吗&#xff1f;你想知道如何使用异步编程模型编写代码吗&#xff1f;使用委托也可以实现异步编程&#xff0c;你知道否&#xff1f;小结一、引言在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些主要特性&#xff0c;然而.NET 4.5更新…

iOS 10 的一个重要更新-自定义的通知界面

续上篇&#xff0c;在简单闹钟的例子上&#xff0c;在通知界面上显示图片动画&#xff0c;并用通知关联的按钮更新通知界面。介绍 iOS 10 通知 API 的扩展&#xff1a;自定义通知显示界面。 新框架可以统一处理本地通知和远程推送&#xff0c;同时增加了一些新 API 来控制等待中…

[USACO 1.3.3]Calf Flac

o(︶︿︶)o 烦躁&#xff0c;看了半天没看懂这个O(n)的回文串算法是什么东西&#xff0c;直接套上模板就交了。然后AC了 题目&#xff1a; Description 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文。你的工作就是去这些牛…