启用远程直接存储器存取的网络接口控制器切换和切回支持的制作方法

文档序号:7867695阅读:256来源:国知局
专利名称:启用远程直接存储器存取的网络接口控制器切换和切回支持的制作方法
技术领域
本发明涉及主计算机和输入/输出(I/O)设备之间的通信协议。更具体地说,本发明提供一种方法,借助该方法,启用了远程直接存储器存取(RDMA)的网络接口控制器(NIC)能够支持由启用了RDAM(RDAM-enabled)的主NIC(RNIC)和启用了RDMA的备用NIC(RNIC)组成的冗余结构。
背景技术
在因特网协议(IP)网络中,软件提供可被用于与输入/输出设备,通用计算机(主机)和专用计算机通信的消息传送机构。该消息传送机构由传送协议,高级协议和应用编程接口组成。目前在IP网络上使用的关键标准传送协议是传输控制协议(TCP)和用户数据报协议(UDP)。TCP提供可靠的服务,UDP提供不可靠的服务。未来,流控制传输协议(SCTP)也将被用于提供可靠服务。在设备或计算机上执行的进程通过高级协议,例如套接字、iSCSI和直接存取文件系统(DAFS)访问IP网络。不幸的是,TCP/IP软件占用相当数量的处理器和存储器资源。在文献(参见J.Kay,J.Pasquale,“Profiling andreducing processing overheads in TCP/IP”,IEEE/ACM Transactionson Networking,Vol 4,No.6,pp.817-828,1996年12月;和D.D.Clark,V.Jacobson,J.Romkey,H.Salwen,“An analysis of TCP processingoverhead”,IEEE Communications Magazine,volume27,Issue6,1999年6月,pp23-29)中已广泛论及该问题。未来,由于几个原因,网络堆栈将继续占用过多的资源,包括应用对连网的越来越多的使用;网络安全协议的使用;和底层架构带宽以高于微处理器和存储器带宽的速度不断增大。为了解决该问题,该行业正在把网络堆栈处理卸载(offload)给启用了RDMA的NIC(RNIC)。
本行业中正在采取的卸载方法有两种。第一种方法使用现有的TCP/IP网络堆栈,而不增加任何另外的协议。这种方法能够把TCP/IP推给硬件,但是不幸的是不能消除对接收方副本的需要。如同在上面的论文中所述,副本是对CPU利用率的最大组成因素之一。为了消除对副本的需要,本行业正在寻求第二种方法,所述第二种方法由在TCP和SCTP协议上增加成帧、直接数据布置(DDP)和远程直接存储器存取(RDMA)组成。支持这两种方法所需的启用了RDMA的NIC(RNIC)类似,关键区别在于在第二种方法中,硬件必须支持另外的协议。
RNIC提供可由套接字、iSCSI和DAFS用于在节点之间通信的消息传送机构。在主计算机或设备上执行的进程通过在RNIC上公布发送/接收工作队列的发送/接收消息,访问IP网络。这些进程也被称为“消费者”。
发送/接收工作队列(WQ)作为队列对(QP)被分配给消费者。可通过几种不同的传送类型传统的TCP、RDAM TCP、UDP或SCTP发送消息。通过RNIC发送和接收工作完成(WC)队列,消费者从完成队列(CQ)取回这些消息的结果。源RNIC负责把出站消息分段,并把它们发送给目的地。目的地RNIC负责重新装配入站消息,并把它们放入由目的地的消费者指定的存储空间中。这些消费者使用RNIC动词(verb)来访问RNIC支持的功能。解释动词并直接访问RNIC的软件被称为RNIC接口(RI)。
目前,主CPU中的软件执行多数传送(例如TCP)和网络层(例如IP)处理。目前,NIC一般执行链路层(例如以太网)处理,并且可能执行适量的传送或网络层卸载(例如检查和卸载)。目前,主机软件把与TCP/IP连接相关的所有状态信息保存在主机本地存储器中。把所有状态信息保持在主机本地存储器中允许主机软件支持主NIC和备用NIC之间的切换和切回。即,如果主NIC发生故障,那么主机软件把所有连接转移到备用NIC,并继续通信处理。
启用了RDMA的NIC提供高性能接口,用于与其它通用计算机和I/O设备通信。RNIC把传送(例如TCP)和网络(例如IP)层转移到RNIC。通过把这些层转移到RNIC,主机软件不再能够利用目前的机构支持切换和切回。于是,需要一种简单的机构来允许RNIC支持可靠的传送(例如TCP)连接的切换和切回,并且由于计划或非计划的RNIC停机的结果,允许通信继续进行。

发明内容
因此,在第一方面,本发明提供一种在数据处理系统中的启用了远程直接存储器存取的主网络接口控制器(RNIC)和备用RNIC之间执行切换(switchover)的方法,包括产生用于主RNIC和备用RNIC的公共队列对,以致主RNIC和备用RNIC共享所述公共队列对;检测切换事件;响应切换事件的检测,把队列对的处理从主RNIC切换到备用RNIC。
最好,产生公共队列对包括向主RNIC和备用RNIC分配队列范围,以致主RNIC和备用RNIC共享该队列范围内的队列。
最好,所述队列范围包括一系列队列对和一系列完成队列。
最好,产生公共队列对包括把一系列存储器转换保护表条目分配给主RNIC和备用RNIC。
所述方法最好包括产生用于主RNIC和备用RNIC的公共完成队列,以致主RNIC和备用RNIC共享所述公共完成队列;如果检测到切换事件,那么把公共完成队列的操作切换到备用RNIC。
最好,主RNIC和备用RNIC通过架构(fabric)和共享的系统存储器之一,相互发送检查点消息。
最好,所述架构是局域网、广域网、存储映射I/O扩展网络和系统区域网之一。
最好,检查点消息包括操作码字段、长度字段和验证(validation)字段。
最好,操作码把检查点消息的类型识别成活动消息,更新工作发送队列切换发送语境(context),更新提交(committed)发送队列切换发送语境,更新工作发送队列切换确认语境,更新提交发送队列切换确认语境,更新工作接收队列切换接收语境,更新提交接收队列切换接收语境,更新工作接收队列切换确认语境,更新提交接收队列切换确认语境,更新工作完成队列切换语境,和更新提交完成队列切换语境之一。
最好,切换事件是在备用RNIC中在预定时间内没有收到来自主RNIC的检查点消息。
最好,把队列对的处理从主RNIC切换到备用RNIC包括把主RNIC的地址添加到备用RNIC的地址表中;使主RNIC对与主RNIC和备用RNIC耦接的交换机是不可访问的;在交换机中,使主RNIC的地址可被识别成备用RNIC的地址。
最好,把队列对的处理从主RNIC切换到备用RNIC包括修改用于完成队列语境的主RNIC和备用RNIC标识语境信息,以致备用RNIC被识别成主RNIC;修改队列对语境的主RNIC和备用RNIC标识语境信息,以致备用RNIC被识别成主RNIC。
该方法最好还包括保持主RNIC和备用RNIC内的状态信息,所述状态信息识别队列的切换状态。
最好,保持状态信息包括保持主RNIC和备用RNIC标识语境数据结构,所述主RNIC和备用RNIC标识语境数据结构包括RNIC切换状态,主RNIC标识符,主RNIC端口标识符,备用RNIC标识符和备用RNIC端口标识符中的至少之一。
最好,保持状态信息包括保持具有用于主RNIC和备用RNIC的每个公共完成队列的条目的完成队列语境表。
本发明最好提供一种在具有主RNIC和备用RNIC的数据处理系统中发送数据段(data segment)的方法,包括接收数据段;更新主RNIC中的工作发送队列切换语境信息;把更新工作发送队列切换语境检查点消息发送给备用RNIC;从备用RNIC接收更新提交发送队列切换语境检查点消息;用更新提交发送队列切换语境检查点消息的内容更新提交发送队列切换语境的本地副本;和从发送队列发送数据段。
最好,备用RNIC用更新工作发送队列切换语境检查点消息的内容更新本地的工作发送队列切换语境;并把工作发送队列切换语境复制到提交发送队列切换语境。
在第二方面,本发明提供一种计算机程序,它包括当被装入计算机系统并在计算机系统上执行时,使所述计算机执行根据第一方面的方法的步骤的计算机程序代码部件。第二方面的优选特征包括执行与第一方面的优选特征的方法步骤对应的步骤的程序代码部件。
在第三方面,本发明提供一种在具有主RNIC和备用RNIC的数据处理系统中发送数据段的设备,包括接收数据段的装置;更新主RNIC中的工作发送队列切换语境信息的装置;把更新工作发送队列切换语境检查点消息发送给备用RNIC的装置;从备用RNIC接收更新提交发送队列切换语境检查点消息的装置;用更新提交发送队列切换语境检查点消息的内容更新提交发送队列切换语境的本地副本的装置;和从发送队列发送数据段的装置。
从而,本发明的优选实施例提供一种支持RNIC切换和切回(switchback)的方法、计算机程序产品和分布式数据处理系统;分布式数据处理系统包括端节点、交换机、路由器和互连这些组件的链路;端节点使用发送和接收队列对来传送和接收消息。端节点最好把消息分成多段,并通过链路传送所述各段。交换机和路由器可互连端节点,并把所述各段发送给恰当的端节点。在目的地处,端节点可把所述各段重新装配(reassemble)成消息。
本发明的优选实施例提供一种支持RNIC(启用了RDMA的NIC)切换和切回的机构;当在主RNIC上发生计划或非计划的停机时,通过利用所提供的优选机构,所有未完成的(outstanding)连接被切换到备用RNIC,备用RNIC继续通信处理。另外,利用在本发明的优选实施例中提供的机构,连接也可被切换回来。


