IO 调度器切换——影响存储读写速度的关键
IO 调度器是什么
IO 调度器决定了系统如何处理存储设备的读写请求——它把多个零散的请求合并和排序,减少磁盘寻道次数,提升整体读写效率。不同调度器适合不同的使用场景。
Android 上的常见调度器
| 调度器 | 适用介质 | 特点 |
|---|---|---|
| fq | 传统 HDD | 公平排队,适合机械硬盘 |
| bfq | SSD / UFS | 预算公平队列,适合高并发随机读写 |
| deadline | 通用 | 简单直接,按截止时间排序 |
| noop | 极速存储 | 零合并直通,适合 UFS 3.0+ 和 NVMe |
手机存储的特殊性
现代 Android 设备几乎都使用 UFS 存储(不再是 eMMC)。UFS 具有:
- 并行多队列读写
- 低延迟随机读写
- 无需传统的磁盘寻道
对于这种存储介质,越简单的调度器越好——noop 或 deadline 通常比复杂的 bfq 效果更好,因为它们减少了额外的调度开销。
怎么切换
在 KsuWebUI 内核页面找到 IO 调度器设置:
- 选择你想调节的存储分区(通常是
/dev/block/sda或类似路径) - 从下拉列表中选择调度器
- 保存设置
切换效果对比
- noop:最快响应,随机读写无延迟,但可能让某些 I/O 密集型操作抢资源
- bfq:最平衡,前台 APP 的 IO 请求优先,后台读写不阻塞前台
- deadline:折衷方案,简单有效
调优建议
- UFS 3.0/4.0 设备:试 noop,体验响应速度
- UFS 2.x 设备:bfq 更稳,前台操作更流畅
- 不清楚设备存储类型:保持默认调度器就好
- 切换后如果感觉 APP 安装、文件传输变慢了,换回去
验证调度器
可以在 KsuWebUI 中查看当前调度器状态,或者用终端命令:
cat /sys/block/sda/queue/scheduler
当前生效的调度器名称会在方括号中。