多核共享Cache分析
随着应用需求的提升,实时系统的复杂度也在迅速提高。实时系统大多是嵌入式系统,因而对于系统的体积、重量、功耗等方面有着苛刻的要求。
- 在多核处理器中,所有处理核心通常共享末级Cache。由于所有核心上的任务并行执行,因此在共享的末级Cache上,任务之间也会发生冲突。
- 在一个任务完成之前,它在末级Cache中的数据或指令会被其它任务替换出Cache——任务间干涉。
- 任务间干涉导致一个任务的WCET不再仅仅依赖任务本身,同时也受到与其并行执行的其它任务的影响。
- 从状态空间的角度来讲,整个系统的状态空间本质上是所有并行任务状态空间的乘积,状态空间随着核心数量的增加呈指数爆炸。
- 多核共享Cache分析的关键是如何对任务间在共享Cache上的干涉行为进行有效的抽象,就是要找到一种既能保证分析精确性,又能有效削减状态空间的干涉模型。
- 采用模型检测技术对基于多核共享Cache的体系结构进行WCET分析。将每个核心上运行的程序建模成一个时间自动机,同时将共享Cache也建模为时间自动机。通过运行模型检测器搜索系统的全部状态空间,找到每个程序执行时间的最大值。这一方法的本质:不对程序行为做任何抽象。在单核环境下,基于模型检测的分析方法的可扩展性已经是一个很严重的问题;对于多核共享Cache分析,将出现更加严重的状态空间爆炸问题。
- 1.扩展和改造单核体系结构下基于抽象解释的分析技术。首先采用抽象解释技术对每个核心上的任务进行多级Cache分析,得到各级Cache上的CHMC分类结果。
- 2.分析程序之间在共享Cache上是否产生干涉,如果一个程序的某个访问可能被其它任务干涉,其CHMC访问特性都将变成NC。这一方法显示是安全的,但是精确性难以得到保证。
- 3.对每个核心上的程序进行多级Cache分析,得到CHMC分类结果。之后,分析程序在共享Cache上的干涉行为。假设A程序与B程序并行执行,欲分析a程序的WCET。那么对于A程序中的每个内存块,可以从抽象状态中提取它在末级Cache上的最大年龄。假设Cache相联度为A,内存块m的最大年龄为age(m)。如果B程序向该Cache组中载入的内存块的个数不超过A-age(m),就能保证m不会因为程序B的执行被替换出Cache。否则,将m的CHMC分类变为NC.
- 将单核系统上的抽象解释分析扩展到多核共享Cache,也会将这一技术的缺点引入。基于抽象解释的Cache分析,其不精确的一个主要来源就是路径分析与Cache行为分析的分离。
非LRU替换策略
- 目前,研究领域普遍认为LRU替换策略的可预测性最好,但是由于LRU替换策略的硬件实现代价太大,如硬件逻辑电路、功耗、散热等,实际处理器通常使用类LRU的替换策略。如MRU、RLRU、FIFO等,这些替换策略不仅易于硬件实现,且能达到较高的平均性能。
- 即便如此,多年来,绝大多数面向WCET估计的Cache分析技术都假设采用LRU替换策略,是因为在非LRU替换策略下,程序在Cache中的行为特征非常复杂,难以建模。
- 相对竞争性的分析框架:这一分析框架的基本思想:在两种替换策略A和B之间建立相对竞争关系,如果已知替换策略A下的Cache失效数量的上限,就可以根据分析得到的竞争关系,间接计算出程序在替换策略B下的Cache失效数量的上限。
- 与抽象解释分析视图获取AH,AM,FM等分类不同,相对竞争分析方法的本质不是针对具体的每个访存进行行为特性的分析,而是将整个程序看做一个整体,对Cache失效给出一种全局的数量统计表达。
- 但是该分析方法存在问题:该方法不是针对每个访存的特性进行分析,因此得到的信息比较粗糙,一般情况下,分析结果不精确;该方法随着Cache相联度的增加遭遇可扩展性问题。
- 针对FIFO替换策略的分析方法:基于抽象解释理论为FIFO替换策略下的Cache行为建立了一个较为复杂的MUST区域和MAY区域,采用与LRU替换策略类似的不动点迭代的方法,对程序在Cache中的行为进行分类。但这种分析框架的本质还是视图分析哪些访存具备AH和AM类型的访问特性。
- 在MRU替换策略下,内存块s在经过若干次Cache失效之后,s会驻留在Cache组中年龄较大的位置,在循环剩余的轮次中,访问都为命中,他们证明了内存块s失效的次数是有上限的,且这一上限与Cache的相联度有关。在MRU替换策略下,访存的这种行为特征被称为K-MISS。
- 对于反复被访问的内存块,它的命中和失效的数量在满足一定条件的情况下符合某种比例关系。假设Cache相联度为4,如果在两次访问d之间至少有4个其它访存,那么后一次访问d一定失效。通过分析对某个内存块的任意两次相邻访问之间的距离,并确定这个距离不超过某个固定值,就可以得到命中与失效的比例。
- 基于相对竞争性的方法挖掘的是程序全局的行为特性,而上述方法分析的具体每个访存的行为特性。
- 基于相对竞争性的方法所给出的失效数量上限的比例,是针对任何程序一个安全的比例,因此很悲观。而采用Cache命中/失效比例这种更反映FIFO替换策略下程序行为特性的描述,精确性更高。
Cache与Cache分析对时间可预测性的影响
时间可预测性是所有实时系统研究者所关注的问题。
- 研究Cache分析,不仅要研究用于WCET估计的具体分析技术,而且需要将Cache分析放入实时系统时间特性分析的大框架中。
- Axer提出了时间可预测性的一般性量化定义。
- Q表示程序所有可能的初始硬件状态,I表示程序所有可能的输入条件,Pr表示程序的可预测性,其值越小,可预测性越差。显然Pr值等价于在各种可能的执行情况下,一个程序BCET和WCET的比值。这个可预测性是从任务执行时间波动的角度来定义的。
- 在实际应用中,通常采用分析手段获得BCET和WCET的估计值。以WCET为例,分析得到的通常是WCET的悲观估计,所以Pr值会更小,分析得到的可预测性就越差。
- 有人用不确定性和惩罚的乘积定义WCET估计值与程序客观WCET的差值。其中,不确定性是指那些在静态分析中不得不考虑而在程序实际执行中一定不会发生的时间行为;惩罚表示分析中每个这样的时间行为对WCET估计值造成影响。
- Cache是一个能够带来高惩罚的硬件部件。因为Cache命中和失效的时间延迟巨大,对命中行为的不精确性分析会显著增加WCET估计的悲观性。因此,Cache是影响程序时间可预测性的重要因素。
- 评判一个替换策略的可预测性如何,本质上要看从这种替换策略下程序的执行时间波动情况。
- 假定程序BCET不变,仅探讨WCET方面的影响。显然,有两个方面的因素会影响最终的评判结果。
- 首先,对于两种替换策略A和B,程序在A策略下的客观WCET越大,A策略带来的时间可预测性就越差。
- 其次,即使在两种替换策略下程序具有相同的WCET,如果对某个WCET分析技术不精确,那么得到的WCET估计值也就更悲观,那么这个替换策略的时间可预测性就不好。
- 定义了两个概念:evict和fill,以具体描述不同Cache替换策略的可预测性。对于给定的替换策略,evict的取值表示经过多少个两两不同的访存后,就可以安全地确定某些元素一定不会存在于Cache中;fill的取值表示经过多少个两两不同的访存后,A路组相联Cache中的元素一定是最好A个访问过的内存块。
- LRU替换策略这两个值比较小,因此可预测性好。
总结与未来的研究方向
实时系统的首要任务是分析程序的最坏情况执行时间。由于Cache是影响程序执行的最重要因素之一,因此Cache分析的质量直接决定了执行时间分析的质量,进而影响到对系统可预测性的评价。
- 多核共享Cache分析研究
如前所述,多核共享Cache分析的关键点是对核间冲突行为的有效抽象。通过设计方法(软件层面和硬件层面)来减少核间干涉,从而简化分析提高性能的技术。 - 非LRU替换策略的分析以及Cache可预测性的评价