CN115917473A - 用分布式lpm实现的高度可扩展算法构建数据结构的系统 - Google Patents
用分布式lpm实现的高度可扩展算法构建数据结构的系统 Download PDFInfo
- Publication number
- CN115917473A CN115917473A CN202180051667.2A CN202180051667A CN115917473A CN 115917473 A CN115917473 A CN 115917473A CN 202180051667 A CN202180051667 A CN 202180051667A CN 115917473 A CN115917473 A CN 115917473A
- Authority
- CN
- China
- Prior art keywords
- tree
- data
- programmable
- level
- cache line
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/48—Routing tree calculation
- H04L45/484—Routing tree calculation using multiple routing trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/48—Routing tree calculation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/748—Address table lookup; Address filtering using longest matching prefix
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/24—Traffic characterised by specific attributes, e.g. priority or QoS
- H04L47/2441—Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
- H04L49/9068—Intermediate storage in different physical parts of a node or terminal in the network interface card
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/742—Route cache; Operation thereof
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/74591—Address table lookup; Address filtering using content-addressable memories [CAM]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
描述了配置成执行操作的可编程IO设备。这些操作包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以计算下一级要获取的下一个缓存行的地址。
Description
相关申请的交叉引用
本申请要求于2020年8月21日提交的美国申请号17/000,172的利益,该美国申请的内容出于所有目的通过引用并入本文。
背景
网络流量是指在给定时间点移动通过网络的数据量。网络数据大多封装在网络分组(packet)中,这些分组提供了网络中的负载。网络流量是网络流量测量、网络流量控制和仿真的主要组成部分。网络流量的适当组织有助于确保给定网络中的服务质量。
概述
计算环境可以包括主机,诸如服务器,运行一个或更多个进程的计算机,诸如虚拟机或容器。主机和/或进程可以被配置成通过计算网络与其他进程或设备通信。主机系统经由输入/输出(IO)设备(例如,网络接口卡(NIC))与计算网络对接(interface)。
计算机系统通过指定的一组设备寄存器和基于存储器的数据结构与IO设备对接。对于给定的IO设备,这些寄存器和数据结构通常是固定的,允许特定的设备驱动器程序在计算机系统上运行并控制IO设备。在数据通信网络中,网络接口通常是固定定义的控制结构、描述符、寄存器等。联网数据和控制结构是基于存储器的,并使用直接存储器访问(DMA)语义访问存储器。诸如交换机、路由设备的网络系统在一组输入接口中的一个处接收消息或分组,并将它们转发到一组输出接口中的一个或更多个。用户通常要求这样的路由设备尽可能快地操作,以便跟上高速率的传入消息。与网络系统相关联的一个挑战涉及提供灵活的网络接口,以便适应网络设备结构和特征集的变化、各种协议、操作系统、应用以及设备模型的快速发展。
通信服务提供商正大力投资于大型和超大规模数据中心,以交付内容、数据处理和通信服务。交付这些服务的应用必须能够访问高速存储装置和网络,必须是安全的,并且在基于软件定义网络(SDN)的虚拟化环境中运行。虚拟化软件、负载平衡、加密、深度分组检查(DPI)和分组处理都需要许多个中央处理单元(CPU)周期,并且可能占用多个处理器核心,减少了应用可用的核心数量。
NIC是一种插入到服务器或存储箱(storage box)中以实现与以太网网络的连接的外围部件互连高速(PCIe)扩展卡。传统的NIC支持CPU功能(诸如校验和和分割)的卸载。然而,随着由SDN和网络功能虚拟化(NFV)驱动的云数据中心联网中的近来的结构性转变,需要一类新的卸载NIC。更具体地说,随着覆盖隧道协议(诸如虚拟可扩展局域网(VXLAN)和具有复杂动作的虚拟交换)的引入,基于服务器的联网数据平面的复杂性急剧增加。另外,增加网络接口带宽意味着在软件中执行这些功能会对CPU资源造成无法承受的负载,使运行应用的CPU很少或根本没有。此外,SDN的一个关键要求是联网数据平面必须保持可替代的,因此无法应用固定功能卸载技术。
智能NIC(也称为智能服务器适配器(ISA))不仅仅是简单的连接,还在NIC上实现了在基础NIC的情况下必须由CPU执行的网络流量处理。智能NIC可以被用于云数据中心服务器,以通过经由IO子系统执行网络数据路径处理来卸载服务器CPU的操作,从而提高性能。例如,通过智能NIC提供的IO子系统从服务器CPU中卸载了低级别操作,显著提高了网络和应用性能。通过安装智能NIC,通信服务提供商可以在投资略微增加的情况下交付明显更好的创收服务。
随着网络和运行在网络上的协议的复杂性的增加,主机针对联网操作必须执行的处理量呈指数级增长。由于随着对更多网络带宽的需求的增加,对宝贵的主机CPU时间的需求也随之增加,这一问题被放大了。因此,越来越多地将ISA部署在数据中心中,以将这些复杂的联网任务从主机CPU中卸载。这使得主机上的应用可以使用更多的CPU。ISA包括可以被用来提供高级服务的大量状态数据的容量。ISA通常作为PCIe设备呈现给主机,但也可以作为嵌入式(bump-in-the-wire)以太网设备参与卸载主机CPU任务。高级功能可以与主机无关,因为主机通常使用机架外的驱动器与这些设备通信。ISA设备可以由不一定与主机管理员相同的管理员与主机分开管理。
此外,云客户需要巨大的规模。例如,100万互联网协议版本4(IPv4)路由和100万互联网协议版本6(IPv6)路由。换个角度来看,互联网上v4和v6路由的总数分别是795,000和75,000(2019年9月5日)。这些客户还需要100万v4策略规则和100万v6策略规则。在一些实施例中,上述IO子系统在其数据平面中包括总共192KB的三元内容可访问存储器(TCAM),这对于该规模是不够的。此外,云解决方案的功率要求小于50W,这无法支持额外的TCAM。
一些行业解决方案针对专用集成电路(ASIC)数据路径。这些解决方案主要集中在传统的数据路径设计上,因此受到其局限性的限制。这些解决方案可能采用并行或级联查找和查找之间的最小处理或不处理,并试图对IP地址空间进行切片和切块,这使得IPv6特别难以实现,浪费大量存储器,并且不具有高度可扩展性。其他解决方案可以在网络处理器核心中实现,并采用复杂的数据结构方案,这些方案需要大量的计算来处理,难以估计处理延迟的上限,并且不能满足高的线速率。对于P4可编程数据路径,这些解决方案中没有一个是最佳的,诸如所采用的是所描述的IO子系统,其中可以在每个级中执行少量的处理(例如,微小的搜索)。因此,所描述的系统采用一种解决方案,该解决方案将问题划分为可以分布在各个级之间的使用少量数据的少量处理。
另外,由于各种原因,可以在例如数据平面路由中采用的最长前缀匹配(LPM)查找是劳动密集型的,这些原因包括下面的:LPM查找是多对一映射;可以查找的有效键在查找表中没有唯一的条目;在不将前缀扩展为其各个值的情况下,无法使用索引查找;查找表的存储和处理消耗大量存储器;不能采用尝试,因为可能有多达128个层次(IPv6)的嵌套;过多的决策级;基于步幅的算法浪费大量存储器;前缀是具有较低值(floor(向下舍入))和较高值(ceiling(向上舍入))的范围,而查找应该找到查找键所属的范围;各种前缀可以具有不同的前缀长度(或范围大小);无法采用哈希查找,因为使用哪个前缀长度未知;对每个可能的前缀长度进行单独的哈希查找(总共128个)是太多的查找;表中可以存在多个重叠的前缀;查找键可以匹配多个重叠的前缀;查找需要找到查找键适合的最窄范围(最长前缀);在查找正确匹配期间检查表中的所有条目;不能使用前缀的二叉搜索,因为当键匹配范围时,搜索不能停止,因为可能有更具体(更长)的匹配;以及三叉树和三叉搜索浪费存储器。
在某些实施例中,本文描述了采用IO设备提供控制平面以对数据转发硬件编程的系统。在一些实施例中,所描述的系统采用多个级联级,其中每个级可通过算术逻辑单元(ALU)和匹配处理单元(MPU)执行算术运算。在一些实施例中,所描述的系统采用Pensando树(Pensando Tree)而不在节点中存储指针,以优化缓存(cache)和存储器访问性能,以及显著减少总存储器需求。在一些实施例中,所描述的系统采用Pensando树而不在内部节点中存储数据,以实现更高的指数爆炸。在一些实施例中,所描述的系统有效地压缩Pensando树的多个层次,以优化管线化处理中的性能,并实现每级更高的指数爆炸。
因此,在一个方面,本文公开了一种可编程IO设备。该可编程IO设备包括存储器单元。存储器单元具有存储在其上的指令,该指令当由可编程IO设备执行时,使可编程IO设备执行包括以下项的操作:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔(interval)表;从间隔表生成间隔二叉搜索树(interval binary search tree);将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取(fetch)的缓存行中的下一个缓存行的地址。在一些实施例中,在数据平面中接收的分组基于Pensando树被分类,而不在缓存行中存储存储器地址。在一些实施例中,可编程IO设备包括至少一个ARM处理器。在一些实施例中,存储在存储器单元上的指令由至少一个ARM处理器执行。在一些实施例中,控制平面经由至少一个ARM处理器来执行。在一些实施例中,可编程IO设备包括MPU。在一些实施例中,MPU基于Pensando树的经修改的二叉搜索对在数据平面中接收的分组进行分类,以确定LPM。在一些实施例中,MPU执行多个级联级以执行经修改的二叉搜索。在一些实施例中,MPU包括至少一个ALU。在一些实施例中,多个级联级中的每一个通过ALU执行算术运算。在一些实施例中,直到完全遍历了Pensando树,才确定经修改的二叉搜索的查找结果。在一些实施例中,存储在缓存行中的一个中的Pensando树的单独的节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在该当前缓存行中的Pensando树的传出分支的索引来计算下一个缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,通过获取存储在缓存行中的选定的缓存行中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,经由栈(stack)从排序后的一组基于范围的元素生成间隔表。在一些实施例中,根据排序算法对该组基于范围的元素进行排序,该排序算法接收该组基于范围的元素并根据全局顺序确定该组基于范围的元素的有序版本。在一些实施例中,根据线性算法在存储器单元中组装缓存行。在一些实施例中,在存储器单元中组装缓存行不需要存储器指针。在一些实施例中,线性算法包括:对于Pensando树的每个级,选择缓存行中的第一缓存行作为用于该级的当前缓存行;将所有级的当前缓存行初始化为相应的最大值;利用默认结果数据初始化用于最后级的当前缓存行的默认结果数据;以及按升序遍历间隔表,其中间隔表中的每个条目包括间隔值和结果数据,对于每个被遍历的条目:当最后级的当前缓存行未满时,将间隔值和结果数据添加到用于最后级的当前缓存行;以及当最后级的当前缓存行已满时:将间隔值递归地提升到前一个级或多个级;更新当前缓存行,以表示用于该前一个级或多个级的将在其中存储下一个数值上更高的间隔值的缓存行;使用最大值重新初始化表示用于该级的下一个数值上更高的缓存行的更新的当前缓存行;以及将用于最后级的重新初始化的当前缓存行的默认结果数据设置为刚刚提升的节点的结果数据。在一些实施例中,第一缓存行存储数值上最低的间隔值。在一些实施例中,基于范围的元素包括一组可用前缀。在一些实施例中,根据可用前缀的长度来确定全局顺序。在一些实施例中,该组可用前缀包括重叠的前缀。在一些实施例中,通过以下方式将用于基于范围的元素和相关联的数据元素的配置值转换成间隔二叉搜索树:在作为键空间数字线的另一条数字线上方,生成用于基于范围的元素的基于范围的值和与每个基于范围的值相关联的相应数据元素值的数字线表示,作为基于范围的元素数字线,键空间数字线表示搜索键的整个数字空间;将每条基于范围的元素数字线投影到键空间数字线上,以标记每条基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同的间隔和与每个不同的间隔相关联的相应数据元素值导出Pensando树。在一些实施例中,映射在Pensando树中的每个数据元素包括路由策略、计量标识符、策略器标识符或路由元素。在一些实施例中,每个基于范围的元素包括互联网协议(IP)地址,其中相关联的数据元素包括下一跳(next hop),并且其中对分组进行分类包括将分组提供给出站接口(outboundinterface),出站接口根据Pensando树的经修改的二叉搜索的查找结果来确定。在一些实施例中,对于从间隔二叉搜索树的根节点处开始的Pensando树的所有节点的右子树,来自节点的结果数据值被存储在子树的最左叶节点中作为该子树的最左出口分支的结果数据值。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,Pensando树包括完全填充的二叉树,该二叉树包括使用最大值初始化的节点和按顺序填充并表现出二叉搜索树(BST)属性的有效节点。在一些实施例中,顺序是从左到右。
在相关但独立的方面中,本文公开了一种用于提供控制平面来对数据转发硬件进行编程的方法。该方法由可编程IO设备执行。该方法包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址。在一些实施例中,在数据平面中接收的分组基于Pensando树被分类,而不在缓存行中存储存储器地址。在一些实施例中,可编程IO设备包括至少一个ARM处理器。在一些实施例中,存储在存储器单元上的指令由至少一个ARM处理器执行。在一些实施例中,控制平面经由至少一个ARM处理器来执行。在一些实施例中,可编程IO设备包括MPU。在一些实施例中,MPU基于Pensando树的经修改的二叉搜索对在数据平面中接收的分组进行分类,以确定LPM。在一些实施例中,MPU执行多个级联级以执行经修改的二叉搜索。在一些实施例中,MPU包括至少一个ALU。在一些实施例中,多个级联级中的每一个通过ALU执行算术运算。在一些实施例中,直到完全遍历了Pensando树,才确定经修改的二叉搜索的查找结果。在一些实施例中,存储在缓存行中的一个中的Pensando树的单独的节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在该当前缓存行中的Pensando树的传出分支的索引来计算下一个缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,通过获取存储在缓存行中的选定的缓存行中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,经由栈从排序后的一组基于范围的元素生成间隔表。在一些实施例中,根据排序算法对该组基于范围的元素进行排序,该排序算法接收该组基于范围的元素并根据全局顺序确定该组基于范围的元素的有序版本。在一些实施例中,根据线性算法在存储器单元中组装缓存行。在一些实施例中,在存储器单元中组装缓存行不需要存储器指针。在一些实施例中,线性算法包括:对于Pensando树的每个级,选择缓存行中的第一缓存行作为用于该级的当前缓存行;将所有级的当前缓存行初始化为相应的最大值;使用默认结果数据初始化用于最后级的当前缓存行的默认结果数据;以及按升序遍历间隔表,其中间隔表中的每个条目包括间隔值和结果数据,对于每个被遍历的条目:当最后级的当前缓存行未满时,将间隔值和结果数据添加到用于最后级的当前缓存行;以及当最后级的当前缓存行已满时:将间隔值递归地提升到前一个级或多个级;更新当前缓存行,以表示用于前一个级或多个级的将在其中存储下一个数值上更高的间隔值的缓存行;使用最大值重新初始化表示用于该级的下一个数值上更高的缓存行的更新的当前缓存行;以及将用于最后级的重新初始化的当前缓存行的默认结果数据设置为刚刚提升的节点的结果数据。在一些实施例中,第一缓存行存储数值上最低的间隔值。在一些实施例中,基于范围的元素包括一组可用前缀。在一些实施例中,根据可用前缀的长度来确定全局顺序。在一些实施例中,该组可用前缀包括重叠的前缀。在一些实施例中,通过以下方式将用于基于范围的元素及相关联的数据元素的配置值转换成间隔二叉搜索树:在作为键空间数字线的另一条数字线上方,生成用于基于范围的元素的基于范围的值和与每个基于范围的值相关联的相应数据元素值的数字线表示,作为基于范围的元素数字线,该键空间数字线表示搜索键的整个数字空间;将每条基于范围的元素数字线投影到键空间数字线上,以标记每条基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同的间隔和与每个不同的间隔相关联的相应数据元素值导出Pensando树。在一些实施例中,映射在Pensando树中的每个数据元素包括路由策略、计量标识符、策略器标识符或路由元素。在一些实施例中,每个基于范围的元素包括互联网协议(IP)地址,其中相关联的数据元素包括下一跳,并且其中对分组进行分类包括将分组提供给出站接口,该出站接口根据Pensando树的经修改的二叉搜索的查找结果来确定。在一些实施例中,对于从间隔二叉搜索树的根节点处开始的Pensando树的所有节点的右子树,来自节点的结果数据值被存储在子树的最左叶节点中作为用于该子树的最左出口分支的结果数据值。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,Pensando树包括完全填充的二叉树,该二叉树包括使用最大值初始化的节点和按顺序填充并表现出二叉搜索树(BST)属性的有效节点。在一些实施例中,顺序是从左到右。在相关但独立的方面中,本文公开了一种用于提供控制平面来对数据转发硬件编程的方法。该方法由可编程IO设备执行。该方法包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序,对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址。在一些实施例中,基于Pensando树对在数据平面中接收的分组进行分类,而不在缓存行中存储存储器地址。
在相关但独立的方面中,本文公开了一种系统,该系统包括:可编程IO设备,该可编程IO设备被配置为执行使可编程IO设备执行操作的指令,该操作包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序,对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址。在一些实施例中,在数据平面中接收的分组基于Pensando树被分类,而不在缓存行中存储存储器地址。在一些实施例中,可编程IO设备包括至少一个ARM处理器。在一些实施例中,存储在存储器单元上的指令由至少一个ARM处理器执行。在一些实施例中,控制平面经由至少一个ARM处理器来执行。在一些实施例中,可编程IO设备包括MPU。在一些实施例中,MPU基于Pensando树的经修改的二叉搜索对在数据平面中接收的分组进行分类,以确定LPM。在一些实施例中,MPU执行多个级联级以执行经修改的二叉搜索。在一些实施例中,MPU包括至少一个ALU。在一些实施例中,多个级联级中的每一个通过ALU执行算术运算。在一些实施例中,直到完全遍历了Pensando树,才确定经修改的二叉搜索的查找结果。在一些实施例中,存储在缓存行中的一个中的Pensando树的单独的节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在该当前缓存行中的Pensando树的传出分支的索引来计算下一个缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,通过获取存储在缓存行中的选定的缓存行中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,经由栈从排序后的一组基于范围的元素生成间隔表。在一些实施例中,根据排序算法对该组基于范围的元素进行排序,该排序算法接收该组基于范围的元素并根据全局顺序确定该组基于范围的元素的有序版本。在一些实施例中,根据线性算法在存储器单元中组装缓存行。在一些实施例中,在存储器单元中组装缓存行不需要存储器指针。在一些实施例中,线性算法包括:对于Pensando树的每个级,选择缓存行中的第一缓存行作为用于该级的当前缓存行;将所有级的当前缓存行初始化为相应的最大值;使用默认结果数据初始化用于最后级的当前缓存行的默认结果数据;以及按升序遍历间隔表,其中间隔表中的每个条目包括间隔值和结果数据,对于每个被遍历的条目:当最后级的当前缓存行未满时,将间隔值和结果数据添加到用于最后级的当前缓存行;以及当最后级的当前缓存行已满时:将间隔值递归地提升到前一个级或多个级;更新当前缓存行,以表示用于前一个级或多个级的将在其中存储下一个数值上更高的间隔值的缓存行;使用最大值重新初始化表示用于该级的下一个数值上更高的缓存行的更新的当前缓存行;以及将用于最后级的重新初始化的当前缓存行的默认结果数据设置为刚刚提升的节点的结果数据。在一些实施例中,第一缓存行存储数值上最低的间隔值。在一些实施例中,基于范围的元素包括一组可用前缀。在一些实施例中,根据可用前缀的长度来确定全局顺序。在一些实施例中,该组可用前缀包括重叠的前缀。在一些实施例中,通过以下方式将用于基于范围的元素及相关联的数据元素的配置值转换成间隔二叉搜索树:在作为键空间数字线的另一条数字线上方,生成用于基于范围的元素的基于范围的值和与每个基于范围的值相关联的相应数据元素值的数字线表示,作为基于范围的元素数字线,该键空间数字线表示搜索键的整个数字空间;将每条基于范围的元素数字线投影到键空间数字线上,以标记每条基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同的间隔和与每个不同的间隔相关联的相应数据元素值导出Pensando树。在一些实施例中,映射在Pensando树中的每个数据元素包括路由策略、计量标识符、策略器标识符或路由元素。在一些实施例中,每个基于范围的元素包括互联网协议(IP)地址,其中相关联的数据元素包括下一跳,并且其中对分组进行分类包括将分组提供给出站接口,该出站接口根据Pensando树的经修改的二叉搜索的查找结果来确定。在一些实施例中,对于从间隔二叉搜索树的根节点处开始的Pensando树的所有节点的右子树,来自节点的结果数据值被存储在子树的最左叶节点中作为用于该子树的最左出口分支的结果数据值。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,Pensando树包括完全填充的二叉树,该二叉树包括使用最大值初始化的节点和按顺序填充并表现出二叉搜索树(BST)属性的有效节点。在一些实施例中,顺序是从左到右。在相关但独立的方面中,本文公开了一种用于提供控制平面来对数据转发硬件编程的方法。该方法由可编程IO设备执行。该方法包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序,对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址。在一些实施例中,在数据平面中接收的分组基于Pensando树被分类,而不在缓存行中存储存储器地址。
可以实现本公开中所描述的主题的特定实施例,以便实现以下优点中的一个或更多个。在一些实施例中,所描述的系统提供控制平面算法,该控制平面算法用于有效构建在这里解释的数据平面实现中使用的数据结构。在一些实施例中,所描述的系统将存储器组织成可以由一系列级联级中的每一个访问的缓存行。在一些实施例中,所描述的系统采用可以用于宽度和在每个级处的扩展不同的LPM的算法。在一些实施例中,所描述的系统被设计成通过使用高效算法(例如,线性算法)来设计规模以避免控制平面瓶颈。
应当理解,所描述的系统的不同方面可以单独地、集体地或相互结合地被理解。本文所描述的系统的各个方面可应用于下文所阐述的任何特定应用或用于本文所公开的任何其他类型的数据处理系统。本文关于数据处理的任何描述可以适用于并被用于任何其他数据处理情况。附加地,在数据处理系统或装置的上下文中所公开的任何实施例也适用于本文公开的方法。
附图简述
通过参考以下对说明性实施例加以阐述的详细描述及附图,将会获得对本主题的特征和优势的更好的理解,在附图中:
图1描绘了可以由本公开的实施例采用的非限制性示例性计算系统架构;
图2描绘了可以由本公开的实施例采用的用于执行程序的多个MPU的非限制性示例性配置;
图3描绘了可以由本公开的实施例采用的非限制性示例性MPU;
图4描绘了可以由本公开的实施例采用的非限制性示例性P4入口或出口管线(pipeline)(PIP管线);
图5A描绘了非限制性示例性路由表;
图5B描绘了非限制性示例性策略匹配表;
图5C描绘了除了要匹配的键和要检索的数据之外还包括掩码的非限制性示例性表;
图5D描绘了示出如何可以在传统交换机中实现LPM的非限制性示例性表;
图6描绘了在控制平面内执行以对数据转发硬件进行编程的示例过程的流程图;
图7A描绘了可以被用于将前缀和相应的下一跳转换成可以被二叉搜索的某物的非限制性示例性前缀空间表示;
图7B描绘了被投影到数字线上不同间隔的非限制性示例性前缀空间表示;
图7C描绘了被投影到数字线上的非限制性示例性前缀空间表示,其中在必要的地方添加了新的点;
图7D描绘了从变换中导出的非限制性示例性间隔表;
图8A-图8BL描绘了用于可以在间隔二叉搜索树上执行的示例经修改的二叉搜索的一系列非限制性示例性渐进步骤;
图9A描绘了非限制性示例性树结构,该树结构示出了对于LPM实现,什么使二叉搜索前缀变得困难;
图9B描绘了从间隔表中导出的非限制性示例性间隔二叉搜索树;
图10A描绘了其中数据不存储在内部节点中的非限制性示例性二叉搜索树;
图10B-图10P描绘了非限制性示例性步骤,这些步骤示出了如何通过将下面的规则应用于从根开始的每个内部节点的右子树,将来自内部节点的数据向下推送到正确的出口分支;
图11描绘了其中数据不存储在内部节点中的非限制性示例二叉搜索树;
图12A-图12K描绘了用于可以在间隔二叉搜索树上执行的示例经修改的二叉搜索的一系列非限制性渐进步骤;
图13A-图13N描绘了用于可以在间隔二叉搜索树上执行的示例经修改的二叉搜索的另一系列的非限制性渐进步骤;
图14描绘了可以在间隔二叉搜索树上执行的对各种传入地址的非限制性示例经修改的二叉搜索;
图15A-图15C描绘了一系列树,这些树突出显示了存储其中数据不存储在内部节点中的间隔二叉搜索树的一些问题;
图15D描绘了可以被采用以存储其中数据不存储在内部节点中的间隔二叉搜索树的示例Pensando树;
图16描绘了一个示例,其中示例Pensando树被划分成子树,每个子树具有树的一些层次;
图17描绘了可以被所描述的系统采用的用于8K规模的端口范围(16b)LPM的非限制性示例性存储器实现;
图18A描绘了可以被所描述的系统采用的用于1K规模的IPv4路由LPM的非限制性存储器实现;
图18B描绘了非限制性示例性32b LPM缓存行格式;
图18C描绘了LPM缓存行格式的非限制性示例性树表示;
图18D描绘了非限制性示例性32b LPM缓存行格式;
图18E描绘了LPM缓存行格式的非限制性示例性树表示;
图19A描绘了可以被所描述的系统采用的用于1K规模的IPv6(64b)路由LPM的非限制性示例性存储器实现;
图19B描绘了非限制性示例性64b LPM缓存行格式;
图19C描绘了LPM缓存行格式的非限制性示例性树表示;
图19D描绘了非限制性示例性64b LPM缓存行格式;
图19E描绘了非限制性示例性树表示;
图20A描绘了可以被所描述的系统采用的用于1K规模的IPv6(128b)策略LPM的非限制性示例性存储器实现;
图20B描绘了非限制性示例性128b LPM缓存行格式;
图20C描绘了LPM缓存行格式的非限制性示例性树表示;
图20D描绘了非限制性示例性128b LPM缓存行格式;
图20E描绘了LPM缓存行格式的非限制性示例性树表示;
图21描绘了可以被所描述的系统采用的非限制性示例性存储器实现;
图22描绘了从间隔表生成最终存储器内容的示例过程的流程图;
图23A描绘了基于间隔表从间隔表生成存储器内容的非限制性示例性表示;
图23B描绘了示例间隔表;
图23C描绘了非限制性示例性存储器布局;
图24描绘了用LPM替代RFC的第一级的非限制性示例性使用;
图25描绘了可以由本公开的实施例实现的非限制性示例性过程的流程图;
图26描绘了可以被编程或以其他方式被配置以实现本公开的方法或系统的非限制性示例计算机系统;以及
图27描绘了可以采用本公开的实现的非限制性示例环境。
详细描述
在某些实施例中,本文描述了可编程IO设备。每个可编程IO设备包括:存储器单元。该存储器单元具有存储在其上的指令,该指令当由可编程IO设备执行时,使该可编程IO设备执行操作。这些操作包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址,其中在数据平面中接收的分组基于Pensando树进行分类,而不在缓存行中存储存储器地址。
在某些实施例中,本文还描述了用于提供控制平面以对数据转发硬件编程的方法。该方法由可编程IO设备执行,并且包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址,其中在数据平面中接收的分组基于Pensando树进行分类,而不在缓存行中存储存储器地址。
在某些实施例中,本文还描述了包括可编程IO设备的系统,该可编程IO设备被配置为执行使该可编程IO设备执行操作的指令,该操作包括:确定用于网络的一组基于范围的元素;根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序;从排序后的基于范围的元素生成间隔表;从间隔表生成间隔二叉搜索树;将存储在间隔二叉搜索树的内部级的子树中的数据传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据;将间隔二叉搜索树转换为Pensando树;基于从中访问每个层次的级,将Pensando树的多个层次压缩成缓存行;以及在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址,其中在数据平面中接收的分组基于Pensando树进行分类,而不在缓存行中存储存储器地址。
某些定义
除非特别定义,否则本文使用的所有技术术语具有该所描述的系统所属领域的普通技术人员通常理解的相同意思。
除非上下文另有明确规定,否则如本文所使用的单数形式“一(a)”、“一(an)”和“该(the)”包括复数引用。除非另有说明,否则本文对“或”的任何引用都旨在包括“和/或”。
贯穿本说明书中的对“一些实施例”或“实施例”的引用意指结合实施例所描述的特定的特征、结构或特性被包括在至少一个实施例中。因此,在贯穿本说明书的各个地方中出现的短语“在一些实施例中”或“在实施例中”不一定都指相同的实施例。此外,特定的特征、结构或特性可在一个或更多个实施例中以任何适合的方式组合。
如本文所引用的,术语“部件”、“系统”、“接口”、“单元”、“块”、“设备”等旨在指计算机相关实体、硬件、软件(例如,在执行中)和/或固件。例如,部件可以是处理器、在处理器上运行的进程、对象、可执行文件、程序、存储设备和/或计算机。通过说明的方式,在服务器上运行的应用和服务器可以是部件。一个或更多个部件可以驻留在进程内,并且部件可以定位在一台计算机上和/或分布在两台或更多台计算机之间。
此外,这些部件可以从其上存储有各种数据结构的各种计算机可读介质执行。部件可经由本地和/或远程进程通信,诸如根据具有一个或更多个数据分组(例如,来自一个部件的数据,该部件与本地系统中、分布式系统中、和/或网络上的另一部件交互,该网络例如是互联网、局域网、广域网等,经由信号与其他系统交互)的信号。
作为另一示例,部件可以是具有由通过电气或电子电路操作的机械零件提供的特定功能的装置;该电气或电子电路可以通过由一个或更多个处理器执行的软件应用或固件应用进行操作;该一个或更多个处理器可以在该装置的内部或外部,并且可以执行软件或固件应用的至少一部分。作为又一示例,部件可以是通过没有机械零件的电子部件提供特定功能的装置;电子部件可以在其中包括一个或更多个处理器,以执行至少部分地赋予电子部件功能的软件和/或固件。
此外,在本文中所使用的词语“示例性”表示“用作示例、实例或说明”。本文中描述为“示例性的”的任何方面或设计不必解释为优选的或优于其他方面或设计。更确切地说,词语示例性的使用旨在以具体方式呈现概念。如在本申请中所使用的,术语“或”旨在表示包含性的“或”而不是排他性的“或”。也就是说,除非另有说明或从上下文中清楚明白,否则“X采用A或B”旨在表示任何自然包含性的排列。也就是说,如果X采用A;X采用B;或X采用A和B二者,则在任何前述实例中都满足“X采用A或B”。另外,如在本申请和所附权利要求中使用的冠词“一(a)”和“一(an)”通常应该被解释为意指“一个或更多个”,除非另有说明或从上下文中清楚地针对单数形式。
如本文所使用的,术语“实时”是指在给定系统的处理限制、准确获得数据和图像所需的时间以及数据和图像的变化率的情况下,在没有有意延迟的情况下传输或处理数据。在一些示例中,“实时”被用于描述从本公开的实施例的部件所获得的信息的呈现。
如本文所使用的,PCIe包括高速串行计算机扩展总线标准。在一些示例中,PCIe是用于硬件部件(诸如图形卡、硬盘驱动器、固态驱动器(SSD)、Wi-Fi和以太网硬件连接)的主板接口。PCIe基于点对点拓扑结构,具有将每个设备连接到根复合体(主机)的单独的串行链路。PCIe对旧的标准(例如,外围部件互连(PCI)、PCI扩展(PCI-X)和加速图形端口(AGP)总线标准)进行了改进,包括更高的最大系统总线吞吐量、更低的输入输出(I/O)引脚计数和更小的物理占用空间、更好的总线设备性能扩展、更详细的错误检测和报告机制(例如,高级错误报告(AER))和本机热交换功能。PCIe标准的最新修订为I/O虚拟化提供了硬件支持。
如本文所使用的,扩展卡包括印刷电路板,该印刷电路板可以被插入到计算机主板、底板或转接卡(riser card)上的电连接器或扩展槽中,以经由扩展总线向计算机系统添加功能。在一些实施例中,扩展总线是在计算机系统的内部硬件(诸如CPU和随机存取存储器(RAM))和外围设备(诸如缓存、其他存储器、数据存储装置或电子显示适配器)之间移动信息的计算机总线。
如本文所使用的,操作包括压缩、解压缩、加密、解密、哈希摘要计算(dedupe)、校验和等。在一些实施例中,这些操作还执行“一般”工作,诸如获取、解码和执行。
如本文所使用的,操作链包括操作的组合或序列。例如,压缩加加密,解密加解压缩,校验和加加密加校验和,以及哈希加压缩加填充加哈希。
如本文所使用的,数据路径包括执行数据处理操作的功能单元(诸如算术逻辑单元或乘法器)、寄存器和总线的集合。通过使用多路复用器连接多于一个数量的数据路径,可以生成更大的数据路径。在一些实施例中,数据路径内的卸载链提供了增加的处理吞吐量。例如,智能NIC可能具有每秒100千兆位(Gbps)的PCIe数据路径,如果例如主机操作系统没有适当地采用该数据路径,则将无法实现全部的100Gbps的吞吐量。与数据路径相对应的是控制路径,控制路径可以在主机CPU上执行,因此不能达到100Gbps的吞吐量。
如本文所使用的,Pensando树是完全填充的二叉树,其节点用某个最大值初始化,且其有效(非最大值)节点按顺序(例如,从左到右)被填充并表现出BST属性。
所描述的系统的实施例可用于各种应用中。所描述的系统的一些实施例可以与各种设备和系统结合使用,这些设备和系统例如为个人计算机(PC)、台式计算机、移动计算机、膝上型计算机、笔记本计算机、平板计算机、服务器计算机、手持式计算机、手持式设备、个人数字助理(PDA)设备、手持式PDA设备、无线通信站、无线通信设备、无线接入点(AP)、调制解调器、网络、无线网络、局域网(LAN)、无线LAN(WLAN)、城域网(MAN)、无线MAN(WMAN)、广域网(WAN)、无线WAN(WWAN)、个人区域网(PAN)、无线PAN(WPAN)、根据现有IEEE 802.11、802.11a、802.11b、802.11e、802.11g、802.11h、802.11i、802.11n、802.16、802.16d、802.16e标准和/或上述标准的未来版本和/或衍生物和/或长期演进(LTE)而操作的设备和/或网络、作为上述网络一部分的单元和/或设备、单向和/或双向无线电通信系统、蜂窝无线电电话通信系统、蜂窝电话、无线电话、个人通信系统(PCS)设备、包含无线通信设备的PDA设备、多输入多输出(MIMO)收发器或设备、单输入多输出(SIMO)收发器或设备、多输入单输出(MISO)收发器或设备等。
术语“表”指的是数据或分组处理中涉及的各种类型的表。例如,该表可以是在“匹配+动作”级中使用的匹配表,诸如转发表(例如,用于以太网地址查找的哈希表、用于IPv4或IPv6的最长前缀匹配表、用于ACL的通配符查找)。这些表可以存储在诸如内部SRAM、NICDRAM或主机存储器的各种存储器位置中。
术语“匹配+动作”指的是网络分组交换的范例(诸如由OpenFlow交换机或P4管线执行的范例,其使用匹配表、动作表、统计存储器、计量仪存储器、有状态存储器(statefulmemory)和三元间接存储器)。术语“P4”指的是用于对与协议无关的分组处理器进行编程的高级语言。P4是一种声明性语言,用于表达分组如何由诸如交换机、NIC、路由器或网络功能器件的网络转发元件的管线进行处理。它基于抽象的转发模型,该模型由解析器和一组“匹配+动作”表资源组成,分为入口和出口。解析器识别每个传入分组中存在的报头。每个“匹配+动作”表在报头字段的子集上执行查找,并应用对应于每个表内的第一匹配的动作。
术语“有状态配置状态(stateful configuration state)”指的是存储器中对应于双向流的两个分支的条目,以及不是以每个分组为基础更新,而是用第一个流丢失的分组创建的条目。
尽管出于演示目的,本公开的部分涉及有线和/或有线通信系统或方法,但所描述的系统的实施例在这方面不受限制。作为示例,一个或更多个有线通信系统可以利用一个或更多个无线通信部件、一个或更多个无线通信方法或协议等。
尽管出于演示目的,本文讨论的一些部分可能涉及快速或高速互连基础设施,涉及具有OS旁路能力的快速或高速互连部件或适配器,涉及具有OS旁路能力的快速或高速互连卡或NIC,或者涉及快速或高速互连基础设施或结构,但是所描述的系统的实施例在这方面不受限制,并且可以与其他基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用,该基础设施、结构、部件、适配器、主机通道适配器、卡或NIC可以是快速或高速的或具有OS旁路能力,也可以不一定是快速或高速的或不一定具有OS旁路能力。例如,所描述的系统的一些实施例可以与InfiniBand(IB)基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与以太网基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与千兆位以太网(GEth)基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与具有OS的基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与允许用户模式应用直接访问这样的硬件并绕过对操作系统的调用(即,具有OS旁路能力)的基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;与无连接和/或无状态的基础设施、结构、部件、适配器、主机通道适配器、卡或NIC结合使用;和/或与其他合适的硬件结合使用。
计算机系统采用各种各样的外围部件或IO设备。通过由PCIe(高速串行计算机扩展总线标准)定义的部件总线连接到IO设备的计算机系统的主处理器的示例。设备驱动器(也称为驱动器)是特定于硬件的软件,其控制连接到计算系统的硬件设备的操作。
在计算中,虚拟化技术被用于允许多个操作系统同时共享处理器资源。一种这样的虚拟化技术是单根I/O虚拟化(SR-IOV),在PCI-SIG单根I/O虚拟化和共享规范中对其进行了描述。物理IO设备可以允许多个虚拟机通过SR-IOV并发地使用该设备。在SR-IOV中,物理设备可以具有允许输入/输出操作和设备配置的物理功能(PF),以及允许数据输入/输出的一个或更多个虚拟功能(VF)。根据SR-IOV,PCIe设备可以看起来是多个独立的物理PCIe设备。例如,具有单个端口的SR-IOV NIC可以具有多达256个虚拟功能,其中每个虚拟功能表示相应的NIC端口。
在一个方面,提供了一种可编程设备接口。设备接口可以是高度优化的基于环的I/O队列接口,具有高效的软件编程模型,以对CPU和PCIe总线效率交付高性能。图1示出了根据所描述系统的实施例的示例性计算系统架构100的框图。主机计算系统120上的管理程序(hypervisor)121可以使用PF 115和一个或更多个VF 113与物理IO设备110交互。如图所示,计算系统120可以包括被配置用于管理接口设备的管理设备117。管理设备117可以与处理实体111(例如,高级精简指令集计算机(RISC)机器(ARM)处理器)和管理实体119(例如,管理虚拟机系统)通信。应当注意,所示出的计算系统只是一个示例机构,而不对所描述系统的范围提出任何限制。所提供的可编程IO接口和方法可以被应用于任何操作系统级虚拟化(例如,容器和docker系统)或机器级虚拟化或没有虚拟化特征的计算系统。
管理程序121通常为主机提供操作系统功能(例如,进程创建和控制、文件系统进程线程等)以及CPU调度和存储器管理。在一些情况下,主机计算系统120可以包括实现机器仿真器和虚拟器的程序。机器仿真器和虚拟器可以帮助虚拟化虚拟机中的相应计算机IO设备,诸如虚拟化的硬盘、光盘驱动器和NIC。Virtio是一种用于在虚拟机中实现虚拟IO设备的虚拟化标准,并且可以被认为是用于管理程序中的一组常见仿真设备的抽象。
所提供的可编程IO设备接口机制允许在使用设备仿真器时实现本机硬件速度。可编程IO设备接口允许主机系统与具有现有设备驱动器的IO设备对接,而无需重新配置或修改。在一些情况下,VF设备、PF设备和管理设备可以具有类似的驱动器接口,使得这样的设备可以由单个驱动器支持。在一些情况下,这样的设备可以被称为以太网设备。
IO设备110可以向作为计算系统120上的主机操作的操作系统提供各种服务和/或功能。例如,IO设备可以向计算系统提供网络连接功能、协处理器功能(例如,图形处理、加密/解密、数据库处理等)等。IO设备110可以经由例如PCIe总线与计算系统100中的其他部件对接。
如上所述,SR-IOV规范使单个根功能(例如,单个以太网端口)能够相对于虚拟机作为多个物理设备出现。具有SR-IOV能力的物理IO设备可以被配置成作为多个功能出现在PCI配置空间中。SR-IOV规范支持物理功能和虚拟功能。
物理功能是可以像普通的PCI设备一样被发现、管理和配置的完整的PCIe设备。物理功能通过分配虚拟功能来配置和管理SR-IOV功能。IO设备可以向主机计算系统120或管理程序121公开一个或更多个物理功能(PF)115。PF 115可以是包括用于IO设备的所有配置资源和能力的全功能PCIe设备。在一些情况下,PF可以是包括SR-IOV扩展能力的PCIe功能,这有助于IO设备的配置或管理。PF设备本质上是以太网设备的基本控制器。PF设备可以配置有多达256个VF。在一些情况下,PF可以包括扩展操作,诸如分配、配置和释放VF,发现VF的硬件能力(诸如接收端缩放(RSS)),发现VF的硬件资源(诸如队列和中断资源的数量),配置VF的硬件资源和特征,保存和恢复硬件状态等。在一些实例中,PF设备可以被配置作为可以呈现Option ROM基地址寄存器(BAR)的启动设备。
IO设备还可以提供一个或更多个虚拟功能(VF)113。VF可以是轻量级PCIe功能,其包含数据移动所必需的资源,但可以具有最小化的配置资源集。在一些情况下,VF可以包括支持SR-IOV的轻量级PCIe功能。为了在虚拟化系统中使用SR-IOV设备,可以将硬件配置成创建多个VF。这些VF可以供管理程序使用,以便分配给虚拟机。例如,可以由SR-IOV物理功能设备操纵(例如,创建、配置、监视或销毁)VF。在一些情况下,多个VF中的每一个配置有一个或更多个基地址寄存器(BAR)以将NIC资源映射到主机系统。VF可以映射IO设备中用于转发和事务识别的一个或更多个LIF或端口。一个LIF可能只属于一个VF。在物理设备中,所有虚拟功能可以具有相同的BAR资源布局,在主机PCIe地址空间中顺序堆叠。IO设备PCIe接口逻辑可被编程以将具有可编程访问权限(例如,读、写、执行)的控制寄存器和NIC存储器区域映射到VF BAR。
IO设备110可以包括用于管理IO设备的管理设备117。管理设备117可能不具有对网络上行链路端口的直接访问。管理设备可以与处理实体111通信。例如,管理设备上的流量可以被引导到内部接收队列,以便由处理实体111上的管理软件进行处理。在一些情况下,管理设备可以用于通过管理程序传递到诸如管理虚拟机的管理实体119。例如,可以向管理设备117分配不同于PF设备115的设备ID,使得当PF设备不要求管理设备的权限时,可以为PF设备释放管理程序中的设备驱动器。
图2示出了根据所描述系统的一些实施例的具有所描述的可编程设备接口的另一个示例性IO设备系统200。系统200被用作实现P4和扩展的P4管线以及各种其他功能以提供改进的网络性能的示例。在一些情况下,设备接口可以通过以下方式改进网络性能:不需要在分组传输或接收路径中读取PCIe总线寄存器;为分组传输提供单个发布的(posted)(非阻塞的)PCIe总线寄存器写入;支持具有驱动器可配置的中断调节的消息信号中断(MSI)和消息信号中断-扩展(MSI-X)模式,用于高性能的中断处理;支持每个队列具有未完成(outstanding)请求(例如,高达64K)的I/O队列;传输具有改进的发送大小的TCP分段卸载(TCP segmentation Offload)(TSO);提供传输控制协议(TCP)/用户数据报协议(UDP)校验和卸载;支持可变数量的接收队列,以支持行业标准的接收端缩放(RSS);支持具有多达255个虚拟功能的SR-IOV。
IO设备系统200可以是如图1中所描述的相同IO设备并且被实现为机架式设备,并且包括具有安装在其上的部件的一个或更多个ASIC和/或板。如图2中所示,系统200可以包括具有相干L1和L2缓存的四个ARM处理器、共享的本地存储器系统、闪速非易失性存储器、DMA引擎以及用于操作和调试的各种IO设备。ARM处理器可以经由地址映射来观察和控制所有NIC资源。如本文后面所述,ARM处理器可以实现P4管线和扩展的P4管线。
该系统可以包括主机接口和网络接口。主机接口可以被配置成提供与一个或更多个主机(例如,主机服务器)的通信链路。主机接口块还可以经由PCIe BAR映射观察地址空间的区域,以向主机系统公开NIC功能。在示例中,地址映射最初可以根据ARM存储器映射、限制的ARM的原则来被创建,其为34位存储器映射提供SOC寻址指南。
网络接口可以支持与计算网络的网络连接或上行链路,该计算网络可以是例如局域网、广域网和如本文别处所述的各种其他网络。物理链路可以由管理代理(例如,管理实体119)通过设备驱动器来控制。例如,物理链路可以经由与设备LIF相关联的“虚拟链路”来被配置。
系统200中的存储器事务,包括主机存储器、HBM和寄存器,可以经由基于来自外部系统的IP的相干的片上网络(NOC)来被连接。NOC可以在NOC主控件(masters)之间提供缓存相干互连,包括P4管线、扩展的P4管线、DMA、PCIe和ARM。互连可以使用可编程哈希算法将HBM存储器事务分布在多个(例如,16个)HBM接口上。针对HBM的所有流量可以存储在NOC缓存(例如,1MB缓存)中。NOC缓存可以与ARM缓存保持相干。NOC缓存可以被用于聚合可能小于缓存行(例如,64字节的大小)的HBM写入事务,因为HBM在处理小的写入时不是高效的。NOC缓存可以具有高带宽,当它面对1.6Tb/s HBM时,支持高达3.2Tb/s的操作。
该系统可以包括内部HBM存储器系统,用于运行Linux,存储诸如流表和其他分析的大型数据结构,并为包括TCP终止和代理、深度分组检查、存储装置卸载和连接的FPGA功能的高级特征提供缓冲资源。存储器系统可以包括HBM模块,该HBM模块可以支持4GB容量或8GB容量,这取决于封装和HBM。
如上所述,该系统可以包括PCIe主机接口。PCIe主机接口可支持例如每个PCIe连接100Gb/s的带宽(例如,双PCIe Gen4x8或单个PCIe Gen3x16)。将IO设备处可用的资源映射到与虚拟IO设备相关联的存储器映射的控制区的机制或方案可以通过使用与资源映射表耦合的一池可配置PCIe基地址寄存器(BAR)来实现,以为每个虚拟IO设备存储映射信息。由IO设备提供的IO资源可以被映射到PCIe标准的框架中的主机地址,使得被用于与物理PCIe设备通信的相同设备驱动器可以被用于与对应的虚拟PCIe设备通信。
IO设备接口可以包括可编程寄存器。这些寄存器可以包括,例如,PCIe基地址寄存器(BAR),该PCIe基地址寄存器(BAR)可以包括包含设备资源的第一存储器BAR(例如,设备命令寄存器、门铃寄存器、中断控制寄存器、中断状态寄存器、MSI-X中断表、MSI-X中断待定位阵列(pending bit array)等)、包含设备门铃页面(doorbells pages)的第二BAR、以及用于映射控制器存储器缓冲器(controller memory buffer)的第三BAR。
设备命令寄存器是用于向硬件或固件提交管理命令的一组寄存器。例如,设备命令寄存器可以指定单个64字节命令和单个16字节完成响应。该寄存器接口一次可以允许单个命令为未完成的。设备命令门铃是一种特殊用途的门铃,用于告知设备命令寄存器中的命令已准备就绪。
第二BAR可以包含门铃页面。第二BAR的一般形式可以包含多个LIF,其中每个LIF具有多个门铃页面。网络设备(即,IO设备)可以具有至少一个LIF,该LIF具有至少一个门铃页面。具有单个/许多门铃页面的单个/许多LIF的任何组合都是可能的,驱动器可以准备好识别和操作不同的组合。在示例中,门铃页面可以默认以4k步幅呈现,以匹配通用系统页面大小。可以在虚拟功能设备113中调整门铃页面之间的步幅,以匹配父物理功能设备115中的SR-IOV能力报头中的系统页面大小配置设置。通过允许每个进程映射和访问专用于其使用的门铃页面,该页面大小分离允许进程对一组门铃寄存器进行受保护的独立直接访问。每个页面可以提供操作LIF的数据路径队列资源所需的门铃资源,同时保护从另一个进程对这些资源的访问。
门铃寄存器可以由软件写入以调整队列的生产者索引。调整生产者索引是将队列描述符环中队列条目的所有权转移到硬件的机制。一些门铃类型,诸如管理队列、以太网传输队列和RDMA发送队列,可能会导致硬件队列调度对队列中可用描述符的进一步处理。其他队列类型(诸如完成队列和接收队列)在更新生产者索引后可能不需要来自硬件队列的进一步动作。
中断状态寄存器可以包含用于设备的每个中断资源的位。寄存器可以具有指示对应的中断资源已断言其中断的位集合。例如,中断状态中的位0指示已断言中断资源0,位1指示已断言中断资源1。
控制器存储器缓冲器可以是驻留在IO设备上的通用存储器区域。用户或内核驱动器可以映射到该控制器存储器BAR中,并在该区域中构建描述符环、描述符和/或有效负载(payload)数据。可以在描述符中添加位以选择描述符地址字段是被解释为主机存储器地址,还是被解释为相对于设备控制器存储器窗口开始的偏移量。如果该地址是主机地址,则扩展的P4程序可以设置该地址的指定位(例如,位63),或者扩展的P4程序可以清除该位,并在为DMA级建立TxDMA操作时将设备控制器存储器基地址添加到偏移量。
MSI-X资源可以通过第一BAR来映射,并且该格式可以由PCIe基本规范来描述。MSI-X中断表是控制寄存器的区域,该区域允许OS代表驱动器对MSI-X中断向量进行编程。
MSI-X中断待定位阵列(PBA)是位的阵列,设备支持的每个MSI-X中断对应一个位。
IO设备接口可以支持可编程DMA寄存器表、描述符格式和控制寄存器格式,允许专用VF接口和用户定义的行为。IO设备PCIe接口逻辑可被编程以将具有可编程访问权限(例如,读、写、执行)的控制寄存器和NIC存储器区域映射到VF BAR。
匹配处理单元
在所描述的系统的方面中,提供了MPU来处理数据结构。该数据结构可以包括各种类型,诸如数据分组、管理令牌、来自主机的管理命令、处理令牌、描述符环和各种其他类型。MPU可以被配置成根据正在处理的数据的类型或不同的目的执行各种操作。例如,操作可以包括用于处理分组的基于表的动作、诸如将时间戳写入表或获得表数据以用于导出的表维护操作、诸如创建新队列或存储器映射的管理操作、收集统计信息以及各种其他操作,诸如发起可以导致将任何类型的修改数据写入主机存储器的大容量数据(bulk data)处理。
在一些实施例中,MPU可以处理数据结构,以便更新基于存储器的数据结构或发起事件。该事件可以与修改或更新分组有关,也可以与修改或更新分组无关。例如,事件可以是管理操作,诸如创建新队列或存储器映射、收集统计信息、发起可能导致将任何类型的修改数据写入主机存储器的大容量数据处理、或对描述符环、分散收集列表(SGL)执行计算。
图3示出了根据所描述系统的实施例的MPU 300的框图。在一些实施例中,MPU单元300可以包括多个功能单元、存储器和至少一个寄存器堆(register file)。例如,MPU单元可以包括指令获取单元301、寄存器堆单元307、通信接口305、ALU 309和各种其他功能单元。
在所示的示例中,MPU单元300可以包括允许存储器读/写操作的写入端口或通信接口305。例如,通信接口可以支持将分组写入外部存储器(例如,主机设备的HBM)或内部SRAM或从外部存储器(例如,主机设备的HBM)或内部SRAM读取分组。通信接口305可以采用任何合适的协议,诸如高级微控制器总线架构(AMBA)高级可扩展接口(AXI)协议。AXI是用于高速/高端片上总线协议的总线协议,具有与读、写、地址和写响应相关联的通道,这些通道各自分离,单独地被操作,并具有诸如多个未完成地址或写数据交织的事务特性。AXI接口305可以包括支持以下项的特征:使用字节选通的未对齐数据传输、仅发出起始地址的基于突发的事务、分离的地址/控制和数据相、发出具有乱序响应的多个未完成地址、以及容易添加寄存器级以提供定时关闭。例如,当MPU执行表写入指令时,MPU可以跟踪哪些字节已经被写入(也称为脏字节),哪些字节保持不变。当表条目被冲刷(flush)回存储器时,脏字节向量可以作为写选通(write strobe)提供给AXI,允许多个写操作安全地更新单个表数据结构,只要它们不向相同的字节写入。在一些情况下,表中的脏字节不需要是连续的,并且MPU只能在脏向量中至少有一个位被设置时写回表。尽管根据根据本说明书中的本示例性实施例的分组数据通信片上互连系统中的AXI协议来传输分组数据,但该数据分组也可以应用于通过支持锁定操作的其他协议(诸如,除了AXI协议之外的高级高性能总线(AHB)协议或高级外围总线(APB)协议)操作的分组数据通信片上互连系统。
MPU 300可以包括指令获取单元301,该指令获取单元301被配置成基于输入表结果或该表结果的至少一部分从MPU外部的存储器获取指令集。该指令获取单元可以基于表结果或由表引擎提供的表结果的一部分来支持分支和/或线性代码路径。在一些情况下,表结果可以包括表数据、键数据和/或指令集/程序的起始地址。关于表引擎的细节在本文后面描述。在一些实施例中,指令获取单元301可以包括用于存储一个或更多个程序的指令缓存303。在一些情况下,在接收到由表引擎提供的程序的起始地址时,可以将一个或更多个程序加载到指令缓存303中。在一些情况下,指令集或程序可以存储在存储器单元的连续区域中,并且该连续区域可以通过地址来标识。在一些情况下,一个或更多个程序可以经由通信接口305从外部存储器获取和加载。这提供了灵活性,用于允许使用相同的处理单元执行与不同类型的数据相关联的不同程序。在示例中,当管理分组报头向量(PHV)被注入到管线中时,例如以执行管理表直接存储器访问(DMA)操作或条目老化功能(即,添加时间戳),管理MPU程序中的一个可以被加载到指令缓存以执行管理功能。指令缓存303可以使用诸如一个或更多个SRAM的各种类型的存储器来实现。
一个或更多个程序可以是任何程序,诸如与读取表、构建报头、去往/来自HBM中或主机设备中的存储器区域的DMA和各种其他动作相关的P4程序。一个或更多个程序可以在如本文别处所述的管线的任何级中被执行。
MPU 300可以包括寄存器堆单元307,以在MPU的存储器和功能单元之间或在MPU外部的存储器和MPU的功能单元之间暂存数据。功能单元可以包括例如ALU、计量仪、计数器、加法器、移位器、边缘检测器、零检测器、条件码寄存器、状态寄存器等。在一些情况下,寄存器堆单元307可以包括多个通用寄存器(例如,R0、R1、……Rn),该多个通用寄存器最初可以被加载有元数据值,然后随后被用于存储程序执行内的临时变量,直到程序完成。例如,寄存器堆单元307可以被用于存储SRAM地址、TCAM搜索值、ALU操作数、比较源或动作结果。一个级的寄存器堆单元还可以向后续级的寄存器堆提供数据/程序上下文,以及使数据/程序上下文可用于下一级的执行数据路径(即,下一级的加法器、移位器等的源寄存器)。在一个实施例中,寄存器堆的每个寄存器为64位,并且最初可以分别加载有特殊元数据值,诸如来自表、查找、分组大小、PHV时间戳、可编程表常量等的哈希值。
在一些实施例中,寄存器堆单元307还可以包括被配置成存储比较器标志的比较器标志单元(例如,C0、C1、……Cn)。比较器标志可以由通过ALU生成的计算结果设置,该计算结果反过来与被编码的指令中的常量值进行比较,以确定条件分支指令。在实施例中,MPU可以包括八个一位比较器标志。然而,应当注意,MPU可以包括任意数量的比较器标志单元,每个比较器标志单元可以具有任意合适的长度。
MPU 300可以包括一个或更多个功能单元,诸如ALU 309。ALU可以支持对存储在寄存器堆单元307中的值的算术运算和逻辑运算。然后可以将ALU运算(例如,加、减、与(AND)、或(OR)、异或(XOR)、非(NOT)、与非(AND NOT)、移位和比较)的结果写回寄存器堆。例如,MPU的功能单元可以更新或修改PHV中任何地方的字段、向存储器写入(例如,表冲刷)或执行与PHV更新无关的操作。例如,ALU可以被配置成对描述符环、分散收集列表(SGL)和从主机存储器加载到通用寄存器中的控制数据结构执行计算。
MPU 300可以包括各种其他功能单元,诸如计量仪、计数器、动作插入单元等。例如,ALU可以被配置成支持符合P4的计量仪。计量是可在被用于测量数据流速的表匹配上执行的一种类型的动作。计量仪可以包括多个带,通常为两个或三个,每个带具有定义的最大数据速率和可选的突发大小。使用漏桶类比,计量仪带是通过分组数据速率填充并以恒定的允许数据速率耗尽的桶。如果数据速率超过配额的积分大于突发大小,则发生溢出。溢出一个带会触发下一个带的活动,下一个带可能会允许更高的数据速率。在一些情况下,分组的字段可以被注释为溢出基带的结果。该信息后面可以被用于将分组导向到不同的队列,其中在拥塞情况下,分组可能更容易经历延迟或丢弃。计数器可以由MPU指令实现。MPU可以包括用于不同目的的一种或更多种类型的计数器。例如,MPU可包括用于对MPU停顿计数的性能计数器。动作插入单元可以被配置成将寄存器堆结果推回到PHV以用于报头字段修改。
MPU可以具有锁定表的能力。在一些情况下,由MPU正在处理的表可在表引擎中被锁定或标记为“锁定”。例如,当MPU使表被加载到它的寄存器堆中时,表地址可以被报告回表引擎,使对同一表地址的未来读取停顿,直到MPU释放了表锁。例如,当执行显式表冲刷指令、MPU程序结束或MPU地址改变时,MPU可以释放锁。在一些情况下,MPU可以锁定多于一个的表地址,例如,一个用于前一个表回写,另一个地址锁定用于当前MPU程序。
MPU管线处理
单个MPU可以被配置成执行程序的指令直到程序完成。替代地或附加地,多个MPU可以被配置成执行程序。在一些实施例中,表结果可以被分布到多个MPU。可以根据为表配置的MPU分布掩码将表结果分布到多个MPU。当程序过长时,这提供了防止数据停顿或每秒百万分组(MPPS)减少的优势。例如,如果PHV在一个级中需要四次表读取,那么如果在800MHz的频率下操作,则每个MPU程序可以被限制为仅八个指令,以便保持100MPPS,在这种情况下可能需要多个MPU。
可以使用任意数量的MPU来执行程序,以满足需要的性能。例如,至少两个、三个、四个、五个、六个、七个、八个、九个或十个MPU可以被使用来执行程序。每个MPU可以执行程序的至少一部分或指令集的子集。多个MPU可以同时或顺序地执行该执行文件。每个MPU可以执行也可以不执行相同数量的指令。配置可以根据程序的长度(即,指令、循环的数量)和/或可用MPU的数量来确定。在一些情况下,配置可以由从可操作地耦合到多个MPU的主机设备的主存储器接收的应用指令来确定。
P4管线
在一个方面,提供了一种灵活的、高性能的匹配动作管线,该管线可以执行范围广泛的P4程序。P4管线可以被编程为提供各种特征,包括但不限于路由、桥接、隧穿、转发、网络ACL、L4防火墙、基于流的速率限制、VLAN标签策略、成员资格、隔离、多播和组控制、标签推送/弹出操作、L4负载平衡、用于分析和特定于流的处理的L4流表、DDOS攻击检测、缓解、对任何分组字段或流状态进行遥测数据收集以及其他各种特征。图4示出了根据所描述系统的实施例的示例性P4入口或出口管线(PIP管线)400的框图。
在一些实施例中,所描述的系统可以支持“匹配+动作”管线。程序员或编译器可以将分组处理程序分解成一组相关或独立的表查找和动作处理级(即,“匹配+动作”),该表查找和动作处理级分别被映射到表引擎和MPU级上。“匹配+动作”管线可以包括多个级。例如,进入管线的分组可以首先由解析器(例如,解析器507)根据由P4程序指定的分组报头栈解析。分组的这种经解析的表示可以被称为经解析的报头向量。然后,经解析的报头向量可以被传递通过入口“匹配+动作”管线的级(例如,级401-1、级401-2、级401-3、级401-4、级401-5、级401-6)。在一些实施例中,每个级被配置为将一个或更多个经解析的报头向量字段与表匹配,然后根据P4程序指定的动作来更新分组报头向量(PHV)和/或表条目。在一些实例中,如果所需的级的数量超过所实现的级的数量,则分组可以被重新循环以进行附加处理。在一些情况下,分组有效负载可以在单独的先进先出(FIFO)队列中行进,直到它与其PHV在去解析器(de-parser)(例如,去解析器409)中被重新组装。去解析器可以根据已经被修改(例如,添加、删除或更新)的PHV字段重写原始分组。在一些情况下,由入口管线处理的分组可以被放置在分组缓冲器中,用于调度和可能的复制。在一些情况下,一旦分组被调度并离开分组缓冲器,就可以再次对其进行解析以创建出口经解析的报头向量。出口经解析的报头向量可以以与入口“匹配+动作”管线类似的方式被传递通过“匹配+动作”管线的级序列,在此之后,可以在分组被发送到其目的地接口或被重新循环用于附加处理之前执行最终的去解析器操作。
在一些实施例中,入口管线和出口管线可以使用相同的物理块或处理单元管线来实现。在一些实施例中,PIP管线400可以包括至少一个解析器407和至少一个去解析器409。PIP管线400可以包括多个解析器和/或多个去解析器。解析器和/或去解析器可以是符合P4的可编程的解析器或去解析器。在一些情况下,解析器可被配置为根据P4报头定义来提取分组报头字段并将它们放置在分组报头向量(PHV)中。解析器可以从分组内的任何字段进行选择,并对齐来自所选字段的信息以创建分组报头向量。在一些情况下,在传递通过“匹配+动作”级的管线之后,去解析器块可以被配置成根据更新的PHV重写原始分组。
由解析器产生的分组报头向量(PHV)可以具有任何大小或长度。例如,PHV可以是至少512位、256位、128位、64位、32位、8位或4位。在一些情况下,当期望一个长的PHV(例如,6Kb)包含所有相关的报头字段和元数据时,单个PHV可以跨越几个周期被时分复用(TDM)。这种TDM能力提供了好处,允许所描述的系统支持可变长度的PHV,包括非常长的PHV,以实现复杂的特征。PHV长度可能随着分组传递通过“匹配+动作”级而变化。
PIP管线可以包括多个“匹配+动作”级。在解析器407产生PHV之后,PHV可以被传递通过入口“匹配+动作”级。在一些实施例中,PIP管线可以使用多个级单元401-1、401-2、401-3、401-4、401-5、401-6来实现,每个级单元可以包括表引擎405和多个MPU 403。MPU403可以与如图4中所描述的MPU相同。在所示的示例中,在一个级单元中使用四个MPU。但是,可以使用任何其他数量的MPU,诸如至少一个、两个、三个、四个、五个、六个、七个、八个、九个或十个,或者可以使用表引擎对MPU分组。
表引擎405可以被配置成支持每级表匹配。例如,表引擎405可以被配置成对表条目进行哈希、查找和/或将键与表条目进行比较。表引擎405可以被配置成通过控制表的地址和大小、用作查找键的PHV字段以及定义与表相关联的P4程序的MPU指令向量来控制表匹配处理。由表引擎产生的表结果可以被分布到多个MPU 403。
表引擎405可以被配置成控制表选择。在一些情况下,在进入一个级时,可以检查PHV,以选择为到达的PHV启用哪个(哪些)表。表选择标准可以基于PHV中包含的信息来确定。在一些情况下,匹配表可以基于关于与PHV相关联的分组类型的分组类型信息来被选择。例如,表选择标准可以基于分组类型或协议(例如,IPv4、IPv6和多协议标签交换(MPLS))或由前一个级确定的下一个表ID。在一些情况下,表选择逻辑可以分析传入的PHV,然后生成表选择键,并使用TCAM比较结果以选择活动表。表选择键可以被用于驱动表哈希生成、表数据比较和相关联的数据进入到MPU中。
在一些实施例中,表引擎405可以包括哈希生成单元。哈希生成单元可以被配置成从PHV输入生成哈希结果,且该哈希结果可以被用于从DRAM或SRAM阵列进行DMA读取。在示例中,哈希生成单元的输入可以根据表选择键中的哪些位对哈希熵有贡献来进行掩蔽。在一些情况下,表引擎可以使用相同的掩码,用于与返回的SRAM读取数据进行比较。在一些情况下,哈希结果可以根据表大小被缩放,然后可以添加表基本偏移来创建存储器索引。存储器索引可以被发送到DRAM或SRAM阵列并用于执行读取。
在一些情况下,表引擎405可以包括TCAM控制单元。TCAM控制单元可以被配置成分配存储器以存储多个TCAM搜索表。在示例中,PHV表选择键可以在SRAM查找之前被引导到TCAM搜索级。TCAM搜索表可以配置成具有高达1024位的宽度和与TCAM资源允许的深度相同的深度。在一些情况下,多个TCAM表可以从共享象限TCAM资源中被雕刻。TCAM控制单元可以被配置成将TCAM分配到各个级,以防止TCAM资源冲突,或者将TCAM分配到级内的多个搜索表中。TCAM搜索索引结果可以被转发到表引擎,用于SRAM查找。
PIP管线400可以包括多个级单元401-1、401-2、401-3、401-4、401-5、401-6。PIP管线可以包括任意数量的级单元,诸如可在PIP管线内使用的至少两个、三个、四个、五个、六个、七个、八个、九个、十个级单元。在所示的示例中,六个“匹配+动作”级单元401-1、401-2、401-3、401-4、401-5、401-6被分组成一组。该组级单元可以共享一组公共的SRAM 411和TCAM 413。SRAM 411和TCAM 413可以是PIP管线的部件。这种布置可以允许六个级单元以任何合适的比例划分匹配表资源,这为编译器提供了方便,并减轻了编译器的资源映射任务。每个PIP管线可以使用任何合适数量的SRAM资源和任何合适数量的TCAM资源。例如,所示的PIP管线可以耦合到十个SRAM资源以及四个或八个TCAM资源。在一些情况下,TCAM可以垂直或水平地融合,用于更广泛或更深入的搜索。
扩展的P4管线
在一个方面,所描述的系统可以支持扩展的P4可编程管线,以允许与主机驱动器直接对接。扩展的P4可编程管线实现了如上所述的IO设备接口。例如,P4编程的DMA接口可以直接耦合到主机虚拟功能(VF)以及ARM、CPU或卸载引擎接口。扩展的P4管线可以处理所需的DMA操作和循环。扩展的P4管线可以包括特征,包括但不限于:无状态NIC卸载,诸如TCP分段卸载(TSO)和接收端缩放(RSS);扩展的P4管线中的存储交换表类型事务服务;可扩展到性能关键应用(诸如DPDK或键值匹配)的各个数据结构的细粒度负载平衡决策;用于代理服务的TCP流终止与启动;通过聚合以太网的RDMA(RoCE)和类似的远程直接存储器访问(RDMA)协议支持;在P4中可以指定自定义描述符和SGL格式,以匹配性能关键应用的数据结构;新的设备和VF行为可以使用与主机驱动器开发耦合的P4程序建模,以及各种其他特征。
数据可以在P4管线中的分组化域与主机和NIC存储器系统中的存储器事务域之间来回传输。该分组到存储器事务的转换可以由包括DMA写(TxDMA)和/或DMA读(RxDMA)操作的扩展的P4管线执行。在整个说明书中,包括TxDMA的扩展的P4管线也可以被称为Tx P4或TxDMA,并且包括RxDMA的扩展的P4管线也可以被称为Rx P4。扩展的P4管线可以包括P4管线中的相同的“匹配+动作”级,以及管线端部处的有效负载DMA级。分组可以根据扩展的P4程序被分割或重新组装到数据缓冲器或存储器区域(例如,RDMA注册的存储器)中。有效负载DMA级可以是P4扩展,该P4扩展使可编程P4网络管线能够扩展到主机存储器系统和驱动器接口。该P4扩展允许定制自定义数据结构和应用交互,以用于应用或容器的需要。
在扩展的P4管线中利用的匹配表可以是可编程表。扩展的P4管线的级可以包括多个可编程表,这些表可以存在于SRAM、NIC DRAM或主机存储器中。例如,主机存储器结构可以包括描述符环、SGL和控制数据结构,该描述符环、SGL和控制数据结构可以被读到MPU的寄存器堆单元中以用于计算。MPU可以添加PHV命令来控制对/从主机和NIC存储器的DMA操作,并将DMA命令插入到PHV中,用于由有效负载DMA级执行。扩展的P4程序可以包括,例如,完成队列事件、中断、定时器设置以及控制寄存器写和各种其他程序。
控制平面
电信中通常识别三个平面:控制、数据和管理。在该上下文中,“平面”是操作区域。通常,数据平面是指将分组或帧从一个接口转发到另一个接口的功能和过程;控制平面是指确定使用哪条路径的功能和过程(例如,路由协议、生成树(spanning tree)、标签分发协议(LDP)等等);而管理平面是用来控制和监视设备的功能。在一些实现中,管理平面被认为是控制平面的子集。
在一些实现中,控制平面定义网络的拓扑结构,并负责建立网络节点(例如路由器)之间的链路以及负责交换协议信息。在一些实现中,使用各种路由协议来定义连接并管理它们的行为。在传统网络中,这些平面中的每一个被实现在路由器的固件中。在SDN中,控制平面和数据平面是解耦的,允许网络架构的更大的灵活性和动态控制。然后,控制平面和数据平面二者都可以通过软件控制进行管理。
最长前缀匹配
通常,可以通过硬件(诸如IO子系统)来提供用于通过数据平面路由流量的LPM查找。例如,当接收到具有IP地址(例如,目的地IP地址或源IP地址)的分组时,在各种存储的路由表中查找该地址并将其与一组可用前缀匹配。最长匹配的前缀条目(例如,从左边到IP地址的最多的数字)被返回。然而,当多个前缀相互匹配时,复杂性会增加。在这种情况下,包括最深匹配嵌套的前缀应作为最长匹配被返回。
图5A描绘了包括要匹配的前缀和要检索的数据的示例路由表500。示例表500可以在所描述的系统内被采用,以利用作为特定值(不是前缀)的查找键来查找数据。示例表示出了多个条目可能潜在地匹配同一个查找键。在这样的场景中,在一些实施例中,最长的匹配前缀的数据被返回。例如,所描绘的表产生以下LPM结果:20.20.20.20→NH1(只有默认路由匹配);10.20.20.20→NH2(10.x.x.x匹配);10.10.20.20→NH3(10.10.x.x匹配);10.10.10.20→NH4(10.10.10.x匹配);和10.10.10.10→NH5(10.10.10.10匹配)。LPM结果可以被用于路由查找,例如,在该路由查找中选择与传入分组中的IP地址的最长前缀匹配的下一跳。
一般而言,LPM用于两个主要目的:1)路由查找和2)策略匹配。作为示例,策略可以是适当的,其包括:当接收到具有源IP前缀X、目的地IP前缀Y、UDP协议或TCP协议、源端口范围在100至200之间以及目的地范围为600至700的分组时,然后将采取特定动作(例如,丢弃分组、接受分组、检查分组等)。在一些实施例中,为了执行路由查找和策略匹配,多个匹配表(参见图5B)可以被采用。
图5B描绘了示例策略匹配表510。例如,这些表可以在策略的多个部件需要匹配的情况下被采用。如图所示,源和目的地IP表指定LPM前缀,源和目的地端口表指定范围,协议表指定协议。在一些实施例中,采用软件将范围分解为多个可掩蔽的LPM条目。在一些实施例中,一个行的所有列必须匹配,以便使该行被认为是匹配的。
图5C描绘了示例表520,该示例表520除了包括要匹配的键和要检索的数据之外还包括掩码。使用这样的示例表520,将查找键与表中的每个前缀条目进行比较,并且对于每个条目,首先将查找键与掩码进行逻辑与运算,然后将结果与前缀进行比较。此外,在可能潜在地匹配的多个条目之中,最长匹配前缀的数据被返回。
图5D描绘了示例表530,该示例表530示出了如何可以在传统交换机中实现LPM。例如,TCAM可以被用于硬件中,其中TCAM可以只存储键和掩码,并且TCAM中的每个条目在SRAM中有对应的条目来存储数据。在一些实施例中,以前缀长度的降序对条目进行编程。在一些实施例中,将查找键与存储在每个条目中的掩码进行逻辑与操作,并且将结果与存储的键进行匹配。在一些实施例中,在所有匹配的条目之中,处于最低索引(例如,从顶部到底部计数)的条目的索引被返回。在一些实施例中,使用该索引在SRAM表中进行单独查找以检索数据。
采用图5A-图5D中所描绘和描述的表的系统具有的一个问题是TCAM需要复杂的逻辑,并且需要大量的硅片空间(silicon real estate),这使得它们的构建成本很高。此外,逻辑和速度要求使它们非常耗电,因此操作成本很高。电力的使用也会生成大量的热量。移除热量是一项挑战,并增加了操作成本。此外,数据检索可能需要复杂的排序(编译)才能找到正确的结果。所有这些通过对控制平面处理器提出了很高的要求而限制了规模。
控制平面实现
图6描绘了在控制平面内执行以对数据转发硬件进行编程的示例过程600的流程图。示例过程600可以由所描述的系统的各种元件(例如经由可编程IO设备)实现。在一些实施例中,所描述的系统采用多个级联级,其中每个级可以通过ALU和匹配处理单元MPU执行算术运算。如所描绘的,示例过程可以在控制平面中执行,以有效地构建可以在数据平面实现中采用的数据结构。示例过程600将存储器组织成可以由每个级联级访问的缓存行。示例过程600可以用于宽度和在每个级处的扩展不同的LPM,并且通过高效率(例如,线性执行)来避免控制平面瓶颈。
为了清楚地呈现,下面的描述一般在图1-图5D和图6-图27的上下文中描述示例过程600。然而,将理解,过程600可以例如由任何其他合适的系统、环境、软件和硬件执行,或者由适当的系统、环境、软件和硬件的组合执行。在一些实施例中,过程600的各种操作可以并行地、组合地、循环地或以任何顺序运行。在一些实施例中,过程600由可编程IO设备执行。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,可编程IO设备包括具有存储在其上的指令的存储器单元,该指令当由可编程IO设备执行时,使可编程IO设备执行过程600。在一些实施例中,可编程IO设备包括MPU,该MPU包括至少一个ALU。在一些实施例中,可编程IO设备包括ARM处理器。
在602,用排序算法对输入的前缀列表进行排序。一般而言,排序算法接收可排序数据(例如,元素列表)作为输入,并根据输入的元素之间的某种全局顺序确定数据的有序版本。例如,排序算法可以重复比较成对的元素,并基于比较的结果做出决策。示例算法包括但不限于冒泡排序、堆排序、插入排序或合并排序。在604,从排序后的(可能重叠的)前缀表生成间隔表。在606,从间隔表生成间隔二叉搜索树。在608,将存储在间隔二叉搜索树的内部级的子树中的数据传播(“推送”)到最后级的子树,使得内部级不包括存储的数据。在610,将间隔二叉搜索树转换为Pensando树。在612,Pensando树的多个层次基于将从中访问它的级被压缩成缓存行。在614,在存储器中组装缓存行,使得每个级可以使用当前缓存行的地址和在该级的子树的传出分支编号来计算下一级要获取的下一个缓存行的地址。通过以这种方式组装缓存行,不必存储存储器指针,从而为数据提供了增加的空间。下面更详细地描述步骤604-614。
前缀空间表示
图7A描绘了示例前缀空间表示700,该前缀空间表示700可以被采用以将前缀和相应的下一跳转换成可以在例如控制平面内被二叉搜索的结构(例如,间隔二叉搜索树)。示例前缀空间表示700示出了以下前缀和下一跳:10.0.0.0/8:A、10.10.0.0/16:B、10.15.0.0/16:C、11.10.0.0/16:D、11.11.0.0/16:E和192.168.0.0/16:F。如所描绘的,“-1”表示默认的下一跳。数字线712表示用于IPV4中包括的地址的位范围,其为32位范围(例如,0到2的32次方)。
图7B描绘了投影到数字线712上的不同间隔中的前缀空间表示700的示例710,其可以被采用来为这些间隔中的每一个导出下一跳(例如,-1、A、B、C、D、E、F)。图7C描绘了投影到数字线712上的前缀空间表示700的示例720,其中在必要的地方添加了新的点722。例如,新的点722可以被添加,使得每个前缀被转换为数字线712上的两个点,起点和终点。为了查找地址,可以从左到右顺序地搜索与数字线712上的点相对应的值,而没有进行掩蔽或逻辑与运算。当该点小于或等于地址键时,从该点拾取数据,并继续搜索;当该点大于地址键时,停止搜索,最近的数据是正确的结果。因此,对路由表中每个条目的蛮力搜索可以在找到正确间隔时被能够在特定点处停止的搜索所替代。
图7D描绘了从示例720导出的示例间隔表730。在最坏的情况下,这样的间隔表对于n个前缀具有2n-1个条目(例如,当前缀不重叠时),而最佳情况是n+1个(例如,当前缀相邻时)。在一些实施例中,掩码不包括在由所描述的系统所采用的导出的间隔表中。掩码的排除节省了存储器和处理。即使可以在找到正确的间隔后就马上停止搜索,但顺序搜索间隔表的计算量很大,并且严重限制了规模。例如,假设每个级可以在4个间隔上进行比较和分支,搜索仅4096个间隔(对应于最坏情况下分布的2K个前缀)将会需要禁止性的1024个级,而在假设相同的情况下,搜索1600万个间隔(800万个前缀)将会需要不切实际的400万个级。
生成间隔表
图8A-图8BL描绘了步骤800-899,其更详细地示出了可以如何使用栈从排序后的前缀列表(例如,排序路由表)生成间隔表(例如图7D中所描绘的间隔表730)的实现。在一些实施例中,导出排序后的列表对应于图6中描述的步骤602。在一些实施例中,从排序后的列表导出间隔对应于图6中描述的步骤604。所描绘的实现采用以下线性算法来转换排序后的前缀列表,但是可以采用其他实现。首先,通过推送可能的最高键值来初始化栈,其中结果数据为-1且父数据为-1。接下来,对于按升序遍历的前缀列表中的每个前缀:当栈[顶部].key值小于floor(前缀键)时,栈[顶部].key值被弹出并输出到间隔表,其中栈[顶部].result数据被用作结果数据值;当栈[顶部].key值等于floor(前缀键)时,然后栈被弹出;floor(前缀键)被输出到间隔表,其中前缀结果数据被用作结果数据值;当栈[顶部].key值等于ceiling(前缀键)+1时,然后栈被弹出;ceiling(前缀键)+1与用作结果数据值的栈[顶部]父数据和用作父数据值的前缀结果数据一起被推送到栈。最后,当栈[顶部].key值小于可能的最高值时:栈[顶部].key值被弹出并输出到间隔表,其中栈[顶部].result数据被用作结果数据值。
间隔二叉搜索树
图9A描绘了示例树结构900,该树结构900示出了对于LPM实现,什么使二叉搜索前缀变得困难。示例树结构900包括作为范围(例如,具有低值和高值)的前缀条目。当发现查找键所属的范围(前缀条目)时,LPM搜索不能像普通的二叉搜索一样停止,因为嵌套的前缀可能存在于该范围(前缀条目)内。因此,创建需要三元树的三元决策,每个前缀层次有一个平面(例如,示例树结构600)。此外,前缀在前缀长度上的分布是不可预测的。因此,可以为每个前缀长度层次提供最大规模。例如,用于IPv6的多达128个嵌套层次需要128倍的存储器、每个节点处的更多处理以及复杂的树构建。
图9B描绘了从图7D中所描绘的示例间隔表730导出的示例间隔二叉搜索树910。在一些实施例中,从示例间隔表730导出间隔二叉搜索树910对应于图6中描述的步骤606。该间隔二叉搜索树表示910允许用(经修改的)二叉搜索算法替代顺序搜索,以在对数时间内搜遍图7A-图7C中所描绘的数字线712上的点。例如,利用对数搜索时间,并且每个级能够在4个间隔上进行比较和分支(即,搜遍二叉树的4个层次,这给出了在每个级处的16向指数爆炸),可以仅在3个级(16x16x16)中搜索4096个间隔(2K个前缀),并且可以仅在6个级(16x16x16x16x16x16)中搜索1600万个间隔(800万个前缀)。此外,由于存储在间隔二叉搜索树节点中的值是间隔值而不是前缀,因此该解决方案不必在每个节点处采用复杂的三元树或做出复杂的三元决策。
将数据推送到叶节点
图10A描绘了其中数据不存储在内部节点中的示例二叉搜索树1000。在一些实施例中,从示例间隔二叉搜索树910的内部节点传播(‘推送’)数据以生成示例二叉搜索树1000对应于图6中描述的步骤608。示例二叉搜索树1000通过保持原始树的数据完整性而等同于原始树910。在该树上针对任何键的‘经修改’的二叉搜索(见图11)将与原始树910针对该键产生相同的结果,然而只将结果数据存储在叶节点中,而不存储在内部节点中。这有助于在存储内部节点时节省大量存储器。
如在示例二叉搜索树1000中所描绘的,仅到达最左出口分支而从未在节点处采取右分叉。通过采取至少一个右分叉,并在每个右分叉处用来自节点的数据覆盖累积的数据,可以到达示例二叉搜索树1000的所有其他出口分支。这样的实现提供了:仅该最后的数据占优(即,最后的数据用于最终结果的正确推导),并且允许对每个可能的出口分支的该数据进行离线预计算(例如,由控制平面计算),并且允许该数据仅存储在叶(例如,最后级)节点中。这允许内部节点(例如,先前的级)只存储键而不存储数据,因为没有从这些节点累积任何内容,这节省了大量的存储器。在一些实施例中,每个子树从其父树仅继承一个默认数据:来自通向该子树的最近右分叉处的节点的数据,然后该数据将被向下“推送”并存储为该子树的最左出口分支的数据。
图10B-图10P描绘了步骤1002到1030,其示出了如何通过将下面的步骤应用于每个右子树来将来自内部节点的数据向下“推送”到正确的出口分支的示例,从默认数据开始,并将整个树作为其假想父节点的右子树。这些步骤提供了如何可以将数据推送到外部节点的示例实施例,可以采用其他算法来实现相同的结果。示例步骤包括:1)对于父节点,识别右子树。2)转到右子树的根节点,然后一直向左遍历树到最左叶节点。3)将来自父节点的数据存储为该节点的左出口分支的数据。4)利用树中的每个节点作为父节点,重复步骤1-3。
示例二叉搜索树1000可以由所描述的系统在由匹配处理单元(MPU)提供的数据平面中采用。例如,所采用的MPU可以从存储器中获取一个缓存行(64B)的数据,并以线速执行多达16条机器指令。所采用的在处理实体111中运行的控制平面在一个缓存行中压缩相应的二叉搜索树(例如二叉搜索树1000)的多个层次,并将其写到存储器,使得在正确级的MPU可以获取它并处理树的那些多个层次。在一些实施例中,数据不是存储在内部节点中,而是仅存储在最后级节点中。这样的实现节省了缓存行存储器,并允许将树的更多层次打包到一个缓存行中。在一些实施例中,指向后续缓存行的存储器指针不存储在缓存行中。在一些实施例中,在MPU内采用地址计算,以基于当前缓存行的地址和在该级获取的传出分支来找到下一个缓存行。采用地址计算节省了缓存行存储器,并允许将树的更多层次打包到一个缓存行中。在一些实施例中,15个IPv4地址间隔(60B)被存储在每个内部节点缓存行中,这形成二叉树的四个层次。在一些实施例中,可以使用16条或更少的指令在这四个层次上执行经修改的二叉搜索(包括分支惩罚和以线速的下一个缓存行地址计算)。在一些实施例中,处理二叉树的4个层次在每个级处提供树的16向扩展。这种分而治之的方法和指数扩展提供了一个显著的规模优势,因为更多的级被添加。例如,这样的架构仅用三个级就可以扩展到1000个IPv4前缀,在六个级中可以扩展到400万个,在八个级中可以扩展到庞大的10亿个(即使在应用了上面解释的缓存行约束并考虑了用于在最后级节点中存储结果数据的缓存行存储器之后)。在一些实施例中,通过将数据推送到外部节点,诸如在示例二叉搜索树1000中所描绘的,对于每个出口分支将占优的数据可以在控制平面处离线地预先计算,并且可以仅存储在最后级,留下内部节点来仅存储键。
经修改的二叉搜索
图11描绘了采用其中数据不存储在内部节点中的示例间隔二叉搜索树1000对地址的示例经修改的二叉搜索1100。与常规二叉搜索不同,该示例经修改的二叉搜索1000在节点处的值与正在被搜索的键相同时不会停止。相反,当键大于或等于节点中的值时,它会遍历到右孩子。否则(当键小于节点中的值时),搜索会遍历到左孩子。在一些实施例中,仅当搜索沿经配置的方向移动时,由所描述的系统采用的经修改的二叉搜索才从节点“拾取”数据(例如,当搜索向右时,用存储在该节点处的数据替代当前数据)。在一些实施例中,一旦搜索到达并处理叶节点,经修改的二叉搜索的结果就被确定。
所描述的系统采用的示例经修改的二叉搜索可以根据以下方式被执行,其中x是正在被搜索的键,并且value(节点)和nh(节点)是存储在该节点处的间隔值和对应的下一跳数据。NH是累积的下一跳,其被初始化为默认的下一跳,并将在搜索终止时为搜索键保持正确的下一跳结果:
在从根开始的每个节点处:
if(x<value(节点))then
向左走;
else
NH=nh(节点);
向右走;
endif
图12A-图12K分别描绘了用于对传入地址9.1.1.1的示例经修改的二叉搜索的一系列渐进步骤1200-1220,该示例经修改的二叉搜索可以在所描述系统内的示例间隔二叉搜索树1000上执行。该查找会导致查找未命中,并且默认的下一跳(-1)在搜索中被保留,并在结束时作为用于传入地址的所得到的下一跳被正确返回。
图13A-图13N分别描绘了用于对传入地址10.15.1.1的示例经修改的二叉搜索的一系列渐进步骤1300-1326,该示例经修改的二叉搜索可以在所描述系统内的示例间隔二叉搜索树1000上执行。该查找导致与前缀10.15.0.0/16的匹配,并且在结束时返回正确的下一跳C,作为用于传入地址的所得到的下一跳。
图14描绘了对包括在表1102中的各种传入地址(1-8)的示例经修改的二叉搜索1400,该示例经修改的二叉搜索1400可以在所描述系统内的示例间隔二叉搜索树1000上执行。示例经修改的二叉搜索中的每一个被描绘为遍历间隔二叉搜索树1000的箭头。所描绘的示例经修改的二叉搜索1100示出了遍历二叉搜索树1000所采取的路径。注意:表1402的元素1是传入地址9.1.1.1,其中遍历间隔二叉搜索树1000的经修改的二叉搜索步骤也被描绘在图12A-图12K中;并且表1402的元素4是传入地址10.15.0.0,其中遍历间隔二叉搜索树1000的经修改的二叉搜索步骤也被描绘在图13A-图13N中。
Pensando树
在数据平面硬件中采用间隔二叉搜索树引入了附加的约束。例如,在一些实施例中,在被预先分配用于最大规模的存储器中实现树,并且包括从其开始搜索的唯一且预定的根节点。当结果数据不存储在内部节点中时,这些约束为搜索部分填充的树提供了附加的复杂性。图15A-图15C分别描绘了一系列树1500-1520,这一系列树1500-1520突出显示了当数据不存储在内部节点中时与搜索部分填充的间隔二叉搜索树相关联的一些问题。在一些实施例中,所描述的系统采用Pensando树来克服这些问题。在一些实施例中,Pensando树是完全填充的二叉树,其节点被初始化有某个最大值,并且其有效(非最大值)节点按顺序(例如,从左到右)被填充并表现出BST属性。图15D描绘了示例Pensando树1530,在一些实施例中,所描述的系统采用该Pensando树1530来存储间隔二叉搜索树。在一些实施例中,基于间隔二叉搜索树(其中数据不存储在内部节点中)构建Pensando树(例如Pensando树1530)对应于图6中描述的步骤610。
图15A中描绘的示例树1500示出了:当树只有几个节点时,树的最后级中可能没有任何节点。在这样的示例中,没有存储结果数据的地方(例如,因为外部节点是存储数据的唯一地方并且是无效的)。因此,这样的示例将需要附加的处理来解决这个问题。
图15B中所描绘的示例树1510示出了在从下向上构建树的情况下的结果。在这样的示例中,当从下向上构建的树没有满时,则没有足够的节点来填充到根。在这样的示例中,将产生多个不相交的树(disjoint trees),并且在一些实施例中,所描述的系统需要从其开始搜索的唯一且预定的根。
图15C中所描绘的示例树1520示出了在按照从左到右的顺序构建树的情况下的结果。在这样的示例中,产生的树仍然可能与根断开连接。在这样的示例中,沿着搜索路径可能会产生无效(例如,空)节点,从而导致无效搜索。
图15D中所描绘的示例Pensando树1520包括15个节点,其中只有5个节点填充有有效值;然而,示例系统可以根据需要生成和采用具有任意数量节点的Pensando树。在一些实施例中,构建Pensando树包括将树节点初始化为MAX_VALUE。例如,用于32b键的0xFFFFFFFF。在一些实施例中,有效值从左到右(按顺序)被添加到树中,并且在它们之间表现出BST属性。该树可能潜在地使有效节点与根断开连接,并且可能潜在地沿着搜索路径具有一个或更多个MAX_VALUE节点。此外,该树作为一个整体可能违反二叉搜索树的属性,因为它可能在树中有多个具有MAX_VALUE的节点。然而,使用Pensando树,搜索始终可以从根节点开始,并且将被正确地引导到树中保存有效值的部分,同样地搜遍有效节点和MAX_VALUE节点,并且始终产生正确的结果。
通过采用Pensando树(例如示例Pensando树1520),存储器可以被预先分配,并且系统可以被编程为始终搜索,直到叶节点被处理,从而不提供搜索树的性能损失(例如,在硬件中)。然而,在一些实施例中,为了规模必须高效地构建树。例如,在线性时间O(n)而不是O(nlogn)内实现了按顺序的树构建。
存储器实现
所描述的系统在图6所描绘的示例过程的步骤612中完成高效的树构建,其中,基于将从中访问它的级,Pensando树的多个层次被压缩成缓存行。图16描绘了示例1600,其中示例Pensando树被分成子树,每个子树具有树的一些层次。在一些实施例中,每个子树被组装成512b缓存行,其中每个子树中的层次数由键宽度和是否是最后级决定。对于16b键,五个层次用于非最后级,而四个层次用于最后级。对于32b键,四个层次用于非最后级,而三个层次用于最后级(见图18B-图18E)。对于64b键,三个层次用于非最后级,而两个层次用于最后级(见图19B-19E)。对于128b键,两个层次用于非最后级,而一个层次用于最后级(见图20B-图20E)。
图17描绘了可以被所描述的系统采用的用于8K规模实现的端口范围(16b)LPM的示例存储器实现1700。所描绘的实现1700在三个级(1702、1704和1706)上展开,其中每个矩形表示一个64B(512b)缓存行,该缓存行保持相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1702和级2 1704使用五个层次的子树,每个子树有31个节点,这在这些级处提供了32向扩展。如图所示,级3 1706被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有先前的级的节点数的一半可以被打包。因此,级3 1706使用四个层次的子树,每个子树有15个节点,这在最后级处提供了16向扩展。实现1700提供了32x32x16=16K个间隔,其在最坏的情况下容纳8K端口范围。
图17中所描绘的8K规模的16b LPM的存储器计算可以被表示为:
对于8K规模的16b LPM的总存储器需求:
=64B+(32*64B)+(1K*64B)
=67,648B
图18A描绘了可以被所描述的系统采用的用于1K(1024)规模实现的IPv4路由LPM的示例存储器实现1800。所描绘的存储器实现1800在三个级(1802、1804和1806)上展开,其中每个矩形表示64B(512b)缓存行,该缓存行保持相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1802和级2 1804使用四个层次的子树,每个子树有15个节点,这在这些级处提供了16向扩展。如图所示,最后的级3 1806被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有先前的级的节点数的一半可以被打包。因此,级3 1806使用三个层次的子树,每个子树有七个节点,这在最后级处提供了八向扩展。存储器实现1800提供了16x16x8或2K个间隔,其在最坏的情况下容纳1K个前缀。
图18B描绘了可以被用于图18A中所描绘的级1 1802和级2 1804的32b LPM缓存行格式1810。如所描绘的,LPM缓存行格式1810存储15个键(间隔值),每个键有32b,并且LPM缓存行格式1810不存储数据,因为数据被推送到最后级(见图18D和图18E)。图18C描绘了对应于LPM缓存行格式1810的树表示1812。树表示1812在每个级处提供16向分支,其中级2共有256个分支。
图18D描绘了可以被用于图18A中所描绘的级3 1806的32b LPM缓存行格式1820。如图所示,LPM缓存行格式1820存储七个键及它们对应的16b数据。如图所示,附加16b字段1824存储从父子树推送的数据。图18E描绘了对应于LPM缓存行格式1820的树表示1822。树表示1822在级3 1806处提供8向分支。256x8为LPM总共给出了2K个决策,这支持1K个前缀的解析。
图18A-图18E中所描绘的1K规模的32b LPM的存储器计算可以被表示为:
对于1K IPv4规模的总存储器需求:
=mem_usage(级1)+mem_usage(级2)+mem_usage(级3)
=64B+(16*64B)+(256*64B)
=17,472B;
图19A描绘了可以被所描述的系统采用的用于1K规模实现的IPv6(64b)路由LPM的示例存储器实现1900。所描绘的实现1900在四个级(1902、1904、1906和1908)上展开,其中每个矩形表示64B(512b)缓存行,该缓存行保持该相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1902、级2 1904和级3 1906使用三个层次的子树,每个子树有七个节点,这在这些级处提供了八向扩展。如图所示,级4 1908被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有先前的级的节点数的一半可以被打包。因此,级4 1908使用两个层次的子树,每个子树有三个节点,这在最后级处提供了四向扩展。实现1900提供了8x8x8x4=2K个间隔,其在最坏的情况下容纳1K个前缀。
图19B描绘了可以被用于图19A中所描绘的级1 1902、级2 1904和级3 1906的64bLPM缓存行格式1910。如所描绘的,LPM缓存行格式1910存储七个键(间隔值),每个键有64b,并且LPM缓存行格式1910不存储数据,因为数据被推送到最后级(见图19D和图19E)。图19C描绘了对应于LPM缓存行格式1910的树表示1912。树表示1912在每个级处提供8向分支,其中级3共有512个分支。
图19D描绘了可以被用于图19A中所描绘的级4 1908的64b LPM缓存行格式1920。如图所示,LPM缓存行格式1920存储三个键及其对应的16b数据。如图所示,附加16b字段1924存储从父子树推送的数据。图19E描绘了对应于LPM缓存行格式1920的树表示1922。树表示1922在级4 1908处提供四向分支。512x4为LPM总共给出了2K个决策,这支持1K个前缀的解析。
图19A-图19E中所描绘的1K规模的64b LPM的存储器计算可以被表示为:
对于1K IPv6规模的总存储器需求:
=64B+(8*64B)+(64*64B)+(512*64B)
=37,440B;
图20A描绘了可以被所描述的系统采用的用于1K规模实现的IPv6(128b)策略LPM的示例存储器实现2000。所描绘的实现2000在六个级(2001、2002、2003、2004、2005和2006)上展开,其中每个矩形表示一个64B(512b)缓存行,该缓存行保持该相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 2001、级2 2002、级32003、级4 2004和级5 2005使用两个层次的子树,每个子树有三个节点,这在这些级处提供了四向扩展。如图所示,级6 2006被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有先前的级的节点数的一半可以被打包。因此,级6 2006使用一个层次的子树,每个子树有一个节点,这在最后级处提供双向扩展。实现2000提供了4x4x4x4x4x2=2K个间隔,其在最坏的情况下容纳1K个前缀。
图20B描绘了可以被用于图20A中所描绘的级1 2001、级2 2002、级3 2003、级42004和级5 2005的128b LPM缓存行格式2010。如所描绘的,LPM缓存行格式2010存储三个键(间隔值),每个键有128b,并且LPM缓存行格式2010不存储数据,因为数据被推送到最后级(见图20D和图20E)。图20C描绘了对应于LPM缓存行格式2010的树表示2012。树表示2012在每个级处提供四向分支,其中级5共有1K个分支。
图20D描绘了可以被用于图20A中所描绘的级6 2006的128b LPM缓存行格式2020。如图所示,LPM缓存行格式2020存储一个键及其对应的16b数据。如图所示,附加16b字段2024存储从父子树推送的数据。图20E描绘了对应于LPM缓存行格式2020的树表示2022。树表示2022在级6 2006处提供二向分支。1Kx2为LPM总共给出了2K个决策,这支持1K个前缀的解析。
图20A-图20E中所描绘的1K规模的128b LPM的存储器计算可以被表示为:
对于1K IPv6规模的总存储器需求:
=64B+(4*64B)+(16*64B)+(64*64B)+(256*64)+(1024*64)
=87,360B;
在存储器中组装缓存行
图21描绘了可以被所描述的系统采用的示例存储器实现2100。示例存储器2100被组织为缓存行阵列,使得每个级可以使用当前缓存行的地址和该级处的子树的传出分支编号来计算下一级要获取的下一个缓存行的地址,这对应于图6中描述的步骤614。如所描绘的,缓存行阵列以这样的方式进行组织,即每个级可以计算下一级要获取的下一个缓存行的地址。此外,在当前级中基于当前地址和在当前级采取的传出分支来计算要获取以供后续级处理的下一个缓存行的地址。示例存储器实现2100示出了如何在不必存储存储器地址的情况下完成这些特征的示例。
如图21中所描绘的,缓存行内的单独的树节点可以作为结构成员(例如,cache-line.node[0]至cache-line.node[n])被直接访问,这取决于在每个缓存行内打包了多少节点。箭头(例如,B00、B01等)表示可以通过处理缓存行的经修改的二叉搜索从该缓存行中取出的可能的分支,以及如果采取这些分支中的每一个,搜索将通向的对应的下一个缓存行。如所描绘的,示例存储器实现2100示出了每个缓存行存储间隔二叉搜索树的4个层次,并因此从每个缓存行中提供16个可能的分支。采用示例存储器2100允许以不需要将指针存储在缓存行中的方式在存储器中将缓存行组装为阵列。在一些实施例中,在当前级中,基于当前缓存行的地址和在当前级处采取的传出分支的索引来计算要获取以供后续级处理的下一个缓存行的地址。在一些实施例中,示例存储器2100被组织成使得可以在不必存储存储器地址的情况下执行上述地址获取。
在一些实施例中,下一个地址被计算为:
curr_idx=(curr_addr-base_addr)/sizeof(cache_line);
next_idx=(curr_idx*16)+传出分支编号;
next_addr=(next_idx*sizeof(cache_line))+base_addr;
图22描绘了示例过程2200的流程图,该示例过程2200合并了图6中所描绘的过程600的步骤604至614,以从间隔表生成最终存储器内容。示例过程2200可以由所描述的系统的各种元件(例如经由可编程IO设备)实现。如所描绘的,示例过程可以在控制平面中执行,以高效地构建可以在数据平面实现中采用的数据结构。示例过程2200将存储器组织成可以由每个级联级访问的缓存行。示例过程2200可以用于宽度和在每个级处的扩展不同的LPM,并且通过高效率(例如,线性执行)来避免控制平面瓶颈。
为了清楚地呈现,下面的描述通常在图1-图21和图23A-图27的上下文中描述示例过程2200。然而,将理解,过程600可以例如由任何其他合适的系统、环境、软件和硬件执行,或者由适当的系统、环境、软件和硬件的组合执行。在一些实施例中,过程2200的各种操作可以并行地、组合地、循环地或以任何顺序运行。在一些实施例中,过程2200由可编程IO设备执行。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,可编程IO设备包括具有存储在其上的指令的存储器单元,该指令当由可编程IO设备执行时,使可编程IO设备执行过程2200。在一些实施例中,可编程IO设备包括MPU,该MPU包括至少一个ALU。在一些实施例中,可编程IO设备包括ARM处理器。
在2202,使用最大值初始化所有级的当前缓存行,而使用默认结果数据初始化最后级的当前缓存行。在2204,对于按升序遍历的间隔表中的每个节点:当最后级的当前缓存行未满时,则将间隔连同其结果数据一起添加到最后级的当前缓存行,否则1)将间隔递归地提升到前一个级(多个级);以及2)将最后级的当前缓存行写到硬件,使用最大值将其重新初始化,并将其默认结果数据设置为刚刚提升的间隔的结果数据。在一些实施例中,将间隔递归地提升到前一个级包括当前一个级的当前缓存行已满时,则将间隔向后再提升一个级,将该级的满的当前缓存行写到硬件,并使用最大值将其重新初始化。在2206,所有级的缓存行被冲刷。
图23A描绘了对于其中每个级给出4向扩展情况根据图22中描绘的过程2200从间隔表生成存储器内容的示例表示2300,其中每个缓存行压缩并存储间隔二叉搜索树的两个层次或三个节点。图23B描绘了示例间隔表2310,并且图23C描绘了示例存储器布局2320,该示例存储器布局2320包括对于其中每个级给出三向扩展的情况在已经执行过程2200之后间隔表2310的内容。图23A-图23C中所描绘的示例示出了存储四个间隔表键值的缓存行,其中级3中的第一个(最底部)缓存行将系统默认下一跳作为默认下一跳,而级3的其他缓存行将最后被提升的间隔的下一跳作为默认下一跳。然而,可以设想,本公开的实施例可以利用存储间隔表键值(例如前面提到的那些间隔表键值)的适当数量的缓存行中的任何一种来实现。
图24描绘了采用LPM来替代递归流分类(RFC)算法的第一级的示例2400,该递归流分类(RFC)算法用于使用等价类进行策略评估。在一些实施例中,这样的RFC算法用于实现策略。如图所示,RFC算法中的第一级查找被替代。在一些实施例中,通过采用所描述的系统(参见例如图5B),这些第一级查找被用于将来自传入分组中的源IP、目的地IP、源端口、目的地端口和协议转换为“类id”。
示例过程
图25描绘了示例过程2500的流程图。示例过程2500可以由所描述系统的各种元素来实现。如所描绘的,示例过程更详细地示出了提供控制平面来对数据转发硬件进行编程。为了清楚地呈现,下面的描述通常在图1-图24、图26和图27的上下文中描述示例过程2500。然而,将理解,过程2500可以例如由任何其他合适的系统、环境、软件和硬件执行,或者由适当的系统、环境、软件和硬件的组合执行。在一些实施例中,过程2500的各种操作可以并行地、组合地、循环地或以任何顺序运行。在一些实施例中,过程2500由可编程IO设备执行。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,可编程IO设备包括具有存储在其上的指令的存储器单元,该指令当由可编程IO设备执行时,使可编程IO设备执行过程2500。在一些实施例中,可编程IO设备包括MPU,该MPU包括至少一个ALU。在一些实施例中,可编程IO设备包括ARM处理器。在一些实施例中,过程2500由至少一个ARM处理器执行。在一些实施例中,控制平面经由至少一个ARM处理器来执行。
在2502,确定用于网络的一组基于范围的元素。在一些实施例中,根据排序算法对该组基于范围的元素进行排序,该排序算法接收该组基于范围的元素并根据全局顺序确定该组基于范围的元素的有序版本。在一些实施例中,基于范围的元素包括一组可用前缀。在一些实施例中,根据可用前缀的长度来确定全局顺序。在一些实施例中,该组可用前缀包括重叠的前缀。在一些实施例中,每个基于范围的元素包括IP地址。在一些实施例中,相关联的数据元素包括下一跳。在一些实施例中,对分组进行分类包括将分组提供给出站接口。在一些实施例中,根据Pensando树的经修改的二叉搜索的查找结果确定出站接口。从2502,过程2500进行到2504。
在2504,根据基于范围的元素之间的全局顺序对该组基于范围的元素进行排序。从2504,过程2500进行到2506。
在2506,从排序后的基于范围的元素生成间隔表。在一些实施例中,经由栈从该组排序后的基于范围的元素生成间隔表。从2506,过程2500进行到2508。
在2508,从间隔表生成间隔二叉搜索树。在一些实施例中,通过以下方式将基于范围的元素和相关联的数据元素的配置值转换为间隔二叉搜索树:在作为键空间数字线的另一条数字线上方,生成用于基于范围的元素的基于范围的值和与每个基于范围的值相关联的相应数据元素值的数字线表示,作为基于范围的元素数字线,该键空间数字线表示搜索键的整个数字空间;将基于范围的元素数字线中的每一条投影到键空间数字线上,以标记基于范围的元素数字线中的每一条的起点和终点,使得键空间数字线被划分为不同的间隔;以及从键空间数字线上的不同间隔和与每个不同的间隔相关联的相应数据元素值导出Pensando树。在一些实施例中,每个不同的间隔包括唯一的数据元素值。在一些实施例中,每个唯一的数据元素值表示在相应间隔上的最深嵌套的基于范围的元素数字线的数据元素值。在一些实施例中,映射在Pensando树中的每个数据元素包括路由策略、计量标识符、策略器标识符或路由元素。从2508,过程2500进行到2510。
在2510,存储在间隔二叉搜索树的内部级的子树中的数据被传播到间隔二叉搜索树的最后级的子树,使得内部级不包括数据。从2510,过程2500进行到2512。
在2512,将间隔二叉搜索树转换为Pensando树。从2512,过程2500进行到2514。
在2514,Pensando树的多个层次基于从中访问每个层次的级被压缩成缓存行。在一些实施例中,对于从间隔二叉搜索树的根节点处开始的Pensando树的所有节点的右子树,来自节点的结果数据值被存储在该子树的最左叶节点中作为用于该子树的最左出口分支的结果数据值。在一些实施例中,Pensando树包括完全填充的二叉树,该二叉树包括使用最大值初始化的节点和按顺序填充并表现出BST属性的有效节点。在一些实施例中,顺序是从左到右。从2514,过程2500进行到2516。
在2516,在存储器单元中组装缓存行,使得每个级可以使用缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的缓存行中的下一个缓存行的地址。在一些实施例中,基于Pensando树对在数据平面中接收的分组进行分类,而不在缓存行中存储存储器地址。在一些实施例中,MPU基于Pensando树的经修改的二叉搜索对在数据平面中接收的分组进行分类,以确定LPM。在一些实施例中,MPU执行多个级联级以执行经修改的二叉搜索。在一些实施例中,多个级联级中的每一个通过ALU执行算术运算。在一些实施例中,直到完全遍历了Pensando树,才确定经修改的二叉搜索的查找结果。在一些实施例中,存储在缓存行中的一个中的Pensando树的单独的节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在该当前缓存行中的Pensando树的传出分支的索引来计算下一个缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,通过获取存储在缓存行中的选定一个中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,根据线性算法在存储器单元中组装缓存行。在一些实施例中,在存储器单元中组装缓存行不需要存储器指针。在一些实施例中,线性算法包括:对于Pensando树的每个级,选择缓存行中的第一缓存行作为该级的当前缓存行;将所有级的当前缓存行初始化为相应的最大值;使用默认结果数据初始化最后级的当前缓存行的默认结果数据;以及按升序遍历间隔表,对于每个被遍历的条目:当最后级的当前缓存行未满时,将间隔值和结果数据添加到最后级的当前缓存行;以及当最后级的当前缓存行已满时:将间隔值递归地提升到前一个级或多个级;更新当前缓存行,以表示用于该前一个级或多个级的将在其中存储下一个数值上更高的间隔值的缓存行;使用最大值重新初始化表示用于该级的下一个数值上更高的缓存行的更新的当前缓存行;以及将用于最后级的重新初始化后的当前缓存行的默认结果数据设置为刚刚提升的节点的结果数据。在一些实施例中,间隔表中的每个条目包括间隔值和结果数据。在一些实施例中,第一缓存行存储数值上最低的间隔值。从2516,过程2500结束。
计算机系统
本文提供了可以被用于实现本公开的方法或系统的计算机系统。图26描绘了示例计算机系统2600,该计算机系统2600可以被编程或以其他方式被配置成实现本公开的方法或系统。例如,计算设备2610可以被编程或以其他方式被配置成,通过采用离盒服务来在没有分组丢失的情况下升级IO子系统2670(例如,ISA)。如图所示,计算机系统2600包括计算设备2610和可选的电子显示器2680。在一些实施例中,计算设备2610基本上类似于图1中所描绘的计算系统120。
在所描绘的实施例中,计算设备2610包括CPU(本文中也是“处理器”和“计算机处理器”)2620,其可选地是单核、多核处理器或用于并行处理的多个处理器。计算设备2610还包括存储器或存储器位置2630(例如,随机存取存储器、只读存储器、闪速存储器);电子存储单元2640(例如,硬盘);用于与一个或更多个其他系统进行通信的通信接口2650(例如,网络适配器);外围设备2660(例如,缓存、其他存储器、数据存储装置和/或电子显示适配器)以及IO子系统2670(例如,IO设备,诸如智能NIC)。存储器2630、电子存储单元2640、通信接口2650、外围设备2660和IO子系统2670与CPU 2620通过诸如主板(motherboard)的通信总线(实线)通信。
在一些实施例中,CPU 2620可以执行一系列的机器可读指令,该机器可读指令可以以程序或软件来体现。指令可以被存储于存储器位置,诸如存储器2630中。指令可以被导向CPU 2620,其可以随后对CPU 2620进行编程或以其他方式配置CPU 2620,以实现本公开的方法。由CPU 2620执行的操作的示例可以包括获取、解码、执行和回写。在一些实施例中,CPU 2620是电路(诸如集成电路)的一部分。计算设备2610的一个或更多个其他部件可以可选地被包括在该电路中。在一些实施例中,该电路是ASIC或现场可编程门阵列(FPGA)。
在一些实施例中,IO子系统2670(例如,上述IO设备)包括经由PCIe与CPU 2620连接的扩展卡,诸如智能NIC。在一些实施例中,IO子系统2670是完全可编程的ASIC引擎。在一些实施例中,ASIC引擎被定制为特定的功能子集,诸如压缩和校验和,而另一个引擎专用于对称密码学。
在一些实施例中,电子存储单元2640包括用于存储数据的数据存储单元(或数据存储库)。在一些实施例中,电子存储单元2640存储文件,诸如驱动器、库、图像和保存的程序。在一些实施例中,电子存储单元2640存储用户数据,例如,用户偏好和用户程序。在一些实施例中,计算设备2610包括外部(诸如位于通过内联网或互联网进行通信的远程服务器上)的一个或更多个附加数据存储单元。
计算设备2610借助于通信接口2650可选地可操作地耦合到网络,诸如在图27中所描绘的和所描述的网络2710。在一些实施例中,计算设备2610通过网络与一个或更多个远程计算机系统通信。远程计算机系统的示例包括个人计算机(例如,便携式PC)、板型或平板PC(例如, iPad、 Galaxy Tab等)、智能手机(例如, iPhone、支持Android的设备、等)或个人数字助理。在一些实施例中,用户可以经由网络访问计算设备2610。
在一些实施例中,本文描述的方法通过机器(例如,计算机处理器)可执行代码的方式实现,该机器可执行代码被存储在计算设备2610的电子存储位置上,诸如,例如存储在存储器2630上或电子存储单元2640上。在一些实施例中,CPU 2620适于执行代码。在一些实施例中,以软件的形式提供机器可执行或机器可读代码。在一些实施例中,在使用期间,代码由CPU 2620执行。在一些实施例中,代码从电子存储单元2640检索并存储在存储器2630上,以用于由CPU 2620迅速访问。在一些情况下,排除电子存储单元2640,而将机器可执行指令存储在存储器2640上。在一些实施例中,代码是预编译的。在一些实施例中,在运行时(runtime)期间编译代码。代码可以以编程语言的形式提供,该编程语言可被选择以便使得代码能够以预编译的或按编译原样(as-compiled)的方式被执行。
在一些实施例中,计算设备2610可以包括电子显示器2680或与电子显示器2680通信。在一些实施例中,电子显示器2680提供用户界面(UI)2685。
示例环境
图27描绘了可以被用于执行本公开的实现的示例环境2700。示例系统2700包括计算设备2702、2704和2706;后端系统2730;和网络2710。
在一些实施例中,网络2710包括局域网(LAN)、广域网(WAN)、互联网、或其组合,并连接网站、设备(例如,计算设备2702、2704和2706)和后端系统(例如,后端系统2730)。在一些实施例中,网络2710包括互联网、内联网和/或外联网、或与互联网通信的内联网和/或外联网。在一些实施例中,网络2710包括电信和/或数据网络。在一些实施例中,可以通过有线和/或无线通信链路访问网络2710。例如,移动计算设备(例如,智能手机设备2702和平板设备2706)可以使用蜂窝网络来访问网络2710。
在所描绘的示例环境2700中,后端系统2730包括服务器设备2732和2734,其可以被用于提供所描述的系统。在一些实施例中,后端系统2730可以被部署在提供服务(诸如web服务)的数据中心、计算设备2702、2704和2706内。所描述的系统可以在示例环境2700内被采用,以通过分布式算法为可编程数据平面提供LPM实现。
在一些实施例中,后端系统2730包括在通过网络2710访问时使用集群的计算机和部件充当无缝资源的单个池的计算机系统。例如,这样的实现可以被用于数据中心、云计算、存储区域网络(SAN)和网络附加存储(NAS)应用。在一些实施例中,服务器2732和2734托管一个或更多个计算机实现的服务,其中用户2722、2724和2726可以使用相应的计算设备2702、2704和2706与该服务交互。
在一些实施例中,服务器设备2732和2734各自可持续地类似于图26中所描绘的计算设备2610,这取决于在所描述的系统(例如,采用IO子系统来执行诸如上文所述的LPM查找的服务器)内如何使用服务器设备2732和2734。在一些实施例中,服务器设备2732和2734是服务器类硬件类型设备。
在一些示例中,用户2722、2724和2726通过在其各自的计算设备2702、2704和2706上安装和执行的图形用户界面(GUI)或应用与由后端系统2730提供的服务交互。在一些示例中,计算设备2702、2704和2706向用户2722、2724和2726可以与其交互的屏幕提供观看数据。在一些实施例中,计算设备2702、2704、2706和2732可持续地类似于图26中所描绘的计算设备2610。计算设备2702、2704、2706可以各自包括任何适当类型的计算设备,诸如台式计算机、膝上型计算机、手持式计算机、平板计算机、个人数字助理(PDA)、蜂窝电话、网络器件、相机、智能手机、增强型通用分组无线电服务(EGPRS)移动电话、媒体播放器、导航设备、电子邮件设备、游戏控制台、或这些设备中的任何两个或更多个的适当组合或其他数据处理设备。在所描绘的示例中,计算设备2702是智能手机,计算设备2704是平板计算设备,并且计算设备2706是桌面计算设备。为了简单起见,在图27中描绘了三个用户计算设备2702、2704和2706。然而,可以设想,本公开的实现可以使用任何适当的计算设备来实现,诸如前面提到的那些设备。此外,本公开的实现可根据需要采用任意数量的设备。
处理设备和处理器
在一些实施例中,本文所描述的平台、系统、介质和方法包括计算机或其使用。在进一步的实施例中,计算机包括一个或更多个硬件CPU或通用图形处理单元(GPGPU),该硬件CPU或GPGPU通过向IO子系统提供操作链来执行设备的功能,该IO子系统通过经由PCIe连接到CPU或GPGPU的智能NIC提供。在又一些另外的实施例中,计算机包括被配置为执行可执行指令的操作系统。在一些实施例中,计算机可选地连接到计算机网络。在另外的实施例中,计算机可选地连接到互联网,使得它访问万维网。在又一些另外的实施例中,计算机可选地连接到云计算基础设施。在其他实施例中,计算机可选地连接到内联网。在其他实施例中,计算机可选地连接到数据存储设备。
根据本文的描述,作为非限制性示例,合适的计算机包括服务器计算机、台式计算机、膝上型计算机、笔记本计算机、子笔记本计算机、上网本计算机、netpad计算机、手持式计算机、互联网器件、移动智能手机、平板计算机和交通工具。本领域中的技术人员将认识到,许多智能手机适合于在本文描述的系统中使用。本领域中的技术人员还将认识到,具有可选计算机网络连接的选定电视机、视频播放器以及数字音乐播放器适合于在本文描述的系统中使用。合适的平板计算机包括具有本领域中的技术人员已知的小册子、写字板和可转换的配置的平板计算机。
在一些实施例中,该设备包括存储和/或存储器设备。存储和/或存储器设备是用于在临时或永久基础上存储数据或程序的一个或更多个物理装置。在一些实施例中,该设备是易失性存储器并且需要电力来维持所存储的信息。在一些实施例中,该设备是非易失性存储器并且当计算机未被供电时保留所存储的信息。在另外的实施例中,非易失性存储器包括闪速存储器。在一些实施例中,非易失性存储器包括动态随机存取存储器(DRAM)。在一些实施例中,非易失性存储器包括铁电随机存取存储器(FRAM)。在一些实施例中,非易失性存储器包括相变随机存取存储器(PRAM)。在其他实施例中,该设备是存储设备,作为非限制性示例包括致密光盘(CD)-只读存储器(ROM)、数字多功能盘(DVD)、闪速存储器设备,磁盘驱动器、磁带驱动器、光盘驱动器以及基于云计算的存储装置。在另外的实施例中,存储和/或存储器设备是设备(例如在本文公开的那些设备)的组合。
非暂时性计算机可读存储介质
在一些实施例中,本文公开的平台、系统、介质和方法包括用程序编码的一个或更多个非临时计算机可读存储介质,程序包括由可选地联网的计算机的操作系统可执行的指令。在另外的实施例中,计算机可读存储介质是计算机的有形部件。在又一些另外的实施例中,计算机可读存储介质可选地从计算机可移除。在一些实施例中,作为非限制性示例,计算机可读存储介质包括CD-ROM、DVD、闪速存储器设备、固态存储器、磁盘驱动器、磁带驱动器、光盘驱动器、云计算系统和服务等。在一些情况下,程序和指令在介质上永久地、实质上永久地、半永久地或非临时地被编码。
计算机程序
在一些实施例中,本文公开的平台、系统、介质和方法包括至少一个计算机程序或其使用。在一些实施例中,计算机程序包括可在计算机的CPU中或者在IO子系统的处理器中执行、被写入以执行指定任务的指令序列。计算机可读指令可以被实现为执行特定任务或实现特定抽象数据类型的程序模块,例如功能、对象、API、数据结构等。根据在本文提供的公开内容,本领域中的技术人员将认识到,可以用各种语言的各种版本来编写计算机程序。
计算机可读指令的功能可以根据需要在各种环境中被组合或分配。在一些实施例中,计算机程序包括一个指令序列。在一些实施例中,计算机程序包括多个指令序列。在一些实施例中,从一个位置提供计算机程序。在其他实施例中,从多个位置提供计算机程序。在各种实施例中,计算机程序包括一个或更多个软件模块。在各种实施例中,计算机程序部分地或全部包括一个或更多个web应用、一个或更多个移动应用、一个或更多个独立应用、一个或更多个web浏览器插件、扩展、加载项或附件或其组合。
虽然本文已经示出和描述了本主题的优选实施例,但对于本领域技术人员将明显的是,此类实施例仅通过示例的方式被提供。本领域技术人员现在将想到许多变化、改变和替换,而不偏离所描述的系统。应当理解,在实践所描述的系统时可以采用本文描述的本主题的实施例的各种替代方案。
Claims (30)
1.一种可编程输入输出(IO)设备,包括:
存储器单元,所述存储器单元具有存储在其上的指令,所述指令当由所述可编程IO设备执行时,使所述可编程IO设备执行操作,以提供控制平面来对数据转发硬件编程,所述操作包括:
确定用于网络的一组基于范围的元素;
根据所述基于范围的元素之间的全局顺序,对所述一组基于范围的元素进行排序;
从排序后的所述基于范围的元素生成间隔表;
从所述间隔表生成间隔二叉搜索树;
将存储在所述间隔二叉搜索树的内部级的子树中的数据传播到所述间隔二叉搜索树的最后级的子树,使得所述内部级不包括数据;
将所述间隔二叉搜索树转换为Pensando树;
基于从中访问每个层次的级,将所述Pensando树的多个层次压缩成缓存行;以及
在所述存储器单元中组装所述缓存行,使得每个级能够使用所述缓存行中的当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的所述缓存行中的下一个缓存行的地址,其中,基于所述Pensando树对在数据平面中接收的分组进行分类,而不在所述缓存行中存储存储器地址。
2.根据权利要求1所述的可编程IO设备,包括至少一个高级精简指令集计算机(RISC)机器(ARM)处理器,其中存储在所述存储器单元上的所述指令由所述至少一个ARM处理器执行。
3.根据权利要求2所述的可编程IO设备,其中,所述控制平面经由所述至少一个ARM处理器来执行。
4.根据权利要求1所述的可编程IO设备,包括匹配处理单元(MPU),其中所述MPU基于所述Pensando树的经修改的二叉搜索对在所述数据平面中接收的所述分组进行分类,以确定最长前缀匹配(LPM)。
5.根据权利要求4所述的可编程IO设备,其中,所述MPU执行多个级联级以执行所述经修改的二叉搜索。
6.根据权利要求5所述的可编程IO设备,其中,所述MPU包括至少一个算术逻辑单元(ALU),并且其中所述多个级联级中的每一个通过所述ALU执行算术运算。
7.根据权利要求4所述的可编程IO设备,其中,直到所述Pensando树被完全遍历,才确定所述经修改的二叉搜索的查找结果。
8.根据权利要求4所述的可编程IO设备,其中,存储在所述缓存行中的一个缓存行中的所述Pensando树的单独的节点作为结构成员被直接访问。
9.根据权利要求4所述的可编程IO设备,其中,基于当前缓存行的地址和存储在所述当前缓存行中的所述Pensando树的传出分支的索引来计算下一个缓存行的所述地址,其中,所述传出分支的所述索引根据所述经修改的二叉搜索来确定。
10.根据权利要求4所述的可编程IO设备,其中,所述经修改的二叉搜索是通过获取存储在所述缓存行中的选定的缓存行中的数据来执行的。
11.根据权利要求10所述的可编程IO设备,其中,所述选定的缓存行是基于地址计算来确定的。
12.根据权利要求1所述的可编程IO设备,其中,经由栈从排序后的所述一组基于范围的元素生成所述间隔表。
13.根据权利要求1所述的可编程IO设备,其中,根据排序算法对所述一组基于范围的元素进行排序,所述排序算法接收所述一组基于范围的元素并根据所述全局顺序确定所述一组基于范围的元素的有序版本。
14.根据权利要求1所述的可编程IO设备,其中,根据线性算法在所述存储器单元中组装所述缓存行。
15.根据权利要求14所述的可编程IO设备,其中,在所述存储器单元中组装所述缓存行不需要存储器指针。
16.根据权利要求14所述的可编程IO设备,其中,所述线性算法包括:
对于所述Pensando树的所述级中的每一个级,选择所述缓存行中的第一缓存行作为该级的当前缓存行;
将所有所述级的当前缓存行初始化为相应的最大值;
使用默认结果数据初始化所述最后级的当前缓存行的默认结果数据;以及
按升序遍历所述间隔表,其中所述间隔表中的每个条目包括间隔值和结果数据,对于每个被遍历的条目:
当所述最后级的当前缓存行未满时,将所述间隔值和所述结果数据添加到所述最后级的所述当前缓存行;以及
当所述最后级的所述当前缓存行已满时:
将所述间隔值递归地提升到前一个级或多个级;
更新所述当前缓存行,以表示用于所述前一个级或多个级的将在其中存储下一个数值上更高的间隔值的缓存行;
使用最大值重新初始化表示用于该级的下一个数值上更高的缓存行的更新的当前缓存行;以及
将用于所述最后级的重新初始化的当前缓存行的所述默认结果数据设置为刚刚提升的节点的所述结果数据。
17.根据权利要求16所述的可编程IO设备,其中,所述第一缓存行存储数值上最低的间隔值。
18.根据权利要求1所述的可编程IO设备,其中,所述基于范围的元素包括一组可用前缀。
19.根据权利要求18所述的可编程IO设备,其中,根据所述可用前缀的长度来确定所述全局顺序。
20.根据权利要求18所述的可编程IO设备,其中,所述一组可用前缀包括重叠的前缀。
21.根据权利要求1所述的可编程IO设备,其中,通过以下步骤将用于所述基于范围的元素和相关联的数据元素的配置值转换成所述间隔二叉搜索树:
在作为键空间数字线的另一条数字线上方,生成用于所述基于范围的元素的基于范围的值和与所述基于范围的值中的每一个相关联的相应数据元素值的数字线表示,作为基于范围的元素数字线,所述键空间数字线表示搜索键的整个数字空间;
将所述基于范围的元素数字线中的每一条投影到所述键空间数字线上,以标记所述基于范围的元素数字线中的每一条的起点和终点,使得所述键空间数字线被划分为不同的间隔,其中,每个所述不同的间隔包括唯一的数据元素值,并且其中,每个所述唯一的数据元素值表示在相应间隔之上最深嵌套的基于范围的元素数字线的数据元素值;以及
从所述键空间数字线上的所述不同的间隔和与所述不同的间隔中的每一个相关联的相应数据元素值导出所述Pensando树。
22.根据权利要求21所述的可编程IO设备,其中,映射在所述Pensando树中的数据元素中的每一个包括路由策略、计量标识符、策略器标识符或路由元素。
23.根据权利要求1所述的可编程IO设备,其中,所述基于范围的元素中的每一个包括互联网协议(IP)地址,其中,所述相关联的数据元素包括下一跳,并且其中对所述分组进行分类包括将所述分组提供给出站接口,所述出站接口根据所述Pensando树的经修改的二叉搜索的查找结果来确定。
24.根据权利要求1所述的可编程IO设备,其中,对于从所述间隔二叉搜索树的根节点处开始的所述Pensando树的所有节点的右子树,来自所述节点的结果数据值被存储在所述子树的最左叶节点中作为用于所述子树的最左出口分支的结果数据值。
25.根据权利要求1所述的可编程IO设备,其中,所述可编程IO设备是智能服务器适配器(ISA)。
26.根据权利要求1所述的可编程IO设备,其中,所述可编程IO设备是路由器或交换机。
27.根据权利要求1所述的可编程IO设备,其中,所述Pensando树包括完全填充的二叉树,所述二叉树包括使用最大值初始化的节点和按顺序填充并表现出二叉搜索树(BST)属性的有效节点。
28.根据权利要求27所述的可编程IO设备,其中,所述顺序是从左到右。
29.一种用于提供控制平面来对数据转发硬件编程的方法,所述方法由可编程IO设备执行并且包括:
确定用于网络的一组基于范围的元素;
根据所述基于范围的元素之间的全局顺序,对所述一组基于范围的元素进行排序;
从排序后的所述基于范围的元素生成间隔表;
从所述间隔表生成间隔二叉搜索树;
将存储在所述间隔二叉搜索树的内部级的子树中的数据传播到所述间隔二叉搜索树的最后级的子树,使得所述内部级不包括数据;
将所述间隔二叉搜索树转换为Pensando树;
基于从中访问每个层次的级,将所述Pensando树的多个层次压缩成缓存行;以及
在存储器单元中组装所述缓存行,使得每个级能够使用当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的下一个缓存行的地址,其中基于所述Pensando树对在数据平面中接收的分组进行分类,而不在所述缓存行中存储存储器地址。
30.一种可编程输入输出(IO)设备,其被配置为执行指令,所述指令使所述可编程IO设备执行操作,以提供控制平面来对数据转发硬件编程,所述操作包括:
确定用于网络的一组基于范围的元素;
根据所述基于范围的元素之间的全局顺序,对所述一组基于范围的元素进行排序;
从排序后的所述基于范围的元素生成间隔表;
从所述间隔表生成间隔二叉搜索树;
将存储在所述间隔二叉搜索树的内部级的子树中的数据传播到所述间隔二叉搜索树的最后级的子树,使得所述内部级不包括数据;
将所述间隔二叉搜索树转换为Pensando树;
基于从中访问每个层次的级,将所述Pensando树的多个层次压缩成缓存行;以及
在存储器单元中组装所述缓存行,使得每个级能够使用当前缓存行的地址和在当前级的子树的传出分支编号来计算下一级要获取的下一个缓存行的地址,其中基于所述Pensando树对在数据平面中接收的分组进行分类,而不在所述缓存行中存储存储器地址。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/000,172 US11258707B1 (en) | 2020-08-21 | 2020-08-21 | Systems for building data structures with highly scalable algorithms for a distributed LPM implementation |
US17/000,172 | 2020-08-21 | ||
PCT/US2021/046970 WO2022040570A1 (en) | 2020-08-21 | 2021-08-20 | Systems for building data structures with highly scalable algorithms for a distributed lpm implementation |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115917473A true CN115917473A (zh) | 2023-04-04 |
Family
ID=80270165
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180051667.2A Pending CN115917473A (zh) | 2020-08-21 | 2021-08-20 | 用分布式lpm实现的高度可扩展算法构建数据结构的系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11258707B1 (zh) |
CN (1) | CN115917473A (zh) |
DE (1) | DE112021004377T5 (zh) |
WO (1) | WO2022040570A1 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11444790B1 (en) * | 2021-07-09 | 2022-09-13 | International Business Machines Corporation | Dynamic exclusion of RDMA-based shared memory communication based on performance-related data |
CN115033750A (zh) * | 2022-03-23 | 2022-09-09 | 成都卓源网络科技有限公司 | 一种基于tcam的分类结构及方法 |
US11909656B1 (en) * | 2023-01-17 | 2024-02-20 | Nokia Solutions And Networks Oy | In-network decision for end-server-based network function acceleration |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IT1305103B1 (it) * | 1998-12-30 | 2001-04-10 | Cit Alcatel | Metodo di smistamento di pacchetti di informazione associati aindirizzi rappresentati tramite stringhe numeriche e relativo apparato |
GB2377286B (en) | 2001-07-05 | 2003-09-24 | 3Com Corp | Binary search trees and methods for establishing and operating them |
US7043494B1 (en) | 2003-01-28 | 2006-05-09 | Pmc-Sierra, Inc. | Fast, deterministic exact match look-ups in large tables |
US7797348B2 (en) * | 2003-05-01 | 2010-09-14 | The Hong Kong Polytechnic University | Data structure and system for IP address lookup and IP address lookup system |
US20080037420A1 (en) | 2003-10-08 | 2008-02-14 | Bob Tang | Immediate ready implementation of virtually congestion free guaranteed service capable network: external internet nextgentcp (square waveform) TCP friendly san |
KR100586461B1 (ko) * | 2003-10-15 | 2006-06-08 | 임혜숙 | 파이프라인 이진 트리를 이용한 ip 어드레스 검색 방법,하드웨어 구조 및 기록매체 |
US7019674B2 (en) * | 2004-02-05 | 2006-03-28 | Nec Laboratories America, Inc. | Content-based information retrieval architecture |
JP2008511205A (ja) | 2004-08-17 | 2008-04-10 | カリフォルニア・インスティチュート・オブ・テクノロジー | キュー制御と1方向遅延測定を用いた、ネットワークの輻輳を制御する方法および装置 |
US7583664B2 (en) | 2004-12-28 | 2009-09-01 | Michael Ho | Techniques for transmitting and receiving traffic over advanced switching compatible switch fabrics |
US8010990B2 (en) * | 2006-10-26 | 2011-08-30 | Intel Corporation | Acceleration of packet flow classification in a virtualized system |
US7729387B2 (en) | 2007-01-31 | 2010-06-01 | Agere Systems Inc. | Methods and apparatus for controlling latency variation in a packet transfer network |
JP5472108B2 (ja) * | 2008-08-22 | 2014-04-16 | 日本電気株式会社 | 検索装置、検索方法およびプログラム |
US8719913B2 (en) | 2009-02-02 | 2014-05-06 | Tt Government Solutions, Inc. | Redundancy detection and resolution and partial order dependency quantification in access control lists |
US8873813B2 (en) | 2012-09-17 | 2014-10-28 | Z Advanced Computing, Inc. | Application of Z-webs and Z-factors to analytics, search engine, learning, recognition, natural language, and other utilities |
US9473974B2 (en) | 2012-05-30 | 2016-10-18 | The University Of Hong Kong | Enhancing AQM to combat wireless losses |
US20140164641A1 (en) | 2012-12-11 | 2014-06-12 | The Hong Kong University Of Science And Technology | Congestion control for data center traffic |
US20140337472A1 (en) | 2012-12-13 | 2014-11-13 | Level 3 Communications, Llc | Beacon Services in a Content Delivery Framework |
JP6045417B2 (ja) | 2012-12-20 | 2016-12-14 | オリンパス株式会社 | 画像処理装置、電子機器、内視鏡装置、プログラム及び画像処理装置の作動方法 |
US9294944B2 (en) | 2012-12-21 | 2016-03-22 | International Business Machines Corporation | Method and apparatus to monitor and analyze end to end flow control in an Ethernet/enhanced Ethernet environment |
GB2509773A (en) * | 2013-01-15 | 2014-07-16 | Ibm | Automatic genre determination of web content |
US9509802B1 (en) | 2013-03-15 | 2016-11-29 | PME IP Pty Ltd | Method and system FPOR transferring data to improve responsiveness when sending large data sets |
US9384145B2 (en) | 2013-08-26 | 2016-07-05 | Oracle International Corporation | Systems and methods for implementing dynamically configurable perfect hash tables |
US9405783B2 (en) | 2013-10-02 | 2016-08-02 | Netapp, Inc. | Extent hashing technique for distributed storage architecture |
US10708187B2 (en) | 2014-05-22 | 2020-07-07 | Intel Corporation | Data center congestion management for non-TCP traffic |
US9980156B2 (en) | 2015-07-17 | 2018-05-22 | Altiostar Networks, Inc. | Optimization of downlink throughput |
WO2018138062A1 (en) | 2017-01-24 | 2018-08-02 | Rockley Photonics Limited | Multi-field classifier |
EP3677003A4 (en) | 2017-08-31 | 2021-05-26 | Pensando Systems Inc. | METHODS AND SYSTEMS FOR OVERLOAD MANAGEMENT IN A NETWORK |
US11030714B2 (en) | 2018-01-27 | 2021-06-08 | Microsoft Technology Licensing, Llc. | Wide key hash table for a graphics processing unit |
US11263158B2 (en) | 2018-02-22 | 2022-03-01 | Pensando Systems Inc. | Programmable computer IO device interface |
US11588734B2 (en) | 2020-04-28 | 2023-02-21 | Pensando Systems Inc. | Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm |
-
2020
- 2020-08-21 US US17/000,172 patent/US11258707B1/en active Active
-
2021
- 2021-08-20 WO PCT/US2021/046970 patent/WO2022040570A1/en active Application Filing
- 2021-08-20 DE DE112021004377.3T patent/DE112021004377T5/de active Pending
- 2021-08-20 CN CN202180051667.2A patent/CN115917473A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022040570A1 (en) | 2022-02-24 |
US11258707B1 (en) | 2022-02-22 |
DE112021004377T5 (de) | 2023-06-01 |
US20220060419A1 (en) | 2022-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10997106B1 (en) | Inter-smartNIC virtual-link for control and datapath connectivity | |
US11263158B2 (en) | Programmable computer IO device interface | |
US11588734B2 (en) | Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm | |
US11489773B2 (en) | Network system including match processing unit for table-based actions | |
CA3167334C (en) | Zero packet loss upgrade of an io device | |
US11431681B2 (en) | Application aware TCP performance tuning on hardware accelerated TCP proxy services | |
US11907751B2 (en) | Resource fairness enforcement in shared IO interfaces | |
US11258707B1 (en) | Systems for building data structures with highly scalable algorithms for a distributed LPM implementation | |
US10944696B2 (en) | Variable-length packet header vectors | |
US11394700B2 (en) | Proxy service through hardware acceleration using an IO device | |
US11294841B1 (en) | Dynamically configurable pipeline | |
US20220166718A1 (en) | Systems and methods to prevent packet reordering when establishing a flow entry | |
Atre et al. | {BBQ}: A Fast and Scalable Integer Priority Queue for Hardware Packet Scheduling | |
US11552907B2 (en) | Efficient packet queueing for computer networks | |
US20220278946A1 (en) | Programmable packet processing pipeline with offload circuitry | |
US10680977B1 (en) | Splitting data into an information vector and a control vector and processing, at a stage of a control pipeline, the control vector and a data block of the information vector extracted from a corresponding stage of a data pipeline |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |