用于通信接口的队列头高速缓存的制作方法

文档序号:7649809阅读:137来源:国知局
专利名称:用于通信接口的队列头高速缓存的制作方法
技术领域
本发明一般涉及数据通信系统和方法,尤其涉及其中大量虚拟网络接口可以有效地在例如基于以太网的可升级的紧耦合系统中共享硬件资源的数据通信系统和方法。
背景技术
以太网的广泛使用继续刺激了商业应用中常用组件性能的增长以及成本的降低。现在大多数商业应用忍受着与基于以太网系统有关的相对高的等待时间,但是新兴的商业应用,例如多线程数据库及文件系统,有可能需要减少的等待时间。一些专用的网络解决方案提供减少的等待时间,但是比基于以太网的可升级的群集器要昂贵的多。
等待时间性能可以被改进的一种领域是网络接口控制器(NIC)。NIC是一种支持与网络通信的硬件设备。联系上下文,考虑图1的例示系统。其中对称的多处理器(SMP)系统10包括许多经由相干结构(coherence fabric)16而共享存储器单元14的中央处理器(CPU)12。尽管示出的SMP10具有四个处理器内核,但本领域技术人员能理解SMP10可以具有更多或更少CPU。在NIC18的控制下,SMP10经由以太网连接以及结构(转换器)22发送消息到其他SMP20。NIC18典型地具有与此相关的处理器(未示出),或者作为NIC的整个部分或者以辅助处理器的形式,因此NIC具有足够的智能来翻译各种指令。结构21将消息路由到它们预期的接收方,尽管偶尔消息会丢失,这样图1所示的系统需要支持丢失消息的重传。
虽然每个SMP10,20仅有一个硬件NIC18,但许多不同的软件程序可以在给定的SMP上同时运行,并且经由结构22通过系统传输消息。因此NIC18需要作为一种共享资源而被实现。共享NIC18的一种途径是作为消息传输过程的一部分,要求各种的软件程序调用复杂的操作系统驱动器来协调对NIC18的共享访问。但是,这种共享访问的机制会导致昂贵的软件开销,因为消耗时间的操作系统调用需要频繁地执行通信操作。
共享NIC18的另一个途径是利用虚拟网络接口控制器(VNIC)以为共享那个NIC的多种程序中的每一个提供不同的接口。VNIC是一种通过程序用来与NIC直接通信的用户级软件接口。VNIC可以在用户存储器空间的特定区域内实现,该区域内例如数据读和写的动作被用于指示NIC执行通信操作。可以提供特殊的通信库以便将更高级别的例如发送消息的通信操翻译为用于控制NIC的适合的更低级别的指令。
如图2所示,因为许多VNIC22操作来共享一个NIC18,因此优先级结构24被用来确定在一组竞争服务请求中,哪个VNIC应该从NIC接收服务。但是,为了进一步减少等待时间,一旦VNIC22被选择为由NIC18提供服务,便希望尽可能快地从选中的VNIC中获取消息。
传统上,门铃接口已经被用来以发信号通知独立的数据队列对服务的需求。但是,与门铃接口相关联的信号传输功能独立于数据队列,且因此也不能帮助加快数据传输。所以,希望提供能够克服这些缺陷和局限性的方法和系统来通信数据。

发明内容
根据本发明的一个典型实施例,一种在生产者和消费者之间传送数据的方法包括以下步骤把要从生产者传送的数据存储到队列中,把在所述队列头端配置的数据的一部分存储到队列头高速缓冲存储器,以及检索队列头高速缓冲存储器的数据以传输给消费者。
根据本发明的另一个典型实施例,一种传送数据的系统包括作为数据生产者的第一设备,作为数据消费者的第二设备,用于存储要从生产者向消费者传输的数据的队列,以及用于缓冲在队列头端配置的数据的队列头高速缓冲存储器。


