通过远程直接存储器访问的任意大小的传输操作的制作方法

文档序号:7990865阅读:236来源:国知局
通过远程直接存储器访问的任意大小的传输操作的制作方法
【专利摘要】此处所描述的各实施例一般涉及用于在RDMA传输之上实现数据操作的协议,例如,SMB的版本。在各实施例中,各系统和方法使用指定用于协商RDMA连接并用于使用经协商的通信来传送SMB2数据的新消息的协议定义。新协议消息可包括新头部信息以确定消息大小、消息数和用于通过RDMA来发送SMB2数据的其他消息。该头部信息用于适应RDMA和SMB2之间的消息大小要求方面的差异。SMB直通(SMB?Direct)协议允许SMB2数据被分段成多个单独的RDMA消息,接收方可随后将这些RDMA消息逻辑地串接成单个SMB2请求或SMB2响应。SMB直通协议还可允许SMB2经由高效的RDMA直通放置来传送应用数据并在该传送完成时用信号表示该应用数据的可用性。
【专利说明】通过远程直接存储器访问的任意大小的传输操作
[0001]背景
[0002]诸如服务器消息块(SMB)或其版本(例如,SMB2)之类的文件访问协议可以用作主要用于在网络上的各节点之间提供对文件以及杂项通信的共享访问的应用层网络协议。在历史上,SMB或SMB2在传输控制协议(TCP)传输和传统的网络基础结构之上操作。尽管SMB2作为针对通用远程文件访问的协议已非常成功,但SMB2尚未广泛适用于要求高吞吐量和低等待时间文件输入/输出的远程文件访问。
[0003]远程直接存储器访问(RDMA)是从一个计算机的存储器进入另一计算机的存储器而不涉及该另一计算机的操作系统的直接存储器访问。该直接传送准许通过网络的高吞吐量、低等待时间数据传输,这在性能关键的部署中尤其有用。在应用执行RDMA读或写请求时,使用有RDMA能力的网络适配器将应用数据从源存储器缓冲区直接递送到目的地存储器缓冲区,在该传输中这些有RDMA能力的网络适配器不涉及中央存储单元(CPU)(也被简称为处理器)或操作系统。这些RDMA传输会减少等待时间并允许快速消息传输。不幸地是,RDMA的这些好处尚未被使用SMB2的系统利用,因为SMB2尚未用RDMA来操作。
[0004]虽然本【背景技术】中着眼于特定的问题,但本发明决不旨在限于解决那些特定问题。
[0005]概述
[0006]各实施例一般涉及将诸如SMB2操作(或,例如SMB操作的其他版本或文件访问协议操作)之类的数据操作实现在RDMA传输之上的协议和处理。在各实施例中,该协议定义指定用于协商RDMA连接以及用于例如使用经协商的连接来传送SMB2数据的新消息。在一实施例中,用于将SMB2操作实现在RDMA传输之上的协议是SMB直通(SMB Direct)协议。然而,其他实施例提供其他SMB协议、SMB协议版本或其他数据操作协议,而不偏离本公开的精神和范围。根据一实施例,新的SMB直通消息可包括新的头部信息,该新的头部信息可包括但不限于,以下各项中的一个或多个:CreditsRequested (请求的积分)、CreditsGranted(授予的积分)、Flag (标志)、Reserved (保留的)、RemainingDataLength (剩余数据长度)、DataOffset (数据偏移)、和DataLength (数据长度)。由于RDMA传输支持接收仅由接收方固定的大小的消息,而SMB2消息的大小可以在从大约一百字节到超过兆字节的非常大消息的非常大的范围内改变,因此头部信息被使用。SMB2协议被修改以识别RDMA能力的存在,而SMB直通协议将新的层添加到联网栈,以允许多个单独的RDMA消息被逻辑地串接成单个请求或响应以适应RDMA消息的固定大小限制以及SMB2消息收发所固有的不确定大小要求两者。对SMB2协议的改变以及对SMB直通协议的添加允许数据在各对等体的存储器之间的直接传送。在各实施例中,SMB2服务器可使用RDMA来进行从客户机的存储器读取或向客户机的存储器写入,以执行对数据的直接放置。服务器执行到客户机的RDMA写以完成SMB2读,并执行RDMA读以完成SMB2写。尽管SMB直通协议允许SMB/SMB2数据在对等体的存储器之间的直接传送,但根据各实施例,SMB直通协议可适合于其他协议。根据各实施例,SMB直通协议的双向、对等特性使其本身适于多种类型的数据传送操作。
[0007]RDMA传输还再次用仅由接收方固定的值来限制任何时刻可被处理的消息的数目。为了符合RDMA的这个要求,各实施例为各对等体提供在指定发送方可向接收方发送的RDMA消息的数目的协议头部中交换或分配每一相互对等体所请求的并向每一相互对等体授予的“积分”(其为数值)。积分是动态的,并由每一对等体独立地管理。用于管理积分并使足够的积分可用于执行SMB2交换的规则由在此公开的各实施例中的协议来定义。
[0008]在各实施例中,提供独立、双向的积分可准许每一个对等体发送请求和响应,而无需接收对等体的显式协商或先验知识和同意。与RDMA相关联的顺序发送可准许交换出乎意料的大的消息,而不会引起RDMA处理中的错误,也不会在这种情况发生时采取较不高效的协商传送。
[0009]根据各实施例,附加消息可用于协商协议版本和其他参数。协商请求消息可包括例如以下字段:CreditsRequested (请求的积分)、Reserved (保留的)、MinVersion (最小版本)、MaxVersion (最大版本)、OutboundSendSize (出站发送大小)、MaxInboundSendSize(最大入站发送大小)等。相应地,响应于该请求消息而发送的协商响应消息可包括例如Credi tsRequested (请求的积分)、Credit sGranted (授予的积分)、Vers ion (版本)、Reserved(保留的)、Status (状态)、OutboundSendSize (出站发送大小)、InboundSendSize (入站发送大小)等字段。这些参数支持对能力的协商、对资源的端到端优化、和与该协议的未来增强版本的兼容性。
[0010]提供本概述是为了以简化的形式介绍将在以下具体实施例中进一步描述的一些概念。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也决不旨在用于限制所要求保护的主题的范围。
[0011]附图简述
[0012]可以参考附图来更容易地描述本发明的各实施例,附图中相同的数字指示相同的项。
[0013]图1示出了根据本公开的各实施例的用于通过RDMA来交换SMB2消息的环境或系统的示例逻辑表示。
[0014]图2A描绘了根据本公开的各实施例的用于通过RDMA来发送SMB2消息的客户机系统的示例逻辑表示。
[0015]图2B示出了根据本公开的各实施例的用于通过RDMA来接收SMB2消息的服务器系统的逻辑表示。
[0016]图3A-3E示出了根据本公开的各实施例的在通过RDMA使用SMB2消息交换数据时发送或接收的消息的逻辑表示。
[0017]图4A-4C描绘了解说根据本公开的各实施例的用于通过RDMA使用SMB2协商通信的过程的操作特性的流程图。
[0018]图5A-?示出了解说根据本公开的各实施例的用于通过RDMA使用SMB2交换数据的过程的操作特性的流程图。
[0019]图6解说了描绘根据本公开的各实施例的用于使用RDMA直接数据传送来交换数据的过程的操作特性的流程图。
[0020]图7描绘其上可以实现本公开的各实施例的示例计算系统。
[0021]详细描述
[0022]本发明现将参考其中示出了各具体实施例的附图来更完整地描述各示例实施例。然而,其它方面能以许多不同的形式来实现,并且在本发明中包括具体的实施例不应被解释为将这些方面限于在此所述的各实施例。相反,包括附图中描绘的各实施例是为了提供全面和完整且将预期的范围完全地传达给本领域技术人员的公开。虚线可用于示出可选组件或操作。
[0023]各实施例一般涉及用于通过RDMA连接来交换SMB2数据的系统、方法和协议。RDMA提供传输数据方面的优点。例如,RDMA作出从一个存储器到另一设备或系统的存储器的传送。这些传送并不涉及处理器,并且因此减少了传输数据时所涉及的开销。此外,由于传输管理中不涉及处理器,因此RDMA用更少的时钟周期来传送数据。因此,RDMA提供低等待时间、高带宽的连接。
[0024]一般来说,SMB的版本(诸如,SMB2)是用于在网络上的各节点之间提供对文件和杂项通信的共享访问的应用层网络协议。SMB和SMB2因此是文件访问操作协议的示例。SMB2允许在于客户机和服务器之间交换消息时传送数据。此处的某些实施例的描述涉及SMB2。然而,在其他实施例中,SMB的任何版本或其他文件访问操作协议可被使用,而不偏离本公开的精神和范围。
[0025]一般由于操作中的差异,当前SMB2 (或SMB)当前不通过RDMA来操作,而反倒使用TCP来传输数据。本文的各实施例创建了用于通过有RDMA能力的网络协议来交换SMB2消息的系统和协议。首先,客户机和/或服务器(其可被统称为对等体)使用SMB2的分量来发现彼此的能力或才能。在一实施例中,由客户机发送询问有关服务器的信息的请求。响应服务器可以用与以下有关的信息来回答:该服务器所具有的网络接口卡(NIC)的数目、这些NIC的因特网协议(IP)地址、这些NIC的速度,这些NIC是否有RDMA能力和/或可能IP地址。在各实施例中,询问客户机可使用该信息来确定如何与该服务器对接。
[0026]根据本公开的各实施例,如果服务器有RDMA能力,则有RDMA能力的客户机可随后与该服务器协商RDMA连接。新接口(在各实施例中称为RDMA接口)是有RDMA能力的网络适配器和其他系统组件(包括SMB客户机)之间的接口。此外,新模块被添加到被称为SMB直通客户机/服务器的栈。首先,SMB直通客户机可能响应于能力请求而通过保留存储器缓冲区的至少一部分来预先发布用于从其他对等体接收消息的接收。SMB直通客户机可随后发送SMB直通协商请求包。SMB直通协商请求启动在各对等体之间建立SMB直通连接的过程。根据各实施例,SMB直通协商请求包括定义RDMA连接将如何起作用的一个或多个字段。
[0027]在各实施例中,SMB直通协商请求的部分是对“积分”的请求。各积分是对接收对等体的存储器缓冲区中的空间的分配。由于RDMA直接从一个存储器传送到另一存储器,接收对等体在存储器缓冲区中保留发送对等体可放置所传输的数据的空间。存储器缓冲区被以块(例如,1K字节块)为单位进行分配。在各实施例中,分配是固定的,因为该块大小在SMB直通连接已被建立后就不会改变。在其他实施例中,分配不是固定的,其中块大小可改变。在分配是固定的情况下,到存储器缓冲区的任何传输都不可超过块大小。为了传送具有大于块大小的大小的SMB2数据,发送方发送被存储在存储器缓冲区的两个或更多分配中的两个或更多数据包。为了保留存储器分配,发送对等体请求积分,其中所请求的积分的数目可以通过本地策略来管控,并且不一定受到消息的组合的影响。每一积分表示存储器缓冲区的一个块,并因此表示请求方可发送给其他对等体的消息。[0028]在本公开的各实施例中,服务器可以将响应(例如,SMB直通协商响应)发送给请求方。这个SMB直通协商响应还包括定义RDMA连接的各个字段。响应于该请求,SMB直通协商响应将多个积分提供给客户机。此外,SMB直通协商响应还可要求在客户机的存储器缓冲区中保留分配的积分。在各实施例中,SMB直通协商请求和SMB直通协商响应的交换建立RDMA连接。此后,可通过该连接来交换SMB2数据。
[0029]根据各实施例,通过RDMA连接来交换SMB2数据包括传送至少一个数据包。如果正被发送的SMB2数据小于块大小,则可以仅发送被称为SMB直通数据传送包的一个包。然而,根据一实施例,如果要被发送的SMB2数据大于块大小,则两个或更多个SMB直通数据传送包可被发送。RDMA允许顺序接收各数据包。因此,通信中接收到的第二数据包将被直接放置在第一接收到的数据包之后。为了利用RDMA的这个优点,SMB直通数据传送包包括通告要被发送的SMB2数据的总数以及在本数据包之后还留下多少要被发送的数据的字段。通过这种方式,SMB直通对等体可以确定SMB传送何时完成,并且SMB2数据可被重新组装。因此,SMB直通协议在各实施例中提供以低等待时间和低开销进行SMB2数据的快速传送,同时克服与通过RDMA传送SMB2数据相关联的问题。
[0030]图1中示出了根据此处所公开的各实施例的用于通过RDMA连接交换SMB2数据的示例逻辑环境或系统100。连接对等体(也被称为客户机102和服务器106) 102和106可通过网络104跨RDMA NIC (RNIC) 108a和108b之间的RDMA连接来移动SMB2数据。连接对等体可以是例如参考图7所描述的任何计算机系统。连接对等体在图1中被示为客户机/应用服务器102和文件服务器106。然而,这些对等体仅作为示例来提供。在这些实施例中,任何类型的客户机或服务器都可用作连接对等体。因此,RDMA连接可以例如在多个客户机、多个服务器、服务器场、服务器群集、消息服务器之间或在客户机和服务器之间。客户机/应用服务器102和文件服务器106仅出于理解本文所公开的各实施例的教示的目的而被作为示例来提供。
[0031]当通过网络104移动SMB2数据时,该网络104可以如例如参考图7所描述的。网络104 (虽然被示为独立的单个网络)可以是本领域的普通技术人员常规上理解的任何类型的网络。根据一实施例,网络可以是全局网络(例如,因特网或万维网,即缩写为“Web”)。它也可以是局域网(例如,内联网)或广域网。根据各个实施例,通过网络104的通信根据一个或多个基于标准数据包的格式(例如,H.323、IP、以太网、和/或ATM)来进行。
[0032]此外,在各实施例中,RNIC108(a和/或b)可以是支持RDMA的任何网络接口卡、网络适配器和/或网络接口控制器。存在提供RNIC的若干厂商。例如,iWARP或InfiniBand是支持RDMA的网络协议。RNIC可支持RDMA,其允许数据从存储器110a到存储器110b以及相反方向的直接传送。这些数据传送不需要或不包括处理器112a或112b的监督。因此,根据本公开的各实施例,RDMA传送是高带宽、低等待时间和低开销的。处理器112和存储器110可以如例如参考图7所描述的。
[0033]尽管图1示出了用于通过RDMA的SMB2数据交换的通用环境,图2A描绘了根据此处所公开的各实施例的用于通过RDMA连接来发送或接收SMB2数据的示例对等体102。在这个示例中,对等体102是客户机和/或应用服务器。根据本公开的各实施例,客户机102的各个组件可以包括软件和/或硬件。然而,为了解说的目的,此后的各组件将被描述为软件模块。在各实施例中,客户机102包括但不限于以下中的一个或多个:内核202a、至少一个用户应用220、存储器缓冲区222a、一个或多个计时器224a和/或一个或多个设置226a。在各实施例中,“内核”是在其中管理存储器、文件和外围设备,触发和启动应用以及分配系统资源的操作系统的核心。
[0034]在各实施例中,内核202a可包括但不限于以下中的一个或多个:W?ST32?文件应用编程接口(API)或等价物204、SMB2模块(被示为SMB2客户机208)、SMB直通模块(被示为SMB直通客户机214a)和RDMA接口 216a。SMB直通模块和RDMA接口 216a被引入来执行在此描述的各方法和过程。这些模块、组件和/或接口将被描述如下。
[0035]在各实施例中,WIN32?文件API204可以是内核202a和一个或多个用户应用220之间的接口。在一示例实施例中,WIN32?文件API204是微软WINDOWS?操作系统中可用的API集合。几乎所有的W丨NDOWS?程序与该WINDOWS? api交互以执行各种功能。WIN32?文件API204的各实施例提供对WINDOWS?系统可用的各资源(诸如,举例来说文件系统、设备和/或错误处理)的访问。根据各实施例,WIN32?文件API204可提供对内核以及其他功能的访问。在各实施例中,WIN32?文件API204还允许系统对各远程文件执行使用各底层的文件访问功能的各动作,这些底层的文件访问功能进而使用各种联网能力并允许远程访问。
[0036]在各实施例中,SMB2客户机208管理在各应用和SMB2服务器212b所提供的各接口之间的通信。由于各设备可以以可能与操作系统不匹配的速度操作,因此操作系统和设备驱动器之间的通信主要通过I/O请求包(IRP)来完成。这些数据包类似于例如网络数据包或WINDOWS?消息数据包。将这些数据包从操作系统传递到特定驱动器,并从一个驱动器传递到另一驱动器。在各实施例中,SMB2客户机208可以将各I/O请求重定向到各网络资源,并组成各SMB消息以执行通过网络的通信。SMB2客户机208通过RDMA将SMB数据包传送到SMB直通客户机214a以交换SMB数据包或数据。类似地,根据一实施例,SMB2服务器212b也可使用各IRP 来发送来自SMB2客户机208对服务器的存储的文件请求。
[0037]在各实施例中,SMB直通模块214是从内核202中的SMB直通网络提供商接口(NPI)创建的实例。SMB直通模块214将API (称为SMB直通NPI)展示给SMB2客户机和SMB2服务器模块。SMB2客户机/服务器模块使用这个SMB直通NPI来作出通过SMB直通连接发送或接收数据的请求。根据各实施例,SMB直通模块214实现SMB直通协议,并位于SMB2客户机/服务器模块和底层的RDMA接口之间。SMB直通NPI允许SMB直通协议。SMB直通NPI可创建和破坏SMB直通连接,通过SMB直通连接发送和接收数据、注册/注销存储器、通过SMB直通连接执行从对等体的RDMA读数据操作/到对等体的RDMA写数据操作、在SMB直通连接被对等体断开连接时接收通知、跨SMB直通连接编组/取消编组供传输的SMB2数据包及其他操作。为了完成这些任务,创建可管理发送按照RDMA协议存储的SMB2数据以及从存储器缓冲区222检索按照RDMA协议存储的SMB2数据的SMB直通模块214。因此,SMB直通模块214将数据从仅仅SMB2数据转换成RDMA,并从RDMA转换回SMB2。在本公开的各实施例中,SMB直通模块214与另一新模块通信(即,RDMA接口 216)以执行这些操作。
[0038]根据各实施例,SMB直通模块214执行若干函数。SMB DirectReceiveEvent (SMB直通接收事件)回调函数向SMB2客户机208或SMB2服务器212b通知已在SMB直通端点上接收了消息。SMB DirectDisconnectEvent (SMB直通断开连接事件)事件回调函数向SMB2客户机208或SMB2服务器212b通知端点上的连接已被断开连接。SMB DirectAcceptEvent(SMB直通接受事件)事件回调函数向SMB2服务器212b通知监听端点上的传入连接已被接受。SMBDirectListen (SMB直通监听)函数创建监听给定的本地地址上的传入连接的监听器端点。SMB DirectCloseEndpoint (SMB直通关闭端点)函数关闭端点并释放任何关联资源。SMB DirectConnect (SMB直通连接)函数将端点连接到远程SMB直通传输地址。SMB DirectDisconnect (SMB直通断开连接)函数使端点与远程SMB直通传输地址断开连接。SMB DirectSend (SMB直通发送)函数将数据缓冲区发送到远程SMB直通对等体。SMBDirectRegisterMemoryCSMB直通注册存储器)函数允许SMB2客户机208注册供在RDMA读/写操作中使用的存储器缓冲区。SMB DirectUnregisterMemory(SMB直通注销存储器)函数注销先前经由SMB DirectRegisterMemory API注册的存储器缓冲区。SMB DirectRdmaRead(SMB直通RDMA读)函数使得RDMA直接从与该端点连接的远程对等体的存储器中读数据。SMB DierctRdmaRead (SMB直通RDMA写)函数使得RDMA将数据直接写入与该端点连接的远程对等体的存储器中。这些函数及其操作将结合图6来解释。
[0039]在一实施例中,RDMA接口 216是与各RNIC的厂商专用的RDMA功能对接的新接口。RDMA接口 216可给予对RDMA设备的各功能的访问。RDMA设备的各功能可包括监听端口以接收SMB直通数据包,并将SMB2数据提供给SMB直通模块214。在一实施例中,RDMA设备可包括用于管理通过RDMA连接的通信的内核模式RDMA模块。此外,RDMA设备可包括RDMA访问层和扩展以用于对正发送RDMA消息的端口进行访问和监听。根据各实施例,代理驱动器可以与RNIC的硬件驱动器对接。
[0040]在各实施例中,用户应用220可以是处理器为用户或其他软件执行的任何软件。用户应用220的示例包括web浏览器、电子邮件等。这些用户应用220与内核202a对接以发送数据并特别地从远程存储位置(诸如文件服务器106)接收数据。
[0041]在一实施例中,存储器缓冲区222可以是如参考图7描述的任何类型的存储器。存储器缓冲区222可被用来接收SMB直通消息和/或这些消息中承载的SMB2数据,并可被用来在传输传出SMB直通消息之前准备(stage)那些消息。因此,根据各实施例,可将存储器缓冲区222划分成如此后描述的各块。
[0042]在各实施例中,计时器224是可从预定时间倒计时到零的时钟集合。因此,计时器224表示所存储的数据以及由处理器执行的时钟功能。计时器224的期满可以触发RDMA接口中的一个或多个功能,或者伴随SMB直通模块214的一个或多个功能。在其他实施例中,计时器可以从零计数到一阈值,或执行某种其他类型的计数。这些计时器中的一些可以包括SendCreditGrantTimer (发送积分授予计时器),SendCreditGrantTimer是在SendCreditCount(发送积分计数)达到零时启动并在计时器部分224中操作的计时器。远程连接的对等体必须直到这个计时器期满才能授予附加的发送积分。SendCreditGrantTimer(发送积分授予计时器)还可以调节客户机/服务器等待该对等体向其授予附加的发送积分的时间量。根据各实施例,当客户机/服务器发现由于SendCreditsCount (发送积分计数)的值为零而无法向对等体发送数据包时,则客户机/服务器设置将在预定秒数内期满的计时器。如果计时器在发送积分变得可用之前期满,则客户机/服务器将该连接断开连接。在一实施例中,空闲连接计时器调节客户机/服务器等待对等体发送数据包的时间量。如果在过去的预定秒数内没有从对等体接收到数据包,则客户机/服务器向该对等体发送保活请求,并设置KeepAliveResponse (保活响应)计时器。根据本公开的各实施例,如果在KeepAliveResponse计时器期满之前没有接收到响应,则该连接被断开连接。
[0043]根据本公开的各实施例,还可以为通过SMB直通连接的任何SMB直通数据传送设置 KEEPALIVE_REQUESTED (已请求保活)标志。在一实施例中,KEEPALIVE_REQUESTED 标志是对接收对等体尽快对发送方作出响应,使得发送方知道该接收方仍被连接并且是可作出响应的请求。一个或多个系统可尝试在没有消息交换的情况下使该连接过期。因此,具有KEEPALIVE_REQUESTED标志的消息可以维护该连接。在替换实施例中,设有KEEPALIVE_REQUESTED标志的消息可被用于请求或接收积分。
[0044]在一实施例中,设置226存储对与通过RDMA交换SMB消息相关的数据进行存储和检索。设置226可被存储在如参考图7所描述的任何类型的存储器或存储设备中。作为一示例,这些设置可包括被设置之后的多少秒内积分补充计时器期满、对等体愿意从另一对等体接收的最大大小的SMB直通数据传送包是什么、或者对等体将授予另一对等体的发送积分的数目的限制是什么等。
[0045]在各实施例中,SMB_DIRECT_ENDPOINT (SMB_直通_端点)结构可以是表示SMB直通端点的不透明结构。SMB直通端点在功能上与例如网络套接字类似。根据一实施例,SMB2客户机208或SMB2服务器212b可能不直接访问该结构的各成员,而是通过SMB直通模块214来访问该结构的各成员。SMB_DIRECT_ENDPOINT结构可包括若干操作的数据。MwReleaseList (存储器窗口释放列表)是可被释放回到该远程连接的对等体的存储器窗口的列表。这些存储器窗口与已完成的各RDMA读/写操作相关联。ReceiveCreditCount(接收积分计数)是要被授予远程连接的对等体的接收积分的数目。该端点的主机可具有至少这个数目的在该端点上待处理的接收区。SendCreditCount (发送积分计数)是该端点的主机当前具有的发送积分的数目。远程连接的对等体可具有至少这个数目的在其端点上待处理的接收。PendingRdmaReadCount (待处理RDMA读计数)是这个端点上已被发起但尚未完成的RDMA读操作的数目。PendingRdmaReadLimit (待处理RDMA读限制)是该端点上可同时待处理的RDMA读操作的最大数目。在各实施例中,DeferredlnitiatorOpQueue(被推迟的发起方操作队列)是因用于发出各发起方操作的端点资源当前不可用而被推迟的这些发起方操作的队列。NdKQp (NDK队列对)是表示接收以及发起方请求队列的队列对对象。NdkReceiveCq (NDK接收完成队列)是NDK接收完成队列。将各接收请求完成排队在该队列中。NdkReceiveQueueCapacity (NDK接收队列容量)是该端点上可同时待处理的各接收请求的最大数目。NdklnitiatorCq (NDK发起方完成队列)是NDK发起方完成队列。例如,发送、绑定、快速注册、读、写和无效请求完成被排列在这个队列中。在各实施例中,NdklnitiatorQueueCapacity (NDK发起方队列容量)是该端点上可同时待处理的发送、绑定、快速注册、读、写和无效请求的最大数目。
[0046]图2B描绘了根据此处所公开的各实施例的用于通过RDMA连接来发送或接收SMB2数据的示例对等体106。在这个示例中,对等体106是文件服务器。文件服务器106的各个组件可包括软件和/或硬件。尽管各实施例将这些组件描述为软件模块,其他实施例提供其他类型的模块。在各实施例中,文件服务器106包括但不限于以下中的一个或多个:内核202b、NTFS232、存储器缓冲区222b、一个或多个计时器224b和/或一个或多个设置226b。这些功能中的一些与图2A中描述的那些功能相同或相似。
[0047]根据各实施例,内核202b (和/或如参考图2A所描述的)可包括但不限于以下中的一个或多个:输入/输出(I/o)管理器206b、SMB2服务器212b、SMB直通服务器214b和RDMA接口 216b。这些功能中的一些与图2A中描述的那些功能相同或相似。
[0048]在各实施例中,SMB2服务器212b是为各MICROSOTO:服务器实现服务器侧的SMB2协议的驱动器。其他实施例提供其他类型的服务器。SMB2服务器212b可启动并使用SMB来交换数据,并供应该数据或从I/O管理器206b接收该数据。在各实施例中,SMB2服务器212b通过网络连接发送或接收SMB2数据。SMB2服务器212b用于通过供服务器的网络来通信。因此,根据各实施例,SMB2服务器212b提供SMB2数据以供传输,或通过网络传输接收SMB2数据。
[0049]在各实施例中,新技术文件系统(NTFS)232可以是标准文件系统。NTFS包括支持元数据和使用先进的数据结构来改善性能、可靠性和盘空间利用,以及诸如安全性访问控制列表(ACL)和文件系统通信等附加扩展。NTFS用于组织并存储一个或多个客户机的文件数据。可通过与客户机的通信(诸如通过RDMA的SMB2数据传送)来将这些文件数据提供给客户机。
[0050]根据各实施例,SMB直通创建RDMA连接以交换SMB2数据。该协议通过协商过程创建RDMA连接。在对等体102和106协商了 RDMA连接后,对等体102或106中的任一方可通过RDMA连接发送SMB2数据。
[0051]根据各实施例,第一 SMB直通协商请求包300在图3A中被示出。相应地,在各实施例中,相关联的SMB直通协商响应请求包336在图3B中被示出。此外,根据各实施例,用于传送数据的SMB直通数据传送包338在图3C中被示出。每一消息或数据包可以例如被创建、传送、存储和/或接收。在各实施例中,数据包或消息可各自包括存储不同数据的部分或字段。
[0052]转至图3A,根据本公开的各实施例的SMB直通协商请求包300被示出。SMB直通协商请求包300可包括但不限于以下字段中的一个或多个,例如:MinVersion (最小版本)302、MaxVersion (最大版本)304、Reserved (保留的)306、CreditsRequested (请求的积分)308、PreferredSendSize (偏好的发送大小)310、]\&0^606;^63丨26 (最大接收大小)312、和/或MaxSMB2MessageSize (最大SMB2消息大小)314.SMB直通协商请求包300可包括比图3A中示出的那些字段更多或更少的字段,如省略号316所表示的。
[0053]在一实施例中,MinVersion字段302可包括客户机/请求方102支持的最低SMB直通协议版本的值。MaxVersion字段304可存储客户机/请求方102支持的最高SMB直通协议版本。这个值可等于或大于MinVersion字段302的值。在各实施例中,客户机/请求方支持在MinVersion字段302中的值和MaxVersion字段304中的值之间的范围中(包括)的所有协议版本。根据一实施例,Reserved字段306仅是针对将来的未知要求的保留字段,并且没有被客户机使用。
[0054]根据各实施例,CreditsRequested字段308包括客户机/请求方102正请求的来自服务器/接收方106的发送积分的数目的值。在各实施例中,CreditsRequested字段308中的值大于零(0),以确保SMB2数据可在后续消息中被发送。然而,根据各实施例,CreditsRequested字段308中的值可以是任何数字,并可基于平均使用来设置。在各替换实施例中,CreditsRequested字段308中的值可至少基于要被发送的SMB消息的大小。在又一些实施例中,请求积分时可考虑其他因素或附加因素。同样,在各实施例中,大型消息可使用RDMA来传送。
[0055]PreferredSendSize字段310可包括客户机/请求方102希望能够向服务器/接收方106传送的最大SMB直通数据传送包338的大小(可能以字节为单位)。MaxReceiveSize字段312包括客户机/请求方102将接受的来自服务器/接收方106的最大SMB直通数据传送消息的大小(可能以字节为单位)。在各实施例中,这个值可等于客户机102所设置的存储器缓冲区222a的块或预定分配。因此,没有单个SMB2数据传送会超过该存储器分配。在各实施例中,这个值大于或等于阈值128,该阈值128至少为数据传送包和小型SMB2消息中的SMB直通头部的大小。根据一实施例,MaxSmbZMessageSize字段314可以包括客户机/请求方将接受的来自服务器/接收方106的最大SMB2协议消息的大小(可能以字节为单位)。这个值被客户机102预先确定并设置。在各实施例中,MaxSmbZMessageSize字段314中的值可以不大于存储器缓冲区222a的总大小。通过这种方式,没有SMB消息可溢出存储器缓冲区222a。然而,根据一实施例,MaxSmb2MessageSize字段314的值可以小于如用户所确定的存储器缓冲区222a中的存储器量。
[0056]转至图3B,根据各实施例的SMB直通协商响应包336被示出。SMB直通协商响应包336可被对等体106发送以完成对RDMA连接的协商。SMB直通协商响应包336可包括但不限于以下字段中的一个或多个,例如:MinVersion (最小版本)302b、MaxVersion (最大版本)304b、PreferredVersion (偏好的版本)318、Reserved (保留的)306b、CreditsRequested (请求的积分)308b、Credi t sGranted (授予的积分)320a、Status (状态)322、PreferredSendSize(偏好的发送大小)310b、MaxReceiveSize (最大接收大小)312b 和 / 或 MaxSMB2MessageSize(最大SMB2消息大小)314b。SMB直通协商响应包336可包括比图3B中示出的那些字段更多或更少的字段,如省略号324所表示的。
[0057]根据各实施例,MinVersion字段302b可包括服务器/接收方106支持的最低SMB直通协议版本的值。MaxVersion字段304b可存储服务器/接收方106支持的最高SMB直通协议版本。这个值可等于或大于MinVersion字段302b的值。在各实施例中,服务器/接收方106支持在MinVersion字段302b中的值和MaxVersion字段304b中的值之间的范围内(包括)的所有协议版本。PreferredVersion字段318存储常用SMB直通协议版本的值。在各实施例中,PreferredVersion字段318的值在由客户机的SMB直通协商请求包300的MinVersion字段302a和MaxVersion字段304a所指定的范围之内。在其他实施例中,PreferredVersion字段318的值在由服务器的SMB直通协商响应包336的MinVersion字段302b和MaxVersion字段304b所指定的范围之间。根据各实施例,Reserved字段306b仅是针对将来的未知要求的保留字段,并且没有被服务器使用。
[0058]根据各实施例,CreditsRequested字段308b包括服务器/接收方106正请求的来自客户机/请求方102的发送积分的数目的值。在各实施例中,CreditsRequested字段308b中的值大于零(0),以确保SMB2数据可在后续消息中被发送。然而,CreditsRequested字段308b中的值可以是任何数字,并可基于平均使用来设置。在各替换实施例中,CreditsRequested字段308b中的值基于要被发送的SMB消息的大小或者可基于其他因素。根据各实施例,大型消息可在一个积分被请求时被发送。CreditsGranted字段320a包括从服务器/接收方106向客户机/请求方102授予的积分的数目。在各实施例中,CreditsGranted字段320a的值大于零(0),以允许客户机/请求方102发送下一 SMB直通消息。
[0059]在各实施例中,状态字段322包括至少一个标志或值。在一实施例中,状态字段322包括一个或两个值,即状态成功或状态不被支持。成功标志指定服务器/接收方106已接受了客户机/请求方的SMB直通协商请求包300。不被支持标志指定服务器/接收方106已拒绝了客户机/请求方102的SMB直通协商请求包300。
[0060]根据各实施例,PreferredSendSize字段310b可包括服务器/接收方106希望能够向客户机/请求方102传送的最大SMB直通数据传送包338的大小(可能以字节为单位)。在各实施例中,PreferredSendSize字段310b小于或等于SMB直通协商请求包300中的MaxReceiveSize字段312a。因此,服务器/接收方106所发送的数据包大小可以不大于客户机/请求方102的存储器缓冲区222a分配。
[0061 ] 在各实施例中,MaxReceiveSize字段312b包括服务器/接收方10b将接受的来自客户机/请求方102的最大SMB直通数据传送消息的大小(可能以字节为单位)。这个值可以等于服务器/接收方106所设置的存储器缓冲区222b的块或预定分配。因此,在各实施例中,没有SMB2数据传送将超过该存储器分配。在各实施例中,这个值大于或等于阈值128,该阈值128至少是数据传送包中的SMB直通头部的大小。MaxSmb2MessageSize字段314b可包括服务器/接收方10b将接受的来自客户机/请求方102的最大SMB2协议消息的大小(可能以字节为单位)。这个值由服务器/接收方106预先确定并设置。在各实施例中,MaxSmb2MessageSize字段314b中的值可以不大于存储器缓冲区222b的总大小。通过这种方式,没有SMB消息可溢出存储器缓冲区222b。然而,根据一实施例,MaxSmb2MessageSize字段314b的值可以小于如用户所确定的存储器缓冲区222b中的存储器量。
[0062]根据在此公开的各实施例的SMB直通数据传送包338在图3C中示出。SMB直通数据传送包338可被发送以跨在协商期间建立的RDMA连接来传送SMB2数据。客户机/请求方102或服务器/接收方106中的任一方可发送或接收SMB2数据。由此,客户机/请求方102和服务器/接收方106两者一般被称为接收方和发送方。SMB直通数据传送包338可包括但不限于以下字段中的一个或多个,例如:CreditsRequested (请求的积分)308c、CreditsGranted (授予的积分)320b、Reserved (保留的)306c、RemainingDataLength (剩余数据长度)326,DataOffset (数据偏移)328,DataLength (数据长度)330和/或SMB2数据332。根据各实施例,SMB直通数据传送包338可包括比图3C中示出的那些字段更多或更少的字段,如省略号334所表示的。
[0063]在各实施例中,CreditsRequested字段308c包括发送方正请求的来自接收方的发送积分的数目的值。在各实施例中,CreditsRequested字段308c中的值大于零(0),以确保SMB2数据可在后续消息中被发送。然而,CreditsRequested字段308c中的值可以是任何数字,并且可基于所预测的将来使用(即,还要多少数据包来完成SMB2数据的传送)来设置。CreditsGranted字段320b包括从发送方向接收方授予的积分的数目。在各实施例中,CreditsGranted字段320b的值可以是零,因为对等体没有义务履行对等体对积分的请求。然而,对等体可以在CreditsGranted字段320b中提供积分以允许客户机/请求方102发送下一 SMB直通消息。根据在此公开的各实施例,Reserved字段306c仅是针对将来的未知要求的保留字段,并且没有被客户机使用。
[0064]在各实施例中,RemainingDataLength字段326可包括接收方还需要接收的经分段的SMB2消息的字节数。因此,这个字段中除零以外的任何值均向接收方指示具有更多数据的另一 SMB直通数据传送包338将被发送。根据各实施例,如果SMB直通数据传送包338承载完整的SMB2消息或为承载经分段的SMB2数据的两个或更多个SMB直通数据传送包338中的最后一个,则RemainingDataLength字段326中的值为零(0)。RDMA能够顺序发送各消息。由此,重新组装各消息被简化了,因为各顺序消息按被接收的严格次序来重新组装。因此,各实施例例如放弃了对头部中的消息标识符的需要,或者放弃了对其他更复杂的重新组装技术的使用。
[0065]在一实施例中,DataOffset字段328包括从SMB直通数据传送包338的开始处到所封装的SMB2协议消息的前8字节的对齐字节的偏移的以字节为单位的值。在各实施例中,如果DataLength字段330的值为零,则DataOffset字段328也被设置为零。根据一实施例,如果DataLength的值不是零,则DataOffset字段328为某一值,并且可大于或等于24字节,24字节是该头部中的其他字段的大小。DataLength字段330可包括SMB2数据字段332中所封装的SMB2协议消息的以字节为单位的大小。在各实施例中,如果SMB直通数据传送包338没有封装SMB2协议消息,则DataLength字段330的值被设为零。根据各实施例,SMB2数据字段包括任何SMB2协议消息。
[0066]根据在此公开的各实施例,SMB2读/写请求340在图3D中被示出。SMB2读/写请求340可以被封装在SMB直通数据传送包338中以执行直接的RDMA读/写。直接的RDMA读/写仅发送未经编码的应用数据。根据本公开的各实施例,SMB2读/写请求340在服务器106将执行到客户机102的RDMA写的情况下可以是SMB2读请求,并在服务器106将执行从客户机102的RDMA读的情况下可以是SMB2写请求。无论如何,SMB2读/写请求340中的各字段是类似的。应注意,服务器106执行客户机102所请求的RDMA传送。SMB2读/写请求340可包括但不限于以下字段中的一个或多个,例如:Channel(信道)342、Channel InfoOff set (信道信息偏移)346 和 ChannellnfoLength (信道信息长度)348。在一实施例中,这些字段可包括用于完成RDMA数据传送的控制(steering)信息。根据一实施例,Reserved字段344仅是针对将来的未知要求的保留字段,并且没有被使用。SMB2读/写请求340可包括比图3D中示出的那些字段更多或更少的字段,如省略号351所表示的。所示的这些字段出于说明的目的被提供,并且不旨在进行限制。
[0067]在各实施例中,Channel字段342包括数据被寻找到的信道的值。RDMA连接可包括若干信道。根据各实施例,信道信息可包括对等体向RDMA设备提供来完成该传送的信息。例如,如图3E中所示出的,信道信息可包含一个或多个令牌、偏移、和各存储器片段的长度,以及其他RDMA专用的信息。
[0068]在一实施例中,ChannelInf oOff set 字段 346 和 Channel InfoLength 字段 348 是指向数据包中的偏移、令牌和长度信息的指针。这些指针给出这些信息可位于SMB2读或写请求中的位置。在各实施例中,标志350包括用于控制或改变RDMA直通数据传送的行为的任何息。
[0069]转至图3E,根据在此所公开的各实施例,RDMA信道描述符352被示出。RDMA信道描述符352可通常在信道字段342中被封装在SMB直通请求中。RDMA信道描述符352可包括但不限于以下字段中的一个或多个,例如:Offset (偏移)354、Token (令牌)356和Length(长度)358。在一实施例中,这些字段为用于完成RDMA数据传送的控制信息。RDMA信道描述符352可包括比图3E中示出的那些字段更多或更少的字段,如省略号360所表示的。所示出的这些字段出于说明的目的被提供。为了完成直接数据传送,RDMA基于信道字段342中的信息被定向到具有将被读或写的数据以及该数据的长度的存储器。由于直通数据传送仅发送应用数据,因此该信息有助于确保合适的传送。
[0070]根据一实施例,0ffset354是数据开始之处的以字节或比特为单位的值。0fTset354可以从存储器块起始地址开始测量,该存储器块起始地址可以使用Token356中提供的信息来定位。Length358是数据片段有多长的以比特或字节为单位的值。这一控制信息指导例如直接数据传送。
[0071]根据此处所公开的一实施例,图2A和图2B中描绘的各个软件功能模块的交互被进一步示出在图4A-4C中描绘的用于协商RDMA连接的各操作步骤400中。图4A示出了根据本公开的各实施例的数据包408和424在客户机102和服务器106之间的传送的表不400A。根据本公开的各实施例,图4B以客户机102的角度进行,而图4C以服务器106的角度进行。应注意,过程400被描述为客户机请求RDMA连接并且服务器106作出响应。然而,根据各实施例,服务器106作出请求并且客户机作出响应的相反情况可以为真。此外,该方法可例如在多个客户机之间和/或在多个服务器之间进行。
[0072]转至图4B,示出了根据一实施例的用于通过RDMA使用SMB2协商连接的示例操作步骤400B。过程400B在开始操作402B处被发起,并且过程400B前进到客户机预先发布接收区404。在各实施例中,RDMA接口 216a自动地检测RNIC108a/108b并利用RNIC108a/108b以查看它们是否可用并被合适地配置。接着,在一实施例中,SMB直通NPI被SMB直通模块214展示。SMB直通客户机214a可以打开RDMA适配器的处理程序以形成针对SMB2客户机208的RDMA连接。在一实施例中,SMB直通客户机214a随后通过RDMA接口 216a请求RDMA连接。SMB直通客户机214a还可创建存储器缓冲区222a中的分配,并确定对于初始发送积分要请求什么,以及对于接收积分什么将被允许。在各实施例中,存储器缓冲区222a中的分配可以具有预定大小。根据各实施例,存储器缓冲区222a中的存储器总量也可被确定。
[0073]返回到图4B,SMB直通客户机214a可随后构建406SMB直通协商请求包300来发送到RDMA接口 216a。SMB直通协商请求包300在例如图3A中被描述。由此,SMB直通客户机214a设置了 SMB直通协商请求包300中的各字段。因此,SMB直通客户机214a确定客户机102可支持的SMB直通的最小版本和最大版本。SMB直通客户机214a确定要请求的积分数。在各实施例中,要请求的积分数可基于要发送的已知的将来SMB消息、基于将来可能发生的预测的SMB流量、基于对SMB的历史使用、或依据某一其他方法。发送大小用内部函数和速度考虑来确定。最大接收大小可与存储器缓冲区分配的大小挂钩。最后,最大SMB消息大小被确定并被设置(一般,最大SMB消息大小大到足以允许对等体发送大型SMB2数据包,但并不大到会使用所有存储器)。根据本公开的各实施例,该收集的信息被输入到SMB直通协商请求包300中。
[0074]接着,SMB直通客户机214a发送408B SMB直通协商请求包300。在一实施例中,SMB直通客户机214a通过发送操作请求RDMA接口 216a发送SMB直通协商请求包300。RDMA接口 216a与RDMA接口 216b通信,并将SMB直通协商请求包300发送给服务器106。通过发送SMB直通协商请求包300,SMB直通客户机214a启动协商请求期满计时器410。协商请求期满计时器可具有预订的值,并从该值到零倒计时。SMB直通客户机214a随后等待对SMB直通协商请求包300的响应。如果确定411协商请求期满计时器在接收到对SMB直通协商请求包300的响应之前期满,则过程400B以否继续前进至结束操作432B,在操作432B该连接被停止。
[0075]转到图4C的开始操作402C,在各实施例中,服务器106预测SMB直通协商请求包300并且预先发布接收区412。根据各实施例,SMB2服务器212b可监听活动,并自动发现RDMA在RNIC108b的端口上可用并被绑定在该端口上。SMB2服务器212b打开监听器端点,并确定在RNIC108b上RDMA可用。接着,SMB2服务器212b随后开始与SMB直通服务器214b的通信。SMB直通服务器214b可打开RDMA连接,并接收RDMA适配器处理程序。SMB直通服务器214b随后通过RDMA接口 216b请求RDMA连接。SMB直通服务器214b可随后接受RDMA连接,由此向客户机102通知该连接请求成功了。来自RDMA接口 216a的这个成功指示触发客户机发送协商请求。
[0076]根据各实施例,SMB直通服务器214b还可创建存储器缓冲区222b中的分配,并确定对于初始发送积分要请求什么,以及对于接收积分什么将被允许。存储器缓冲区222b中的分配可以具有预定大小。根据本公开的各实施例,存储器缓冲区222b中的存储器总量也可被确定。
[0077]返回到图4C,SMB直通服务器214b可随后启动协商请求期满计时器414。在各实施例,服务器106处的协商请求期满计时器可具有预定值,并从该值到零倒计时。SMB直通服务器214b随后等待以接收SMB直通协商请求包300。在等待时,SMB直通服务器214b监视RDMA连接,并确定416该协商请求期满计时器是否在接收SMB直通协商请求包300之前期满。如果协商请求计时器期满,则过程400C以否前进至结束操作432 C,在操作432 C该连接被停止。
[0078]然而,如果SMB直通协商请求包300在协商请求期满计时器的期满之前到达RNIC108b及RDMA接口 216b,则过程400C以是前进至通过RDMA接口 216b来接收并确认408C SMB直通协商请求包300,并将该数据包放置在存储器缓冲区222b中。接着,SMB直通服务器214b被通知该数据,并确定SMB直通协商请求包300是否有效418。
[0079]在各实施例中,为了确认SMB直通协商请求包300,SMB直通服务器214b从该SMB直通协商请求包300读数据,并确定以下,例如-MaxVersion字段304的值是否小于MinVersion字段302的值或是否该范围中的值都不被支持;CreditsRequested字段308的值是否为零MaxReceiveSize字段312的值是否小于预定阈值(例如,128字节);或者,MaxSmb2MessageSize字段314的值是否小于预定阈值。如果以上各项中的任一项为真,则SMB直通协商请求包300不是有效的,并且过程400C以否前进至结束操作432C,在操作432C,SMB直通服务器214b断开连接。如果所有这些检查都不为真,则过程400C以是前进至处理SMB直通响应420,在该处理中,SMB直通协商请求包300被SMB直通服务器214b发送到SMB直通客户机214a。
[0080]在各实施例中,在处理SMB直通协商请求包300时,SMB直通服务器214b将设置ProtocolVersion (协议版本)设为等于客户机102和服务器106所共享的最大协议版本。SMB直通服务器214b还确定要授予多少积分。在各实施例中,要授予的积分数取决于存储器缓冲区222b中的可用空间或其他因素。在作出这些确定后,SMB直通服务器214b生成422SMB直通协商响应包336。在一实施例中,SMB直通服务器214b设置SMB直通协商响应包336中的各字段。例如,PreferredVersion字段被设置成设置ProtocolVersion中的值。根据一实施例,CreditsGranted320a被设置成SMB直通服务器214b所确定的积分数。以与SMB直通协商请求包300类似的方式来填充其他字段。SMB直通协商响应包336被随后发送424C到客户机。在各实施例中,SMB直通服务器214b将SMB直通协商响应包336发送给RDMA接口 216b来发送。
[0081]返回到图4B,根据各实施例,SMB直通客户机214a可确定411该响应是否在协商期满计时器的期满之前被接收到。如果该响应在该计时器的期满之前被接收到,则过程400B以是前进至确认424B SMB直通协商响应包336。RDMA接口 216a将消息接收到存储器缓冲区222a中。SMB直通客户机214a读SMB直通协商响应包336并随后确认该消息。为了确认SMB直通协商响应包336,SMB直通客户机214a确定428以下,例如:根据本公开的各实施例,Status 字段 322 是否不是 STATUS_SUCCESS(状态 _ 成功);PreferredVersion 字段 318是否不包含处于由客户机的SMB直通协商请求包300的MinVersion字段302和MaxVersion字段304所指定的范围内的值;CreditsRequested字段308b是否为零;CreditsGranted字段320a是否为零;PreferredSendSize字段310b是否大于由客户机的SMB直通协商请求包330的MaxReceiveSize字段312所指定的值;或者,MaxReceiveSize字段312b是否小于预定阈值(例如,128字节)。如果以上中的任一个为真,则SMB直通协商响应包336不是有效的,并且过程400B以否前进到结束操作432B,在操作432B,SMB直通客户机214a断开连接。根据此处所公开的各实施例,如果所有这些检查都不为真,则过程400B以是前进至处理SMB直通响应430,在该处理中,SMB直通协商响应包336被SMB直通客户机214a处理。
[0082]在各实施例中,在处理SMB直通协商响应包336时,SMB直通客户机214a完成以下,例如:将在设置226中的该连接的PeerTargetSendCreditsCount (对等体目标发送积分计数)设置设为等于CreditsRequested字段308b ;将在SMB直通连接属性中的该连接的SendCreditsCount(发送积分计数)设置设为等于CreditsGranted字段320a ;将在设置226中的该连接的MaxSendSize (最大发送大小)设置设为等于MaxReceiveSize (最大接收大小)字段312b ;将在设置226中的该连接的ReceiveSize设置设为等于PreferredSendSize字段310b ;将在设置226中的该连接的MaxOutboundFragmentedMessageSiz (最大出站经分段消息的大小)设置设为等于MaxReceiveSize字段312b ;以及,将该连接的空闲连接计时器设为在预定时间量(例如,几小时、几分钟等)内期满并启动该计时器。一旦执行了以上步骤,RDMA连接协商就完成了,并且客户机102和服务器106可启动交换SMB直通数据传送包。过程400B随后在结束操作432B终止。
[0083]根据此处所公开的一实施例,图2A和图2B中所描绘的各个软件功能模块的交互还被示出在图5A-?中所描绘的用于通过所建立的RDMA连接来交换SMB2数据的操作步骤500中。根据本公开的各实施例,在请求和响应通信中,通过将SMB2数据封装成SMB直通数据传送包338的数据载荷来通过所建立的SMB直通连接在客户机102和服务器106之间传送该SMB2数据。请求和响应通信可用于例如控制信道通信、交换文件元数据、或用于其他过程。图5A示出了根据本公开的各实施例的数据包516/518、530、532和546在客户机102和服务器106之间的传送的表示500A。图5B和图5C采用客户机102的角度,而图采用服务器106的角度。应该注意,过程500被描述成客户机独立地或者响应于来自服务器的请求而将SMB2数据发送给服务器106。然而,服务器106对请求作出响应并将数据发送回客户机102的相反情况可以为真。因此,在各实施例中,此处所描述的各过程适用于服务器发送请求并要求积分的情况。此外,该方法可以例如在多个客户机之间或者在多个服务器之间进行。
[0084]转至图5B,示出了根据此处公开的各实施例的用于通过RDMA使用SMB2交换数据的示例操作步骤500B。开始操作502被发起,并且过程500B前进到客户机102建立RDMA连接504。根据本公开的各实施例,建立RDMA连接可以如参考图4A-4C所描述的。在一实施例中,SMB直通客户机214a设置若干连接属性,包括将MaxSendSize设置设为等于MaxReceiveSize 字段 312b,将该连接的 ReceiveSize 设置设为等于 PreferredSendSize 字段310b,以及将在设置226中的该连接的MaxOutboundFragmentedMessageSize设置设为等于MaxReceiveSize字段312b。根据各实施例,通过这种方式,客户机102建立了可以向服务器106发送的数据包的大小。
[0085]返回到图5B,根据各实施例,SMB直通客户机214a可确定将SMB2消息传输到服务器106所需的SMB直通数据传输包的数目。为了作出该确定,SMB直通客户机214a可首先检索在协商期间设置的MaxSendSize (被指定为R)。SMB直通客户机214a随后可确定要发送的SMB2协议消息的大小;在各实施例中,该值被设为“S”。SMB直通客户机214a还确定SMB直通数据传送包338的头部所消耗的字节数(在各实施例中被指定为P)以及为使SMB直通数据传送包338的有效载荷在8字节对齐的边界上开始的边距(例如,Data0ffset328等)。在各实施例中,SMB直通客户机214a随后确定S是否小于或等于(R-P),并且根据各实施例,如果如此,则可通过将S除以(R-P)来确定数据包的数目。
[0086]过程500B随后前进至由SMB直通客户机214a确定分段是否被使用510。在一实施例中,在SMB2协议消息不“容纳”到单个SMB直通数据传送包338中时,分段被使用。换言之,S大于(R - P)吗?如果不要使用分段,则过程500B以否前进至发送一个SMB直通数据传送包518B。另一方面,如果分段被使用,则过程500B以是前进至初始化各传送缓冲区字节512。
[0087]返回步骤518,根据各实施例,SMB2协议消息可以被传送,而无需进行分段。用于传送数据包的存储器缓冲区222a的一部分被初始化。在各实施例中,前P个字节被初始化以设置SMB直通数据传送包338的头部信息,并添加为零的边距字节以确保SMB2载荷为8字节对齐的。因此,根据各实施例,在该缓冲区中,DataOffset字段328被设为P,DataLength字段330被设为S,且RemainingDataLength字段326被设为零(0)。有关积分的信息或对积分的请求被存储在CreditsRequested字段308c或CreditsGranted字段320b中。因此,客户机102可以在SMB直通数据传送包338中请求或授予更多积分。在各实施例中,SMB直通数据传送包的发送方必须将CreditsRequested字段设为至少为一(1)。存储器缓冲区222a中的接着的S个字节被初始化,并且SMB2协议消息被存储在SMB数据字段332中。在SMB直通数据传送包338被组装后,SMB直通客户机214a将该数据包发送518B给RDMA接口 216a以通过RDMA连接将其发送到服务器106。过程500B随后通过页面连接符B522前进到结束操作548C,并且过程500B终止。
[0088]返回步骤512,根据各实施例,在步骤512,在S大于(R-P)的情况下,SMB2协议消息被划分成两个或更多个部分。这些部分随后被拍成序列以在一系列RDMA发送操作中被发送,这些RDMA发送操作中的每一个操作承载SMB2协议消息的一部分(被称为片段)。为了将SMB2协议消息划分成片段,第一有效载荷的大小被设为X, X等于或小于(R-P)。根据一实施例,X表示将至少由第一 RDMA发送操作来传送的SMB2协议消息的字节数。正如步骤518B—样,用于传送数据包的存储器缓冲区222a的一部分被初始化。在各实施例中,前P个字节被初始化以设置SMB直通数据传送包338的头部信息以及边距字节。接着,DataOffset字段328被设为P, DataLength字段330被设为X,并且RemainingDataLength字段326被设为(S - X) 514。在各实施例中,RemainingDataLenght字段326指示SMB2协议消息中还剩多少字节要被传送。在各实施例中,当SMB2协议消息的最后一个片段被传送时,(S-X)将为零(0)。在最后一个数据包中,RemainingDataLength字段326随后被设为零,这指示SMB直通数据传送包338承载SMB2协议消息的最后一个片段。有关积分的信息或对积分的请求被存储在CreditsRequested字段308c或CreditsGranted字段320b中。因此,在各实施例中,客户机102在SMB直通数据传送包338中请求或授予更多积分。存储器缓冲区222a的接着的X个字节随后被初始化。根据此处所公开的各实施例,SMB2协议消息的片段可随后被存储在SMB2数据字段332中。
[0089]在将SMB直通数据传送包338与SMB2协议消息的前X个未经传送的字节组装在一起后,SMB直通数据传送包338被发送516B至服务器。在各实施例中,SMB直通客户机214a将SMB直通数据传送包338发送516B到RDMA接口 216a以通过RDMA连接发送到服务器106。过程500B随后通过页面连接符A520前进到可选步骤526,在步骤526,SMB直通客户机214a确定526是否要发送包含另一片段的另一 SMB直通数据传送包338。因此,在各实施例中,SMB直通客户机214a确定在发送了最后一个数据包之后,(S-X)是否为0。如果(s-χ)为0或小于零,则意味着最后一个片段已经在最后一个SMB直通数据传送包338中被发送,过程500B以否前进到结束操作548C,并且过程500B终止。然而,如果(S-Χ)大于0,则过程500B以是前进到确定是否存在足够的发送积分528。在各实施例中,步骤526可以是可选的(如图所示),因为传输这些片段的SMB直通数据传送包338可以在存储器缓冲区222a中被预先准备,并被顺序地发送。当缓冲区222a为空时,过程500B终止。随后不存在确定下一数据包是否要被发送的需要。应注意,根据各实施例,在SMB2协议消息被分段时,承载这些片段的RDMA发送操作被顺序并单调地发送,并且可能不会受到与该经分段的SMB2协议消息无关的其他RDMA发送操作的干扰。根据一实施例,在接收方处RDMA传送排序将保留这些片段的顺序,使得接收对等体可重新构造原始消息。
[0090]返回到步骤528,SMB直通客户机214a确定528是否存在用于发送下一片段的足够积分。本质上,SMB直通客户机214a确定是否还留存一个发送积分。如果存在一发送积分,则过程500B通过页面连接符C524以是前进到步骤512。在各实施例中,RDMA传输具有由接收方在发送方可发送数据包之前预先发布的接收缓冲区。这个规则需要发送方和接收方之间的协调,以确保发送方不会在接收方已预先发布接收区之前尝试发送数据包。根据本公开的各实施例,SMB直通使用发送积分的系统来实现所需的协调。
[0091]在一实施例中,从服务器106或客户机102授予的发送积分表示该服务器106或客户机102上的单个预先发布的接收。对等体被授权用一个发送积分执行一个RDMA发送操作。客户机102还可以通过设置CreditsRequested字段308c或者以分开的发送积分请求(根据一实施例,其不会在传输经分段的SMB2数据的一组SMB直通数据传送包338的中间被发送)的形式来向服务器106提供与客户机102需要多少发送积分来高效地支持其工作负载有关的信息。发送积分在SMB直通数据传送包338的CreditsGranted字段320b中被授予。因此,SMB直通客户机214a可通过将CreditsRequest字段308c中的值设置成较高的数字(可能覆盖所有将来的经分段数据包)来请求更多的发送积分。根据一实施例,SMB直通客户机214a可随后通过等待从服务器106发送的SMB直通数据传送包338来等待530C以接收发送积分,该SMB直通数据传送包338不具有数据但在该SMB直通数据传送包338的CreditsGranted字段320b中包括发送积分。SMB直通客户机214a可以通过设置计时器224a中的SendCreditesGrantedTimer (发送积分授予计时器)以在查询532C处确定积分是否被接收。如果SendCreditsGrantedTimer在积分被授予之前期满547,则过程500B以“是”前进至使传送操作失败或者终止,并且过程500B随后在“结束”操作548C处终止。然而,如果积分被授予532C,则过程500B通过页面连接符C524以“是”前进到步骤512。根据一实施例,如果没有设置计时器和/或该计时器尚未期满547,则过程500B以“否”前进并且不使传送操作失败或终止,而改为继续等待530C以接收发送积分。
[0092]转至图?和过程500D的开始操作502D,在服务器106处,SMB直通数据传送包338被接收516D。在一实施例中,RDMA接口 216b接收SMB直通数据传送包338并将其发送到SMB直通服务器214b。首先,SMB直通服务器214b读头部信息。SMB直通服务器214b前进到查询536以确定RemainingDataLength字段326是否为除零以外的某个数。在一实施例中,如果RemainingDataLength字段326为零,则SMB直通数据传送包338是唯一数据包,并且过程500D以“否”前进到处理SMB数据包数据544,此处SMB直通服务器214b处理该数据包数据并将SMB2协议消息发送到SMB2服务器212b。如果RemainingDataLength字段326是除零以外的某个数,则过程500D以“是”前进到分配重新组装缓冲区538。
[0093]在步骤538,在一实施例中,SMB直通服务器214b分配存储器缓冲区222b的一部分以便在该缓冲区222b中重新组装SMB2协议消息。因此,SMB直通服务器214b可分配存储器缓冲区222b中的足够块来接受当前SMB直通数据传送包338中的以及即将到来的SMB直通数据传送包338中的数据,这基于DataLength字段330的值以及RemainingDataLength字段326的值。根据本公开的各实施例,SMB直通服务器214b可随后从SMB2数据字段332中读SMB2数据,并将该数据复制到所分配的缓冲区540中。
[0094]接着,一实施例为SMB直通服务器214b提供等待并接收546D下一 SMB直通数据传送包338。在一实施例中,SMB2数据字段332中的数据还被复制到存储器缓冲区222b中的下一部分。在一替换实施例中,SMB直通服务器214b可以可选地确定此下一 SMB直通数据传送包338是否是包含经分段的数据542的最后一个数据包。为了作出该确定,SMB直通服务器 214b 检查 RemainingDataLength 字段 326 是否为零。如果 RemainingDataLength字段326为零,则SMB直通服务器214b理解没有更多数据包将被接收,并且过程500D以“是”前进到处理来自存储器缓冲区222b的SMB2协议消息544。过程500D随后在“结束”操作548D终止。另一方面,根据一实施例,如果RemainingDataLength字段326为除零以外的某个数,则SMB直通服务器214b理解另一(另一些)数据包将被接收,并且过程500D以“否”前进到接收546D下一 SMB直通数据传送包338。
[0095]根据此处所公开的一实施例,图2A和图2B中描绘的各个软件功能模块的交互被进一步示出在图6中描绘的用于执行RDMA直通数据传送的各操作步骤600中。图6示出了根据本公开的各实施例的在客户机102和服务器106之间的数据传送的表示。
[0096]如图6中所示出的,过程600在开始操作602处被发起,并且SMB2客户机208创建604SMB2读/写请求340。应用220可以请求要被传送给服务器106的数据或要从服务器106读取的数据。根据本公开的各实施例,数据传送可以被SMB2客户机208定向到利用RDMA直通数据传送,使得SMB2服务器106唯一地执行实际的RDMA请求。为了开始该传送,SMB2客户机208注册目标存储器缓冲区,以提供或接收未经编码的应用数据,并随后生成将通过RDMA发送并执行的SMB读/写命令。该命令可被包括在SMB2读/写请求340中,并被发送至SMB直通客户机214a,该SMB直通客户机214a将SMB2读/写请求340封装606在SMB直通数据传送包中。在各实施例中,SMB2读/写请求340被存储在SMB直通数据传送包中的SMB2数据字段332中。SMB直通数据传送包可随后通过RDMA接口 216被发送608到服务器106。在一实施例中,服务器106接收SMB Diret数据传送包,并从SMB2数据字段332中读取SMB2读/写请求340。SMB直通服务器214b可随后从SMB2读/写请求340 中读取包括信道 342、Channel Inf oOff set (信道信息偏移)346 和 Channel InfoLength(信道信息长度)348在内的数据。该信息可将SMB直通服务器214b定向到RDMA信道描述符352中的控制信息610。通过该控制信息,SMB直通服务器214b可通过将未经编码的应用数据发送612到客户机102的缓冲区中的存储器位置或从该存储器位置检索612未经编码的应用数据来启动直通数据传送。过程600随后在“结束”操作614处终止。
[0097]图4A-4C、图5A-5D以及图6分别示出了根据此处所公开的各实施例的用于通过RDMA使用文件访问协议协商通信以及通过RDMA使用文件访问协议交换数据的示例操作特征。在各实施例中,所描绘的各操作步骤可被组合到其他步骤中和/或被重新安排。此外,可使用例如更少或更多的步骤。
[0098]一般来说,积分是本发明各实施例的优点。发送积分表示已被预先发布来接收对等体上的传入数据的缓冲区。由此,发送积分表示已被提交给对等体使得该对等体可使用其来传送数据的有限接收方资源(存储器、存储器区域等)。在各实施例中,由于RDMA的特性,接收区一旦被发布后就不可被取消。对于要被释放的与接收区相关联的资源,这些资源被用于服务于传入发送。在其中接收对等体开始在各资源上慢速运行并想要回收这些资源中它已专用于尚未解决的接收区的一些资源的各实施例中,这造成可能的问题。根据此处所公开的各实施例,由于接收区无法被取消,因此回收这些资源取决于对等体的协作。
[0099]根据一实施例,对于SMB直通中的这一问题的解决方案被称为发送积分撤销。向对等体传送的SMB直通数据传送包具有指定多少附加的发送积分已被授予对等体的CreditsGranted字段。在替换实施例中,通过在SMB直通数据传送包338中设置CreditRevocation(积分撤销)标志(未示出),CreditsGranted字段320b的含义改变为对等体可保持的发送积分的数目。例如,如果CreditRevocation标志被设置且CreditsGranted字段320b的值为十(10),则十(10)为接收方可保留的积分数。如果接收方当前持有多于十(10)个发送积分,则接收方执行一系列RDMA发送操作来将所撤销的发送积分用完,使得接收方最终具有十(10)个或更少的发送积分。被执行来将所撤销的发送积分用完的发送操作可包括发送空SMB直通数据传送包338 (不具有数据有效载荷的数据包)。根据各实施例,在接收到传入的空SMB直通数据传送包338后,撤销发送积分的对等体可以根据其认为合适的释放这些资源或重新使用它们。
[0100] 尽管发送积分允许两个对等体使它们的发送和接收操作同步,在各实施例中这些对等体尝试避免发送积分死锁。想象其中对等体Y具有来自对等体X的单个发送积分并且对等体X具有来自对等体Y的单个发送积分的场景。在这个场景中,每一对等体被授权在任何时刻对其对等体执行单次发送。想象X和Y两者都使用该过程中的它们的单个发送积分来同时执行发送操作,但由两个对等体传送的SMB直通数据传送包338没有向对等体授予附加发送积分。所得的状态被称为发送积分死锁。X和Y两者都已使用了其最后的发送积分。为了能够向对等体发送附加的数据包,每一对等体需要附加的发送积分。然而,发送积分是经由SMB直通数据传送包338来授予的,并且任一方都不可执行任何进一步的发送操作。结果是任一对等体都不可传送任何附加的数据包,并且不存在它们可获取进一步发送积分的机制。因此,死锁已发生。
[0101]根据本公开的各实施例,这个问题的解决方案只是一规则。根据一实施例,在SMB直通对等体使用了它的最后一个发送积分时,正被发送的SMB直通数据传送数据包338向该对等体授予至少一个(1)附加发送积分。如果两个对等体都遵循这个规则,则死锁不会发生,因为每一对等体将总是能够通过授予附加的发送积分来对另一方作出响应。
[0102]最后,图7示出可在其上实现本文公开的各实施例的示例计算机系统700。根据此处所公开的各实施例,描绘了诸如例如客户机/应用服务器102或文件服务器106之类的、具有至少一个处理器702的用于如此处所示的交换消息数据的计算机系统700。系统700具有存储器704,包括例如系统存储器、易失性存储器和非易失性存储器。在其最基本的配置中,计算系统700在图7中由虚线706示出。另外,系统700还可包括另外的存储(可移动和/或不可移动),其中包括但不限于磁盘、光盘或磁带。在图7中通过可移动存储708和不可移动存储710示出这样的附加存储。
[0103]如这里所使用的术语计算机可读介质可以包括计算机存储介质。计算机存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块、或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。系统存储器704、可移动存储708和不可移动存储710都是计算机存储介质(即,存储器存储)的示例。计算机存储介质可以包括,但不限于,RAM、ROM、电可擦除只读存储器(EEPR0M)、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁性存储设备、或可用于存储信息且可以由计算系统700访问的任何其他介质。任何这样的计算机存储介质都可以是系统700的一部分。图7中的说明不意图以任何方式限制本公开的范围。
[0104]如这里所使用的术语计算机可读介质还包括通信介质。通信介质由诸如载波或其他传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其他数据来体现,并包括任何信息传递介质。术语“已调制数据信号”可以描述以对该信号中的信息进行编码的方式设定或者改变其一个或多个特征的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接等有线介质,以及诸如声学、射频(RF)、红外线和其他无线介质等无线介质。
[0105]系统700还可包含允许该设备与其它设备通信的通信连接716。此外,系统700还可具有输入设备714,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备等等。还可包括输出设备712,诸如显示器、扬声器、打印机等等。所有这些设备在本领域中是公知的并且不必在此详细讨论。上述设备是示例且可以使用其他设备。
[0106]以上参考附图描述了本发明的各实施例,可以理解,可以对本发明做出本领域技术人员易于想到且被包含在所公开并如所附权利要求书所定义的本发明的精神和范围内的众多修改。尽管出于本发明的目的描述了各实施方式,但可以做出落入本发明的范围内的各种改变和修改。
[0107]同样地,虽然本发明使用了对结构特征、方法动作和含有这些动作的计算机可读介质专用的语言,但是应该理解,在所附权利要求书中定义的本发明不必限于此处描述的具体结构、动作、特征或介质。例如,尽管在各实施例的各描述方面中使用了特定名称或命名约定(诸如,AP1、例程等的名称),但可以对这样的名称和/或命名约定作出多种修改,这些修改被涵盖在本公开的精神和范围内。上述特定结构、特征、动作、名称、命名约定和/或介质是作为实现权利要求的示例形式而公开的。各实施例的各方面允许多个客户机/应用服务器、多个文件服务器、多个网络、多个连接对等体等。或者,在其他实施例中,使用具有单个服务器和单个网络的单个客户机计算机。所属领域技术人员将认识到在本公开的范围和精神内的其他实施例或改进。因此,这些具体结构、动作、或介质是作为实现所要求保护的本发明的示例性实施例而公开的。本发明由所附权利要求书进行定义。
【权利要求】
1.一种存储计算机可执行指令的计算机可读存储介质,所述计算机可执行指令在被处理器执行时执行一种用于通过远程直接存储器访问(RDMA)使用数据操作来交换数据的方法,所述方法包括:建立与服务器的连接;与所述服务器协商连接,其中所述协商建立所述服务器将在该连接中接收的最大字节数;确定用于将与所述连接相关联的数据发送给所述服务器的数据包的数目;确定是否要使用对所述数据的分段;如果不要使用对所述数据的分段,则将第一协议包与所述数据一起发送给所述服务器;如果要使用对所述数据的分段,则初始化传送缓冲区内的前多个字节,以作为所述第一协议包中的数据来发送;设置所述第一协议包中的数据长度字段和剩余数据长度字段;将所述第一协议包发送给所述服务器;对于至少一个第二协议包,要重复的指令包括:初始化所述传送缓冲区内的多个字节,以作为所述至少一个第二协议包中的数据来发送;`设置所述至少一个第二协议包中的剩余数据长度字段;以及将所述至少一个第二协议包发送给所述服务器。
2.如权利要求1所述的计算机可读存储介质,其特征在于,确定是否要使用分段包括确定用于发送所述数据的数据包的数目是否大于1。
3.如权利要求2所述的计算机可读存储介质,其特征在于,确定用于将与所述连接相关联的数据发送给所述服务器的数据包的数目包括确定所述服务器将在所述连接中接收的最大字节数是否小于要被发送的数据的字节数。
4.如权利要求1所述的计算机可读存储介质,其特征在于,与所述服务器协商连接包括:预先发布接收区;构建协议协商请求;将所述协议协商请求发送给所述服务器;设置协商期满计时器;确定对所述协议协商请求的响应是否在所述协商期满计时器期满之前被接收;如果对所述协议协商请求的响应没有在所述协商期满计时器期满之前被接收,则重新发送所述协议协商响应;如果对所述协议协商请求的响应在所述协商期满计时器期满之前被接收,则接收协议协商响应;确认所述协议协商响应;以及处理所述协议协商响应,其中所述协议协商响应将至少一个积分提供给所述发送方来发送所述协议包。
5.如权利要求4所述的计算机可读存储介质,其特征在于,还包括:如果存在足够积分来发送所述至少一个第二协议包,则发送所述至少一个第二协议包;如果不存在足够的积分来发送所述至少一个第二协议包,则向所述服务器请求至少又一个积分;确定是否接收到足够的积分;如果没有接收到足够的积分,则终止所述连接;以及如果接收到足够的积分,则发送所述至少一个第二协议包。
6.一种被配置成通过远程直接存储器访问(RDMA)使用服务器消息块(SMB/SMB2)来交换数据的系统,所述系统包括:RDMA网络接口卡(RNIC),所述RDMA网络接口卡用于通过RDMA消息来传送数据;存储器,所述存储器用于存储处理器能执行的计算机程序指令;以及与所述RNIC和所述存储器通信的处理器,所述处理器用于执行内核,所述内核包括:第一协议客户机,所述第一协议客户机用于:在一个或多个RDMA消息中传达SMB数据;以及创建接收缓冲区以交换积分,其中所述积分确定发送方能向接收方发送的消息的数目。
7.如权利要求6所述的系统,其特征在于,还包括与所述第一协议客户机通信的RDMA接口,所述RDMA接口用于打开通过所述RNIC的RDMA连接。
8.如权利要求7所述的系统,其特征在于,还包括:第二协议客户机,所述第二协议客户机用于:创建SMB2读/写请求以指示服务器执行RDMA直接数据传送;将所述SMB2读/写请求发送给所述第一协议客户机;以及其中,所述第一协议客户机还用于:将所述SMB2读/写请求封装在第一协议数据传送包中;以及将所述第一协议数据传送包发送给所述服务器。
9.如权利要求8所述的系统,其特征在于,所述SMB2读/写请求包括标识RDMA信道描述符信息的字段,并且其中所述第一协议是所述SMB直通协议。
10.如权利要求9所述的系统,其特征在于,所述RDMA信道描述符信息包括控制信息,并且其中所述服务器确定所述控制信息,并执行未经编码的应用数据到由所述控制信息所标识出的存储器地址的RDMA写,或执行未经编码的应用数据从由所述控制信息所标识出的存储器地址的RDMA读。
11.一种用于建立通过远程直接存储器访问(RDMA)使用服务器消息块(SMB/SMB2)来交换数据的连接的计算机实现的方法,所述方法包括:接收第一 SMB直通数据传送包,其中所述第一 SMB直通数据传送包包括剩余数据长度字段和SMB2数据;确定所述剩余数据长度字段是否为非零;如果所述剩余数据长度字段为零,则处理所述第一 SMB直通数据传送包中的所述SMB2数据;如果所述剩余数据长度字段为非零,则将重新组装缓冲区分配给所述连接;将所述SMB2数据从所述第一 SMB直通数据传送包复制到所述重新组装缓冲区中;接收至少一个其他SMB直通数据传送包;以及将来自所述至少一个其他SMB直通数据传送包的SMB2数据复制到所述重新组装缓冲区中。
12.如权利要求11所述的方法,其特征在于,所述SMB直通数据传送包包括由以下组成的组中的一个或多个字段:请求的积分、授予的积分、数据偏移和数据长度。
13.如权利要求12所述的方法,其特征在于,所述授予的积分字段描绘多少积分被提供给所述SMB直通数据传送包的发送方。
14.如权利要求11所述的方法,其特征在于,积分是所述发送方能发送的RDMA消息的数目的值。
15.如权利要求11所述的方法,其特征在于,还包括:确定所述至少一个其他SMB直通数据传送包是否是最后一个数据包;如果所述至少一个其他SMB直通数据传送包是最后一个数据包,则处理所述重新组装缓冲区中的SMB2数据;如果所述至少一个其他 SMB直通数据传送包不是最后一个数据包,则重复接收所述至少一个其他SMB直通数据传送包,并将来自所述至少一个其他SMB直通数据传送包的SMB2数据复制到所述重新组装缓冲区中。
【文档编号】H04L29/06GK103636181SQ201280032558
【公开日】2014年3月12日 申请日期:2012年6月6日 优先权日:2011年6月29日
【发明者】T·M·塔尔佩伊, G·R·卡拉莫, D·M·克鲁斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1