一种精简目录及利用该精简目录实现Cache一致性监听的方法与流程

文档序号:12963470阅读:605来源:国知局
一种精简目录及利用该精简目录实现Cache一致性监听的方法与流程

本发明涉及计算机技术领域,具体地说是一种精简目录及利用该精简目录实现cache一致性监听的方法。



背景技术:

随着芯片工艺和制造技术突飞猛进,处理器技术也随之不断发展和进步。几十个处理器计算核心甚至是一个完整的计算机系统都能够被集成在一颗硅片上。共享内存架构得益于其相对集群架构在同等结点规模下更加紧凑,计算性能更高的优势,成为当前科学计算中主流的编程模型。在分布式共享内存多处理器系统中,同一内存单元可能在多个处理器均有cache(缓存)副本,带来cache数据一致性问题。多处理器间的cache一致性维护不仅关系到系统正确性,也影响系统的性能。

cache一致性协议可采用源监听(sourcesnooping)或目录监听(directorysnooping)的方式维护多处理器间cache一致性。相比于源监听,目录监听适用于ca(cachingagent,缓存代理)数目、规模更大的多处理器系统,由于其以额外的存储器开销为代价,记录簇内各ca的cache状态,因此避免了监听报文广播和不必要的总线传输协议处理开销,提供了更好的可扩展性。因此基于目录监听的一致性协议成为目前实现共享内存多处理器系统的主流方法,减少cache一致性目录实现的开销也变得愈发重要。

目录监听利用位向量目录,位向量目录的基本思想是内存中的每个存储器块对应一个目录表项,每个目录表项包含n个指针和状态,n指处理器的个数,这些指针通过位向量标识。位向量的每一位对应于一个处理器,用于指出该处理器中有无该存储器块的拷贝。由于每个内存宿主中都需要有一个占用大量自身存储器空间的完整目录,因此位向量目录主要应用于处理器数较少的系统中。位向量目录的缺点是可扩展性较差。当系统中的处理器个数越多,位向量宽度对应增加,对应的存储开销也就越大。

如图1所示,在常规的位向量目录实现方法中,目录表项和系统的内存存储块为一一对应关系,每一个目录表项中都记录与其对应缓存块的共享状态和共享者列表,其中共享者列表(presencebit)的每一位对应于一个处理器。一般地,假设系统中处理器数为n,每个结点的局部存储器中有m个存储块,则目录的存储开销为nxmxn=mn2,与系统规模的平方成正比。显然,当系统规模较大时,位向量目录的硬件代价将变得无法容忍。



技术实现要素:

为克服上述现有技术存在的不足,本发明的目的在于提供一种扩展性良好、存储开销小的精简目录及利用该精简目录实现cache一致性监听的方法。

本发明解决其技术问题所采用的技术方案是:一种精简目录,包括内存表项和目录表项,所述内存表项的每项表示内存存储块,与目录表项的每项一一对应,所述目录表项的每项仅记录与相应内存存储块对应的cache块的状态信息。

优选地,所述cache块的状态信息共2位。

优选地,2位状态信息表示为state[1]和state[0];state[0]用于指示远端处理器的cache块是否有对应内存存储块的拷贝,state[1]用于指示远端处理器的cache块的状态是否为独占。

优选地,所述state[0]的值为1或0,若state[0]的值为1,则指示远端处理器的cache块有对应内存存储块的拷贝,否则指示远端处理器的cache块没有对应内存存储块的拷贝;所述state[1]为1或0,若state[1]的值为1则指示远端处理器的cache块状态为独占,否则指示远端处理器的cache块状态为共享。

利用所述的精简目录实现cache一致性监听的方法,包括以下步骤:

内存宿主根据接收的一致性报文获取对应内存存储块的位置;

内存控制器获取内存存储块对应的目录表项中cache块的状态信息;

判断state[0]的值,若state[0]为0,则向内存控制器直接推送针对内存存储块的访问请求,使该内存存储块进行读写操作;若state[0]为1,则进一步判断state[1]的值及一致性报文的类型;

若state[1]的值为1,或者一致性报文的类型为独占读或失效,则内存宿主向系统中所有处理器发起监听操作,若state[1]的值为0,且一致性报文的类型为独占读或失效时,内存控制器直接推送针内存存储块的访问请求,使该内存存储块进行读写操作。

优选地,在内存控制器获取内存存储块对应的目录表项中cache块的状态信息失败时,内存宿主向系统中所有处理器发起监听操作。

优选地,所述内存宿主向系统中所有处理器发起监听操作时,根据监听扇出原则,内存宿主在每个端口上发出1笔监听报文,与内存宿主直连的处理器接收并处理该监听报文,并向下一级处理器传播该监听报文。

利用本发明的技术方案获得的有益效果是:

1、本发明将目录表项中的内容进行精简,使目录表项的每项仅记录cache块的状态信息,大幅度减少了目录实现的存储开销,且存储开销与处理器个数呈线性关系,精简目录的可扩展性良好。

