感想
题目可以翻译为“硬实时环境下多程序的调度算法”,发表于1973年,引用情况如下图,文章推导了很多针对硬实时调度算法的定理,如最优静态调度算法RM、RM调度算法最小资源使用率上界……这些定理堪称实时调度算法的经典。由于当时还没有多核多处理器的概念,所以文章推导的公式都是针对单处理器的。
文章首先对系统做了一些假设(待会会介绍),然后以这些假设为前提进行推导。看完这篇文章,我有以下几点感触或者疑惑:
- 文章中任务 τi 的资源利用因子: ui=Ci/Ti ,其中 Ci 为任务 τi 的计算时间, Ti 为任务 τi 的周期,系统的使用率为各个任务的使用率之和,即 U=∑mτ=1(Ci/Ti) 。假如将其拓展到MapReduce模型中,任务使用率子怎么算 ui=umap+ureduce=Cmap/Ti+Creduce/Ti 还是?
- RM调度算法:周期越短,任务的优先级越高。该算法为最优静态调度算法,静态调度算法,即任务的优先级一旦确定,以后不能被改变。存在另外一种调度算法:动态调度算法,即任务的优先级不是固定的。文章中的deadline-driven scheduling algorithm是一种动态调度算法,该调度算法的思想:任务的优先级根据其截止时间调整,截止期越近的任务优先级越高,即EDF调度算法。
- 针对文章中提出的任务集,EDF调度算法可以让所有 U<=1 的任务都被调度,而RM调度算法没法保证。但是当 U>1 时,如果以成功率为衡量指标,则RM调度算法的性能可能会更好。
- 文章中的定理比较经典,需要注意,其适用范围是在那几个假设基础上推导的,在生产环境中,部分权重需要修正。
- 定理的证明思路:反证法、推出特殊例子,在推导最小使用率上界时,找出使用率最差的任务集。
摘要
处理器上多任务的调度可以看作是一个用来满足任务服务质量需求的函数。当任务集很大时,如果采用最优静态调度算法,处理器的最小使用率上界可能只有70%。而如果采用动态分配优先级的方法,可以让处理器的使用率达到100%。最后,本文设计了一种将这两种调度思想混合在一起形成的调度算法,并分析了其性能
系统环境
为了分析硬实时环境下程序的行为,必须对环境做必要的假设。这些假设不一定要完全满足,后面也将分析如果不满足这些假设,系统会变成什么样子。
- 硬实时任务的请求是周期性的,即同一个任务,其任务间的间隔是固定的;
- 任务必须在下一个任务的来临前得到响应;
- 任务是相互独立的,任务的请求不依赖于其他任务的初始化或者完成情况;
- 每一个任务的运行时间是恒定的。任务的运行时间是指任务在处理器上运行的时间,不算被中断的那段时间;
- 系统中任何非周期性任务都是个别的,当他们运行时,会占用处理器,但是他们没有实时性要求。
文章中有几个概念需要理解:
- 静态优先级调度算法:任务间的优先级是固定的;
- 动态优先级调度算法:运行过程中,任务的优先级可能发生变化
- 混合调度算法:部分任务的优先级是固定的,其余的任务的优先级是动态调整的。
固定优先级调度算法
先解释几个概念:
- overflow:t时刻,任务的截止时间到来,但是该任务没有执行完
- feasible:调度算法是feasible,表示没有overflow发生,即任务的服务质量都得到了满足
- response time:响应时间和请求时间间的时间间隔
- a critical instant:该时刻,任务的response time将会最大
- a critical time zone:任务在critical time时的response time
定理1 如果任务请求时,所有优先级更高的任务也发生请求,该时刻为任务的a critical instant
证明思路:任务集合为
τ1,τ2,⋯,τm
,
τm
的优先级最低。以
τm
为例,其他任务的请求时间在
t2,t2+Ti,t2+2Ti+,⋯,t2+kTi
,如果
τm
在
t2
处提交,其response time 一定大于在
t1
时刻提交的。其他任务的证明过程类似。
证明思路:任务集合为任务集合为 τi,τ2,...,τm , τi 、 τj 是其中的两个任务,且 τi 的优先级更高,如果 Ti>Tj ,不难证明, τj 的优先级更高时,该任务集也是可以调度的。既然RM调度算法的任务优先级顺序可以从任何调度算法中任务的优先级顺序变换而来,所以RM调度算法仍然让该任务集可以调度。即证明了定理2.
处理器使用率界限
使用率:
任务集完全利用了处理器的资源,即该任务集的服务质量得到了满足,且增加任何一个任务的计算时间,该任务集都变得不可调度。
定理3 如果只有两个任务,那么利用率的最小上界是
U=2(21/2−1)
证明思路:任务集
τ1,τ2
,
T1<T2
,
C1
已知,则
τ1
的优先级更高,在
τ2
的一个critical time zone区间里,
⌈T2/T1⌉
个
τ1
会发出任务请求。文章分两种情况讨论:
τ1
会在第二个
τ2
请求前完成,
τ1
在第二个
τ2
请求前没法完成。均可证明利用率的最小上界为
U=2(21/2−1)
定理4 对于给定的m个任务集,任务的优先级顺序固定,且任意两个任务的周期之比小于2,那么该任务集的最小利用率上界是
U=m(21/m−1)
证明思路:任务集
τ1,τ2,⋯,τm
,且
T1<T2<⋯<Tm
,文章首先证明下面情况下,处理器的利用率最低
则
Cm=Tm−2(C1+C2+⋯+Cm−1)
,令
gi=(Tm−Ti)/Ti
,则可以推出
U
和
gi
之间的关系,当
∂U∂gi=0
时,处理器的利用率最低,这时
gj=2(m−j)/m−1,j=0,1,⋯,m−1
,最后得到
U=m(21/m−1)
,即为处理器的最小利用率上界
定理5 对于给定的m个任务集,如果采用固定优先级调度算法,该任务集的最小利用率上界是
U=m(21/m−1)
证明思路:当存在两个任务的周期之比大于等于2时。可以假定
Tm=qTi+r,q>1,r≥0
。用
τ,i
替代
τi
,
T,i=qTi,C,i=Ci
,同时增加
Cm
,使得任务集可以完全利用处理器的资源。
Cm
最多可以增加
Ci(q−1)
,则
由于 q−1>0,[1/(qTi+r)]−(1/qTi)≤0,U,≤U 。因此我们考虑任务集的使用率最小上界时,只需考虑任务集中任务的周期之比小于2的情况。
截止时间驱动调度算法
截止时间驱动调度算法:任务的截止时间越短,优先级越高,即EDF调度算法。该算法中,任务间的优先级顺序是动态变化的。
定理6 当用EDF调度算法调度是,在overflow之前,处理器是不会有空闲时间的。
证明思路:如果在overflow之前存在空闲时间,假设该空闲时间是
t1
到
t2
,overflow时刻是
t3
,如果将
τ1
移动到
t2
,由于
t2
和
t3
之间处理器没有空闲时间,所以移动到
t2
时刻,也不会出现处理器空闲的情况。将其他任务移动到
t2
时刻,也不会出现处理器空闲的时刻,而
t3
前,会出现overflow。和假设”任务overflow之前会存在空闲时间“相违背(证毕)。
混合调度算法
定义 让任务1,2,…,k 采用RM调度算法,在这k个任务的需求得到满足的情况下,任务k+1,k+2,…,m采用EDF调度算法
a(t)为t的单调增函数。如果
a(T)≤a(t+T)−a(t)
,则
a(t)
是sublinear的。t时刻前,处理器的计算时间可以用a(t)表示。
ak(t)
表示任务k+1,k+2,…,m可以利用的处理器时间。
定理8 如果采用EDF调度算法的任务集,其处理器上可用的时间
a(t)
是sublinear的,那么在overflow之前是处理器是没有空闲时间的。
定理9 对于采用EDF调度算法的任务,任务可以调度的充要条件是:任务的计算时间、周期以及这些任务可用的处理器时间之间的关系应满足
对所有
Tk+1,orTk+2,⋯,Tm
的整数倍的时刻均成立
推论1:三个任务
τ1、τ2、τ3
,
T1
最小,其中
τ1
采用固定优先级任务调度算法,
τ1、τ2
采用EDF调度算法,如果满足下式,则任务是可调度的
比较和注解
定理9表明,采用混合调度算法的任务集的利用率没法达到100%。举个简单的例子,有三个任务, T1=3,T2=4,T3=5 ,且 C1=C2=1 ,如果采用混合调度策略,因为 a1(20)=13 ,可以推出 C3 最大可以达到2,处理器的使用率为
如果采用EDF调度算法,
C3
可以达到
2.0833⋯
,处理器的利用率可以达到100%。
如果采用RM调度算法,
C3
只能达到1,
只比三个任务的最小利用率上界大一点。
尽管混合调度算法的任务界限没有找到,但是其利用率明显高于采用RM调度算法的任务集的利用率,因此混合调度策略可能在很多场合能被使用到