一种基于随机扰动的防饿死访存请求唤醒方法

文档序号:6374416阅读:159来源:国知局
专利名称:一种基于随机扰动的防饿死访存请求唤醒方法
技术领域
本发明主要涉及到面向多核处理器中访存请求的调度方法领域,特指一种基于随机扰动的防饿死访存请求唤醒方法。
背景技术
在多核处理器中,Cache提高了处理器核与存储器间数据交换的能力,但由于多个处理器核同时缓存同一数据块副本,也带来了数据不一致现象,给存储器层次设计增加了困难,这就是所谓的Cache —致性问题。基于目录的Cache —致性协议是目前很多处理器所采用的解决方法,它通过专用的目录项来记录和跟踪数据块的状态,从而清楚地知道哪些Cache应该对请求做出何种操作。在目录项中,数据块的“忙”状态是不可避免的一种状态,表明当前的目录项不能处理其他的访存请求,必须要等待使该项置“忙”的请求完成。 当从Cache来的访存请求遇到目录项为忙时,通常的处理方法是拒绝该请求的处理,直接将该请求返回到请求源,迫使请求源在适当的时机重发该请求。这种处理方法的好处是思路简单直接、易于硬件实现,缺点是将访存请求打回到请求源,不仅占用了宝贵的网络带宽,增加了访存延时,而且容易出现某些请求被反复打回而长期得不到处理造成饥饿的现象。为了解决这些问题,传统的方法是在请求报文和目录项中都增设优先级。当请求报文被多次打回后,其请求报文中的优先级和目录项中的优先级都会逐渐增加,这时低于目录项中优先级的请求(表明是新接收到的请求)就会被拒绝处理,直到高优先级的请求被处理完毕。这种处理方法虽然可以避免请求的饿死现象,但却增加了请求报文和目录项的宽度,由于一个系统中目录项数比较多,由此带来的硬件代价增加往往比较大,并且仍然有较多的低优先级请求报文被打回而得不到及时处理,浪费了网络带宽,增加了访存延时。

发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种能够消除访存请求的饿死现象、降低访存延时、减小硬件开销和网络带宽占用的基于随机扰动的防饿死访存请求唤醒方法。为解决上述技术问题,本发明采用以下技术方案
一种基于随机扰动的防饿死访存请求唤醒方法,当从Cache来的访存请求遇到目录项为忙时,令暂时不能处理的访存请求进入休眠状态,然后通过随机扰动的请求方式将处于休眠状态的访存请求唤醒,使其重新进入请求处理流水线。作为本发明的进一步改进
在访存请求处理部分设置一个休眠请求缓存队列SRQ,暂时不能处理的访存请求进入休眠请求缓存队列SRQ并处于休眠状态;在休眠请求缓存队列SRQ中等待的请求,从休眠请求缓存队列SRQ的出口按顺序被唤醒。
在休眠请求缓存队列SRQ出口的请求不是直接进入到请求处理流水线,而是再继续等待一个随机延时值后再进入请求处理流水线。在休眠请求缓冲队列SRQ的出口处设置一个随机数发生器,随机数发生器用来产生休眠唤醒的随机扰动延时值。在所述随机数发生器的输出端设置一个计数器,所述计数器打入随机数发生器产生的随机值作为初始值,当休眠请求缓冲队列SRQ中有请求需要被唤醒时,计数器开始倒计时;计数器值为0时,该请求被唤醒。在所述请求处理流水线中协议处理器的入口处增加一个请求仲裁器,请求仲裁器用来对请求处理流水线中输入请求缓冲器的请求和休眠请求缓冲队列SRQ中的请求进行仲裁。在所述请求仲裁器中,来自休眠请求缓冲队列SRQ的请求具体更高的优先级,即只要有来自休眠请求缓冲队列SRQ的已唤醒的访存请求,则优先处理。 与现有技术相比,本发明的优点在于本发明的基于随机扰动的防饿死访存请求唤醒方法,令暂时不能处理的访存请求进入休眠状态,并基于随机扰动的请求方式将其唤醒。这样,既消除了访存请求的饿死现象,又避免了打回请求而造成的带宽浪费和访存延时增加,从而实现了简洁高效、无饿死现象的Cache —致性处理方法。