2、在内存控制器获取内存存储块对应的目录表项中cache块的状态信息失败时,内存宿主向系统中所有处理器发起监听操作,避免了目录和cache块状态不一致的风险,保证处理器获取到的数据为最新数据。

3、内存宿主向系统中所有处理器发起监听操作是,根据监听扇出原则,发出监听报文,避免目录精简后内存宿主不能精确指出哪些处理器拥有数据拷贝带来的不必要监听增多的问题,保证互联网络带宽性能不受影响。

附图说明

图1是现有技术中位向量目录的表项示意图。

图2是本发明精简目录的表项示意图。

图3是本发明的方法流程图。

具体实施方式

为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。

如图2所示,本发明提供了一种实现cache一致性的精简目录,精简目录包括内存表项和目录表项,其中内存表项的每项表示内存存储块,在数量上与目录表项的每项一一对应,目录表项的每项仅记录与相应内存存储块对应cache块的状态信息。cache块的状态信息有2位(2bit),用state[1:0]表示。

每位的编码信息具体为:

state[0]:用于指示任意远端处理器的cache块是否有对应内存存储块的拷贝,若state[0]的值为0,则指示无,针对该内存存储块的访问请求被直接推送到内存控制器,进行相应的dram读/写操作;若state[0]的值为1,则指示有,需要进一步查询state[1]的信息,决定是否由内存宿主向系统中的所有处理器发起监听操作。

state[1]:用于指示远端处理器的cache块的状态是否为独占,若state[1]的值为0,则指示为共享,当且仅当针对该内存存储块的访问请求为独占读(rfo)或失效(inv)时,内存宿主向系统中所由处理器发起监听操作,否则针对该内存存储块的访问请求被直接推送到内存控制器,进行相应的dram读/写操作;若state[1]的值为1,则指示为独占,任何针对该内存存储块的访问请求都会引起内存宿主向系统中所有处理器发起监听操作。

利用上述精简目录,假设系统中处理器的个数为n,每个结点的存储器包含m个存储块,每个目录项的存储开销为2bit,则精简目录的存储开销为2×m×n=2mn,针对每个结点,存储块的个数m是固定,因此精简目录的存储开销与处理器的个数呈线性关系,与位向量的存储开销与处理器个数呈平方关系相比,大幅度减小了目录实现的存储开销,且便于扩展。

如图3所示,本发明还提供了一种利用精简目录实现cache一致性报文监听的方法,具体步骤为:

内存宿主接收到来自互联网的cache一致性访存报文时,内存宿主根据cache一致性访存报文中携带的物理地址索引,查询精简目录,得到目录表项所对应的内存存储块的位置。

内存控制器获取该内存存储块对应的目录信息,若目录信息获取失败,即访问目录所对应的内存存储块出现不可纠正的错误时,直接对系统中所有处理器发起监听操作,避免目录和cache块状态不一致的风险;若获取信息成功,根据state[0]的值,判断远端处理器的cache块是否有该内存存储块的拷贝。

若state[0]的值为0,则向内存控制器直接托送针对该内存存储块的访问请求,进行相应的dram(dynamicrandomaccessmemory,动态随机存取存储器,是最为常见的系统内存)读/写操作。

若state[0]的值为1,则进一步判断state[1]的值以及cache一致性报文的类型。

若state[1]的值为1,或cache一致性报文的类型为rfo(requestforownership,独占读请求)或inv(invalid,失效请求),内存宿主向系统中所有处理器发起监听操作,根据监听扇出原则,内存宿主只在自身每个端口上发出一笔监听报文,与内存宿主端口直接连接的互联网中的处理器接收并处理该监听报文,并向互联网中的下一集处理器传播该监听报文。

若state[1]的值为0,且cache一致性报文的类型为rfo或inv时,内存宿主向内存控制器直接推送对该内存存储块的访问请求,进行相应的dram读/写操作。

在内存控制器获取目录信息失败时,说明目录信息有错,举例来说:当某个处理器上的cache块本身有数据副本,而内存宿主上的目录信息出错指示没有处理器的cache块拥有该数据,那么当下一个处理器对内存相同位置进行访问时,内存宿主不会对拥有数据副本的处理器进行监听,而直接将内存中的数据直接发送给下一个处理器,导致该处理器拿到的数据有可能是陈旧的错误数据,真正的数据有可能已经被有数据副本的处理器在cache块上修改了。因此当内存控制器获取目录信息失败时,为保证处理器获取到的数据为最新数据,同时避免了目录和cache块状态不一致的风险,对系统中所有处理器发起监听操作。

使用监听扇出原则进行报文监听和传播的好处在于:系统中所有的处理器并不是互相直接连接的,因此当内存宿主需要向系统所有的处理器发起监听报文时,内存宿主只向和它直连的处理器发出监听报文,对应具体操作是内存宿主只在自身每个端口上发出1笔监听报文,与内存宿主端口直接连接的互联网中的处理器接收并处理该监听报文,然后由和上述处理器直连的其他处理器对这笔报文进行下一级传播,这样能够有效的减少系统中处理器互连网络中的监听报文数量,保证互连网络带宽性能不会受到影响。

以上所述只是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也被视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1