利用子网上的网络接口控制器进行消息的传送的制作方法

文档序号:18867788发布日期:2019-10-14 18:45阅读:145来源:国知局
利用子网上的网络接口控制器进行消息的传送的制作方法

本公开一般涉及计算和/或联网领域,并且更具体地,涉及使用子网上的网络接口控制器来进行消息的传送。



背景技术:

数据中心和电信网络中的新兴网络趋势对系统提出了越来越高的性能要求。应用性能取决于网络的良好使用以及网络上数据业务的有效使用。网络接口控制器(nic),也称为网络接口卡、网络适配器、lan适配器、物理网络接口和其他类似术语,是将计算机连接到网络并为应用提供专用的、全日连接到网络的计算机硬件组件。

附图说明

为了更完整地理解本公开及其特征和优点,结合附图参考以下描述,其中相同的附图标记表示相同的部分,其中:

图1是根据本公开的实施例的使用子网上的网络接口控制器(nic)实现消息通信的系统的简化框图;

图2a-图2c是根据本公开的实施例的用于使用子网上的nic实现消息通信的系统的一部分的简化框图;

图3是根据本公开的实施例的nic表的简化框图,其示出了使用子网上的nic来实现消息通信的示例细节;

图4是根据本公开的实施例的分组的简化框图,其示出了使用子网上的nic实现消息通信的示例细节;

图5是根据本公开的实施例的分组的一部分的简化框图,其示出了使用子网上的nic实现消息的传送的示例细节;

图6a和图6b是根据本公开的实施例的分组的一部分的简化框图,其示出了使用子网上的nic实现消息的传送的示例细节;

图7是根据本公开的实施例的分组的一部分的简化框图,其示出了使用子网上的nic实现消息的传送的示例细节;

图8是示出了根据实施例的可与系统相关联的潜在操作的简化流程图;以及

图9是示出了根据实施例的可以与系统相关联的潜在操作的简化流程图;

图10是示出了根据实施例的可与系统相关联的潜在操作的简化流程图;以及

图11是示出了根据实施例的可以与系统相关联的潜在操作的简化流程图;

附图的图不一定按比例绘制,因为在不脱离本公开的范围的情况下,它们的尺寸可以显著变化。

具体实施方式

示例实施例

以下具体实施方式阐述了与用于使用子网上的网络接口控制器(nic)实现消息的传送的系统有关的装置、方法和系统的示例。在示例中,通信可以是使用子网上的nic的大消息。术语“大消息”指的是大于网络最大传输单元(mtu)的消息。mtu是可以在单个网络事务中传送的最大网络层协议数据单元的大小。例如,为了方便起见,参考一个实施例描述诸如结构、功能和/或特性的特征;可以用所述特征中的任何合适的一个或多个来实现各种实施例。

在以下描述中,将使用本领域技术人员通常采用的术语来描述说明性实施方式的各个方面,以将他们工作的实质传达给本领域其他技术人员。然而,对于本领域技术人员显而易见的是,可以仅利用所描述的方面中的一些来实践本文公开的实施例。出于解释的目的,阐述了具体的数字、材料和配置,以便提供对说明性实现的透彻理解。然而,对于本领域技术人员来说显而易见的是,可以在没有具体细节的情况下实践本文公开的实施例。在其他实例中,省略或简化了众所周知的特征,以免模糊说明性实施方式。

在以下具体实施方式中,参考形成其一部分的附图,其中相同的附图标记始终表示相同的部分,并且其中通过说明的方式示出了可以实践的实施例。应当理解,在不脱离本公开的范围的情况下,可以利用其他实施例并且可以进行结构或逻辑上的改变。因此,以下具体实施方式不应被视为具有限制意义。出于本公开的目的,短语“a和/或b”表示(a)、(b)或(a和b)。出于本公开的目的,短语“a、b和/或c”表示(a)、(b)、(c)、(a和b)、(a和c)、(b和c)、或(a、b和c)。

图1是根据本公开的实施例的用于使用子网上的nic来实现消息的传送的系统100的简化框图。系统100可包括一个或多个网络单元102a-102f。网络单元102a-102f中的每一个可以包括存储器、一个或多个应用、通信引擎以及两个或更多个nic。例如,网络单元102a可以包括存储器104、应用106a、通信引擎108和多个nic110a-110c。网络单元102b可包括存储器104、应用106b、通信引擎108和多个nic110d-110f。网络单元102c可以包括存储器104、应用106c、通信引擎108和多个nic110g-110i。每个应用106a-106c可以是虚拟网络功能(vnf)。每个nic110a-110h可以是高速nic,例如高速主机结构接口(hfi)。

网络单元102a-102f中的每一个,更具体地,每个网络单元102a-102f中的一个或多个nic可以使用子网络(子网)彼此通信。例如,网络单元102a中的nic110c和网络单元102b中的nic110d可以使用子网112a进行通信。网络单元102b中的nic110f和网络单元102c中的nic110g可以使用子网112b进行通信。网络单元102a中的nic110a和nic110b、网络单元102b中的nic110e和网络单元102c中的nic110h可以使用子网112c进行通信。网络单元102a-102c还能够使用网络114彼此通信。子网112a-112c中的每一个是网络114的逻辑细分。在示例中,网络114可以是数据中心的一部分。在示例中,一个或多个电子设备116和开放网络118可以与网络114通信。nic110a-110i中的每一个被配置为符合消息传递接口协议。

应当理解,在不脱离本公开的范围的情况下,可以利用其他实施例并且可以进行结构改变。例如,每个网络单元可以具有一个或多个应用、存储器的一个或多个区域和/或一个或多个nic。系统100提供了相当大的灵活性,因为可以提供任何合适的布置和配置而不脱离本公开的教导。

系统100可以被配置为启用恢复方案,使得系统对nic故障具有弹性。除了由双平面组成的系统配置之外,甚至可以在两个网络单元通过可能在不同子网上的多个nic连接时使用系统,只要在两个网络单元之间存在多个nic和通过网络的路径。在示例中,系统100可以被配置为在跨网络114传送消息时包括子网id。子网id(例如,8位)标识包括传送消息的nic并允许系统确定跨系统与nic通信所需的通信路径的子网。如果第一网络单元上的第一nic在第一子网中并且发生故障,则可以将到第一nic的通信重路由到第二子网中的第一网络单元上的第二nic。在示例中,可以使系统能够确定要用于使用第一子网来传送消息的第一子网中的nic,创建包括nic的标识符的清单和标识第一子网的子网id,并且将清单传送给接收方。术语“接收方”包括将接收清单的特定nic。例如,如果nic110a要将清单传送给nic110e,则nic110e将是接收方。子网id可以被添加到nic表,并且nic表可以包括多个nic的标识,与多个nic中的每个nic相关联的子网,以及包括特定nic的特定网络单元的标识。当特定nic在与特定nic关联的特定子网上处于活动状态时,nic表还可以包括指示符。当确定要用于传送消息的第一子网中的多个nic中的一个是非运行nic并且无法运行时,系统可以确定包括非运行nic的网络单元,确定位于不同子网上,但位于包含非运行nic的同一网络单元上的备用nic,并使用不同子网与备用nic通信。与备用nic的通信可以包括用于禁用非运行nic的请求。

图1的元件可以通过采用任何合适的连接(有线或无线)的一个或多个接口彼此耦合,这些连接为网络(例如,网络112等)通信提供可行的路径。另外,图1的这些元件中的任何一个或多个可以基于特定配置需求与架构组合或移除。系统100可以包括能够用于在网络中发送或接收分组的传输控制协议/因特网协议(tcp/ip)通信的配置。系统100还可以在适当时并且基于特定需要与用户数据报协议/ip(udp/ip)或任何其他合适的协议结合操作。