下面参考附图,举例说明本发明的优选实施例,其中图1图解说明根据本发明的一个优选实施例的分布式计算机系统;图2是根据本发明的一个优选实施例的主处理器节点的功能方框图;图3A图解说明根据本发明的一个优选实施例的IP组卸载引擎;图3B图解说明根据本发明的一个优选实施例的交换机;图3C图解说明根据本发明的一个优选实施例的路由器;图4图解说明根据本发明的一个优选实施例的工作请求的处理;图5图解说明根据本发明的其中使用TCP或SCTP传送的优选实施例的分布式计算机系统的一部分;图6图解说明根据本发明的一个优选实施例的数据帧;图7图解说明根据本发明的一个优选实施例的分布式计算机系统的一部分,以举例说明例证的请求和确认事务;图8图解说明根据本发明的一个优选实施例,在分布式连网系统中使用的网络寻址;图9图解说明本发明的一个优选实施例中,包含子网的分布式计算机系统的一部分;图10图解说明在本发明的一个优选实施例中使用的分层通信体系结构;图11是图解说明根据本发明的一个优选实施例的对于主机软件的RNIC接口的示意图;图12是图解说明根据本发明的一个优选实施例,由两个RNIC保持的与切换和切回相关的例证连接状态的示意图;图13A是概述根据本发明的一个优选实施例,跨越两个RNIC的连接的例证初始化进程的流程图;图13B是概述根据本发明的一个优选实施例,跨越两个RNIC的连接的例证重新同步进程的流程图;图13C是图解说明根据本发明的一个优选实施例,在主RNIC和备用RNIC之间使用的检查点消息的例证示意图;图14是图解说明根据本发明的一个优选实施例,两个RNIC使用的发送检查点消息流程和进程的例证示意图;图15是图解说明根据本发明的一个优选实施例,两个RNIC使用的接收检查点消息流程和进程的例证示意图;图16是图解说明根据本发明的一个优选实施例,两个RNIC使用的完成检查点消息流程和进程的例证示意图;图17是图解说明根据本发明的一个优选实施例,两个RNIC使用的主RNIC到备用RNIC切换消息流程和进程的例证示意图;图18是图解说明根据本发明的一个优选实施例,两个RNIC使用的备用QP激活消息流程和进程的例证示意图。
具体实施例方式
本发明的优选实施例提供一种具有端节点、交换机、路由器和互连这些组件的链路的分布式计算系统。端节点可以是因特网协议组卸载引擎或基于传统的主机软件的因特网协议组。每个端节点使用发送和接收队列对来传送和接收消息。端节点把消息分割成帧,并通过链路传送帧。交换机和路由器互连端节点,并把帧发送给恰当的端节点。位于目的地的端节点把帧重新装配成消息。
现在参考附图,尤其参考图1,图1根据本发明的一个优选实施例,图解说明了分布式计算机系统。图1中表示的分布式计算机系统采取因特网协议网络(IP网),例如IP网100的形成,并且只是用于举例说明,下面描述的本发明的实施例可在众多其它类型和结构的计算机系统上实现。例如,实现本发明的优选实施例的计算机系统可从具有一个处理器和几个输入/输出(I/O)适配器的小型服务器到具有数百或数千个处理器,以及成千上万个I/O适配器的大型并行超级系统。此外,可在由因特网或企业内部网连接的远程计算机系统的基础结构中实现本发明的优选实施例。
IP网100是互连分布式计算机系统内的节点的高带宽、低等待时间网络。节点是连接到网络的一个或多个链路上,并且形成网络内的消息的出发点和/或目的地的任意组件。在描述的例子中,IP网100包括呈主处理器节点102,主处理器节点104和独立磁盘冗余阵列(RAID)子系统节点106的形式的节点。图1中图解说明的节点只是用于举例说明的目的,因为IP网100能够连接任意数目和任意类型的独立处理器节点,存储器节点和专用处理节点。任意节点都能够起端节点的作用,这里端节点被定义为IP网100中产生或最终使用消息或帧的设备。
在本发明的一个实施例中,存在分布式计算机系统中的一个出错处理机构,其中出错处理机构允许分布式计算系统,例如IP网100中端节点之间的TCP或SCTP通信。
这里使用的消息是数据交换的应用定义单位,它是合作进程之间的通信的基本单元。帧是由因特网协议组报头和/或报尾封装的数据的一个单位。报头一般提供引导帧通过IP网100的控制和路由信息。报尾一般包含确保不会传送内容受到破坏的帧的控制和循环冗余校验(CRC)数据。
在分布式计算机系统内,IP网100包含支持各种形式的通信,例如存储,进程间通信(IPC),文件存取和套接字的通信和管理基础结构。图1中所示的IP网100包括交换通信架构116,它允许许多设备在安全、远程管理的环境中,在高带宽、低等待时间的情况下同时传送数据。端节点能够通过多个端口通信,并且能够利用通过IP网架构的多个路径。图1中所示的多个端口和通过IP网的多个路径可被用于容错和增加带宽数据传送。通过控制台110能够访问交换通信架构116中的组件,以便进行管理和维护。
图1中的IP网100包括交换机112、交换机114和路由器117。交换机是一种把多个链路连接在一起,并通过利用2层目的地地址字段,允许帧的从一个链路到另一链路的路由的设备。当以太网被用作链路时,目的地字段被称为媒体访问控制(MAC)地址。路由器是一种根据3层目的地地址字段发送帧的设备。当因特网协议(IP)被用作3层协议时,目的地地址字段是IP地址。
在一个实施例中,链路是任意两个网络架构部件,例如端节点、交换机或路由器之间的全双工通道。例证的恰当链路包括(但不限于)铜缆,光缆,和底板及印刷电路板上的印刷电路铜迹线。
对于可靠的服务类型(TCP和SCTP),诸如主处理器端节点和I/O适配器端节点之类的端节点产生请求帧并返回确认帧。交换机和路由器把帧从来源传递到目的地。
在如图1中所示的IP网100中,主处理器节点102、主处理器节点104和RAID子系统节点106包括与IP网100连接的至少一个IPSOE。在一个实施例中,每个IPSOE是对在IP网100上传送的源或sync帧足够详细地实现IPSOI的端节点。主处理器节点102包含呈主IPSOE 118和IPSOE 120的形式的IPSOE。主处理器节点104包含IPSOE 122和IPSOE 124。主处理器节点102还包括通过总线系统134互连的中央处理器126-130和存储器132。主处理器节点104类似地包括由总线系统144互连的中央处理器136-140和存储器142。
IPSOE 118提供与交换机112的连接,而IPSOE 124提供与交换机114的连接,IPSOE 120和122提供与交换机112和114的连接。
在一个实施例中,用硬件或硬件和卸载微处理器的组合实现IP组卸载引擎。在这种实现中,IP组处理被转移给IPSOE。这种实现还允许通过交换网络的多个同时发生的通信,而不需要与传递协议相关的传统开销。在一个实施例中,图1中的IPSOE和IP网100向分布式计算机系统的消费者提供零处理器复制数据传送,而不涉及操作系统内核进程,并采用硬件来提供可靠的容错通信。
如图1中所示,路由器17与连接其它主机或其它路由器的广域网(WAN)和/或局域网(LAN)耦接。
在该例子中,图1中的RAID子系统106包括处理器168、存储器170、IP组卸载引擎(IPSOE)172和多个冗余和/或多个条形存储磁盘单元174。
IP网100处理关于存储、处理器间通信、文件存取和套接字的数据通信。IP网100支持高带宽、可缩放并且等待时间极低的通信。用户客户机能够绕过操作系统内核进程,直接访问允许高效的消息传送协议的网络通信组件,例如IPSOE。IP网100适合于当前的计算模型,并且是用于新形式的存储,群集和常规连网通信的积木式部件。此外,图1中的IP网100允许存储器节点在它们之间通信,或者与分布式计算机系统中的任意或者全部处理器节点通信。就连接在IP网100上的存储器来说,存储器节点具有和IP网100中的任意主处理器节点相同的通信能力。
在一个实施例中,图1中所示的IP网100支持通道语义(semantics)和存储器语义。通道语义有时被称为发送/接收或推送通信操作。通信语义是在其中源设备推送数据,目的地设备确定数据的最终目的地的传统I/O通道中采用的那种通信。在通道语义中,从源进程传送的帧指定目的地进程的通信端口,但是不指定该帧将被写入目的地进程的存储空间中的何处。从而在通道语义中,目的地进程预先分配放置传送的数据的地方。
在存储器语义中,源进程直接读取或写入远程节点目的地进程的虚拟地址空间。远程目的地进程只需要传递用于数据的缓冲器的位置,并不需要卷入任何数据的传送中。从而,在存储器语义中,源进程发送包含目的地进程的目的地缓冲存储器地址的数据帧。在存储器语义中,目的地进程预先准许源进程访问其存储器。
存储、群集和常规连网通信一般都需要通道语义和存储器语义。典型的存储操作采用通道语义和存储器语义的组合。在图1中所示的分布式计算机系统的例证存储操作中,主处理器节点,例如主处理器节点102通过使用通道语义把磁盘写命令发送给RAID子系统IPSOE172,启动存储操作。RAID子系统检查该命令,并使用存储器语义直接从主处理器节点的存储空间读取数据缓冲区。在读取数据缓冲区之后,RAID子系统采用通道语义把I/O完成消息回送给主处理器节点。
在一个例证实施例中,图1中所示的分布式计算机系统执行操作,所述操作采用虚拟地址和虚拟存储器保护机构来确保对所有存储器的正确并且恰当的访问。不要求在这样的分布式计算机系统中运行的应用程序对任何操作使用物理寻址。
现在参见图2,根据本发明的一个优选实施例描述了主处理器节点的功能方框图。主处理器节点200是主处理器节点,例如图1中的主处理器节点102的一个例子。
在本例中,图2中所示的主处理器节点200包括一组消费者202-208,它们是在主处理器节点200上执行的进程。主处理器节点200还包括IP组卸载引擎(IPSOE)201和IPSOE 212。IPSOE 210包含端口214和216,而IPSOE 212包含端口218和220。每个端口与一个链路连接。端口能够与一个IP网子网或者多个IP网子网,例如图1中的IP网100连接。
消费者202-208通过动词(verbs)接口222和消息与数据服务224,把消息传送给IP网。动词接口实际上是IP组卸载引擎的功能的抽象描述。操作系统通过其编程接口可揭示一些或全部动词功能。基本上,该接口定义主机的行为。另外,主处理器节点200包括消息与数据服务224,它是层次高于动词层的高级接口,并被用于处理通过IPSOE 210和IPSOE 212接收的消息和数据。消息与数据服务224向消费者202-208提供处理消息和其它数据的接口。
现在参见图3A,根据本发明的一个优选实施例,描述了IP组卸载引擎。图3A中所示的IP组卸载引擎300A包括用于向IPSOE端口312A-316A传送消息的一组队列对(QP)302A-310A。利用网络层的服务质量字段(QOSF),例如第六版IP规范中的通信类别字段318A-334A引导到IPSOE端口312A-316A的数据的缓存。每个网络层服务质量字段具有它自己的流控制。因特网工程任务组(IETF)标准网络协议被用于配置与网络连接的所有IP组卸载引擎端口的链路和网络地址。两种这样的协议是地址解析协议(ARP)和动态主机配置协议。存储器转换和保护(MTP)338A是把虚拟地址转换成物理地址,并确认访问权的机构。直接存储器存取(DMA)340A相对于队列对302A-310A,利用存储器350A提供直接存储器存取操作。
单一的IP组卸载引擎,例如图3A中所示的IPSOE 300A能够支持成千上万对队列。每对队列由一个发送工作队列(SWQ)和接收工作队列(RWQ)组成。发送工作队列被用于发送通道和存储器语义消息。接收工作队列接收通道语义消息。消费者调用操作系统专用编程接口(这里它被称为“动词”),以便把工作请求放置到工作队列中。
图3B根据本发明的一个优选实施例,描述一个交换机,例如交换机300B。交换机300B包括通过链路或网络层服务质量字段,例如第四版IP的服务类型字段(识别成QOSF 306B),与许多端口304B通信的分组中继302B。一般,诸如交换机300B之类的交换机能够把帧从一个端口发送到相同交换机上的任意其它端口。
类似地,图3根据本发明的一个优选实施例,描述一个路由器300C。路由器300C包括一个帧中继,例如通过网络层服务质量字段,比如第四版IP的服务类型字段(识别成QOSF 306C),与许多端口304C通信的GRH分组中继302C。类似于交换机300B,路由器300C一般能够把帧从一个端口发送到相同路由器上的任意其它端口。
现在参见图4,根据本发明的一个优选实施例,图解说明工作请求的处理。在图4中,存在一个接收工作队列400,一个发送工作队列402和完成队列404,以便处理往来于消费者406的请求。来自消费者406的这些请求最终被发送给硬件408。本例中,消费者406产生工作请求410和412,并接收完成队列414。如图4中所示,排列到工作队列中的工作请求被称为工作队列元素(WQE)。
发送工作队列402包含描述要在IP网架构上传送的数据的工作队列元素(WQE)422-428。接收工作队列400包含描述把来自IP网架构的输入通道语义数据放入何处的工作队列元素(WQE)416-420。一个工作队列元素由IPSOE中的硬件408处理。
动词还提供从完成队列404取回完成的工作的机构。如图4中所示,完成队列404包含完成队列元素(CQE)430-436。完成队列元素包含关于先前完成的工作队列元素的信息。完成队列404被用于产生关于多对队列的单点的完成通知。完成队列元素是完成队列上的一个数据结构。该元素描述一个完成的工作队列元素。完成队列元素包含足以确定队列对和完成的专用工作队列元素的信息。完成队列语境是包含单个完成队列的指针,长度和管理单个完成队列所需的其它信息的信息。
支持图4中所示的发送工作队列402的例证工作请求如下。发送工作请求是把一组本地数据段推送给远程节点的接收工作队列元素引用的数据段的通道语义操作。例如,工作队列元素428包含对数据段4 438,数据段5 440和数据段6 442的引用。每个发送工作请求的数据段包含部分虚拟邻近的存储区。用于引用本地数据段的虚拟地址在产生本地队列对的进程的地址语境中。
远程直接存储器存取(RDMA)读取工作请求提供读取远程节点上的虚拟邻近的存储空间的存储器语义操作。存储空间可以是一部分存储区域,或者一部分存储窗。存储区引用由虚拟地址和长度定义的预先记录的一组虚拟邻近的存储器地址。存储窗引用已绑定到预先记录的区域的一组虚拟邻近的存储器地址。
RDMA读取工作请求读取远程端节点上的虚拟邻近的存储空间,并把数据写入虚拟邻近的本地存储空间。类似于发送工作请求,RDMA读取工作队列元素用于引用本地数据段的虚拟地址在产生本地队列对的进程的地址语境中。远程虚拟地址在拥有RDMA读取工作队列元素把其作为目标的远程队列对的进程的地址语境中。
RDMA写入工作队列元素提供对远程节点上的虚拟邻近的存储空间进行写操作的存储器语义操作。例如,接收工作队列400中的工作队列元素416引用数据段1 444,数据段2 446和数据段3 448。RDMA写入工作队列元素包含本地虚拟邻近的存储空间的分散列表和其中写入本地存储空间的远程存储空间的虚拟地址。RDMA FetchOp工作队列元素提供对远程字进行基本操作的存储器语义操作。RDMAFetchOp工作队列元素是组合的RDAM读取、修改和RDMA写入操作。RDMA FetchOp工作队列元素能够支持几种读取-修改-写入操作,例如比较,如果相等则交换。RDMA FetchOp并不包括在当前的RDMA over IP标准化努力中,但是这里描述了RDMA FetchOp,因为在一些实现中,它可被用作增值特征。
绑定(解开)远程存取密钥(R_Key)工作队列元素向IP组卸载引擎硬件提供通过使存储窗与存储区联系(脱离联系),修改(破坏)存储窗的命令。R_Key是每个RDMA存取的一部分,被用于核实远程进程已被允许访问该缓冲区。
在一个实施例中,图4中所示的接收工作队列只支持一种工作队列元素(它被称为接收工作队列元素)。接收工作队列元素提供描述写入输入的发送消息的本地存储空间的通道语义操作。接收工作队列元素包括描述几个虚拟邻近的存储空间的分散列表。输入的发送消息被写入这些存储空间中。虚拟地址在产生本地队列对的进程的地址语境中。
对于处理器间通信来说,用户模式软件进程通过队列对直接从缓冲区存在于存储器中的地方传送数据。在一个实施例中,通过队列对的传送绕过了操作系统,消耗很少的主机指令周期。队列对允许零处理器-复制数据传送,而不涉及任何操作系统内核。零处理器-复制数据传送提供高带宽和低等待时间通信的有效支持。
当产生一个队列对时,该队列对被设置成提供造反类型的传送服务。在一个实施例中,实现本发明的一个优选实施例的分布式计算机系统支持三种传送服务TCP,SCTP和UDP。
TCP和SCTP使一个本地队列对与一个并且只与一个远程队列对相联系。TCP和SCTP需要一种进程来为TCP和SCTP将通过IP网架构与之通信的每个进程产生一个队列对。从而,如果N个主处理器节点中的每一个都包含P个进程,并且每个节点上的所有P个进程希望与所有其它节点上的所有进程通信,那么每个主处理器节点需要p2×(N-1)个队列对。此外,进程可使一个队列对与相同IPSOE上的另一队列对相联系。
图5中图解说明了采用TCP或SCTP在分布式进程之间通信的分布式计算机系统的一部分。图5中的分布式计算机系统500包括主处理器节点1,主处理器节点2和主处理器节点3。主处理器节点1包括进程A 510。主处理器节点3包括进程C 520和进程D 530。主处理器节点2包括进程E 540。
主处理器节点1包括队列对4、6和7,每个队列对具有一个发送工作队列和一个接收工作队列。主处理器节点2具有队列对9,主处理器节点3具有队列对2和5。分布式计算机系统500的TCP或SCTP使一个本地队列对与一个并且只与一个远程队列对相联系。从而队列对4被用于与队列对2通信;队列对7被用于与队列对5通信;队列对6被用于与队列对9通信。
放置在TCP或SCTP中的一个发送队列上的WQE使数据被写入由相关队列对的接收WQE引用的接收存储空间中。RDMA操作作用于相关队列对的地址空间。
在本发明的一个实施例中,由于硬件保持序列号并确认所有帧传送,因此使TCP或SCTP可靠。硬件和IP网驱动器软件的组合重试任何失败的通信。即使在存在位错误,接收欠载运行和网络拥塞,队列对的进程客户机仍能获得可靠的通信。如果在IP网架构中存在备用路径,即使存在交换机、链路或IP组卸载引擎端口,也能够保持可靠的通信。
另外,可采用确认在IP网架构内可靠地传送数据。确认可以是(或者可以不是)进程级确认,即证实接收进程已使用数据的确认。另一方面,确认可以是只指示数据已到达其目的地的确认。
用户数据报协议是无连接的。管理应用程序采用UDP来发现并把新的交换机、路由器和端节点结合到指定的分布式计算机系统中。UDP不提供TCP或SCTP的可靠性保证。因此,UDP在每个端节点保持较小状态信息的情况下工作。
现在参见图6,根据本发明的一个优选实施例描述了数据帧。数据帧是通过IP网架构发送的信息的单元。数据帧是一种端节点-端节点结构,从而由端节点产生和使用。对于以IPSOE为目的地的帧,数据帧既不由IP网架构中的交换机和路由器产生,也不由它们使用。代替以IPSOE为目的地的数据帧,通过修改进程中的链路报头字段,交换机和路由器只是把请求帧或确认帧移动到更接近于最终的目的地。当帧越过子网边界时,路由器可修改该帧的网络报头。在通过子网时,单一帧停留在单一服务级上。
消息数据600包含与图4中所示的数据段类似的数据段1 602、数据段2 604和数据段3 606。在本例中,这些数据段形成帧608,帧608被放入数据帧612内的帧有效负载610中。另外,数据帧612包含用于检错的循环冗余校验(CRC)614。另外,路由报头616和传送报头618存在于数据帧612中。路由报头616被用于为数据帧612识别源端口和目的地端口。本例中的传送报头618为数据帧612规定序列号和源端口号及目的地端口号。当建立通信时,序列号被初始化,并且对于帧报头、DDP/RDMA报头、数据有效负载和CRC的每个字节,序列号被加1。本例中的帧报头620规定与该帧相关的目的地队列对编号,和直接数据布置和/或远程直接存储器存取(DDP/RDMA)报头加上数据有效负载加入CRC的长度。DDP/RDMA报头622规定数据有效负载的消息标识符和布置信息。对于为消息一部分的所有帧来说,消息标识符是不变的。例证的消息标识符包括,例如发送、写RDMA和读RDMA。
在图7中,描述了一部分的分布式计算机系统,例如分布式计算机系统700,以便图解说明例证的请求和确认事务。图7中的分布式计算机系统700包括运行进程A 716的主处理器节点702和运行进程B 718的主处理器节点704。主处理器节点702包括IPSOE 706。主处理器节点704包括IPSOE 708。图7中的分布式计算机系统包括IP网架构710,IP网架构710包括交换机712和交换机714。IP网架构包括耦接IPSOE 706和交换机712的链路;耦接交换机712和交换机714的链路;和耦接IPSOE 708和交换机714的链路。
在该例证事务中,主处理器节点702包括客户机进程A。主处理器节点704包括客户机进程B。客户机进程A通过包括发送队列724和接收队列726的队列对23 720与主IPSOE交互作用。客户机进程B通过包括发送队列728和接收队列730的队列对24 722与主IPSOE708交换作用。队列对23和24是包括发送工作队列和接收工作队列的数据结构。
进程A通过向队列对23的发送队列公布工作队列元素,启动消息请求。图4中图解说明了这样的工作队列元素。客户机进程A的消息请求由包含在发送工作队列元素中的集中列表引用。集中列表中的每个数据段指向部分虚拟邻近的本地存储区,所述本地存储区包含一部分的消息,例如由图4中的分别保持消息部分1、2和3的数据段1、2和3指示的一部分消息。
主IPSOE 706中的硬件读取工作队列元素,并把保存在虚拟邻近的缓冲区中的消息分割成数据帧,例如图6中图解说明的数据帧。数据帧通过IP网架构被发送,并且对于可靠的传送服务来说,由最终的目的地端节点确认。如果未被成功确认,那么源端节点重发该数据帧。数据帧由源端节点产生,并由目的地端节点使用。
参见图8,根据本发明的一个优选实施例描述了在分布式连网系统中使用的网络寻址。主机名称提供主机节点,例如主处理器节点或I/O适配器节点的逻辑标识。主机名称识别消息的端节点,以致消息被指定给存在于由主机名称规定的端节点上的进程。从而,每个节点存在一个主机名称,但是一个节点可具有多个IPSOE。
单个链路层地址(例如以太网媒体访问层地址)804被分配给端节点组件802的每个端口806。组件可以是IPSOE、交换机或路由器。所有IPSOE和路由器组件必须具有一个MAC地址。交换机上的媒体访问点也被分配一个MAC地址。
一个网络地址(例如,IP地址)812被分配给端节点组件802的每个端口806。组件可以是IPSOE、交换机或路由器。所有IPSOE和路由器组件必须具有一个MAC地址。交换机上的媒体访问点也被分配一个MAC地址。
交换机810的每个端口不具有与之相联系的链路层地址。但是,交换机810可具有媒体访问端口814,媒体访问端口814具有与之相联系的链路层地址816和网络层地址808。
图9中图解说明了根据本发明的一个优选实施例的分布式计算机系统的一部分。分布式计算机系统900包括子网902和子网904。子网902包括端节点,例如主处理器节点906、908和910。子网904包括端节点,例如主处理器节点912和914。子网902包括交换机916和918。子网904包括交换机920和922。
路由器产生并连接子网。例如,子网902借助路由器924和926与子网904连接。在一个例证的实施例中,子网具有多达216个端节点、交换机和路由器。
子网被定义成作为单一单元管理的一组端节点和级联交换机。一般来说,子网占据单一的地理或功能区。例如,一个房间中的单一计算机系统可被定义成一个子网。在一个实施例中,子网中的交换机能够实现消息的非常快速的蠕虫洞或直通路由选择。
子网内的交换机检查在子网内唯一的目的地链路层地址(例如MAC地址),以允许交换机快速并且高效地发送输入的消息帧。在一个实施例中,交换机是相当简单的电路,并且通常被实现成单一集成电路。子网可具有由级联交换机形成的数百到数千个端节点。
如图9中所示,为了扩展到更大的系统,利用路由器,例如路由器924和926连接子网。路由器解释目的地网络层地址(例如IP地址),并发送帧。
图3B中图解说明了交换机的一个例证实施例。交换机或路由器上的每个I/O路径具有一个端口。一般来说,交换机能够把帧从一个端口发送到相同交换机上的任意其它端口。在诸如子网902或子网904之类的子网内,从源端口到目的地端口的路径由目的地主IPSOE端口的链路层地址(例如MAC地址)确定。在子网之间,路径由目的地IPSOE端口的网络层地址(IP地址),以及由路由器端口的链路层地址(例如MAC地址)确定,它将被用于到达目的地的子网。
在一个实施例中,不要求请求帧和请求帧的对应的肯定确认(ACK)帧使用的路径是对称的。在采用茫然路由选择的一个实施例中,交换机根据链路层地址(例如MAC地址)选择输出端口。在一个实施例中,交换机对交换机中它的所有输入端口使用一组路由选择判断标准。在一个例证实施例中,路由选择判断标准包含在一个路由选择表中。在一个备选实施例中,交换机对每个输入端口使用独立的一组标准。
本发明的一个优选实施例的分布式计算机系统中的数据事务一般由几个硬件和软件步骤组成。客户机进程数据传送服务可以是用户模式或内核模式进程。客户机进程通过一个或多个队列对,例如图3A、5和8中图解说明的队列对,访问IP组卸载引擎硬件。客户机进程调用操作系统专用编程接口(这里它被称为“动词”(verbs))。实现动词的软件代码向指定的队列对工作队列公布工作队列元素。
存在公布工作队列元素的许多种可能方法,并且存在许多可能的工作队列元素格式,所述工作队列元素格式允许各种成本/性能设计要点,但是不影响互操作性。但是,用户进程必须按照良好定义的方式与动词通信,跨越IP网架构传送的数据的格式和协议必须被充分规定,以允许设备在异类的厂商环境中互操作。
在一个实施例中,IPSOE硬件检测工作队列元素位置,并访问工作队列元素。在该实施例中,IPSOE硬件转换并确认工作队列元素的虚拟地址,并访问数据。
输出消息被分成一个或多个数据帧。在一个实施例中,IPSOE硬件向每个帧添加一个DDP/RDMA报头,帧报头和CRC,传送报头和网络报头。传送报头包括序列号和其它传送信息。网络报头包括路由信息,例如目的地IP地址和其它网络路由信息。链路报头包含目的地链路层地址(例如MAC地址)或其它本地路由信息。
如果采用TCP或SCTP,那么当请求数据帧到达其目的地端节点时,目的地端节点使用确认数据帧使请求数据帧发送者知道请求数据帧在目的地被证实并被接受。确认数据帧确认一个或多个有效并且接受的请求数据帧。在接收任意确认之前,请求者可具有多个要发的请求数据帧。在一个实施例中,当产生队列对时,确定多个要发的消息,即请求数据帧的数目。
图10中图解说明了用于实现本发明的一个优选实施例的分层体系结构1000的一个实施例。图10的分层体系结构图表示数据通信路径的不同层,以及在各层之间传送的数据和控制信息的组织。
IPSOE端节点协议层(例如由端节点1011采用)包括由消费者1003定义的高级协议1002,传送层1004,网络层1006,链路层1008和物理层1010。交换器层(例如由交换机1013采用)包括链路层1008和物理层1010。路由器层(例如由路由器1015采用)包括网络层1016,链路层1008和物理层1010。
分层体系结构1000一般遵循典型的通信堆栈的概要,以便完成在消费者1003和1005之间传送数据的消费者操作1012。例如就端节点1011的协议层来说,高级协议1002采用动词在传送层1004产生消息。传送层1004把消息1014传递给网络层1006。网络层1006在网络子网1016之间发送帧。链路层1008在网络子网1018内发送帧。物理层1000把位或位组发送给其它设备的物理层。各层都不知道上一层或下一层如何实现它们的功能。
消费者1003和1005代表把其它层用于端节点之间的通信的应用程序或进程。传送层1004提供端对端消息移动。在一个实施例中,传送层提供如上所述的四种传送服务,它们是传统的TCP、RDMA overTCP、SCTP和UDP。网络层1006执行通过一个子网或多个子网到目的地端节点的帧路由选择。链路层1008执行流控制1020,检错和跨越链路的优先化帧传递。
物理层1010执行依赖于技术的位传输。通过链路1022、1024和1026,在物理层之间传递位或位组。可用印刷电路铜迹线,铜缆,光缆,或者利用其它恰当的链路实现链路。参见图11,根据本发明的一个例证实施例描述了与主机软件的RNIC接口。动词消费者1156通过动词1152和动词驱动器与程序库1148访问主RNIC 1100和备用RNIC 1104。动词消费者1156通过分别调用RNIC管理查询动词1124和1136,确定主NRIC 1100和备用RNIC 1104支持切换/切回(S/S)。RNIC管理查询动词返回RNIC权能,在本例证实施例中,RNIC权能包括一个指示RNIC支持切换/切回(S/S)的字段。动词消费者1156随后使用RNIC管理修改动词1124和1136把一批队列对(QP),完成队列(CQ)及存储器转换和保护表(TPT)条目分配给S/S和非S/S支持。作为成功完成RNIC修改动词的结果,主RNIC 1100和备用RNIC 1104共享共同的QP、CQ和存储器TPT范围。
动词消费者1156利用产生CQ动词产生一个CQ,产生CQ动词选择CQ是将支持S/S,例如CQ 1176和1180,还是不支持S/S,例如QP 1168和1188。如果动词消费者选择S/S支持,那么产生CQ动词包括识别主RNIC,主RNIC端口,备用RNIC和备用RNIC端口的额外修改量。RNIC标识符可以是EUI-64位标识符。端口标识符可以是端口号。另一种备选方案可以是使用RNIC的MAC地址来识别RNIC和端口。如果动词消费者选择S/S支持,那么RNIC和端口标识符被放入CQ语境1110和1118。如果动词消费者不选择S/S支持,那么RNIC和端口标识符不被放入CQ语境1106和1122。
动词消费者1156利用寄存器存储区动词之一(例如寄存器存储区,寄存器共享存储区,寄存器物理存储区)记录存储区,寄存器存储区动词选择存储区是将支持S/S,例如存储区1128和1132,还是不支持S/S,例如存储区1194和1196。如果动词消费者选择S/S支持,那么寄存器存储区动词包括识别主RNIC,主RNIC端口,备用RNIC和备用RNIC端口的额外修改量。RNIC标识符可以是EUI-64位标识符。端口标识符可以是端口号。另一种备选方案可以是使用RNIC的MAC地址来识别RNIC和端口。如果动词消费者选择S/S支持,那么RNIC和端口标识符可被放入存储区的存储器转换和保护表(TPT)条目1128和1132中。如果动词消费者不选择S/S支持,那么RNIC和端口标识符不被放入存储区的存储器TPT条目1194和1196中。
动词消费者1156利用产生QP动词产生一个QP,产生QP动词选择QP是将支持S/S,例如QP 1172和1184,还是不支持S/S,例如QP 1164和1192。如果动词消费者选择S/S支持,那么产生QP动词包括识别主RNIC,主RNIC端口,备用RNIC和备用RNIC端口的额外修改量。RNIC标识符可以是EUI-64位标识符。端口标识符可以是端口号。另一种备选方案可以是使用RNIC的MAC地址来识别RNIC和端口。如果动词消费者选择S/S支持,那么RNIC和端口标识符被放入QP语境1112和1116。如果动词消费者不选择S/S支持,那么RNIC和端口标识符不被放入QP语境1108和1120。
当例如在由于停机而发生的切换之后,S/S QP在不存在替代物的情况下工作时,动词消费者1156使用修改QP动词使S/S QP,例如QP 1172和1184停顿,并且重新向备用RNIC分配相同的QP号。修改QP动词包括识别主RNIC,主RNIC端口,备用RNIC和备用RNIC端口的修改量。RNIC标识符可以是EUI-64位标识符。端口标识符可以是端口号。另一种备选方案可以是使用RNIC的MAC地址来识别RNIC和端口。RNIC和端口标识符被放入QP语境1112和1116。
当例如在由于停机而发生的切换之后,S/S RNIC在不存在替代物的情况下工作时,借助备用RNIC,动词消费者1156使用ResyncRegistration动词记录所有的存储器TPT条目,例如1128。
在与在不存在替代物的情况下工作的指定S/S CQ相产的所有S/S QP已被停顿之后,动词消费者1156使用修改CQ动词使S/S CQ,例如CQ 1176和1180停顿,并且重新向备用RNIC分配相同的CQ号。修改CQ动词包括识别主RNIC,主RNIC端口,备用RNIC和备用RNIC端口的修改量。RNIC标识符可以是EUI-64位标识符。端口标识符可以是端口号。另一种备选方案可以是使用RNIC的MAC地址来识别RNIC和端口。RNIC和端口标识符被放入CQ语境1110和1118。
在S/S CQ已被停顿之后,使用修改CQ动词使CQ处于激活状态(例如使用就绪状态),对于与CQ相关的每个S/S QP,使用修改QP动词使QP处于激活状态(例如发送就绪状态)。
参见图12,提供了根据本发明的一个优选实施例,图解说明与两个RNIC保持的切换和切回相关的例证连接状态的图。在优选实施例中,每个主RNIC、备用RNIC或单一RNIC保持图12中所示的状态信息。状态信息可保持在例如RNIC内,RNIC可访问的主机存储单元中,这两者的组合中等等。。图12表示了状态信息保持在RNIC内的例证情况。
每个RNIC QP,例如QP 1172具有QP语境表(QPCT),例如QPCT 1200中的一个QP语境条目,例如QPCE0 1204,QPCE1 1208和QPCEN 1212。通过QP语境表寄存器,例如QPCT寄存器1244访问QPCT 1200,QP语境表寄存器包含QPCT的地址,例如QPCT地址1248,和QPCT的长度,例如QPCT长度1252。QP语境表1200中的每个条目具有固定的大小,不过也可使用具有大小可变的QPCT条目的QPCT。QPCT中的每个条目包含与关于该条目索引的QP号相关的有关语境信息。例如,QPCE N 1212包含与QP号N相关的QP状态信息。QP号N的状态包括传统的QP语境状态,例如传统QP语境状态1220,工作SQ切换/切回语境状态,例如工作SQ切换/切回语境1224,提交的SQ切换/切回语境状态,例如提交的SQ切换/切回语境1228,工作RQ切换/切回语境状态,例如工作RQ切换/切回语境1232,提交的RQ切换/切回语境状态,例如提交的RQ切换/切回语境1236,和主RNIC与备用RNIC标识语境状态,例如主RNIC与备用RNIC标识语境1240。
传统的QP语境状态1220包含公知的QP语境状态信息,例如QP的状态,与QP相关的服务的类型,与QP相关的TCP源端口号和目的地端口号,与QP相关的IP源地址和目的地地址。
工作SQ切换/切回语境1224包含当产生QP时被设置为0的下述信息



