延迟对操作的确认直至操作完成的方法和系统的制作方法

文档序号:7767906阅读:88来源:国知局
专利名称:延迟对操作的确认直至操作完成的方法和系统的制作方法
技术领域
本发明一般涉及计算环境内的处理,具体地讲,涉及帮助进行与输入/输出(I/O) 适配器关联的处理。
背景技术
I/O适配器(诸如,能进行远程直接存储器存取(RDMA)的适配器)彼此通信以执行特定操作。在一个例子中,发送RDMA使能适配器把RDMA写操作转发给远程的接收RDMA 使能适配器。响应于接收到RDMA写操作,接收RDMA适配器确认该写操作。然而,该确认仅保证在远程适配器接收到该请求。它并不保证远程适配器已完成存储器写操作,也不保证所写的数据对于远程处理器可见。使用RDMA写操作进行通信的应用经常需要在执行某些其它操作之前证实数据在远程存储器中可用。因此,从发送RDMA适配器把RDMA读操作转发给远程适配器以便执行存储器读操作来证实数据在存储器中可用(对于远程处理器可见)。如果数据可用,则远程适配器把另一确认(RDMA读数据)转发给发送适配器。远程发起的用于证实数据可用的读取以及发送另一确认的要求增加了适配器之间的等待时间。

发明内容
通过提供用于帮助计算环境中的处理的计算机程序产品,克服现有技术的缺点并且提供另外的优点。计算机程序产品包括处理电路可读并且存储由处理电路为了执行一种方法而执行的指令的存储介质。该方法例如包括在计算环境的接收适配器处接收来自计算环境的发送适配器的要由该接收适配器执行的操作;由接收适配器执行所述操作;由接收适配器确定所述操作是否已完成,其中所述确定包括由接收适配器执行读操作以证实所述操作已完成,所述读操作由接收适配器在本地发起;以及响应于通过所述读操作而确定所述操作已完成,向发送适配器发送确认。在另一方面,提供了一种帮助进行计算环境中的处理的计算机程序产品。该计算机程序产品包括处理电路可读并且存储由处理电路为了执行一种方法而执行的指令的存储介质。该方法例如包括在计算环境的接收适配器处接收来自计算环境的发送适配器的要由该接收适配器执行的第一操作,第一操作与第一确认类型关联;由接收适配器执行第一操作;响应于指示非延迟确认的第一确认类型,向发送适配器发送指示接收到第一操作的接收确认,所述接收确认不指示第一操作的完成;在所述接收适配器处接收来自所述发送适配器的要由所述接收适配器执行的第二操作,第二操作与第二确认类型关联;由接收适配器执行第二操作;响应于指示延迟确认的第二确认类型,由接收适配器确定第二操作是否已完成,其中所述确定包括由接收适配器执行读操作以证实第二操作已完成,所述读操作由接收适配器在本地发起;以及响应于通过所述读操作而确定第二操作已完成,向发送适配器发送完成确认。在本文中也描述并要求保护与本发明的一个或多个方面相关的方法和系统。另
4外,也描述了与本发明的一个或多个方面相关的服务并且可以在本文中要求保护所述服务。通过本发明的技术实现了另外的特征和优点。在本文中详细地描述了本发明的其它实施例和方面并且把它们视为要求保护的发明的一部分。


