轻量传送协议的制作方法

文档序号:13909876阅读:158来源:国知局
轻量传送协议的制作方法



背景技术:

数据联网涉及硬件和软件。在软件方面,联网协议通常被设计用于当前或近期的硬件能力。在联网硬件改进的同时,协议通常变得广泛适应。处理器变得更有效率和能力,并且通信媒体获得可靠性和容量。随着时间的推移,过去设计的联网协议可能变得不太适合当前可用的硬件。例如,传送协议可能具有用于确保可靠性、对拥塞的响应以及有序递送的机制。这样的机制通常不太适合新型的网络。然而,为了保持持续的网络间可操作性,修改较旧的协议是不切实际的。存在对这样的技术的需要:该技术可以将联网技术的进步转化为可能较旧的协议的整体性能的改进,而不必改变那些协议或其现有的实现。

而且,联网硬件的一些能力尚未被充分认识和实现。例如fpga(现场可编程门阵列)nic的所谓智能nic(网络接口卡)已经变得越来越普遍。这些更加新的接口像传统的nic一样提供物理和媒体连接性。它们还包括附加处理能力——有时以可重构电路(例如,fpga)的形式。这些处理扩充的nic可以允许一些协议的特征从主机的cpu(中央处理器)分流(offload)给nic。一些智能nic甚至可以允许整个传送协议从主机的cpu完全分流到智能nic。但是,这种方法通常需要显著的主机侧的更改。例如,可能需要重新编写主机侧的软件,以便不经由标准传送协议而是经由定制应用编程接口(api)来直接与其nic进行通信。此外,大多数具有分流功能性的智能nic不能用作“线中碰上(bumpintheline)”(“内联(in-line)”)设备(即连接到主机的现有nic的设备)。因此,为了将主机从普通nic升级到智能nic,必须用新的智能nic物理替换主机的普通nic。大规模的升级可能是昂贵且破坏性的。需要在不必要求改变主机侧的软件或硬件的情况下为主机提供智能nic以改善网络和主机性能。

此外,如仅被发明人所认识到的,智能nic的开发也使得将应用级功能性分流到智能nic成为可能。例如,分布式应用可能具有遍布整个数据中心的需要交换数据的部件。其中一些部件或者它们的帮助者代理可能能够被智能nic执行。然而,还没有意识到内联智能nic上的应用级代码(或其他代码)可能能够直接进行网络通信而无需遍历其各自的主机和主机网络堆栈。

下面描述与上面提及的问题有关的技术。



技术实现要素:

下面的概述仅被包括用以介绍在下面的详细描述中讨论的一些概念。本概述不是全面的,并且不旨在描绘由最后提出的权利要求所阐述的要求保护的主题的范围。

智能nic(网络接口卡)提供有使智能nic能够作为主机的nic和网络之间的内联nic进行操作的特征。智能nic为主机提供网络流的穿透(pass-through)传输。发送到主机以及从主机发送的分组传递通过智能nic。作为穿透点,智能nic通过分析分组、插入分组、丢弃分组,插入或识别拥塞信息等,能够加速穿透网络流的性能。此外,智能nic提供了轻量传送协议(ltp)模块,使得其能够与其他智能nic直接通信,而无需将网络业务穿透它们相应的主机。

下面将参照结合附图考虑的以下详细描述来解释许多伴随的特征。

附图说明

从根据附图阅读的下面详细描述中将更好地理解本说明书,附图中的相同附图标记在所附说明书中用于指示相同的部分。

图1示出了被布置为经由数据网络彼此通信的主机。

图2示出了内联智能nic的高级特征。

图3示出了智能nic的另一个视图。

图4示出了交换机的细节。

图5示出了轻量传送协议(ltp)模块的细节。

图6示出了用于传输应用ltp数据的过程。

具体实施方式

下面描述的实施例涉及加速主机的网络流的内联智能nic,该内联智能nic为主机的网络流提供网络连接性。下面描述的实施例还启用nic间直接网络通信。下面还描述了支持和增强这些特征的技术细节。