所有提交SQ切换/切回字段包含已由备用RNIC通过检查点ACK设置检查点的信息。主RNIC和备用RNIC包含所有这些字段。“提交的当前发送WQE号”识别已被设置检查点,目前正在发送队列中被处理的WQE。“当前发送WQE中的提交字节偏移量”识别对于提交的当前发送WQE要设置检查点的下一字节。“下一发送TCP段的提交序列号”识别将用于当前发送WQE中的提交字节偏移量的TCP序列号。“下一发送TCP段的提交窗口值”识别从当前发送WQE中的提交字节偏移量开始的,可用于要发送的下一TCP段的TCP窗口的大小。“提交的当前接收Ack WQE号”识别已由远程节点确认的,在发送队列中被设置检查点的最新WQE。“当前接收Ack WQE中的提交字节偏移量”识别对于提交的当前接收ACK WQE,要由远程节点确认的下一字节。“下一Rcv Ack TCP段的提交序列号”识别远程节点预期的,并且与当前接收Ack WQE中的提交字节偏移量相联系的下一TCP序列号。“下一Rcv Ack TCP段的提交窗口值”识别由从远程节点回送的最后的TCP窗口大小得到的,并且与当前接收Ack WQE中的提交字节偏移量相联系的发送窗口中的变化。
工作RQ切换/切回语境1232包含当产生QP时被设置为0的下述信息。

