专利名称:用于动态镜像库寻址的系统和方法
技术领域:
本发明涉及计算机系统,更具体而言,涉及在多个诸如存储器库(bank)这样的存储器资源之间镜像数据。
背景技术:
高性能计算机系统常利用多个处理器或中央处理单元(CPU)。每个处理器能够访问共享和个人数据,例如存储在耦合到处理器的存储器中的诸如算法这样的程序指令以及数据。一种更常见的多处理器体系结构被称为脉动阵列(systolic array),其中在网格状拓扑中每个处理器耦合到其最近的邻居,并且处理器对在其间流动的数据执行操作序列。一般来说,脉动阵列的处理器以“锁定步骤(lock-step)”方式操作,其中每个处理器在计算相位和通信相位之间交替。
脉动阵列通常用于要解决的问题可被分区为离散的工作单位的情形。在包括单“行”处理器的一维(1-D)脉动阵列的情形中,每个处理器负责对输入数据执行相异的一组指令以便生成输出数据,输出数据随后(可能与其他输入数据一同)被传递到阵列的下一个处理器。为了使吞吐量最大化,对问题进行划分从而使得每个处理器需要大致相同的时间量来完成它的那部分工作。以这种方式,新的输入数据可以以等于每个处理器的处理时间的速率被以流水线方式输入到阵列,其中输入数据被并行处理的单位数等于阵列中处理器的数目。通过将更多的处理器加入到阵列中就可以提高性能,只要问题可继续被划分为更小的工作单位即可。一旦达到了划分极限,就可以通过并行配置多个行来进一步提高处理能力,其中新的输入数据被顺序分配到阵列中下一行的第一处理器。
可有利地采用诸如脉动阵列这样的多处理器体系结构的一种场合是数据通信领域。具体地说,脉动阵列已用于诸如路由器这样的中间网络站点或节点的转发引擎中。中间节点通过一系列端口互连计算机网络的通信链路和子网,以在计算机网络的两个或更多个末端节点之间进行数据交换。末端节点一般通过根据预定义的协议交换离散分组或帧来进行通信,所述预定义的协议例如是传输控制协议/因特网协议(TCP/IP)或因特网分组交换(IPX)协议。中间节点通常使用转发引擎来处理在各种端口上接收的分组。该处理可包括确定分组的目的地(例如输出端口)以及将分组放置在与目的地相关联的输出队列上。
转发引擎的多个处理器通常具有对于一个或多个存储器资源的共享访问权限,在这些存储器资源中存储了所有处理器所需的信息,例如转发表。此外,每个存储器资源可包括多个存储器库。为了确保多个处理器对数据有一致的“视图”,通常在不同的存储器资源和/或库被访问的同时在其上加锁。例如,试图从特定库读取信息的处理器在执行读操作的同时锁定该库,以便其他处理器无法在执行读取时修改其内容。类似的,试图写入信息的处理器也锁定各自的库,以便其他处理器不能从库中读取,直到写操作完成。虽然这种锁定机制确保了数据一致性,但是当多个处理器尝试访问来自相同库的信息时,这种机制常导致延迟。
为了减小或消除这种延迟,已知将一个存储器库的内容复制到另一个存储器库中。例如,如果存储器资源具有四个库,则库0(B0)的内容可被镜像到库2(B2),而库1(B1)的内容可被镜像到库3(B3)。即,库B2-B3的内容是库B0-B1的内容的镜像。为了利用此配置,每个处理器被分配到两个群组之一,每个群组只被允许访问被镜像的那组库中的一个库。换句话说,第一处理器群组利用库B0-B1,而第二处理器群组利用库B2-B3。如果来自第一群组的处理器需要读取存储在B1处的信息,则它只锁定库B1,而使库B3不被锁定,库B3中包含了库B1处的信息的完全相同的复本。因此,即使库B1被锁定了,来自第二群组的处理器仍可访问库B3。通过这种方式,来自每个群组的处理器可同时读取相同的信息。
为了实现这种镜像配置,处理器通常执行读取器代码和写入器代码。处理器的读取器代码被预定义为针对处理器所关联到的存储器库,例如库B0-B1或库B2-B3。读取器代码执行循环(例如自旋锁(spinlock)),直到处理器获得对正被读取的特定存储器库(例如库B1)的锁定为止。一旦获得该锁定,处理器就发起读操作,并且结果被返回到请求处理器。然后处理器释放该锁定,从而允许另一处理器访问存储器库B1。由于所有的信息都被镜像在两个库处,因此必须在两个位置都执行写操作以保持数据一致性。在此情况下,写入器代码执行自旋锁,直到在两个库(例如库B1和库B3)上都获得了锁定为止。一旦两个库都被锁定,处理器就发起两个写操作。在两个写操作完成之后,锁定被释放,从而允许两个库被其他处理器所访问。
此外,共享的存储器资源常对尝试访问该资源的处理器进行某种仲裁。通过仲裁,存储器资源尝试防止一个处理器重复获得对存储器资源的访问权限,并且因而防止重复地阻止其他处理器获得访问权限。典型的仲载方案将会强迫刚刚访问过存储器资源的处理器等待,直到所有其他处理器都已被给予了访问存储器资源的机会为止,然后才允许原处理器再次访问存储器资源。如上文所提到的,写入到镜像存储器库的处理器发起两个写操作,一个写操作到一个存储库。假定存储器资源实现仲裁方案,则处理器在发起第一写操作后将不得不等待,直到所有其他处理器都已被给予了访问存储器资源的机会为止,然后该处理器才被允许发起第二写操作。然而,由于处理器在发起写操作之前锁定了两个库,因此这两个库在整个这段时间中都会保持被锁定。结果,将会阻止其他处理器访问任何一个库,直到允许两个写操作完成为止。这可能会降低系统的效率。
因此,存在对于更高效的存储器资源机制的需求。
发明内容
本发明提供了一种动态寻址技术,用于在存储器资源的多个库之间镜像数据,并且用于高效地访问该数据。存储器资源被优选地部署在如下系统中该系统具有多个处理器和一个存储器控制器,该存储器控制器可操作地耦合到存储器资源。每个处理器可向存储器控制器发布请求,以访问存储器资源。存储器控制器包括多个缓冲器,用于存储请求;以及仲裁器,用于确定被缓冲的存储器请求被授予对存储器资源的库的访问权限的顺序。存储在存储器库中的信息优选地被组织成可单独寻址的单元,例如存储器块。此外,每个存储器地址被配置为包括镜像标志字段,该字段可以被发布各个请求的处理器所断言(assert)或解除断言(de-assert)。
根据本发明,为了写入在两个存储器库处被镜像的信息,处理器发布具有被断言的镜像标志定段的单个写。存储器控制器检测到该写的镜像标志被断言,并且作为响应,等待两个存储器库都变得可用。此时,存储器控制器致使在两个库处执行写操作。值得注意的是,存储器控制器被配置为确保在任何其他请求被允许访问主题存储器库之前,两个存储器库都会根据写操作而被更新。有利地,两个存储器都不需要被锁定以便写操作被完成。
此外,希望读取已在两个存储器库间被镜像的数据的处理器可接收来自任何一个存储器库的数据,即使读操作只指定两个库之一也如此。更具体而言,处理器优选地向存储器控制器发布读请求,该读请求指定所需的存储器地址。此外,处理器优选地断言指定的存储器地址的镜像标志字段。虽然请求只指定一个存储器库,但是因为镜像标志字段被断言,所以存储器控制器检查具有所需信息的两个库的可用性。即,存储器控制器检查指定的存储器库以及作为指定库的镜像的库。如果任一个存储器库可用,则读请求被接受,并且所需的数据被从可用的存储器库中取出并被返回到处理器。同样,处理器不必在发布其读操作前锁定存储器库。相反,存储器控制器被配置为防止其他针对此同一个存储器库的请求移动到该读请求之前。此外,本发明不是在库级别上镜像数据,而是在块级别上镜像数据。从而,系统允许将选中的存储器块(例如被频繁访问的表)从一个库镜像到另一个,而不必镜像存储器库的全部内容。因此,本发明动态地增大了存储器资源的有效存储空间。
以下发明描述参考附图,附图中图1是计算机网络的框图,该计算机网络包括附接到多个末端节点的互连的通信介质和子网的集合;
图2是可有利地用于本发明的诸如网络交换机这样的中间网络节点的部分示意性框图;图3是图2的节点的转发引擎的部分示意性框图,该转发引擎具有被组织成多维脉动阵列的多个处理器;图4是根据本发明的存储器控制器的示意性图示;以及图5和6是根据本发明的存储器地址的示意性图示。
具体实施例方式
图1是计算机网络100的框图,计算机网络100包括附接到多个站点的互连的通信介质和子网的集合。站点一般是计算机,包括末端节点102、112和中间网络节点200。中间节点200可以是路由器或网络交换机,而末端节点102、112可以包括个人计算机、工作站、服务器、个人数字助理(PDA)等等。子网通常包括局域网(LAN)110和120,但是本发明也可有利地用于其他通信介质配置,如点对点网络链路、广域网(WAN)、无线网络等等。网络站点之间的通信一般受根据预定义的协议在通信末端节点之间交换诸如帧或分组这样的离散网络消息的影响,其中预定义的协议例如是如因特网协议(IP)、因特网分组交换(IPX)协议、AppleTalk协议、DECNet协议等等。
图2是中间节点200的示意性框图,在图示实施例中,中间节点200优选地是网络交换机。节点200通常执行第二层(L2)处理功能,如“直通(cut-through)”操作,其中,不必在传送到目的地之前存储整个帧。另外,节点200也实现第三层(L3)转发操作和路由处理。这里所描述的体系结构的特征是能够对节点200编程以执行L2、L3或更高层的操作。为此,节点200的操作将就网络分组的交换来描述,但是其也可被编程用于附加或其他应用程序,如数据加密,流控制等。
中间节点200包括多个互连组件,所述多个互连组件包括阵列式的转发引擎300、诸如外部存储器(Ext Mem)资源280这样的各种存储器、缓冲和排队单元(BQU)210和网络端口接口卡240。这些组件的操作优选地由时钟模块270同步地控制,但是转发引擎300的阵列式元件也可异步运行。在图示实施例中,时钟模块270经由时钟线向节点200的组件全局地分配其时钟信号。
外部存储器资源280通常包括可由转发引擎300寻址的随机访问存储器(RAM)存储位置,其用于存储被组件访问的软件程序和数据结构。其一部分一般驻留在外部存储器280中并由引擎300所执行的操作系统,除其他方式外,也可通过调用支持在节点200上执行的软件处理的网络操作,来功能性地组织节点200。本领域的技术人员很清楚,其他存储器设备(包括各种计算机可读介质)可用于存储并执行程序指令。
如图所示,阵列式转发引擎300耦合到外部存储器(Ext Mem)资源280。缓冲和排队单元(BQU)210连接到用于存储分组的分组存储器220和用于在数据结构上存储分组头部的队列存储器230,所述数据结构例如是链接列表,其可被组织为队列235。BQU 210还包括数据接口电路,用于经由具有仲裁器255的选择器电路250将转发引擎300与多个线路卡240互连。线路卡240例如可包括光学载波第12级(OC12)、光学载波第48级(OC48)和快速以太网(FE)端口,其中每个包括传统的接口电路,该传统接口电路并入了信号、电和机械特性以及交换电路,该传统接口电路需要接口到物理介质和运行在该介质上的协议。中间节点200的一般配置可包括这些接口上的许多输入/输出信道,每个信道与队列存储器230中的至少一个队列235相关联。转发引擎300通常用作交换处理器,其随着BQU 210实现队列操作来顺次修改分组和/或头部。
路由处理器260执行传统的路由协议以与转发引擎300直接通信。路由协议通常包括末端节点之间的拓扑信息交换,以例如基于目的地IP地址确定经过网络的最优路径。这些协议提供了路由处理器260用来创建并维护路由表(未示出)的信息。这些表可被加载到外部存储器280中作为转发信息基础(FIB)表,转发引擎300用转发信息基础(FIB)表来执行转发操作。当根据IP交换处理头部时,引擎300通过利用头部的IP地址在FIB表中索引来确定向何处发送分组。转发操作的执行导致头部的目的地媒体访问控制(MAC)地址被转发引擎300重写以识别分组的输出端口。
图3是转发引擎300的部分示意性框图,该转发引擎300包括多个处理器元件,例如处理器(XMC)330,这些处理器元件被组织成多维脉动阵列。被个处理器330例如是流水线式处理器,其包括,除了其他以外,多个算术逻辑单元(ALU)和具有多个通用寄存器的寄存器文件,其中通用寄存器存储ALU所处理的中间结果信息。处理器330可被排列成多行和多列。在图3的图示中,处理器330被排列成8×4阵列式配置中的八(8)行(虽然只有四行被示出)和四(4)列(虽然只有两列被示出),该阵列式配置被嵌入在输入缓冲器310和输出缓冲器380之间。在优选实施例中,处理器以8×2阵列的方式被排列,但是其他排列方式也可有利地用于本发明,这些其他排列方式,除了其他以外,包括4×4、4×8或8×1阵列式配置。
每行的处理器330被配置为“流水线”,以顺序地对在这里也被称为上下文数据的暂态数据(例如分组头部)执行操作,而每列的处理器330并行操作,以对暂态数据执行基本上相同的操作,但却是以移动了的阶段执行。每个阶段包括预定的周期时段,例如128个周期。排序电路(未示出)通过确保每个处理器330在新阶段中加载新暂态数据到流水线中之前完成当前暂态数据的处理,来控制每个流水线的处理器330。一般而言,当所有处理器330完成对其当前上下文的处理,并且新输入的上下文被完整接收到时,处理的新阶段开始,即上下文交换被执行。
如上所述,转发引擎300经由存储器控制器400耦合到多个外部存储器(Ext Mem)资源280。每个外部存储器资源280优选地是一个或多个小延迟随机访问存储器(RLDRAM)设备,其中每一个都具有多个库。然而,本领域的技术人员将会意识到也可使用其他存储器设备,例如快速周期随机访问存储器(FCRAM)设备或者甚至同步随机访问存储器(SRAM)设备。外部存储器资源280优选地用于存储非暂态数据(例如转发表,队列等),这些非暂态数据被组织成一系列数据结构,用于处理暂态数据。与每个处理器330相关联的是一个生成物理地址(GEN PHYADDR)电路340,它将由处理器作为存储器访问请求的一部分发b布的逻辑存储器地址转换成对应的物理地址。GEN PHY ADDR电路340可沿将处理器耦合到存储器控制器400的线路或总线部署。应该注意,线路(未示出)也从存储器控制器400延伸回处理器330,以向其返回信息。此外,每个处理器330优选地具有一个存储器管理单元(MMU)(未示出),用于以接口连接存储器控制器400和外部存储器280。GEN PHYADDR电路340可以是MMU的一部分。
中间节点200的合适平台是来自California,San Jose的思科系统公司的7200路由器系列。
图4是根据本发明的存储器控制器400的部分示意性框图。存储器控制器400包括多个请求队列402-407(只示出其中某些)。每个请求队列接收和缓冲存储器访问请求,这些请求是在存储器控制器400处从耦合到其的处理器之一接收到的。例如,请求队列402接收和缓冲由处理器P0发布的存储器访问请求,请求队列403接收和缓冲由处理器P1发布的存储器访问请求,请求队列404接收和缓冲由处理器P2发布的存储器访问请求,以此类推。每个队列具有头部和尾部。在请求被接收到时,它们被放置在各个请求队列的尾部。作为例示,每个队列能够保存多达八个请求。
耦合到存储器控制器400的是其各自的外部存储器280,每个外部存储器具有多个库,例如八个库410a-h。每个库存储固定量的信息,例如4兆字节(MB),以便每个外部存储器资源280具有总共32MB的存储器。存储器控制器400还具有多个状态机412-419,一个状态机用于一个存储器库。例如,状态机412(SM 0)与存储器库410a(B0)相关联,状态机413(SM 1)与存储器库410b(B1)相关联,状态机414(SM 2)与存储器库410c(B2)相关联,以此类推。每个状态机412-419在用于其各自的存储器库的多个状态之间转换,所述多个状态包括可用状态和忙碌状态。
存储器控制器400优选地实现两层仲裁方案,用于确定在任何给定存储器访问周期期间哪个存储器访问请求可被执行。具体而言,存储器控制器400具有顶层仲裁器422,其检查哪个请求队列具有未解决的存储器访问请求。顶层仲裁器422还接收由库可用性(BANK AVAIL)信号424所指示的关于状态机412-419中的哪一个可用于接收存储器访问请求的信息,以及MEMORY LOCK BLOCK(存储器锁定阻止)信号425。正如这里所说明的,顶层仲裁器422每个周期从请求队列402-407中选择一个请求,用于发布到由与请求相关联的存储器地址所确定的由选中的请求所针对的库状态机。请求被传递到指定的状态机,如箭头426所示。选中的请求优选地是其所需的状态机可用并且未被存储器锁定所阻止的最老的请求,或者更早的镜像写请求或原子事务。第二层仲裁由底层仲裁器428所执行,该仲裁器与状态机412-419和外部存储器280具有通信关系。一般而言,底层仲裁器428在考虑所需要的诸如总线这样的资源的可用性的情况下,从状态机412-419中取出最老的请求,并将其发布到外部存储器280。状态机412-419和底层仲裁器428可被部署在外部存储器驱动器430处。
根据本发明,存储器控制器400还包括镜像标志检测电路432,其检查包含在存储器访问请求中的存储器地址;动态镜像引擎434,其执行本发明的动态镜像库寻址方案;以及库映射表436,其指示哪个伴随存储器库(例如库410h(B7))包含一个存储器库(例如库410d(B3))的镜像数据。在图示实施例中,组件432、434和436都被部署在顶层仲裁器422处。
为了执行其仲裁功能,顶层仲裁器422优选地包括多个寄存器或位图,顶层仲裁器422检查和操纵这些寄存器或位图,以便选择用于发布到状态机的请求。具体而言,顶层仲裁器422具有一般以440指示的多个顺序位图(例如一个顺序位图对应于一个请求队列)、全局未决(PEND)位图422、全局合格位图443和比较逻辑444。正如这里所描述的,顶层仲裁器422还包括全局镜像写请求位图446和多个库命中位图448。顺序位图440指示每个特定请求已在其各自的请求队列头部等待了多长时间。用于设置顺序位图的PEND位图442指示哪些请求还得被发布。合格位图443指示哪些请求有资格被发布到状态机412-419。基于顺序位图和合格位图中的信息,比较逻辑444确定目前处于请求队列头部的位图中哪些被允许,而哪些被阻止。具体而言,比较逻辑444优选地在每个周期中对顺序和合格位图440、443执行逻辑与(AND)操作,以确定在该周期期间哪个请求将会被发送到其状态机。
每个顺序位图440优选地具有多个1比特字段,其中每个比特与特定的请求队列相关联。顺序位图440中的每一个优选地由顶层仲裁器422所设备,以指示哪些处于其请求队列的头部的请求比特定顺序位图所关联的请求老。具体而言,当新请求到达其请求队列的头部时,比较逻辑444对PEND位图442以及具有较低的处理器ID值并且也刚到达其请求队列的头部的其他请求执行逻辑或(OR)操作。然后此逻辑或(OR)操作的结果被输入到与该新请求相关联的顺序位图中。
全局PEND位图442具有多个1比特字段,其中每个比特与请求队列中特定的一个相关联。在向状态机发布被允许的请求时(即在顶层仲裁器422的每个周期期间),比较逻辑444断言全局PEND位图442的每个比特,所述每个比特对应于在其头部仍然具有等待发布到状态机的请求的请求队列。
全局合格位图443也具有多个1比特字段,其中每个比特与一个特定请求队列相关联。合格位图443的每个比特优选地被顶层仲裁器442设置为指示哪些处于其请求队列的头部的请求有资格被发布到各自的状态机412-419。具体而言,如果状态机当前不可用,或者它被存储器锁定所阻止,则对应于针对该状态机的处理器请求的合格位图443的比特位置优选地被解除断言。从而,保持被断言的那些比特位置代表有资格被发布的请求。
存储器控制器400优选地是通过一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA)而以硬件形式实现。然而,本领域的技术人员将会意识到,可利用硬件和软件的各种组合,包括固件。实际上,存储器控制器400的功能方面可以完全通过存储在诸如只读存储器(ROM)这样的存储介质上的并且被一个或多个处理元件所执行的软件来实现。
在操作中,转发引擎300的处理器330(图3)向各自的存储器控制器400发布存储器访问请求(例如读、写和原子事务)。诸如读-修改-写这样的原子事务包括必须在无中断的情况下被执行的多个操作。存储器控制器400致使读、写和原子事务在外部存储器280处被执行,并且在适当时,将被请求的数据返回处理器330。术语“数据”想要被用于其最广泛的意义中,以包括任何信息,例如表条目、字、串、值、指令、旗语等。外部存储器280处存储的信息优选地被组织成可单独寻址的存储器块,或者更简单地说,被组织成可单独寻址的块。在优选实施例中,每个存储器块包含64比特数据,以及8比特误差校正码(ECC),总共72比特。然而,本领域的技术人员将会意识到,可采用其他尺寸。处理器330通过将特定的块的逻辑地址附加到请求中,而指定该特定的块。
处理器330优选地利用可称为微代码的读取器代码和写入器代码而被配置,以用于生成和发布存储器访问请求。在现有技术系统中,读取器代码和写入器代码指示各个处理器要使用哪组存储器库。例如,处理器P0-P3处的微代码可指定这些处理器是针对存储器库B0-B3的,而处理器P4-P7处的不同的微代码可指定这些处理器是针对存储器库B4-B7的。利用本发明,在所有处理器处可使用相同的读取器代码和写入器代码。即,不需要将处理器与特定的存储器库相关联。
应该理解,处理器330(图3)和存储器控制器400可利用流控制机制,以防止当处理器的请求队列已满时,该处理器处的MMU发布附加的存储器访问请求。
图5是适用于本发明的逻辑地址500的格式的高度示意性图示。逻辑地址500优选地具有32比特的长度,并且被组织成多个字段。具体而言,逻辑地址500具有比特位置31处的1比特外部存储器标志502、比特位置30处的1比特流/块标志504、比特位置29处的1比特镜像标志506和保存逻辑地址的28比特逻辑地址字段508。外部存储器标志如果被断言的话,则指示对应于该逻辑地址的存储器块在外部存储器280处。流/块标志指示字段508的逻辑地址是流地址还是块地址。用于实现流和块寻址模式的适当的机制在共同拥有的美国专利No.6,505,269(“a DynamicAddressing Mapping to Eliminate Memory Resource Contention in aSymmetrical Multiprocessor System”)中有所描述,这里通过引用将其全部包含进来。
逻辑地址被处理器各自的GEN PHY ADDR电路340转换成物理地址。GEN PHY ADDR电路340可利用一个或多个翻译后备缓冲器(TLB)(未示出),以便将逻辑地址翻译成物理地址。
图6是由GEN PHY ADDR电路340所转换的物理地址600的格式的高度示意性图示。物理地址600优选地具有27比特的长度,并且也被组织成多个字段。具体而言,物理地址600具有比特位置26处的1比特流/块标志602、比特位置25处的1比特镜像标志604以及25比特物理地址字段606,该物理地址字段606依次具有库号码子字段608和偏移量字段610。GEN PHY ADDR电路340将逻辑地址500的流/块标志字段504的内容和镜像标志字段506的内容不改变地复制到物理地址600的相应字段602和604中。GEN PHY ADDR电路340将逻辑地址字段508的内容翻译成物理地址,并将此翻译后的物理地址加载到物理地址600的字段606中。库号码指定特定的存储器库,而偏移量指示存储器库内的位置。
一旦存储器访问请求的地址已被翻译,该请求就被发送到存储器控制器400,在这里它被存储在对应于发布该请求的处理器的请求队列中。
在图示实施例中,逻辑地址对应于一个字节,而物理对应于32比特(4字节对齐)字。
镜像读请求假设处理器P0对在两个库处被镜像的块发布读请求。P0生成物理地址500,并断言外部存储器标志502。P0还根据数据是流还是块模式来设置字段504。另外P0还断言镜像标志506,因为此地址对应于镜像块。正如这里所描述的,本发明能够将关于存储器块的粒度的信息从一个库镜像到其伴随库。即,利用本发明,只有那些具有实际需要被镜像的信息的块才被在两个存储器库之间镜像,所述信息例如是被频繁访问的表。第一库中不包含被频繁访问的信息的那些存储器块不必被镜像到第一库的伴随库。这释放了存储器库中相当大的空间。在优选实施例中,处理器330“知道”哪些块被在多个库之间镜像,以及因而哪些逻辑地址的镜像标志字段506应该被断言。例如,微代码可以用此信息而被编程。
GEN PHY ADDR电路340将逻辑地址转换成物理地址。例如,假设物理地址指定库B2 410c中的块,其中库B2 410c是与处理器P0相关联的存储器库之一。正如上文提到的,GEN PHY ADDR电路340将逻辑地址的流/块标志字段504的内容复制到物理地址的流/块标志字段602中,并且将逻辑地址的镜像标志字段506的内容复制到物理地址的镜像标志字段604中。然后具有该物理地址的读请求被发送到存储器控制器400,并被放置在与P0相关联的请求队列402的尾部。在请求到达队列402的头部时,它们被顶层仲裁器422移出队列,并且剩余的请求被前移。
当主题读请求到达请求队列402的头部时,它被顶层仲裁器422所检查,其中顶层仲裁器422根据相对于请求到达其他请求队列403-407的头部的时间而言的请求到达请求队列402的头部的时间来更新顺序位图440。然后镜像标志检测电路432确定与主题读请求相关联的物理地址的镜像标志604是否已被断言。在此示例中,镜像标志字段604被断言,从而致使动态镜像引擎434将读操作视为动态镜像读操作。响应于动态镜像读操作,动态镜像引擎434确定哪两个存储器库410包含指定的存储器块。如上所示,物理地址指定库B2 410c处的块。假设库映射表436指示库B6 410g被映射到库B2 410c。换句话说,被请求的块的复本既存在于库B2上,又存在于库B6上。在此情况下,动态镜像引擎434检查对应于库B2 410c的状态机414的可用性,以及对应于库B6 410g的状态机418的可用性,即使请求只指定库B2也如此。正如上文所提到的,库状态机如果处于可用状态(即当前不具有等待发布到外部存储器280的请求),则将其视为可用的。
如果状态机414或418可用,则必要资源被视为可用,并且合格位图443被设置为指示主题读请求有资格被发布。为了确定在任何给定周期期间发布哪个合格请求,比较逻辑444将顺序位图440与合格位图443相比较,以确定哪个合格请求是最老的请求。只有当请求到达其请求队列的头部时,才开始变老。如果两个合格请求具有相同的年龄,则顶层仲裁器422可将处理器标识符作为平局决胜标准(tie-breaker),其中较低的标识符具有较高的优先级。例如,如果处理器P1和P6都具有相同年龄的合格请求,则P1的请求被选择。如果没有其他请求在时间上老于主题读请求,则它被允许且发送到可用的状态机,例如状态机418。如果状态机414和418都可用,则动态镜像引擎434优选地选择请求所指定的那个,例如状态机414。顶层仲裁器422经由线路426将主题读请求从请求队列402传递到状态机418。
在外部存储器驱动器430处,具有请求的状态机412-419对外部存储器280的访问权限进行仲裁。为了防止写饥饿(write starvation),底层仲裁器428可被配置为按“严格”基于年龄的仲裁方案操作,在该方案中,最老的请求赢得仲裁,即使其资源当前不可用也如此,从而导致底层仲裁器428停止后续请求,直到资源变得可用,并且最老的请求可被发布。或者,底层仲裁器428可被配置为按写推迟模式操作,此模式导致仲裁器428尝试读和写并将读和写分组到一起,以便减少总线回转停止(bus-turn-around stall)。如果两个请求具有相同的年龄,则库状态机标识符可被用作平局决胜标准,其中较低的标识符值具有较高的优先级。当主题读请求变成最老的存在必要资源的请求时,它被发送到外部存储器280。指定的存储器块被从库B6 410g中读出并返回到P0。
如图所示,指定库B2 410c的主题读请求未被停止,即使库B2 410c不可用也如此。相反,根据本发明,镜像标志字段604的断言允许主题读请求被镜像存储器库(即库B6 410g)所服务。从而与利用现有技术时将会发生的情况相比,P0更快地接收其数据。即,因为其镜像标志字段604被断言的读请求具有对两个相关联的存储器库的访问权限,所以与其只具有对单个存储器库的访问权限相比,读请求通常会更快地被允许。例如,如果正如上述示例中的情况那样,状态机414正在忙于服务某个其他的请求,则如果状态机418(它未被读所指定)可用,P0的读请求仍然会被允许。
为了从未被镜像的存储器块读取数据,处理器P0优选地使物理地址500的镜像标志字段504被解除断言。在此情况下,存储器控制器400将可能指定存储器库B1 410b的读请求视为标准或正常读请求。具体而言,当此读请求到达队列402的头部时,镜像标志检测电路432得出逻辑地址的镜像标志字段604被解除断言的结论。在此情况下,仅当处理存储器库B1 410b的状态机413可用时,读请求才变得合格。由于镜像标志字段604未被断言,所以此读请求没资格被镜像到库B1 410b的存储器库所服务。
如图所示,无论镜像标志字段506是否被断言,处理器300都不需要获得对从中读出数据的存储器库的锁定。相反,处理器简单地发布其读请求,并且存储器控制器400确保读请求在后来接收到的对于指定的存储器块的请求之前被执行。
镜像写请求假设处理器P6希望执行对在两个存储器库之间被镜像的存储器块的写操作,所述两个存储器库例如是库B3 410c和库B7 410h。根据本发明,P6处的微代码致使处理器发布指定要被写的存储器块的逻辑地址的单个写请求。逻辑地址对应于两个存储器库中与P6相关联的那个特定的存储器库,例如,库B7 410h。处理器P6优选地断言逻辑地址500的镜像标志字段506。GEN PHY ADDR电路340将逻辑地址500翻译成物理地址600,将逻辑地址的镜像标志字段506的内容复制到物理地址的镜像标志字段604中。然后写请求被发送到存储器控制器400,在这里它被放置在对应于处理器P6的请求队列406的尾部。
当写请求到达队列406的头部时,它被顶层仲裁器442检查。具体而言,动态镜像引擎434检查镜像标志604,并且确定它被断言。从而动态镜像引擎434将主题写请求视为动态镜像写请求。作为响应,动态镜像引擎434访问库映射表,以确定哪个库(例如库B3 410d)被映射到库B7410h,其中库B7 410h是主题写请求的目标存储器库。在此情况下,顶层仲裁器422等待,直到存储器库B7 410h的状态机(即状态机419)以及存储器库B3 410d的状态机(即状态机415)都可用,然后才认为主题写请求有资格被发布。如果状态机中只有一个而不是两个可用,则顶层仲裁器422不认为必要资源可用。一旦两个状态机415和419可用,顶层仲裁器就相应修改全局合格位图443,并且写被允许,假设它是最老的合格请求的话。如果它是最老的合格请求,则顶层仲裁器422将主题写请求发布到状态机415和状态机419,从而致使它们不可用。然后状态机415和419对外部存储器280的访问权限进行仲裁。
为了确保定向到给定存储器库的写和原子事务在其他也定向到给定的存储器库但是却在写和原子事务之后到达其请求队列的头部的其他事务之前被传递到各自的状态机,顶层仲裁器422还包括全局镜像写请求位图446,以及一般指示为448的多个库命中位图。全局镜像写请求位图446和每个库命中位图448具有多个1比特的比特字段,其中每个比特与一个特定的请求队列相关联。
如果处理器(例如P5)向库B6发布镜像写请求(或镜像原子事务),则当该写请求到达其请求队列405的头部时,顶层仲裁器422断言镜像写请求位图446的各自的比特(例如第六比特)。另外,如果另一处理器(例如P7)也向库B6发布到达其请求队列407的头部的请求(例如读请求),则顶层仲裁器422断言请求队列407的库命中位图448的第六比特,因为它与位于请求队列405的头部的P5的镜像写请求一样,针对相同的存储器库(即库B6)。在每个周期中,每个处理器的顺序位图440、其库命中位图448和全局镜像写请求位图446被逻辑地与(AND)在一起。然后结果被用于设置合格位图443中处理器相应的比特位置,以及BANK AVIL信号424和MEMORY LOCK BLOCK信号425。换句话说,如果处理器的请求寻求与镜像写或镜像原子事务相同的存储器库,并且处理器的请求在镜像写或原子事务之后到达其请求队列的头部,则处理器的请求被视为不合格,直到镜像写或原子事务被发布到状态机为止。
正如这里所描述的,顶层仲裁器422保证直到镜像写或原子被发布,才会发布寻址到相同库的后来的请求。这确保了读取器会看到数据的一致的视图。应该理解,一旦它们被发布到状态机,请求就能被底层仲裁器不按顺序地取出。还应该理解,一旦来自以上示例的对库B3的写完成,库B3处的更新后的存储器块就能被读取,而不会冒数据一致性问题的风险,即使对库B7的写还未完成也是如此。
为了写未在第二存储器库处被镜像的存储器块,处理器只要使逻辑地址的镜像标志字段506被解除断言即可。在此情况下,当写到达请求队列的头部时,动态镜像引擎434得出镜像标志字段604未被断言的结论。引擎434得出写是标准或正常写的结论。作为响应,顶层仲裁器422只注意单个指定存储器库是否可用。顶层仲裁器422不注意查看指定存储器库被映射到的其他存储器库是否也可用。当单个指定存储器库可用,并且没有尚未被允许的更早的请求时,写被发布到单个指定存储器库的状态机。然后状态机与底层仲裁器428合作,致使写在单个指定存储器库处被执行。
如图所示,利用本发明,处理器可写入到镜像存储器块,而不必锁定被影响的存储器库中的任何一个,并且不必对每个存储器库发布单独的写。实际上,利用本发明,不论对读或写请求,都不使用锁定。相反,处理器仅仅断言镜像标志字段,并且存储器控制器400在两个存储器库处对于处理器透明地执行写。
此外,第一存储器库处的第一组块可通过断言镜像标志而被镜像到第二存储器库,而第一存储器库处的第二组块不被镜像。从而第一和第二存储器库的未镜像的部分可存储不同的信息,因此增大了外部存储器资源280的有效存储空间。
镜像原子存储器事务假设处理器(例如P2)希望从外部存储器280读取值,对该值执行某个操作(例如向其加上一个数),然后将结果写回到相同的存储器位置。P2优选地发布指定要被读取的值的逻辑地址600的原子读-修改-写请求,并且要被加到该值之中的数被读取。如果被读取的值被镜像在两个库处,则P2也断言逻辑地址600的镜像标志字段506。GEN PHY ADDR电路340将逻辑地址500转换成物理地址600。物理地址的镜像标志字段604被类似地断言。假设物理地址指定库B1。读-修改-写请求被放置在对应于P2的队列的尾部。当读-修改-写请求到达队列404的头部时,它被检查。动态镜像引擎434检测到镜像标志字段604被断言并且物理地址指定库B1,其中库B1的被选的存储器位置在库B5处被镜像。由于读-修改-写请求包括写成分,因此状态机413(对应于库B1)和状态机417(对应于库B5)必须可用,以便读-修改-写请求有资格被顶层仲裁器422发布。当状态机413和417都可用时,合格位图443被相应设置,并且读-修改-写请求被发布到状态机413和状态机417,假设它构成最老的合格请求的话。
在此情况下,状态机之一(例如状态机413)从库B1读取指定的值。然后状态机413将由读-修改-写请求指定的数字加到从库B1读取的值之中。接下来,状态机413将计算出的结果提供给与库B5相关联的状态机417。然后两个状态机413和417分别将计算出结果写入到库B1和B5,正如上文中联系镜像写请求所描述的那样。
此方法使得不必进行一个“额外”的读,即对库B5的读。它还确保了相同的值被写入到库B1和B5,即使在原子事务之前两个位置包含不同的值也如此。
如图所示,处理器执行原子事务,而不必首先锁定任何存储器库。
虽然已经联系8×4脉动阵列描述了本发明,但是本领域的技术人员将会意识到除阵列外,本发明也可用于其他类型的计算机体系结构中。实际上,除其他以外,本发明还可用于网格、树或立方体体系结构中,这些体系结构具有多个数据处理实体,例如处理器和/或输入/输出(I/O)设备。
前述描述针对本发明的特定实施例。对于本领域的技术人员显而易见的是,在获得本发明的某些或全部优点的情况下,可对所描述的实施例进行其他变动和修改。例如,可使用其他仲裁方案,例如单层仲裁器。因此,所附权利要求书的一个目的是覆盖落入本发明的真实精神和范围内的所有这种变动和修改。
权利要求
1.在具有对多个存储器库的访问权限的存储器控制器中,一种用于写入在两个存储器库处被镜像的数据的方法,该方法包括以下步骤接收指定所述两个存储器库中选出的一个存储器库的写请求,所述写请求指示它是镜像写请求;识别所述数据被镜像到的第二存储器库;向所述数据被镜像到的所述两个存储器库发布所述写请求;并且在不锁定所述两个存储器库中的任何一个存储器库的情况下,在所述两个存储器库处执行所述写请求。
2.如权利要求1所述的方法,其中单个写请求的接收导致两个存储器库都被更新。
3.如权利要求2所述的方法,其中所述存储器控制器具有多个状态机,并且每个状态机与所述存储器库中的一个相关联,并且被所述存储器控制器接收到的所述单个写请求被发送到与所述数据被镜像到的两个存储器库相关联的两个状态机。
4.如权利要求1所述的方法,其中所述写请求包括所述存储器库中选出的那个存储器库的存储器地址;并且所述存储器地址具有指示所述写请求是镜像写请求的标志。
5.如权利要求4所述的方法,其中所述写请求被如下的数据处理元件发布到所述存储器控制器,所述数据处理元件与所述存储器控制器具有通信关系,并且所述数据处理元件设置所述标志,以指示所述写请求是镜像写请求。
6.如权利要求5所述的方法,其中所述数据处理元件是处理器。
7.如权利要求1所述的方法,还包括以下步骤在向所述存储器库中的任何一个发布另一个请求之前,在每个存储器库处完成所述写请求。
8.在具有对多个存储器库的访问权限的存储器控制器中,一种用于读取在第一和第二存储器库处被镜像的数据的方法,所述方法包括以下步骤接收指定所述第一存储器库的读请求,所述读请求指示它是镜像读请求;识别所述数据被镜像到的所述第二存储器库;并且如果被所述读请求指定的所述第一存储器库不可用,则将所述读请求发布到所述第二存储器库。
9.如权利要求8所述的方法,其中所述读请求包括标识所述第一存储器库中的位置的存储器地址;并且所述存储器地址具有指示所述读请求是镜像读请求的标志。
10.如权利要求9所述的方法,其中所述标志被如下的数据处理实体设置为指示所述读请求是镜像读请求,所述数据处理实体与所述存储器控制器具有通信关系。
11.如权利要求8所述的方法,还包括以下步骤接收指定所述第一存储器库的读请求,所述读请求指示它是非镜像读请求;并且不论所述第二存储器库的可用性如何,在向所述第一存储器库发布所述读请求之前,都等待所述第一存储器库变为可用。
12.如权利要求8所述的方法,还包括以下步骤接收指定所述两个存储器库中选出的一个存储器库的写请求,所述写请求指示它是镜像写请求;识别所述数据被镜像到的所述第二存储器库;向所述数据被镜像到的所述两个存储器库发布所述写请求;并且在不锁定所述两个存储器库中的任何一个存储器库的情况下,在所述两个存储器库处执行所述写请求。
13.在具有对多个存储器库的访问权限的存储器控制器中,一种对在第一和第二存储器库处被镜像的数据执行原子读-修改-写事务的方法,所述方法包括以下步骤接收指定所述两个存储器库中选出的一个存储器库的原子读-修改-写事务,所述读-修改-写事务指示它是镜像读-修改-写事务;识别所述数据被镜像到的所述第二存储器库;根据所述第一和第二存储器库的可用性,选择所述第一和第二存储器库中的一个以从中读取所述数据;修改从所述选出的存储器库中读取的数据;向所述数据被镜像到的所述两个存储器库发布所述写请求;并且在不锁定所述两个存储器库中的任何一个存储器库的情况下,在所述两个存储器库处执行所述写请求。
14.如权利要求13所述的方法,其中所述原子事务包括标识所述第一存储器库中的位置的存储器地址,并且所述存储器地址具有指示所述原子事务是镜像原子事务的标志。
15.一种存储器控制器,其被配置为访问多个存储器库,在所述多个存储器库中,在第一存储器库处的数据被镜像到第二存储器库,所述存储器控制器包括多个缓冲器,用于存储由所述存储器控制器接收到的请求,所述请求指定存储在所述存储器库中的数据;用于识别至少一个请求作为指定存储在所述第一存储器库处的数据的镜像读请求的装置;用于识别所述镜像读请求所指定的数据被镜像到的所述第二存储器库的装置;用于根据所述第一和第二存储器库的可用性选择所述第一和第二存储器库中的一个以从中读取所述指定的数据的装置;以及用于从所述第一和第二存储器库中被选出的那个存储器库中获取所述数据的装置。
16.如权利要求15所述的存储器控制器,还包括用于识别至少一个请求作为指定存储在所述第一存储器库处的数据的镜像写请求的装置;用于识别所述镜像写请求所指定的数据被镜像到的所述第二存储器库的装置;向所述数据被镜像到的所述两个存储器库发布所述写请求;以及用于在不锁定所述两个存储器库中的任何一个存储器库的情况下,在所述两个存储器库处执行所述写请求的装置。
17.如权利要求16所述的存储器控制器,其中所述存储器库处的数据被组织成可单独寻址的存储器块,并且数据在块级别上在所述第一和第二存储器库之间被镜像。
18.如权利要求15所述的存储器控制器,其中所述请求包括所述指定的数据的存储器地址,所述存储器地址包括镜像标志,所述用于识别至少一个请求作为镜像写请求的装置利用所述镜像写请求中包含的所述存储器地址的所述镜像标志。
全文摘要
一种动态寻址技术在存储器资源的多个库之间镜像数据。存储在存储器库中的信息被组织成可单独寻址的块,并且存储器地址包括镜像标志。为了对在两个存储器库之间被镜像的信息进行写操作,处理器发布镜像标志被断言的单个写事务。存储器控制器检测到镜像标志被断言,并且作为响应,等待两个存储器库都变得可用。此时,存储器控制器致使写操作在两个库处都被执行。为了读取已在两个存储器块之间被镜像的数据,处理器发布镜像标志被断言的读。存储器控制器检查具有所需信息的两个库的可用性。如果任何一个库可用,则读请求被接受,并且所需数据被从可用库中取出并被返回到处理器。
文档编号G06F11/14GK1761947SQ200480007719
公开日2006年4月19日 申请日期2004年2月26日 优先权日2003年3月21日
发明者小罗伯特·E·杰特, 小肯尼思·H·波特 申请人:思科技术公司