图1示出了被布置为经由数据网络102彼此通信的主机100。主机100可以是能够作为网络流端点进行操作的任何类型的计算设备。主机100的形式并不重要(例如,刀片、服务器、工作站、膝上型计算机等),但是假定了处理硬件(例如,cpu、图形处理单元等)、存储硬件(例如,存储器、磁盘驱动器等),以及用于它们的协作的硬件(总线、输入/输出控制器和端口等)。对于本文的目的而言,数据网络102的细节不重要。例如,数据网络102在物理/链路级可以包括共享介质(例如,以太网)的段、一个或多个交换结构(例如无限带宽(infinband)或交换结构光纤信道)、令牌环等。可以使用能够在主机100或其他设备之间提供网络级路由的任何类型的已知数据网络102。为了讨论,数据网络102将被假定为是一个为具有指派给它们的相应ip地址的主机100提供ip路由的互联网协议(ip)网络。

主机100提供有相应的智能nic104。主机100可以具有它们自己的nic(未示出),并且智能nic104(其也可以被称为“内联nic”)被配置为在主机nic和数据网络102之间中继(intermediate)网络流106。例如,网络流106可以是传输控制协议(tcp)流。智能nic104能够经由媒体/物理链路105来与数据网络102交换网络分组,并且能够经由到主机nic的媒体/物理链路(未示出)来与其相应的主机100交换网络分组。如图1中所示,主机100能够使用中继的网络流106来与彼此(以及其他节点)进行通信。简而言之,主机100的智能nic104将中继在主机100处终止的网络流106的分组。如下面进一步描述的,由智能nic104提供的中继类型可以从不试图影响其网络流106的基本穿透逻辑到能够改善其网络流106的性能的穿透逻辑。

如下面还将进一步描述的,智能nic104可以实现轻量传送协议(ltp)。ltp是一种面向连接的协议,其提供低开销的可靠性和排序。如图1中所示,ltp连接108在智能nic104处开始和结束,并且因此提供不给主机100造成负担的nic间通信的形式,因为主机100不接收或以其他方式处理ltp分组。智能nic104能够主动地:(i)打开和关闭ltp连接108,(ii)生成ltp分组,以及(iii)经由ltp连接108发送和接收ltp分组。

图2示出了内联智能nic104的高级特征。如上面所提及的,智能nic104可以在主机100和数据网络102之间被内联布置(本文所使用的“内联”是用来标识智能nic的类型的术语,并不意味着这种nic目前连接到主机和网络)。特别而言,智能nic104可以具有将智能nic104与其主机100进行物理连接的第一物理/链路连接120。智能nic还具有连接到数据网络102的第二物理/链路连接122。物理/链路连接可以各自为任何类型,例如以太网、光纤信道、无限带宽等。物理/链路连接也可以是无线介质。如参照图3所讨论的,智能nic提供有媒体接入控制器(mac)以与物理/链路连接120、122进行接合。

为了促进网络流106的穿透中继,智能nic104提供有一个或多个穿透组件124。穿透组件124提供流分组的存储转发缓冲。穿透组件124还可以包括用于改善其正在处理的流的性能的逻辑。如下面进一步描述的,穿透组件124可以使用各种因素来改善流的性能,包括例如显式拥塞通知(ecn)、流的分类(例如有损和无损)、关于网络102的状态的信息、流自身的特征等等。还如下面进一步描述的,可以采取各种动作来影响流的行为,诸如将分组插入到流中、将优先流控制(pfc)标记插入到流分组中、暂停或抑制流、流分组的随机早期丢弃(red)等。

