具体实施方式
本发明提供一种用于使用可变等待时间模式在完全缓冲双列直插存储器模块(FBDIMM)存储器子***中高效调度数据请求的服务的方法和***。高速集成电路包含一种调度算法,该调度算法预计算(经由基于并行双倍数据速率(DDR)的接口)连接到多个缓冲器芯片的动态随机存取存储器(DRAM)数据的返回时间参数。所述返回时间参数是从所述存储器控制器发送用于从各个存储器位置检索数据的命令分组与在所述存储器控制器处接收所请求的数据之间的时间间隔的所有可能值的汇集。所述时间间隔的每个可能值被表述为二进制向量,其中,一位为“打开”(即被设为“1”)。所述算法将一组返回时间向量存储在表中,以便当存储器访问请求被接收时被所述存储器控制器使用。
对于每个所接收的数据请求,所述存储器控制器经由使用关联于(连接到特定缓冲器的DRAM中的)所请求DRAM数据的存储器地址的索引来检索合适的返回时间向量。所述调度算法还维护表示所有当前执行的请求的返回时间向量的汇集(经由逻辑或运算)的历史向量。每个所接收请求(即,正等待执行的请求)的返回时间向量被与所述历史向量比较(经由逻辑与运算),以便确定该所接收请求是否呈现与已在执行请求的总线冲突。在一个实施例中,总线冲突由在逻辑与运算之后产生的向量中的任意“1”位的出现来标识。
所述调度算法计算这样的得分,该得分指示在给定如由所述历史向量指示的数据的已调度返回的情况下,相比于其它请求,对每个等待的请求在下一调度周期时的调度有多么好地保存了带宽。经由利用每个请求的所述得分,所述调度算法以在避免总线冲突的同时保存尽可能多的数据总线带宽的顺序重排序和发出请求。当请求被所述存储器控制器发出(执行)时,所述调度算法更新所述历史向量以反映该新被发出请求被包括在执行请求集合中。
在下面对本发明的示例性实施例的详细描述中,在其中本发明可以被实现的特定示例性实施例被充分详细地描述,以便使本领域的技术人员能够实现本发明,并且应当理解,其它实施例可以被使用,以及在不脱离本发明的精神或范围的情况下,逻辑、体系结构、程序、机械、电气和其它改变可以被作出。以下详细描述因此不在限制性意义上被理解,并且本发明的范围仅由所附权利要求定义。
在附图的描述中,类似单元被提供与之前图的那些单元相类似的名称和标号。在后面的附图在不同上下文中使用所述单元或使用具有不同功能的所述单元的情况下,所述单元被提供表示图号的不同前导数字(例如用于图1的1xx和用于图2的2xx)。被指派给所述单元的特定数字只为了辅助本说明书而被提供,并且不意味着暗示对本发明的任意限制(结构的或功能的)。
还应当理解,特定参数名称的使用仅作为示例被使用,并且不意味着暗示对本发明的任意限制。本发明由此可以不受限制地使用用于描述以上参数的不同命名/术语来实现。
现在参考附图,图1示出了在其中本发明的特征可以被有利地实现的基本数据处理***的框图表示。DSP 100包括连接到***总线/互连102的处理器101和存储器106。控制对存储器106的访问的是:也连接到***总线/互连102的存储器控制器105。存储器控制器105包括使存储器控制器105能够控制对存储在存储器106中的存储器数据的访问(即检索和存储)的硬件和软件逻辑。
本领域的普通技术人员将理解,图1中所示的硬件和基本配置可以改变。所示的示例不意味着暗示对本发明的体系结构限制。图1中所示的数据处理***例如可以是运行高级交互式执行(AIX)操作***或LINUX操作***的纽约Armonk的国际商业机器公司的产品IBM eServer pSeries***。
本发明的各个特征作为存储器控制器105中的固件代码和/或逻辑被提供。在所述固件代码中有:用于提供存储器控制器105与存储器部件之间的串行信令功能的代码、用于使DRAM协议连接能够访问存储器数据的代码、以及更专用于本发明的用于使能下面描述的可变等待时间调度特征的代码。为简单起见,使能所述可变等待时间调度特征的代码和逻辑的集合体这里被称为可变等待时间调度工具。在实际实现中,所述可变等待时间调度工具可以在以用于提供下面描述的可变等待时间调度功能的可变等待时间模式运转的存储器子***中被实现。
由此,如由图1所示,除上面描述的硬件部件之外,数据处理***100的存储器控制器105包括一个或更多固件部件,其中,所述固件部件包括可变等待时间调度(VLS)工具110。根据该说明性实施例,可变等待时间调度工具110使存储器控制器105能够完成一系列功能过程,所述功能过程包括:(1)预计算关联于连接到所有可能的缓冲器芯片的存储器数据的检索的等待时间;(2)维护历史向量,该历史向量提供关于关联于当前执行的请求的数据的已调度返回的信息;(3)从所述(预计算的)返回时间参数检索已接收数据请求的返回时间向量;(4)确定在下一个调度周期时将调度哪个已接收请求作为下一个执行请求;以及下面描述和由图2-6所示的其它特征/功能。
图2示出了FBDIMM存储器子***。存储器子***200包括存储器控制器105,其中,该存储器控制器105经由串行链路201连接到被示为缓冲器集合202的缓冲器链。存储器子***200还包括被假设为FBDIMM的许多动态随机存取存储器组203。缓冲器集合202中的缓冲器经由被示为DDR2接口204的基于并行双倍数据速率(DDR)的接口连接到各自DRAM组中的DRAM芯片。
FBDIMM技术指示存储器控制器105与DRAM芯片203之间的信令接口,以及该接口被拆分为两个独立的信令接口,其中,所述两个接口之间具有称为AMB(高级存储器缓冲器)的缓冲器。所述缓冲器与DRAM芯片之间的并行接口支持DDR2。然而,所述存储器控制器与所述缓冲器之间的接口是点到点串行接口。
存储器子***200由几个电路组成,所述电路被精心设计为以实际上在超高速集成电路芯片中实现的方式(在图1的存储器控制器105中的VLS工具110中)包含调度算法。在优化所述调度算法的设计时,当对以下因素给予特别考虑时性能收益被最大化:(1)逻辑门的数量;以及(2)互连线的长度。可能根据所嵌入的技术而不同的这两(2)个因素还可以降低电路运转的速度。幸好,所述调度算法当以DDR1600速度以可变等待时间模式运转时,在FBDIMM技术中理想地运转(在设计中已将逻辑门的数量和连接线的长度计算在内)。可以预期,处于特定速度和特定电路技术中的更高性能解决方案可以由特定级别的重新设计(其也将逻辑门的数量和连接线的长度计算在内)来理想地达到。
存储器子***200以允许缓冲器集合202中的每个缓冲器芯片在可能的最小时间内返回数据的可变等待时间模式运转。为避免数据总线冲突以及尽可能快和尽可能高效地执行请求,作为存储器控制器(图1)中的VLS工具110被实现的调度算法(其在图3中示出)被提供。在存储器访问操作期间,所述调度算法预计算关联于所有数据请求的等待时间信息(即返回时间信息),并且利用该信息来确定关联于对存储器数据的每个随后请求的等待时间。缓冲器集合202(即缓冲器链)中的缓冲器芯片的数量指示可能的不同等待时间值的数量。由此,例如,在所述链中具有八个缓冲器的缓冲器集合指示存在八个可能的等待时间值。
用于连接到每个缓冲器芯片的数据的返回时间信息(等待时间)被表述为其中仅一位被打开(等价于二进制“1”,以及被称为“1”位)的返回时间(二进制)向量。因此,具有仅一个“1”位的八个单一位分量的二进制向量可以考虑全部八个可能的等待时间值。具有最小关联等待时间的数据请求(例如目标是最靠近存储器控制器105的缓冲器芯片中的存储器数据的请求)具有这样的关联返回时间向量,其中,该向量的最左位(第一分量)是“1”位。具有最大关联等待时间的数据请求(即目标是最远离存储器控制器105的缓冲器芯片中的存储器数据的请求)具有这样的关联返回时间向量,其中,该向量的最右位(例如,给定所述八缓冲器示例的情况下的第八个分量)为“1”位。
所述调度算法使用这些返回时间向量来汇集被选择进行执行的请求的历史向量。所述调度算法然后使用该历史向量来进一步确定由随后被接收的请求呈现的与当前执行的请求的潜在冲突。另外,所述调度算法执行“总和”和“得分”计算过程(其在图4中示出)来选择将在下一周期时开始执行的“等待”请求,其中,在所述下一周期时,所选请求可以被调度。
图3示出了实现所述调度算法的各个功能的电路(或调度逻辑)的框图表示。调度逻辑300包括从一列已预计算值中查找/检索的一组已按顺序排序的数据返回时间向量302,其中,DRAM基于所述一列已预计算值包含用于在存储器控制器105(图1)处接收的新请求301的数据。调度逻辑300还包括连接到并且为请求选择器310提供控制输入的冲突指示符向量311和得分向量312。冲突指示符向量311和得分向量312都包含对应于所述一组数据返回时间向量302的各自条目的参数值。冲突指示符向量311和得分向量312的特定功能在下面被详细说明。
请求选择器310为连接到数据返回时间向量302的多路复用器(MUX)309提供选择输入。还连接到数据返回时间向量302的是一组加法器303,其用于提供用于所述返回时间向量的条目的列的总和。产生的总和的确定和使用在下面对图4的表的描述中被进一步详细描述。
调度逻辑300还包括一系列与逻辑(未示出),其中,所述与逻辑被用于将每个返回时间向量与当前历史向量逻辑进行逻辑与。根据一个实施例,所述逻辑与过程的结果被存储在冲突向量311的各个条目中。完成这些数据返回时间向量与所述历史向量的逻辑与的目的以及从产生的总和向量认识到的推论在下面参考图4被描述。
在调度逻辑300中,MUX 309经由输入线路--耦合到数据返回时间向量302的MUX入(MUXin)线路304接收作为输入的向量条目,以及MUX 309经由输出线路--每个耦合到一组逻辑或门308的第一输入的MUX出(MUXout)线路305提供作为输出的所选择的向量条目。所述一组或门308的第二输入连接到一系列锁存器307的输出。这些锁存器包含被称为所述历史向量(306)的之前选择的累加。
调度逻辑300进一步包括历史向量306,该历史向量306是与数据返回时间向量302的大小相等数量的一组位。历史向量306是通过上面与被移出所述向量的最左位和经由接地被设为零的最右位的逻辑或过程的锁存输出。该向量(306)经由首先(从向量302)选择对应于由请求选择器310在MUX 309选择的特定已接收请求的特定数据返回时间向量被确定。一旦所述特定数据返回时间向量被选择,该向量条目被输入到一组或门308,并且被与存储在所述一系列锁存器307中的之前一组当前历史向量的条目进行逻辑或。所选数据返回时间向量与所述当前历史向量的所述逻辑或然后生成新的历史向量306。
通过调度逻辑300,新请求301在存储器控制器105被接收。关联于该新请求301的返回时间向量被放入数据返回时间向量302中。由所接收的请求呈现的与正在执行的请求的冲突在冲突指示符向量311中被标识。加法器(303)被用于所述总和的计算。所述总和向量、冲突向量311和得分向量312被用于确定作为将开始执行的下一个已调度请求的“等待”请求。所述历史向量提供被所有当前正在执行的请求所请求的数据的已汇集返回时间信息。
数据可以在多倍的“n”个时钟周期中被返回,其中,n是指所述存储器控制器处的连续数据返回之间的时钟周期的最小数量。在附图和讨论中,值“n”还与从所述存储器控制器发送命令分组与在所述存储器控制器处接收关联数据之间的最短间隔成比例。该间隔对应于与检索连接到最靠近所述存储器控制器的缓冲器芯片的数据和从较快DRAM检索数据相关联的短延迟。取决于实际实现中涉及的时间延迟,该第一延迟可以大于连续传输之间的时钟周期的数量。由于该延迟被加到所有访问,所以该延迟不改变所述算法。请求选择器310触发MUX 309将所选请求的返回时间向量(经由MUX出线路305)转发到或门308的各个第一输入。历史向量(306)(由锁存器组307的输出提供)进一步为各个或门300提供另一组(第二)输入。在调度逻辑300中,所述或门提供用于将所选请求的返回时间向量并入历史向量306的逻辑或运算。在下一个调度时钟周期时,历史向量306被经由或门308用来自MUX出线路305的数据所更新。在历史向量306的所述更新期间,已过期向量分量(即最左位)被从历史向量306移除。
现在转向图4,根据本发明的说明性实施例的用于冲突的确定以及一组所接收数据请求的“总和”和“得分”的计算的向量表被示出。表400包括被放置在表400的第一行中的历史向量401。另外,表400包括数据返回时间向量403。数据返回时间向量403对应于在存储器控制器105处所接收的各个请求。数据返回时间向量403按所述各个请求被接收的顺序被包括在表400中(在包含历史向量401的行之下)。另外,表400包括冲突向量列407,其中,该冲突向量列407具有被设为“1”的特定的所述条目,其指示针对第一返回时间向量、第三返回时间向量和第六返回时间向量的冲突。表400还包括总和向量405,该总和向量405是对应于所述各个请求的总和的行。最后,表400还包括被示为单独、独立的向量的得分向量列409,该得分向量列409是所示的“最后”或“最右”列。
如果所接收的请求在下一个调度周期之后开始执行,则所述调度算法确定由每个所接收请求呈现的潜在冲突。在表400中,在与历史向量401相同的列中具有“1”位的返回时间向量403的分量对应于呈现与当前正在执行的请求的冲突的各个所接收请求。所述调度算法经由对历史向量401和所述返回时间向量(对应于单一请求)实施逻辑与运算来确定由单一请求呈现的冲突。所述逻辑与运算对于每个所接收请求被重复。如果任何“1”位出现在产生的向量中,则(通过实施所述逻辑与运算)对应产生的向量指示冲突。如果存在冲突(如由产生的向量中“1”位的出现所指示的),则冲突向量列407(或冲突向量311,图3)中的对应冲突指示符被设为“1”。
在表400中,针对第一返回时间向量、第三返回时间向量和第六返回时间向量的冲突指示符通过被放置在冲突向量列407的合适位置中的“1”位而全部阐明了冲突的出现。由此,第一所接收请求、第三所接收请求和第六所接收请求的每个呈现与当前正在执行的请求的冲突,以及由此,这三个请求中都不被选择在下一个调度周期时开始执行。
总和向量405中的总和按照如下被计算。对于第一列的列总和的计算以“0”开始。对于除第一列之外的所有列,特定列总和的计算以来自前一列的列总和开始。前一列总和(或对于第一列的“0”)然后被加到对于其列总和正被计算的列中的“1”位的数量。然后,只要值(在“1”位的所述加之后)不等于“0”,则在加“1”位的数量之后,“1”被减去。所述总和被包含在总和向量405中。所述总和给出了对于数据返回的已请求时隙(包括已被调度的时隙)的聚类的指示。
经由构造,关联于每个请求的返回时间向量恰恰具有一个打开的位,以及被存储在得分列409中的每个请求的得分是(被标识为)在其中所述(返回时间)向量的唯一“1”位出现的列之前的列总和。在最左列中具有“1”位的请求只要这些请求没有冲突则具有得分“0”。例如,第二个所接收请求具有得分“0”并且是具有最低得分的请求,以及其不呈现冲突。由此,在表400中所示的示例中,请求2是被选择在下一个调度周期时/在下一个调度周期期间开始执行的所接收请求。使用所述得分准则的特定请求选择被作出,以便在避免冲突的同时最好地减少用于更高效地服务于请求的所请求时隙的聚类(即平均分布所述请求的服务)。
所述历史向量和所述返回时间向量(关联于所述已接收请求)的集合在每个调度周期时被全部更新。特别地,所述调度算法经由首先合并所选请求的返回时间向量(到历史向量401中)来开始更新历史向量401。所述更新经由历史向量401与所述返回时间向量的逻辑或而被执行。所述调度算法然后在所述调度周期时移除历史向量401的已过期(第一)向量分量(位)。该位移除对应于历史向量401在表400中的左(时间)移位。同样,所选返回时间向量之下的数据返回时间向量的集合在从表400中的所述集合移除所选请求和关联的数据返回时间向量之后在表400中被向上移位。该向上移位被提供,以便维护接收顺序以及按照请求被接收的顺序接受任何新请求。
图5是示出根据本发明的说明性实施例的由用于在以可变等待时间模式运转的存储器子***中重排序数据请求以及用于避免冲突的算法完成的过程的流程图。所述过程在方框501处开始,在此处,包含所述调度算法的高速集成电路预计算连接到所有可能的DRAM缓冲器芯片的数据的返回时间数据。连接到每个缓冲器芯片的数据的所述返回时间信息被表述为其中仅一位被打开(等价于二进制“1”,并且被称为“1”位)的二进制向量。当数据可以以最少量时间被返回时,所述向量的最左位为所述“1”位,以及当所述数据能够以最大量时间作出返回时,则所述向量的最右位为所述“1”位。连接到所有缓冲器芯片的数据的二进制返回时间向量的所述已汇集集合可以被称为返回时间向量的集合/集体,其被存储在在每个存储器访问请求的接收之后被所述存储器控制器访问的表中。在方框502处,所述调度算法维护所述历史向量,其中,所述历史向量指示返回所述存储器控制器的数据的预期到达时间。特别地,所述历史向量在锁存器链中被维护,以及也被表述为二进制向量。如果没有任何存储器请求正被执行,或如果所有之前的请求已被完成,则所述历史向量为零向量。
对所述存储器控制器呈现的任何新请求关联于数据返回时间向量(从所述已预计算的返回时间信息检索),如方框503中所示。所述存储器控制器维护已由微处理器或其它数据消费者向所述存储器控制器发出的多个存储器请求的列表。每个请求具有关联的数据返回时间向量。这些返回时间向量每个被故意表述为其中仅一位被打开的二进制向量,以便通过时间尺度将所述返回时间向量与所述历史向量对齐。该时间尺度的对齐允许所述历史向量被与特定访问请求的返回时间向量逻辑上进行逻辑与,从而确定该请求是否导致与已被发出的请求的冲突。
为开始用于确定新请求是否呈现与正在执行的请求的任何调度冲突的过程,如在方框504处所示,包含所述算法的电路在(针对每个新请求的)每个数据返回时间向量与所述历史向量之间实施逻辑与运算。在方框505处,产生的向量被检查以确定是否零向量被产生。在方框507处,所述算法确定是否存在冲突(即所述逻辑与运算是否导致非零向量)。如果冲突存在,则如在方框508处所示,所述算法确认该新请求确实呈现与正在执行的请求的冲突,并且在所述冲突向量的合适空间中放入“1”。如果在方框507处所述算法确定所述逻辑与运算的结果不指示冲突的出现(即所述逻辑与运算导致零向量),则如在方框509处所示,“0”被放入所述冲突向量的合适空间中,以指示该新请求没有呈现与正在执行的请求的冲突。
在方框510处,在此处,所述算法计算每个列的总和,以及在方框511处,所述算法确定每个请求的得分。如在方框512处所示,所述算法然后选择没有冲突的具有最低得分的请求(或具有相同最低得分的多个请求中的第一个被接收的请求)。用于总和与得分的计算的行和列的表格说明在图4中示出。
所述总和与得分计算被用于在“保存”尽可能多的带宽的同时经由重排序请求而在较短时间空间中高效服务于更大量的请求。保存带宽是指可用带宽的高效使用,即在避免数据总线冲突的同时具有最小带宽浪费。为达到带宽使用的理论最大限制,数据每n个周期被返回,即数据占用总线上的每个可能的时隙。所述重排序过程(或请求)最大化了利用每个可用机会或可用时隙用于在所述存储器控制器与所述缓冲器芯片之间发送数据的能力。
为考虑执行的开始以及为跟踪所选请求的返回时间,在方框513处,所述算法在对应于所选请求的数据返回时间向量与所述历史向量之间实施逻辑或运算。如在方框514处所示,所述历史向量在用于下一总和与得分计算之时的调度周期时被更新。另外,如在方框515处所示,所选请求向量之下的所有数据返回时间向量在所选向量被从所述表移除后被向上移位一个表行。所述向量在所述表中的移位对于在调度周期时更新所述向量是必要的。如在方框516处所示,任意新向量/新请求被添加到所述向量/请求的表/矩阵的结尾,以及所述过程在方框517处结束。
图6示出了被编码为测试根据本发明的说明性实施例的调度算法的C语言程序的结果的图。图600包括吞吐量轴601和配置轴602。图600示出了针对1000个不同存储器配置的、对于整齐请求排序相对于由所述调度算法产生的排序的、按照总共可能总线带宽的百分比来测量的吞吐量。每个实验通过1000个随机请求被运行,以及总共吞吐量被测量。每个存储器配置包括按不同顺序被***FBDIMM信道中的不同速度等级的DRAM。在所有所述实验中,总线吞吐量上的平均增益被观测到,以及所述新算法在基本所有所述实验中改进了吞吐量。
在上面的流程图(图5)中,尽管所述过程步骤按特定顺序被描述和示出,但步骤的特定顺序的使用不意味着暗示对本发明的任何限制。在不脱离本发明的精神或范围的情况下,可以关于步骤的顺序作出改变。因此,特定顺序的使用不在限制性意义上被理解,以及本发明的范围仅由所附权利要求定义。
最后,重要的是,尽管本发明的说明性实施例已经并且将继续在安装了软件的完全功能计算机***的上下文中被描述,但本领域的技术人员将理解,本发明的说明性实施例的软件方面能够作为多种形式下的程序产品被分布,以及本发明的说明性实施例不论用于实际实现所述分布的特定类型的信号承载媒体如何而同样适用。信号承载媒体的示例包括例如软盘、硬盘驱动器、CD ROM的可记录类型媒体以及例如数字和模拟通信链路的传输类型媒体。
尽管本发明已参考优选实施例被特别示出和描述,但本领域的技术人员将理解,在不脱离本发明的精神和范围的情况下,可以在其中作出形式和细节上的各种的改变。