所有工作RQ切换/切回字段包含还未由备用RNIC通过检查点ACK设置检查点的信息。主RNIC和备用RNIC包含所有这些字段。“工作的当前接收WQE号”识别接收队列中目前正被处理的WQE。“当前接收WQE中的工作字节偏移量”识别对于工作的当前接收WQE要处理的下一字节。“下一接收TCP段的工作序列号”识别对于当前接收WQE中的工作字节偏移量预期的TCP序列号。“下一接收TCP段的工作窗口值”识别从当前接收WQE中的工作字节偏移量开始的,可用于要接收的下一TCP段的TCP窗口的大小。“工作的当前发送Ack WQE号”识别接收队列中关于其已向远程节点发送确认的目前正被处理的WQE。“当前发送Ack WQE中的工作字节偏移量”识别对于工作的当前发送ACK WQE,将向远程节点确认的下一字节。“下一发送Ack TCP段的工作序列号”识别将被发送给远程节点,并且与当前发送Ack WQE中的工作字节偏移量相联系的下一TCP序列号。“下一发送Ack TCP段的工作窗口值”识别要被发送给远程节点,并且与当前发送Ack WQE中的工作字节偏移量相联系的下一TCP窗口的大小。
提交RQ切换/切回语境1236包含当产生QP时被设置为0的下述信息。