被应用使用来对交换数据的网络流106可以如下穿透智能nic。基于主机的应用126(主机100上的任何应用层代码)具有要递送的数据。将数据穿透操作系统api/设施(例如,流或套接字)传递到网络堆栈128,其中数据被放置在传送分组(例如,tcp分组)中,该传送分组被封装在网络分组中(例如,主机的ip地址作为发送方的ip分组),网络分组然后被放置在物理层帧(例如,以太网帧)的有效载荷中。帧被传递通过第一物理/链路连接120至智能nic104。智能nic104剥离网络帧,存储传送分组,并且可选地为了诸如ecn标记、流分类标志等等的特征而检查ip和/或传送分组。当缓存的分组准备好被发送时,智能nic将它们封装在ip分组中,其源地址和目的地地址与从主机接收到的ip分组相同。然后将ip分组针对第二链路/媒体连接122而构建成帧并且在其上进行发射。实际上,由智能nic传输到数据网络的ip分组通常与最初从主机接收到的ip分组相同。

由智能nic从数据网络102接收的流分组通常以相同的方式被转发到主机,并且主机的网络堆栈128类似地将应用数据提供给基于主机的应用126。值得注意的是,智能nic的内联布置和分组的双向包传递允许智能nic及其主机使用相同的ip地址。这可以允许将主机的智能nic被透明地添加或移除到主机以及到数据网络的路由。如下面进一步讨论的,即使ltp分组不被主机发送或接收,ltp分组也可以使用主机的ip地址作为用于ip路由的源地址和目的地地址。

为了促进nic间ltp连接108,智能nic104可以提供有相应的ltp模块130。ltp模块130实现ltp。ltp模块130从基于nic的应用132接收请求用以发送数据。基于nic的应用132可以是任何类型的代码。例如,基于nic的应用132可以是支持智能nic之间的协作的应用。基于nic的应用可以是分布式应用的一部分,通过其他方式来与基于主机的应用共享数据。在一个实施例中,智能nic具有总线接口以与主机总线(例如,外围组件互连高速总线)连接的总线接口。主机上的软件可以通过总线将数据发送到其智能nic。智能nic上的代理通过以下方式与本地ltp模块130交互:请求到远程ltp模块的连接(该请求指定目的地网络地址),并且向ltp模块130提供数据,ltp模块130继而将数据打包成ltp分组并且按照ltp来管理ltp分组向远程ltp模块的传输。在一个实施例中,ltp连接108是单向的(而不是双向的)。在另一个实施例中,由ltp模块130使用的ltp分组是最终以ip分组被路由的udp(通用数据报协议)分组。如下所述,智能nic104可以包括fpga131或其他形式的可编程逻辑设备。fpga131可以被配置为实现ltp模块130、穿透组件124、基于nic的应用132或智能nic的其他部件。

图3示出了智能nic104的另一个视图。智能nic104包括第一mac150、第二mac152、旁路模块154、交换机156、ltp模块130、以及基于nic的应用132。旁路模块154可以实现用于智能nic的流分组的基本“哑(dumb)”穿透处理。交换机156可以扩展穿透处理以包括流处理功能,诸如将分组注入到流中、从流中移除分组、改变流行为等。

旁路电路154允许智能nic104在流处理可能不可用时的条件下用作基本桥。例如,当智能nic处于诸如引导状态、重置状态、错误状态等特定状态时。旁路控制158可被发信号通知,以使得mac150、152经由其相应的fifo缓冲器直接通信、或者将分组穿透交换机156来进行内联处理。交换机156也可以发信号通知旁路控制158(参见从交换机156到旁路控制158的虚线)。

更具体地,智能nic可以包括错误检查设施,用以确定是否应当触发旁路。如果检测到错误条件,则进入旁路模式。可检测到的条件可能是:正在传输分组、而其数据未就绪(数据时断时续),两个分组结束标志出现、而在它们之间没有分组起始标志,或者两个分组起始标志出现、而在它们之间没有分组结束标志。

除了上述固定的条件之外,智能nic还可以跟踪两个mac上的分组入和出计数,并且可以提供可以指示错误条件的可配置最小的每间隔分组级别。入/出计数器可用来确定通过智能nic的任一方向上的业务是否已经停止流动,或者是否内部产生的业务已经停止。