为了说明系统100的某些示例技术,理解可能遍历网络环境的通信是重要的。可以将以下基础信息视为可以适当地解释本公开的基础。

消息传递接口(mpi)已成为高性能计算(hpc)中使用的事实上的编程模型。mpi提供点对点以及集体通信功能。用于某些nic的软件堆栈可以提供称为开放式结构接口(ofi)的低级通信应用程序接口(api),它利用硬件的卸载功能来实现有效的点对点和集体通信。

标记匹配位是当前mpi协议的一部分。mpi不是简单地像tcp一样流式传输数据,而是将消息定义为有限有效载荷加包络(包含标记匹配位)。在接收方处,传入消息仅被传递到与消息的包络中找到的标记匹配位相关联的存储器区域。从一个设备传送到另一个设备的消息分组括标记匹配位,接收方可以使用该标记匹配位来识别消息并确定消息需要存储在何处。在当前的mpi协议中,多个消息可以具有相同的标记匹配位值。如果来自单个发起方的多个消息和多个在接收方处接收到具有相同标记匹配位,则根据mpi标记匹配规则,消息按发送它们的顺序进行匹配,即使消息乱序到达(例如,由于不同的网络路径或过时的分组)。

高性能计算(hpc)系统的最新趋势已经证明,移动到具有peta和exa-scale功能的机器是可能的,这不仅是因为单个节点或网络单元和互连的能力的改进,而且还因为使用大量节点增加系统大小的规模。然而,随着系统规模的开始增长,出现了一些挑战。一个挑战涉及效率,因为效率问题需要可以完全卸载到硬件的低开销通信协议。虽然大多数具有现代rdma功能的设备都提供了这样的卸载,但某些设备支持能够实现mpi和pgas编程模型的高效实现的能力。这包括支持被预期将由软件和中间件组件大量使用的有效的标记匹配、集体和原子操作。另一个挑战涉及应用性能,其中很大一部分取决于在此类系统上运行并至少部分地决定了拓扑的选择的应用的通信模式。诸如胖树之类的拓扑通过用于任意通信排列的路径分集、完全二分带宽提供良好的容错性,并且需要更简单的路由算法以实现无死锁路由。但是,它们不提供自适应路由功能,允许结构对网络中的拥塞作出反应并选择备用路径,并且可以容忍因此乱序到达的分组。另一个挑战涉及成本,并且成本的一个重要因素是这种大系统所需的基础设施的成本(例如昂贵的电缆的成本)。像dragonfly这样旨在提高整体性能、降低系统成本并提供自适应路由等功能的拓扑结构已经变得越来越流行,其代价是更复杂的路由要求。

随着系统变得越来越大,它们的平均故障间隔时间(mtbf)显著降低,并且必须对这样的系统进行架构化以确保它们对故障具有弹性。一些大系统使用dragonfly拓扑,并使用“双平面”配置构建,其中每个节点经由两个单独的nic连接到两个相同但冗余的结构平面(子网)。虽然dragonfly拓扑在单个结构平面中提供足够的冗余(例如,在链路或交换机故障的情况下,在一对节点之间的备用路由),但系统中存在降低系统整体弹性的“弱链路”。两个有问题的弱链路是nic本身以及nic与群组中的其相邻交换机(第一级交换机)之间的链路。

一些当前系统解决了对容错方案的需求,以改善大系统的整体弹性。一个系统描述了一种用于消息传递软件的轻量级协议,它能够从网络故障中恢复,例如交换机和电缆以及端节点网络设备本身,但是,这种协议依赖于使用rc传输队列对(qp)以用于可靠性和错误状态/通知。该系统还在ibhca提供的顶端构建了更高级(mpi)协议,以解决所发现的问题中的一些,并且还使用额外的存储器进行缓冲,这限制了可扩展性。此外,随着hpc系统规模的扩大,mpi的最新进展已经从rcqp将重点转移,这需要限制可扩展性的每个对等连接状态(存储器占用面积)并且udqp提供连接较少的模型,但缺乏协议所需的可靠性和错误通知。另一个当前系统描述了一种使用多个轨道但仅限于ib上的mpi提供弹性的方案。此外,当前系统都没有解决过时分组的问题。

如图1所示,使用子网上的网络接口控制器来进行消息的传送的系统可以解决这些问题(和其他问题)。mpi是高性能计算(hpc)的事实上的通信模型,并提供在进程和节点之间发送和接收消息的能力。mpi提供点对点和集体通信功能。用于某些nic的软件堆栈可以提供称为开放式结构接口(ofi)的低级通信应用程序接口(api),它利用硬件的卸载功能来实现有效的点对点和集体通信。系统100可以被配置为跨多个nic传送大消息并且仍然维护消息/标记匹配排序并且不违反作为mpi协议的一部分的mpi标记匹配规则。在系统100中,每个nic被配置为符合mpi协议

mpi标记匹配规则通常被理解为点对点语义的某些属性的排序保证。mpi标记匹配规则是非超越规则,其包括促进发送与接收的匹配,并保证消息传递是确定性的要求。在使用单个nic和单个远程nic来发送和接收消息的情况下,可以相对容易地维护用于小型和大消息的标记匹配,因为所有消息都是按顺序发送的,从单个nic发起,并且目的地为单个远程nic。

当发送大消息时,可以使用get(获取)命令。get命令是当前mpi协议的一部分。在get操作中(例如,使用get命令的操作),接收方将消息传送给发起方(在该示例中,发起方通常被称为目标,因为它是get命令的“目标”),所述消息请求来自发起方的数据。接收方可以使用get命令从包含数据的发起方的存储器区域中提取(pull)数据。get命令的参数中的一个是从中开始提取数据的偏移量。例如,要提取长度为“n”字节的消息,可以发出第一get命令,其偏移量为0,并且长度为n/2,并且可以发出第二get命令,其偏移量为n/2且长度为n/2。偏移量包含在作为get命令一部分的消息的标头部分中。消息的标头部分中包括的另一个参数是消息标识符(id)。此外,在从发起方到接收方的put(输入)命令中,消息id将包括在标头中。消息id是唯一值,用于区分一条消息与其他消息。

标记匹配位也是当前mpi协议的一部分。mpi不是简单地像tcp一样流式传输数据,而是将消息定义为有限有效载荷加上包络(包含标记匹配位)。在接收方处,传入消息仅被传递到与消息的包络中找到的标记匹配位相关联的存储器区域。从一个设备传送到另一个设备的消息分组括标记匹配位,接收方可以使用该标记匹配位来识别消息并确定消息需要存储在何处。在当前的mpi协议中,多个消息可以具有相同的标记匹配位值。如果来自单个发起方的多个消息和多个在接收方处接收到具有相同标记匹配位,则根据mpi标记匹配规则,消息按它们发送的顺序进行匹配,即使消息乱序到达(例如,由于网络路径不同)。当消息到达并且乱序匹配时,可能会发生错误。

在示例中,系统100可以被配置为从所选择的主nic上的发起方发送相对小的消息,该消息向接收方提供发起方nic的列表以及传输协议特定信息。主nic是一个nic,用于针对一对mpi进程的所有消息(与大小无关)。然后,接收方可以使用发起方nic的列表作为目标来传送多个get命令,并且当接收方准备好提取大消息时从发起方的存储器中提取大消息。系统100可以被配置为使得从接收方到发起方的get命令包括消息id作为标记匹配位。消息id标识发起方上的其中针对大消息的数据所位于的存储器的暴露区域。接收方可以将消息id传送给发起方,以便发起方知道哪些数据和哪些存储器的区域与get命令相关联。此外,接收方可以在其节点上选择一组nic来发起get命令。

