在存储器互连中进行读发起优化的方法和装置的制作方法

文档序号:6431348阅读:140来源:国知局
专利名称:在存储器互连中进行读发起优化的方法和装置的制作方法
技术领域
本发明涉及存储器(memory)连接。更具体而言,本发明涉及通过在存储器互连中进行读发起优化来优化存储器读操作的方法和装置。
背景技术
随着微处理器变得更快,对更快的存储器互连的需求也在增长。微处理器性能已经大大提高。系统性能总的来说未能跟上微处理器性能的提高,这是由于多方面的原因。一个原因是诸如硬盘驱动器之类的大容量存储设备的机械特性。
影响系统性能的另一个方面是微处理器外部的存储器。此存储器可能由外部高速缓存和外部主存两者组成,所述主存一般速度较慢,但大小较大。对外部存储器的访问可能具有延迟和实现的复杂性,这些影响了性能。降低延迟和降低实现复杂性的能力是有益的。对存储器互连进行优化的协议也是有益的。


在附图中,示例性而非限制性地图示了本发明,其中相同的标号指示相似的元件,其中图1根据一个实施例,示出了可在其中实施本发明的网络环境;图2根据一个实施例,示出了计算机系统的框图;图3根据一个实施例,示出了存储器端口接口;图4A和4B示出了读请求分组抢先于写请求分组的两个实施例;图5根据一个实施例,示出了向存储器分派提前读请求;图6A和6B示出了发送读返回头部(header)的两个实施例;图7根据一个实施例,示出了存储器端口接口;
图8根据一个实施例,示出了存储器端口协议;图9根据一个实施例,示出了需要4次传输的迁徙(flit);图10根据另一实施例,示出了迁徙;图11根据一个实施例,示出了迁徙中的链路层与有效载荷的时间错开;图12根据另一实施例,示出了存储器端口协议;图13根据一个实施例,示出了存储器命令格式;图14根据一个实施例,示出了设备命令格式;图15根据一个实施例,示出了配置命令格式;图16根据一个实施例,示出了传出链路层格式;图17根据一个实施例,示出了公共传入链路层格式位;图18根据一个实施例,示出了读返回头部格式;图19根据一个实施例,示出了写确认格式;以及图20根据一个实施例,示出了状态格式。
具体实施例方式
本发明描述了通过在存储器互连中进行读发起优化来对存储器读操作进行优化的方法和装置。
在以下描述中,为说明目的,阐述了许多具体细节,以提供对本发明的透彻理解。然而对本领域技术人员来说,很显然没有这些具体细节也可以实施本发明。在某些情况下,公知的结构和设备以框图的形式示出而未详细示出,以免模糊了本发明。
图1示出了网络环境100,所描述的技术可以应用在该网络环境中。如图所示,若干个处理器104-1到104-P以及存储器106-1到106-P通过网络102彼此相连,所述网络102例如是计算机总线。注意,网络102或者也可以是本地网络或包括本地网络。此处所描述的方法和装置本质上可以应用于任何类型的通信装置或设备,不管是本地的还是远程的。
图2以框图形式示出了计算机系统200,在一个实施例中,可在所述计算机系统200中实施本发明。总线系统202将以下部件互连起来中央处理单元(CPU)204、只读存储器(ROM)206、随机访问存储器(RAM)208、存储设备(storage)210、显示器220、音频设备222、键盘224、指针设备226、各种输入/输出(I/O)设备228和通信设备230。所述总线系统202例如可以是下列总线中的一种或多种系统总线、外围组件互连(PCI)、高级图形端口(AGP)、小型计算机系统接口(SCSI)、电气与电子工程师协会(IEEE)标准号1394(火线)、通用串行总线(USB),等等。CPU 204可以是单个、多个或者甚至是分布式的计算资源。此外,CPU 204所例示的子系统可以具有到例如存储器之类的其它子系统的单独总线。一个这样的例子是用于图形的,例如用于AGP。另一个例子是到CPU 204外部的存储器的存储器端口接口,所述存储器例如是ROM 206、RAM 208,等等。
如下面所详细描述的那样,应该理解的是,能够加速操作和/或降低延迟和/或复杂性的存储器端口接口和/或协议是有益的。例如,在对存储器的读请求中,如下面所详细描述的那样,可以通过首先仅发送发起存储器读所需的信息,而在接收整个读请求之前开始实际的对存储器的读。例如,如果首先发送地址,则存储器子系统就可以开始读存储器内容。读请求可能只想要正被访问的字中的一个字节,然而,这个“仅需字节”的信息可能是在地址之后被发送,并且及时到达使得存储器子系统随后仅发送所请求的字节。这样,操作就可以并行和/或先于其它操作地进行。类似地,如果存储器子系统知道它已访问存储器并将在固定时间之后得到结果,则如下面所详细描述的那样,可以在实际数据之前发送一个读返回头部。这可以使接收数据的设备知道数据将要到来,从而做好准备。例如,读返回头部可以具有标识出将要到来的数据与哪个读请求相关联的信息,从而允许设备在所述数据到来之前就确定它要去往何处。通过在实际数据之前发送这个读返回头部信息,设备就有时间在数据实际到来之前确定其目的地。
图3以框图形式示出了存储器端口接口300的一个实施例。在此实施例中,存储器端口320是处理器(在处理器模块310内)及其本地存储器(340和342)之间的快速高引脚效率互连。存储器端口接口的协议层(有时称为存储器端口协议)独立于任何具体的存储器技术,从而将处理器与存储器技术和未来的存储器发展问题隔离开来。所述协议层具有作为本发明主题的多种具体特征,用于降低存储器请求的延迟并且降低实现的复杂性等等。
通过例如IO 302、存储器端口320等,处理器模块310可以具有到各种其它设备的接口。可以认为存储器端口320是从处理器模块310到XMB(外部存储器桥)330的专用接口,如图3所示。XMB 330可以包含存储器控制器338,并接口到本地存储器例如DRAM 340和342这两组。因此,XMB 330封装了存储器相关的信息,例如存储器类型(技术和速度)、存储器结构(DRAM大小、每个模块的DRAM数,以及通道数),以及存储器控制(定时、刷新和功率管理)。
存储器端口320可以由物理互连和协议这两者组成。所述物理互连可以由若干并行互连组成,或者可以被认为是若干并行互连。例如,可能有一个用于数据的主链路和另一个用于控制的链路层(有时称为边带(sideband))。所述协议可以由在物理互连上传送的命令、数据、响应等组成。例如,存储器端口命令可以由以下部分组成存储器读和写;设备读和写;以及配置读和写。此外,链路层可以具有诸如读返回头部、写确认、状态等等的传入(inbound)和传出(outbound)信息。
存储器端口流量可以由存储器、设备及配置读和写命令组成。为了使XMB 330的复杂性最低,对于一个实施例,处理器存储器接口(PMI)308发起所有数据传输。为了进一步降低复杂性,对于一个实施例,存储器端口320不支持XMB 330所发起的数据传输。在一个实施例中,通过使存储器端口320不支持在XMB 330中或通过XMB 330的I/O或图形设备,降低了复杂性。可以通过使存储器端口320不支持任何一致性(coherency)流量,来实现复杂性的进一步降低。
在处理器模块310中,存储器端口320包括封装在PMI 308中的功能。PMI 308可以包括诸如写缓冲器、流控制、错误处理,以及控制和状态寄存器等等。在XMB 330处,存储器端口320可以包括封装在外部存储器接口(XMI)332中的这些功能。XMI 332还可以包括写和读缓冲器、错误日志、控制和状态寄存器等等。
在一个实施例中,存储器端口320可以利用存储器流量只是存储器读和写这一知识,从而可以对存储器请求进行优化,使性能最优,同时使复杂性最低。本发明描述了存储器端口320中的两种这样的优化,它们涉及降低发起对存储器的读请求时的延迟;还描述了第三种优化,其涉及在存储器端口320中使用边带读返回头部。
图4A示出了读分组可以如何抢先于写分组。读分组可以包含读命令和要读取的地址或地址范围。类似地,写分组可以包含写命令、要写入的地址或地址范围,以及要写入的数据(写数据)。因为所传输的信息量和通信信道的宽度,读和/或写分组可能在多于一次传输中发送。因为写分组具有以要写入的数据形式出现的额外信息,可以看出,写分组可能比读分组需要更多次传输。
在402接收输入。在404,确定在402所接收到的输入是不是读分组的一部分。如果它是读分组的一部分,则在406进行检查,看该读分组是否完整。如果所述读分组完整,则在408进行读,然后在402接收另一输入。如果在406处确定所述读分组不完整,则在402接收另一输入。
如果在404确定接收到的输入402不是读分组的一部分,则在410,确定在402接收到的输入是不是写分组的一部分。如果接收到的输入402不是写分组的一部分,则在416执行某种其它操作,然后在402接收另一输入。如果在410确定接收到的输入402是写分组的一部分,则在412确定该写分组是否完整。如果所述写分组完整,则在414进行写,然后在402接收另一输入。如果在410,确定在402接收到的输入不是写请求分组的一部分,则某种其它操作416将会发生,然后回到402以接收输入。
从而,读分组就可以抢先于写分组。对于一个实施例,由读命令和要读取的一个或多个地址所组成的读分组可以是单一传输或单一迁徙。写分组由单一传输组成,该单一传输具有写命令、要写入的一个或多个地址,以及可能有多个的其它带有相关写数据的传输。为描述方便起见,包含读命令和要读取的一个或多个地址的读分组被称为读请求。从而,读请求和读分组传递相同的信息。为描述方便起见,写分组中包含写命令和要写入的一个或多个地址的部分被称为写请求。写分组的数据部分被称为写数据。从而,写分组包含写请求和写数据。
于是,例如假设在402接收到写请求。转到404,不是读分组的一部分所以转到410。在410是写分组的一部分,因此前进到412。在412,确定仅是写请求而还未接收到写数据,因此写分组不完整,因此随后回到402。现在如果在402接收到读请求,则转到404,在此确定所述读请求是读分组的一部分,因此前进到406。在406,对所述读分组是否完整进行判断。在此实施例中,我们已经将读请求定义为包含完整的读分组,因此在408进行读,然后回到402。然后,在此示例中,(通过接收到写请求)所开始的写操作还未被完成,因此读请求已经抢先于写。
跟随图4A的流程图,应该理解到,读请求在任何地方都可能抢先于写请求,直到接收到最后的写数据为止。从而,例如如果写分组包含写请求和4次写数据的传输,则如果在写请求、第一写数据、第二写数据或第三写数据之后接收到读请求,读请求都会抢先于写请求。
在另一实施例中,读请求不包含完整的读分组。在这样一个实施例中,在406对完整读分组的检查可能不完整,在该种情况下,将会前进到402以接收另一输入。如果并且只要随后在406接收到完整的读分组,就会前进到408并进行读,然后返回到在402接收输入。
允许在写请求或写数据之后接收到的读请求抢先于较早接收到的写请求或写数据,这导致了在写之前执行读。这使得存储器与必须首先响应写请求然后响应读请求时相比,更快地响应读请求。
应该理解到,发送读和/或写请求的代理可以防止排序的危险。也就是说,发送代理可能想要对如何发出读和写请求进行限制。例如,发送代理可以为了降低复杂性而决定一个读请求不应抢先于另一读请求。
图4B示出了本发明另一实施例,其中读分组可以抢先于写请求。在此示例中,我们仅考虑读和写分组。此外,图4B示出了这样一个实施例,其中读请求可以抢先于写分组,但不能像图4A中可能发生的那样,另一写分组抢先于该写分组。在图4B中,在452接收输入。在454进行检查,看其是不是读分组。如果其是读分组,则在456进行读,然后我们返回到在452接收输入。如果在452接收到的输入不是读分组,则在458进行检查,看其是不是写分组。如果其不是写分组,则我们返回到在452接收输入。另一方面,如果在458所述分组是写分组,则我们进入标为460-470的操作“内部循环”。
这个内部循环考虑到了读分组优先,正如我们可以从以下操作中看出的那样在460接收输入,462检查读分组,如果是则进行读464,然后返回到接收输入460。然而,回到外部循环(452-458)的唯一途径是当写分组完整468然后进行写470的时候。在从458进入内部循环时,在466进行检查以确定有没有写数据。如果没有写数据,则我们前进到在460接收输入。如果有写数据,则在468进行检查,看所述写分组是否完整。如果所述写分组不完整,则我们前进到在460接收输入。然而,如果所述写分组完整,则在470进行写,然后我们前进到在452从外部循环接收输入。从而,图4B示出了这样一个实施例,其中仅允许一个写分组被(读分组中的)一个读请求或多个读请求(即,在470的写之前遍历循环460、462、464一次或多次)所抢先。
在以上讨论中,我们详细叙述了例如读请求如何包含读命令和要读取的一个或多个地址。此外,也可以传递其它信息,例如确保请求完整性的纠错位、控制信息等等。为方便讨论本发明,用术语“迁徙”来指示与一个实体或操作相关联的信息传输单位,一个迁徙可以由一个或多个传输组成。分组可以由一个或多个迁徙组成。因此,例如,一个读请求分组可以由指示与该读请求相关联的所有信息的单一迁徙所组成。这个信息取决于具体实现方式而可能需要多于一次传输才能完全发送。例如,如果读请求迁徙包含32位的信息,而计算机总线能够实现16位传输,则需要两次传输来实现对所述读请求迁徙的传输。下面所描述的是迁徙和传输的更多细节和示例。
图5所示出的500是向存储器分派(dispatch)提前读请求。这里,在502接收输入。在504进行检查,看在502接收到的输入是不是读请求迁徙的一部分。如果是,则在506进行检查,看对读的提前分派是否可能。如果提前分派可能,则在508进行提前读分派,然后回到502以接收输入。如果提前分派不可能,则在510进行检查,看读迁徙是否完整。如果完整,则在512进行读,然后回到502以接收输入。如果读迁徙不完整,则回到502以接收输入。如果在504确定在502接收到的输入不是读请求迁徙的一部分,则某种其它操作514将会发生,然后回到502以接收输入。
在接收读请求迁徙期间,可能向存储器提前分派读请求。从而,不必在向存储器分派提前读请求之前接收到整个读请求迁徙。不必等待接收到整个读请求迁徙,这就允许存储器比在发出的请求之前必须等待接收到整个读请求迁徙时更快地响应提前读请求。从而,如果一个迁徙的第一部分包含提前读请求,则可以在接收迁徙第二部分的同时访问存储器,而所述第二部分可能具有对存储器内容的修饰符信息。这个修饰符信息可能影响最终发送何种存储器数据。
图6A所示出的600发送读返回头部606。这里,在602接收输入。在604进行检查,看其是不是读请求。如果不是读请求,则可能进行其它操作614,然后回到602以接收输入。如果在604,确定在602接收到的输入是读请求,则发生两件事情。第一,在606发送读返回头部,然后回到602等待输入。第二,在608发起读,在610接收读结果,在612发送所述读结果,然后回到602以接收输入。从而,在608发起的存储器读和在606发送的读返回头部可以基本上同时发生,和/或读返回头部可以恰好先于读结果的发送。从而,不必在发送读返回头部606之前接收到整个读结果。不必等待整个读结果,这就允许存储器和/或系统比在发送读返回头部之前必须等待接收到整个读请求时更早地发送读返回头部606。
图6B示出了发送读返回头部的另一实施例656。这里,在652接收输入。在654进行检查,看其是不是读请求。如果不是读请求,则可能进行其它操作664,然后回到652以接收输入。如果在654确定在652接收到的输入是读请求,则在608发起读。在这个点上,发生两件事情。第一,在656发送读返回头部,然后回到652等待输入。第二,在660接收读结果,在662发送读结果,然后返回652以接收输入。从而,例如,在658发起存储器读导致了在656发送读返回头部。这个头部是与接收读结果660和发送读结果662并行地发送的,因此读返回头部可能先于对读结果的发送。从而,不必在发送读返回头部656之前接收到整个读结果。不必等待整个读结果,这就允许存储器和/或系统比在发送读返回头部之前必须等待接收到整个读请求时更早地发送读返回头部656。
在(606或656处所发送的)读返回头部的一个实施例中,读返回头部具有一个编码在其中的标识符,该标识符使该读返回头部与导致其被发送的读请求相关。这样,例如,PMI 308可以通过读返回头部标识符来识别出它与哪个读请求(以及所产生的即将到来的数据)相关联。
应该理解的是,在606或656发送的读返回头部的实际传输路径尽管也可以在主数据路径中,但优选地是在边带中,并且优选地有一个已知的从数据开始的固定偏移量。也就是说,使用与数据路径并行的边带路径(链路层),其中所述边带路径在相关联的读数据之前运送读返回头部,这可以允许接收设备在接收数据之前就确定数据要去往何处。从而,如果读返回头部在数据之前发送,则可以实现延迟的降低。
图7示出了存储器端口接口700的一个实施例。在此实施例中,存储器端口是一个全双工互连(存储器端口链路720和740)。在传出方向(离开处理器模块710和PMI 708),存储器端口链路720由两个信息流组成。一个流是宽度为w的数据流,而第二个流是宽度为x的链路层流。如上,为讨论本发明,将相关联的数据和链路层信息的方便的编组称为迁徙。在传入方向(进入处理器模块710和PMI 708),存储器端口链路740由两个信息流组成。一个流是宽度为y的数据流,而第二个流是宽度为z的链路层流。
例如,图8示出了存储器端口协议的一个实施例800。在此实施例中,迁徙802由指示“空闲”数据802a和链路层(LL)信息802b所组成。以类似的方式,迁徙804到816(通称8XX)由各自的8XXa和8XXb部分所组成。此实施例示出的是一个迁徙有80位的实施例,其中数据总线宽度w是18位宽,而链路层总线宽度x是2位宽。所示出的实施例对于一个迁徙需要4次传输,有效载荷中有72位,而链路层中有8位。
例如,图9示出了需要4次传输的迁徙900。这里,迁徙910具有72位的数据和/或命令(d/c)信息,以及8位的链路层(LL)信息。这里,传输是每次20位地完成的,910a-0和910b-0,然后910a-1和910b-1,等等。尽管图9所示出的d/c和LL传输出现在同一时间帧中,但并不要求如此。也就是说,一个迁徙内与特定传输相关联的LL数据可以在时间上与各自的d/c传输错开。此外,所述时间错开可以跨越迁徙的边界。
链路层(LL)例如可以具有控制位和循环冗余校验(CRC)位。所述控制位例如可以表示头部、尾部(tail)或空闲。
回来参照图8,应该注意的是,写分组818通常仅包含写请求和相关联的数据。然而在本发明中,如图8所示,不需要这种约束。将写分组818图示为在其中具有写请求迁徙804、关联数据迁徙806、808、812、814和816,以及读请求分组迁徙810。
图10示出了具有96位的迁徙的实施例1000,其中数据总线宽度y是18位宽,而链路层总线宽度z是4位宽。此实施例对一个迁徙需要4次传输,并且有64个数据位、8个校验位,链路层中有16位。每个迁徙1002到1016都具有有效载荷分组10xxa和相关联的链路层(LL)分组10xxb。图10可以表示对处理器模块的输入。链路层(LL)例如可以具有链路层控制位和CRC位。所述控制位例如可以是读头部、写头部、数据、带尾部的数据、空闲、写ack(确认)、流控制,等等。
还应该理解的是,尽管LL控制与有效载荷相关联,但它不必同时发送。例如,如果处理器模块具有读数据很快将到达这样的预先信息,它就可以提高性能。从而,例如,LL中的提前读头部可以提供这种指示。例如,在图10中,与迁徙数据1006a相关联的LL可以位于时间上较早的位置,例如在位置1004b。从而,如图11所示,诸如1106之类的迁徙可以包含位置1106a处的有效载荷和位置1106b处的LL控制。从而,图11示出了迁徙1106中的链路层与有效载荷的时间错开。
(进入PMI 308的)传入边带链路层(LL)还可以包含关于其它传输和/或事务的信息。例如,LL可以包含用于确认传出写命令的写确认、用于传出流控制反馈的停止位、状态指示(空闲或数据有效载荷,等等)等等。而且,与一个迁徙相关联的LL可以传递多于一条信息,例如,LL编码可以指示空闲的有效载荷或者非空闲的有效载荷,此外还可以指示是不是读返回头部、写确认、停止指示、空闲控制等等。此外,应该理解的是,如上所述,这个信息可以在时间上移位。
将信息在时间上移位使得可以降低接口的复杂性。例如,将读返回头部置于读返回数据的频带内,这可能给XMI 332强加了额外的功能,因为XMI 332必须将头部和数据信息复用起来,并且XMI 332必须对进入的读返回数据进行缓冲,以将存储器读带宽与稍高些的传入存储器端口带宽进行速率匹配,所述稍高些的传入存储器端口带宽是补偿内嵌头部的带宽开销所必需的。这种额外功能就可能意味着额外的复杂性以及很可能产生的额外的延迟。相反,通过将读返回头部置于时间上移位了的边带中,就可以使得XMI 332数据路径能工作在与存储器总线相同的频率上,从而允许XMI 332工作时在读返回数据路径上没有缓冲或复用。从而,使用与数据路径并行的边带路径(链路层),其中所述边带路径可能不相邻地在相关联的读数据之前运送读返回头部,这可以允许操纵和控制逻辑在接收数据之前工作。如果读返回头部可以在数据之前被发送,则可以实现延迟的降低。头部可以先于读返回数据0个或更多个迁徙(读返回偏移量可以在初始化时确定)。提前读返回头部允许处理器将头部译码和数据操纵逻辑移出关键路径,并将进入的读返回数据直接驱动到处理器内的合适目的地。
读返回头部提前于数据而发送的时间(偏移量)可以固定在某个时间点和/或是动态的。例如,可以在系统初始化时确定固定延迟。或者,系统可以在操作时确定此时间,并使其固定。另一实施例可以将所述偏移时间置于编码在读返回头部的数据当中。从而,本领域技术人员将会认识到,有多种可能的实施例。
在时间上将信息移位也使得可以降低PMI 308接口的复杂性。也就是说,如果PMI 308通过边带而在主数据路径上的数据之前发送信息,则其就可以降低复杂性和/或延迟。本领域技术人员将会理解到,可以在传出方向和传入方向上实现降低延迟和/或复杂性。
图12示出了存储器端口协议的另一实施例1200,其中数据和命令带宽是36位,而链路层是4位。空闲迁徙1202、1204、1216、1220和1234具有其各自的“a”部分(1202a、1204a、1216a、1220a和1234a)中的空闲有效载荷,并具有其各自的“b”部分(1202b、1204b、1216b、1220b和1234b)中的链路层(LL)控制码。普通的写分组1240仅具有写关联数据,例如写请求1206迁徙和写数据迁徙(1208-1214)。每个迁徙都具有可能指示额外信息的LL控制。例如,数据0、数据1和数据2(分别是1208a、1210a和1212a)可能在链路层(LL)控制中具有指示数据是写数据的信息(分别是1208b、1210b和1212b)。LL 1214b可以指示出1214a是写数据以及该写数据的尾部。LL 1206b可以指示出关于写请求1206a命令的额外信息。
迁徙1218示出了未抢先于写分组的读分组。读分组迁徙1218具有相关联的读请求1218a,其在相关联的链路层1218b中具有读请求标识和可能的额外信息。或者,所述读请求标识和/或额外信息可以位于1218a和/或1218b中。
被读请求所优先的写分组示出于1228。这里,具有写请求迁徙1222和写数据迁徙1224、1226、1230和1232的写请求分组在数据1迁徙1226和数据2迁徙1230之间具有读请求迁徙1228。具有读请求1228a和相关联的链路层1228b的这个读请求迁徙1228已经抢先于写请求迁徙1222。
如上所述,对于普通的写分组1240,写请求迁徙1222以及相关联的写数据迁徙1224、1226、1230和1232具有“a”有效载荷和相关联的“b”链路层控制。
在下面的讨论中详述的是命令、字段位定义、链路层控制等的可能的实施例。应该理解的是,这些具体示例不应被认为是限制先前对本发明的讨论。这些示例仅用于说明性目的。
再次参照图3,PMI 308可以向存储器端口320发出存储器命令和配置命令。在此示例中,XMI 332不通过存储器端口320发出任何命令。此外,未示出部分(partial)存储器写。
有三种一般类型的命令存储器、设备和配置。
存储器命令,例如读、写和取消,一般以作为纯粹的存储器而起作用的主存储器(例如DRAM)为目标,所述主存储器连接到XMB 330和/或包含在XMB 330中。
设备命令,例如读和写,一般以不作为纯粹的存储器起作用的存储器位置为目标。例如,对映射到在其中写(以及有时)读有副作用的存储器空间中的闪存存储器和/或设备寄存器进行写入。在这种情况下,每个写命令可能想要在目标上只执行一次。而且,这种命令可能想要按与源发出命令时相同的顺序在目标上执行。
设备命令类似于存储器命令,并可能具有指示数据传输大小的大小字段或位。可能的大小例如可以包括1至8字节、16、32或64字节,和/或一整个缓存线(cacheline)的数据。不考虑数据传输大小,命令有效载荷的大小可能是一整个缓存线,根据需要用1和/或0来填充,从数据传输出去到缓存线中。
设备命令还可以具有掩码位,用于支持部分读和/或写。例如对于读命令,此掩码可以指示读哪些字节位置,以及读返回中的哪些字节有效。对于写命令,字节掩码可以指示有效载荷中的哪些字节有效。
配置命令,例如读和写,可以被认为是一种特殊类别的设备命令,其目标可以是设备和/或寄存器,例如PCI配置空间中的位置。此外,由于这些命令的特性,PMI 308可以选择每次只有一个发出的配置命令。
所有命令类型可以共享一个公共的基础格式。例如,命令迁徙可以包含在迁徙有效载荷中编码为64个命令位和8个校验位的72位命令。为了使存储器读请求的延迟最短,读命令格式可以在迁徙的前一半中具有所有的关键信息,从而允许在XMI 332接收到整个迁徙之前向存储器分派读请求。
命令中的提前指示符,例如一个位,可以指示迁徙的前一半是否包含足以发起存储器读请求的信息,或者XMI 332是否必须积累整个迁徙中的信息。这个位可以仅为存储器读命令而设置;否则,XMI 332可能不会正确地对配置命令、设备命令或存储器写命令发起存储器读请求。然而,不是所有存储器读命令都可以将所述提前位设置为有效。例如,任何在迁徙的后一半具有特定调度信息(例如流标识或优先级)的存储器读命令都可使提前位无效,以迫使XMI 332在分派存储器读请求之前考虑此信息。
多个命令目的地位可以指示命令类型存储器命令、设备命令或配置命令。
在一个实施例中,多个事务(标签)位与读/写位一起构成了每个命令的独有ID。独有ID不会被重新用于随后的命令,直到PMI 308已经接收到对先前任何具有相关联事务ID的该类型命令的响应,或者PMI 308已经确定先前任何具有该事务ID的该读/写(rd/wr)类型的命令都已经超时为止。
取消位是一个修饰符,其指示了一个存储器读命令是否要取消先前的存储器读命令。
在存储器命令的情况下,多个偏移量位标识了从存储器读和写的地址位所指定的存储器位置起的偏移量。在设备命令的情况下,与地址位相耦合的这个偏移量可以指定目标位置(例如指向存储器映射的设备寄存器)。
如上所述,可定义流ID/优先级来对存储器读命令所属于的流、以及存储器读命令优先级进行编码,以使得XMI 332能对不同的存储器请求应用不同的调度策略。例如,这个字段可以指示存储器命令是否属于等时流(isochronous stream)并因此可能需要特定的服务时间以符合等时数据传递期限时间。
掩码位可以是指示在设备和配置命令的部分读和写中哪些字节有效的位向量字节掩码。
大小位可以指示设备和配置命令的数据传输大小。这种命令可能的数据传输大小是1至8字节(与掩码位相结合)、16字节、32字节、64字节等等,以及整个缓存线的大小。
利用分布于迁徙后一半的校验位,对72位命令使用纠错码(ECC),从而可以保护每个命令的完整性。然而,在接收到了整个命令迁徙并且完成了ECC错误校验之前,XMI 332可能希望将提前位看作提示(hint),并将任何对于该命令而提前分派的存储器读请求看作是推测性的(speculative)。因此,XMI 332可能想要在这种推测性提前存储器读请求被分派之前就确保具有足够的资源来处理之。例如,XMI 332必须确保对提前读请求的分派不会导致存储器控制器读请求队列的溢出。
对于写命令字段,在此实施例中为了简化编码和译码,除了偏移量和代码字段之外,这些字段可以与读命令的相同。
图13示出了存储器命令格式1300的一个实施例。在此示例中,我们假设了一个其中每个迁徙有四次传输并且每次传输18位的物理层。也就是说,命令具有72位,在4次传输中传递。进一步假设每个传输(传输0、1、2、3)对应于跨越互连的一个位单元时间(bit cell time)。例如,在第一次传输期间(传输0),可以传输较低地址位和读/写命令。在传输1期间,可以传输较高地址位和提前读指示符。在传输2和3期间,可以传输指示以下内容的位命令目的地、从地址起的偏移量、事务ID、校验、掩码、流ID、大小、取消命令、优先级等等。
图14示出了设备命令格式的一个实施例1400,其中我们假设了一个其中每个迁徙有四次传输并且每次传输18位的物理层。这里,在传输0期间,可以传输较低地址位和读/写命令。在传输1期间,可以传输较高地址位和提前读指示符。在传输2和3期间,可以传输指示以下内容的信息命令目的地、从地址起的偏移量、事务ID、校验位、掩码位、传输大小等等。
图15示出了配置命令格式1500的一个实施例,其中,我们假设了一个其中每个迁徙有四次传输并且每次传输18位的物理层。在传输0期间,可以传输较低配置地址位和读/写命令。在传输1期间,可以发送较高配置地址位和提前读指示符。在传输2和3期间,可以传输指示以下内容的信息命令目的地、从地址起的偏移量、事务ID、校验位、掩码位等等。
如上所述,链路层(LL)既具有传出格式又具有传入格式。图16示出了传出链路层格式1600的一个实施例。对于基础传出链路层格式,例如可以每个迁徙具有8位。这个基础格式可以被可选地扩展,例如再扩展8位成为每个迁徙总共16位。图16示出了每个迁徙16位的格式。LL信号0用于在传输0:3(四次传输0、1、2和3)期间所发送的通信信息(信息)位和多个校验位。(多个)信息位可以指示迁徙是不是非空闲的,即该迁徙是包含命令或数据,还是空闲。LL信号1用于传送头部、尾部和校验位。尾部位指示分组的末端,而头部位指示迁徙是否包含命令。头部和尾部位可以对其它状态进行编码,所述其它状态例如是迁徙有效载荷是数据并且不是分组中最后的数据有效载荷;迁徙有效载荷是数据有效载荷并且是分组最后的迁徙;迁徙有效载荷是写命令;以及迁徙有效载荷是读命令并且是分组最后的迁徙。所述多个校验位包括在链路层格式的16个位上计算出来的CRC。多个扩展模式位在LL信号2和3上发送。
扩展模式位还可以位于链路层中,并可被用于具有锁步(lockstep)存储器端口的数据迁徙。为了支持具有锁步存储器端口的XMI(332)中的错误校验,扩展模式位可以对与发送给另一存储器端口的半个缓存线的错误相关的信息进行编码。
传入链路层可以具有各种格式。例如,在一个实施例中,可以有四种不同的传入链路层格式读返回头部、写确认、状态和配置。在下面描述的实施例中,这四种链路层格式可以一起共享多个位。图17示出了公共传入链路层格式位1700的一个实施例。
信息位指示迁徙有效载荷是不是非空闲的,即包含数据还是空闲。多个校验位包括在链路层格式的16个位上计算出来的CRC。
类型位可以指示四种不同的传入链路层格式中的一种,例如读返回头部;写确认;状态;以及配置。
图18示出了读返回头部格式1800的一个实施例。这里,多个标签位可以按例如小端顺序(little endian order)将事务ID编码。控制位可以指示读返回具有数据,并且第一个数据有效载荷迁徙开始于从当前迁徙的开始处起给定偏移量个迁徙的地方。如果所述偏移量为0,则第一个数据有效载荷在当前迁徙中开始。控制位还可以指示读返回头部是nack(否定性确认的缩写),在这种情况下没有相关联的数据。读返回nack通知PMI308,告知其XMI 332因为接收到读取消命令而取消了原来的存储器读命令,并且从而PMI 308不应期望该读命令的读返回数据。如果XMI 332取消了读命令,则它仅发送一个读返回nack。从而,如果XMI 332丢弃了读取消命令而未取消读命令,它就不发送读返回nack。
图19示出了写确认格式1900的一个实施例。在此示例中,除了缺少控制位之外,此格式与上面讨论的读返回头部的相同。
图20示出了状态格式的一个实施例2000。存储器端口320可以将状态格式用于三种功能将传出流控制信息返回给处理器;传递异步信号;以及指示链路层对于一个迁徙是空闲的。
如果停止位有效,则处理器不应向XMI 332发送任何写命令,直到该处理器随后接收到具有链路状态格式并且停止位无效的迁徙为止。当XMI332希望对进入的写命令进行流控制,例如当XMI 332写缓冲器超出了给定阈值时,就置位(assert)停止位。如果停止位无效,则处理器可以向XMI 332发送写命令。
多个信号位可以包括信号代码。XMI 332通过适当设置信号代码,就可以与读返回数据并行而异步地发信号以通知处理器的某些动作。
从以上实施例的示例中,本领域技术人员将会认识到,可以类似地对配置格式进行编码,以向传入链路层提供传递配置信息的功能。
足够详细地描述了这些实施例,以使得本领域技术人员能够实施本发明,应该理解到,可以利用其它实施例,并且可以进行逻辑、机械、电和其它方面的改变,而不会脱离本发明的范围。应该理解到,上面所描述的体系结构和功能可以具有其它实施例。任何格式、命令等都可以具有不同的位分配和不同的位定义。例如,读返回头部格式可以具有不同的位分配和不同的位定义,并且顺序可以是大端的而不是小端的。
此外,尽管为了清楚起见,在本说明书中对于传入和传出方向而在实施例中描述了本发明的某些方面,但是应该理解到,它们也可以同时应用于传入和传出两者。例如,可以与迁徙中特定传输相关联的链路层数据可以与各自的传输在时间上错开,而这个传输可以是传入和/或传出方向上的。例如,PMI 308可以在信息之前(一个偏移量)发出一个头部,该头部通过链路层而发送到XMI 332。
机器可读介质被理解为包括用于以机器(例如计算机)可读的形式存储或传输信息的任何机构。例如,机器可读介质包括只读存储器(ROM);随机访问存储器(RAM);磁盘存储介质;光存储介质;闪存存储器设备;电、光、声或其它形式的传播信号(例如载波、红外信号、数字信号等);等等。
本领域技术人员应该理解到,使用计算机的实现可能需要计算机在作为装置而执行方法或任务之前,在上电(power up)或复位时适当地自我配置。这通常被称为初始化,并且可以包括但不限于设置芯片时序、确定所附接的设备、配置诸如存储器之类的子系统、检查访问速度、检查互连,等等。应该理解的是,在为完整功能操作作准备时,计算机系统可能进行许多检查、设置许多参数,等等。例如,在初始化时,计算机可能确定所附接的存储器并改变设置和参数,以确定最优接口速度、时序设置等等。此外,计算机在操作期间也可能进行检查,以确保合适的操作,并在必要时改变设置,等等。
从而,描述了通过存储器互连中的读发起优化而优化存储器读操作的方法和装置。
权利要求
1.一种方法,包括接收写请求;接收读请求;以及使所述读请求抢先于写数据。
2.如权利要求1所述的方法,其中,所述读请求位于写分组内。
3.如权利要求1所述的方法,其中,抢先于所述写数据的所述读请求是在所述写请求之后的时间内接收到的。
4.如权利要求1所述的方法,其中,所述读请求和所述写请求中的每一个都具有相关联的链路层控制。
5.如权利要求1所述的方法,其中,所述读请求是从由存储器读请求、设备读请求和配置读请求所组成的组中选出的。
6.如权利要求1所述的方法,其中,所述写请求是从由存储器写请求、设备写请求和配置写请求所组成的组中选出的。
7.一种装置,包括具有输入、输出和控制的存储器系统;具有存储器输入、存储器输出、存储器控制、处理器输入、处理器输出和处理器控制的存储器端口,其中所述存储器系统输入被耦合以接收所述存储器端口存储器输出,所述存储器端口存储器输入被耦合以接收所述存储器系统输出,并且所述存储器系统控制被耦合到所述存储器端口存储器控制,以及具有存储器输出、存储器输入和存储器控制的处理器,其中所述存储器端口处理器输入被耦合以接收所述处理器存储器输出,所述处理器存储器输入被耦合以接收所述存储器端口处理器输出,并且所述处理器存储器控制被耦合到所述存储器端口处理器控制。
8.如权利要求7所述的装置,其中,所述存储器端口具有存储器端口协议,该存储器端口协议允许处理器读请求抢先于处理器写请求。
9.如权利要求8所述的装置,其中,所述存储器端口协议还包括有效载荷分组和相关联的链路层控制分组。
10.一种机器可读介质,其上存储有指令,所述指令当被执行时导致系统执行以下操作发出写请求;发出读请求;以及使所述读请求抢先于写数据。
11.如权利要求10所述的机器可读介质,其中,所述读请求位于写分组内。
12.如权利要求10所述的机器可读介质,其中,所述读请求和所述写请求中的每一个都还包括相关联的链路层控制。
13.一种系统,包括能够发出读请求和写请求的处理器;和耦合到所述处理器的存储器设备,其中处理器读请求抢先于处理器写数据。
14.如权利要求13所述的系统,其中,所述处理器读请求可以在写分组内被发出。
15.如权利要求13所述的系统,其中,所述读请求和所述写请求中的每一个都还包括相关联的链路层控制。
16.一种装置,包括用于接收写请求的装置;用于接收读请求的装置;用于使所述读请求抢先于写数据的装置。
17.如权利要求16所述的装置,其中,用于使所述读请求抢先于所述写数据的装置是用于接收与所述读请求相关联的链路层控制的装置。
18.如权利要求16所述的装置,其中,用于使所述读请求抢先于所述写数据的装置是用于接收与所述写请求相关联的链路层控制的装置。
19.一种方法,包括接收读请求迁徙;以及向存储器分派提前读请求。
20.如权利要求19所述的方法,其中,向所述存储器分派所述提前读请求发生在接收所述读请求迁徙的前一半之后。
21.如权利要求20所述的方法,其中,所述迁徙的前一半具有标识符,用于将所述提前读请求向所述存储器进行提前分派。
22.如权利要求21所述的方法,其中,所述用于将所述读请求进行提前分派的标识符是从以下组中选出的,该组由允许读提前分派和不允许读提前分派所组成。
23.一种装置,包括具有输入、输出和控制的存储器系统;和具有存储器输入、存储器输出和存储器控制的存储器端口,其中所述存储器系统输入被耦合以接收所述存储器端口存储器输出,所述存储器端口存储器输入被耦合以接收所述存储器系统输出,并且所述存储器系统控制被耦合到所述存储器端口存储器控制。
24.如权利要求23所述的装置,其中,所述存储器端口具有支持提前读请求的存储器端口协议。
25.如权利要求24所述的装置,其中,所述提前读请求位于读请求迁徙的前一半内。
26.一种机器可读介质,其上存储有指令,所述指令当被执行时导致系统执行以下操作接收读请求迁徙;以及向存储器分派读请求。
27.如权利要求26所述的机器可读介质,其中,向所述存储器分派所述提前读请求发生在接收整个所述读请求迁徙之前。
28.如权利要求27所述的机器可读介质,其中,所述迁徙的前一半具有标识符,用于将所述读请求向所述存储器进行提前分派,所述标识符是从由允许读提前分派和不允许读提前分派所组成的组中选出的。
29.一种系统,包括能够发出提前读请求的处理器;和耦合到所述处理器的存储器设备,该存储器设备能够接收所述提前读请求,并执行对存储器的提前读。
30.如权利要求29所述的系统,其中,所述处理器提前读请求是在读请求迁徙分组的前一半内发出的。
31.如权利要求30所述的系统,其中,所述读请求迁徙分组的前一半具有标识符,用于将所述读请求向所述存储器设备进行提前分派,所述标识符是从由允许读提前分派和不允许读提前分派所组成的组中选出的。
32.一种装置,包括用于发出提前读请求的装置;和用于使存储器设备接收所述提前读请求并执行对存储器的提前读的装置。
33.如权利要求32所述的装置,其中,用于发出提前读请求的装置是用于在读请求迁徙的前一半中设置标识符的装置。
34.如权利要求32所述的装置,其中,用于执行对所述存储器的提前读的装置是由一个标识符控制的,所述标识符是从由允许读提前分派和不允许读提前分派所组成的组中选出的。
35.一种方法,包括接收读请求迁徙的前一半;以及向存储器分派读请求。
36.如权利要求35所述的方法,其中,向所述存储器分派所述读请求发生在接收所述读请求迁徙的后一半之前。
37.如权利要求35所述的方法,其中,向所述存储器分派所述读请求发生在对整个读请求迁徙进行错误校验之前。
全文摘要
本发明公开了一种方法和装置,用于通过在存储器互连中进行读发起优化来优化存储器读操作。在一个实施例中,可以使读请求抢先于写请求。
文档编号G06F13/16GK1585934SQ02822453
公开日2005年2月23日 申请日期2002年11月7日 优先权日2001年11月12日
发明者兰迪·奥斯本 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1