Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Linux I/O Scheduler       沐剑
访问磁盘的过程
访问磁盘的过程                   Typical HDD figures•   寻道时间                   HDD                   Average    Server: 3ms    Sp...
SATA II                SAS7200 RPM IOPS:   ~90   15K RPM IOPS:   ~180
SATA IIIntel X25-M IOPS:   ~8600
访问磁盘的过程•   如何让磁盘读写更快    减少寻道时间(避免磁头移动开销)    让磁头旋转一圈读写更多相邻扇区的数据(顺序读写)
扇区•   操作系统视角    逻辑块序列•   硬件视角    物理扇区•   磁盘控制器    映射「逻辑块」->实际物理扇区
读取一个扇区•   CPU->磁盘控制器    读某个逻辑块号•   磁盘控制器    快速表搜索    逻辑块号->(盘面,磁道,扇区)三元组,唯一标示物理扇区•   机械移动(寻道、旋转)•   拷贝主存
• I/O调度器的层级结构
I/O子系统
Block I/O Layer
I/O调度器•   目标    减少寻道时间,让旋转一圈读取更多扇区•   任务    1、管理块设备请求队列    2、分配I/O资源给请求•   做法    合并 + 排序
合并•   同一或多个相邻扇区的请求 —— 合并 ——> 一次I/O•   一次I/O对应一条寻址指令•   减少系统开销和寻址次数
排序•   I/O请求按照扇区增长排列•   Sorted Queue
• 几种I/O调度器
Linus电梯•   简单的合并+排序•   避免请求饥饿    梱测到队列中有长期没有被处理的请求,那么就暂时中止插入•   缺点    I/O调度器并没有真正去处理饥饿请求,而是采取了一种间接的方式,所以很    有可能饥饿的请求依旧饥饿,...
Deadline•   带超时的调度算法•   3个I/O Queue    Read Queue(default timeout: 500ms) FIFO    Write Queue(default timeout: 5000ms) FIF...
Deadline•   权衡了全局吞吐量和系统延迟•   请求同时插入Read/Write Queue和Sorted Queue•   writes_starved    避免写饥饿,当写饥饿次数达到writes_starved,写请求会被立即处理
Anticipatory (AS)•   2.6.18之前默认的I/O调度器    基于预测算法    主要是为了解决Deceptive idleness问题•   处理完一个请求,丌直接处理下一个请求,而是针对上一个请求的进程等待    片刻...
CFQ•   2.6.18之后默认的I/O调度器    每个提交I/O请求的进程都有一个自己单独的Sorted Queue•   在一个时间片中,CFQ调度器选择一个进程,处理其I/O队列•   丌是简单的轮询,基于红黑树选择进程(进程优先级)...
NOOP•   面向随机访问设备(例如SSD)•   我们只做合并,元芳,你怎么看?•   对于SSD    选择NOOP还是Deadline?    Deadline平衡读写比例
BenchmarkRed Hat Enterprise Linux 4 I/O schedulers vs. Red Hat Enterprise Linux 3       for database Oracle 10G oltp/dss (...
谢谢!
Upcoming SlideShare
Loading in …5
×

Linux I/O Scheduler

2,231 views

Published on

Linux I/O Scheduler Share

Published in: Technology
  • Be the first to comment

Linux I/O Scheduler

  1. 1. Linux I/O Scheduler 沐剑
  2. 2. 访问磁盘的过程
  3. 3. 访问磁盘的过程 Typical HDD figures• 寻道时间 HDD Average Server: 3ms Spindle rotational Common: 10ms [rpm] latency [ms] 4,200 7.14• 旋转延迟 5,400 5.56 平均半圈 7,200 4.17 10,000 3.00 15,000 2.00• 存取时间=平均寻道时间+平均旋转延迟• 数据读取时间 <1ms,忽略丌计• 影响IOPS的主要因素:寻道时间
  4. 4. SATA II SAS7200 RPM IOPS: ~90 15K RPM IOPS: ~180
  5. 5. SATA IIIntel X25-M IOPS: ~8600
  6. 6. 访问磁盘的过程• 如何让磁盘读写更快 减少寻道时间(避免磁头移动开销) 让磁头旋转一圈读写更多相邻扇区的数据(顺序读写)
  7. 7. 扇区• 操作系统视角 逻辑块序列• 硬件视角 物理扇区• 磁盘控制器 映射「逻辑块」->实际物理扇区
  8. 8. 读取一个扇区• CPU->磁盘控制器 读某个逻辑块号• 磁盘控制器 快速表搜索 逻辑块号->(盘面,磁道,扇区)三元组,唯一标示物理扇区• 机械移动(寻道、旋转)• 拷贝主存
  9. 9. • I/O调度器的层级结构
  10. 10. I/O子系统
  11. 11. Block I/O Layer
  12. 12. I/O调度器• 目标 减少寻道时间,让旋转一圈读取更多扇区• 任务 1、管理块设备请求队列 2、分配I/O资源给请求• 做法 合并 + 排序
  13. 13. 合并• 同一或多个相邻扇区的请求 —— 合并 ——> 一次I/O• 一次I/O对应一条寻址指令• 减少系统开销和寻址次数
  14. 14. 排序• I/O请求按照扇区增长排列• Sorted Queue
  15. 15. • 几种I/O调度器
  16. 16. Linus电梯• 简单的合并+排序• 避免请求饥饿 梱测到队列中有长期没有被处理的请求,那么就暂时中止插入• 缺点 I/O调度器并没有真正去处理饥饿请求,而是采取了一种间接的方式,所以很 有可能饥饿的请求依旧饥饿,并没有解决实质问题
  17. 17. Deadline• 带超时的调度算法• 3个I/O Queue Read Queue(default timeout: 500ms) FIFO Write Queue(default timeout: 5000ms) FIFO Sorted Queue• 缺点 当系统存在大量顺序请求时,可能导致请求无法被很好地排序,引发频繁寻 道,比较适合随机访问多、时效性高的场景
  18. 18. Deadline• 权衡了全局吞吐量和系统延迟• 请求同时插入Read/Write Queue和Sorted Queue• writes_starved 避免写饥饿,当写饥饿次数达到writes_starved,写请求会被立即处理
  19. 19. Anticipatory (AS)• 2.6.18之前默认的I/O调度器 基于预测算法 主要是为了解决Deceptive idleness问题• 处理完一个请求,丌直接处理下一个请求,而是针对上一个请求的进程等待 片刻,如果该进程发出一个不当前扇区相同或相邻扇区的请求,则优先处理• 默认等待6ms• 如果系统存在大量相邻扇区请求,性能会很好
  20. 20. CFQ• 2.6.18之后默认的I/O调度器 每个提交I/O请求的进程都有一个自己单独的Sorted Queue• 在一个时间片中,CFQ调度器选择一个进程,处理其I/O队列• 丌是简单的轮询,基于红黑树选择进程(进程优先级)• 特点是保证各个进程的I/O请求能被均衡处理• 也有类似AS的等待机制• QUEUE_FLAG_NONROT
  21. 21. NOOP• 面向随机访问设备(例如SSD)• 我们只做合并,元芳,你怎么看?• 对于SSD 选择NOOP还是Deadline? Deadline平衡读写比例
  22. 22. BenchmarkRed Hat Enterprise Linux 4 I/O schedulers vs. Red Hat Enterprise Linux 3 for database Oracle 10G oltp/dss (relative performance)
  23. 23. 谢谢!

×