为了区分应用发起的小消息与包括发起方nic的列表的小消息,包括发起方的nic的列表的消息利用现有标头数据字段,但是利用信息对标头数据字段进行编码,其中所述信息将允许接收方识别出发起方正在尝试使用多个nic发送大消息。包括发起方nic的列表的小消息的包络部分可以包括针对消息的消息id(用作标记匹配位)。接收方可以使用消息id来识别针对消息的数据所位于的发起方的存储器的暴露区域。发起方对get命令的响应还将包括消息id,并且接收方可以使用消息id来确定大消息的每个块在到达接收方处时在接收方的存储器的暴露的区域中的何处进行存储,并重建大块消息的块。

发起方nic的列表可以作为清单包括在消息的有效载荷部分中。一旦包括清单的初始小消息从发起方传递到接收方,接收方就可以分析清单并创建策略以使用多个get命令在网络上提取所提取的大消息。例如,接收方可以使用一个或多个命令来发起整个大消息的提取,这将导致大消息的传送受益于支持其他效率的诸如自适应路由之类的拓扑。这允许以任何顺序传递大消息的块,并且清单向接收方提供足够的信息以在标记匹配成功完成后提取整个大消息。不违反mpi标记匹配规则,因为初始小消息分组括消息id(用作标记匹配位),需要其来确保将块发送到接收方中的正确存储器区域并允许将块重建为原始的大消息。

在mpi中,消息由数据有效载荷加上包含元数据的包络组成。每条消息的包络可以包括源、标记和通信符。源、标记和通信符用于将发送操作与特定接收操作进行匹配。接收操作被发布到待处理的接收队列,在那里它们等待传入的消息。当每个消息到达时,将其包络与每个入队的接收进行比较,并将消息传送(复制)到由第一匹配接收分配的存储区域中。

当呈现要发送的消息时,发起方首先决定它是否必须采用多单元消息方案(这里称为“mu”)。如果消息小于mtu,则可以使用标准put命令发送消息,因为整个消息适合单个分组,并且可以利用单个消息来传递到接收方。在当前标准put命令(例如,mpiput命令)中,put命令的标头部分包括消息id。mtu是可以在单个网络事务中传送的最大网络层协议数据单元的大小。固定mtu参数通常与通信接口或标准相关联。如果消息高于阈值,则通过在消息的有效载荷部分中发送相对少量的数据(例如,小于或等于64字节)来发起发送,所述相对少量的数据描述了发起方计划使用的用于大信息的通信的nic的列表。阈值可以包括高于mtu的消息。在示例中,管理员可以基于系统性能、带宽、总成本或其他考虑将阈值设置为大于mtu的消息大小。在一些系统中,如果消息大于网络mtu,则可以使用单个nic或跨多个nic发送消息,因为略大于mtu的消息可能不会受益于mu。

有效载荷部分中相对少量的数据称为清单。清单可以包括发起方上的nic的列表,接收方可以使用上述nic来获取大消息。nic的列表可以包括发起方上的可用于到达接收方上的目的地的所有nic。在某些情况下,只有发起方上可用的nic的子集可能是此列表的一部分。请注意,发起方可能会选择裁剪所有可用的nic的列表,以减少与向多个nic暴露存储器的区域的相关联的开销、针对其他业务保留nic,和/或仅提供可从接收方访问的nic。发起方可以将包括针对大消息的数据的存储器的分配的区域暴露给清单中的每个nic,其中,发起方计划使用所述nic来传递大消息。接收方可以从这些nic中的任何一个中自由选择以提取大消息的任何部分或块。

在说明性示例中,发起方可以确定能够传送大消息和每个nic的地址的多个本地nic。发起方将包括针对大消息的数据的存储器区域暴露给多个nic,构建包含将用于将大消息传送到接收方的所有多个nic的地址的清单,将消息id插入在mu消息的包络部分,并将包括清单和消息id的mu消息而不是大消息传送给接收方。mu消息的标头部分包括指示发起方打算使用mu的切换标志或位。术语“标头数据”包括标头信息(例如,源标识符、目的地标识符、类型等)。如果设置了mu位,则接收方知道消息数据不是应用数据,而是包括清单(针对发起方的nic的寻址信息的列表)。接收方知道它具有哪些nic,并且基于清单,接收方知道发起方可使用哪些nic以使接收方使用get命令请求大消息。接收方可以使用get命令从暴露给每个nic的存储器区域中提取大消息。例如,要在两个块中提取长度为“n”字节的消息,一个nic将发出具有偏移量为0且长度为n/2的get命令,而另一个nic将发出具有偏移量为n/2并且长度还是n/2的get命令。向发起方的get命令还可以在get命令的包络部分中包括唯一的消息id。消息id是唯一的标记匹配值,发起方将其与已暴露给在清单中列出的每个nic的存储器区域(包括针对大消息的数据)关联。为了生成消息id,可以读取简单计数器并且针对每个消息递增,或者可以从与发送操作唯一相关联的硬件资源导出该简单计数器(例如,nic匹配针对暴露的存储器区域的条目句柄)。关键要求是消息id是唯一值,其用于区分大消息和所有其他消息。当接收方发出get命令来提取消息数据时,它使用消息id(在发起方发送的mu消息的包络部分中)作为标记匹配位,以确保请求和接收正确的数据。

系统100可以被配置为利用细粒度方案,其中单对mpi等级可以使用多个nic(在源和目的地上)将单个大消息传送到目的地mpi等级。这可以在支持rdma的设备之上实现软件协议,该设备不仅卸载传输协议,还可以处理标记匹配而不违反标记匹配规则。在系统100中,从主nic发起所有小消息和大消息。这最初可能看起来似乎有限,但可以通过观察到mpi标记匹配规则仅适用于一对mpi端点来消除或减轻限制。这意味着用于标记匹配的主nic对于不同的mpi进程对可以是不同的(例如,mpi等级id可以用作散列函数来计算应当使用本地nic中的哪个来发送包括清单和消息id的初始消息)。

在示例中,当接收方接收消息时,接收方检查标头数据以查看该消息是否是mu消息并且mu正在使用中。如果发起方发送的消息不是mu消息(例如消息很小或低于阈值),则接收方接受该消息作为标准put命令,因为整个消息适合单个消息分组并被传递给接收方。如果消息很大(例如,消息大于mtu)但是未启用mu,则可以将消息分解成块,并且可以使用rts/cts机制来发送每个块以传送每个块。如果发起方是不支持mu的传统发起方,也可能发生这种情况。如果报头数据中的mu字段指示发起方选择不使用mu,则执行预期的接收操作。如果存在标头数据并且设置了mu指示符,则指示消息中的有效载荷包括清单,则接收方然后尝试解释清单以构建用于从发起方提取大消息的nic的列表。

系统100可以被配置为受益于使用多个nic和路径来传输大消息。在计算节点被配置有弹性拓扑(如dragonfly和多个子网)的大系统中,此类协议会增加与每个节点上的nic数量成比例的消息传输的带宽。当每个nic连接到不同子网时,这尤其有用,因为应用能够利用两个平面来传输大消息。利用nic硬件、结构管理和在节点上运行的通信库(例如,运行时软件)中的一些基本元件,可以扩展网络以在故障的情况下提供弹性。

