一种基于片上多核处理器共享cache的动态公平划分方法

文档序号:6585352阅读:250来源:国知局
专利名称:一种基于片上多核处理器共享cache的动态公平划分方法
技术领域
本发明属于计算机体系结构领域,具体涉及一种基于片上多核处理器共享cache 的动态公平划分方法。
背景技术
多核处理器已成为今后微处理器发展的重要趋势,目前主流的片上多核处理器 (chip Multiprocessor,简称CMP)大多使用私有一级(或一级和二级)Cache (即为高速缓 存),共享二级(或三级)Cache的片上存储结构。这种结构通过共享二级(或三级)Cache 和更低的存储层,最大限度地提高资源利用率来避免重复开销。然而,随着并发执行线程数 量的增加,存储层所承受的压力也在不断地增大。最近的研究表明,共享Cache的冲突访问 对处理器的性能影响很大,而CMP中共享Cache的分配主要由LRU(LeastRecently Uesed) 策略隐式决定,设计高效的共享Cache划分算法成为当前研究的重要问题。
目前对共享Cache划分策略的研究几乎都是针对如何提高吞吐量的,对公平性的 研究极少。公平性是一个关键的优化问题。如果多用户系统采用的是单线程处理器,那么 操作系统(OS operated system)线程调度器通过合理的分配时间片就可以保证所有线程 公平的运行。但是如果多用户系统采用的是CMP处理器,所有被调度运行的线程共享Cache 资源,在缺乏公平性情况下,会出现线程饿死和优先级反转等问题。为了保证所有线程公 平,单纯依靠操作系统线程调度器是不够的,系统硬件必须提供相应的支持。实际上,在多 用户系统中,公平性比吞吐量更加重要,因为没有哪个用户愿意等待更长的时间。因此,将 公平性作为CMP结构下主要的优化目标,可以简化操作系统的设计,并且可以显著提升系 统整体性能。 公平性就是所有的线程有相同的机会获得其运行所要求的资源,并保证没有线程 饿死。但公平并不意味着所有线程具有相同的吞吐量。通常情况下,公平和效率(其主要 指标为系统吞吐量)相互影响和制约,一方的提高有时会带动另一方的改善,但有时会削 弱另一方。在某些特殊情况下,则会严重影响另一方导致系统失衡。例如追求效率最大化 时,会严重削弱系统的公平性。所以Cache的划分方案必须很好的平衡公平和效率,以达到 最佳设计目标。 因为公平性的定义没有给出定量的指标,所以公平性参数亦是众说纷纭。 一个被 广泛接受的参数是定义Tdedi为线程i独占整个Cache的执行时间,Tshri为线程i与其余线 程共享Cache的执行时间,则最公平的理想情况如式(1)所示, -二-= ... =- (1) 该等式被称为执行时间公平性标准数。Seongbeom Kim提出了一个公平优先的 cache划分方案,其公平性参数为式(2), — X, |,尤=^1 (2)
cache访问的缺失率(missr)或缺失数(miss)既与公平性紧密相关,易于测量,所 以Seongbeom Kim以缺失率或缺失数为测量点,给出定量评估Cache划分公平性的5个指 线(M丄 M》,如式(3) (7), M;=|Z,-JTJ, X= — (3) , A/咖_ M; =|《-《|, = — (4)
^f/=|Z—1|, ^ =-=—— (5)=|《一 X, I , Z = M雄一 (6) 二| X, - X I , 二 Mksr — — Afcr 一 (7) 但这5个指标有两点不足, 一是Mx用缺失率替代执行时间,这就不能准确的反映 线程的执行状态;二是Mx针对两个并发线程划分的评估,并没有给出多线程的评估指标,仅 将多线程间两两线程的评估指标累加和作为多线程的公平性评估标准,不能准确评估多线 程的公平性。

发明内容
为了解决现有的系统缺乏公平性问题,本发明的目的是提供一种基于片上多核处 理器共享cache的动态划分方法有效地提高系统公平性。为实现上述目的,本发明提供技 术方案如下( — )公平性评价参数 本发明使用线程相对执行时间作为公平性的度量标准,n个线程并发执行时,参数 S作为公平性的评价指标,其值越小越公平。参数如式(8),
'" (8)尤=,,1=丄|^, 假设CMP访问主存不发生缺失。设M工为每指令的一级Cache缺失次数,E工为访问 一级Cache命中开销,M2为每指令的二级Cache缺失次数,E2为一级Cache缺失时访问二 级Cache的命中开销,E3为二级Cache缺失时访问主存的命中开销,CPIi为平均每指令花 销周期数,CPIb_为平均每指令执行周期数,Inuffl为执行的指令数。贝機程i的执行时间1 如式(9) (11)所示。 Ti二CPIiXI画 (9)
CPIi = CPIbase+Ei+I^XE^I^XEs (10) M2 =-,Miss = L2Cache缺失数 (11) 因一级Cache私有则M工在线程i独占或共享二级Cache时不变化,且E^E^Es和 CPIbase亦不变化,令a = CPIbase+E^XEy P 二E"则Ti和Xi如式(12)和(13)所示,其
5中Misssi为n个线程共享运行时,第i个线程的二级Cache的缺失数,MisSdi为n个线程中 第i个线程独占二级Cache运行时的缺失数。
1\ = a XInum+P XMiss (12)
T, r由, a x / m + (3 x M/仏, ,…X = - =-- (13)
7Ved, a x / 詣+ (3 x M/Wrf, 式(13)中,a 、 |3和In,都可以在线程运行前获得,所以要想求得Xi,需要在线程 运行时获得Misssi和Missdi。 根据LRU替换策略的栈特性可获得MisSsi。给每个核增加一张表,该表的项目数与 整个二级Cache块数相同。这样每个核都可以用私有的LRU策略模拟独占使用共享Cache 时的执行。用该表记录每次访问Cache的块号,通过监控上级Cache失效时访问共享Cache 的块号,并且用块号在模拟表中匹配每一项,当出现所有项均不匹配时,即认为独占状态下 发生一次缺失。用一计数器保存缺失数,就得到独占Cache情况下的缺失数MisSdi,该计数 器称为独占缺失计数器。 定义向量P二 (PpP2,…,Pn)为共享Cache分配向量,其中Pi(0《Pi《Cj为线 程i分配的共享Cache容量。每个线程的Misssi随着划分Pt和运行时间1\变化,将Misssi 表示为Pi和1\的函数,则有式(14)。
minfmin ;f 7>
,=i
X二ax/肌m+PxMz'5^,'(尸',7j) ax/肌m+PxM/ssd,
(14) 求解上节式(14),令f取最小值0,就可得到公平性最优的Cache分配方案。但 在实际中,共享缺失数还受其它因素的影响,如操作系统对线程的资源分配等,所以无法确 定其具体的函数关系且求解该式花销巨大。因此将S2作为划分算法公平性的评价指标,在 线程运行一个时间片后,对其公平性进行评价,通过Cache划分策略降低S2。 [OO33] ( 二 )动态划分策略 本发明所述的动态划分策略主要分成三个步骤初始化、回溯和重划分。将应用程 序的运行时间均匀分块,每一块时间称为一个时间片t。初始化只在应用程序运行前执行一 次,回溯和重划分阶段则在每个时间片t结束后执行。设S2t为时间片t的公平性参数S2, 回溯阶段是计算公平性指标S2t大于上一时间片的S2t—工且与其之差大于回溯阈值,则撤销 上一次重划分。重划分阶段是若未发生回溯且S2大于重划分阈值,则对所有线程重新划分 Cache。在算法中,有四个基本的参数回溯阈值Sf^、重划分阈值S,^iti。n、划分粒度
gran和时间片t。 一般Sr。llbaek取值在1% 50%之间,Srepartiti。n取值在1% 10%之间, 划分粒度gran即是划分的最小单位取值在64B 64KB之间,t取值在100000 5000000 个时钟周期之间。算法的主要过程如下
(1)初始化 1. 1)所有线程等分高速缓存(Cache) , Pt = Cache总容量/n, Pt表示线程i所分 配的Cache大小,n表示线程总数,表示时间片t时线程i所分配的Cache大小;
6
1. 2)设Mi为每指令的一级Cache缺失次数,E:为访问一级Cache命中开销,E2为 一级Cache缺失时访问二级Cache的命中开销,E3为二级Cache缺失时访问主存的命中开 销,CPIb_为平均每指令执行周期数。MpE^E"E3和CPIb_的值由所使用的计算机体系结 构决定; 1.3)令a = CPIbase+E,M丄XE2, P =£3,计算出a禾P p ; (2)回溯阶段在时间片t结束时, 2. 1)计算时间片t时划分方案的公平性指标S2t : 2. 1. 1)读指令计数器获得时间片t内各线程执行的指令数1^,读独占缺失计数 器获得各线程独占cache状态下的缺失数Missdi ; 2. 1. 2)根据公式(I)计算出Tdedi, Tstoi等于时间片t,公式(I)如下
Tdedi = a XI画+P XMissdi (I) 2. 1. 3)根据公式(II)计算Xi和Xi的均值,公式(II)如下:

2. 1. 4)根据公式(III)计算S2t,公式(III)如下
"—11^
.--," (III) 2. 2)若S2t < S2t—p或I S2t_S2t—! | /S2t < Sr。llback则转到步骤(3); 2. 3)若S2t > S2t—p且I S2「S2t—丄I /S2t > Srollback,令P, = P1—、,转到步骤(4)。
(3)重划分阶段回溯阶段结束后, 3. 1)若S2t < Srepartiti。n,则转到步骤(4); 3. 2)若S2t > Sr印aw,则设Yi = X「 E X乂n,划分集PS = {P; PV…,PU和 候选集CS = {1,2,…,n); 3. 3)如I CS I > 2,选出Yi中的最大值maXYk和最小值minYj, k和j分别是最大值
和最小值的线程号;若maxYk《0或minYj > 0则转到步骤3. 6); 3. 4)如P、 = gran,则CS' = CS_{j},转到步骤3. 3); 3. 5)Pt+1k = ptk+gran, Pt+1j = P、-gran, CS' = CS_{k, j},转到步骤3. 3); 3. 6)若CS'中还有剩余的线程号i,则令= PV (4)转到步骤(2),直至n个线程运行结束。 本发明所描述的算法简化了划分步骤,提高了划分效率,使用S2作为公平性指标, 充分考虑到多线程间的相互联系,提高了系统的公平性。


