掌桥专利:专业的专利平台
掌桥专利
首页

用于拥塞控制的方法及设备

文献发布时间:2023-06-19 16:06:26



技术领域

本公开一般涉及经网络连接的(network-attached)设备,并且更具体地,涉及用于管理网络连接存储设备中的拥塞的方法及设备。

背景技术

经网络连接的存储设备(诸如经以太网连接的存储设备)允许其他设备直接与存储设备通信,而不是与可能是包括存储设备的更大系统的一部分的处理器通信。通过从整个系统中去除系统处理器、存储器和其他组件,可以降低功率需求。此外,由于诸如处理器的组件可以从通信路径中移除,所以可以减少输入/输出操作完成之前所需的时间。

但是随着存储设备规模的增长,写入这些存储设备的数据量也在增长。文件和数据集可能会变得更大,大量数据通过将存储设备与使用数据的应用连接起来的网络发送。正如高速公路上的汽车数量增加了交通流量并可能导致拥塞(减慢所有交通流量),增加的网络流量也可能导致拥塞,这可能会减慢信息在网络上的传递。

仍然需要一种管理网络流量拥塞的机制。

发明内容

本公开的实施例包括网络中的设备。这些设备可以包括控制器,并且可以基于与另一个控制器共享一些通信路径来确定控制器是否相关联。如果控制器相关联,并且一个控制器经历拥塞,则相关联的控制器也可以主动应用拥塞控制。

附图说明

以下描述的附图是如何实现本公开的实施例的示例,并且不旨在限制本公开的实施例。本公开的各个实施例可以包括未在特定附图中示出的元件和/或可以省略特定附图中示出的元件。附图旨在提供说明,并且可能不是按比例绘制的。

图1示出了根据本公开的实施例的包括经由网络连接的设备的系统。

图2示出了根据本公开的实施例的图1的设备的细节。

图3示出了根据本公开的实施例的图1的机架的细节。

图4示出了根据本公开的实施例的发送命令的基于结构的非易失性存储器快速(Non-Volatile Memory Express,NVMe)(NVMe over Fabrics,NVMe-oF)发起者和进行响应的NVMe-oF目标。

图5示出了根据本公开的实施例图1的系统中图4的NVMe-oF发起者与图4的NVMe-oF目标通信。

图6示出了根据本公开的实施例的图5的NVMe-oF目标和NVMe-oF发起者通信的替代视图。

图7示出了根据本公开的实施例的图5的NVMe-oF目标和NVMe-oF之间的通信中用拥塞通知标记分组(packet)的交换机。

图8示出了根据本公开的实施例的装配用于主动拥塞控制的信息的图1的设备。

图9示出了根据本公开的实施例的图2的控制器关联矩阵(controllerassociativity matrix)的细节。

图10示出了根据本公开的实施例的图2的系统级关联矩阵(system levelassociativity matrix)的细节。

图11示出了根据本公开的实施例的图2的控制器记录的细节。

图12示出了根据本公开的实施例的图2的设备范围(device-wide)记录的细节。

图13A-13B示出了根据本公开的实施例的图1的设备如何应用主动拥塞控制的示例高级概览的流程图。

图14示出了根据本公开的实施例的图1的设备应用主动拥塞控制的示例过程的替代流程图。

图15A-15B示出了根据本公开的实施例的图1的设备确定图1的设备的两个控制器相关联的示例过程的流程图。

图16示出了根据本公开的实施例的图1的设备确定图1的设备的两个控制器通过具有共享的交换机而相关联的示例过程的流程图。

图17示出了根据本公开的实施例的图1的设备处理拥塞通知的示例过程的流程图。

图18示出了根据本公开的实施例的图1的设备在接收到拥塞通知之后为图2的控制器确定拥塞分数的示例过程的流程图。

图19示出了根据本公开的实施例的图1的设备主动应用拥塞控制的示例过程的流程图。

具体实施方式

现在将详细参考本公开的实施例,其示例在附图中示出。在以下详细描述中,阐述了许多具体细节,以使得能够彻底理解本公开。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本公开。在其他情况下,没有详细描述公知的方法、过程、组件、电路和网络,以免不必要地模糊实施例的各个方面。

应当理解,尽管术语第一、第二等在本文中可以用于描述各种元件,但是这些元件不应该被这些术语所限制。这些术语仅用于区分一个元素和另一个元素。例如,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块,而不脱离本公开的范围。

本文公开内容的描述中使用的术语仅用于描述特定实施例的目的,并不旨在限制本公开内容。如在本公开的描述和所附权利要求中所使用的,单数形式“一”、“一个”和“该”旨在也包括复数形式,除非上下文清楚地另有说明。还应当理解,本文使用的术语“和/或”是指并包括一个或多个相关列出项目的任何和所有可能的组合。将进一步理解,当在本说明书中使用时,术语“包括”和/或“包含”指定所陈述的特征、整数、步骤、操作、元件和/或组件的存在,但是不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其组合的存在或添加。附图的组件和特征不一定按比例绘制。

对于服务于大数据、人工智能(Artificial Intelligence,AI)/机器学习(Machine Learning,ML)、基于云的网络存储工作负载等的数据中心来说,构建高效的网络可能非常重要,其中维护吞吐量和延迟的服务级别协议(Service Level Agreement,SLA)可能很重要。基于结构的非易失性存储器快速(NVMe)(NVMe-oF)技术是数据中心使用的存储设备的一种形式,因为NVMe支持通过网络结构执行存储命令的并行性。以太网是部署在数据中心的常用网络协议,因为它更流行、更经济且易于管理。通过传输控制协议(Transmission Control Protocol,TCP)的NVMe(NVMe/TCP)和通过融合网络的移除直接存储器访问(Remove Direct Memory Access,RDMA)的NVMe(NVMe/RoCE)(使用RoCE的任何版本)是当前可用的常用的基于以太网的协议,其中该协议支持NVMe-oF发起者和他们的目标之间的连接。但是,尽管上面(和下面)的讨论可以集中于NVMe存储设备和特定的以太网相关协议,但是本公开的实施例可以扩展到支持网络连接的任何存储设备,而不管使用的是存储协议还是网络协议。

在本公开的一些实施例中,由现代工作负载生成的流量的大约80%可以保留在数据中心内:也就是说,发起者和目标都可以在数据中心内。数据中心可能会出现网络拥塞:数据中心中任何设备的目标都是从网络拥塞中快速恢复。NVMe目标可能是造成拥塞的主要原因,因为它们可能同时服务于数据中心的多个发起者。

当有多个发起者连接到同一目标时,或者当有多个连接从目标到达同一发起者时,一种用于预测NVMe-oF目标何时可以主动采取行动来减少数据中心中的拥塞的机制将有助于减少这种拥塞。

通过结构(fabric)将NVMe设备导出(export)到发起者的服务器称为NVMe-oF目标。该服务器可以是导出一个或多个NVMe固态硬盘(Solid State Drives,SSD)或以太网连接的SSD的单个服务器。此外,目标可以具有一个或多个网络接口,网络接口中的每一个可以独立于其他网络接口运行。此外,目标可以允许发起者打开一个或多个NVMe-oF队列对(queue pair)以提交I/O命令。每个NVMe-oF队列对可以为存储设备中的NVMe队列提供独立且并行的网络路径。在本公开的一些实施例中,在一个NVMe-oF队列对中发送的命令可以由相同的队列对处理(也就是说,对I/O命令的响应可以使用相同的NVMe-oF队列对发送)。每个目标可以支持一个或多个管理队列对和一个或多个I/O队列对。管理队列对可能很少使用;本公开的实施例可以仅与I/O队列对(其可以用于数据传输)、仅与管理队列对(其可以用于NVMe目标的管理)一起使用,或者与两组队列对一起使用。

术语NVMe-oF目标可以指管理存储设备和网络连接的软件,并且可以帮助远程发起者访问存储。

术语NVMe-oF发起者或主机可以指通过结构(fabric)连接到NVMe-oF目标以执行存储操作的服务器。术语NVMe-oF发起者也可以指使应用能够访问远程NVMe-oF目标的软件。每个NVMe-oF发起者可以具有唯一的主机ID。NVMe-oF发起者可以是单个物理服务器,或者是托管在物理服务器上的虚拟机(virtual machine,VM)。托管在单个物理服务器上的多个虚拟机也可能是连接到同一NVMe-oF目标的发起者。由于物理服务器上托管的多个VM可能具有不同的互联网协议(Internet Protocol,IP)地址和多个主机ID,因此这些VM在NVMe-oF目标看来可能是不同的NVMe-oF发起者。但是,由于这些VM共享物理服务器上的同一网络接口卡(network interface card,NIC)和内部软件交换机,如果该内部交换机出现拥塞,或者共享NIC可能无法处理传入的分组,则VM中的一些VM或全部VM将受到影响。

术语NVMe-oF控制器可以指表示单个发起者网络端口和单个目标网络端口之间的一对一关系的抽象实体。每个NVMe-oF控制器对可以具有一组独立的(多个)NVMe队列对、独立的网络连接,并且可以执行并行I/O操作。通过使用多个队列对,可以通过多个并行连接或为I/O命令提供单独的路径(例如,根据它们的大小、优先级等)来提高吞吐量。

NVMe-oF控制器可以将NVMe队列对与网络连接相关联,以创建NVMe-oF队列对。基于以太网结构的NVMe-oF队列对可以与TCP或用户数据报协议(User Datagram Protocol,UDP)端口相关联。

本公开的实施例可以适用于这样的部署,其中NVMe-oF目标和发起者可以被布置在具有使用2层交换结构的网络拓扑(其可以被称为叶主干(leaf spine)拓扑(有时被称为主干-叶(spine-leaf)拓扑或叶-主干(leaf-and-spine)拓扑))的机架(rack)或集群(cluster)中。本公开的实施例也可以应用于其他拓扑中:但是随着连接目标和发起者的交换机的数量增加,通过网络的不同路径的数量增加,这对于预测拥塞的能力具有相反的影响:随着通过网络的路径的数量增加,预测拥塞的功效降低。

在叶主干拓扑中,机架由安装在公共机柜中的一组设备构成。这些设备可以连接到位于机架内的一个或多个交换机(通常称为机架顶部(top-of-rack,TOR)交换机或叶交换机)。这些TOR交换机连接到另一组交换机,该另一组交换机互连机架:总的来说,这些交换机可以称为主干,并互连机架/叶片。叶交换机和主干交换机之间的连接可以在层2(交换)或层3(路由)连接上操作。如果每个叶交换机都连接到每个主干交换机,则总会有从拓扑中的任何设备到每个其他设备的路径。在本公开的这些实施例中,主干交换机可能不需要彼此互连,并且叶交换机可能不需要彼此互连。

由于机架中可能有多个设备,因此机架中可能有多个NVMe-oF目标。由于单个NVMe-oF目标可能有多个网络端口,因此NVMe-oF目标中的多个网络端口可能连接到公共TOR交换机或不同的TOR交换机。从目标到单个或多个发起者的单独的NVMe-oF队列对可以通过由交换机确定的不同路径进行交换。