图4示出了交换机156的细节(实线表示数据路径,并且虚线表示控制信号)。交换机156提供了允许智能nic104将分组添加到传出的网络绑定流并且防止ltp分组被发送到主机系统的特征。如果数据网络102支持若干无损业务类别,则交换机156可以被配置为提供足够的支持来缓冲和暂停传入的无损流,用以允许其将自己的业务插入到网络中。为了支持这一点,交换机156可以被配置为区分无损业务类别(例如,远程直接存储器访问(rdma))与有损流类别(如tcp/ip)。分组报头中的字段可以用来标识分组属于哪个业务类别。

交换机156具有连接到第一mac150的第一端口170(主机侧)和连接到第二mac152的第二端口172(网络侧)。第三本地端口174提供内部服务到智能nic,例如到ltp模块130。如果需要,则该端口可以施加反压力。交换机156通常可以作为网络交换机进行操作,但有一些限制。具体地,交换机156可以被配置为仅将在本地端口174上接收到的分组(例如,ltp分组)传递到第二端口172(不是第一端口170)。类似地,交换机156可以被设计为不将分组从第一端口170递送到本地端口174。

内部地,交换机156具有两个分组缓冲器;一个用于接收(rx)第一端口170,并且一个用于接收第二端口172。将分组缓冲器分成若干区域。每个区域对应一个分组业务类别。当分组到达并且从它们的帧(例如,以太网帧)中被提取时,它们被分组分类器分类成可用分组类别之一(有损、无损等)并且被写入到对应的分组缓冲器中。如果对于入站分组,没有缓冲空间可用,则将丢弃该分组。一旦分组被存储并且准备好传输,仲裁器就从可用分组中选择并且发送分组(该分组可以由交换机156或者智能nic的另一个部件构建成帧)。pfc插入块允许交换机156在任一端口170、172的传输半部分处将pfc帧插入在流分组之间。

交换机156可以处理无损业务类别如下。在第一端口170的接收半部分上以及在第二端口172的接收半部分上到达的所有分组最终应该在端口的对应的传输(tx)半部分上被传输。分组被存储转发地路由。可以实现优先流控制(pfc)以避免分组丢失。对于无损业务类别,交换机156可以生成pfc消息,并且在第一端口170和第二端口172的传输部分上发送pfc消息。在一个实施例中,在分组缓冲器填满时发送pfc消息。当缓冲器已满或即将满时,将向链路伙伴发送pfc消息,请求暂停该类别的业务。pfc消息也可以被接收并且起作用。如果在第一或第二端口170、172的接收部分上接收到针对无损业务类别的pfc控制帧,则交换机156将暂停在接收到控制帧的端口的传输部分上发送分组。分组将内部地被缓冲,直到缓冲器已满为止,在此时将向链接伙伴生成一个pfc帧。

交换机156可以处理有损业务类别如下。有损业务(没有被分类为无损的所有业务)将在尽最大努力的基础上被转发。如果遇到拥塞,则交换机156可以自由丢弃分组。可以在第一端口170的接收部分上实现随机早期丢弃(red)。red可以帮助将主机生成的有损业务限于目标带宽。限制主机带宽确保了当智能nic开始引入它自己的业务时将不会出现可用带宽中的对应的突然下降,其将与使用链路的tcp/ip流交互不佳。可以提供控制参数来设置red阈值。