所有提交RQ切换/切回字段包含还未由备用RNIC通过检查点ACK设置检查点的信息。主RNIC和备用RNIC包含所有这些字段。“提交的当前接收WQE号”识别已被设置检查点,目前在接收队列中正被处理的最新WQE。“当前接收WQE中的提交字节偏移量”识别对于提交的当前接收WQE要处理的下一字节。“下一接收TCP段的提交序列号”识别对于当前接收WQE中的提交字节偏移量预期的TCP序列号。“下一接收TCP段的提交窗口值”识别从当前接收WQE中的提交字节偏移量开始的,可用于要接收的下一TCP段的TCP窗口的大小。“提交的当前发送Ack WQE号”识别接收队列中关于其已向远程节点发送确认的已被设置检查点的最新WQE。“当前发送Ack WQE中的提交字节偏移量”识别对于提交的当前发送ACK WQE,将向远程节点确认的下一字节。“下一发送Ack TCP段的提交序列号”识别将被发送给远程节点,并且与当前发送Ack WQE中的提交字节偏移量相联系的下一TCP序列号。“下一发送Ack TCP段的提交窗口值”识别要被发送给远程节点,并且与当前发送Ack WQE中的提交字节偏移量相联系的下一TCP窗口的大小。
主RNIC和备用RNIC标识语境1240包含下述信息。

当产生QP时,RNIC切换/切回(S/S)状态作为产生QP动词的输入修改量被传递。如果RNIC S/S状态为0,那么QP使S/S被禁用,只有主字段有效。如果RNIC S/S不为0,那么QP使S/S被启用,主字段和备用字段都有效。
主RNIC标识符被用于唯一地识别主RNIC。例如,RNIC标识符可以是RNIC的EIU-64值。主RNIC端口标识符被用于唯一地识别主RNIC上,QP与之相联系的端口。例如,RNIC端口标识符可以是端口号,或者MAC和IP地址的组合。备用RNIC标识符被用于唯一地识别备用RNIC。备用RNIC端口标识符被用于唯一地识别备用RNIC上,QP与之相联系的端口。
每个RNIC CQ,例如QP 1176具有CQ语境表(CQCT),例如CQCT 1252中的一个CQ语境条目,例如CQCE0 1256,CQCE11260和CQCEN 1264。通过CQ语境表寄存器,例如CQCT寄存器1284访问CQCT,CQ语境表寄存器包含CQCT的地址,例如CQCT地址1288,和CQCT的长度,例如CQCT长度1292。QP语境表中的每个条目具有固定的大小,不过也可使用具有大小可变的CQCT条目的CQCT。CQCT中的每个条目包含与关于该条目索引的CQ号相关的有关语境信息。例如,CQCE N 1264包含与CQ号N相关的所有QP状态。CQ号N的状态包括传统的CQ语境状态,例如传统QP语境状态1268,工作CQ切换/切回语境状态,例如工作CQ切换/切回语境1272,提交的CQ切换/切回语境状态,例如提交的CQ切换/切回语境1276,和主RNIC与备用RNIC标识语境状态,例如主RNIC与备用RNIC标识语境1280。
传统的CQ语境状态1268包含公知的CQ语境状态信息,例如CQ的状态和CQ中的条目的总数。
工作CQ切换/切回语境1272包含当产生QP时被设置为0的下述信息

工作CQ切换/切回字段包含还未由备用RNIC通过检查点ACK设置检查点的信息。主RNIC和备用RNIC包含所有这些字段。“工作的当前完成CQE号”识别完成队列中目前正被处理的CQE。
提交CQ切换/切回语境1272包含当产生QP时被设置为0的下述信息

提交CQ切换/切回字段包含已由备用RNIC通过检查点ACK设置检查点的信息。主RNIC和备用RNIC包含所有这些字段。“工作的当前完成CQE号”识别已被设置检查点,并且目前在完成队列中正被处理的CQE。
主RNIC和备用RNIC标识语境1280包含下述信息。

