知识卡片
I/O调度算法的设计取舍
内容
Linux的I/O调度器又称电梯调度器,最基本的电梯算法总是朝一个方向把请求送到最远处再折返,避免磁头反复横跳。noop不做任何重排、按FIFO直接下发,适合底层设备(磁盘阵列、SAN)或上层应用自己已经优化过I/O顺序的场景,此时调度器的重排反而是多余劳动;deadline在电梯算法基础上加了超时兜底,保证每个请求即使排队再久也有一个最长等待上限,避免”饥饿”;CFQ则把每个进程分配独立队列和时间片,按公平原则调度,适合通用多任务服务器场景。发散:三种算法没有绝对优劣,本质是在”极简开销”“公平性”“防饥饿”三个目标之间选择偏向哪一个,这和进程调度器(如CFS)面对的取舍是同构问题。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》