从交换机156的特征可以看出,智能nic104能够充当用于其主机的吞吐量,同时改善主机的流的性能。在分组遍历主机及其网络堆栈之前,可以在分组或流中检测到拥塞的迹象。智能nic可以比主机更快地对这些迹象做出反应。例如,如果在分组到达主机的路径上在分组中检测到拥塞标记,则在拥塞的影响开始在主机处显现之前,智能nic可以快速停止或启动流、增加或减少可用带宽、抑制其他流/连接等。而且,可以在业务到达主机之前将拥塞标记等从流中去除,从而减少在主机处的流处理负载。结果,主机可以运行普通的网络堆栈(例如tcp/ip),并且该堆栈的许多高开销特征可以保持休眠。例如,可以最小化或避免窗口大小调整,可以需要更少的分组缓冲,畸形的或不一致的分组的处理可能是不必要的(智能nic可以拦截并移除这样的分组并且可能请求重新传输),拥塞信令可以在主机处变成不必要的,对于分组分片或mtu调整的需要等。诸如压缩、加密和流表之类的流转换也可以被透明地采取。

在解释ltp模块130之前,理解ltp的功能以及如何使用它将是有帮助的。一般来说,智能nic是用处理硬件增强(augment)了的普通nic,该处理硬件对于nic的最小联网功能而言可能是不需要的。伴随有在静态存储器中的适当软件的通用处理器可以是用于增强nic的处理硬件的一种形式。可重新配置的数字电路是的处理硬件的另一种形式,由于其灵活性和速度,其是方便的。本文中被称为可编程逻辑器件(pld)的这种可重新配置的电路可以是fpga或已知的等同物。还可以利用asic(专用集成电路)、assp(专用标准组件)、soc(片上系统)等提供基于nic的补充处理。

智能nic,特别是具有pld的智能nic,可以被配置为充当网络上的瘦(thin)自治节点。在一个实施例中,智能nic可以被配置有其中可以实例化任意进程或执行单元的环境或外壳。在任何情况下,基于nic的应用级代码(或硬件)都可以是有利的,因为它们靠近网络并且没有基于主机的负担,诸如复杂的网络堆栈、中断处理、资源共享等。简而言之,基于nic的应用可以能够以接近网络上的最大可能的延迟和吞吐量进行通信。而且,由于它们使用了专用硬件,所以它们可以能够保证性能。如上所指出,如果智能nic具有与主机的总线连接,则这种基于nic的应用代码/电路系统还可以以高数据速率来与基于主机的软件协作。可以看出,智能nic本身可以是为了自己的目的而生成和消费网络业务的一种代理。为了利用智能nic的地点和处理能力,向这种智能nic提供它们自己的机制或协议以用于经由数据网络直接交换数据会是有利的。

图5示出了ltp模块130的细节。ltp模块130可以包括用以缓冲有效载荷的一个或多个数据缓冲器190、传输缓冲器192、连接表194、连接管理逻辑196、以及数据传输逻辑198。这些部件可以在智能nic之间提供高效又可靠的基于连接的通信。

连接管理逻辑196提供接口,基于nic的应用132可以利用该接口打开连接。应用将目的地网络ip地址传递给连接管理逻辑196。连接管理逻辑196在连接表194中创建新的条目。条目包括索引或句柄、目的地ip地址、以及用于连接的当前序列号(最初为零)。然后将ltp连接请求发送到目的地ip。接收方智能nic通过在其连接表中添加对应的条目来进行响应。在一个实施例中,每个智能nic还维护接收连接表,用于由其他智能nic打开的连接。虽然不是必要的,但是使用发送连接表和接收连接表两者可以减少开销,并且可能避免显式标识设备之间的单向或双向通信。

在一个实施例中,智能nic可以包括用于提供和管理用于应用的流或虚拟信道的设施。在该实施例中,应用的连接请求也可以指定或关联流200与所请求的连接。来自流中的数据随后在其变成可用时自动传递给连接。在另一个实施例中,应用本身使用用于指定连接的索引/句柄将数据传递给其连接。可以通过来自应用的显式调用或通过移除在定义的时间段内没有活动的连接的监视器而从连接表194中移除连接条目。