当产生QP时,RNIC切换/切回(S/S)状态作为产生QP动词的输入修改量被传递。如果RNIC S/S状态为0,那么CQ使S/S被禁用,只有主字段有效。这种情况下,只有具有S/S被禁用的RNIC的QP才能与CQ相联系。
如果RNIC S/S不为0,那么CQ使S/S被启用,主字段和备用字段都有效。这种情况下,只有具有匹配的主RNIC和备用RNIC的QP才能够与CQ相联系。
主RNIC标识符被用于唯一地识别主RNIC。例如,RNIC标识符可以是RNIC的EIU-64值。主RNIC端口标识符被用于唯一地识别主RNIC上,CQ与之相联系的端口。例如,RNIC端口标识符可以是端口号,或者MAC和IP地址的组合。备用RNIC标识符被用于唯一地识别备用RNIC。备用RNIC端口标识符被用于唯一地识别备用RNIC上,CQ与之相联系的端口。
参见图13A,提供根据本发明的一个优选实施例,图解说明跨越两个RNIC的连接的例证初始化进程的流程图。如图13A中所示,操作开始于RNIC的询问,以确定它们是否支持切换/切回(步骤1302)。该步骤既询问将被选为主RNIC的RNIC,又询问将被选为备用RNIC的RNIC。对于支持S/S,并且主机打算将其配置成S/S RNIC的每个RNIC,主机发出修改RNIC动词(步骤1304)。修改RNIC动词选择将关于S/S和非S/S配置的QP号的范围,CQ号的范围和存储器转换与保护表条目的范围。
对于产生的每个CQ,主机发出产生CQ动词(步骤1306)。产生CQ动词规定与CQ相关的主RNIC,主RNIC端口,备用RNIC和备用RNIC端口。对于通过寄存器存储区动词之一记录的每个存储区,主机规定与该存储器相关的主RNIC,主RNIC端口,备用RNIC和备用RNIC端口(步骤1308)。
对于产生的每个QP,主机发出产生QP动词(步骤1310)。产生QP动词规定与QP相关的RNIC状态(主或备用),主RNIC,主RNIC端口,备用RNIC和备用RNIC端口。
对于通过分配存储窗动词分配的每个存储窗(步骤1312),主机规定与该存储窗相关的主RNIC,主RNIC端口,备用RNIC和备用RNIC端口。从而,两个RNIC,即主RNIC和备用RNIC之间的连接被初始化。
图13B是根据本发明的一个优选实施例,跨越两个RNIC的连接的例证重新同步进程的流程图。重新同步进程被用于把备用RNIC分配给主RNIC上已被配置成S/S QP的QP,所述主RNIC已被配置成支持S/S,但是正在没有备用RNIC的情况下工作。
如图13B中所示,操作开始于主RNIC的询问,以确定将关于S/S和非S/S配置的QP号的范围,CQ号的范围,以及存储器转换和保护表条目的范围(步骤1320)。备用RNIC也被询问,以确定它是否支持切换/切回(也是步骤1320的一部分)。如果是,那么操作进行到步骤1322;否则,操作被终止。
在步骤1322中,主机向备用RNIC发出修改RNIC动词,并选择将关于S/S和非S/S配置的QP号的范围,CQ号的范围,以及存储器转换和保护表条目的范围(步骤1322)。对于将在备用RNIC上产生的每个CQ,主机发出产生CQ动词(步骤1324)。产生CQ动词规定与该CQ相联系的主RNIC,主RNIC端口,备用RNIC,和备用RNIC端口。
对于将在主RNIC和备用RNIC之间共享的每个存储区,主机使用寄存器共享存储器动词登记备用RNIC上的所有共享存储区(步骤1326)。通过寄存器存储区动词之一进行登记,主机规定与存储区相关的主RNIC,主RNIC端口,备用RNIC,和备用RNIC端口。
对于在备用RNIC上产生的每个QP,主机发出产生QP动词(步骤1328)。产生QP动词规定与该QP相关的RNIC状态(备用),主RNIC,主RNIC端口,备用RNIC,和备用RNIC端口。对于通过分配存储窗动词分配的每个存储窗,主机规定与该存储窗相关的主RNIC,主RNIC端口,备用RNIC,和备用RNIC端口(步骤1330)。
对于将在主RNIC上重新同步的每个QP,主机发出修改QP动词,使QP停顿并向该QP分配RNIC状态(主要的);主RNIC和端口;和备用RNIC和端口(步骤1332)。对于将在主RNIC上重新同步的每个CQ,在使分配给该CQ的所有QP停顿之后,主机发出修改CQ动词,使该CQ停顿并向该CQ分配RNIC状态(主要的);主RNIC和端口;和备用RNIC和端口(步骤1334)。
对于将在主RNIC上重新同步的每个CQ,主机发出修改CQ动词,使CQ恢复活动(步骤1336)。对于需要在主RNIC上重新同步的每个QP,主机发出修改QP动词,使该QP恢复活动(步骤1338)。
参见图13C,提供了根据本发明的一个优选实施例,图解说明主RNIC和备用RNIC之间使用的例证检查点消息的示意图。根据图11,主RNIC 1100和备用RNIC 1104使用检查点消息1106传递RNIC和QP状态。可直接通过互连主RNIC和备用RNIC的架构传递检查点消息。也可通过例如主RNIC和备用RNIC都可访问的共享系统存储区,间接传递检查点消息。
图11表示通过互连主RNIC和备用RNIC的架构直接发送检查点消息的例证情况。所述架构可以是局域网,可通过一个或多个TCP连接发送所述消息。架构也可是存储变换的I/O扩展网络,例如PCI、PCI-X或PCI-Express。最后,所述架构可以是系统区域网,例如InfiniBand。图11表示架构是局域网的例证情况。
图13C表示所有检查点消息,例如检查点消息1340之间的公共字段。所有检查点消息的第一字段是操作码,例如OpCode 1344,它描述包括在该消息中的检查点信息的类型。该消息的下一字段是长度,例如长度1348,它用字节描述消息长度。该消息的最后字段是公知的iSCSI,32位循环冗余校验(CRC32),例如CRC32 1352,被用于验证消息。每个消息定义在长度1348和CRC32 1352之间携带的字段。OpCode和长度字段的大小可以小于或大于所描述的OpCode和长度字段的大小。使用的CRC多项式可不同于图解说明的那个CRC多项式。
下表定义检查点进程使用的消息类型,接下来的部分描述检查点进程,包括检查点消息的内容。每个OpCode和长度的值可不同于下表中所示的值,而不脱离本发明的精神。

参见图14,提供了根据本发明的一个优选实施例,图解说明两个RNIC使用的例证发送检查点消息流和进程的示意图。RNIC通过使用QP WQE处理算法,寻找与出站TCP段相联系的QP语境。下面是用于对从QP语境1412的SQ 1408发送的出站TCP段设置检查点的检查点消息流。
假定SQ 1408具有准备用于出站调度的TCP段。主RNIC 1404更新它的工作SQ S/S语境1224的本地副本的下述四个字段


11负型液晶(negative type liquid crystal),Merck,德国12手性化合物,Merck,德国13负型液晶,Merck,德国将组合物填充到拥有两片玻璃基片的单元中,在玻璃基片的内表面上涂覆有氧化铟锡。(在实施例5I中,采用聚酰亚胺处理导电的ITO层)。玻璃基片被20微米的隔离物分开。施加50-80伏特的电场(方波波形或正弦波波形)约1秒以驱动面板。采用60Hz的频率使单元转换到散射状态。需要高于阈值频率的频率使单元转换到光学透明状<p>在本地QP语境中更新了上述四个字段之后,备用RNIC 1480把更新提交SQ S/S语境发送消息1424发送给主RNIC 1404。OpCode1454被设置成x0003,更新提交SQ S/S语境发送消息1424。长度被设置成x0004,即,更新提交SQ S/S语境发送消息的长度。该长度之后的五个字段被如下设置

主RNIC 1404接收更新提交SQ S/S语境发送消息1424,并验证该消息。如果提交SQ S/S语境发送消息1424有效,例如CRC32有效,那么主RNIC 1404用提交SQ S/S语境消息1424的内容更新它的提交SQ S/S语境的本地副本。即,它更新其提交SQ S/S语境1228的下述四个字段

SQ 1408把TCP段放入出站调度器中,下一次发送来自SQ 1408的TCP段时,调度器发送1400 TCP段。
如果更新提交SQ S/S语境发送消息1424无效,或者如果在检查点超时窗口内没有收到它,那么主RNIC 1404将重发更新提交SQ S/S语境发送消息1424,直到达到检查点重试次数规定的次数为止。如果备用RNIC 1480收到重复的更新工作SQ S/S语境发送消息1416,那么它将重发在前的更新提交SQ S/S语境发送消息1424。此时,出站发送已被设置检查点。
现在,说明当TCP ACK段被主RNIC 1404接收,并且与QP语境1412的SQ 1408相联系时,使用的检查点消息。首先,在中速匹配缓冲区中接收输入的TCP ACK段。如果TCP ACK段无效,那么丢弃它。如果TCP ACK段有效,那么主RNIC 1404更新它的工作SQS/S语境1224的本地副本的下述四个字段。

在本地QP语境中更新了上述四个字段之后,主RNIC 1404向备用RNIC 1480发送更新工作SQ S/S语境Ack消息1432。OpCode 1454被设置成x0004,即,更新工作SQ S/S语境Ack消息1432。长度被设置成x0004,即,更新工作SQ S/S语境Ack消息的长度。该长度之后的五个字段被如下设置

备用RNIC 1480接收更新工作SQ S/S语境Ack消息1432并验证该消息。如果工作SQ S/S语境消息1416有效,例如CRC32有效,那么备用RNIC 1480利用工作SQ S/S语境Ack消息1432的内容更新它的工作SQ S/S语境1224的本地副本。备用RNIC 1480上工作SQ S/S语境1224的本地副本的更新将更新工作SQ S/S语境1224的下述四个字段

备用RNIC 1480随后把它的工作SQ S/S语境1224的本地副本复制到它的提交SQ S/S语境1228的本地副本。在备用RNIC 1480上,提交SQ S/S语境1228的下述四个字段被更新

在本地QP语境中更新了上述四个字段之后,备用RNIC 1480向主RNIC 1404发送更新提交SQ S/S语境Ack消息1436。OpCode1454被设置成x0005,即,更新提交SQ S/S语境Ack消息1436。长度被设置成x0004,即,更新提交SQ S/S语境Ack消息的长度。该长度之后的五个字段被如下设置

主RNIC 1404接收更新提交SQ S/S语境Ack消息1436并验证该消息。如果提交SQ S/S语境Ack消息1436有效,例如CRC32有效,那么主RNIC 1404利用提交SQ S/S语境Ack消息1436的内容更新它的提交SQ S/S语境的本地副本。即,它更新其工作SQ S/S语境的下述四个字段

如果更新提交SQ S/S语境Ack消息1436无效,或者如果在检查点超时窗口内没有收到它,那么主RNIC 1404将重发更新提交SQ S/S语境Ack消息1436,直到达到检查点重试次数规定的次数为止。如果备用RNIC 1480收到重复的更新工作SQ S/S语境Ack消息1432,那么它将重发在前的更新提交SQ S/S语境Ack消息1436。此时,输入的Ack已被设置检查点。
参见图15,提供了根据本发明的一个优选实施例,图解说明由两个RNIC使用的例证接收检查点消息流和进程的示意图。RNIC通过使用公知的TCP/IP五倍查寻算法,寻找与入站TCP段相联系的QP语境。当收到入站TCP段时,使用TCP/IP五倍查寻来确定与入站TCP段相联系的QP。
下面是当入站TCP段以QP语境1512的RQ 1508为目标时,使用的例证检查点消息流。在中速匹配缓冲区中接收入站TCP段。如果TCP段有效,那么它被放入最终的目的地;否则它被丢弃。
在TCP段被置入其最终目的地之后,主RNIC 1504更新它的工作RQ S/S语境1232的本地副本的下述四个字段

在本地QP语境中更新了上述四个字段之后,主RNIC 1504向备用RNIC 1580发送更新工作RQ S/S语境接收消息1516。OpCode15454被设置成x0006,即,更新工作RQ S/S语境接收消息1516。长度被设置成x0004,即,更新工作RQ S/S语境接收消息的长度。该长度之后的五个字段被如下设置

