Linux的IO调度程序
Linux的IO调度机制浅析
现代计算机体系中,磁盘的速度和CPU的速度差距太大了,如果简单的将系统的IO请求按照请求的顺序进行顺序处理的话,系统的IO开销将导致系统的效率十分的低下,因此就需要将IO请求进行合理的安排,Linux系统在这一方面主要通过两种机制实现其一是各种层次的缓存,然后就是IO调度。IO调度的算法和磁盘的寻址原理无法分离,所以先简单看一下磁盘寻址原理,这个百度一下就可以找到很多这里就是简单说下。
磁盘寻址
常见的硬盘都是由许多个盘片组成重叠同心圆盘,每一个磁盘由磁盘、磁轴和读写头组成,要在硬盘上找到一个准确的地址需要磁柱(cylinder)、磁头(head)和扇区(sector)三个坐标这就是CHS寻址。而且现代的磁盘这部分的工作是由硬盘的固件完成的,硬盘固件接受逻辑块号由固件将逻辑块到chs进行一一映射,而操作系统访问采用块编号访问磁盘的特定地址,这就是逻辑块寻址(LBA),并且逻辑块的编号到硬盘CHS的映射往往也是顺序的。
所以起初的IO调度程序主要的任务就是减少磁头移动的距离,就如同一个快递员在城市中派送快递一样,他会安排一个合理的顺序去派件,同一个小区的快件会在一次派件时一起完成。反应在IO调度程序中就是合并和排序。合并就是将一个小区的快递从中转站全部集中来;排序就是对派送顺序的优化安排,就是尽量的减少派送总距离从而提高自己的派送效率。这个原理同电梯的调度相同,所以最早的IO调度算法本称为“电梯算法”。其原理就是保证磁头的线性移动,就像电梯会是 1、3、4、5、8、9或9、7、5、3、2、1 这样的顺序停止,虽然可能3楼的人后按了楼层按键。这个算法有个明显的问题就是如果不停的有新的物理顺序靠前的IO请求到来将导致靠后的请求被长时间的等待。然后就有了新的IO调度程序来解决以上问题以优化性能。
Deadline IO调度
同电梯算法比,此机制保留了IO请求的排序后的IO请求队列,额外的引进了两个队列均按请求时间的前后排序,一个为读请求,一个为写请求。一个新的请求到来时会按顺序的先放到标准队列中合适的位置,而再根据操作类型不同放到新增读写队列其中一个的末尾,读和写队列有着不同的IO请求deadline时间限制,一般读为500ms,写为5秒。然后此时IO调度程序平时行为就如同前面的调度算法一样从标准队列中一个个的按顺序处理,不同的是当读或写队列中任何一个请求deadline时间到来时,就会转而服务这个到期的请求,从而解决电梯算法的“饿着”某些请求的问题。
Anticipatory IO调度
此调度算法也是针对Deadline IO调度算法的一种优化,因为在Linux下读取操作是同步且同步化的,只有前一个读取请求返回了才可以送出下一个读请求,所以deadlineIO调度会有一个糟糕情况就是,当由一系列的物理相关的读请求出现时(从应用分析这种场景还比较常见)就会出现续读写头来回运动的情况,因为当第一个读请求送出并到期IO调度磁头需要先服务于这请求,然后回去继续普通的IO请求,此时与之前的读相邻的第二个读请求又来了,但是此时读写头已经运动回正常队列的请求地址了,然后等这个读请求到期就会发生和第一个读请求一样的情况了,所以如果正常队列的IO请求与当前请求的物理位置差的很远的话,这就是deadline算法的最坏情况,所以就有了Anticipatory IO调度算法,他的机制也很简单,在服务完一个到期的读时进行一个合适的时间等待,如果新提交的读请求来到就可以快速完成读,正如其名是一个预测性质的算法是概率学优化。
CFQ IO调度
称为完全公平调度算法,它为每个进程维护了一个IO请求队列,IO调度程序会以轮询的方式服务每个进程队列的请求,直到时间片用完或者无IO请求,对于后者情况IO调度将等待一个合适的时间(10ms)再无请求到来时进行下一个队列的服务,并且它会使读取请求优先执行,因为进程地址空间对应到物理空间的局部性,这个算法在避免“饿着”某一个IO请求的前提下保证了整体性能。
NOOP IO调度
这是一个针对非机械硬盘寻址机制出现的IO调度算法,比如固态硬盘,因为没有的机械动作的缘故,所以noop IO调度算法仅仅进行IO请求的合并而不进行排序,这种算法的效率简单且高效,但他依赖于物理设备。
查看和设置IO调度算法
IO调度算法的选择可以由内核启动参数传递设置,也可以通过/sys/block/device/queue/scheduler 获取当前IO调度算法和设置选择IO调度算法。除此之外还可以在用户空间优化IO的性能,这一部分就和应用的实现息息相关了,不过也常常就是三种方式,按路径,按inode,按物理块地址,因为常见文件系统会将同一路径的文件保存在物理地址相邻的地址中,Inode和物理块等都是一样的原理,就是将物理地址相邻的请求合并在一起交给内核,从而优化IO性能。
Linux的IO调度程序的更多相关文章
- Linux资源管理-IO优先级
前一篇博客介绍了利用 cgroup 来控制进程的 CPU和内存使用情况, 这次补上使用 cgroup 来控制进程的IO优先级的方法. 前提条件 如果想控制进程的IO优先级, 需要内核的支持, 内核编译 ...
- Linux硬件IO的优化简介
Linux硬件IO的优化简介 首先简单介绍下有哪些硬件设备如下(由于硬件种类厂家等各种因素我就不在此多做介绍有兴趣的可以自行学习): 1.CPU:中央处理器,是计算机运算控制的核心部件之一,相当于人的 ...
- linux标准io的copy
---恢复内容开始--- 1.linux标准io的copy #include<stdio.h> int main(int argc,char **argv) { if(argc<3) ...
- MySQL 调优基础(四) Linux 磁盘IO
1. IO处理过程 磁盘IO经常会成为系统的一个瓶颈,特别是对于运行数据库的系统而言.数据从磁盘读取到内存,在到CPU缓存和寄存器,然后进行处理,最后写回磁盘,中间要经过很多的过程,下图是一个以wri ...
- Linux的io机制
Linux的io机制 Buffered-IO 和Direct-IO Linux磁盘I/O分为Buffered IO和Direct IO,这两者有何区别呢? 对于Buffered IO: 当应用程序尝试 ...
- Linux Network IO Model、Socket IO Model - select、poll、epoll
目录 . 引言 . IO机制简介 . 阻塞式IO模型(blocking IO model) . 非阻塞式IO模型(noblocking IO model) . IO复用式IO模型(IO multipl ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 转:Linux网络IO并行化技术概览
转:http://codinginet.com/articles/view/201605-linux_net_parallel?simple=1&from=timeline&isapp ...
- Linux的IO调度
Linux的IO调度 IO调度发生在Linux内核的IO调度层.这个层次是针对Linux的整体IO层次体系来说的.从read()或者write()系统调用的角度来说,Linux整体IO体系可以分为七层 ...
随机推荐
- STM32驱动LCD实战
前段时间写了<STM32驱动LCD原理>和<STM32的FSMC外设简介>两篇文章,本文将对STM32驱动LCD进行实战应用.LCD是深圳市拓普微科技开发有限公司的LMT028 ...
- python 编译EXE文件
以labelme测试 标注工具labelimg和labelme 矩形标注工具:labelimg 多边形标准工具:labelme 前者官网发布了可执行文件,后者只有python源码,如果需要编译wind ...
- Py基础—变量名,条件循环,空执行,编码,运算符,字符比较,简化写法
变量名 只能是字母,数字,下划线.数字不能开头,不要和python内置的东西重复.赋予变量名内容:name1 = "shit" 输出变量名内容 print(name1) 条件语句 ...
- OAuth2.0是干什么的?
OAuth2.0是干什么的? 首先用户有一些数据: 将数据存储在服务器上: 这时候有一个应用要访问数据: 如果这个应用是一个恶意程序呢?所以需要一个检验来判断请求是不是安全的: 如何判断是不是安全的? ...
- Golang简易版 网站路径扫描demo
package main import ( "bufio" "fmt" "net/http" "os" "re ...
- java项目相对路径
./的含义: eclipse相对路径是相对项目的src目录来说的,而不是相对于当前文件. "./某某文件.txt" 而idea则相对于项目根目录 "./src/某某文件. ...
- 图文并茂-超详解 CS:APP: Lab3-Attack(附带栈帧分析)
CS:APP:Lab3-ATTACK 0. 环境要求 关于环境已经在lab1里配置过了.lab1的连接如下 实验的下载地址如下 说明文档如下 http://csapp.cs.cmu.edu/3e/at ...
- Spark Streaming状态管理函数updateStateByKey和mapWithState
Spark Streaming状态管理函数updateStateByKey和mapWithState 一.状态管理函数 二.mapWithState 2.1关于mapWithState 2.2mapW ...
- checkbox限制选中个数
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- SSL与HTTPS协议
1.SSL 1.1 什么是SSL SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及 ...