在具有第一平面和第二平面的示例中,其中在{group_0,switch_m-1,node_0}和{group_k,switch_0,node_1}上运行的一对进程之间分别发送消息(分成分组),如果正在使用第一平面(每个节点上的hfi0)并且第一平面中存在链路或交换机中断,则由于自适应路由方案,交换机中的路由表提供了用于将消息传递到目的地的备用路由(例如,自适应路由方案可用于拓扑,例如dragonfly和其他拓扑)。即使结构中没有中断,自适应路由也可以通过使用到目的地的备用非最小路由来改善性能,并解决网络中的拥塞问题。但是,这假设消息的分组能够进入结构,这意味着用于发送消息的nic和将nic端口连接到第一级交换机的“本地”链路仍然可用。如果它们仍然不起作用,则分组可能会丢失。

系统100可以被配置为使得在检测到消息失败(或消息失败的一部分)时,通信引擎108可以利用清单中包括的信息来找到备用nic并重放这样的消息。由于使用卸载到硬件的rdma允许传入数据直接放在最终应用缓冲区中而不涉及内核,因此重放消息的一个关键问题是较晚到达的过时分组。例如,在失败后在不同的nic上重放消息。在消息被标记为完成(完成事件)并且与nic相关联的缓冲区的所有权被切换到应用之后,从原始nic被注入的分组可能仍然在网络中并且可以落在缓冲区上导致数据损坏(例如,如果应用已使用数据并将缓冲区重新用于另一条消息)。清单可以为软件提供足够的信息,以禁用nic中的相应条目并防止此类情况。

在网络拓扑的简化版本中,子网中的交换机通过nic连接到一个或多个网络单元。每个交换机通过一组链路(例如,本地分组全部到所有)连接到子网中的每个其他交换机。链路还将本地交换机连接到其他分组中的交换机。在示例中,在一对应用(例如,应用106a和106b)之间发送消息(分成分组)。如果正在使用第一子网并且第一子网中存在链路或交换机中断,则子网的交换机中的路由表将提供备用路由以将消息传递到目的地,这要归功于拓扑(例如,dragonfly)中可用的自适应路由方案。即使子网中没有中断,自适应路由也可以通过使用到目的地的备用非最小路由来改善性能,并解决网络中的拥塞问题。但是,所有这些都假定消息的分组能够进入子网,这意味着它们在其上被发送的nic以及将nic连接到第一级交换机的本地链路仍然起作用。

系统100可以被配置为跨多个nic对大消息进行条带化,以便按比例增加两个应用或进程之间的通信带宽。在双平面配置的情况下,这种方案利用两个平面,因为每个节点使用两个nic连接,这两个nic继而是两个独立但相同的平面或子网的一部分。然而,在平面(例如,链路或交换机)中的一个上出现故障的情况下,不存在用于提供可靠的方式来传送消息的机制或协议。上述“弱链路”特别重要,因为nic或本地链路故障可能导致整个应用故障,除非软件能够在其他功能nic上对消息进行故障转移(重放它们)。

在示例中,系统100可以被配置为将大消息拆分成跨多个nic发送的段。此外,为了通过在一对节点之间使用多个nic来提供性能优势,可以将系统配置为在网络故障的情况下提供容错。例如,利用正确的信息,通信引擎108可以在其他可用资源上重放失败的消息。这当然假设初始标记匹配始终在两个对等节点之间的一组主nic上一致地发生。

用于构建弹性方案的广泛要求包括基于硬件的错误检测和报告方案。这可以包括在发起方和目标上的简单的基于硬件的事件传递机制,其指示成功或失败以及原因代码。广泛的要求还包括硬件和软件之间定义良好的接口(例如事件队列和异步错误报告),其允许软件配置、检测和响应错误。广泛的要求还包括使用多个nic来发送和接收消息。在故障的情况下,可以在来自可用列表的功能nic上重放失败的消息。

在示例中,系统100可以被配置为维持针对硬件卸载nic的正确性。更具体地,系统100适用于硬件卸载nic,例如实现门户协议或类似协议的nic。门户协议基于基本构建块的概念,可以将基本构建块组合以支持各种上层协议和网络传输语义。在示例中,系统100可以被配置为提供使用门户协议的概念中的一些的通用方案,并且提供可以允许并行计算系统的节点之间的可伸缩、相对高性能的网络通信的api并且尝试提供一组紧密结构的构建块,利用它们可以构建各种各样的上层协议(例如mpi、shmem或upc),同时保持相对高的性能和可扩展性。

在检测到故障(例如,在几次重试之后消息失败)之后,硬件(例如,nic110a)可以经由诸如接口的事件队列将故障报告给通信引擎(例如,通信引擎108)。每个事件都可以提供原因代码以及对失败消息的引用。这样的事件允许通信引擎决定何时重放关于替代资源的消息。例如,如果原因代码指示由于分组包含无效目的地而导致消息失败,则无法在不同的nic上重试该消息,因为它将导致相同的结果。但是,如果原因代码指示硬件超时导致失败(例如,由于远程nic故障或链路中断而未从目标接收到确认消息(ack)),则通信引擎可以评估其他可能的选项并且可能重放网络单元上不同nic上的失败消息。必须注意,这种机制依赖于在发送原始消息的本地nic上的对事件的传递。在本地nic本身发生故障的情况下,可以存在一种机制,通过该机制向通信引擎通知“致命事件”(例如,与通信引擎的通信),允许通信引擎通过网络单元中的其他nic重放所有未完成的消息(不知道每条消息的哪些部分是完整的)。

通信引擎可以通过执行“刷新”操作来处理网络中潜在的过时分组。此外,通信引擎可以枚举nic表中的故障nic,并将它们从作为可用资源的通告中消除。必须注意的是,nic可能会被全局(针对所有目标)或仅针对特定目标消除,具体取决于故障。例如,如果用于发送消息的故障是由于本地(级0)链路故障,则会影响向任何目标发送消息,因此是全局故障。但是,如果用于向目标发送消息的故障是由于目标端链路故障,则仍然可以使用所使用的nic向其他目标发送消息。

在特定示例中,可以扩展消息(例如,消息的保留位)以包括子网id。子网id(例如,8位)标识包括传送消息的nic的子网。子网由一组端口组成,其中每个端口都具有一个或多个nic,使得给定子网中的所有nic都是唯一的。在由多个子网组成的群集中,结构管理器将为每个子网配置单独的子网id。这也可以应用于每个nic具有多个端口并且每个端口分配给不同子网的示例。

在示例中,发起方节点“通告”向其暴露应用缓冲器的nic的列表。目标在发出get请求时使用此nic的列表。为确保正确性,目标必须通过执行其本地nic中的每个的子网id与发起方提供的子网id的匹配来构建nic的列表。一旦识别出这对nic,目标就可以通过多对nic发出get请求。每个请求标识到发起方缓冲区的不同偏移量。

目标必须在其标记消息完成并将其切换到应用之前等待每个消息块成功完成。在一个或多个块发生故障的情况下,必须检查nic传送的故障事件,以查看是否可以在不同的nic上重试消息。为确保在使用其他nic时的正确性,目标必须比较子网id,以确保它向发起方端的正确nic发出get请求。

在响应分组在网络中被延迟的情况下(例如,拥塞或结构故障),由于超时而向应用报告故障。由于nic将传入数据直接放入目的地缓冲区,因此在重试消息成功完成并且缓冲区被切换到应用后,这些延迟分组可能会到达不同的nic或子网平面。这会导致数据损坏。要处理此类方案,目标必须禁用用于发出get请求的nic。一旦被禁用,到达nic的过时分组被丢弃,并且禁用消息(例如,ptl_ni_pt_disabled事件)被发送回分组的发起方以禁用nic。在重新启用nic之前,通信引擎必须执行恢复操作,其中将全局屏障发送到作业中的所有节点,以确保它们停止发送分组。必须注意的是,禁用nic并与网络单元中的其他nic继续可以相对快速地完成,并且不需要完成甚至开始恢复过程。因此,这样的过程允许应用在故障的情况下进一步发展。如果未实现此类弹性方案,则必须中止并重新开始应用。

