最近学习到了一些关于调度算法加速因子证明的知识。在“Multiprocessor Scheduling for Real-Time Systems" 一书中,Section 11.3给出了FBB-FDD算法加速因子的证明,下面就对整个过程做一个梳理。
FBB-FFD算法是采用了DM+First-Fit的策略:
1.首先对任务集τ中的所有任务按照其d(relative deadline)做一个nondecreasing的排序。
2.对于一个任务τi,在试图将其分配到处理器核上时,利用下面的公式进行判断:
若该式满足,那么按照First-Fit的策略将其分配到处理器k上。若所有处理器核都不满足,那么该任务集分配失败;若所有任务都成功分配,则任务集成功被调度。
说明:
1.RBF*是对RBF(request bound function)函数的一个近似:
可以证明,RBF*是
≥
\geq
≥RBF的,那为什么在上面的公式中,不用更小的RBF去做,这样从理论上不是就能得到更小的加速因子吗?在“Jian-Jia Chen:Partitioned Multiprocessor Fixed-Priority Scheduling of Sporadic Real-Time Tasks”一文中,给出了利用RBF做可调度性测试的Partitioned DM算法的加速因子证明。但chen采用的判断条件不同于上面的第一个公式。
回到正题,当一个任务τi分配失败时,一定是在所有的核上都无法分配,也就是说对于每个核,有
当把m个核上的情况进行一个累加,也就是说同时存在,有:
注意这里的j是小于i的,即仅考虑优先级大于τi的任务,也就是已经分配完成的任务。接下来根据RBF*与DBF的关系(在书中前文有证明)有下列推导:
此时取逆否命题,也就是说,当
时,任务集在m核处理器上可调度(densmax(τ)定义为max τi∈τ(Ci/Di))。注意该理论并不作为实际应用中判断任务集是否可调度的条件,因为在LOAD(τ)函数的定义中,使用了DBF函数,该函数理论上需要检查所有的t,时间复杂度是不能被接受的。而该函数的提出通常是为了进一步求解加速因子。
接下来书中证明了FBB-FFD算法的加速因子为4-1/m,这里我理解的是用了一种“凑”的思想,下面给出证明:
首先我们假设使用FBB-FFD算法进行调度的处理器平台速度为1,那么相应的使用最优算法的处理器平台速度为1/(4-1/m),因为加速因子的定义是:相较于最优算法,一个调度算法需要在处理器速度为“加速因子”这么多倍的平台上才能成功调度任务集,于是如果最优算法可以在处理器平台速度为1/(4-1/m)的平台上调度任务集,有下面结论存在:
这个证明是从LOAD(τ)
≤
\leq
≤ 1 and densmax(τ)
≤
\leq
≤ 1变化而来的,其实也很简单,因为当处理器速度变为s时,每个任务的Ci就变成了Ci/s,代入到上面式子中,就能得到上图结论。
接下来开始凑:
此时我们假设有如下不等式成立:
L
O
A
D
≤
1
3
×
(
m
−
(
m
−
1
)
d
e
n
s
m
a
x
(
τ
)
)
LOAD\leq\frac{1}{3}\times(m-(m-1)dens_{max}(\tau))
LOAD≤31×(m−(m−1)densmax(τ))
也就是假设该任务集在处理器速度为1且使用FBB-FFD算法的处理器平台上仍然可以调度,将上图中不等式代入,有如下推导:
可以看到,最后推出一个明显成立的不等式,也就是说假设成立。
为什么是“凑”呢,因为在实际求解中,想要求出来一个加速因子,不妨把它设成x,然后按照上面的过程逐步求解,最后解出这样一个x,就得到了最后加速因子。
以上是我对近期加速因子学习的总结,对于其他的算法,也可以按照上面的思路去求解加速因子,衡量该算法的优劣。重点就是怎么和DBF函数联系起来,找出和DBF函数之间的大小关系。
欢迎大家批评指正^_^