与CC[3]相比,动态溢出接收机制(Dynamic Spilling-Receiving,DSR)[1]基于采样和Set-Dueling方法来挖掘处理器核间的粗粒度访存需求差异特性,能够根据应用程序动态变化特性来控制“溢出者”(Spiller)和“接收者”(Receiver)身份决策与转换.事实上,多核私有Cache环境中,在Cache Set层次存在明显的细粒度访存需求差异现象,常常出现某些Cache Set承载的访存压力较大,而位于其他远程处理器私有Cache上的同级Cache Set承载的访存压力较小[4-6].
Herrero等人[7]提出了弹性协作缓存机制ECC (Elastic Cooperative Caching),从Cache Bank层次引入容量划分的思想,能够根据应用程序行为动态、自主地调整每个结点上的Cache空间划分,允许为重用性较高的线程构造较大的本地私有Cache,还允许从其他结点未使用的Cache容量中占用较大的共享空间.Fujieda等人[8]则在ECC的基础上,提出为每个处理器核设计相应的命中频率计数器HFC(Hit Frequency Counter)来统计处理器核层次的粗粒度访存需求差异,考虑了各核在访问片上末级Cache时命中不同LRU栈时的权值情况,用以指导多核私有Cache之间的容量共享与划分决策.
可以看出,溢出机制和私有/共享空间划分思想为多核私有Cache的容量失效问题提供了新颖的解决思路.然而,CC机制[3]在溢出操作时执行过程中存在盲目性,DSR机制[1]则无法精确感知Set层次的访存差异情况;ECC机制[7]和HFC机制[8]则均是以处理器核为粒度来统计访存需求差异,不能充分挖掘核间访存需求在Cache Set层次的细粒度差异特性.
为此,本文针对多核处理器私有Cache结构面临的容量失效问题,提出一种基于细粒度伪划分的核间容量共享机制(A cache capacity sharing mechanism based on fine-grained pseudo-partitioning,CSFP).CSFP通过为每个Set设置加权命中饱和计数器来统计和预测多核各线程间在Set层次的细粒度访存差异情况,并以此指导每个聚合Set上同级Set间的私有/共享容量分配,实现划分引导的替换与溢出决策,进一步改善多核处理器在实现核间容量共享时牺牲块替换、溢出和接收操作的智能性.
2 基于细粒度伪划分的容量共享机制
为便于后续描述,本文将各处理器核私有Cache Bank中具有相同索引值的Set称为同级Set(Peer Set)[1];在16个Cache Bank中,索引值相同的16个同级Set构成一个聚合Set(Aggregate Set)[9].
CSFP从3个方面改善传统溢出与接收机制在实现私有Cache间容量借用时的性能:第一,从细粒度层次考虑了同一聚合Set上各个同级Set之间的访存压力横向非均衡分布问题,并且考虑了访存踪迹分布的LRU栈距离特性;第二,基于聚合Set中各个同级Set间的细粒度存储压力差异情况,对各同级Set进行分类并指导私有/共享空间划分决策;第三,通过牺牲块替换、溢出、接收的协同操作来实现Set层次的细粒度容量伪划分,控制各Set中本地块和溢出块的比例,改善核间容量共享机制的自适应性.
由于需要对访存压力细粒度表征和划分引导的替换-溢出决策机制提供硬件支撑,CSFP对Cache模块进行了相应扩展,其体系结构支撑和数据管理框架如图1所示.
首先,为每个Cache块增加了两个状态标识位:Spilled位和Singlet位,Spilled位用以标识数据块是本地块还是溢出块,Singlet位用来标识该数据块是否为片上唯一副本.其次,为每个Cache Set增加了一个8位的加权饱和计数器(Weighted Saturating Counter,WSC)、一个2位的压力状态表征标识域Pressure-State以及一个Private-Quota容量划分控制域.最后,为对溢出操作选择合适的目的地,和ECC[7]类似,CSFP为每核设置一个4位的接收者指针Destination-Pointer.
从数据处理流程来看,CSFP需逐步完成以下工作:1)基于WSC的细粒度访存需求差异评估方法;2)访存需求差异感知的Set分类与自适应容量划分策略;3)划分引导的牺牲块选择与溢出决策机制.
2.1 基于WSC的细粒度访存需求差异评估方法
为评估多核处理器私有Cache间在Set层次的细粒度访存需求差异情况,CSFP从细粒度层次为每个Cache Set扩展了一个加权饱和计数器WSC[10]. WSC[10]与HFC[8]均可以用来评估核间访存需求差异,二者不同之处在于:HFC用于评估不同处理器核的Cache Bank间的访存压力情况,属于粗粒度的访存需求差异评估机制,而WSC用于评估同一聚合Set中各个同级Set间的访存需求差异,属于细粒度层次的访存压力感知机制.
WSC的计数值能够从细粒度层次直观反映当前Cache Set的存储压力特性:一方面,若处理器核在本地目标Set中的访问命中越频繁,则说明当前Cache Set中的数据块对片上末级Cache命中率的贡献越大.另一方面,从数据重用特性的角度考虑,WSC值越大,表明该Set中的数据块被频繁访问,或者访存序列经常命中LRU栈底部,数据重用时表现出的LRU栈距离较长[8].