图1是本发明所述的方法流程图;
图2是本发明所述的重划分阶段流程图; 图3是本发明所述的三种划分方法的线程相对执行时间对比图;
图4是本发明所述的三种划分方法的公平性参数对比图;
图5是本发明所述的三种划分方法的效率对比图。
具体实施例方式
下面以一个片上多核处理器为例,对本发明所述的方法进行详细的描述。处理器
配置如表1 : 表1CMP的配置
CMP配置
处理器4核,两级cache,乱序发射
一级Cache每核私有指令cache和数据cache:
指令cache: 32KB, 64B块大小,4-way LRU替换策略
数据cache: 32KB, 64B块大小,4-way LRU替换策略
二级Cache共享cache: 512KB, 64B块大小,8-way LRU替换策略
内存2GB 在该处理器上四个参数分别取值S llbadt = t = 1000000,具体划分步骤如下
(1)初始化
1. 1)所有线程等分Cache, Pi = 512KB/4 1. 2)根据当前所用计算机体系结构,则M工
10%、S
repartition
1 % 、 gran = 64B和
=0. 5







分集PS
:128KB ; 0. 1、E! = 3、E2
6、E3 = 158和CP工t
e+E,M丄XE2 = 4. 1禾P P = E3
158
1. 3)计算出=CPIt
(2) 回溯阶段:
2. 1)计算出当前划分方案的公平性指标S2,当前为第一个时间片,S =1. 38 ; 2. 2)如当前是第一个时间片结束,则令S2。 = 1000000 ;S < S;转到步骤(3);
2. 3)恢复上一时间片的划分方案,P, = 、。
(3) 重划分阶段回溯阶段结束,
3. 1)S > Sr印ar也i。n,进行重划分;
3. 2)设Yi = X「 E X乂n,则有Y丄=-0. 84, Y2 = 0. 49, Y3 = -0. 23, Y4 = 1. 82,划 ={128KB, 128KB, 128KB, 128KB}和候选集CS = {1,2,3,4};
3. 3) |CS| = 4 > 2,选出Yi中的最大值maxYk = Y4和最小值minYj = Ynk = 4, j =1 ;maxYk > 0且minYj < 0 ; 3. 4)P\ > gran,则P24 = P、+gran = 128064B,P =P -gran = 127936B,CS'= CS-{4,1} = {2,3}; 3. 5)转到步骤3. 3) ; | CS' | = 2, maxYk = Y2和minYj = Y3, k = 2, j = 3 ;maxYk > 0且minYj < 0 ; 3. 6)P、 > gran,则P22 = P、+gran = 128064B, P23 = P23_gran = 127936B, CS"= CS' _{2,3}=①; 3. 7)转到步骤3. 3) ; |CS〃 = 0 < 2,转到步骤(4)。
(4)转到步骤(2),直至n个线程运行结束。
8
用三种共享cache划分策略做对比Seongbeom Kim提出的DynamicFair caching (DFC)策略,隐式划分cache的LRU策略和本发明所述的S-DFC策略。用SPEC 2000 中的8个领lj试用例gzip、 vpr、 parser、 vortex、 bzip2、 twolf 、 mesa禾口 equake并发执行,三 种策略的线程相对执行时间如图3所示。从图4中可看出S-DFC较DFC进一步提高了系统 公平性,DFC在多线程环境中并不如在两线程中提高显著,而LRU明显公平性最差。图5则 表明S-DFC和DFC并未牺牲系统吞吐量,在提高公平性的同时系统吞吐量也有小幅提高。
权利要求
一种基于片上多核处理器共享cache的动态公平划分方法,其特征在于,包括以下步骤初始化、回溯和重划分;将应用程序的运行时间均匀分块,每一块时间称为一个时间片t;初始化只在应用程序运行前执行一次,回溯和重划分阶段则在每个时间片t结束后执行;设S2t为时间片t的公平性参数S2,回溯阶段是计算公平性指标S2t大于上一时间片的S2t-1且与其之差大于回溯阈值,则撤销上一次重划分;重划分阶段是若未发生回溯且S2大于重划分阈值,则对所有线程重新划分高速缓存Cache;在该方法中,有四个基本的参数回溯阈值Srollback、重划分阈值Srepartition、划分粒度gran和时间片t;Srollback取值在1%~50%之间,Srepartition取值在1%~10%之间,划分粒度gran即是划分的最小单位取值在64B~64KB之间,t取值在100000~5000000个时钟周期之间;具体过程如下(1)初始化1.1)所有线程等分高速缓存Cache,Pi=Cache总容量/n,Pi表示线程i所分配的Cache大小,n表示线程总数,Pti表示时间片t时线程i所分配的Cache大小;1.2)设M1为每指令的一级Cache缺失次数,E1为访问一级Cache命中开销,E2为一级Cache缺失时访问二级Cache的命中开销,E3为二级Cache缺失时访问主存的命中开销,CPIbase为平均每指令执行周期数;M1、E1、E2、E3和CPIbase的值由所使用的计算机体系结构决定;1.3)令α=CPIbase+E1+M1×E2,β=E3,计算出α和β;(2)回溯阶段在时间片t结束时,2.1)计算时间片t时划分方案的公平性指标S2t2.1.1)读指令计数器获得时间片t内各线程执行的指令数Inum,读独占缺失计数器获得各线程独占cache状态下的缺失数Missdi;2.1.2)根据公式(I)计算出Tdedi,Tshri等于时间片t,公式(I)如下Tdedi=α×Inum+β×Missdi(I)2.1.3)根据公式(II)计算Xi和Xi的均值,公式(II)如下 <mrow><msub> <mi>X</mi> <mi>i</mi></msub><mo>=</mo><mfrac> <msub><mi>Tshr</mi><mi>i</mi> </msub> <msub><mi>Tded</mi><mi>i</mi> </msub></mfrac><mo>,</mo><mover> <mi>X</mi> <mo>&OverBar;</mo></mover><mo>=</mo><mfrac> <mn>1</mn> <mi>n</mi></mfrac><munderover> <mi>&Sigma;</mi> <mrow><mi>i</mi><mo>=</mo><mn>1</mn> </mrow> <mi>n</mi></munderover><msub> <mi>X</mi> <mi>i</mi></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mi>II</mi> <mo>)</mo></mrow> </mrow>2.1.4)根据公式(III)计算S2t,公式(III)如下 <mrow><msup> <mi>S</mi> <mn>2</mn></msup><mo>=</mo><mfrac> <mn>1</mn> <mrow><mi>n</mi><mo>-</mo><mn>1</mn> </mrow></mfrac><munderover> <mi>&Sigma;</mi> <mrow><mi>i</mi><mo>=</mo><mn>1</mn> </mrow> <mi>n</mi></munderover><msup> <mrow><mo>(</mo><msub> <mi>X</mi> <mi>i</mi></msub><mo>-</mo><mover> <mi>X</mi> <mo>&OverBar;</mo></mover><mo>)</mo> </mrow> <mn>2</mn></msup><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mi>III</mi> <mo>)</mo></mrow> </mrow>2.2)若S2t<S2t-1,或|S2t-S2t-1|/S2t<Srollback则转到步骤(3);2.3)若S2t≥S2t-1,且|S2t-S2t-1|/S2t≥Srollback,令Pt+1i=Pt-1i,转到步骤(4);(3)重划分阶段回溯阶段结束后,3.1)若S2t<Srepartition,则转到步骤(4);3.2)若S2t≥Srepartition,则设Yi=Xi-∑Xi/n,划分集PS={Pt1,Pt2,…,Ptn}和候选集CS={1,2,…,n};3.3)如|CS|≥2,选出Yi中的最大值m axYk和最小值minYj,k和j分别是最大值和最小值的线程号;若maxYk≤0或minYj≥0则转到步骤3.6);3.4)如Ptj=gran,贝CS′=CS-{j},转到步骤3.3);3.5)Pt+1k=Ptk+gran,Pt+1j=Ptj-gran,CS′=CS-{k,j},转到步骤3.3);3.6)若CS′中还有剩余的线程号i,则令Pt+1i=Pti;(4)转到步骤(2),直至n个线程运行结束。
全文摘要
本发明涉及一种基于片上多核处理器共享cache的动态公平划分方法,属于计算机体系结构领域。公平性是一个关键的优化问题,当系统缺乏公平时,会出现线程饿死和优先级反转等问题。而目前CMP的设计以提高系统吞吐量为主要目标,这样往往会牺牲系统的公平性。本发明提出了一种新的公平性参数和划分方法。划分方法分成三个步骤初始化、回溯和重划分。初始化在线程运行前等分cache。回溯阶段是撤销上一次重划分反而公平性降低的划分。重划分阶段是若未发生回溯且公平性参数大于重划分阈值,则对所有线程重新划分Cache。采用本发明提出的共享Cache划分方法显著提高了系统公平性,并且系统吞吐量也有小幅提高。
文档编号G06F9/50GK101739299SQ20091024365
公开日2010年6月16日 申请日期2009年12月18日 优先权日2009年12月18日
发明者方娟, 蒲江 申请人:北京工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1