一、引言
-
多核平台的优势:
- 多核处理器相较于单核处理器有两个显著优势:更强的计算能力和更低的能耗。因此,它们越来越多地被应用于CPS中,比如自动驾驶、智能制造等需要实时计算的系统。
-
问题的核心:
- 多核平台中的多个核心通过一个共享的系统总线连接到内存层级结构(包括缓存和主存)。当多个核心同时需要读取或写入数据时,会产生竞争,这种竞争会导致任务的执行时间出现不可预测的波动。
- 因为在这些系统中,执行时间的变化会影响任务的调度,从而影响整个系统的实时性要求。解决这个问题的关键在于分析和计算总线争用情况下的最坏响应时间(WCRT)。
-
3阶段任务模型的提出:
- 文章提出了3阶段任务模型,任务的执行被分为三个阶段:
- 获取阶段(Acquisition, A):任务从主存读取数据。
- 执行阶段(Execution, E):核心执行任务代码,使用A阶段获取的数据。
- 返回阶段(Restitution, R):将处理后的数据写回主存。
- 这种模型有助于减轻共享资源(如总线)带来的不确定性,因为在执行阶段,任务只需要访问本地内存,减少了对共享总线的需求。
- 文章提出了3阶段任务模型,任务的执行被分为三个阶段:
-
总线阻塞:
- 即便采用3阶段任务模型,任务依然可能在A阶段和R阶段争用总线。当多个核心需要同时访问总线时,其中一个任务会因为总线被占用而进入等待状态,这种情况称为总线阻塞。
- 文章的目标是分析总线阻塞对任务调度的影响,特别是推导出在固定优先级分区调度下的最坏响应时间,以确保系统能够按时完成任务。
二、系统模型
-
多核平台:
- 假设平台由多个相同的核心组成,每个核心都有自己的本地内存(例如缓存或scratchpad),用来存储任务运行时所需的数据和指令。
- 多个核心通过一个共享的系统总线访问主存,总线的仲裁策略是先到先服务(FCFS),即任务按到达顺序使用总线。
-
任务模型:
- 任务被分为三个阶段:A(获取数据)、E(执行任务)和R(返回数据),这就是3阶段任务模型。每个任务在单独运行时,每个阶段都有其最坏执行时间(WCET),分别记作 CAi、CEi 和 CRi。
- 任务的总执行时间是这三个阶段执行时间的总和,即 Ci=CAi+CEi+CRi
-
调度模型:
- 文章假设使用分区调度,即在系统设计时,每个任务已经被分配到了一个核心上。每个核心有一个优先级队列,按任务的优先级顺序执行任务。
- 任务在A阶段开始时申请总线访问权,如果总线被占用,任务必须等待总线空闲。等到总线空闲时,优先级最高的任务先执行。
- 一旦任务进入执行阶段E,它会立即在核心上运行,执行完成后进入R阶段,再次申请总线写回数据。如果总线仍然被占用,任务需要等待。
-
总线争用和最坏响应时间的计算:
- 文章提出一种方法来分析由于其他核心的任务占用总线而引发的总线阻塞,并且计算每个任务在总线争用情况下的最坏响应时间(WCRT)。总线争用是系统中最大的挑战之一,因为它会导致任务执行的不可预测性,从而影响系统的整体性能。
三、忙窗口计算(Busy Window Computation)
1. 不可抢占性任务
- 假设系统中的任务一旦开始执行获取阶段(A-phase),它就不能被中途抢占,直到返回阶段(R-phase)完成。这使得任务的行为类似于单核系统中的不可抢占系统。
- 在单核平台上使用固定优先级不可抢占调度(FPNP)的情况下,任务τi的最坏响应时间通常发生在其最长的level-i忙窗口中。
2. level-i忙窗口的定义
- level-i忙窗口指的是一个时间区间(a,b),在这个区间内,所有优先级高于或等于任务τi的任务的工作负载在区间内的任意时刻均为正值,并且在区间两端a和b时为0。
3. 计算任务的最长忙窗口
- 为了计算任务τi的最长忙窗口,我们需要考虑任务在执行过程中可能遭遇的最大干扰和最大阻塞。
- 在单核系统中,任务τi可能仅受到来自一个低优先级任务的阻塞,并且会受到所有高优先级任务的干扰,这些任务会在任务τi之前执行。
- 但是,在多核系统中,任务τi除了上述的低优先级任务阻塞和高优先级任务干扰之外,还可能受到由于其他核心上的任务占用系统总线引发的总线阻塞(bus blocking)。这可能导致任务无法及时访问总线,进而延长任务的忙窗口。
4. 迭代公式计算忙窗口
- 定义任务τi在核心πl上执行时的level-i忙窗口的长度为Wi,l。这个忙窗口可以通过以下迭代公式计算:
公式中:
- 是低优先级任务可能对任务τi产生的最大阻塞时间。它等于低优先级任务集中所有任务的最大执行时间。
- 表示在长度为Wi,l的时间窗口内,任务τi可能遇到的总线阻塞时间,即其他核心上的任务占用总线导致的阻塞时间。
- ∑τh∈hepi,l(ηh+(Wi,l)×Ch)是高优先级任务对任务τi造成的最大干扰。是任务τh在时间窗口Wi,l内可能释放的最大任务数,Ch是任务τh的最坏执行时间。
5. 总线阻塞的边界(Bounding the Bus Blocking)
1. 定义总线阻塞的次数
为了限制任务在本地核心 πl 上运行时,由于远程核心 πr 上的任务导致的总线阻塞,首先需要计算以下两个值:
- 本地核心的总线阻塞次数 :任务在本地核心 πl上可能遭遇的总线阻塞次数,这个阻塞次数与总线的使用冲突有关。
- 远程核心引发的总线阻塞次数 :远程核心 πr 上的任务可能在时间窗口 Wi,l 内引发总线阻塞的次数。
2. 引理1:本地核心的总线阻塞次数
本地核心 πl 在时间窗口 Wi,l 内可能遭遇的总线阻塞次数由以下公式表示:
解释:
- 这个公式的意思是:任务在本地核心上遭遇的总线阻塞次数与在这个时间窗口内释放的高优先级或同优先级任务数有关。
- ηh+(Wi,l)是任务 τh\tau_hτh 在时间窗口 Wi,l 内可能释放的最大任务数。
- 附加的1:表示在特定情况下,任务可能在返回阶段或获取阶段遭遇额外的阻塞(见下面的两种情况)。
推导:
- 在最坏情况下,本地核心上的任务只会在一个任务的R阶段(返回阶段)之后才能执行其A阶段(获取阶段)。
- 因此,除第一个任务外,每个任务都会在其R阶段完成后立即开始A阶段执行,之后可能在A阶段之前遇到一次总线阻塞。
附加1的解释:
- 情况1:如果忙窗口中的第一个任务是低优先级任务,它只能在其R阶段阻塞更高优先级任务的A阶段。因此,附加1代表这种低优先级任务引发的阻塞。
- 情况2:如果没有低优先级任务阻塞,则附加1表示第一个任务的A阶段阻塞。
3. 引理2:远程核心引发的总线阻塞次数
远程核心 πr 在时间窗口 Wi,l 内可能引发的总线阻塞次数由以下公式表示:
解释:
- 这个公式的意思是:远程核心上的任务集 Γr 在时间窗口 Wi,l 内可能引发的总线阻塞次数,取决于远程核心上的任务在时间窗口内可能释放的任务数。
- 这个公式与引理1类似,但它考虑的是远程核心的任务对本地核心任务的影响,而不是本地核心内部的任务争用。
6. 最大总线阻塞计算
任务在本地核心 πl 上可能遭遇的总线阻塞与远程核心 πr 的任务有关。在不同情况下,本地核心和远程核心任务的总线争用次数可能不同,因此需要根据不同情况计算最大总线阻塞。
文章考虑了三种主要情况:
这里的 表示本地核心上任务的总线争用次数,而 表示远程核心上任务引发的总线争用次数。
情况1:
-
Lemma 3 提出了计算此情况下最大总线阻塞的公式:
其中,CAr,x是第 x 个任务的 A 阶段的执行时间,CRr,y 是第 y 个任务的 R 阶段的执行时间,且这两个阶段都与远程核心 πr上的任务有关。
解释:
- 如果本地核心的总线争用次数多于远程核心,那么本地核心的任务可能会在远程核心上的任务完成其内存访问(A 阶段或 R 阶段)之前遭遇阻塞。因此,本地核心的任务可能会被远程核心的任务在 A 和 R 阶段阻塞。公式中的两项分别代表这些 A 阶段和 R 阶段的总阻塞时间。
情况2:
-
Lemma 4 提出了在这种情况下的最大总线阻塞公式:
其中,min表示从 A 阶段和 R 阶段中去掉执行时间最小的那一项。
解释:
- 当本地核心和远程核心的总线争用次数相等时,最大总线阻塞时间需要去掉一个最小的 A 阶段或 R 阶段。这是因为在最坏情况下,可能有一个阶段(A 或 R)不会对总线争用造成影响,因此需要从总时间中减去这一最小的阶段。
情况3:
-
这种情况下,远程核心上的任务比本地核心上的任务引发更多的总线争用。文章通过将远程核心上的 A 和 R 阶段分成两组来计算最大总线阻塞:
- MArH和 MRrH 包含总线争用次数较多的 A 阶段和 R 阶段。
- MArL 和 MRrL包含剩下的 A 阶段和 R 阶段。
Sub-case 1:
- 如果参与总线争用的任务数多于本地核心的任务数,那么公式为:
Sub-case 2:
- 如果参与总线争用的任务数等于本地核心的任务数,则需要去掉其中一个最小的 A 阶段或 R 阶段,并且考虑其他更大内存需求的阶段。
公式为:
解释:
- 在这种情况下,我们需要移除参与总线争用次数较少的任务中的最小阶段(A 或 R),并考虑其他任务的最大内存阶段。