结合说明书并构成说明书一部分的附图示出了发明的实施例,并结合说明描述来解释本发明。图中 图1示出了其中可以实现本发明典型实施例的典型系统; 图2描述了选择要由NIC来服务的VNIC的优先级结构; 图3示出了根据本发明典型实施例的队列头高速缓存结构; 图4示出了根据本发明典型实施例的队列头高速缓存结构的更详细的例子; 图5为描述了根据本发明典型实施例的用于传送数据的方法的流程图。
具体实施例方式本发明典型实施例的以下描述参考相应附图。在不同附图中的相同的参照数字标识相同或相似的元件。下面详细的描述不限制本发明。而是,本发明的范围由所附的权利要求来定义。除了其他附图,在下面也参考在图1和图2以及上面描述的元件。
根据本发明的典型实施例,队列头高速缓存结构提供一种有效的通信接口,例如在通用处理器(例如,图1中的CPU12)上运行的通信软件和关联于NIC18的专用通信处理器之间,或者更一般是在数据生产者和数据消费者之间。在其他设备中,根据本发明典型实施例的队列头高速缓存结构支持多个VNIC,以使每个VNIC可以独立被单独的软件任务所使用。此外,队列头高速缓存结构可以通过加快下一个在队列中要被系统传送的消息的识别和移动来允许有效的数据传输。尽管在网络化的系统的环境中提供了一种详细的实例,但根据本发明的队列头高速缓存也可以用于非网络化的系统中。
图2所示的每个VNIC22可以利用具有如图3所示的首和尾指针的循环队列来实现。这里,利用在线性地址空间的有界范围中沿环路回绕的地址算法来实现循环队列30。对于每个循环队列30,数据被插入到尾端并在首端移除,以考虑例如填充和消耗(draining)队列30的可能的比率失配。通过插入数据后移动尾指针来发信号通知消息的添加以及在移除数据后移动首指针来发信号通知消息的删除,实现了数据插入和移除。首和尾指针的检验可以用来确定队列是否为空以及队列是否具有足够空余空间来容纳给定大小的新消息。循环队列30内的消息提供了长度的指示,其允许移除可变长度消息,其后是精确定位下一个可变长度消息的开始处的首指针。
为了传输消息,软件存储消息在VNIC22的队列30中,其描述在VNIC描述符表中,下面将会详细说明。NIC传输硬件应当可以快速地识别和传输位于存于虚拟存储器的VNIC队列30之一的首端的消息。根据本发明的典型实施例,通过利用硬件来监视相干互联16和利用从这种监视过程中导出的信息而将消息放置在用于快速传送的队列头高速缓存32中,从而加速处理过程。图4示出了一种典型的队列头高速缓存系统32,下面将详细描述。
其中,一种典型的队列头高速缓存存储器40在图的中央示出,并且具有多个入口(图示为行),每个高速缓存40的入口都与不同的VNIC22相关联。在每个高速缓存40中的入口示出了多个字段,从左到右包括有效数据字段(V)、奇数高速缓存行字段、第二有效数据字段、偶数高速缓存行字段以及空/满标记(E)。可以理解的是,这种高速缓存存储器结构纯粹是实例性的,且其他高速缓存配置可以用来实现根据本发明的队列头高速缓存结构。在该实例中,高速缓存40可以存储来自每个VNIC22的队列30的两行数据(奇数和偶数)。这样的数据数量可以例如足以获取全部短的以太网消息,使其能够非常迅速地从队列头高速缓存40处理一些来自NIC18的请求。但是,可以理解的是在高速缓存40内可以提供更多或更少的高速缓存行,来存储来自每个VNIC22的首端数据。有效数据标记指示了他们对应的奇数或偶数高速缓存行是否包含驻留在存储器单元14中的对应数据的有效表示,同时空/满标记指示与高速缓存40的那部分相关联的队列30内的尾指针和头指针当前是否具有相同的值(即,VNIC的队列30是否为空)。
通过监听接口42来填充和更新队列头高速缓存40的行。根据本发明的这个典型实施例,队列头高速缓存结构32利用相关的查找来监听相干互联16,以确定数据何时传递经过相关互联16,其应该存储在队列头高速缓存40中。该监听接口42通过对照相干互联16上出现的地址测试与头指针(对于每个VNIC22)关联的向量来完成这个操作。当存储器操作导致数据出现在其地址匹配有效VNIC22的物理头指针的相干互联16上的时候,监听接口可以复制该数据到该VNIC22的对应的队列头高速缓存的入口处。该匹配可以通过监听接口42以这种方式来实现,对于给定的队列头,偶数和奇数高速缓存行都匹配。这样使得可以获取队列30首端上的高速缓存行和队列30的下一个高速缓存行(如果相同消息的部分不作为队列头上的高速缓存行,它将在提供给VNIC22服务之后立即成为队列的首端,并可能作为快速检索的候选)。
为了更好地理解监听接口42可以根据本发明来操作的一种方式,考虑了以下的实例。假设队列头高速缓存40存储了大小LS字节的行。让函数C(x)计算保留任意地址x的高速缓存行的开始地址,在该实例中是通过物理头指针(PHP)指向的地址。如果高速缓存行由LS=32字节组成且在32字节的边界对准,那么C(x)通过忽略(标记为0)地址x的5低数位来计算。进一步假设典型的队列头高速缓存40可以在每个VNIC22的首端保持NC物理连续的高速缓存行(上述实例中的两条)。该队列头高速缓存40,对于第i个VNIC22,可以保持具有开始地址C(PHPi),C(PHPi)+1*LS,C(PHPi)+2*LS,....C(PHPi)+(NC-1)*LS的NC高速缓存行的窗口。
监听接口42使在位于有效VNIC窗口中的地址被写到存储器的高速缓存行数据被存储在队列头高速缓存40中。在这种纯示意性的实例中,地址x位于第i个VNIC22的窗口内,如果(C(PHPi)<=C(x)<C(PHPi)+NC*LS)的话。当高速缓存行存储在相干互联16上可见,那么该高速缓存行被存放在队列头高速缓存40内部,如果它在VNIC窗口内部的话。这个高速缓存行被存储在通过(x/LS)MOD(NC)指定的队列头高速缓存列中。在这个实例中,如果高速缓存行是从0开始连续编号,偶数高速缓存行都被存储在偶数列中,同时奇数高速缓存行被存储在奇数列中。当高速缓存行被存储在队列头高速缓存40时,则为那个行设置有效位。
接着,例如,当数据通过NIC18被发送到网络时,NIC18通过读取在地址x上的数据来请求该数据。如果存在于高速缓存中,则从队列头高速缓存40检索数据,否则从存储器中检索数据。读数据位于VNIC i的队列头高速缓存窗口,如果(C(PHPi)<=C(x)C(PHPi)+NC*LS)的话。当读数据位于队列头高速缓存窗口内时,在列(x/LS)MOD(NC)中的高速缓存行的有效位被测试。如果高速缓存行为有效,从被选的高速缓存列返回数据,而不是从存储器返回。
监听接口42具有来自物理头指针表44的物理头指针地址,其中包括物理头指针(PHP)以及关联于每个VNIC22的有效地址标记(V)。该有效地址标记(V)指示对应的VNIC22是否有效以及是否具有正确计算的头指针地址,或者是否无效且不需要考虑。由于关联于每个VNIC22的物理头指针随着时间变化,因此元件46-52操作来保持物理头指针表44用适当值来更新。
根据本发明的典型实施例,每个VNIC22的队列头最初表示为整数头偏移,放到每个VNIC的队列30中,该偏移被存储在表48中。例如,如果队列30具有1024个消息槽,则该队列30的头偏移可以为1000。当消息被添加到那个特定队列30时,该头偏移调整功能46从VNIC描述符表50检索该队列的长度,从表48检索该队列的当前头偏移,且利用那些值以及添加到队列的消息的长度执行循环算法,来确定对应于特定VNIC22在队列30中的最早的消息的位置的新的头偏移。该新的头偏移被存储在表48中对应的入口内,且被传递到地址转换查找功能52。
地址查找功能52检索与VNIC22的队列30关联的虚拟地址范围,该队列的头偏移已经从VNIC描述符表50变化,并转换虚拟地址范围和新的头偏移的组合为新的物理头指针地址。新的物理头指针地址接着被存储到对应于其头指针地址已经被更新的VNIC22的表44的入口。更具体地,根据图4的典型实施例,高速缓存存储器40保持来自每个VNIC的队列30的首端的数据的两条高速缓存行,以及对准存储在表48内的VNIC头偏移以开始偶数高速缓存行。因此每个VNIC22的这些典型的头偏移可以被细分为两种表示VNIC22的虚拟地址范围内的页偏移以及该页内的高速缓存行偏移。接着,为了转换虚拟地址范围和新的头偏移的组合,地址转换查找功能52可以利用页偏移来选择该VNIC22的物理页矢量内的正确页,且高速缓存行偏移被加入到被选页的地址。
已经描述了如何根据本发明的典型实施例来组织和更新队列头高速缓存40,下面将描述根据本发明典型实施例,如何利用它来帮助消息传输。当NIC18发送地址(A)作为数据请求的一部分(例如,保留在已经被选择用于服务的VNIC22的队列内的指令)到队列头高速缓存访问单元54时,该队列头高速缓存设备32首先检查来查看被请求数据的有效版本是否存在于高速缓存存储器40中。这可以通过以下来完成,例如,队列头高速缓存访问单元54对照存储在物理头指针表44内的那些地址来检查接收的地址,并执行高速缓存存储器40的标记查询。如果请求导致高速缓存命中,那么高速缓存存储器40传送被请求的数据到队列头高速缓存访问单元54。
可替换地,如果被请求的数据超过了两条存储在高速缓存存储器40内的高速缓存行(在这个实例中),或者如果存储的高速缓存数据行无效,高速缓存则发生未命中。那么队列头高速缓存访问单元54信号通知系统存储器访问功能56来向主存储器14请求NIC18的数据(“未命中路径”)。该数据被返回到队列头高速缓存访问单元54,并发送给NIC18。
在来自VNIC22的数据被处理之后(例如,传输到网络上),它的物理头指针移动跨过处理的数据。头指针的移动信号通知有必要在新的队列头开始处理数据。在第i个VNIC22内的数据被处理之后,PHPi从它的旧值old_PHPi被调整为新的值new_PHPi。如果头指针被移动到一个适中的距离,队列头高速缓存40的一些数据保持为有效。这可以通过保持在新的和旧的高速缓存窗口中的有效高速缓存行而实现。每次PHP被调整,任何旧窗口内而不是新窗口内的高速缓存行就为无效。这种计算可以通过下面描述的伪码来执行phpa=(old_PHPi/LS)phpb=(new_PHPi/LS)diff=phpb-phpa/*移动的行的数量*/ovf=~(0<=diff<L)/*如果移动的行大于L行,则溢出*/ma=phpa MOD NC/*对应于phpa的高速缓存列*/mb=phpb MOD NC/*对应于phpb的高速缓存列*/s=(mb-ma)>=0)/*如果b>=a,为1*/for(i=0,...,L-1)vai=i>=ma/*在phpa列的右边,为真值*/for(i=0,...,L-1)vbi=i<mb/*在phpb列的左边,为真值*/inv=~ovf&(s&(vb&va)|~s&(vb|va))|(ovf&1)/*识别位于旧窗口而不是新窗口内的数据列*/
v=v&(~inv)/*屏蔽已知为无效的有效位为零*/以上计算的无效矢量识别出当移动头指针时被无效的队列头列。这些列中的每一个都是在前窗口的成员,且可以具有不再是新高速缓存窗口成员的数据,且因此现在被认为是无效的。更新PHP指针之后,计算新的有效矢量,重新开始如上所述的监听。
根据本发明的一个典型实施例,一种预取接口58也可以被包括作为队列头高速缓存结构32的一部分。预取接口58从地址转换查找功能52接收被更新的物理头指针,并操作以抢先预取高速缓存存储器40的数据。例如,NIC18通过系统传输队列头30的消息之后,NIC18发送适当的指示符到头偏移调整功能46,来更新VNIC22的对应头偏移以及物理头指针。当发生这些,关联于这个特定VNIC22的高速缓存40内的数据入口是临时无效的,因为其还没有被更新来反映关联于新的头指针的消息。相应地,预取接口58可以利用更新的物理头指针来请求对位于主存储器16中的地址(通过系统存储器访问单元56)上的数据的检索。这个数据可以接着被存储在高速缓存40的相应入口,使得当NIC18请求时,其是有效且可利用的。
已经描述了根据本发明的典型实施例的典型的队列头高速缓存实现,现在将讨论这种典型硬件电路的某些应用。例如,本发明的典型实施例的另一个特征是利用特殊消息(这里被称为“零点”),其在每个VNIC的队列30的尾部后由用户(软件)增加到队列30,以便使得能够确定每个队列30是空的还是非空的(满的)。例如,考虑到空的VNIC具有相等的头和尾偏移,由此表示在循环队列30中没有真正的入口。无论什么时候空VNIC的头消息装载在队列头高速缓存40中,高速缓存40的满/空标记E部分都提供了一种指示,即这个VNIC22没有需要传送服务的消息。比较器电路60评估满/空标记E,来确定每个高速缓存入口是满的还是空的。比较器电路60可以接着生成识别全部非空VNIC22的服务请求位向量,其被发送到优先级编码器(未示出),其中服务请求位向量可以被用来快速识别下个需要NIC18服务的VNIC22。
如上所述,通过将新消息在队列尾部写入到存储器,用户(例如软件应用)传送消息到VNIC队列30中。这些新消息可以跟随终止零点消息,来标注有效数据的结束。终止零点消息应该被更新,因为新消息以如下方式被加入到队列中,即它避免了终端端点标志被标记为非零点以及网络接口读取超过在前端点标志的数据的情况。假定例如下面的方案。当添加新的消息到VNIC队列30中时,终止端点标记首先被移除,接着在VNIC尾部添加新的数据,且接下来在新添加的数据之后放置终止端点标记。如果利用这个方法,存在短暂的时间期间,VNIC没有正确终止,且NIC硬件会读取错误的数据。为了确保直到终止端点标记的所有数据一直都为有效的,新添加的具有新端点标记的消息以特定的次序被写入,因此修改的最后字段为在前端点标记。首先在在前端点标记之后写入数据,同时保留在前端点标记未被修改。接着在新存入的数据之后写入一个新的端点标记,且最后覆盖在前端点标记,以允许访问新的消息。当这个在前端点标记从零到非零改变数值时,硬件处理向前跨过新近添加的有效消息,直到到达新的端点标记。
无论何时,有效VNIC22的头位于零消息上时,传输NIC18等候新的数据。在这种情况下,当软件在尾部添加新的消息并更新在前终止零消息时,传输NIC18可以利用监听接口42来检测新数据的到来。如果软件确保了VNIC头上的数据的变化被传输到相干互联16(例如,通过发布高速缓存刷新操作),那么传输NIC18将观察这个操作,并在队列30的头更新值。这导致空/满标记E的值的对应变化,并且进而又信号通知现在的非空VNIC22的服务请求。
基于上述内容,图5流程图中描述了用于从生产者(例如,VNIC)到消费者(例如,NIC)传送数据的典型方法。其中,数据在步骤500被存储在队列中,在步骤510至少一些来自队列首端的数据被高速缓存,且该高速缓存的数据接着在步骤520从用于向消费者传输的高速缓存被检索以用于传输的。在包括VNIC和NIC的本发明的典型实施例中,这个技术有助于在选择了用于服务的VNIC22之后向NIC18给出消息数据,因此减少了与经由网络进行数据通信有关的等待时间。
但是,本领域的技术人员可以理解根据本发明典型实施例的队列头高速缓存可以用于除网络之外的目的。无论什么时候从以硬件或软件实现的生产过程到以硬件或软件实现的消费过程在基于存储器的队列中交换数据时,队列头高速缓存都可以被用来流线型访问那个数据。利用队列头高速缓存的非网络实例是一种图形显示列表发生器和显示列表再现引擎,其中图形显示列表发生器产生一种显示列表,以及显示列表再现引擎在视频显示屏上再现显示列表。发生器和再现引擎可以以硬件或者软件来实现。队列头高速缓存常用来连接生产者(例如,显示列表发生器)到消费者(例如,图形再现引擎)。
上面描述的本发明的典型实施例提供了图释和说明,但并不意味着它是穷尽的或者限制本发明到所公开的精确程度。根据上述教导可以做出修改或变换,或者可以从发明的实践中获得各种修改或变换。以下权利要求及其等价物定义了本发明的范围。
权利要求
1.一种在生产者和消费者之间传送数据的方法,包括以下步骤在队列中存储将从所述生产者传送的数据(500);在队列头高速缓冲存储器中存储在所述队列的首端配置的所述数据的一部分(510);以及从所述队列头高速缓冲存储器检索所述数据,以传输(520)给所述消费者。
2.权利要求1的方法,其中,所述队列是循环队列,具有指向所述队列中最早的消息的位置的头指针,以及指向所述队列中最新的消息的尾指针。
3.权利要求2的方法,进一步包括步骤维持包括至少一个物理头指针地址的表格;以及利用所述表格,选择性地更新所述队列头高速缓存中的所述数据。
4.权利要求3的方法,其中,所述选择性地更新所述数据的步骤进一步包括步骤在将所述生产者连接到所述消费者的相干互联上监听,以便识别在所述相干互联上的,具有对应于所述至少一个物理头指针地址的地址的数据传输;以及当发生匹配时,在所述队列头高速缓存更新对应的入口。
5.权利要求1的方法,其中,所述生产者和所述消费者是虚拟网络接口电路(VNIC)和网络接口控制器(NIC)中的一个。
6.权利要求5的方法,其中,所述队列头高速缓存具有用于多个VNIC中每一个的入口。
7.权利要求1的方法,其中,在队列头高速缓冲存储器中存储在所述队列的首端配置的所述数据的一部分(510)的所述步骤进一步包括步骤基于更新的头指针,预取所述数据的所述部分。
8.权利要求1的方法,其中所述从所述队列头高速缓存存储器检索所述数据以传输给所述消费者的步骤进一步包括步骤确定生产者请求用于传输的消息是否作为所述高速缓存的数据的一部分存在;如果是,提供所述高速缓存的数据给与所述生产者相关联的发送器;否则,从主存储器请求所述消息。
9.一种用于传送数据的系统,包括作为数据生产者的第一设备(VNIC22);作为所述数据的消费者的第二设备(NIC18);队列(30),用于存储要从所述生产者传输到所述消费者的所述数据;以及队列头高速缓存存储器(32),用于高速缓存在所述队列的首端配置的数据。
10.权利要求9的系统,其中,所述队列是循环队列,具有指向所述队列中最早的消息的位置的头指针,以及指向所述队列中最新的消息的尾指针。
11.权利要求10的系统,进一步包括表格,包括至少一个对应于所述头指针的物理头指针地址;子系统,用于利用所述至少一个物理头指针地址来更新所述队列头高速缓存中的所述数据。
12.权利要求11的系统,进一步包括所述数据可以通过其来传送的相干互联;以及监听接口,用于监视所述相干互联,来识别在所述相干互联上的,具有对应于所述至少一个物理头指针地址的地址的数据传输,以及用于当发生匹配时来更新所述队列头高速缓存内的对应入口。
13.权利要求9的系统,其中,所述生产者是向高速缓存接口单元给出消息地址的网络接口控制器(NIC),其从所述队列头高速缓存检索与所述消息地址相关联的数据,或者经由所述相干互联从主存储器单元检索所述数据。
14.权利要求11的系统,进一步包括头偏移表,用于跟踪当消息被添加到所述队列或者从所述队列移除时头指针位置的变化;以及地址转换查找功能,用于将所述变化转换为新的物理头指针地址,并更新所述物理头指针表。
15.权利要求9的系统,其中,所述生产者设备是生成显示列表的图形显示列表发生器,以及所述消费者设备是显示列表再现引擎。
16.权利要求9的系统,其中,存储在所述队列中的所述数据包括在所述队列尾端的终止消息。
全文摘要
描述了一种用于从队列的头(图2)高速缓存数据的方法和系统。该高速缓存的数据可以接着基于请求从数据生产者(例如,VNIC22)被选择性地转发到数据消费者(例如,NIC18)。
文档编号H04L29/06GK1996930SQ20071008411
公开日2007年7月11日 申请日期2007年1月5日 优先权日2006年1月6日
发明者M·S·施兰斯克, E·厄尔特利, J·-F·科拉尔 申请人:惠普开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1