转到图1的基础结构,示出了根据示例实施例的系统100。通常,系统100可以以任何类型或拓扑的网络实现。网络114表示用于接收和发送通过系统100传播的信息的分组的互连通信路径的一系列点或节点。网络114提供节点之间的通信接口,并且可以被配置为任何局域网(lan)、虚拟局域网(vlan)、广域网(wan)、无线局域网(wlan)、城域网(man)、内联网、外联网、虚拟专用网(vpn)以及促进通信网络环境的任何其他适当的架构或系统,或其任何合适的组合,包括有线和/或无线通信。

在系统100中,可以根据任何合适的通信消息传递协议来发送和接收包括分组、帧、信号、数据等的网络业务。合适的通信消息传递协议可以包括多层方案,例如mpi、开放系统互连(osi)模型,或其任何推导或变体(例如,传输控制协议/网际协议(tcp/ip)、用户数据报协议/ip(udp/ip))。通过网络的消息可以根据各种网络协议(例如,以太网、mpi、infiniband、omnipath等)进行。另外,还可以在系统100中提供蜂窝网络上的无线电信号通信。可以提供合适的接口和基础设施以实现与蜂窝网络的通信。

这里使用的术语“分组”指的是可以在分组交换网络上的源节点和目的地节点之间路由的数据单元。分组包括源网络地址和目的地网络地址。这些网络地址可以是tcp/ip消息传递协议中的因特网协议(ip)地址。这里使用的术语“数据”是指任何类型的二进制、数字、语音、视频、文本或脚本数据,或任何类型的源或目标代码,或可以在电子设备和/或网络中从一个点传送到另一个点的任何适当格式的任何其他合适的信息。另外,消息、请求、响应和查询是网络业务的形式,因此可以包括分组、帧、信号、数据等。

在示例实现中,网络单元102a-102f旨在包含网络单元、网络设备、服务器、路由器、交换机、网关、网桥、负载平衡器、处理器、模块或任何其他合适的设备、组件、元件、或者可操作以在网络环境中交换信息的对象。网络单元102a-102f可以包括便于其操作的任何合适的硬件、软件、组件、模块或对象,以及用于在网络环境中接收、发送和/或以其他方式传送数据或信息的合适接口。这可以包括允许有效交换数据或信息的适当算法和通信协议。网络单元102a-102f中的每一个可以是虚拟的或包括虚拟元件。

关于与系统100相关联的内部结构,网络单元102a-102f中的每一个可以包括用于存储将在本文概述的操作中使用的信息的存储器元件。网络单元102a-102f中的每一个可以将信息保持在任何合适的存储器元件(例如,随机存取存储器(ram)、只读存储器(rom)、可擦除可编程rom(eprom)、电可擦除可编程rom(eeprom)、专用集成电路(asic)等)、软件、硬件、固件,或者在适当的情况下并且基于特定需要的任何其他合适的组件、设备、元件或对象。这里讨论的任何存储器项应该被解释为包含在广义术语“存储器元件”内。此外,系统100中使用、跟踪、发送或接收的信息可以在任何数据库、寄存器、队列、表、高速缓存、控制列表或其他存储结构中提供,所有这些都可以在任何合适的时间范围内引用。任何这样的存储选项也可以包括在这里使用的广义术语“存储器元件”中。

在某些示例实现中,这里概述的功能可以通过在一个或多个有形介质中编码的逻辑来实现(例如,在asic中提供的嵌入式逻辑、数字信号处理器(dsp)指令、由处理器或其他类似机器等执行的软件(可能包括目标代码和源代码)等),其可以包括非暂时性计算机可读介质。在这些实例中的一些实例中,存储器元件可以存储用于本文描述的操作的数据。这包括存储器元件能够存储被执行以执行本文描述的活动的软件、逻辑、代码或处理器指令。

在示例实现中,系统100的元件(诸如网络单元102a-102f)可以包括软件模块(例如,通信引擎108)以实现或促进如本文所概述的操作。这些模块可以以任何适当的方式适当地组合,这可以基于特定的配置和/或供应需求。在示例实施例中,这样的操作可以由硬件执行,在这些元件外部实现,或者包括在一些其他网络设备中以实现预期的功能。此外,模块可以实现为软件、硬件、固件或其任何合适的组合。这些元件还可以包括可以与其他网络单元协调以便实现操作的软件(或往复式软件),如本文所概述的。

另外,网络单元102a-102f中的每一个可以包括处理器,该处理器可以执行软件或算法以执行如本文所讨论的活动。处理器可以执行与数据相关联的任何类型的指令以实现本文详述的操作。在一个示例中,处理器可以将元素或物品(例如,数据)从一个状态或事物变换为另一个状态或事物。在另一示例中,本文概述的活动可以用固定逻辑或可编程逻辑(例如,由处理器执行的软件/计算机指令)来实现,并且本文中标识的元件可以是某种类型的可编程处理器、可编程数字逻辑(例如,现场可编程门阵列(fpga)、可擦除可编程只读存储器(eprom)、eeprom)或包括数字逻辑、软件、代码、电子指令或其任何合适组合的asic。本文描述的任何潜在处理元件、模块和机器应被解释为包含在广义术语“处理器”内。

转到图2a,图2a是系统100中的通信的示例的简化框图。在示例中,网络单元102a可包括存储器104、应用106a、通信引擎108和nic110a和110b。存储器104a可以包括nic表120。网络单元102b可以包括存储器104、应用106b、通信引擎108和nic110d和110e。存储器104b可以包括nic表120。网络单元102c可以包括存储器104、应用106c、通信引擎108和nic110g和110h。存储器104c可以包括nic表120。网络单元102d可以包括存储器104、应用106d、通信引擎108和nic110j和110k。存储器104d可以包括nic表120。

网络单元102a中的nic110a可以使用第一级子网路径124a与第一级交换机122a通信,并且网络单元102b中的nic110d可以使用第一级子网子网路径124b与第一级交换机122a通信。第一级交换机122a可以使用第一子网路径126a与网络114通信。另外,网络单元102c中的nic110g可以使用第一级子网路径124c与第一级交换机122c通信,并且网络单元102d中的nic110j可以使用第一级子网路径124d与第一级交换机122c通信。第一级交换机122c可以使用第一子网路径126b与网络114通信。nic110a、110d、110g和110j以及第一级交换机122a和122c位于同一第一子网上。

网络单元102a中的nic110b可以使用第一级子网路径128a与第一级交换机122b通信,并且网络单元102b中的nic110e可以使用第一级子网子网路径128b与第一级交换机122b通信。第一级交换机122b可以使用第二子网路径130a与网络114通信。另外,网络单元102c中的nic110h可以使用第一级子网路径128c与第一级交换机122d通信,并且网络单元102d中的nic110k可以使用第一级子网路径128d与第一级交换机122d通信。第一级交换机122d可以使用第二子网路径130b与网络114通信。nic110b、110e、110h和110k以及第一级交换机122b和122d位于相同的第二子网上。

