讨论这个任务集在单核上,各调度算法A,B的优劣性。所有任务的利用率{0.3,0.5,0.6},U=1.4
我们发现这个任务集在单核上,本身就是不可调度的,那么对于算法A,B,还讨论调度优劣性有什么意义呢。比如A算法成功调度任务集的利用率上界是0.6,而B算法是0.7,我们说B算法优于A,但是对于上述本身就不可调度的任务集(假设任务集利用率U=0.8),这个比较就没有意义。
但是如果我们用加速因子f,就会有意义,加速因子表示成功调度(这个是用可调度性分析来算法判定的)一个任务集相较于最优调度算法在处理器速度为s时,最多需要处理器提速的倍数(也就是提速到 f 这个倍数了,即速度为f*s,那么一定可以成功调度这个任务集,虽然说有可能提高到f*0.95的时候,已经可以调度了,但是实时调度讲究的是最差情况)。这个就不依赖于采用的任务集了,我只要提速处理器速度,总能成功调度呀,只是提速的倍数不同而已,正是这个倍数不同,所以就区分出了各算法的优劣性。比如上面的任务集U=1.4,那么最优调度算法在处理器速度为1.4时能成功调度(说明最优调度算法总能成功调度一个任务集),而某个实际调度算法就需要f*1,4的速度的处理器才能成功调度了。
加速因子(相较于标准处理器速度1,需要提速倍数)越小,算法越好。理论最优调度算法的加速因子为1。
这就是加速因子衡量各算法性能的好处(不挑选任务集),如果用利用率上界,就依赖于任务集,才能做到这一点。看我这篇文章多核实时调度任务分配解读_标biao的博客-CSDN博客
问题:加速因子可以作为整个任务集在多核调度可调度性判定的充分条件吗?
答:从加速因子定义可知,对于每个任务集,都有个前提,最优调度算法的s是多少,这里这个s就很重要了,如果我们要拿加速因子来做可调度性判定的充分条件,那么对于不同的任务集,这里s就是不同的,我们很难求出来的,所以我们也就不知道实际处理器速度为1的多核处理器能不能调度了。(因为本想是1/(f*s)是否 >=U的来充分性判定)。所以加速因子只是用来比较各调度算法(多核分配算法也是调度算法)的性能量化指标罢了。
由于一个调度算法的好坏,是需要和一个可调度性测试绑定在一起的。没有对应的可调度性分析算法进行保证,那么该调度算法就是未知的加速因子了(即使是某个最优调度算法)。
加速因子虽然是衡量一个调度算法的性能的,但是因为一个调度算法的调度利用率最小上界(上界:是个变量,和任务数等有关,比如RM上界,n表示任务集中的任务数。最小上界,就是这个变量
的最小值,当
,为0.69)是依赖一个可调度性分析(测试)算法给出的,因此这个加速因子也可以说是对这个可调度性分析算法而言的。
处理器标准速度为1,比如RMS调度算法,利用率上界0.69,那么也就是说最优调度算法只需要处理器速度为0.69即可,因此,加速因子 f = 1/0.69。比如EDF调度算法,利用率上界是1,那么加速因子为1/1,所以说EDF就是实时调度最优调度算法了。
举个简单例子:
U=0.69的任务集,RM调度,很明显最优调度算法只需要处理器速度为0.69即可调度成功,但是RM却需要处理器速度为1,就能保证可以调度成功。因此这里的加速因子就是1/0.69 约等于 1.4,即 f=1.4。
U=0.5,最优调度算法只需要处理器速度为0.5即可调度成功,但是RM却需要处理器速度为0.5*1.4=0.7速度即可。当然,超过这个速度,那就更加能成功了。
U=0.9,最优调度算法只需要处理器速度为0.9即可调度成功,但是RM却需要处理器速度为0.9*1.4=1.22速度即可。
U=1.5,最优调度算法只需要处理器速度为1.5即可调度成功,但是RM却需要处理器速度为1.5*1.4=2.1速度即可。当然,超过这个速度,那就更加能成功了。
加速因子和单核多核没有关系,单核调度算法或者多核调度算法都能有加速因子(多核中加速因子,指每个核需要提速的倍数,而不是单独一个核)。比如
- 单核RM的加速因子1/0.69,
- 多核分区调度算法FFD(一个任务集,任务分配采用FFD,各核采用EDF调度)加速因子为
,其中m为核数
- 杨茂林老师提出的资源优先分区调度算法加速因子
,是考虑共享资源约束的所有多核实时调度算法中目前最小且唯一确保常数加速因子的调度算法
- 约束截止时间任务集合全局 EDF 调度算法的加速因子约为 2.62
多核调度也有总任务集利用率上界。单核中,很明显加速因子可以认为就是利用率上界的倒数,但是多核中就不是了( 倒数,也应该倒(m+1)/2 /m,应该是1 / ((m+1)/2 /m)= 2m/(m+1) ,因为这里的利用率上界是要先均匀分配到每个核上的,此时得到每个核的处理器速度才对),比如分区调度中虽然某些分配算法的利用率上界都是(比如FF和FFD),但是加速因子是不一样的(FFD加速因子 < FF),因此加速因子才能解释实验效果(实际实验中FFD的可调度率要高于FF)。
为什么多核分区调度算法中,利用率上界一样,但是加速因子却不一样呢?
答:这是因为,即使理论最优算法,也不能切割任务来实现最优分配的,因为举出一个例子任务集a,确实分配算法FFD的上界为(m+1)/2,另一个例子任务集b, 确实分配算法FF的上界也是(m+1)/2 ,但是,例子任务集b中,即使最优调度分配算法,它也不能实现分配成功,或者不能实现每个核利用率为U/m呀,那么取最大核的利用率为理论最优算法的处理器速度,因此加速因子就不是 1 / ((m+1)/2 /m)= 2m/(m+1),即加粗部分,不一定能实现。
比如先举个反例:m个0.5任务,1个0.5+e任务,WF先分配前m个,那么0.5这个任务就失败了,我们会认为,而此时,最优理论分配算法(不能切割任务)一定会有两个0.5任务分到一个核才行,那么这个核的速度就得为1,因此标准速度1除以这个理论速度1,加速因子就为1了(很明显,WF的加速因子肯定不止1,因此要找出正确(临界的)的加速因子(加速因子太小了,保证不了一定可调度,太大了又太悲观(浮夸)),就得构造很好的例子,下面举的这个例子就是这样的)。实际上从P43页我们知道,WF的加速因子比下面说的FFI的加速因子还要小,但是我们实验知道FF的可调度率比WF要好,因此加速因子其实也不能完全的解释各对比算法的可调度率好坏。
举个例:这里来计算一下FF, FFI, BF, and BFI的加速因子(在没有数学严格证明的情况下(目标是想找到加速因子的最大值),只能靠举例子来表明至少(at least)的加速因子(即至少需要提速的倍数,因此这个不能作为可调度性的依据,因为如果能找到加速因子的下界,就能通过倒数作为利用率上界的判定法了),下面情况就是这样(论文作者就是这样干的)):
我们有m个核,2m个任务,
- 前m个任务,每个任务利用率0.5/m
- 后m个任务,每个任务利用率0.5+e,e趋于0
对于FFI,很明显FFI会先把前m个任务分配在第一个核,占据了0.5利用率。那么剩下的后m个任务只能分剩下的m-1个核了,很明显核不够了,因此分配失败。也就是上面的e只要等于0,这个任务集就是可以分配成功了,即这是个临界任务集。每个核的速度假设为1的。
对于一个最优分配算法(上帝视角,这里需要看清楚最优分配算法的具体操作(注:任务不能切割而均分),而不是简单的U/m作为单核速度,上面这个任务集明显只是刚好能均分了,这个例子就是(m*(0.5/m+0.5+e) / m = 0.5+e+ 0.5/m),很明显会把后m个任务(也就是大利用率任务优先)先逐个分配到m个核上,然后后m个任务再逐个分配到这m个核上(注释A),这样每个核只需要(0.5+e+ 0.5/m)的速度即可。
因此FFI的加速因子为1/ (0.5+e+ 0.5/m),当e趋于0,加速因子 = 2-2/(m+1)
注释A:如果是FFD等算法,会分配到第一个核上,虽然任务集也能分配成功(说明FFD的加速因子肯定会小一些),但是该核压力就很大(负载不均衡)。因此FFD其实也不是最优的调度算法,其加速因子,会由其它极端例子体现,本例子只用于分析FFI的至少的加速因子(因为本例本质上就是举了一个极端例子,因此不属于加速因子上界证明,而仅仅是一个探索性的下界证明罢了)。
从上面例子可以看出,如果是用WFD分配方式,就是最优算法了,然而再换一个例子,可能FFD又可能是最优分配了,而WFD却不是了。因此我们说,它们都是启发式分配算法而已(即近似算法),能实际使用。而所有情况下都最优的分配算法是NP-hard计算时间复杂度的,我们一般是没法实际使用的。总体大量随机任务集测试,平均情况而言,FFD和BFD的可调度性是最好的,WF最差,但是负载均衡性最好。
下篇博客,我们聊一聊 多核分区实时任务调度算法的 近似率(asymptotic approximation ratio) 的概念和作用。