多个NVMe目标可能同时向相同或不同的发起者传输网络分组。因此,网络拥塞可能发生在TOR叶交换机或主干交换机上。

通过识别目标和发起者所连接的交换机的网络地址,可以确定NVMe-oF目标和发起者是否连接到同一机架或集群。例如,存在这样的软件工具,其可用于识别网络连接使用的叶交换机和主干交换机的IP地址,其中NVMe-oF队列对可能使用这些IP地址。取决于拓扑中目标和发起者的位置,NVMe-oF目标和发起者之间的连接可能在机架级别(即仅通过TOR交换机)或在集群级别(通过TOR交换机和主干交换机两者)。不同的TOR交换机和主干交换机可以用于传输NVMe-oF队列对的网络分组。在本公开的一些实施例中,交换机可以使用等成本多路径(Equal Cost Multipathing,ECMP)方案来基于源和目的地IP地址、源和目的地TCP/UDP端口、传输协议等的组合来确定网络路径。在本公开的一些实施例中,交换机可以继续使用相同的路径在目标和发起者之间路由分组,直到网络条件(诸如拥塞或连接故障)导致使用新的路由。

数据中心网络可能需要通过浅缓冲交换机(即具有存储网络流量的小缓冲区的交换机)进行交换的高带宽、低延迟的网络连接。网络流量可能是不可预测的,容易爆发,并且容易出现入播类型(incast-type)的网络拥塞(许多目标向同一台主机发送数据)。例如,单个主机设备可以托管多个VM,这些VM可以共享到TOR交换机的网络接口。如果主机因入播(incast)而出现问题,则连接到主机的交换机可能会拥塞,这可能会影响从不同主干交换机到主机的所有连接。TOR交换机比中间交换机或路由器更容易发生拥塞。同样,如果来自目标的多个连接通过同一主干交换机路由,或者如果来自同一机架的服务器试图通过同一主干交换机向同一集群中的主机传输数据,则服务于目标的TOR交换机可能会变得拥塞。

如果从目标到主机/集群的连接中的一个或多个连接出现拥塞,则到同一主机/集群的另一个连接也可能出现拥塞。

交换机可以具有内部缓冲区,该内部缓冲区可以在将某些网络分组转发到目的地之前对其进行排队。在层3操作的交换机可以支持称为显式拥塞通知(explicitcongestion notification,ECN)的功能,以通知发送方和接收方关于交换机的拥塞情况。TCP、RoCE、QUIC(不是首字母缩略词)等可以使用ECN方案。

ECN方案是三点(three point)方案,其中交换机可以将分组标记为经历拥塞,并将标记的分组发送到接收方。接收方然后可以向发送方发送消息,指示拥塞。然后,发送方可以采取行动来控制拥塞。在这种方案中,由于交换机标记分组以指示拥塞的时间和发送方被接收方通知拥塞的时间之间的滞后,在实现这种拥塞控制时可能会有延迟。允许交换机直接向发送方指示拥塞的其他拥塞控制方案也是可能的。

取决于所有相关联的网络设备如何处理网络拥塞,网络连接可以是有损的(即,数据可能丢失)或无损的(即,没有数据丢失)。在严重拥塞的情况下,有损结构可能会丢弃分组。然后,发送方可以将网络分组重新发送到接收方。另一方面,无损结构可能有机制让发送方保留网络分组,直到拥塞消除,这样就不会丢失数据。在无损结构中,网络分组可以不被丢弃,只是被延迟。

在有损和无损结构两者中,为了获得最佳的网络性能,发送方可能需要被通知或以其他方式意识到网络拥塞情况,并尽早采取行动。如果在有损结构中发送方不尽早采取行动,分组可能会丢失;如果在无损结构中发送方不尽早采取行动,可能会产生不必要的背压(back pressure),这可能导致其他性能下降。

现代交换机可以基于分组的网络优先级来隔离流量。但是,如果交换机无法处理传入的网络流量,所有去往同一目的地交换机的相同优先级的流量有相同的可能发生拥塞。

网络传输层的网络拥塞检测和控制可能仅针对每个连接起作用。这种机制可能无法确定网络分组可能经过的中间交换机/路由器,因为中间交换机/路由器可能会动态改变。因此,当连接中的一个或多个连接指示拥塞时,传输层可能不会将去往同一目的地的连接分组并同等地应用拥塞控制行动。识别和纠正这个问题是本公开的一个主题。

基于ECN的方案(TCP、数据中心TCP(Data Center TCP,DCTCP)、数据中心量化拥塞通知(Data Center Quantized Congestion Notification,DCQCN)等)可以被通知交换机/路由器处的拥塞的设备使用。但是可能有其他方法来检测设备上的拥塞,其不需要来自交换机/路由器的任何通知。例如,设备可以检查网络分组丢失、分组重传、分组延迟和其他网络统计,以识别连接正在经历拥塞。尽管在这种情况下可能无法确定问题是出在交换机/路由器上,还是仅由于端点处的拥塞,但是如果去往多个发起者的多个连接表现出这些拥塞特征,则可以推断出交换机/路由器处的拥塞。

NVMe-oF设备可能使用异步消息传输模式。发起者可以向目标发送多个存储I/O命令。这些命令可以在目标中排队。当命令由目标处理并完成时,这些I/O命令的顺序可能不会得到维持。一旦处理完I/O命令,目标可能会向发起者发送响应。发起者发送I/O命令的时间与目标完成行动并发送响应的时间之间可能会有延迟。此时,数据中心的网络状况可能会发生改变。

此外,可能不存在发起者发送的I/O命令和目标发送的响应分组之间的一对一的对应关系。例如,发起者可能会发送单个I/O命令来读取大量数据:大到数据可能无法放入响应中的单个分组。在这种情况下,目标可能会响应于从发起者接收到的单个I/O命令来发送多个分组。

当目标正在处理命令(诸如读取请求)时,队列对可以从发起者接收其他I/O命令并将其排队。发起者和目标之间可以有连续的数据流。

如上所述,NVMe-oF设备可以不同于其他网络设备进行操作。NVMe-oF队列对可以是将网络套接字(TCP/UDP)附加到NVMe队列的逻辑结构。I/O队列对可以用于数据传输。发起者可以在一个NVMe队列对中发送I/O命令:在本公开的一些实施例中,目标必须在同一队列对中响应。如果发起者使用多个NVMe-oF队列对,则目标可以在用于I/O命令的相同队列对中响应。

在正常网络中,所有的网络连接都可以被平等对待。当应用使用多个并行连接进行负载平衡时,服务器可以使用任意数量的这些并行连接。在网络拥塞的情况下,服务器可以使用减少数量的并行连接来减少拥塞。

但是在本公开的实施例(响应在与I/O命令相同的NVMe队列对中发送)中,目标可能不能随着网络条件的改变而减少队列对的数量。目标可能需要另一种方法来降低跨数据中心网络发送的网络流量速率,同时让所有NVMe-oF队列对都有机会发送其数据。如果发起者在队列对中没有收到响应,发起者可以重新提交请求,这可能会导致重复工作。

NVMe-oF目标中的队列对可能不共享关于机架或集群级别处观察到的拥塞的信息。执行拥塞控制的传输层具有适用于一般环境的方案,并且不采取主动拥塞控制行动。小型封闭拓扑可以受益于应用层基于应用的特定性质采取的额外行动,从而提高系统的整体效率。

在本公开的实施例中,焦点可以是当响应于读取请求发送数据时目标如何处理拥塞。但是本公开的实施例也适用于向目标发送写入请求的发起者。类似地,虽然焦点可以集中在NVMe-oF队列对上,但是本公开的实施例适用于在不减少数据可被路由的途径(way)的数量的情况下管理拥塞的任何实现。

NVMe-oF目标可以主动对网络连接采取行动,以减少数据中心的拥塞。是否采取行动来减少拥塞的确定可以基于由同一目标中的其他网络连接报告的先前拥塞。NVMe-oF目标可以能够在现有的ECN方案可以通知目标拥塞之前对拥塞做出反应。

NVMe-oF目标可以使用NVMe-oF命令(诸如主机ID和其他此类数据)和网络报头(诸如源IP地址和其他此类数据)中可用的信息来确定哪些队列对(NVMe-oF控制器)可以与相同的主机、机架和集群相关联。由于拥塞可以发生在去往同一主机的队列对中,或者发生在去往同一集群的那些队列对中,所以这种关联信息可以允许针对特定队列对预测拥塞。

基于其队列对的累积拥塞分数,每个NVMe-oF控制器可以具有每个服务等级优先级(Class of Service,CoS)的拥塞分数。基于队列对接收到的拥塞通知信息,该拥塞分数可以量化在读取命令传输期间经历的拥塞。

队列对的优先级可以基于从发起者接收的IP分组中设置的管理设置、套接字优先级设置或差分服务代码点(Differentiated Services Code Point,DSCP)值来设置。所获得的优先级设置可以被映射到CoS值,该CoS值可以在例如从0-5的范围内。在本公开的一些实施例中,只有一些可能的CoS值可以用于数据传输;在本公开的其他实施例中,所有可能的CoS值可以用于数据传输。

可以使用拥塞分数和关于相关联的控制器的信息来进行拥塞的概率预测,这可以允许在应用层采取主动拥塞控制行动。目标设备可以基于相同CoS中的相关联的队列对注意到的拥塞,在短时间间隔内预测并在NVMe-oF层应用速率限制,这可以更快地减少拥塞。可以对与接收到拥塞通知的连接相关联的连接进行速率限制:可以不涉及其他连接。通过在其他队列对可能被预测经历拥塞时更好地调度来自未受影响队列对的I/O传输,速率限制可以有助于提高目标的整体效率。应用于受影响队列对的发送速率限制可以补充传输层采取的拥塞控制行动。

目标中的一个服务线程可以执行路径跟踪,以识别目标和发起者之间的中间交换机。经过身份验证的发起者的IP地址可能已经可用(例如,来自分组报头)。否则,当发起者建立连接时,可能会获得此信息。当NVMe-oF发起者连接到目标的多个接口时,这些控制器可以被分组到相关联的控制器中,并被输入到控制器关联矩阵中,该控制器关联矩阵可以被标记为M

此外,当NVMe-oF发起者建立连接时,连接到同一目的地(机架或集群)的控制器可以被分组到系统级关联的控制器中,并被输入到系统级关联矩阵中,该系统级关联矩阵可以被标记为M

每个控制器还可以具有其拥塞分数和时间戳的记录。控制器可以用控制器支持的每个队列对的单独条目来存储该记录。对于每个队列对,记录可以包括分配给队列对的CoS/优先级、包括拥塞通知的最后分组(其可以包括例如由ECN方案标记的分组)的接收时间戳、不具有拥塞通知的最后分组的接收时间戳以及经加权的拥塞分数。每个队列对的正常网络事件的时间戳可以从例如在NVMe-oF传输层接收的异步写入数据中获得。经加权的拥塞分数中使用的权重可以考虑特定队列对可以受另一队列对中的拥塞影响的可能性,或者队列对中的拥塞可以影响另一队列对的可能性作为因素。附加到拥塞的权重可以被预期与队列对中拥塞的频率成比例地减少。通过使权重与队列对中的拥塞频率成比例,该机制可以隔离可能频繁经历拥塞但可能不会扩展到其他连接的队列对/控制器。