图6示出了用于由数据传输逻辑198执行的传输应用数据202的过程。如上文所指出的,直接从应用或者从与连接关联的流200中将应用数据202传递到ltp模块130。在前一种情况下,应用传递应用数据202和连接的句柄(例如,图5中的索引“5”)。在步骤220处,接收应用数据,并且在步骤222处将传入数据添加到数据缓冲器190中的对应缓冲器。在步骤224处,检查缓冲器。在一个实施例中,当数据(或当前应用数据202)的下一部分将填充缓冲器达到诸如数据网络的最大传输单元(mtu)的大小时,缓冲器被认为是满的。简而言之,要被传输的传入应用数据将被缓冲,直到有足够的数据形成ltp分组。如果步骤224确定缓冲器未准备好传输,那么数据传输逻辑198等待附加的应用数据。为了允许以较低等待时间发送小的消息,ltp模块130还可以被配置为接收指示应用数据(例如消息)已完整的标志或信号,其将触发ltp分组的传输。

假设存在足够数量的缓冲数据,则在步骤226处,从缓冲数据形成ltp有效载荷,并且重置缓冲器(传入数据包括在有效载荷中或者包括在空的缓冲器中)。在步骤228处,针对有效载荷形成ltp分组204。在连接表194中递增针对相关连接的序列号,并且被添加到新的ltp分组的头部。从连接表194中的适当条目获得目的地ip地址,并且将其添加到ltp分组的头部。在一个实施例中,将ltp分组204格式化为标准udp分组。udp分组格式只是一个便利方式,并且不需要实现udp标准本身。由于ltp分组在ip分组中进行路由,并且仅由智能nic进行解析,因此对于ltp而言可以使用任何格式。如果使用udp分组格式,则可以对端口号进行定义以标识ltp分组。以这种方式,智能nic可以在ltp分组与不是ltp分组并因此要被穿透的udp分组之间进行区分。诸如确认分组、连接建立、以及卸下分组等的ltp控制/开销分组也被格式化为可标识为ltp分组(例如,具有特定端口号的udp分组)。注意,在一个实施例中,ltp模块还形成将携带ltp分组的ip分组。也就是说,交换机会接收到一个完整的、良好成帧的并且格式化的分组。

在步骤230处,将ltp分组204复制到传输缓冲器192,然后将其转发到交换机156的本地端口174,交换机156将ltp分组204构建成帧并且从其第二端口172的传输部分(面向网络的端口)传输ltp分组204。ltp模块提供有序的可靠递送。在一个实施例中,确认(ack)ltp分组206被传输用以确认接收。每个ltpack包括被确认的ltp分组的序列号。当ltp分组被确认时,它可以从传输缓冲器192中被移除。在一个实施例中,可以使用否定确认(naks)和/或超时来触发缓冲的ltp分组的重新传输。

ltp模块130还处理传入的ltp分组。当分组从交换机130到达本地端口174上时,ltp模块130确定连接表194中的哪个条目与该分组配对。如果不存在匹配的条目,则丢弃该分组。ltp模块130检查传入的序列号与来自连接表194条目的期望值匹配。如果序列号大于连接表条目,则丢弃该分组。如果序列号小于预期值,则生成ltpack,并且丢弃该分组。如果传入的ltp分组的序列号与连接表194中的条目相匹配,那么分组的有效载荷被卸载并且被传递给与该连接相关联的应用或流(视情况而定)。如果ltp模块130不能将有效载荷数据传递下去,那么可以丢弃传入的ltl分组。一旦已经接受传入的ltp分组,就生成ltpack,并且在连接表194中增加针对该连接的序列号。在另一个实施例中,可以将入站ltp分组进行缓冲以对乱序分组进行重新排序。当(经由跳过的序列号等)检测到丢弃的分组时生成nack。

由于ltp业务由交换机156处理,以与基于主机的网络流的分组可以被管理的相同的方式,ltp分组可以被分类和管理。因此,ltp连接可以遵循pfc池(stall)和ecn。ltp业务也可以提供有带宽量或服务质量设置。未使用的报头空间——如果可用的话——可用于发送ecn和/或qcn/dc(具有基于延迟的拥塞检测的量化拥塞通知)信息。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1