备用RNIC 1580接收更新工作RQ S/S语境接收消息1516,并验证该消息。如果更新工作RQ S/S语境接收消息1516有效,例如CRC321562有效,那么备用RNIC 1580用更新工作RQ S/S语境接收消息1516的内容更新它的工作RQ S/S语境1232的本地副本。备用RNIC1580上的工作SQ S/S语境1232的本地副本的更新将更新工作SQ S/S语境1232的下述四个字段

备用RNIC 1580随后把它的工作RQ S/S语境1232的本地副本复制到它的提交RQ S/S语境1236的本地副本。在备用RNIC 1580上,提交RQ S/S语境1236的下述四个字段被更新

在本地QP语境中更新了上述四个字段之后,备用RNIC 1580把更新提交SQ S/S语境接收消息1524发送给主RNIC 1504。OpCode1554被设置成x0007,即,更新提交RQ S/S语境接收消息1524。长度被设置成x0004,即,更新提交RQ S/S语境接收消息的长度。该长度之后的五个字段被如下设置

主RNIC 1504接收更新提交RQ S/S语境接收消息1524,并验证该消息。如果提交RQ S/S语境接收消息1424有效,例如CRC32有效,那么主RNIC 1404用提交RQ S/S语境接收消息1524的内容更新它的提交RQ S/S语境1236的本地副本。即,它更新其提交RQ S/S语境1236的下述四个字段


如果更新提交RQ S/S语境接收消息1524无效,或者如果在检查点超时窗口内没有收到它,那么主RNIC 1504将重发更新提交RQ S/S语境接收消息1524,直到达到检查点重试次数规定的次数为止。如果备用RNIC 1580收到重复的更新工作RQ S/S语境接收消息1516,那么它将重发在前的更新提交RQ S/S语境接收消息1524。此时,入站发送已被设置检查点。
下面说明当TCP ACK段从主RNIC 1504发送,并且与QP语境1512的RQ 1508相联系时,使用的例证检查点消息。主RNIC 1504更新它的工作RQ S/S语境1232的本地副本的下述四个字段。

在本地QP语境中更新了上述四个字段之后,主RNIC 1504向备用RNIC 1580发送更新工作RQ S/S语境Ack消息1532。OpCode 1554被设置成x0008,即,更新工作RQ S/S语境Ack消息1532。长度被设置成x0004,即,更新工作RQ S/S语境Ack消息的长度。该长度之后的五个字段被如下设置

备用RNIC 1580接收更新工作RQ S/S语境Ack消息1532并验证该消息。如果工作RQ S/S语境Ack消息1532有效,例如CRC32有效,那么备用RNIC 1580利用工作RQ S/S语境Ack消息1532的

所有工作SQ切换/切回字段包含还未由备用RNIC通过检查点ACK设置检查点(checkpointed)的信息。主RNIC和备用RNIC包含所有这些字段。“工作的当前发送WQE号”识别发送队列中目前正被处理的WQE。“当前发送WQE中的工作字节偏移量”识别对于工作的当前发送WQE要处理的下一字节。“下一发送TCP段的工作序列号”识别将用于当前发送WQE中的工作字节偏移量的TCP序列号。“下一发送TCP段的工作窗口值”识别从当前发送WQE中的工作字节偏移量开始的,可用于要发送的下一TCP段的TCP窗口的大小。“工作的当前接收Ack WQE号”识别已由远程节点确认的,发送队列中目前正被处理的WQE。“当前接收Ack WQE中的工作字节偏移量”识别对于工作的当前接收ACK WQE,要由远程节点确认的下一字节。“下一Rcv Ack TCP段的工作序列号”识别远程节点预期的,并且与当前接收Ack WQE中的工作字节偏移量相联系的下一TCP序列号。“下一Rcv Ack TCP段的工作窗口值”识别由从远程节点回送的最后的TCP窗口大小得到的,并且与当前接收Ack WQE中的工作字节偏移量相联系的发送窗口中的变化。
提交的SQ切换/切回语境1228包含当产生QP时,被设置为0的下述信息


如果更新提交RQ S/S语境Ack消息1536无效,或者如果在检查点超时窗口内没有收到它,那么主RNIC 1504将重发更新提交RQS/S语境Ack消息1536,直到达到检查点重试次数规定的次数为止。如果备用RNIC 1580收到重复的更新工作RQ S/S语境Ack消息1532,那么它将重发在前的更新提交RQ S/S语境Ack消息1536。此时,出站Ack已被设置检查点。
参见图16,提供了根据本发明的一个优选实施例,图解说明由两个RNIC使用的例证完成检查点工作流和进程的示意图。RNIC通过利用公知的QP WQE处理算法寻找与已完成的工作队列元素相联系的CQ语境,并利用公知的CQ CQE处理算法产生CQE。
下面是用于由RNIC 1604对加入暴露给主机的CQ 1608中的完成队列元素设置检查点的检查点消息流。假定CQ 1608具有准备插入CQ 1608的CQE。CQ 1608把该CQE插入CQ 1608,并更新它的工作CQ S/S语境1272的本地副本的下述字段。

在本地CQ语境中更新了上述字段之后,主RNIC 1604把更新工作CQ S/S语境消息1616发送给备用RNIC 1680。OpCode 1654被设置成x000A,即,更新工作CQ S/S语境消息1616。长度被设置成x0004,即,更新工作CQ S/S语境消息的长度。该长度之后的两个字段被如下设置

备用RNIC 1680接收更新工作CQ S/S语境消息1616,并验证该消息。如果更新工作CQ S/S语境消息1616有效,例如CRC32 1662有效,那么备用RNIC 1680用工作CQ S/S语境消息1516的内容更新它的工作CQ S/S语境1272的本地副本。备用RNIC 1680上工作CQS/S语境1272的本地副本的更新会更新工作CQ S/S语境1272的下述字段

备用RNIC 1680随后把它的工作CQ S/S语境1624的本地副本复制到它的提交CQ S/S语境1276的本地副本。提交CQ S/S语境1276的下述字段在备用RNIC 1680上被更新

在本地QP语境中更新了上述字段之后,备用RNIC 1680把更新提交CQ S/S语境消息1624发送给主RNIC 1604。OpCode 1654被设置成x000B,即,更新提交CQ S/S语境消息1624。长度被设置成x0004,即,更新提交CQ S/S语境消息的长度。该长度之后的两个字段被如下设置

主RNIC 1604接收更新提交CQ S/S语境消息1624并验证该消息。如果提交CQ S/S语境消息1624有效,例如CRC32有效,那么主RNIC 1604用提交CQ S/S语境消息1624的内容更新它的提交CQS/S语境1276的本地副本。即,它更新其的提交CQ S/S语境1276的下述字段

如果更新提交CQ S/S语境消息1624无效,或者如果在检查点超时窗口内没有收到它,那么主RNIC 1604将重发更新提交CQ S/S语境消息1624,直到达到检查点重试次数规定的次数为止。如果备用RNIC 1680收到重复的更新工作CQ S/S语境消息1616,那么它将重发在前的更新提交CQ S/S语境消息1624。此时,CQE已被设置检查点。
参见图17,图17是根据本发明的一个优选实施例,图解说明由两个RNIC使用的主RNIC到备用RNIC切换消息流和进程的示意图。主RNIC,例如主RNIC 1700,和备用RNIC,例如备用RNIC 1796每N个时间周期发出“I Am Alive”检查点消息,例如“I Am AliVe”检查点消息1704和1772,这里N是可通过询问RNIC动词询问,并可通过修改RNIC动词修改的可编程RNIC属性。
下面是用于从主RNIC 1700切换到备用RNIC 1796的例证切换消息流。首先,备用RNIC 1796设置“I Am Alive”递减计时器。如果在“I Am Alive”递减计时器期满之前,备用RNIC 1796收到“I AmAlive”消息1704,那么该计时器被重置。“I Am Alive”消息使OpCode1754被设置成x0000,即,“I Am Alive”消息1704和1750。长度被设置成x0003,即,“I Am Alive”消息的长度。该长度之后的三个字段被如下设置

对于多端口RNIC,“I Am Alive”消息可被实现成传送长度字段之后的数目可变的字段,例如下述字段(这里N是RNIC支持的端口的最大数目)

如果在“I Am Alive”递减计时器期满之前,备用RNIC 1796没有收到“I Am Alive”消息,那么它通过向主机发送切换请求异步事件1708,启动切换。主机接收切换请求异步事件1708,并尝试通过询问RNIC 1712访问主RNIC 1700。主RNIC 1700返回询问RNIC结果1716。
如果询问RNIC 1712成功,并且询问RNIC结果1716反映主RNIC 1700是全功能的,并且处于无错状态,那么主机将A)通过交换机管理协议,请求使备用RNIC 1796不能为它所连接的交换机访问;B)通过发出修改RNIC 1776动词,把备用RNIC 1796的LAN地址(例如以太网MAC地址)加入主RNIC 1700 LAN地址表;C)通过网络地址改变协议(例如无偿ARP回答),请求另外的LAN地址(即备用RNIC 1796先前使用的地址)被识别成主RNIC1700的地址之一;D)使用主RNIC 1700上的修改CQ 1790来改变CQC 1712的状态;E)通过把CQC 1712主RNIC和备用RNIC标识语境中的RNIC状态从备用状态改变成主状态,主RNIC 1700使CQC 1712处于主状态;F)使用主RNIC 1700上的修改QP 1788来改变QPC 1716的状态;G)通过把QPC 1716主RNIC和备用RNIC标识语境中的RNIC状态从备用RTS状态改变成主RTS状态,主RNIC 1700使QPC 1716处于主RTS状态。
对利用作为主RNIC 1700的主RNIC和作为备用RNIC 1796的备用RNIC建立的所有CQ进行步骤D和E。可对修改CQ 1790进行优化,所述修改CQ 1790包含发布成修改一系列CQ的修改CQ集动词,而不是发布成单独的修改CQ动词的修改CQ 1790。
对利用作为主RNIC 1700的主RNIC和作为备用RNIC 1796的备用RNIC建立的所有QP进行步骤F和G。可对修改QP 1788进行优化,所述修改QP 1788涉及发布修改一系列QP的修改QP集动词,而不是发送多个单独的修改QP动词。
如果询问RNIC 1712失败(例如主RNIC 1700未能返回询问RNIC结果1716),或者如果询问RNIC 1712成功,但是询问RNIC结果1716错误,或者反映主RNIC 1700处于出错状态,那么主机将A)通过发出修改RNIC 1720,把主RNIC 1700的LAN地址(例如以太网MAC地址)加入备用RNIC 1796 LAN地址表;B)通过公知的交换机管理协议,请求使主RNIC 1700不能为它所连接的交换机访问;C)通过公知的网络地址改变协议(例如无偿ARP回答),请求另外的LAN地址(即主RNIC 1700先前使用的地址)被识别成备用RNIC 1796的地址之一;D)使用备用RNIC 1796上的修改CQ 1782来改变CQC 1724的状态;E)通过把CQC 1724主RNIC和备用RNIC标识语境中的RNIC状态从备用状态改变成主状态,备用RNIC 1796使CQC 1824处于主状态;F)使用备用RNIC 1796上的修改QP 1780来改变QPC 1720的状态;G)通过把QPC 1720主RNIC和备用RNIC标识语境中的RNIC状态从备用RTS状态改变成主RTS状态,备用RNIC 1796使QPC1720处于主RTS状态。
对利用作为主RNIC 1700的主RNIC和作为备用RNIC 1796的备用RNIC建立的所有CQ进行步骤D和E。可对修改CQ 1782进行优化,所述修改CQ 1782涉及发布成修改一系列CQ的修改CQ集动词,而不是发布多个单独的修改CQ动词。
对利用作为主RNIC 1700的主RNIC和作为备用RNIC 1796的备用RNIC建立的所有QP进行步骤F和G。可对修改QP 1780进行优化,所述修改QP 1780涉及发布修改一系列QP的修改QP集动词,而不是发布单独的修改QP动词。
现在参见图18,提供了根据本发明的优选实施例,图解说明由两个RNIC使用的例证备用RNIC禁用消息流和进程的示意图。图18中一开始,QPC 1816是主QPC,QPC 1820是备用QPC。图18中一开始,CQC 1812是主CQC,CQC 1824是备用CQC。
下面是用于禁用不是全操作的备用RNIC 1896的例证备用RNIC禁用消息流。首先,主RNIC 1800设置“I Am Alive”递减计时器。如果在“I Am Alive”递减计时器期满之前,主RNIC 1700收到“I AmAlive”消息1804,那么计时器被重置。“I Am Alive”消息使OpCode1854被设置成x0000,即,“I Am Alive”消息1804和1850。长度被设置成x0003,即,“I Am Alive”消息的长度。该长度之后的三个字段被如下设置