每当接收到拥塞通知时,可以计算每个控制器的每个优先级的累积拥塞分数。该累积拥塞分数可以仅针对经历拥塞的队列对来计算:即,其具有拥塞通知的最后分组的时间戳比不具有拥塞通知的最后分组的时间戳更新近(recent)的队列对。当前可能没有经历拥塞的队列对可以不计入累积拥塞分数。

此外,可以针对其具有拥塞通知的最后分组的时间戳在某个预定时间量内的队列对计算累积拥塞分数。例如,如果其最新近的分组包括拥塞通知的队列对在一个小时前接收,则该队列对一小时前经历拥塞的事实可能不一定反映该队列对当前正在经历拥塞。在此之后从累积拥塞分数的计算中丢弃旧拥塞通知的示例间隔可以包括任何期望的时间长度,诸如三秒。拥塞分数也可以以任何期望的时间间隔周期性地清除,诸如在5分钟、15分钟或30分钟之后。

一旦计算了队列对的累积拥塞分数,累积拥塞分数可以用于更新目标范围的记录。目标范围的记录可以代表每个控制器和每个CoS/优先级的矩阵。在目标范围的记录中,对于每个控制器、对于每个优先级并且对于每个拥塞分数,可以存储具有拥塞通知的最后分组的时间戳和控制器的经加权的拥塞分数的向量。经加权的拥塞分数的向量可以取自每个控制器的拥塞分数的记录。

给定控制器i和CoS/优先级p,相关联的控制器在发起者级别的累积拥塞分数可以计算为M

上述计算中三秒的选择基于TCP重传超时,其最初设置为三秒。TCP重传超时背后的原理是,如果存在分组丢失,TCP将在三秒钟后意识到这一事实。当传输协议没有接收到任何ECN并且确定已经有丢失的分组时,可以使用这个TCP重传定时器。在这三秒间隔期间,如果相关联的控制器已经接收到拥塞通知,则相关联的控制器可以采取主动措施来避免拥塞。但是使用三秒作为这样的间隔仅仅是示例,并且可以使用其他间隔。此外,虽然上述示例关注于TCP作为协议,但是本公开的实施例可以与其他协议一起使用,并且也可以使用其他间隔。

虽然上面的讨论集中在有损结构上,但是类似的定时可以与无损结构一起使用来降低背压。

类似地,给定控制器i和CoS/优先级p,机架/集群处相关联的控制器的累积拥塞分数可以计算为M

如上所述,该机制可以基于拥塞预期保持多长时间来限制拥塞在相关队列对/控制器中的适用性。拥塞控制可以基于估计的传输时间针对一个时段应用,从做出应用拥塞控制的决定的时间开始。也就是说,拥塞控制可以针对网络协议栈识别拥塞并采取行动来纠正拥塞所花费的时间量来被应用。例如,这个时间量可以被估计为网络的往返(roundtrip)时间(分组从其源行进到其目的地以及在源处接收回响应所花费的时间)。该时段可以取决于多种因素,诸如观察到拥塞的级别(相同的主机/多路径或机架/集群级别)、拥塞分数以及跨网络栈的平均排队延迟。平均排队延迟可以计算为

在拥塞控制期间,来自受影响的队列对的每个协议数据单元(PDU)中的NVMe有效载荷(payload)可以被限制为最大分段大小(Maximum Segment Size,MSS)(可以在协议层设置的值)。可能需要多个PDU来发送来自受影响的队列对的整个有效载荷,在这种情况下,PDU间的延迟可以被计算为

