I/O 调度:CFQ → mq-deadline → BFQ → kyber

💡 原文中文,约26500字,阅读约需64分钟。
📝

内容提要

本文讨论了Linux I/O调度器的演变,特别是针对NVMe SSD的调度策略。传统调度器如CFQ和deadline因复杂性和对寻道优化的依赖逐渐被淘汰。现代调度器如none和kyber更适合NVMe,前者不进行调度,后者通过延迟反馈控制排队深度。文章强调调度器设计需适应硬件变化,简洁性更具长期价值。

🎯

关键要点

  • Linux I/O调度器的演变与NVMe SSD的调度策略密切相关。
  • 传统调度器如CFQ和deadline因复杂性和对寻道优化的依赖逐渐被淘汰。
  • 现代调度器如none和kyber更适合NVMe,前者不进行调度,后者通过延迟反馈控制排队深度。
  • 调度器设计需适应硬件变化,简洁性更具长期价值。
  • CFQ在SSD普及后失效,因其核心假设(寻道昂贵)被否定。
  • deadline调度器通过简单的截止时间机制避免请求饿死,适应性广。
  • noop和none调度器在NVMe环境中表现优异,几乎无开销。
  • blk-mq架构的引入解决了单队列架构的性能瓶颈,提升了I/O性能。
  • mq-deadline是deadline调度器在blk-mq框架下的实现,适合HDD和SATA SSD。
  • BFQ调度器通过预算公平调度实现进程间公平性,适合中低速设备。
  • kyber调度器专为NVMe设计,采用延迟反馈控制排队深度,适合延迟敏感场景。

延伸问答

Linux I/O调度器的演变是怎样的?

Linux I/O调度器经历了从CFQ和deadline等传统调度器到现代调度器如none和kyber的演变,主要是为了适应NVMe SSD的特性。

CFQ调度器为何被淘汰?

CFQ因其复杂性、对寻道优化的依赖以及在SSD环境下的失效而被淘汰。

什么是mq-deadline调度器,它适用于哪些场景?

mq-deadline是deadline调度器在blk-mq框架下的实现,适用于HDD和SATA SSD,能够减少寻道时间并防止请求饿死。

kyber调度器的设计理念是什么?

kyber调度器的设计理念是通过延迟反馈控制排队深度,不进行请求排序或合并,专为NVMe设备优化。

BFQ调度器与CFQ调度器有什么不同?

BFQ调度器基于I/O预算进行调度,而CFQ调度器基于时间片,BFQ在公平性和交互检测上更为精确。

在什么情况下使用none调度器最优?

在NVMe SSD的单租户场景中,使用none调度器最优,因为它不引入额外的调度开销。

➡️

继续阅读