在示例中,应用106a可以使用nic110a和nic110g与应用106c通信。在一个方向上,通信将在第一级子网路径124a上从nic110a行进到第一级交换机122a,在第一级路径126a上从第一级交换机122a到网络114,在第一子网路径126b上从网络114到第一级交换机122c,并且在第一级子网路径124c上从第一级交换机122c到nic110g。在相反方向上,通信将在第一级子网路径124c上从nic110g行进到第一级交换机122c、在第一子网路径126b上从第一级交换机122c到网络114、在第一子网路径上从网络114到第一级交换机122a,并且在第一级子网路径124a上从第一级交换机122a到nic110a。从第一级交换机122a通过网络114到第一级交换机122c的通信路径的问题留给网络架构来处理。然而,网络架构不能处理从网络单元102a到第一级交换机122a或从网络单元102c到第一级交换机122c的问题。

转到图2b,图2b是系统100中的通信的示例的简化框图。如图2b所示,第一级子网路径124c已被破坏并且阻止nic110g与第一级交换机122c之间的通信。结果,网络单元102c和应用106c不再能够与同第一级子网路径124c相关联的第一子网上的网络单元102a和应用106a通信。

在示例中,通信引擎108a可以从nic110a接收与nic110g的通信失败的故障通知。通信引擎108a可以分析nic表120并确定nic110g位于网络单元102c上并且本地nic110b与nic110h通信,nic110h也位于网络单元102c上。通信引擎108a可以使用nic110b、第一级子网路径128a、第一级交换机122b、第二子网路径130a、网络114、第二子网路径130b、第一级交换机122d、第一级子网路径128c和nic110h向通信引擎108c发送带外消息。

通信引擎108c可以接收带外消息并禁用nic110g。而且,通信引擎108c可以重新发送未被传送或针对其未收到确认的任何数据。另外,通信引擎108c可以改变nic表120中的针对nic110g的条目以指示nic110g被禁用。更新的nic表120可以被传送到系统100中的网络单元。

在另一示例中,通信引擎108c可以从nic110g接收与nic110a的通信失败的故障通知。通信引擎108c可以分析nic表120并确定nic110a位于网络单元102a上并且本地nic110h与nic110b通信,nic110b也位于网络单元102a上。通信引擎108c可以使用nic110h、第一级子网路径128c、第一级交换机122d、第二子网路径130b、网络114、第二子网路径130a、第一级交换机122b、第一级子网路径128a和nic110b向通信引擎108a发送带外消息。

通信引擎108a可以接收带外消息并禁用nic110a。另外,通信引擎108a可以改变nic表120中的针对nic110g的条目以指示nic110g被禁用。更新的nic表120可以被传送到系统100中的网络单元。

转到图2c,图2c是系统100中的通信的示例的简化框图。如图2c所示,第一级子网路径124a已被损坏并且阻止nic110a与第一级交换机122a之间的通信。结果,网络单元102a和应用106a不再能够与同第一级子网路径124a相关联的第一子网上的网络单元102c和应用106c通信。

在示例中,通信引擎108c可以从nic110g接收与nic110a的通信失败的故障通知。通信引擎108c可以分析nic表120并确定nic110a位于网络单元102a上并且本地nic110h与nic110b通信,nic110b也位于网络单元102a上。通信引擎108c可以使用nic110h、第一级子网路径128c、第一级交换机122d、第二子网路径130b、网络114、第二子网路径130a、第一级交换机122b、第一级子网路径128a和nic110b向通信引擎108a发送带外消息。

通信引擎108a可以接收该带外消息并禁用nic110b。而且,通信引擎108a可以重新发送未被传送或针对其未收到确认的任何数据。另外,通信引擎108a可以改变nic表120中的针对nic110b的条目以指示nic110b被禁用。更新的nic表120可以被传送到系统100中的网络单元。

在另一示例中,通信引擎108a可以从nic110b接收与nic110g的通信失败的故障通知。通信引擎108a可以分析nic表120并确定nic110g位于网络单元102c上并且本地nic110b与nic110h通信,nic110h也位于网络单元102c上。通信引擎108a可以使用nic110b、第一级子网路径128a、第一级交换机122b、第二子网路径130a、网络114、第二子网路径130b、第一级交换机122d、第一级子网路径128c和nic110h向通信引擎108c发送带外消息。

通信引擎108c可以接收该带外消息并禁用nic110g。另外,通信引擎108c可以改变nic表120中针对nic110b的条目以指示nic110b被禁用。更新的nic表120可以被传送到系统100中的网络单元。

转到图3,图3是用于系统100中的通信的nic表120的示例的简化框图。如图3所示,nic表120可包括nic列134、子网列136、节点列138以及活动列140。nic列134可以包括系统100中的nic的标识符。子网列136可以指示哪个子网与nic列134中的每个nic相关联。节点列138可以指示什么节点或网络单元与nic列134中的每个nic相关联。活动列140可以指示nic列134中的nic是否在与nic相关联的子网上是活动的。

转到图5,图5是示出了根据本公开的实施例的用于系统100的消息142的示例细节的简化框图。消息142可以用在网络单元之间的通信中。例如,当传送包括大于mtu阈值等的数据量的消息时,消息142可以在传送包括小于mtu的数据量的消息时用于put命令、get命令。消息142可以包括标头部分144、包络部分146和有效载荷部分148。标头部分144可以包括消息142到达其预期目的地所需的寻址和其他数据。标头部分144还可以包括偏移数据和mu相关数据。在示例中,包络部分146是标头部分144的一部分。

包络部分146可以包括帮助区分各种消息并允许网络单元选择性地接收消息142的数据。包络部分146通常是依赖于实现的,并且可以包括消息标记、通信符、源、目的地、消息长度、标记匹配位、消息id和其他特定于实现的信息。在示例中,包络部分146可以包括通信符数据。通信符数据可以包括用于一组或一个有序组的进程的句柄,并且可以指定通信上下文。有效载荷部分148可以包括消息142的有效载荷数据。在示例中,有效载荷部分148可以包括清单。

转到图5,图5是示出了根据本公开的实施例的用于系统100的报标头部分144的示例细节的简化框图。标头部分144可以包括偏移部分150和mu数据部分152。mu数据部分152可以包括mu使能部分154、nic部分156、消息长度部分158和唯一消息部分160。偏移部分150包括分配的存储器区域中的偏移量,从该偏移量开始针对对get命令的响应提取数据。在示例中,mu数据部分152可以是64位字段。

mu使能部分154可以与mu参数相关。例如,mu使能部分154中的值0可以指示mu协议被禁用或未被选择。mu使能部分154中的值1可以指示在发起方到接收方方向上启用mu。mu使能部分154中的值2可以指示在接收方到发起方方向上,mu被启用并且可以指示清除。可以保留mu使能部分154中的值3。在特定示例中,mu使能部分154可以是两位整数。

nic部分156可以指示nic相关数据。例如,nic部分156中的零值可以是未定义的。nic部分156中的一个值可以是发起方特定的,并指定指示器有多少nic可用于接收方来提取消息的块。nic部分156中的第二值可以是接收方特定的,并指定接收方将使用多少个发起方端nic来提取消息的块。这还可以用于向指示器提供在清理存储器的分配的区域之前从接收方期望多少get命令的计数。可以保留nic部分156中的第三值。在特定示例中,nic部分156可以是三位整数。

消息长度部分158可以指示消息长度的大小。例如,消息长度部分158中的零值可以是未定义的。消息长度部分158中的一个值可以指示存储器的发起方分配的区域的长度。消息长度部分158中的第二值可以指示跨nic的提取请求的可能长度。可以保留消息长度部分158中的第三值。在特定示例中,消息长度部分158可以是32位整数。

在put命令中,唯一消息部分160可以指示用于与消息142有关的通信的标记匹配或消息id。在来自接收方的响应get命令中,消息id用作标记匹配位并且包括在消息的包络部分内。在示例中,唯一消息部分160中的零值可以是未定义的。唯一消息部分160中的一个值可以指示针对给定的多单元事务发起方生成的唯一消息id。接收方可以使用唯一消息部分160中的第二值来回应来自发起方的消息id字段。可以保留唯一消息部分160中的第三值。在特定示例中,唯一消息部分160可以是二十八位整数。

