Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304746
  • 博文数量: 33
  • 博客积分: 586
  • 博客等级: 中士
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-27 14:05
个人简介

衡铁刚 1)2011-2013:Alibaba MySQL DBA 2)2014-至今: Alibaba 数据库PD

文章分类

全部博文(33)

文章存档

2016年(1)

2015年(10)

2013年(5)

2012年(17)

我的朋友

分类: Mysql/postgreSQL

2012-10-07 09:46:43

IO调度程序:将磁盘IO资源分配给系统中所有挂起的块IO请求,通过将请求队列中挂起的请求合并和排序来完成的,其工作就是管理块设备的请求队列
  • 合并:将两个或多个请求结合成一个新请求
  • 排序:整个请求队列按扇区增长方向有序排列

linux电梯:2.4默认的IO调度程序,在2.6被取代,新请求加入队列后,首先检查其他每个挂起请求是否可以和新请求合并,可以执行向前和向后合并,但鉴于文件的分布(以扇区号的增长表现)特点和IO操作执行方式的典型性(通常从头读向尾),所以向后合并远多于向前合并,如果合并失败则寻找可能的插入点
如果队列中有驻留时间过长的请求,新请求加入到队列尾部,即使插入后还要排序,但这仅仅是在经过了一定时间后停止插入---排序请求,最终还是会导致饥饿现象

  • 最终期限IO调度程序(deadline)
每个请求都有一个超时时间,读请求500ms,写请求5s,以磁盘物理位置为次序维护请求队列(排序队列),新请求递交给排序队列时,会执行合并和插入请求类似于linux电梯,同时以请求类型为依据插到额外队列(读FIFO队列和写FIFO队列),请求会从推入派发队列中,然后提交给磁盘驱动
缺点:降低了系统吞吐量,每次提交读请求,IO调度程序迅速处理,但两次寻址操作(一次对读操作定位,一次返回进行写操作定位)
  • 预测IO调度程序(as)
以deadline为基础,增加了预测启发能力,在保持良好的读响应的同时也能提供良好的全局吞吐量,读请求提交后不直接返回处理其他请求,而是会有意空闲片刻(6ms),在此期间任何对相邻磁盘位置操作的请求会立刻处理

  • 完全公正的排队IO调度程序(cfq)
每个提交IO的进程都有自己的队列,IO调度程序以时间片轮转调度队列,从每个队列中选取请求数(4个),然后进行下一轮调度

  • 空操作的IO调度程序(noop)
不进行排序,但会将新请求与任一相邻请求合并,维护请求队列近似于FIFO的顺序排列,适合于块设备没有寻到负担的场景

1)查看当前系统的IO调度方法:

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

2)临时更改IO调度方法:
例如:想更改到noop电梯调度算法:
echo noop > /sys/block/sda/queue/scheduler

3)永久更改IO调度方法:
修改内核引导参数,加入elevator=调度程序名
[root@test1 tmp]# vi /boot/grub/menu.lst
更改到如下内容:
kernel /boot/vmlinuz-2.6.18-8.el5 ro root=LABEL=/ 
elevator=deadline rhgb quiet

上述4种IO调度程序在2.6中可以自行设置,具体选择依据工作负荷,在清楚原理基础上加以测试








阅读(1997) | 评论(0) | 转发(0) |
0

上一篇:块IO层(基础概念)

下一篇:cache and write-back

给主人留下些什么吧!~~