“MLFQ是利用历史服务作分类的一种启发式,不保证准确预测剩余工作,也不是按指定权重分配CPU的合同。若主要诉求是“持续繁忙时A拿两份、B拿一份”,应转向彩票或步幅调度的份额模型。”
想让三项繁忙工作按3:2:1分CPU,又不希望短窗口完全由运气决定,可以记一份“下一次应当轮到谁”的虚拟账本。步幅调度每次选账本数最小者;份额越大,每次运行后账本增加得越少,所以更快再次成为最小者。
它与彩票调度理路彩票调度与随机服务份额Lottery scheduling · Proportional-share lottery scheduling · Lottery tickets用均匀抽签把正权重转成时间片选择概率,精算有限样本服务份额和连续未中签概率,区分概率无饥饿与确定等待界。使用相同的权重语言,但选择过程是确定的。差别不在有没有票,而在怎样把票转成下一次选择。
形式陈述
三个数定义一个静态版本
每个持续可运行的任务
本页采用原论文基本算法的初始化:
主实验与彩票页相同:三项始终可运行、不结束、不阻塞,时间片1毫秒、切换免费,票数
有些教学实现把所有pass初始化为0,也能形成相关的比例调度,但开头的次序会不同。复算时必须把初始化也当成输入,不能仅看“总取最小”的一句话。
直觉
十二次选择,每次只改胜者的pass
| 片号 | 选择前 |
运行者 | 选择后 |
|---|---|---|---|
| 1 | (2,3,6) | A | (4,3,6) |
| 2 | (4,3,6) | B | (4,6,6) |
| 3 | (4,6,6) | A | (6,6,6) |
| 4 | (6,6,6) | A | (8,6,6) |
| 5 | (8,6,6) | B | (8,9,6) |
| 6 | (8,9,6) | C | (8,9,12) |
| 7 | (8,9,12) | A | (10,9,12) |
| 8 | (10,9,12) | B | (10,12,12) |
| 9 | (10,12,12) | A | (12,12,12) |
| 10 | (12,12,12) | A | (14,12,12) |
| 11 | (14,12,12) | B | (14,15,12) |
| 12 | (14,15,12) | C | (14,15,18) |
胜者序列是A、B、A、A、B、C,再重复一次。A取得6片,B取得4片,C取得2片,恰为目标份额。这个“恰好”依赖本组权重和窗口;前5片的计数为3、2、0,C的理想份额是
选择后pass也不必相同。第12片之后C的18大于A的14,表示C下一次应当更晚取得机会,不表示C已经获得比A更多的真实服务。
例子与边界
账本为什么不会无限拉开
令
初始
设任务
上面的界限制的是各任务“下一次虚拟位置”的差。代入后得到
右边是与总运行片数无关的常数,所以运行越来越久时,各任务按票数归一化的累计服务不会越来越偏离。在固定有限成员下,结合
这不是“每项任意时刻都误差小于一片”的证明。原论文另区分两两相对误差与整个集合的绝对误差;对偏斜权重,二者的界不同。本页只使用已经给出归纳推导的虚拟差界。
为什么固定成员不会永远被跳过
假设C的当前pass固定为某值
这解释固定正票数下的无饥饿;它不等于对任意动态到达流、任意暂停和任意整数溢出实现都给出了同一个等待界。特别是如果允许不断加入pass极小的新任务,刚才“其他任务总数有限”的论证就失效。
一小片服务,只应收费一小份
若标准片长为
例如A步幅2、标准片1,本次只运行0.25毫秒,增加应为0.5,而不是2。若原pass为2,更新为2.5,表示这次只取得了四分之一片的服务。按完整片收费,会让频繁短片任务的虚拟账本走得过快,从而拿到过少CPU。
本次让出后若任务阻塞,就先从候选队列移除,不能因为pass小而调度一个尚未就绪的任务。等它重新加入时,还必须明确下面的动态加入规则;不能只改短片公式就声称完成了动态协议。
新加入者不能永远从历史的零点开始
设旧任务pass已经在100附近。若新任务每次创建都设pass为0,它会连续获得许多机会追赶到100;反复创建新身份可以反复领取这份并不属于它的历史补偿。反过来,长期睡眠者保存的旧pass也可能远落后于当前系统进度。
原论文的动态版本维护全局虚拟进度,离开时保存相对于全局进度的剩余距离,回来时重新放置;改变票数还要按新旧步幅比例调整剩余距离。它不是简单地把所有新任务设为0,也不是每次权重变化把所有历史清零。动态版本的完整规则应以原文§2.2–2.4为准,本页十二片证明只覆盖静态版本。
若只是在一个封闭批次开始前把所有pass减去同一个常数,大小次序不变;但运行中对部分任务单独重置会改变次序。防止数值溢出的归一化必须覆盖同一个比较域,不能让一部分睡眠记录仍停在旧坐标系。
推论与应用
实现代价与模型边界
最小优先队列
按CPU时间取得3:2:1不意味着业务吞吐也按3:2:1。缓存状态、锁等待、I/O及不同处理器速度会使同样的服务时间产生不同产出。调度器保证的对象必须与服务账本
参考资料
- Carl A. Waldspurger、William E. Weihl,“Stride Scheduling: Deterministic Proportional-Share Resource Management”,MIT/LCS/TM-528,1995,§2.1与Figure 1(pass初始化与基本算法)、§2.2–2.4(动态成员、票变更与非等长片)、§4(层次变体)。本页较保守的虚拟差界独立证明,不冒充原论文的更强误差界。
- Arpaci-Dusseau与Arpaci-Dusseau,OSTEP, Ch.9, §9.6:确定性比例调度的教学对照;实际使用时须区分不同初始化约定。