在上面的讨论中,焦点是目标处的拥塞控制。但是拥塞控制也可以应用于发起者。发起者处的拥塞控制可能不如目标处的拥塞控制则关键,因为写入命令(可能涉及大量数据从发起者移动到目标可以比读取(可能涉及大量数据从目标移动到发起者)频率低,并且主机可以用来同时写入数据的目标的数量与尝试从目标同时读取的主机数量相比可能低。可以基于目标的NVMe限定名称(NVMe Qualified Name,NQN)和相应的IP地址来识别目标。

目标处的读取的拥塞控制和发起者处的写入的拥塞控制可以独立管理。网络交换机可以具有单独的缓冲区以用于发送和接收数据,因此目标端处读取期间的拥塞可能并不意味着来自发起者的写入期间存在拥塞,反之亦然。此外,当存在多条网络路径时,分组从目标到发起者经过的一系列交换机可以与分组从发起者到目标经过的一系列交换机不同。

图1示出了根据本公开的实施例的包括经由网络连接的设备的系统。在图1中,设备105-1至105-15被示出,被组织成三个机架110-1至110-3,并被连接以形成网络115。本公开的实施例可以包括组织成任意数量机架的任意数量的设备。此外,虽然图1示出了机架110-1至110-3中的每一个中的五个设备,但是本公开的实施例可以具有任意数量(一个或多个)的机架,并且不同的机架可以包括不同数量的设备。

设备105-1至105-15可以是可以与机架110-1至110-3一起使用的任何类型的设备。设备105-1至105-15的示例可以包括但不限于存储设备、网络接口卡、处理器、加速器等。在下面的讨论中,设备105-1至105-15中的一些可以被认为是可通过网络115访问的存储设备。

机架110-1至110-3可以包括交换机120-1至120-6。交换机120-1到120-6可以称为机架顶部交换机,因为它们位于机架的“顶部”并连接到机架中的设备。例如,交换机120-1和120-2连接到设备105-1至105-5,交换机120-3和120-4连接到设备105-6至105-10,并且交换机120-5和120-6连接到设备105-11至105-15。注意,交换机120-1到120-6可以提供到设备105-1到105-15的多个连接:例如,设备105-1连接到交换机120-1和120-2两者(尽管设备105-1可以通过不同的端口连接到交换机120-1和120-2,如下面参考图2所讨论的)。虽然图1示出了机架110-1至110-3,每个机架具有两个交换机,并且交换机120-1至120-6每个都连接到相应机架中的所有设备,但是本公开的实施例可以包括机架中的任何数量(一个或多个)的交换机(以及不同机架中不同数量的交换机),并且机架中的交换机可能不连接到机架中的所有设备。

除了机架110-1至110-3中的交换机120-1至120-6之外,网络115还可以包括交换机120-7和120-8。即使在不同的机架中,交换机120-7和120-8也可以互连交换机120-1至120-6,从而提供将设备105-1至105-15互连的一个或多个路径。

尽管本文使用了术语交换机,但是术语交换机应该理解为包括可以执行类似功能的其他中间元件。因此,术语交换机应理解为包括其它元件,诸如路由器、网关等。

图1中所示的拓扑可以被称为叶主干拓扑(有时被称为主干-叶拓扑或叶-主干拓扑):交换机120-7和120-8可以被认为是网络115的主干,并且交换机120-1至120-6可以被认为是网络115的叶(设备105-1至105-15可以连接到这些叶)。可以看出,网络115中的任何两个设备可以通过交换机120-1至120-8中的一个或三个连接:如果两个设备都在同一机架中并且连接到同一架顶交换机,则通过一个交换机连接,否则通过三个交换机连接。(如果同一机架中的两个机架顶部交换机(诸如交换机120-1和120-2)彼此连接,则该机架中的设备也可以使用两个交换机进行连接)。虽然图1示出了以叶主干拓扑排列的网络115,但是本公开的实施例可以扩展到任何期望的拓扑。

虽然图1暗示网络115是局域网(local area network,LAN),诸如可以用于互连设备105-1至105-15,如可以在数据中心内发生的,但是网络115可以扩展到其他形式的网络,诸如广域网(wide area network,WAN)、城域网(metropolitan area network,MAN)和全球网络(诸如互联网)。然而,如下所述,本公开的实施例的益处在网络中的设备之间的路径数量更少的网络中可能更大。

在本文档的其余部分,对附图的元件的任何引用都将使用通用附图标记。例如,对“设备105”的任何引用可以理解为对设备105-1至105-15中的任何一个的引用,对“机架110”的任何引用可以理解为对机架110-1至110-3中的任何一个的引用,并且对“交换机120”的任何引用可以理解为对交换机120-1至120-8中的任何一个的引用。

机架110还可以包括图1中未示出的各种其他部件。例如,机架110可以包括一个或多个处理器和/或存储器,这些处理器和/或存储器可以用于管理机架110的功能(而不是必须可以通过网络115访问)。这种处理器可以是任何种类的处理器。这些处理器中的每一个可以是单核或多核处理器,它们中的每一个可以实现精简指令集计算机(ReducedInstruction Set Computer,RISC)架构或复杂指令集计算机(Complex Instruction SetComputer,CISC)架构(等),并且可以以任何期望的组合混合。存储器可以是任何种类的存储器,诸如闪存、动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、永久随机存取存储器、铁电随机存取存储器(Ferroelectric Random Access Memory,FRAM)或非易失性随机存取存储器(Non-Volatile Random Access Memory,NVRAM)(诸如磁阻随机存取存储器(MagnetoresistiveRandom Access Memory,MRAM)等)。存储器也可以是不同存储器类型的任何期望的组合,并且可以由存储器控制器管理。处理器和存储器还可以支持操作系统,其中在该操作系统下可以运行各种应用。这些应用可以发出请求(也可以称为命令)以从存储器或设备105读取数据或将数据写入存储器或设备105。

图2示出了根据本公开的实施例的图1的设备105的细节。在图2中,示出了设备105。设备105可以包括端口205-1和205-2,设备105可以通过它们与交换机120通信。例如,如果设备105在图1的机架110-1中,端口205-1可以将设备105连接到图1的交换机120-1,并且端口205-2可以将设备105连接到图1的交换机120-2。虽然图2示出设备105包括两个端口205-1和205-2,但是本公开的实施例可以包括任意数量(一个或多个)的端口205,以将设备105连接到交换机120。此外,设备105上的端口205的数量和图1的机架110中的图1的机架顶部交换机120的数量之间不需要对应:设备105可以包括比图1的机架110中的图1的机架顶部交换机120的数量更少或更多的端口205。(当然,如果设备105包括比图1的架顶交换机120的数量更多的端口,则一些端口可以不被使用,并且如果设备105在图1的机架110中包括比图1的架顶交换机120的数量更少的端口,则设备105可以不连接到图1的机架110中的图1的所有架顶交换机120)。

与每个端口205相关联的可以是一个或多个控制器。在图2中,设备105被示为基于结构的非易失性存储器高速(NVMe)(NVMe-oF)设备:因此,NVMe-oF控制器210-1和210-2可以与端口205-1相关联,并且NVMe-oF控制器210-3和210-4可以与端口205-2相关联。虽然图2示出了与每个端口205相关联的两个NVMe-oF控制器210,但是本公开的实施例可以包括与每个端口205相关联的任何数量(一个或多个)的NVMe-oF控制器210,并且与每个端口205相关联的NVMe-oF控制器210的数量可以不同。此外,如果设备105支持除了NVMe-oF之外的用于通过图1的网络115通信的协议,则控制器210可以是与NVMe-oF控制器不同类型的控制器。

设备105还可以包括存储装置215,其可以用于存储各种信息。存储在存储装置215中的信息可以包括控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235。下面参考图9-12进一步讨论控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235。虽然图2将存储装置215示为包括控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235中的全部的单个存储,但是本公开的实施例可以包括两个或更多个不同的存储,其可以存储控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235的任何期望子集。此外,在设备105是存储设备的本公开的实施例中,设备105可以包括共同形成单个目标的任意数量(一个或多个)的存储单元(诸如硬盘驱动器或固态驱动器(Solid State Drives,SSD)):控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235可以应用于作为一个单元的设备105,而不是应用于设备105内的各个存储单元。但是本公开的实施例可以包括设备105,设备105包括多个目标和/或不同存储单元的控制器关联矩阵220、系统级关联矩阵225、控制器记录230和设备范围记录235的副本。

设备105还可以包括路径跟踪器240和节流器245。路径跟踪器240可以用于跟踪在与图1的网络115中的另一设备105通信时使用的路径。可以用作路径跟踪器240的工具可以例如识别将设备105与图1的网络115中的另一设备连接的图1的所有交换机120的网络地址。这些工具可以从图1的设备105或网络115的其他组件(例如,图1的交换机120)中操作,以捕获目标信息。此外,路径跟踪器240可以能够识别诸如设备105可以与之通信的(多个)其他设备的网络地址的信息。如下面参考图9-10所讨论的,该信息可以用于确定控制器210-1和210-2是否可以相关联。

节流器245可以用于控制通过控制器210发送的数据,其中该控制器正被主动控制以防止拥塞。也就是说,假设控制器210-1被识别为拥塞的,如下面参考图7所讨论的,控制器210-2至210-4可以被主动控制以防止拥塞在这些控制器上发生。节流器245可以操作来限制经由控制器210-2至210-4发送的分组的大小,或者限制可以发送分组的频率。例如,如果节流器245限制分组的大小,节流器245可以将分组限制到最大分段大小(与传输控制协议(TCP)相关联的参数)或者可以在网络通信中使用的一些其他适当的最大传输单元(MTU)。或者,如果节流器245限制发送分组的频率,节流器245可以确定分组间延迟,该分组间延迟可以被计算为在给定间隔内要发送的数据的量与每个分组的最大大小的比率。注意,节流器245可以应用多个限制:可以组合限制分组大小和限制分组频率。通过使用这样的技术,节流器245可以防止控制器210-2至210-4经历拥塞。节流器245可以针对任何期望的时段应用主动拥塞控制。例如,节流器245可以针对从设备105到另一设备并再次返回的往返通信所需的时间的量应用主动拥塞控制:也可以使用其他时段。节流器245可以应用主动拥塞控制的时段可以考虑拥塞发生的位置作为因素:在端口205处,在设备105和另一设备之间的某个交换机处,反映控制器210-1所经历的拥塞水平的分数(这将在下面参考图11进一步讨论)以及平均排队延迟(其可以表示为

设备105还可以包括图2中未示出的可以取决于设备105提供的功能的其他组件。例如,如果设备105是存储设备,则设备105还可以包括存储装置(诸如硬盘驱动器或闪存)和用以管理从存储设备读取和写入数据的控制器。如果设备105是本地处理器或加速器,则设备105可以包括实现支持的功能的电路和/或软件。

图3示出了根据本公开的实施例的图1的机架110的细节。在图3中,典型地,机架110包括一个或多个处理器305,其可以包括存储器控制器310和时钟315,时钟315可以用于协调机器部件的操作。处理器305还可以耦合到存储器320,例如,存储器320可以包括随机存取存储器(RAM)、只读存储器(ROM)或其他状态保持介质。处理器305还可以耦合到存储设备325和网络连接器330,网络连接器330可以是例如以太网连接器或无线连接器。处理器305还可以连接到总线335,总线335可以附接到用户接口340和输入/输出(I/O)接口端口等,I/O接口端口可以使用I/O引擎345来管理。

图4示出了根据本公开的实施例的图1的NVMe-oF发起者105-1发送命令并且图1的NVMe-oF目标105-2进行响应。在图4中,NVMe-oF发起者105-1可以发送命令协议数据单元(PDU)405。NVMe-oF发起者105-1也可以称为主机。响应于这一个命令PDU 405,NVMe-oF目标可以发送多个PDU,包括数据PDU 410-1至410-3以及响应PDU 415。(虽然图4示出了NVMe-oF目标105-2发送三个数据PDU 410-1至410-3,但是本公开的实施例可以支持由NVMe-oF目标105-2发送的任意数量的数据PDU)。因此,一个设备105发送的单个分组可以导致另一个设备105作为响应发送多个分组。

如上所述,设备105可以是NVMe-oF设备。虽然本公开的实施例可以包括使用其他协议的设备,但是NVMe-oF协议包括可以增强本公开的实施例的益处的一些特征。

在图5中,根据本公开的实施例,示出了NVMe-oF发起者与图1的系统中的NVMe-oF目标通信。顾名思义,NVMe-oF发起者可以是发起NVMe-oF设备(NVMe-oF目标)请求的NVMe-oF设备。使用NVMe-oF,NVMe-oF发起者105-1和NVMe-oF目标105-2可以各自具有多个队列对(每个队列对可以包括接收分组的提交队列(submission queue)和发送分组的完成队列(completion queue))。可以存在用于管理目的的一个(或多个)队列对以及用于输入/输出(I/O)目的一个(或多个)队列对。

当在NVMe-oF发起者105-1和NVMe-oF目标105-2之间建立连接时,NVMe-oF发起者105-1和NVMe-oF目标105-2各自使用特定的队列对,如连接队列对的“通道”(可以包括经由例如TCP的通信)所表示的。当经由特定的队列对发送通信时,NVMe-oF协议预期将使用相同的队列对发送响应。这种预期具有阻止NVMe-oF发起者105-1和NVMe-oF目标105-2能够使用替代路径进行通信的效果:它们之间的通信被期望遵循相同的路径。

图6有助于说明这一点。在图6中,NVMe-oF发起者105-1和NVMe-oF目标105-2正在通信。NVMe-oF发起者105-1和NVMe-oF目标105-2可以分别包括NVMe-oF层605-1和605-2、以及TCP层610-1和610-2。NVMe-oF层605-1和605-2可以用于使用NVMe-oF协议打包/解包数据,并且TCP层610-1和610-2可以用于使用TCP协议打包/解包数据。无论哪一个交换机,诸如交换机120-1,可能沿着用于在NVMe-oF发起者105-1和NVMe-oF目标105-2之间发送分组的通信的路径,该交换机可以被期望是NVMe-oF发起者105-1和NVMe-oF目标105-2之间的任何其他分组的通信所使用的路径的一部分。

如果NVMe-oF发起者105-1和NVMe-oF目标105-2之间的交换机120-1(或者,以类似的方式,NVMe-oF发起者105-1或NVMe-oF目标105-2上的图2的端口205)拥塞,则该拥塞可能影响通过该交换机/端口的其他通信。当还考虑叶主干拓扑(其可以在NVMe-oF发起者105-1和NVMe-oF目标105-2之间提供有限数量的路径(特别地,如果通信可能没有被切换到设备105的其他端口))时,交换机120-1(或图2的端口205)中的拥塞可以影响使用相同交换机120-1(或图2的端口205)的其他流量。这些考虑可以与其他网络协议或其他网络拓扑进行比较,其中该其他网络协议可以允许流量经由备选路径传播,其中该其他网络拓扑可以提供更多通过图1的网络115的路径,并且可能使得本公开的实施例潜在地不太有效(因为图1的网络115内的特定点处的拥塞不太可能影响可能穿越该点的其他通信)。

但是要了解主动拥塞控制的好处,了解拥塞控制如何以其他方式应用是有帮助的。图7示出了实现诸如显式拥塞通知(ECN)的方案的交换机120-1:本公开的实施例可以支持除ECN之外的其他拥塞通知方案。

NVMe-oF目标105-2可以发送打算给NVMe-oF发起者105-1的数据,如分组705所示。(在图7中,NVMe-oF目标105-2被示为发送数据,因为读取操作可能比图1的网络115中的写入操作更频繁,因此当NVMe-oF目标105-2响应于读取命令试图向NVMe-oF发起者105-1返回数据时,拥塞可能更可能出现。但是本公开的实施例同样适用于向NVMe-oF目标105-2发送写入数据的NVMe-oF发起者105-1)。

在ECN中,当交换机120-1确定在交换机120-1处存在拥塞时,交换机120-1可以在分组中设置比特,示为从交换机120-1发送到发起者105-1的NVMe的分组中的拥塞通知710。在接收到具有拥塞通知710的分组705时,NVMe-oF发起者105-1可以将确认分组715发送回NVMe-oF目标105-2:确认分组715可以包括拥塞通知的回音(echo),示为拥塞通知回音720。

但是从这个解释中可以看出,直到发送数据的NVMe-oF目标105-2从NVMe-oF发起者105-1接收到拥塞通知回音720,NVMe-oF目标105-2才意识到拥塞。在此期间,NVMe-oF目标可能已经发送了更多的数据,这可能加剧交换机120-1处的拥塞,并且可能导致通过交换机120-1的其他通信的拥塞。

一旦NVMe-oF目标105-2接收到拥塞通知回音720,NVMe-oF目标105-2可以采取行动来帮助减少NVMe-oF目标105-2和NVMe-oF发起者105-2之间的通信中的拥塞:这样的行动可以包括减少NVMe-oF目标105-2发送的数据的量或者从NVMe-oF目标105-2发送数据的频率。但是为了进一步帮助解决这种情况,并且为了降低通过交换机120-1的其他业务可能变得拥塞的可能性,本公开的实施例可以涉及NVMe目标105-2考虑是否应该对通过交换机120-2的其他通信应用主动拥塞控制。诸如NVMe-oF目标105-2的设备可能不可能将拥塞识别为图1的网络115中的其他设备之间的流量的结果,但是NVMe-oF目标105-2可以能够基于在涉及NVMe-oF目标105-2的另一连接中识别的拥塞采取主动拥塞控制。图8-12描述了如何执行这种识别。

图8示出了根据本公开的实施例的装配用于主动拥塞控制的信息的图1的设备105。在图8中,设备105可以在两个不同的阶段操作。在称为连接阶段的第一阶段,设备105可以识别与同一主机通信的图2的控制器210。图2的这种控制器210可以被认为是控制器关联的,并且控制器关联矩阵220可以用于识别图2的哪些控制器210是如此关联的。此外,在本公开的一些实施例中,通过图2的相同端口205通信的两个控制器,无论是与相同的主机通信还是与不同的主机通信,也可以被认为相关联,并且在控制器关联矩阵220中被如此标记。

设备105还可以识别与不同主机通信的图2的控制器210,但是不同主机在同一机架或集群中。图2的这种控制器210可以说是系统关联的,并且系统级关联矩阵225可以用于识别图2的哪些控制器210是如此关联的。

注意,在已经识别出使用图2的相同端口205进行通信的、与相同主机进行通信的或者与相同机架或集群中的主机进行通信的图2的所有控制器210之后,剩下的是与不同机架或集群中的不同主机进行通信的图2的控制器210。图2的这种控制器210不与图2的任何其他控制器210相关联。

从用于建立与主机的通信的分组中,设备105可以提取差分服务字段代码点(differentiated services field codepoint,DSCP),其可以提供关于通信的优先级或服务等级(CoS)的一些信息。例如,在本公开的一些实施例中,DSCP值可以在0-63的范围内,并且可以通过交换机映射到CoS值。在本公开的一些实施例中,CoS可以在0到5的范围内,0代表最低CoS,并且5代表最高CoS;本公开的其他实施例可以使用其他值,这些值可以包括或不包括连续的整数值。在本公开的其他实施例中,可以使用虚拟局域网(Virtual LocalArea Network,VLAN)分组来确定用于与主机通信的CoS:可以根据VLAN分组的优先级代码点(Priority Code Point,PCP)来确定CoS值。

CoS信息,结合与通信相关联的队列对,可以用于更新控制器记录230。注意,虽然控制器关联矩阵220和系统级关联矩阵225在连接阶段期间被设置,然后可能不改变(直到新连接被建立或者旧连接被结束),但是控制器记录230可以在与主机通信期间被更新。因此,控制器记录230可以被认为是传输阶段的一部分。

如上所述,控制器记录230可以在通信期间被更新。具体地,控制器记录230可以用关于传递给设备105的分组的信息来更新作为通信的一部分。例如,该信息可以包括当标记有拥塞通知的分组到达时以及当正常的分组(即,没有标记有拥塞通知的分组)到达时的更新时间戳。此外,当标记有拥塞通知的分组到达时,可以确定该队列对的拥塞分数。控制器记录230、控制器关联矩阵220和系统级关联矩阵225然后可以用于确定设备范围记录235中的信息,然后可以确定相关联的控制器是否应该受到主动拥塞控制。

图9示出了根据本公开的实施例的图2的控制器关联矩阵220的细节。在图9中,控制器关联矩阵220被示为矩阵,将图1的设备105中的不同控制器相关联。值1可以指示图2的两个控制器210相关联,并且值0可以指示图2的两个控制器210不相关联。本公开的实施例可以使用任何值来指示关联与否:值1和0仅仅是示例。

与同一主机通信的图2的任何两个控制器210可以在控制器关联矩阵220中被标记为相关联。并且在本公开的一些实施例中,使用图2的相同端口205的图2的两个控制器210也可以在控制器关联矩阵220中被标记为相关联。

注意,控制器关联矩阵220中的关联是对称的、可交换的和可传递的。对称性意味着图2的任何控制器210都可以与其自身相关联:沿着控制器关联矩阵220的主对角线的所有条目都可以是1。对称性可能很重要,因为图2的特定控制器210可以包括多于一个队列对,并且一个队列对上的拥塞可能影响也可能不影响该控制器中另一个队列对上拥塞的可能性。交换性意味着如果控制器1与控制器2相关联,则控制器2必然与控制器1相关联。从控制器关联矩阵220可以关于主对角线对称可以看出交换性。最后,传递性意味着如果控制器1与控制器2相关联,并且控制器2与控制器3相关联,则控制器1也与控制器3相关联。传递性可以看出,对于关联的任何两个控制器,表示这些控制器的行和列可以是相同的。

图10示出了根据本公开的实施例的图2的系统级关联矩阵225的细节。在图10中,系统级关联矩阵225被示为矩阵,将图1的设备105中的不同控制器相关联。值1可以指示图2的两个控制器210相关联,并且值0可以指示图2的两个控制器210不相关联。本公开的实施例可以使用任何值来指示关联与否:值1和0仅仅是示例。

与同一机架或集群中的主机通信的图2的任何两个控制器210可以在系统级关联矩阵225中被标记为相关联。注意,在图10中,可以得出结论,图2的两个控制器210正在与不同的主机通信,因为否则主机不会在不同的机架/集群中。

类似于图9的控制器关联矩阵220,系统级关联矩阵225中的关联性可以是对称和可交换的:然而,系统级关联矩阵225中的关联不一定是可传递的。例如,暂时返回图1,考虑这样的情形,其中设备105-1可以经由交换机120-1、120-7和120-3与设备105-6通信,设备105-1可以经由交换机120-1、120-8和120-5与设备105-11通信,以及设备105-7可以经由交换机120-4、120-8和120-12与设备105-12通信。交换机120-1用于第一和第二通信路径,并且交换机120-8和120-5两者用于第二和第三通信路径。但是在第一和第三通信路径之间没有共同的端口或交换机。因此,虽然第一和第二通信路径可以相关联,并且第二和第三通信路径可以相关联,但是第一和第三通信路径不相关联,因此图10的系统级关联矩阵225是不可传递的。

虽然图10示出仅使用值1和0的系统级关联矩阵225,但是本公开的实施例也可以支持分数值。分数值可以用来表示关联的程度。例如,对通信路径中使用的端口和交换机的全部进行计数,公共端口和/或交换机的数量可以分别除以每个通信路径中的端口和/或交换机的数量(或者,如果路径中的组件数量不同,则是与更多这种组件通信的路径中的端口和/或交换机的数量)。因此,继续上面证明系统级关联矩阵225是不可传递的示例,因为第一和第二路径各自包括五个组件(各自两个端口和三个交换机),并且第一和第二路径公共地具有一个组件(交换机120-1),所以系统级关联矩阵225可以将该关联度反映为1÷5=0.2;类似地,第二和第三路径的关联度可以计算为2÷5=0.4。在本公开的这些实施例中,系统级关联矩阵225中反映的关联度可以跨越任何期望的范围,并且不必限于0和1之间的值;然而,该范围的一端对应于表示没有关联的值,并且该范围的另一端对应于表示最大关联的值是有用的。

图11示出了根据本公开的实施例的图2的控制器记录230的细节。在图11中,控制器记录230被示为矩阵。但是与图9的控制器关联矩阵220或图10的系统级关联矩阵225不同,控制器记录230存储关于由特定控制器管理的给定队列对的信息,并且可以不关联关于这些队列对的信息。相反,控制器记录230可以存储信息,诸如与每个队列对相关联的CoS、每个队列对的经加权的拥塞分数、接收到标记有拥塞通知的最后一个分组时的时间戳、以及接收到没有标记有拥塞通知的最后一个分组时的时间戳。在图11中,控制器记录230被示为存储关于n个队列对的信息:在本公开的实施例中,为特定控制器管理的队列对的数量可以取决于控制器而改变。注意,由于控制器记录230存储关于与特定控制器相关联的队列对的信息,并且在图1的设备105中可以有任意数量的图2的控制器210,因此在图1的设备105中对于图2的每个控制器210可以有一个控制器记录230。替代地,如果控制器记录230可以识别队列对和与该队列对相关联的控制器,则可以只存储一个控制器记录230。

在存储在控制器记录230中的数据中,经加权的拥塞分数值得特别讨论。经加权的拥塞分数旨在表示该特定队列对有多拥塞、以及该队列对上的拥塞影响其他控制器的可能性有多大。经加权的拥塞分数最初可以被设置为常数(当第一个标记有拥塞通知的分组到达时)。如果随后到达的分组也标记有拥塞通知,这一事实可能表示该队列对正在经历不一定会影响该控制器中的其他队列对的拥塞。因此,当随后的也标记有拥塞通知的分组到达时,拥塞分数可以通过针对该队列对接收的标记有拥塞通知的分组数量的求倒数来被加权。数学上,经加权的拥塞分数可以计算为

关于存储在控制器记录230中的其他数据,如上所述,拥塞和未拥塞时间戳分别是在具有拥塞通知和不具有拥塞通知的情况下接收到的最新分组时图1的设备105内的时间戳。CoS可以取决于与主机的连接,并且可以随时间改变:单个控制器可以随时间对不同的连接使用不同的CoS,并且可以由主机或交换机设置(尽管在本公开的一些实施例中,目标可以设置CoS)。(但是在本公开的一些实施例中,在连接到该主机的持续时间内,分配给队列对的CoS可以是固定的)。注意,不同的队列对可以被分配相同的CoS:如果图2的控制器210支持比服务类别更多的队列对,这一事实是可以预期的。换句话说,服务类别的数量和队列对的数量之间没有相关性。

在本公开的一些实施例中,控制器记录230中的信息可以被永久保存,随着时间的推移新信息被添加。但是随着时间的推移,关于过去发生的拥塞信息变得越来越不相关,并且在某些时候可能与现在的拥塞管理无关。因此,在本公开的一些实施例中,图1的设备105可以跟踪控制器记录230中的信息已经存在多长时间。特别地,图1的设备105可以跟踪自控制器记录230首次被更新以反映接收到标记有拥塞通知的分组以来已经过去了多长时间。在该时间间隔过去之后(其可以通过设置定时器,或者通过跟踪第一个标记有拥塞通知的分组被接收的时间戳并将该时间与当前时间进行比较来测量,并且可以跨越任何期望的时间量,诸如10分钟、30分钟、1小时等),控制器记录230可以擦除图2的控制器210中特定队列对或所有队列对的信息,丢弃一个或多个队列对的经加权的拥塞分数和时间戳,以及队列对的标记有拥塞通知的分组的数量(注意,CoS可以保留,因为CoS可能直到与主机的连接结束才改变)。在本公开的一些实施例中,对第一个标记有拥塞通知的分组的这种跟踪可以发生在设备级,而不是控制器级:一旦已经经过该间隔,图2的所有控制器210的控制器记录230可以被擦除。注意,用于跟踪拥塞的这个间隔可以不同于图2的节流器245可以应用主动拥塞控制的时段。

但是如果控制器记录230以这种方式被擦除,并且队列对刚刚经历拥塞,则擦除控制器记录230可能导致图2的控制器210或图2的其他控制器210在这种行动可能是有益的时候错过主动拥塞控制的机会。在这种情况下,其中最新近标记有拥塞通知的分组在间隔的末端的某个增量(delta)内,标记有拥塞通知的分组的数量(即权重)可以被重置为1而不是0(未加权的拥塞分数可以保持常数K)。以这种方式,即使在间隔的末端之后,如果合适的话,相关联的控制器仍然可以应用主动拥塞控制。该增量可以被测量为间隔的百分比(例如,5%)或可以为测量的时间量(例如,2分钟)。

图12示出了根据本公开的实施例的图2的设备范围记录235的细节。在图12中,设备范围记录235被示为矩阵。类似于控制器记录230,并且不同于图9的控制器关联矩阵220或图10的系统级关联矩阵225,设备范围记录235存储关于控制器的信息,但是不关联关于控制器的信息。相反,设备范围记录235可以存储关于与每个控制器相关的拥塞的信息作为整体。

在设备范围记录235中,对于每个控制器并且对于每个CoS,可以从该控制器的图11的控制器记录230中提取最新近接收的标记有拥塞通知的分组的时间戳和经加权的拥塞分数。也就是说,对于图2的给定控制器210,可以识别图11的对应控制器记录230。然后,对于给定的CoS,可以检查图11的控制器记录230中的每个队列对,以识别其CoS:仅考虑具有感兴趣的CoS的队列对(对于其他CoS,可以考虑其他队列对)。跨具有感兴趣的CoS的队列对,最新近接收的标记有拥塞通知的分组的时间戳可以与来自同一队列对的经加权的拥塞分数一起被复制到设备范围记录235中。注意,来自具有较旧拥塞时间戳的其他队列对的经加权的拥塞分数可以被忽略,如上面表达式V

注意,当针对图2的控制器210更新图11的单独的控制器记录230时,可以完成更新设备范围记录235。也就是说,如果图11的控制器记录230中的拥塞时间戳被更新到更新近的时间,和/或图11的控制器记录230中的经加权的拥塞分数被更新,则该信息也可以用于更新设备范围记录235。类似地,如果队列对接收到未拥塞的分组,并且将未拥塞时间戳更新为比拥塞时间戳更新近,则该信息可以用于更新设备范围记录235(因为不再拥塞的队列对可能已经提供了用于该控制器和设备范围记录235中的那个CoS的经加权的拥塞分数)。

一旦设备范围记录235被更新,并且图9的控制器关联矩阵220和图10的系统级关联矩阵225被准备好(这应该在连接阶段期间发生,因此应该在设备范围记录235被更新之前发生),特定控制器可以使用所有这些数据来确定是否主动应用拥塞控制。具体地,对于图2的特定控制器210,对应于图2的特定控制器210的图9的控制器关联矩阵220和图10的系统级关联矩阵225中的行可以乘以来自针对特定CoS的设备范围记录235的经加权的拥塞分数的向量(该向量可以考虑多新近地接收拥塞通知的时间作为因素,因此可以从设备范围记录235中省略一些非零拥塞分数)。

数学上,给定感兴趣的特定优先级,来自包含经加权的拥塞分数的设备范围记录235的列可以被提取并形成列向量(该向量可以省略时间戳信息),其可以被称为V

这些估计的拥塞分数可以与阈值进行比较(这些估计的拥塞分数中的每一个可以与相同的阈值或不同的阈值进行比较):如果估计的拥塞分数高于适当的阈值,则图2的控制器210可以主动应用拥塞控制。根据需要,可以使用任何(多个)阈值:在一些实施例中,较低的阈值可以反映对拥塞的较大关注,并且较高的阈值可以反映对拥塞的较小关注。例如,阈值5可以反映比阈值2更大的拥塞容限。在本公开的一些实施例中,每个控制器可以具有其自己的(多个)阈值;在本公开的其他实施例中,阈值可以用于确定是否对图2的所有控制器210应用主动拥塞控制。

注意,在上面的讨论中,CoS是针对V

在上面的讨论中,存储在设备范围记录235中的拥塞时间戳被用来确定特定拥塞通知是否足够新近以至于被认为是经加权的拥塞分数的一部分。在本公开的一些实施例中,图1的设备105可以忽略特定拥塞通知有多新近,并且可以使用拥塞分数,而不管拥塞通知是否新近。在本公开的这些实施例中,当拥塞分数本身被清除时,旧的拥塞通知可以从经加权的拥塞分数中消除。

图13A-13B示出了根据本公开的实施例的图1的设备105可以如何应用主动拥塞控制的示例高级概述(high-level overview)的流程图。在图13A中,在框1305中,针对CoS,图1的设备105可以确定它是否已经接收到标记有拥塞通知的分组。如果否,则在框1310中,特定队列对的分组可以在没有主动拥塞控制的情况下被发送到传输层。否则,在框1315中,图1的设备105可以确定是否针对队列对接收到标记有拥塞通知的分组。如果是,则队列对已经受到拥塞控制(在目标的传输层),并且处理可以在框1310继续。

否则,在框1320(图13B)中,图1的设备105可以确定队列对是否比具有拥塞通知的分组的时间戳更新近地接收到不具有拥塞通知的分组。如果是,则可以在没有拥塞控制的情况下递送队列对的数据,并且处理可以在图13A的框1310继续。

否则,在框1325中,图1的设备105可以确定标记有拥塞通知的分组是否是针对与队列对相同的CoS,并且在框1330中,图1的设备105可以确定相关联的控制器是否接收到针对相同CoS的标记有拥塞通知的分组。如果这两个框都被否定应答,则处理可以在图13A的框1310中继续。但是如果这些块中的任何一个被肯定应答,则到达框1335,以检查队列对的拥塞分数是否超过阈值。如果拥塞分数没有超过阈值,则处理可以在图13A的框1310中继续;否则,在框1340中,可以在图13A的框1310继续处理之前对队列对应用主动拥塞控制。

图14示出了根据本公开的实施例的图1的设备105应用主动拥塞控制的示例过程的替代流程图。在图14中,在框1405中,图1的设备105可以识别图2的两个控制器210,并且在框1410中,图1的设备105可以将图2的两个控制器210相关联。框1405和1410可以针对要关联的尽可能多对的图2的控制器210重复,如虚线1415所示。为此,框1405和1410可以表示图8的连接阶段。

一旦连接阶段完成(至少,直到建立新的连接),传输阶段可以在框1420开始,其中图1的设备105可以接收具有拥塞通知的分组。如果图1的设备105接收到具有拥塞通知的分组,则在框1425中,对于其他控制器,图2的设备105可以组合(例如,相加)相关联的控制器的经加权的拥塞分数。如上所述,框1425可以包括计算M

注意,上面的讨论没有解决当连接关闭时会发生什么:例如,如果图5的NVMe-oF发起者105-1关闭了与图5的NVMe-oF目标105-2的连接。在本公开的一些实施例中,连接的关闭无关紧要:即使队列对可能被认为受到主动拥塞控制,由于连接被关闭,所以不会发送数据,无论是否应用主动拥塞控制,对拥塞都没有影响。在本公开的其他实施例中,当连接关闭时,关于该控制器的信息可以在图2的控制器关联矩阵220、图2的系统级关联矩阵225、图2的控制器记录230和图2的设备范围记录235中更新。具体地,对于图2的控制器210,图2的控制器关联矩阵220和图2的系统级关联矩阵225中的关联可以被更新以潜在地移除一些关联。类似地,图2的控制器记录230中的队列对的数据可以被擦除,这也可以触发图2的设备范围记录235中的数据的更新。

图15A-15B示出了根据本公开的实施例的图1的设备105确定图1的设备105的图2的两个控制器210相关联的示例过程的流程图。在图15A中,在框1505中,图1的设备105可以确定图2的两个控制器210是否正在与图1的网络115中的图1的相同设备105通信。如果是,则在框1510,图2的控制器关联矩阵220可以被更新以反映图2的两个控制器210相关联。否则,在框1515,图1的设备105可以确定图2的两个控制器210是否通过图1的设备105的图2的相同端口205进行通信。如果是,则在框1510中,图2的控制器关联矩阵220可以被更新以反映图2的两个控制器210相关联。注意,如虚线1520所示,可以省略框1515。

否则,在框1525(图15B)中,图1的设备105可以确定图2的两个控制器210是否正在与同一机架或集群中的设备通信(也就是说,图2的两个控制器210是否可以共享它们的通信路径中的任何交换机)。如果是,则在框1530中,可以更新图2的系统级关联矩阵225,以反映图2的两个控制器210相关联。注意,该关联可以是固定值(诸如1以反映控制器相关联,或者0以反映控制器不相关联),或者可以在值的范围内(诸如在0和1之间)以反映不同程度的关联。否则,在框1535中,图2的两个控制器210不相关联。

注意,在图15A-15B中,如果两个控制器在图2的控制器关联矩阵220中相关联,则这两个控制器在图2的系统级关联矩阵225中相关联的可能性可以被忽略。在本公开的一些实施例中,两个控制器可以被认为在图2的控制器关联矩阵220和图2的系统级关联矩阵225两者中相关联:也就是说,在图15A的框1510完成之后,图15B的框1525(以及框1530和1535)也可以被执行。

图16示出了根据本公开的实施例的图1的设备105确定图1的设备105的两个控制器通过具有图1的共享交换机120而相关联的示例过程的流程图。在图16中,在框1605中,图2的路径跟踪器240可以识别沿着从图2的控制器210到图2的控制器210与之通信的相应设备的路径的交换机。在框1610中,图1的设备105可以确定图2的控制器210具有任何共同的交换机。如果是,则在框1615中,图2的控制器210被认为相关联;否则,在框1620中,图2的控制器210不被认为相关联。

图17示出了根据本公开的实施例的图1的设备105处理拥塞通知的示例过程的流程图。在图17中,在框1705中,图2的控制器210可以接收具有图7的拥塞通知回音720的图7的分组715。在框1710中,图1的设备105可以更新图2的控制器记录230中的图2的控制器210的控制器分数。在框1715中,图1的设备105可以更新图2的控制器记录230中图2的控制器210的拥塞时间戳。在框1720中,图1的设备105可以更新图2的控制器记录230中的图2的控制器210的队列对的CoS。

在框1725中,图1的设备105可以基于对图2的控制器记录230的更新来更新图2的设备范围记录235。例如,图1的设备105可以基于对图2的控制器记录230中的控制器分数和/或拥塞时间戳的更新来更新图2的设备范围记录235中的控制器分数和/或拥塞时间戳。

在框1730中,图1的设备105接收未标记有图7的拥塞通知回音720的分组。在框1735中,图1的设备105可以更新图2的控制器记录230中的图2的控制器210的未拥塞时间戳。

图18示出了根据本公开的实施例的图1的设备105在接收到拥塞通知之后确定图2的控制器210的拥塞分数的示例过程的流程图。在图18中,在框1805中,拥塞分数可以被设置为接收到的拥塞通知的数量。拥塞通知的数量可以在一间隔期间,或者在图1的设备105的操作时段期间。替换地,在框1810中,拥塞分数可以被设置为常数。无论哪种方式,在框1815中,拥塞分数可以被加权:例如,通过接收到的拥塞通知的数量的函数(同样,在图1的设备105的操作时段期间或在一间隔期间)。方框1815可以省略,如虚线1820所示。

在框1825中,图1的设备105可以确定间隔是否已经过去,证明图2的控制器记录230的重置是合理的。如果是,则在框1830,控制器记录230可以被重置。如上所述,在间隔完成时,重置可以只是图2的控制器记录230中的特定队列对、图2的控制器记录230的全部(但仅针对一个控制器)、或者图2的所有控制器210的控制器记录230。此外,如上所述,图2的控制器记录230可以通过将控制器记录230中的所有信息设置为0来被重置,或者,如果在间隔结束之前的增量中接收到拥塞通知,则该控制器的拥塞分数可以被重置为非零值以反映最近的拥塞通知。

图19示出了根据本公开的实施例的图1的设备105主动应用拥塞控制的示例过程的流程图。在图19中,在框1905中,图2的节流器245可以将分组的大小限制到最大分段大小(对于TCP分组:其他限制可以用于其他协议,并且通常分组可以不超过网络接口卡的MTU大小)。替代地,在框1910中,图2的节流器245可以限制分组被发送的频率(如果两个或更多个分组准备好被发送,则适当增加分组间延迟)。通过以较低频率添加分组,可以针对一时间段来减少通过网络传输的分组数量,在该时间段期间,拥塞可以被减弱或消除。注意,方框1905和1910两者可以应用。

在框1915中,图1的设备105可以确定应当应用主动拥塞控制的时段是否已经结束。如果是,则在框1920中,节流器245可以停止主动拥塞控制。

在图13A-19中,示出了本公开的一些实施例。但是本领域技术人员将认识到,通过改变框的顺序、省略框或者通过包括附图中未示出的链接,本公开的其他实施例也是可能的。无论是否明确描述,流程图的所有这些改变都被认为是本公开的实施例。

本公开的实施例相比现有技术提供技术优势。通过识别相关联的控制器上的拥塞,设备可以主动地对控制器应用拥塞控制。这种主动拥塞控制可以防止影响一个控制器的拥塞也影响其他控制器。

下面的讨论旨在提供对其中可以实现本公开的某些方面的一个或多个合适机器的简要概括描述。一个或多个机器可以至少部分地由来自传统输入设备(例如键盘、鼠标等)的输入,以及由从另一个机器接收的指令、与虚拟现实(VR)环境的交互、生物反馈或其他输入信号来控制。如本文所使用的,术语“机器”旨在广泛地包含单个机器、虚拟机器或通信耦合的机器、虚拟机器或一起操作的设备的系统。示例性机器包括计算设备(诸如个人计算机、工作站、服务器、便携式计算机、手持设备、电话、平板电脑等)、以及运输设备(诸如私人或公共交通工具,例如汽车、火车、出租车等)。

一个或多个机器可以包括嵌入式控制器,诸如可编程或不可编程逻辑器件或阵列、专用集成电路(Application Specific Integrated Circuits,ASIC)、嵌入式计算机、智能卡等。一个或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口、调制解调器或其他通信耦合。机器可以通过物理和/或逻辑网络(诸如内联网、互联网、局域网、广域网等)互连。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短程或远程载波和协议,包括射频(RF)、卫星、微波、电气和电子工程师协会(IEEE)802.11、

本公开的实施例可以通过参考或结合包括功能、过程、数据结构、应用程序等的关联数据来描述,关联数据当被机器访问时,导致机器执行任务或定义抽象数据类型或低级硬件上下文。关联数据可以存储在例如易失性和/或非易失性存储器中,例如RAM、ROM等,或存储在其他存储设备及其相关存储介质(包括硬盘、软盘、光存储器、磁带、闪存、记忆棒、数字视频盘、生物存储器等)中。关联数据可以以分组、串行数据、并行数据、传播信号等形式在包括物理和/或逻辑网络的传输环境中传送,并且可以以压缩或加密的格式使用。关联数据可以在分布式环境中使用,并且本地和/或远程存储以供机器访问。

本公开的实施例可以包括有形的、非暂时性的机器可读介质,该介质包括可由一个或多个处理器执行的指令,该指令包括用于执行本文描述的本公开的要素的指令。

上述方法的各种操作可以通过能够执行这些操作的任何合适的装置(诸如各种(多个)硬件和/或软件组件、电路和/或(多个)模块)来执行。该软件可以包括用于实现逻辑功能的可执行指令的有序列表,并且可以体现在任何“处理器可读介质”中,以供指令执行系统、装置或设备(诸如单核或多核处理器或包含处理器的系统)使用或与指令执行系统、装置或设备(诸如单核或多核处理器或包含处理器的系统)结合使用。

结合本文公开的实施例描述的方法或算法以及功能的框或步骤可以直接体现在硬件、由处理器执行的软件模块或两者的组合中。如果以软件实现,功能可以作为一个或多个指令或代码存储在有形的、非暂时性的计算机可读介质上或通过其传输。软件模块可以驻留在随机存取存储器(RAM)、闪存、只读存储器(ROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、寄存器、硬盘、可移动磁盘、CD ROM或本领域已知的任何其他形式的存储介质中。

已经参考图示的实施例描述和图示了本公开的原理,应当认识到,在不脱离这些原理的情况下,图示的实施例可以在布置和细节上进行修改,并且可以以任何期望的方式进行组合。并且,尽管前面的讨论集中在特定实施例上,但是也可以考虑其他配置。特别地,即使在本文中使用了诸如“根据本公开的实施例”等表达,这些短语也意味着通常参考实施例的可能性,并且不旨在将本公开限制于特定的实施例配置。如本文所使用的,这些术语可以指可组合到其他实施例中的相同或不同的实施例。

前述说明性实施例不应被解释为限制其公开内容。尽管已经描述了几个实施例,但是本领域技术人员将容易理解,在本质上不脱离本公开的新颖教导和优点的情况下,对这些实施例的许多修改是可能的。因此,所有这些修改都旨在包括在权利要求所限定的本公开的范围内。

本公开的实施例可以扩展到以下声明(statement),但不限于此:

声明1.本公开的实施例包括一种设备,包括:

网络端口,连接到网络;

第一控制器,被配置为使用网络端口通过网络发送和接收第一通信;

第一存储装置,用于第一控制器的控制器记录,该控制器记录至少包括第一拥塞分数、第一拥塞时间戳和未拥塞时间戳;

第二存储装置,用于设备范围记录,该设备范围记录至少包括第一控制器的第二拥塞分数和第二拥塞时间戳以及第二控制器的第三拥塞分数和第三拥塞时间戳,该设备范围记录至少部分基于控制器记录;和

节流器,用于至少部分基于设备范围记录来限制第二控制器的第二通信。

声明2.本公开的实施例包括根据声明1的设备,其中设备范围记录还包括用于第一控制器的第一服务等级(CoS)和用于第二控制器的第二CoS。

声明3.本公开的实施例包括根据声明1的设备,其中网络端口包括以太网端口。

声明4.本公开的实施例包括根据声明1的设备,其中:

第一控制器包括第一基于结构的非易失性存储器快速(NVMe)(NVMe-oF)控制器;并且

第二控制器包括第二NVMe-oF控制器。

声明5.本公开的实施例包括根据声明4的设备,其中:

该设备还包括用于控制器关联矩阵的第三存储装置;并且

节流器被配置为至少部分地基于控制器关联矩阵和设备范围记录来限制第二NVMe-oF控制器的第二通信。

声明6.本公开的实施例包括根据声明5的设备,其中:

第一NVMe-oF控制器被配置为使用网络端口通过网络向第二设备发送和接收第一通信;

第二NVMe-oF控制器被配置为通过网络向第二设备发送和接收第二通信;并且

控制器关联矩阵指示第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明7.本公开的实施例包括根据声明6的设备,其中第二NVMe-oF控制器被配置为使用网络端口和第二网络端口之一通过网络向第二设备发送和接收第二通信。

声明8.本公开的实施例包括根据声明5的设备,其中:

第一NVMe-oF控制器被配置为使用网络端口通过网络向第二设备发送和接收第一通信;

第二NVMe-oF控制器被配置为使用网络端口通过网络向第三设备发送和接收第二通信;并且

控制器关联矩阵指示第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明9.本公开的实施例包括根据声明4的设备,其中:

该设备还包括:

第二网络端口,用于连接到网络;

第四存储装置,用于系统级关联矩阵;和

路径跟踪器;

第一NVMe-oF控制器被配置为使用网络端口通过网络向第二设备发送和接收第一通信;

第二NVMe-oF控制器被配置为使用第二网络端口通过网络向第三设备发送和接收第二通信;

路径跟踪器被配置为识别沿着从第一NVMe-oF控制器到第二设备的第一路径的交换机,并且识别沿着从第二NVMe-oF控制器到第三设备的第二路径的交换机;

节流器被配置为至少部分地基于系统级关联矩阵和设备范围记录来限制第二NVMe-oF控制器的第二通信;并且

系统级关联矩阵指示第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明10.本公开的实施例包括根据声明4的设备,其中节流器被配置为至少部分基于标记有拥塞通知的第一通信的分组来确定第一通信拥塞。

声明11.本公开的实施例包括根据声明4的设备,其中节流器被配置为至少部分基于经加权的拥塞分数和阈值来限制第二控制器的第二通信。

声明12.本公开的实施例包括根据声明11的设备,其中节流器包括计算器,该计算器用于至少部分地基于设备范围记录、控制器关联矩阵或系统级关联矩阵中的至少一个来计算经加权的拥塞分数。

声明13.本公开的实施例包括根据声明4的设备,其中节流被配置为限制第二通信的分组大小或针对第二通信发送的分组的频率中的至少一个。

声明14.本公开的实施例包括根据声明4的设备,其中节流器被配置为针对一时段限制第二控制器的第二通信。

声明15.本公开的实施例包括根据声明14的设备,其中该时段包括估计的传输时间。

声明16.本公开的实施例包括根据声明4的设备,其中该设备是至少NVMe-oF发起者和NVMe-oF目标中的一个。

声明17.本公开的实施例包括一种方法,包括:

识别设备中的第一控制器和设备中的第二控制器;

关联第一控制器和第二控制器;

确定使用第一控制器的第一通信在交换机处遭受网络拥塞;以及

对使用第二控制器的第二通信应用设备拥塞控制。

声明18.本公开的实施例包括根据声明17的方法,其中:

第一控制器包括第一基于结构的非易失性存储器快速(NVMe)(NVMe-oF)控制器;并且

第二控制器包括第二NVMe-oF控制器。

声明19.本公开的实施例包括根据声明18的方法,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第二设备通信的设备中的第二NVMe-oF控制器来关联第一NVMe-oF控制器和第二NVMe-oF控制器。

声明20.本公开的实施例包括根据声明18的方法,其中关联第一控制器和第二控制器包括至少部分基于使用设备的端口进行通信的第一NVMe-oF控制器和使用设备的端口进行通信的第二NVMe-oF控制器来关联第一NVMe-oF控制器和第二NVMe-oF控制器。

声明21.本公开的实施例包括根据声明20的方法,其中关联第一控制器和第二控制器包括在控制器关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明22.本公开的实施例包括根据声明18的方法,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第三设备通信的设备中的第二NVMe-oF控制器,来关联第一NVMe-oF控制器和第二NVMe-oF控制器,第二设备和第三设备在一机架中。

声明23.本公开的实施例包括根据声明22的方法,其中关联第一控制器和第二控制器还包括:

识别沿着从第一NVMe-oF控制器到第二设备的第一路径的交换机;以及

识别沿着从第二NVMe-oF控制器到第三设备的第二路径的交换机。

声明24.本公开的实施例包括根据声明22的方法,其中关联第一控制器和第二控制器包括在系统级关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明25.本公开的实施例包括根据声明18的方法,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第三设备通信的设备中的第二NVMe-oF控制器,来关联第一NVMe-oF控制器和第二NVMe-oF控制器,第二设备和第三设备在一集群中。

声明26.本公开的实施例包括根据声明25的方法,其中关联第一控制器和第二控制器还包括:

识别沿着从第一NVMe-oF控制器到第二设备的第一路径的交换机;以及

识别沿着从第二NVMe-oF控制器到第三设备的第二路径的交换机。

声明27.本公开的实施例包括根据声明25的方法,其中关联第一控制器和第二控制器包括在系统级关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明28.本公开的实施例包括根据声明18的方法,其中确定使用第一控制器的第一通信在交换机处遭受网络拥塞包括在第一NVMe-oF控制器处接收第一通信的标记有拥塞通知的分组。

声明29.本公开的实施例包括根据声明28的方法,其中在第一NVMe-oF控制器处接收第一通信的标记有拥塞通知的分组包括用分组的拥塞时间戳更新第一NVMe-oF控制器的控制器记录。

声明30.本公开的实施例包括根据声明28的方法,其中在第一NVMe-oF控制器处接收第一通信的标记有拥塞通知的分组包括用拥塞分数更新第一NVMe-oF控制器的控制器记录。

声明31.本公开的实施例包括根据声明30的方法,其中拥塞分数包括在第一NVMe-oF控制器处接收的拥塞通知的数量的计数。

声明32.本公开的实施例包括根据声明31的方法,其中拥塞分数包括在间隔期间在第一NVMe-oF控制器处接收的拥塞通知的数量的计数。

声明33.本公开的实施例包括根据声明30的方法,其中拥塞分数包括常数值。

声明34.本公开的实施例包括根据声明30的方法,其中用拥塞分数更新第一NVMe-oF控制器的控制器记录包括使用权重来加权第一NVMe-oF控制器的拥塞分数,以产生经加权的拥塞分数。

声明35.本公开的实施例包括根据声明34的方法,其中权重包括在第一NVMe-oF控制器处接收的拥塞通知的数量。

声明36.本公开的实施例包括根据声明35的方法,其中权重包括在间隔期间在第一NVMe-oF控制器处接收的拥塞通知的数量。

声明37.本公开的实施例包括根据声明35的方法,其中权重包括在第一NVMe-oF控制器处接收的拥塞通知的数量的倒数。

声明38.本公开的实施例包括根据声明30的方法,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组还包括用第一NVMe-oF控制器的拥塞分数更新设备范围记录。

声明39.本公开的实施例包括根据声明28的方法,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用最后一个未拥塞分组的未拥塞时间戳更新第一NVMe-oF控制器的控制器记录。

声明40.本公开的实施例包括根据声明28的方法,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用与分组相关联的队列对的服务等级(CoS)更新第一NVMe-oF控制器的控制器记录。

声明41.本公开的实施例包括根据声明18的方法,其中确定使用第一控制器的第一通信在交换机处遭受网络拥塞还包括将第二NVMe-oF控制器的拥塞分数与阈值进行比较。

声明42.本公开的实施例包括根据声明41的方法,其中将第二NVMe-oF控制器的拥塞分数与阈值进行比较包括使用第一NVMe-oF控制器的经加权的拥塞分数作为第二NVMe-oF控制器的拥塞分数。

声明43.本公开的实施例包括根据声明41的方法,其中将第二NVMe-oF控制器的拥塞分数与阈值进行比较包括:

识别第一NVMe-oF控制器的第一经加权的拥塞分数;

识别第三NVMe-oF控制器的第二经加权的拥塞分数,第三NVMe-oF控制器与第二NVMe-oF控制器相关联;以及

组合第一NVMe-oF控制器的第一经加权的拥塞分数和第三NVMe-oF控制器的第二经加权的拥塞分数,以产生第二NVMe-oF控制器的拥塞分数。

声明44.本公开的实施例包括根据声明41的方法,其中对使用第二控制器的第二通信应用设备拥塞控制包括至少部分基于第二NVMe-oF控制器的拥塞分数超过阈值,对使用第二控制器的第二通信应用设备拥塞控制。

声明45.本公开的实施例包括根据声明18的方法,其中对使用第二控制器的第二通信应用设备拥塞控制包括将第二通信的分组大小限制到最大分段大小并限制针对第二通信发送的分组的频率中的至少一个。

声明46.本公开的实施例包括根据声明18的方法,其中对使用第二控制器的第二通信应用设备拥塞控制包括针对一时段对第二通信应用设备拥塞控制。

声明47.本公开的实施例包括根据声明46的方法,其中该时段包括估计的传输时间。

声明48.本公开的实施例包括根据声明18的方法,其中该设备是至少NVMe-oF发起者和NVMe-oF目标中的一个。

声明49.本公开的实施例包括一种制品,该制品包括非暂时性存储介质,该非暂时性存储介质上存储有指令,该指令当由机器执行时导致:

识别设备中的第一控制器和设备中的第二控制器;

关联第一控制器和第二控制器;

确定使用第一控制器的第一通信在交换机处遭受网络拥塞;以及

对使用第二控制器的第二通信应用设备拥塞控制。

声明50.本公开的实施例包括根据声明49的制品,其中:

第一控制器包括第一基于结构的非易失性存储器快速(NVMe)(NVMe-oF)控制器;并且

第二控制器包括第二NVMe-oF控制器。

声明51.本公开的实施例包括根据声明50的制品,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第二设备通信的设备中的第二NVMe-oF控制器来关联第一NVMe-oF控制器和第二NVMe-oF控制器。

声明52.本公开的实施例包括根据声明50的制品,其中关联第一控制器和第二控制器包括至少部分基于使用设备的端口进行通信的第一NVMe-oF控制器和使用设备的端口进行通信的第二NVMe-oF控制器来关联第一NVMe-oF控制器和第二NVMe-oF控制器。

声明53.本公开的实施例包括根据声明52的制品,其中关联第一控制器和第二控制器包括在控制器关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明54.本公开的实施例包括根据声明50的制品,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第三设备通信的设备中的第二NVMe-oF控制器,来关联第一NVMe-oF控制器和第二NVMe-oF控制器,第二设备和第三设备在一机架中。

声明55.本公开的实施例包括根据声明54的制品,其中关联第一控制器和第二控制器还包括:

识别沿着从第一NVMe-oF控制器到第二设备的第一路径的交换机;以及

识别沿着从第二NVMe-oF控制器到第三设备的第二路径的交换机。

声明56.本公开的实施例包括根据声明54的制品,其中关联第一控制器和第二控制器包括在系统级关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明57.本公开的实施例包括根据声明50的制品,其中关联第一控制器和第二控制器包括至少部分基于与第二设备通信的设备中的第一NVMe-oF控制器和与第三设备通信的设备中的第二NVMe-oF控制器,来关联第一NVMe-oF控制器和第二NVMe-oF控制器,第三设备和第二设备在一集群中。

声明58.本公开的实施例包括根据声明57的制品,其中关联第一控制器和第二控制器还包括:

识别沿着从第一NVMe-oF控制器到第二设备的第一路径的交换机;以及

识别沿着从第二NVMe-oF控制器到第三设备的第二路径的交换机。

声明59.本公开的实施例包括根据声明57的制品,其中关联第一控制器和第二控制器包括在系统级关联矩阵中标记第一NVMe-oF控制器和第二NVMe-oF控制器相关联。

声明60.本公开的实施例包括根据声明50的制品,其中确定使用第一控制器的第一通信在交换机处遭受网络拥塞包括在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组。

声明61.本公开的实施例包括根据声明60的制品,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用分组的拥塞时间戳更新第一NVMe-oF控制器的控制器记录。

声明62.本公开的实施例包括根据声明60的制品,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用拥塞分数更新第一NVMe-oF控制器的控制器记录。

声明63.本公开的实施例包括根据声明62的制品,其中拥塞分数包括在第一NVMe-oF控制器处接收的拥塞通知的数量的计数。

声明64.本公开的实施例包括根据声明63的制品,其中拥塞分数包括在间隔期间在第一NVMe-oF控制器处接收的拥塞通知的数量的计数。

声明65.本公开的实施例包括根据声明62的制品,其中拥塞分数包括常数值。

声明66.本公开的实施例包括根据声明62的制品,其中用拥塞分数更新第一NVMe-oF控制器的控制器记录包括使用权重来加权第一NVMe-oF控制器的拥塞分数,以产生经加权的拥塞分数。

声明67.本公开的实施例包括根据声明66的制品,其中权重包括在第一NVMe-oF控制器处接收的拥塞通知的数量。

声明68.本公开的实施例包括根据声明67的制品,其中权重包括在间隔期间在第一NVMe-oF控制器处接收的拥塞通知的数量。

声明69.本公开的实施例包括根据声明67的制品,其中权重包括在第一NVMe-oF控制器处接收的拥塞通知的数量的倒数。

声明70.本公开的实施例包括根据声明62的制品,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组还包括用第一NVMe-oF控制器的拥塞分数更新设备范围记录。

声明71.本公开的实施例包括根据声明60的制品,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用最后一个未拥塞分组的未拥塞时间戳更新第一NVMe-oF控制器的控制器记录。

声明72.本公开的实施例包括根据声明60的制品,其中在第一NVMe-oF控制器处接收标记有拥塞通知的第一通信的分组包括用与分组相关联的队列对的服务等级(CoS)更新第一NVMe-oF控制器的控制器记录。

声明73.本公开的实施例包括根据声明50的制品,其中确定使用第一控制器的第一通信在交换机处遭受网络拥塞还包括将第二NVMe-oF控制器的拥塞分数与阈值进行比较。

声明74.本公开的实施例包括根据声明73的制品,其中将第二NVMe-oF控制器的拥塞分数与阈值进行比较包括使用第一NVMe-oF控制器的经加权的拥塞分数作为第二NVMe-oF控制器的拥塞分数。

声明75.本公开的实施例包括根据声明73的制品,其中将第二NVMe-oF控制器的拥塞分数与阈值进行比较包括:

识别第一NVMe-oF控制器的第一经加权的拥塞分数;

识别第三NVMe-oF控制器的第二经加权的拥塞分数,第三NVMe-oF控制器与第二NVMe-oF控制器相关联;以及

组合第一NVMe-oF控制器的第一经加权的拥塞分数和第三NVMe-oF控制器的第二经加权的拥塞分数,以产生第二NVMe-oF控制器的拥塞分数。

声明76.本公开的实施例包括根据声明73的制品,其中对使用第二控制器的第二通信应用设备拥塞控制包括至少部分基于第二NVMe-oF控制器的拥塞分数超过阈值,对使用第二控制器的第二通信应用设备拥塞控制。

声明77.本公开的实施例包括根据声明50的制品,其中对使用第二控制器的第二通信应用设备拥塞控制包括将第二通信的分组大小限制到最大分段大小以及限制针对第二通信发送的分组的频率中的至少一个。

声明78.本公开的实施例包括根据声明50的制品,其中对使用第二控制器的第二通信应用设备拥塞控制包括针对一时段对第二通信应用设备拥塞控制。

声明79.本公开的实施例包括根据声明78的制品,其中该时段包括估计的传输时间。

声明80.本公开的一个实施例包括根据声明50的制品,其中该设备是至少NVMe-oF发起者和NVMe-oF目标中的一个。

因此,考虑到本文描述的实施例的多种排列,该详细描述和所附材料仅旨在说明性的,而不应被视为限制本公开的范围。因此,作为公开内容要求保护的是所有可能落入以下权利要求及其等同物的范围和精神内的修改。

技术分类

06120114706661