对于多端口RNIC,“I Am Alive”消息可被实现成传送长度字段之后的数目可变的字段,例如下述字段(这里N是RNIC支持的端口的最大数目)

如果在“I Am Alive”递减计时器期满之前,主RNIC 1800没有收到“I Am Alive”消息1804,那么它通过向主机发送禁用备用RNIC异步事件1808,开始禁用备用RNIC。主机接收禁用备用RNIC异步事件1808,并尝试通过询问RNIC 1812访问备用RNIC 1896。备用RNIC1896返回询问RNIC结果1816。
如果询问RNIC 1812成功,并且询问RNIC结果1816反映备用RNIC 1896是全功能的,并且处于无错状态,那么主机将A)通过发出修改RNIC 1820,把主RNIC 1800的LAN地址(例如以太网MAC地址)加入备用RNIC 1896 LAN地址表;B)通过公知的交换机管理协议,请求使主RNIC 1800不能被它所连接的交换机访问;C)通过公知的网络地址改变协议(例如无偿ARP回答),请求另外的LAN地址(即主RNIC 1800先前使用的地址)被识别成备用RNIC 1896的地址之一;D)使用备用RNIC 1896上的修改CQ 1882来改变CQC 1824的状态;E)通过把CQC 1824主RNIC和备用RNIC标识语境中的RNIC状态从备用状态改变成主状态,备用RNIC 1896使CQC 1824处于主状态;F)使用备用RNIC 1896上的修改QP 1880来改变QPC 1820的状态;G)通过把QPC 1820主RNIC和备用RNIC标识语境中的RNIC状态从备用RTS状态改变成主RTS状态,备用RNIC 1896使QPC1820处于主RTS状态。对利用作为主RNIC 1800的主RNIC和作为备用RNIC 1896的备用RNIC建立的所有CQ进行步骤D和E。可对修改CQ 1882进行优化,所述修改CQ 1882涉及发布修改一系列CQ的修改CQ集动词,而不是发布多个单独的修改CQ动词。
对利用作为主RNIC 1800的主RNIC和作为备用RNIC 1896的备用RNIC建立的所有QP进行步骤F和G。可对修改QP 1880进行优化,所述修改QP 1880涉及发布修改一系列QP的修改QP集动词,而不是发布多个单独的修改QP动词。
如果询问RNIC 1812失败(例如备用RNIC 1896未能返回询问RNIC结果1816),或者如果询问RNIC 1812成功,但是询问RNIC结果1816错误,或者反映备用RNIC 1896处于出错状态,那么主机将
A)通过公知的交换机管理协议,请求使备用RNIC 1896不能为它所连接的交换机访问;B)通过发出修改RNIC 1876,把备用RNIC 1896的LAN地址(例如以太网MAC地址)加入主RNIC 1800 LAN地址表;C)通过公知的网络地址改变协议(例如无偿ARP回答),请求另外的LAN地址(即备用RNIC 1896先前使用的地址)被识别成主RNIC 1800的地址之一;D)使用主RNIC 1800上的修改CQ 1890来改变CQC 1812的状态;E)通过把CQC 1812主RNIC和备用RNIC标识语境中的RNIC状态从备用状态改变成主状态,主RNIC 1800使CQC 1812处于主状态;F)使用主RNIC 1800上的修改QP 1888来改变QPC 1816的状态;G)通过把QPC 1816主RNIC和备用RNIC标识语境中的RNIC状态从备用RTS状态改变成主RTS状态,主RNIC 1800使QPC 1816处于主RTS状态。
对利用作为主RNIC 1800的主RNIC和作为备用RNIC 1896的备用RNIC建立的所有CQ进行步骤D和E。可对修改CQ 1890进行优化,所述修改CQ 1890涉及发布成修改一系列CQ的修改CQ集动词,而不是发布多个单独的修改CQ动词。
对利用作为主RNIC 1800的主RNIC和作为备用RNIC 1896的备用RNIC建立的所有QP进行步骤F和G。可对修改QP 1888进行优化,所述修改QP 1888涉及发布修改一系列QP的修改QP集动词,而不是发布多个单独的修改QP动词。
从而,借助本发明的实施例,提供RNIC切换和切回支持。当在主RNIC上发生计划或非计划的停机时,通过利用在本发明的一个优选实施例中提供的机构,所有未完成的连接被转换到备用RNIC,备用RNIC继续通信处理。
重要的是注意虽然在全功能数据处理系统的语境中描述了本发明,不过本领域的普通技术人员会认识到能够以指令的计算机可读介质的形式分布本发明的优选实施例的进程,并且本发明同样适用,与实际用于进行所述分布的信号承载介质的特定类型无关。计算机可读介质的例子包括可记录型介质,例如软盘、硬盘驱动器、RAM、CD-ROM、DVD-ROM,和传输型介质,例如数字和模拟通信链路、利用诸如射频和光波传输之类传输形式的有线或无线通信链路。计算机可读介质可采取编码格式的形式,所述编码格式被解码,以便实际用在特定的数据处理系统中。
出于举例说明的目的,已给出了本发明的说明,所述说明不是穷尽的,也不打算把本发明局限于所公开的形式。对于本领域的普通技术人员来说,许多修改和变化是明显的。
权利要求
1.一种在数据处理系统中的启用了远程直接存储器存取的主网络接口控制器(主RNIC)和备用RNIC之间执行切换的方法,包括产生用于主RNIC和备用RNIC的公共队列对,以致主RNIC和备用RNIC共享所述公共队列对;检测切换事件;和响应切换事件的检测,把队列对的处理从主RNIC切换到备用RNIC。
2.按照权利要求1所述的方法,其中产生公共队列对包括向主RNIC和备用RNIC分配队列范围,以致主RNIC和备用RNIC共享该队列范围内的队列。
3.按照权利要求1或2所述的方法,其中产生公共队列对包括把一系列存储器转换保护表条目分配给主RNIC和备用RNIC。
4.按照前述任意权利要求所述的方法,还包括产生用于主RNIC和备用RNIC的公共完成队列,以致主RNIC和备用RNIC共享所述公共完成队列;和如果检测到切换事件,则把公共完成队列的操作切换到备用RNIC。
5.按照前述任意权利要求所述的方法,其中把队列对的处理从主RNIC切换到备用RNIC包括把主RNIC的地址添加到备用RNIC的地址表中;使主RNIC对与主RNIC和备用RNIC耦接的交换机是不可访问的;和在交换机中,使主RNIC的地址可被识别成备用RNIC的地址。
6.按照前述任意权利要求所述的方法,其中把队列对的处理从主RNIC切换到备用RNIC包括修改用于完成队列语境的主RNIC和备用RNIC标识语境信息,以致备用RNIC被识别成主RNIC;和修改队列对语境的主RNIC和备用RNIC标识语境信息,以致备用RNIC被识别成主RNIC。
7.按照权利要求6所述的方法,其中保持状态信息包括保持主RNIC和备用RNIC标识语境数据结构,所述主RNIC和备用RNIC标识语境数据结构包括RNIC切换状态,主RNIC标识符,主RNIC端口标识符,备用RNIC标识符和备用RNIC端口标识符中的至少之一。
8.按照权利要求6或7所述的方法,其中保持状态信息包括保持具有用于主RNIC和备用RNIC的每个公共完成队列的条目的完成队列语境表。
9.一种计算机程序,它包括当被装入计算机系统并在计算机系统上执行时,使所述计算机执行按照任意前述权利要求所述的方法的步骤的计算机程序代码部件。
10.一种在具有主RNIC和备用RNIC的数据处理系统中发送数据段的设备,包括接收数据段的装置;更新主RNIC中的工作发送队列切换语境信息的装置;把更新工作发送队列切换语境检查点消息发送给备用RNIC的装置;从备用RNIC接收更新提交发送队列切换语境检查点消息的装置;用更新提交发送队列切换语境检查点消息的内容更新提交发送队列切换语境的本地副本的装置;和从发送队列发送数据段的装置。
全文摘要
提供一种支持RNIC(启用了RDAM的NIC)切换和切回的方法、计算机程序产品和分布式数据处理系统。当在主RNIC上发生计划或非计划的停机时,通过利用本发明中提供的机构,所有未完成的连接被切换到备用RNIC,备用RNIC继续通信处理。另外,利用本发明中提供的机构,连接也可被切换回来。
文档编号H04L29/06GK1679003SQ03820988
公开日2005年10月5日 申请日期2003年8月5日 优先权日2002年9月5日
发明者威廉·托德·伯伊德, 道格拉斯·约瑟夫, 迈克尔·安托尼·考, 雷纳多·约翰·雷西奥 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1