转到图6a,图6a是示出了根据本公开的实施例的用于系统100的包络部分146a的示例细节的简化框图。包络部分146a可以包括源部分162、目的地部分164和标记匹配位部分166。源部分162可以帮助识别消息142的来源,并且由消息源142的标识隐含地确定。消息142的源可以是发起方或接收方(例如,作为put命令消息的源的发起方或作为get命令消息的源的接收方)。目的地部分164可以帮助识别消息142的目的地,并且由mpi中的dest参数指定。目的地可以是发起方或接收方。标记匹配位部分166可以帮助提供用于区分不同消息的机制。在mpi中,发送过程必须将标记与消息相关联以帮助识别消息。

转到图6b,图6b是示出了根据本公开的实施例的用于系统100的包络部分146b的示例细节的简化框图。在来自发起方的初始put命令中,标记匹配位由发起方(例如,通信引擎108)提供,并且与接收方处的接收的标记匹配位相匹配。当使用集合点或mu时,get命令中的标记匹配位被设置为消息id。接收方从来自发起方的原始put的标头数据中获得消息id。包络部分146b可以包括源部分162、目的地部分164和消息id部分168。消息id部分168可以包括消息id,该消息id将允许发起方识别针对消息的数据所位于的发起方上存储器的暴露区域。此外,接收方可以使用消息id(以及接收数据的nic)来确定应该放置数据的块的接收方上的已分配的存储器区域。

转到图7,图7是示出了根据本公开的实施例的用于系统100的有效载荷部分148的示例细节的简化框图。有效载荷部分148可以包括清单170。清单170可以包括nic数据172a-172c和子网id174。nic数据172a-172c可以包括发起方上的接收方可以使用其来从发起方拉取数据的每个特定nic的标识。

子网id174标识包括传送消息的nic的子网。子网由一组端口组成,其中每个端口都具有一个或多个nic,使得给定子网中的所有nic都是唯一的。在由多个平面(子网)组成的群集中,结构管理器将使用单独的子网id配置每个平面(子网)。这也可以应用于每个nic具有多个端口并且每个端口分配给不同子网的示例。

转到图8,图8是示出了根据实施例的可以与使用子网上的nic进行消息通信相关联的流800的可能操作的示例流程图。在实施例中,流800的一个或多个操作可以由通信引擎108执行。在802处,确定要在第一子网上从发起方传送到接收方的消息。在804处,系统确定消息是否满足阈值。例如,阈值可以是mtu。如果消息不满足阈值,则使用标准协议发送消息,如在806中。例如,如果消息很小,则可以使用mpiput命令发送消息,因为整个消息适合于单个分组并传送到接收方。如果消息很大(例如,大于mtu并且未启用mu),则可以使用rts/cts机制发送消息。

如果消息确实满足阈值,则确定可用于传送消息的多个nic,如在808中。在810处,确定包括针对消息的数据的存储器的区域。在812处,将包括针对消息的数据的确定的存储器区域暴露给多个nic中的每一个。在814处,创建标识多个nic和子网的清单。在816处,清单被传送到接收方。在示例中,me被发布在所确定的多个nic中的每一个上,其中me指向包括针对消息的数据的存储器的暴露区域。me与消息id相关联,并且消息id可以在put命令中发送给接收方。当发起方从接收方在nic处接收到get命令时,get命令将包括消息id,并且消息id可用于确定me和包括要传送到接收方的数据的存储器的暴露区域。

转到图9,图9是示出了根据实施例的可以与使用子网上的nic进行消息通信相关联的流900的可能操作的示例流程图。在实施例中,流900的一个或多个操作可以由通信引擎108执行。在902处,确定要在第一子网上从发起方传送到接收方的消息。在904处,系统确定消息的大小是否满足阈值。例如,阈值可以是mtu阈值。如果消息的大小不满足阈值,则使用标准协议发送消息,如906中所示。例如,如果消息很小,则可以使用mpiput命令发送消息,因为整个消息适合于单个分组并传送到接收方。如果消息很大(例如,大于mtu并且未启用mu),则可以将消息分解成块,并且可以使用rts/cts机制来发送每个块以传送每个块。

如果消息的大小确实满足阈值,则确定可用于传送消息的多个nic,如在908中。在910处,创建清单,其包括可用于传送消息的所确定的nic的标识以及标识第一子网的子网id。在912处,包括针对消息的数据的存储器区域被暴露给可用于传送消息的确定的nic的每个。在914处,创建mu消息并且将清单添加到mu消息。在示例中,还将消息id添加到mu消息(例如,将消息id添加到mu消息的包络部分)。在916处,使用put命令将mu消息传送到接收方。

转到图10,图10是示出了根据实施例的可以与使用子网上的nic进行消息通信相关联的流1000的可能操作的示例流程图。在实施例中,流1000的一个或多个操作可以由通信引擎108执行。在1002处,数据在第一子网上从第一网络单元上的第一nic传送到第二网络单元上的第二nic。在1004处,第一nic与同第一nic通信的第一子网交换机之间的连接失败。在1006处,第二设备上的第三nic通过第二子网向第一设备上的第四nic发送消息以禁用第一nic。在1008处,第一nic在nic表中被标记为已禁用。

转到图11,图11是示出了根据实施例的可以与使用子网上的nic进行消息通信相关联的流1100的可能操作的示例流程图。在实施例中,流程1100的一个或多个操作可以由通信引擎108执行。在1102处,具有第一nic的第一网络单元尝试与具有第二nic的第二元件通信,其中通信在第一子网上。在1104处,尝试的通信触发错误。在1106处,系统确定错误是否是致命错误。如果错误不是致命错误,则系统返回到1102,其中具有第一nic的第一网络单元尝试与具有第二nic的第二元件通信,其中通信在第一子网上。

如果错误是致命错误,则系统确定第二网络单元是否具有可用于通信的不同子网上的第三nic,如1108中所示。如果第二网络单元具有可以用于通信的不同子网上的第三nic,然后禁用第二nic,并使用不同子网在第三个nic上尝试通信,如1110所示。在示例中,第三个nic在nic表中标记为已禁用。如果第二网络单元不具有可用于通信的不同子网上的第三nic,则不能建立通信,如1112中所示。

同样重要的是要注意,前面的流程图(即,图8-11)中的操作仅示出了可以由系统100执行或在系统100内执行的一些可能的相关场景和模式。其中一些在适当的情况下可以删除或移除操作,或者可以在不脱离本公开的范围的情况下显著地修改或改变这些操作。另外,已经将许多这些操作描述为与一个或多个附加操作同时执行或并行执行。但是,这些操作的可能会有很大的改变。出于示例和讨论的目的提供了前述操作流程。系统100提供了相当大的灵活性,因为可以提供任何合适的布置、时间顺序、配置和定时机制而不脱离本公开的教导。

尽管已经参考特定布置和配置详细描述了本公开,但是在不脱离本公开的范围的情况下,可以显著地改变这些示例配置和布置。此外,可以基于特定需求和实现来组合、分离、消除或添加某些组件。另外,尽管已经参考促进通信过程的特定元件和操作示出了系统100,但是这些元件和操作可以由实现系统100的预期功能的任何合适的架构、协议和/或过程代替。

