加载中...
I/O 调度器是操作系统内核中负责决定块设备读写请求处理顺序的组件。它通过合并、排序和分配请求,在吞吐量、延迟与公平性之间取得平衡,以适应机械硬盘和固态硬盘的不同特性。

| 所属层 | 块设备层 |
| 典型算法 | CFQ、Deadline、BFQ |
| 电梯算法 | 减少寻道 |
| 新架构 | 多队列 blk-mq |
I/O 调度器是操作系统块设备层中的一个组件,负责管理进程提交的磁盘读写请求的先后顺序。它决定何时以及以何种次序把请求下发给底层存储设备,从而影响系统的整体吞吐量和响应延迟。
当多个进程同时读写磁盘时,请求会在内核中排队。若不加调度直接下发,机械硬盘的磁头会频繁大幅移动,造成寻道时间浪费。I/O 调度器通过重新排列请求顺序,让相邻扇区的访问尽量集中,减少无谓的机械动作,这一过程也称为电梯算法。对于固态硬盘,由于没有寻道开销,调度重点转向降低延迟和保证公平。
Linux 历史上和现今提供了多种调度器,各有侧重:
数据库服务器常选用 deadline 或 mq-deadline,以保证事务日志写入的可预测延迟;桌面系统偏好 BFQ,让浏览器、编辑器等交互操作更流畅;高性能固态阵列则可能选择 NOOP 或 none,把排序工作交给设备控制器。管理员可通过修改块设备的调度器配置文件在运行时切换策略。
问:固态硬盘还需要 I/O 调度器吗?答:需要,但作用不同。固态硬盘不存在寻道问题,排序收益有限,因此常用轻量调度器,重点放在请求合并、公平性和低延迟上。
问:多队列块层带来了什么变化?答:传统单队列在多核高并发下成为瓶颈,多队列为每个 CPU 提供独立软件队列并映射到硬件队列,大幅提升并行度,配套的 mq-deadline、Kyber 等调度器也应运而生。

| 所属层 | 块设备层 |
| 典型算法 | CFQ、Deadline、BFQ |
| 电梯算法 | 减少寻道 |
| 新架构 | 多队列 blk-mq |
登录 后参与讨论
暂无讨论,来发表第一条评论吧