io调度算法
① 谁有linux i/o 调度算法deadline,anticipatory,noop,cfq中各个调优参数的具体作用。
1.Deadline scheler Deadline scheler 用 deadline 算法保证对于既定的 IO 请求以最小的延迟时间,从这一点理解,对于 DSS 应用应该会是很适合的。
2.Anticipatory scheler(as) 曾经一度是 Linux 2.6 Kernel 的 IO scheler 。Anticipatory 的中文含义是”预料的, 预想的”, 这个词的确揭示了这个算法的特点,简单的说,有个 IO 发生的时候,如果又有进程请求 IO 操作,则将产生一个默认的 6 毫秒猜测时间,猜测下一个 进程请求 IO 是要干什么的。这对于随即读取会造成比较大的延时,对数据库应用很糟糕,而对于 Web Server 等则会表现的不错。这个算法也可以简单理解为面向低速磁盘的,因为那个”猜测”实际上的目的是为了减少磁头移动时间。
3.Completely Fair Queuing 虽然这世界上没有完全公平的事情,但是并不妨碍开源爱好者们设计一个完全公平的 IO 调度算法。Completely Fair Queuing (cfq, 完全公平队列) 在 2.6.18 取代了 Anticipatory scheler 成为 Linux Kernel 默认的 IO scheler 。cfq 对每个进程维护一个 IO 队列,各个进程发来的 IO 请求会被 cfq 以轮循方式处理。也就是对每一个 IO 请求都是公平的。这使得 cfq 很适合离散读的应用(eg: OLTP DB)。我所知道的企业级 Linux 发行版中,SuSE Linux 好像是最先默认用 cfq 的.
4.NOOP Noop 对于 IO 不那么操心,对所有的 IO请求都用 FIFO 队列形式处理,默认认为 IO 不会存在性能问题。这也使得 CPU 也不用那么操心。当然,对于复杂一点的应用类型,使用这个调度器,用户自己就会非常操心。
1.IO 对数据库的影响较大 linux 默认的 IO 调度算法为 cfq 需要修改为 deadline
如果是 SSD 或者 PCIe-SSD 设备 需要修改为 noop
2.由于日志的记录带来的直接性能损耗就是数据库系统中最为昂贵的IO资源
所以默认仅仅打开错误日志即可 关闭其他所有日志 以达到减少 IO 损耗的目的
③ cpu调度的基本方式
我们知道,程序需要获得CPU的资源才能被调度和执行,那么当一个进程由于某种原因放弃CPU然后进入阻塞状态,下一个获得CPU资源去被调度执行的进程会是谁呢?下图中,进程1因为阻塞放弃CPU资源,此时,进程2刚IO操作结束,可以获得CPU资源去被调度,进程3的时间片轮转结束,也同样可以获得CPU资源去被调度,那么,此时的操作系统应该安排哪个进程去获得CPU资源呢?这就涉及到我们操作系统的CPU调度策略了。
根据生活中的例子,我们很容易想到以下两种策略CPU调度的直观想法:1.FIFO谁先进入,先调度谁,这是一种非常简单有效的方法,就好比我们去饭堂打饭,谁先到就给谁先打饭。但是这种策略会遇到一个问题:如果遇到一个很小的任务,但是它是最后进入的,那么必须得前面一大堆任务结束完后才能执行这个小小的任务,这样就感觉很不划算呀!因为我只是简简单单的一个小任务,但是从打开这个任务到结束这个任务要很久。这显然不符合我们的需求,因而我们会想到第2种策略,就是先调度小任务,后调度大任务。2.Priority很简单,就是任务短的优先执行,但是此时又有问题了,任务虽然短,但是它的执行时间不一定短,就好比在一个银行业务中,客户填写一个表,这是一个非常短的任务吧——就单单填个表,但是这个表很长很长,那么这个短任务它的执行时间就很长了,我们怎么知道这个短的任务将来会执行多长的时间呢?所以,这样的策略还是依然有问题。那么,面对诸多的场景,如何设计调度算法呢?首先,我们要明白我们的算法应该让什么更好呢?面对客户:银行调度算法的设计目标应该是用户满意;而面对进程:CPU调度的目标应该是进程满意。那怎么才能让进程满意呢?那就是时间了。进程希望尽早地结束任务,这就是周转时间(从任务到达到任务结束)要短,而且希望用户的操作能够尽快地被响应,这就是响应时间(从操作发生到响应)要短。而且系统内耗时间要少,吞吐量(任务的完成量)要大,系统需要把更多的时间用在任务的执行上,而不能老是去做无关紧要的事情,例如:频繁切换任务,切换栈,分配资源等事情。同时,系统还要去合理地调配任务。那么,CPU的调度策略如何做到合理呢?首先得明白系统中有以下的几种矛盾。1.吞吐量和响应时间之间有矛盾响应时间小=>切换次数多=>系统内耗大=>吞吐量小由于需要较短的响应时间,那么就得频繁地切换任务,这样系统的很多时间都花在切换任务上面了,系统的内耗大了,吞吐量就小了。2.前台任务和后台任务的关注点不同前台任务关注响应时间,后台任务关注周转时间。前台任务例如我们的word文档,我们打一个字,需要立马显示在文档中,这就是word文档这个任务关注的是响应时间;而后台任务中,例如我们的javac编译java代码,它的周转时间要小,即该任务从进入到结束所花的时间要小,即编译完成的时间要小。http://3.IO约束型任务和CPU约束型任务各有各的特点IO约束型任务就是使用CPU的时间较少,进行IO操作的时间较长,CPU约束型的任务就是使用CPU的时间较长。因此,要做到合理,需要折中、综合考虑以上的几种矛盾。由此,产生了一些CPU的调度算法,在下一节我们将重点讲述这些CPU调度算法。
关注小鲸融创,一起深度学习金融科技!
编辑于 2019-12-11 · 着作权归作者所有
赞同 1
评论
展开全部
④ 为什么先来先服务调度算法有利于CPU繁忙型的作业,不利于IO繁忙型的作业
先来先服务的,要是对于IOI型的话,需要经常性的访问内存,这样等待时间比较长,所以适合处理能力高的这样缩短相对时间
⑤ 为什么说传统的调度算法都不能算是公平的调度算法
公平调度器按资源池(pool)来组织作业,并把资源公平的分到这些资源池里。默认情况下,每一个用户拥有一个独立的资源池,以使每个用户都能获得一份等同的集群资源而不管他们提交了多少作业。按用户的 Unix 群组或作业配置(jobconf)属性来设置作业的资源池也是可以的。在每一个资源池内,会使用公平共享(fair sharing)的方法在运行作业之间共享容量(capacity)。用户也可以给予资源池相应的权重,以不按比例的方式共享集群。
除了提供公平共享方法外,公平调度器允许赋给资源池保证(guaranteed)最小共享资源,这个用在确保特定用户、群组或生产应用程序总能获取到足够的资源时是很有用的。当一个资源池包含作业时,它至少能获取到它的最小共享资源,但是当资源池不完全需要它所拥有的保证共享资源时,额外的部分会在其它资源池间进行切分。
主要特点如下:
Ø 支持多用户多队列
Ø 资源公平共享(公平共享量由优先级决定)
Ø 保证最小共享量
Ø 支持时间片抢占
Ø 限制作业并发量,以防止中间数据塞满磁盘
3. 公平调度算法分析
3.1 变量定义
⑥ XFS,WB,nobarrier,noop代表什么意思,XFS知道,后面的谁能解释一下吗
你是看了imysql.cn的测试文章吗?
xfs是文件系统
wb是指raid卡的写策略:回写(write back)
nobarrier是指不使用raid卡上电池
noop是指系统IO调度算法
cat /sys/block/sdb/queue/scheler
noop anticipatory [deadline] cfq
⑦ ( )调度算法有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业(进程)。 A.时间片轮转调度算法 B.先
B.先来先服务调度算法
http://www.kaoyan.com/kaoyan/18/330045/
⑧ 系统当前有4个进程P1,P2,P3,P4 。P1处于运行状态,P2、P3、P4 均处于就绪状态
P1在做I/O,在P1由于I/O阻塞让出cpu;内核调度程序会在内核态根据调度算法找出下一个需要运行的进程,比如P2。则P1的运行环境被保存,运行环境包括进程内存空间,寄存器状态,栈指针SP,页表,然后P2的运行环境被restore,然后P2运行。接下来P3 P4都有可能被调度(如果P2的时间片已经用完),在这一过程中如果P1的io已经完成,在i/o会有中断发给内核,i/o中断处理程序会被调用告诉操作系统i/o已经完成,P1现在的状态就转变为可运行状态,或者就绪状态,可能P1马上就会运行,也可能要等下一次调度
⑨ 以下哪种io调度算法 吞吐量最高
肯定是都可以的,FCFS这种方式不太合适,因为如果有一个程序IO时间长的话就使得其他程序都会“死”掉,轮转和优先级结合起来较好