本领域技术人员可以确定许多其他改变、替换、变化、改变和修改,并且本公开旨在涵盖落入所述权利要求范围内的所有这样的改变、替换、变化、改变和修改。在解释所附权利要求时,为了协助美国专利商标局(uspto)以及本申请中发布的任何专利的任何读者,申请人希望注意到申请人:(a)不打算任何所附权利要求援引35usc部分112的第6(6)段除非在特定权利要求中特别使用“用于......的单元”或“用于......的步骤”,否则其在提交之日存在;并且(b)不希望通过说明书中的任何陈述以任何未在所附权利要求中反映的方式限制本公开。

其他说明和实例

示例c1是至少一个具有一个或多个指令的机器可读存储介质,所述一个或多个指令当由至少一个处理器执行时,使得至少一个处理器确定要用于将消息传送到接收方的第一子网中的网络接口控制器(nic),其中,nic被配置为符合消息传递接口协议,创建包括nic的标识符和标识第一子网的子网id的清单,并将清单传送给接收方。

在示例c2中,示例c1的主题可以可选地包括:其中示例c1-c3中的任何一个的主题可以可选地包括:其中一个或多个指令进一步使得至少一个处理器将子网id添加到nic表,其中nic表包括多个nic的标识,与多个nic中的每一个相关联的子网,以及包括特定nic的特定网络单元的标识。

在示例c3中,示例c1-c2中任一个的主题可以可选地包括:其中nic表还包括当特定nic活动时的指示符。

在示例c4中,示例c1-c3中的任何一个的主题可以可选地包括:其中一个或多个指令还使得至少一个处理器确定用于传送消息的第一子网中的nic是非运行的nic并且无法运行,确定包含非运行nic的网络单元,确定在不同子网上但是在包含非运行nic的同一网络单元上的备用nic,并使用该不同子网与备用nic通信。

在示例c5中,示例c1-c4中任一个的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求。

在示例c6中,示例c1-c5中的任何一个的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求,并且一旦禁用非运行nic,则到达非运行nic的那些过时分组将被丢弃。

在示例c7中,示例c1-c6中任一个的主题可以可选地包括其中nic实现门户协议。

在示例a1中,系统可以包括第一网络单元、存储器、通信引擎和至少一个处理器。通信引擎被配置为使至少一个处理器确定用于将消息传送到接收方的第一子网中的网络接口控制器(nic),其中nic被配置为符合消息传递接口协议,创建包括nic的标识符和标识第一子网的子网id的清单,并将清单传送给接收方。

在示例a2中,示例a1的主题可以可选地包括:其中通信引擎还被配置为使得至少一个处理器将子网id添加到nic表,其中nic表包括多个nic的标识,与多个nic中的每个nic相关联的子网,以及包括特定nic的特定网络单元的标识。

在示例a3中,示例a1-a2中任一项的主题可以可选地包括:其中nic表还包括当特定nic活动时的指示符。

在示例a4中,示例a1-a3中任一项的主题可以可选地包括:通信引擎还被配置为使得至少一个处理器确定用于传送消息的第一子网中的nic是非运行nic并且无法运行,确定包含非运行nic的网络单元,确定在不同子网上但是在包含非运行nic的同一网络单元上的备用nic,并使用不同子网与备用nic通信。

在示例a5中,示例a1-a4中任一项的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求。

示例m1是一种方法,包括确定用于将消息传送到接收方的第一子网中的网络接口控制器(nic),其中nic被配置为符合消息传递接口协议,创建包括nic的标识符和标识第一子网的子网id的清单,以及将清单传送给接收方。

在示例m2中,示例m1的主题可以可选地包括将子网id添加到nic表,其中nic表包括多个nic的标识,与多个nic中的每个nic相关联的子网,以及包含特定nic的特定网络单元的标识。

在示例m3中,示例m1-m2中的任何一个的主题可以可选地包括:其中nic表还包括当特定nic在与特定nic相关联的特定子网上活动时的指示符。

在示例m4中,示例m1-m3中的任何一个的主题可以可选地包括确定用于传送消息的第一子网中的nic是非运行nic并且无法运行,确定包含非运行nic的网络单元,确定在不同子网上但在包含非运行nic的同一网络单元上的备用nic,以及使用不同子网与备用nic通信。

在示例m5中,示例m1-m4中的任何一个的主题可以可选地包括:其中与备用nic的通信是用于禁用第一子网中的非运行nic的请求。

在示例m6中,示例m1-m5中任一示例的主题可以可选地包括:其中使用消息传递接口协议来使用不同子网上的活动nic将清单传送到接收方。

示例s1是一种用于在子网的网络接口控制器(nic)上进行消息的传送的系统,该系统可以包括存储器、一个或多个处理器和通信引擎。通信引擎可以被配置为确定用于将消息传送到接收方的第一子网中的网络接口控制器(nic),其中nic被配置为符合消息传递接口协议,创建包括nic的标识符和标识第一子网的子网id的清单,并将清单传送给接收方。

在示例s2中,示例s1的主题可以可选地包括:其中通信引擎还被配置为将子网id添加到nic表,其中nic表包括多个nic的标识,与多个nic中的每个相关联的子网,以及包括特定nic的特定网络单元的标识。

在示例s3中,示例s1-s2中的任何一个的主题可以可选地包括:其中nic表还包括当特定nic活动时的指示符。

在示例s4中,示例s1-s3中的任何一个的主题可以可选地包括:其中通信引擎还被配置为确定用于传送消息的第一子网中的nic是非运行的nic并且无法运行,确定包含非运行nic的网络单元,确定在不同子网上但是在包含非运行nic的同一网络单元上的备用nic,并使用不同子网与备用nic通信。

在示例s5中,示例s1-s4中的任何一个的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求。

在示例s6中,示例s1-s5中的任何一个的主题可以可选地包括其中nic实现门户协议。

在示例s7中,示例s1-s6中的任何一个的主题可以可选地包括:其中使用消息传递接口协议将清单传送到接收方。

示例aa1是一种装置,包括用于确定用于将消息传送到接收方的第一子网中的网络接口控制器(nic)的单元,其中nic被配置为符合消息传递接口协议,用于创建包括nic的标识符和标识第一子网的子网id的清单,以及用于将清单传送到接收方的单元。

在示例aa2中,示例aa1的主题可以可选地包括用于将子网id添加到nic表的单元,其中nic表包括多个nic的标识,与多个nic中的每个nic相关联的子网,以及包含特定nic的特定网络单元的标识。

在示例aa3中,示例aa1-aa2中的任何一个的主题可以可选地包括:其中nic表还包括当特定nic活动时的指示符。

在示例aa4中,示例aa1-aa3中的任何一个的主题可以可选地包括用于确定用于传送消息的第一子网中的nic是非运行nic并且无法运行的单元,用于确定包括非运行nic的网络单元的单元,用于确定在不同子网上但在包括非运行nic的同一网络单元上的备用nic的单元,以及用于使用不同子网与备用nic通信的单元。

在示例aa5中,示例aa1-aa4中任一项的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求。

在示例aa6中,示例aa1-aa5中的任何一个的主题可以可选地包括:其中与备用nic的通信是用于禁用非运行nic的请求,并且一旦禁用非运行nic,则到达非运行nic的那些过时分组将被丢弃。

在示例aa7中,示例aa1-aa6中任一示例的主题可以可选地包括其中nic实现门户协议。

示例x1是一种机器可读存储介质,其包括用于实现方法或实现如示例a1-a5、aa1-aa7或m1-m6中任一项所述的装置的机器可读指令。示例y1是一种包括用于执行示例性方法m1-m6中的任一项的单元的装置。在示例y2中,示例y1的主题可以可选地包括用于执行包括处理器和存储器的方法的单元。在示例y3中,示例y2的主题可以可选地包括包含了机器可读指令的存储器。

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