在说明书的结论部分在权利要求中作为例子具体地指出并且明确地要求保护本发明的一个或多个方面。根据下面结合附图进行的详细描述,本发明的前述和其它目的、特征和优点变得清楚,在附图中图1描述包括并使用本发明的一个或多个方面的分布式计算机系统的一个例子;图2描述根据本发明一方面的图1的主机通道适配器(HCA)的进一步细节的一个实施例;图3描述根据本发明一方面的处理工作请求的一个例子;图4描述根据本发明一方面的分布式计算机系统的一部分的一个实施例,在该分布式计算机系统中队列对用于在分布式进程之间的通信中提供可靠连接服务;图5描述根据本发明一方面的在分布式计算机系统中使用的分层通信架构的一个例子;图6A描述在本发明的一个或多个方面之前与发送或存储器写操作关联的确认处理的一个例子;图6B描述本发明的一个或多个方面的延迟确认处理的一个实施例;图7描述根据本发明一方面的与延迟确认关联的逻辑的一个实施例;以及图8描述包括本发明的一个或多个方面的计算机程序产品的一个实施例。
具体实施例方式根据本发明的一方面,对由接收适配器(例如,能进行RDMA的适配器)接收的请求的确认的发送被延迟直至由接收适配器发起的读操作指示所请求的操作(例如,RDMA写或发送操作)完成之后。对操作的确认被延迟直至所述操作完成;即,直至本地发起的读操作指示存储器被更新(例如,数据对于远程处理器可见)。这是相对于接收适配器在接收到请求时就对该请求进行确认的以前RDMA技术而言的。也就是说,该确认仅保证在远程适配器接收到要执行的操作。它并不保证该操作已完成或者数据对于远程处理器可见。通过延迟所述确认直至执行所请求的操作,发送适配器不需要询问操作是否完成,因此消除了发送适配器的请求和相应的确认。这改善了适配器之间的等待时间。在一个实施例中,处理中涉及的适配器是能进行远程直接存储器存取(RDMA)的适配器。能进行RDMA的适配器可以是RDMA通道适配器(诸如,按InfiniBand 架构规范定义的RDMA通道适配器)或者RDMA网络接口卡(RNIC)(诸如,按RDMA联盟的iWARP定义的 RNIC)。在 “InfiniBand Architecture Specification" (Volume 1,Release 1.2.1, 2007年11月)中详细描述了 InfiniBand 架构规范的一个实施例,通过引用将其全部内容包含于此。虽然提到了 RDMA和能进行RDMA的适配器,但本领域技术人员应该理解,本发明的一个或多个方面不限于使用RDMA的操作。
5
参照图1描述包括并使用本发明的一个或多个方面的计算环境的一个实施例。图 1描述使用系统域网(SAN)结构116的分布式计算机系统100的一个例子。提供分布式计算机系统100和/或SAN结构116仅用于例示的目的。本发明的一个或多个实施例能够实现于许多其它类型和结构的计算机系统上。例如,实现一个或多个实施例的计算机系统能够为从具有一个处理器和几个输入/输出(I/O)适配器的小型服务器到具有几百或几千个处理器和几千个I/O适配器的大规模并行超级计算机系统。参照图1,SAN结构116是用于互连分布式计算机系统内的节点的高带宽、低等待时间的网络。节点是附接到网络的一个或多个链路并形成消息在网络内的起点和/或目的地的任何组件。在图1描述的例子中,分布式计算机系统100包括以下形式的节点主机处理器节点102、主机处理器节点104、独立磁盘冗余阵列(RAID)子系统节点106和I/O机架 (chassis)节点108。图1中示出的节点仅用于例示的目的,因为SAN结构116能够互连任何数量及任何类型的独立处理器节点、I/O适配器节点和I/O装置节点。任何一个节点能够用作端节点,端节点在本文被定义为在SAN结构116中发起或最后消费消息或包的装置。在一个实施例中,存在允许端节点之间的可靠连接和/或可靠数据报通信的错误处理机制。本文所使用的消息是应用定义的数据交换的单位,是协作的进程之间的通信的基本单位。包是由联网协议头部和/或尾部封装的数据的一个单位。头部通常提供用于引导包通过SAN结构116的控制和路由信息。尾部通常包含用以检验未传送具有破损内容的包的控制和循环冗余校验(CRC)数据。图1中描述的分布式计算机系统100包括在分布式计算机系统内支持I/O通信和处理器间通信(IPC)这两者的通信和管理基础设施。分布式计算机系统100包括例如交换通信结构116,交换通信结构116允许许多设备在安全、远程管理的环境中以高带宽和低等待时间同时传送数据。端节点能够在多个端口上通信并使用多个通过SAN结构116的路径。 多个端口和通过SAN结构116的路径能够用于容错和增加带宽数据传送。在一个例子中,SAN结构116包括三个交换机112、114和146以及路由器117。交换机是把多个链路连接在一起并允许使用小头部目的地本地标识符(DLID)字段在子网内把包从一个链路路由至另一链路的装置。路由器是把多个子网连接在一起并且能够使用大头部目的地全球唯一标识符(DGUID)把包从第一子网中的一个链路路由至第二子网中的另一链路的装置。在一个实施例中,链路是任何两个网络结构元件(诸如,端节点、交换机或路由器)之间的全双工通道。示例性的适合的链路包括但不限于铜线缆、光缆以及底板和印刷电路板上的印刷电路铜线。对于可靠服务类型,端节点(诸如,主机处理器端节点和I/O适配器端节点)产生请求包并返回确认包。交换机和路由器从源向目的地传递包。除了在网络中的每一级被更新的变量CRC尾部字段之外,交换机传递包而不进行修改。路由器在包被路由时更新变量 CRC尾部字段并修改头部中的其它字段。在图1示出的示例性分布式计算机系统100中,主机处理器节点102、主机处理器节点104和I/O机架108包括用于对接SAN结构116的至少一个能进行RDMA的通道适配器(CA)。在一个或多个实施例中,每个CA是具体实现与SAN结构116上传输的源包或宿(sink)包的CA接口的端点。主机处理器节点102包括例如具有能进行RDMA的主机通道适配器(HCA) 118和120的形式的CA。主机处理器节点104包括例如HCA 122和1M。主机处理器节点102还包括通过总线系统134互连的中央处理单元U6-130和存储器132。 主机处理器节点104类似地包括通过总线系统144互连的中央处理单元136-140和存储器 142。在主机处理器节点102中,存储器132经由例如外设部件互连(PCI)以可通信的方式耦接到HCA 118和120 ;在主机处理器节点104中,存储器142类似地经由例如PCI互连以可通信的方式耦接到HCA 122和124。HCA 118和120提供从主机处理器节点102到交换机112的连接;而HCA 122和IM提供从主机处理器节点104到交换机112和114的连接。在一个或多个实施例中,HCA实现为硬件。在这种实现方式中,HCA硬件减少了很多中央处理单元I/O适配器通信开销。HCA的该硬件实现方式还在没有与通信协议关联的传统开销的情况下允许交换网络上的多个并发通信。在一个实施例中,图1中的HCA和SAN 结构116在不涉及操作系统内核进程的情况下为分布式计算机系统的I/O和IPC消费方提供零处理器拷贝数据传送,并采用硬件来提供可靠、容错的通信。如图1中所示,路由器117耦接到与其它主机或其它路由器连接的广域网(WAN) 和/或局域网(LAN)。另外,I/O机架108包括I/O交换机146和多个I/O模块148-156。 在这些例子中,I/O模块148-156采用适配器卡的形式。示例性适配器卡包括用于I/O模块148的SCSI适配器卡;用于I/O模块150的以太网适配器卡;用于I/O模块152的光纤通道集线器和光纤通道仲裁回路(FC-AL)装置的适配器卡;用于I/O模块IM的图形适配器卡;和用于I/O模块156的视频适配器卡。能够实现任何已知类型的适配器卡。I/O适配器还在该I/O适配器中包括用于把适配器卡耦接到SAN结构116的交换机。这些模块包括能进行RDMA的目标通道适配器(TCA) 158-166。在图1描述的例子中,RAID子系统节点106包括处理器168、存储器170、TCA 172 和多个冗余和/或条带存储盘单元174。TCA172可以是全功能HCA。SAN结构116处理用于I/O和处理器间通信的数据通信。SAN结构116支持I/O 所需的高带宽和可伸缩性,并且还支持处理器间通信所需的极低等待时间和低CPU开销。 用户客户机能够绕过操作系统内核进程并且直接访问网络通信硬件(诸如,HCA),这能够实现高效消息传递协议。SAN结构116适合于当前计算模型并且是用于新形式的I/O和计算机集群通信的构件。另外,在一个实施例中,SAN结构116允许I/O适配器节点彼此通信或者与分布式计算机系统中的任何处理器节点通信。对于附接到SAN结构116的I/O适配器,所获得的I/O适配器节点具有与分布式计算机系统100中的任何主机处理器节点基本上相同的通信能力。在一个或多个实施例中,SAN结构116支持通道语义和存储器语义。通道语义有时称为发送/接收或推送通信操作。通道语义是在源装置推送数据并且目的地装置确定数据的最后目的地的传统I/O通道中采用的通信的类型。在通道语义中,从源进程发送的包指定目的地进程的通信端口,但不指定在目的地进程的存储器空间中把包写在哪里。因此, 在通道语义中,目的地进程预分配放置传输的数据的位置。在存储器语义中,源进程直接读或写远程节点目的地进程的虚拟地址空间。远程目的地进程仅需要传送用于数据的缓冲区的位置而无需涉及任何数据的传送。因此,在存储器语义中,源进程发送包含目的地进程的目的地缓冲存储地址的数据包。在存储器语义中,目的地进程预先对源进程授予访问它的存储器的许可。通道语义和存储器语义通常都用于I/O和处理器间通信。典型的I/O操作采用通道和存储器语义的组合。例如,主机处理器节点(诸如主机处理器节点10 通过使用通道语义向盘I/O适配器(诸如RAID子系统TCA 172)发送盘写命令,来发起I/O操作。盘I/ 0适配器检查该命令并使用存储器语义直接从主机处理器节点的存储器空间读取数据缓冲区。在读取数据缓冲区之后,盘I/O适配器采用通道语义把I/O完成消息推送回至主机处理器节点。在一个或多个实施例中,图1中显示的分布式计算机系统执行采用虚拟地址和虚拟存储器保护机制确保对所有存储器的正确和适当访问的操作。在这种分布式计算机系统中运行的应用不需要为任何操作使用物理寻址。现在参照图2,描述关于主机通道适配器的进一步细节。在一个例子中,主机通道适配器(HCA) 200包括用于把消息传送到HCA端口 212-216的一组队列对(QP) 202-210。通过虚拟通路(VL) 218-234引导对到HCA端口 212-216的数据的缓冲,其中每个VL具有它自己的流控制。子网管理器利用每个物理端口的本地地址(即,端口的本地标识符(LID))构造通道适配器。子网管理器代理(SMA) 236是为了构造通道适配器而与子网管理器通信的实体。存储器转换和保护(MTP) 238是把虚拟地址转换成物理地址并验证访问权限的机构。 直接存储器存取(DMA) 240针对QP 202-210使用存储器242提供DMA操作。单个通道适配器(诸如图2中显示的HCA 200)能够支持几千个QP。相比之下,I/ 0适配器中的TCA通常支持少得多的数量的QP。每个QP包括例如两个工作队列发送队列 (SQ)和接收队列(RQ)。SQ用于发送通道和存储器语义消息。RQ接收通道语义消息。消费方调用在本文称为“verbs接口 ”的操作系统专用编程接口以把工作请求(WR)放在工作队列上。现在参照图3,描述关于工作请求的处理的进一步细节。在图3的例子中,接收队列(RQ) 300、发送队列(SQ) 302和完成队列(CQ) 304存在于存储器中用于处理来自消费方 306的请求和对消费方306的请求(例如,在耦接到与这些队列关联的HCA的中央处理单元内执行的进程,诸如用户进程)。这些来自消费方306的请求最终被发送给硬件308(其耦接到另一 HCA的硬件并且那个硬件耦接到所述另一 HCA的RQ、SQ和CQ)。在这个例子中, 消费方306产生工作请求310和312并接收工作完成314。放在工作队列上的工作请求称为工作队列元素(WQE)。在一个例子中,发送队列302包括WQE 322-328,WQE 322-328描述要在SAN结构 116上传输的数据。接收队列300包括WQE316-320,WQE 316-320描述在哪里放置从SAN结构116进入的通道语义数据。由HCA中的硬件308处理WQE。通过QP上下文管理每个QP, QP上下文是关于特定QP的一组信息,诸如当前WQE、包序号、传输参数等。Verbs接口还提供用于从完成队列304取回完成的工作的机制。如图3中所示, 完成队列304包括完成队列元素(CQE) 330-336。CQE包括关于先前完成的WQE的信息。CQ 304用于为多个QP产生单点的完成通知。CQE包括用于确定QP和完成的特定WQE的足够信息。CQ上下文是包含管理各CQ所需的指针、长度和其它信息的一组信息。由SQ 302支持的示例性工作请求包括下面各项发送工作请求,该请求是通道语义操作,把一组本地数据段推送到由远程节点的接收WQE参考的数据段。例如,WQE 3 包括对数据段4338、数据段5340和数据段6342的参考。每个发送工作请求的数据段包括虚拟连续存储空间。用于参考本地数据段的虚拟地址位于产生本地QP的进程的地址上下文中。可以在SQ WQE中指定的其它类型的操作是RDMA写和RDMA读操作。这些是存储器语义操作。在一个实施例中,RQ 300支持一种类型的WQE,其被称为接收WQE。接收WQE提供描述写入进入的发送消息的本地存储空间的通道语义操作。接收WQE包括描述几个虚拟连续存储空间的散基序列(scatter list)。进入的发送消息被写到这些存储空间。虚拟地址位于产生本地QP的进程的地址上下文中。对于处理器间通信,用户模式软件进程直接从存储器中缓冲区所在的位置通过QP 传送数据。在一个或多个实施例中,通过QP的传送绕过操作系统并消费很少的主机指令周期。QP允许零处理器拷贝数据传送并且无需操作系统内核参与。零处理器拷贝数据传送为高带宽、低等待时间通信提供了高效的支持。当产生QP时,QP被设置为提供选择类型的传输服务。作为例子,支持四种类型的传输服务可靠连接、不可靠连接、可靠数据报和不可靠数据报。在图4中一般地示出了采用可靠连接服务在分布式进程之间通信的分布式计算机系统的一部分。在一个例子中,分布式计算机系统400包括主机处理器节点1、主机处理器节点2和主机处理器节点3。主机处理器节点1包括进程A 410。主机处理器节点3包括进程C 420和进程D 430。主机处理器节点2包括进程E 440。主机处理器节点1包括QP 4、6和7,QP 4、6和7中的每一个具有发送队列和接收队列。主机处理器节点2具有QP 9并且主机处理器节点3具有QP 2和5。分布式计算机系统400的可靠连接服务通过构造用于根据端口和QP编号识别远程QP的本地QP上下文, 把本地QP与一个远程QP关联起来。因此,QP 4用于与QP 2通信;QP 7用于与QP 5通信; 并且QP 6用于与QP 9通信。在可靠连接服务中放在一个QP上的WQE使数据被写到由连接的QP的接收WQE参考的接收存储空间中。RDMA操作工作于连接的QP的地址空间。在一个或多个实施例中,使可靠连接服务变得可靠,因为硬件保持序列号并且确认所有包传送。硬件和SAN结构116驱动程序软件的组合重试任何失败的通信。QP的进程客户机即使在存在误码、接收欠载和网络拥塞的情况下也获得可靠通信。如果在SAN结构 116中存在可替代的路径,则即使在存在设备交换机、链路或通道适配器端口的故障的情况下也能够保持可靠通信。在图5中一般地示出了用于分布式计算机系统的分层通信架构500的例子。分层架构图显示了数据通信路径的各层以及各层之间传递的数据和控制信息的组织。HCA端节点协议层(例如,由端节点511采用)包括由消费方503定义的上层协议502、传输层504、网络层506、链路层508和物理层510。交换机层(例如,由交换机513 采用)包括链路层508和物理层510。路由器层(例如,由路由器515采用)包括网络层 506、链路层508和物理层510。分层架构500 —般遵循经典通信栈的概要。关于端节点511的协议层,例如,上层协议502采用verbs接口产生传输层504的消息。网络层506在网络子网516之间对包进行路由。链路层508在网络子网518内对包进行路由。物理层510把比特或比特群发送给
9其它装置的物理层。每个层不知道上层或下层如何执行它们的功能。消费方503和505代表利用其它层以在端节点之间通信的应用或进程。传输层 504提供端到端消息移动。如上所述,传输层提供四种类型的传输服务,包括例如可靠连接服务、可靠数据报服务、不可靠数据报服务和不可靠连接服务。网络层506执行经由一个子网或多个子网到目的地端节点的包路由。链路层508在链路上执行进行了流控制、检错和确定了优先次序的包传送。物理层510执行技术相关的比特传输。经由链路522、5M和 526在物理层之间传递比特或比特群。链路能够利用印刷电路铜线、铜线缆、光缆或利用其它适合的链路来实现。如上所述,适配器(诸如主机通道适配器)彼此通信以执行特定操作,包括远程直接存储器存取写或发送。作为该通信的一部分,采用从一个适配器向另一个适配器的确认。 参照图6A和6B描述关于包括提供所述确认的操作的执行的进一步细节。具体地,图6A描述没有本发明的一个或多个方面的采用确认(非延迟确认)的处理的一个实施例;图6B描述根据本发明一方面的延迟确认的使用。首先参照图6A,在处理器600上执行的进程请求执行操作,诸如存储器写操作,如同发送操作或RDMA写操作一样。该请求被放在一个工作队列元素(WQE)中,该WQE被放在发送适配器可访问的存储器中的发送队列上。发送会聚网络适配器(CNA) 602(诸如能进行 RDMA的主机通道适配器)取回WQE 610和由该WQE中的指针指示的相应数据612,并建立要在链路和结构604上发送给远程接收CNA 606 (诸如另一能进行RDMA的主机通道适配器) 的包。远程适配器执行对存储器的写操作。(对于发送操作,在接收WQE中指示写该数据的存储器位置)。对存储器的写操作在PCI的情况下是提出的存储器写请求(也就是说,不存在对DMA写的响应)。另外,远程适配器把确认614发送回发送适配器。这个确认指示远程适配器接收到该请求和数据,但不指示数据存在于远程存储器中。响应于接收到该确认,发送适配器产生被放在完成队列上的CQE。根据该CQE,向该应用通知工作完成(即,已在远程适配器处接收到所述写或发送)。随后,如果该应用希望确定数据对于远程处理器是否可用(即,是否存储在存储器中),则它发出对有效存储器位置(例如,通过写操作写入的位置之一)的RDMA读操作 616以确定数据是否在那里。远程适配器执行由发送适配器请求的RDMA读操作。当数据可用时,远程适配器向发送适配器发送指示读操作的完成的另一确认(即,RDMA读数据)618。 响应于接收该确认,发送适配器再次产生被放在完成队列上的CQE以向该应用通知由发送适配器产生的远程读请求被接收适配器执行。如上所述,两个确认以及由发送适配器发起并由远程适配器执行的远程读操作用于指示所请求的操作(例如,存储器写、读)被执行。两个确认和远程发起的读请求的使用增加了用于执行所请求的操作的适配器之间的等待时间。因此,根据本发明的一方面,提供延迟确认技术,其中远程适配器不确认所请求的操作直至所请求的操作已被完成(例如, 数据被存储在存储器中并且对于处理器可见)。参照图6B描述与延迟确认关联的处理的一个实施例。参照图6B,与图6A的非延迟确认一样,在处理器600上执行的进程请求执行操作, 诸如发送操作或RDMA写操作。该请求被放在一个工作队列元素(WQE)610中,该WQE 610被放在发送队列上。发送适配器602取回WQE 610和由该WQE中的指针指示的相应数据612,并建立要在链路和结构604上发送给远程适配器606的包。远程适配器执行作为提出的存储器写请求的对存储器的写操作,但不在此时发送确认。代替地,远程适配器执行由该远程适配器在本地发起的读操作630。这个读操作不是由发送适配器请求的并且对于发送适配器是透明的。该读操作是例如RDMA写操作的最后字节或高速缓存行的DMA读操作。正常的PCI排序规则规定在返回DMA读数据之前应该完成所有在前的DMA写操作。响应于指示数据已被写到存储器并且对于远程处理器可见的DMA读操作完成,远程适配器向发送适配器发送确认632。响应于DMA读操作的完成而产生的这个确认保证了数据在存储器中,因为由适配器和存储器之间的互连(例如,PCI)遵循的排序规则规定为了读操作成功完成,所有数据应该已被存储在存储器中。通过当写或发送操作完成时仅发送一个确认以及通过避免从发送适配器向远程适配器发送请求读操作的请求,等待时间减小,因此提高了系统性能。参照图7描述关于延迟确认处理的进一步细节。这个处理由接收适配器执行。最初,在步骤700中,接收适配器接收来自发送适配器的执行把数据写到存储器的操作(诸如,RDMA写操作或发送操作)的请求。在步骤702中,响应于该请求,接收适配器开始该操作。例如,它开始把数据写到存储器。在一个例子中,这个写操作是提出的存储器写请求。在这个实施例中,数据通过PCI互连被写到存储器。然而,PCI不提供对DMA写操作的响应。另外,适配器的架构(例如,InfiniBand )规定如果响应于接收该请求而发送确认,则该确认仅确认适配器接收到该请求和数据而并不保证数据已被存储在存储器中。 在这一点上,接收适配器可以发送确认或者可以不发送确认。根据本发明的一方面,在询问步骤704中确定是否指示了延迟处理。作为例子,可以通过检查与该请求关联的队列对上下文中的指示器或从发送WQE产生的包中的指示器进行该确定。如果指示了延迟处理,则发送适配器不知道的接收适配器执行本地读操作以确定数据是否存储在存储器中。该读操作是例如对由接收适配器写入的最后存储器位置的 DMA读操作。在另一例子中,DMA读操作能够针对另一有效存储器位置(即,先前写入的存储器位置)。如果在询问步骤708中读操作成功从而指示数据在存储器中可用,则在步骤710 中把确认发送给发送适配器。这个确认因此被延迟直至通过读操作确定数据可用之后。返回到步骤询问708,如果数据当前不可用,则接收适配器等待数据变为可用。返回到询问步骤704,如果确定未指示延迟处理(即,对于这个特定队列对或请求而言不可用或未启用),则在步骤712中发送指示写或发送操作的接收的确认。该确认未被延迟并且不保证数据已通过写或发送操作被写到存储器。这使处理结束。本领域技术人员应该理解,本发明的各方面可以实现为系统、方法或计算机程序产品。因此,本发明的各方面可以采用通常全部可在本文称为“电路”、“模块”或“系统”的全硬件实施例、全软件实施例(包括固件、驻留软件、微码等)或组合软件和硬件方面的实施例的形式。另外,本发明的各方面可以采用实现于具有计算机可读程序代码的一个或多个计算机可读介质中的计算机程序产品的形式。可以使用一个或多个计算机可读介质的任何组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读信号介质可包括例如基带中的或作为载波的一部分的实现了计算机可读程序代码的传播数据信号。这种传播信号可采用多种形
11式,包括但不限于电磁信号、光学信号或者它们的任何合适组合。计算机可读信号介质可以是并非计算机可读存储介质并且能够传送、传播或传输由指令执行系统、设备或装置使用或结合指令执行系统、设备或装置使用的程序的任何计算机可读介质。计算机可读存储介质例如可以是(但不限于)电子、磁、光学、电磁、红外或半导体系统、设备或装置或者前述各项的任何合适组合。计算机可读存储介质的更具体的例子 (非穷举性列表)包括下述各项具有一条或多条线的电连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPR0M或闪存)、光纤、 便携式压缩盘只读存储器(CD-ROM)、光学存储装置或磁存储装置或前述各项的任何合适组合。在本文的上下文中,计算机可读存储介质可以是能够包含或存储由指令执行系统、设备或装置使用或结合指令执行系统、设备或装置使用的程序的任何有形介质。现在参照图8,在一个例子中,计算机程序产品800包括例如一个或多个计算机可读存储介质802,计算机可读存储介质802上存储有计算机可读程序代码装置以提供并促进本发明的一个或多个方面。在一个实施例中,该存储介质是有形且非瞬时的。在一个例子中,该存储介质是存储装置。可以使用适当的介质(包括但不限于无线、有线、光纤缆、RF等或前述各项的任何合适组合),来传输计算机可读介质上实现的程序代码。可以按照一种或多种编程语言的任何组合编写用于执行本发明的各方面的操作的计算机程序代码,所述编程语言包括面向对象的编程语言,诸如Java、Smalltalk, C++ 等;和常规的过程编程语言,诸如“C”编程语言、汇编语言或类似编程语言。程序代码可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立软件包执行、部分在用户的计算机上并且部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一情形中,远程计算机可以通过任何类型的网络(包括局域网(LAN)或广域网(WAN))连接到用户的计算机,或者可以(例如,使用互联网服务提供商通过互联网)连接到外部计算机。这里参考根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和 /或框图来描述本发明的各方面。应该理解,流程图和/或框图中的每个框以及流程图和/ 或框图中的框的组合能够由计算机程序指令实现。这些计算机程序指令可被提供给通用计算机、专用计算机或者其它可编程数据处理设备的处理器,以产生一台机器,从而指令(所述指令经由计算机或者其它可编程数据处理设备的处理器执行)产生用于实现流程图和/ 或框图的一个或多个框中规定的功能/动作的装置。这些计算机程序指令也可存储在计算机可读介质中,该计算机可读介质能够指示计算机、其它可编程数据处理设备或其它装置按照特定的方式发挥作用,从而存储在计算机可读介质中的指令产生一种制品,该制品包括实现流程图和/或框图的一个或多个框中规定的功能/动作的指令。计算机程序指令也可被加载到计算机、其它可编程数据处理设备或其它装置上, 以使得在所述计算机、其它可编程设备或其它装置上执行一系列操作步骤以产生计算机实现的过程,从而使在该计算机或其它可编程设备上执行的指令提供用于实现流程图和/或框图的一个或多个框中规定的功能/动作的过程。附图中的流程图和框图示出了根据本发明各实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。在这个方面,流程图或框图中的每个框可代表包括用于实现规定的逻辑功能的一个或多个可执行指令的代码的模块、段或一部分。还应该注意的是,在一些另外的实现方式中,框中标注的功能可以不按附图中标注的次序执行。例如,事实上,根据涉及的功能,连续示出的两个框可以基本上并发地执行,或者这些框有时候可以以相反的次序执行。还应该注意的是,框图和/或流程图中的每个框以及框图和/ 或流程图中的框的组合能够由执行规定的功能或动作的基于专用硬件的系统或专用硬件和计算机指令的组合实现。除以上情况之外,本发明的一个或多个方面可以由提供顾客环境的管理的服务提供商配备、提供、部署、管理、服务等。例如,服务提供商能够为一个或多个顾客产生、维护、 支持执行本发明的一个或多个方面的计算机代码和/或计算机基础设施。作为回报,例如, 服务提供商可以根据订阅和/或付费合同向顾客收费。另外地或者代替地,服务提供商可以根据把广告内容销售给一个或多个第三方而收费。在本发明的一个方面,可以部署用于实现本发明的一个或多个方面的应用。作为一个例子,应用的部署包括提供可用于实现本发明的一个或多个方面的计算机基础设施。作为本发明的另一方面,可以部署计算基础设施,包括把计算机可读代码集成在计算系统中,其中代码与计算系统结合能够实现本发明的一个或多个方面。作为本发明的另一方面,可以提供包括把计算机可读代码集成在计算机系统中的用于集成计算基础设施的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。代码结合计算机系统能够实现本发明的一个或多个方面。虽然以上描述了各种实施例,但这些仅是例子。例如,其它架构的计算环境能够包括并使用本发明的一个或多个方面。另外,本发明的一个或多个方面可涉及除存储器写和 /或发送之外的操作。另外,存储器写不必是RDMA写,并且/或者适配器可以是除能进行 RDMA之外的适配器。另外,适配器和存储器之间的互连可以是除PCI之外的互连,包括但不限于不提供对存储器写的响应的其它互连。另外,适配器的架构可以是除hfiniBand 之外的架构。也可以采用许多其它变型。另外,其它类型的计算环境能够受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其它仿真机构),其中(例如,在具有处理器和存储器的本地计算机系统上)仿真特定架构(包括例如指令执行、设计的功能(诸如地址转换)和设计的寄存器)或者其子集。在这种环境中,即使执行仿真器的计算机可具有不同于正被仿真的能力的架构,仿真器的一个或多个仿真功能也能够实现本发明的一个或多个方面。作为一个例子,在仿真模式中,对正被仿真的特定指令或操作解码,并且建立适当的仿真功能以实现各指令或操作。在仿真环境中,主机计算机例如包括存储器,存储指令和数据;指令取回单元, 从存储器取回指令并且可选地为取回的指令提供本地缓冲;指令解码单元,接收取回的指令并确定已取回的指令的类型;和指令执行单元,执行所述指令。所述执行可包括从存储器把数据载入到寄存器中;从寄存器把数据存储回存储器;或者执行由解码单元确定的某类型的算术或逻辑运算。在一个例子中,每个单元实现为软件。例如,由各单元执行的操作实现为仿真器软件内的一个或多个子例程。另外,可使用适合存储和/或执行程序代码的数据处理系统,该数据处理系统包括通过系统总线直接或间接耦接到存储器元件的至少一个处理器。存储器元件包括例如提供至少一些程序代码的暂时存储的在程序代码的实际执行期间采用的本地存储器、大容量存储器和高速缓冲存储器,以便减少在执行期间必须从大容量存储器检索代码的次数。输入/输出或I/O装置(包括但不限于键盘、显示器、定点装置、DASD、磁带、⑶、 DVD、拇指驱动器和其它存储介质等)能够直接或者通过中间I/O控制器耦接到系统。网络适配器也可以耦接到系统以使数据处理系统能够变为通过中间专用网或公用网耦接到其它数据处理系统或远程打印机或存储装置。调制解调器、线缆调制解调器和以太网卡仅是一些可用类型的网络适配器。本文使用的术语仅用于描述特定实施例的目的,而不是要限制本发明。本文所使用的单数形式“a” “an”和“the”也包括复数形式,除非上下文清楚地指示不是这样。另外, 应该理解,当在本说明书中使用时,术语“包括”和/或“包含”指定存在已说明的特征、整数、步骤、操作、元件和/或部件,但并不排除存在或增加一个或多个其它特征、整数、步骤、 操作、元件、部件和/或它们的组合。以下权利要求中的所有装置或步骤加功能元件的相应结构、材料、动作和等同物旨在包括用于结合具体要求保护的其它元素执行功能的任何结构、材料或动作。提供本发明的说明书是为了说明和例示的目的,而非是穷举的或者将本发明限制为所公开的形式。 在不脱离本发明的范围和精神的情况下,许多修改和变型对于本领域普通技术人员而言是清楚的。选择并描述这些实施例是为了最好地解释本发明的原理和实际应用,并且使其他本领域普通技术人员能够针对具有适合设想的特定用途的各种变型例的各种实施例来理解本发明。
1权利要求
1.一种用于帮助进行计算环境中的处理的方法,该方法包括在计算环境的接收适配器处接收来自计算环境的发送适配器的要由该接收适配器执行的操作;由接收适配器执行所述操作;由接收适配器确定所述操作是否已完成,其中所述确定包括由接收适配器执行读操作以证实所述操作已完成,所述读操作由接收适配器在本地发起;以及响应于通过所述读操作而确定所述操作已完成,向发送适配器发送确认。
2.如权利要求1所述的方法,其中所述操作的确认被延迟直至所述读操作证实了所述操作完成之后。
3.如权利要求2所述的方法,其中避免在所述读操作证实所述操作完成之前对所述操作进行确认。
4.如权利要求1所述的方法,其中所述操作包括对存储器进行写入的远程直接存储器存取写操作或发送操作。
5.如权利要求1所述的方法,其中所述操作把数据写到存储器,所述存储器经由帮助进行所述操作的互连而耦接到接收适配器,所述互连具有这样的结构不向发送适配器指示所述操作的完成。
6.如权利要求5所述的方法,其中所述互连是外设部件互连(PCI)。
7.如权利要求1所述的方法,其中所述读操作读取由所述操作所写的存储器中的一个或多个位置,并且其中所述操作是经由耦接接收适配器和存储器的互连执行的,所述互连具有有着排序规则的结构,所述排序规则指示所述读取未成功完成直至由所述操作把数据写到存储器之后。
8.如权利要求1所述的方法,其中所述方法还包括由接收适配器检查是否要延迟所述确认的发送,以及响应于所述检查指示要延迟所述确认的发送而执行所述确定。
9.如权利要求1所述的方法,其中所述方法还包括基于所述确认产生用于指示所述操作的完成的完成队列元素。
10.如权利要求1所述的方法,其中所述读操作对于发送适配器是透明的。
11.一种用于帮助进行计算环境中的处理的计算机系统,该计算机系统包括接收适配器,被配置为执行一种方法,所述方法包括在接收适配器接收来自发送适配器的要由该接收适配器执行的操作;由接收适配器执行所述操作;由接收适配器确定所述操作是否已完成,其中所述确定包括由接收适配器执行读操作以证实所述操作已完成,所述读操作由接收适配器在本地发起;以及响应于通过所述读操作而确定所述操作已完成,向发送适配器发送确认。
12.如权利要求11所述的系统,其中所述操作的确认被延迟直至所述读操作证实所述操作完成之后。
13.如权利要求12所述的系统,其中避免在所述读操作证实所述操作完成之前对所述操作进行确认。
14.如权利要求11所述的系统,其中所述操作包括对存储器进行写入的远程直接存储器存取写操作或发送操作。
15.如权利要求11所述的系统,其中所述操作把数据写到存储器,所述存储器经由帮助进行所述操作的互连而耦接到接收适配器,所述互连具有这样的结构不向发送适配器指示所述操作的完成。
16.如权利要求11所述的系统,其中所述读操作读取由所述操作所写的存储器中的一个或多个位置,并且其中所述操作是经由耦接接收适配器和存储器的互连执行的,所述互连具有有着排序规则的结构,所述排序规则指示所述读取未成功完成直至由所述操作把数据写到存储器之后。
17.如权利要求11所述的系统,其中所述方法还包括由接收适配器检查是否要延迟所述确认的发送,以及响应于所述检查指示要延迟所述确认的发送而执行所述确定。
18.—种帮助进行计算环境中的处理的方法,该方法包括在计算环境的接收适配器处接收来自计算环境的发送适配器的要由该接收适配器执行的第一操作,第一操作与第一确认类型关联;由接收适配器执行第一操作;响应于指示非延迟确认的第一确认类型,向发送适配器发送指示接收到第一操作的接收确认,所述接收确认不指示第一操作的完成;在所述接收适配器处接收来自所述发送适配器的要由所述接收适配器执行的第二操作,第二操作与第二确认类型关联;由接收适配器执行第二操作;响应于指示延迟确认的第二确认类型,由接收适配器确定第二操作是否已完成,其中所述确定包括由接收适配器执行读操作以证实第二操作已完成,所述读操作由接收适配器在本地发起;以及响应于通过所述读操作而确定第二操作已完成,向发送适配器发送完成确认。
全文摘要
本发明涉及延迟对操作的确认直至操作完成的方法和系统。从发送输入/输出(I/O)适配器(例如,能进行RDMA的适配器)向接收I/O适配器发送执行诸如远程直接存储器存取(RDMA)写操作或发送操作的写入存储器的操作的请求。接收I/O适配器接收该请求并发起该操作的执行,但延迟发送针对该操作的确认。该确认被延迟直至通过对于发送I/O适配器透明的由接收I/O适配器发起并执行的读操作确定了该操作完成(即,直至存储器被更新并且数据对于远程处理器可见)。
文档编号H04L29/08GK102446073SQ20111025225
公开日2012年5月9日 申请日期2011年8月30日 优先权日2010年8月30日
发明者D·克拉德多克, T·A·格里格 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1