图I是现有技术中典型协议处理控制器的结构示意图。图2是应用了本发明后的协议处理控制器的示意图。图3是本发明中休眠请求缓冲队列的示意图。图4是本发明中随机数发生器的逻辑结构示意图。
具体实施例方式以下将结合说明书附图和具体实施例对本发明做进一步详细说明。本发明方法的基本原理为令暂时不能处理的访存请求进入休眠状态,并基于随机扰动的请求方式将其唤醒。这样,既消除了访存请求的饿死现象,又避免了打回请求而造成的带宽浪费和访存延时增加,从而实现了简洁高效、无饿死现象的Cache —致性处理方法。 本发明是在访存请求处理部分增加一个休眠请求缓存队列SRQ (SleepingRequest Queue)。当从Cache来的访存请求遇到目录项为忙时,不是直接打回到请求源,而是进入休眠请求缓存队列SRQ中等待被唤醒。在休眠请求缓存队列SRQ中等待的请求,从休眠请求缓存队列SRQ的出口按顺序被唤醒,但被唤醒的请求暂时还不能直接进入到请求处理流水线,而是再继续等待一个随机延时值,以防止其再次遇忙而休眠,打破访存请求规律性的“唤醒一忙一休眠”循环。g卩,当Cache发出访存请求后,首先由输入请求缓冲队列(输入请求缓冲器)接收并暂存,如果目录项控制器可以接收新的请求来查询,则从输入请求缓冲队列中调度相应的请求进行目录项状态查询。如果目录项状态为“非忙”,则按正常处理流程进行,形成该请求的响应和新的目录项状态。如果目录项状态为“忙”,则该请求进入到休眠请求缓存队列中等待被唤醒。一旦休眠请求缓冲队列中有请求,则延时计数器从随机数发生器中打入一个随机值后开始倒计时,计数器为0时,该请求被唤醒,到请求仲裁器进行仲裁后重新查询目录项状态。本发明的基于随机扰动的防饿死访存请求唤醒方法主要应用于Cache —致性协议处理控制器中。该Cache —致性协议处理控制器为基于目录的Cache —致性处理控制器DB-CPC (Directory-Based Cache Coherence Process Controller),它包括输入请求缓冲器 IRB (Incoming Request Buffer)、目录存储器 DMU (Directory Memory Unit)、协议处理器 PPU (Protocol Process Unit)和输出响应缓冲器 ORB (Outgoing Response B uffer)。如图I所示,为现有技术中协议处理控制器的结构示意图。典型的Cache —致性协议处理控制器包含一个输入请求缓冲器IRB、一个目录存储器MDU,一个协议处理器PI3U和一个输出相应缓冲器0RB。输入请求缓冲器IRB用来接收来自Cache的一致性存储器访问请求,如独占读、共享读、写回和替换等,并将不能及时处理的请求暂存在缓冲器中。目录存储器MDU由若干目录项组成,每一个目录项对应于Cache中的一个数据块,记录并跟踪Cache中数据块的状态,以准确知道每个Cache的当前状态。协议处理部件PTO则根据目录项的状态形成当前请求的各种响应,并产生新的目录项内容重新写回到目录项中。输出响应缓冲器ORB暂存还没有发出的响应。如图2所示,本发明在上述结构的基于目录的Cache —致性处理控制器中设置一个休眠请求缓存队列SRQ,该休眠请求缓存队列SRQ的主体采用静态随机访问存储器SRAM构成,休眠请求缓冲队列SRQ用于存放处于休眠状态的请求。如图3所示,为本发明中的休眠请求缓冲队列SRQ。休眠请求缓冲队列SRQ的主体为SRAM组成的存储器,用于存放休眠的请求。休眠请求缓冲队列SRQ的辅助逻辑为读、写地址指针和请求计数器,用以完成队列的读写控制和空满标志。当协议处理器中的请求遇到目录项状态为忙时,该请求就会进入到休眠请求缓冲队列SRQ中休眠。休眠请求缓冲队列SRQ的深度确定可以综合考虑请求总数量、休眠请求缓冲队列面积和访问时间等因素,如果请求总数不是很多,则可以按最大请求数量设置休眠请求缓冲队列SRQ的深度。如果不能为全部请求都预留空间,则可以在休眠请求缓冲队列SRQ满时采用传统的打回请求的处理方法,由于所有请求都需要进入休眠状态的概率很低,因此不会对延时和带宽造成明显影响。参见图2,本发明在上述结构中进一步设置随机扰动源。即,在休眠请求缓冲队列SRQ的出口处设置一个16位的随机数发生器RDG (Random Generator),随机数发生器用来产生休眠唤醒的随机扰动延时值,该随机数发生器可以产生周期为216-1的伪随机数序列,随机数发生器采用移位寄存器和异或逻辑实现。如图4所示,为具体应用实例中一个随机数发生器的逻辑示意图。该随机数发生器由16个寄存器r0 rl5构成。其中r3、r4和r5的输入端在前一级输出的基础上,又和rl5做了异或操作,其他寄存器的输入端则直接从上一级的输出端接入。该随机数发生器是一个伪随机数发生器,其循环周期为216-1。本发明将上述产生的随机扰动加入到唤醒机制中。在随机数发生器RDG的输出端设置一个16位的计数器,扰动延时的具体实现是通过计数器来完成的。该计数器打入RDG产生的随机值作为初始值,当休眠请求缓冲队列SRQ中有请求需要被唤醒时,计数器开始倒计时。计数器值为0时,该请求被唤醒,进入请求仲裁器。为了防止请求等待时间过长,在计数器的打入端口,设置一个16位的延时屏蔽寄存器MASK[15:0],如果MASK[i] =1 (i=0,1,2,…,15),则计数器初始值CNT的相应位为0,即CNT[i]=0,这样便可以通过对MASK设置适当值以控制唤醒延时的最大值,实现了随机扰动的可配置,增加了访存调度的灵活性。参见图2,本发明进一步在协议处理器PPU的入口处增加一个请求仲裁器ARB,该请求仲裁器ARB对输入请求缓冲器IRB的请求和休眠请求缓冲队列SRQ中的请求进行仲裁。由于休眠请求缓冲队列SRQ中的请求已经进行了随机扰动延时,所以在请求仲裁器ARB中,来自休眠请求缓冲队列SRQ的请求具体更高的优先级,即只要有来自休眠队列的已唤醒的访存请求,则优先处理。以上仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的 普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,应视为本发明的保护范围。
权利要求
1.一种基于随机扰动的防饿死访存请求唤醒方法,其特征在于当从Cache来的访存请求遇到目录项为忙时,令暂时不能处理的访存请求进入休眠状态,然后通过随机扰动的请求方式将处于休眠状态的访存请求唤醒,使其重新进入请求处理流水线。
2.根据权利要求I所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在访存请求处理部分设置一个休眠请求缓存队列SRQ,暂时不能处理的访存请求进入休眠请求缓存队列SRQ并处于休眠状态;在休眠请求缓存队列SRQ中等待的请求,从休眠请求缓存队列SRQ的出口按顺序被唤醒。
3.根据权利要求2所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在 休眠请求缓存队列SRQ出口的请求不是直接进入到请求处理流水线,而是再继续等待一个随机延时值后再进入请求处理流水线。
4.根据权利要求2或3所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在休眠请求缓冲队列SRQ的出口处设置一个随机数发生器,随机数发生器用来产生休眠唤醒的随机扰动延时值。
5.根据权利要求4所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在所述随机数发生器的输出端设置一个计数器,所述计数器打入随机数发生器产生的随机值作为初始值,当休眠请求缓冲队列SRQ中有请求需要被唤醒时,计数器开始倒计时;计数器值为O时,该请求被唤醒。
6.根据权利要求5所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在所述请求处理流水线中协议处理器的入口处增加一个请求仲裁器,请求仲裁器用来对请求处理流水线中输入请求缓冲器的请求和休眠请求缓冲队列SRQ中的请求进行仲裁。
7.根据权利要求6所述的基于随机扰动的防饿死访存请求唤醒方法,其特征在于在所述请求仲裁器中,来自休眠请求缓冲队列SRQ的请求具体更高的优先级,即只要有来自休眠请求缓冲队列SRQ的已唤醒的访存请求,则优先处理。
全文摘要
本发明公开了一种基于随机扰动的防饿死访存请求唤醒方法,当从Cache来的访存请求遇到目录项为忙时,令暂时不能处理的访存请求进入休眠状态,然后通过随机扰动的请求方式将处于休眠状态的访存请求唤醒,使其重新进入请求处理流水线。本发明具有能够消除访存请求的饿死现象、降低访存延时、减小硬件开销和网络带宽占用等优点。
文档编号G06F11/00GK102831024SQ20121027481
公开日2012年12月19日 申请日期2012年8月3日 优先权日2012年8月3日
发明者李永进, 晏小波, 邓让钰, 周宏伟, 衣晓飞, 张英, 窦强, 马卓, 王永文, 谢伦国 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1