CN115917520A - 用于通过分布式算法为可编程数据平面提供lpm实现的系统 - Google Patents
用于通过分布式算法为可编程数据平面提供lpm实现的系统 Download PDFInfo
- Publication number
- CN115917520A CN115917520A CN202180031979.7A CN202180031979A CN115917520A CN 115917520 A CN115917520 A CN 115917520A CN 202180031979 A CN202180031979 A CN 202180031979A CN 115917520 A CN115917520 A CN 115917520A
- Authority
- CN
- China
- Prior art keywords
- binary search
- programmable
- data
- packet
- range
- 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
- 238000004422 calculation algorithm Methods 0.000 title claims description 20
- 238000012545 processing Methods 0.000 claims description 63
- 238000000034 method Methods 0.000 claims description 58
- 238000004364 calculation method Methods 0.000 claims description 14
- 238000013507 mapping Methods 0.000 claims description 14
- 238000003780 insertion Methods 0.000 claims description 12
- 230000037431 insertion Effects 0.000 claims description 12
- 238000013459 approach Methods 0.000 claims description 8
- 230000006870 function Effects 0.000 description 35
- 230000008569 process Effects 0.000 description 33
- 230000000670 limiting effect Effects 0.000 description 32
- 230000009471 action Effects 0.000 description 29
- 238000007726 management method Methods 0.000 description 27
- 238000004891 communication Methods 0.000 description 23
- 230000003863 physical function Effects 0.000 description 18
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 11
- 238000004590 computer program Methods 0.000 description 10
- 238000001152 differential interference contrast microscopy Methods 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 239000000872 buffer Substances 0.000 description 6
- 239000004744 fabric Substances 0.000 description 6
- 238000013500 data storage Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000006855 networking Effects 0.000 description 5
- 230000001427 coherent effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000004880 explosion Methods 0.000 description 4
- 230000000750 progressive effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 235000008694 Humulus lupulus Nutrition 0.000 description 3
- 241000150258 Prospect Hill orthohantavirus Species 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 3
- 238000001499 laser induced fluorescence spectroscopy Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 229920000218 poly(hydroxyvalerate) Polymers 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 239000002699 waste material Substances 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 238000010845 search algorithm Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000005641 tunneling Effects 0.000 description 2
- 235000015429 Mirabilis expansa Nutrition 0.000 description 1
- 244000294411 Mirabilis expansa Species 0.000 description 1
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 1
- 241001168730 Simo Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000032683 aging Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 235000013536 miso Nutrition 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000000135 prohibitive effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 229910052710 silicon Inorganic materials 0.000 description 1
- 239000010703 silicon Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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/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
- 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
-
- 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
- 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/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/101—Access control lists [ACL]
Abstract
描述了可编程IO设备,包括:MPU和存储器单元。该MPU包括至少一个ALU。该存储器单元具有存储在其上的指令,当该指令由相应的可编程IO设备执行时,使该可编程IO设备执行操作。这些操作包括:从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;经由MPU,通过使用分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果,其中该间隔二叉搜索树将至少一个基于范围的元素映射到相关联的数据元素;以及基于查找结果对分组进行分类。
Description
相关申请的交叉引用
本申请要求于2020年4月28日提交的第16/860,650号美国申请的权益,并且是该第16/860,650号美国申请的延续,该美国申请通过引用以其整体并入本文以用于全部目的。
背景
网络流量是指在给定时间点移动通过网络的数据量。网络数据大多封装在网络分组(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)的嵌套;过多的决策级;基于步幅的算法浪费大量存储器;前缀是具有较低值(地板)和较高值(天花板)的范围,而查找应该找到查找键所属的范围;各种前缀可以具有不同的前缀长度(或范围大小);无法采用哈希查找,因为使用哪个前缀长度未知;对每个可能的前缀长度进行单独的哈希查找(总共128个)是太多的查找;表中可以存在多个重叠的前缀;查找键可以匹配多个重叠的前缀;查找需要找到查找键适合的最窄范围(最长前缀);在查找正确匹配时检查表中的所有条目;不能使用前缀的二叉搜索,因为当键匹配范围时,搜索不能停止,因为可能有更具体(更长)的匹配;三叉树和三叉搜索浪费存储器。
在某些实施例中,本文所描述的是采用IO设备以在不使用TCAM的情况下在可编程数据平面中执行用于LPM查找的分布式算法的系统。在一些实施例中,所描述的系统采用多个级联级,其中每个级可通过算术逻辑单元(ALU)和匹配处理单元(MPU)执行算术运算。在一些实施例中,所描述的系统采用间隔二叉搜索树(interval binary search tree)来在前缀之间有效地进行搜索以找到最长的匹配。在一些实施例中,所描述的系统将前缀表转换成相应的间隔表。在一些实施例中,所描述的系统将前缀匹配算法变换成间隔表的顺序搜索和累积数据。
在一些实施例中,所描述的系统使用经修改的二叉搜索算法来搜索间隔二叉搜索树以找到最长的前缀匹配。在一些实施例中,所描述的系统通过将数据从间隔二叉搜索树的内部节点推送到叶节点,作为由控制平面进行的离线预计算的一部分,为数据平面中的有效处理准备数据。在一些实施例中,所描述的系统采用分而治之的方法(divide andconquer approach)以及跨级分布计算,以通过在每个级使用高指数扩展和最小处理来处理大规模数据。
在一些实施例中,所描述的系统采用间隔二叉搜索树而不在节点中存储指针,以优化缓存和存储器访问性能,并显著减少总存储器需求。在一些实施例中,所描述的系统采用间隔二叉搜索树而不在内部节点中存储数据,以实现更高的指数爆炸。在一些实施例中,所描述的系统有效地压缩间隔二叉搜索树的多个层次,以优化管线化处理中的性能,并实现每级更高的指数爆炸。
在一些实施例中,所述系统将所描述的LPM实现用于路由查找以及访问控制列表(ACL)(策略匹配)查找,其中可以在单个ACL实例中使用这些LPM的多个实例。在一些实施例中,所描述的系统采用LPM来替换递归流分类(RFC)算法中的第一级查找。在一些实施例中,所描述的系统采用LPM,用于从传入分组中的IP地址、L4端口或其他基于范围的信息导出标签。例如,可以使用标签对某些值进行分组,然后这些值可以作为单个值进行集体处理。例如,可以将多个IP地址范围集体指定(或标记)为管理、私有、保留等。这些IP地址范围可以作为单元来处理(例如,应用策略使得该策略被应用于各个成员)。在一些实施例中,所描述的系统采用LPM,用于从传入分组中的IP地址、L4端口或其他基于范围的信息导出计量标识符(ID)。计量ID可用于记账目的,诸如基于与传入分组的源或目的地IP地址匹配的IP地址的范围,将传入分组映射到计费账户。在一些实施例中,所描述的系统采用LPM,用于从传入分组中的IP地址、L4端口或其他基于范围的信息导出监管器ID。监管器ID可以被用于实施流量契约(contract)。例如,可以采用LPM,通过将传入分组中的IP地址映射到执行各种数据流量阈值的监管器,来确保不允许10兆位每秒(Mbps)计划中的用户以更高的速率发送数据。
因此,在一个方面,本文公开了一种可编程IO设备。该可编程IO设备包括:MPU和存储器单元,该MPU包括至少一个ALU。该存储器单元具有存储在其上的指令,当该指令由可编程IO设备执行时,使可编程IO设备执行包括以下的操作:从入站接口(inbound interface)接收包括用于至少一个基于范围的元素的分组数据的分组;经由MPU,通过使用分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果,其中该间隔二叉搜索树将至少一个基于范围的元素映射到相关联的数据元素;以及基于查找结果对分组进行分类。在一些实施例中,当用于至少一个基于范围的元素的分组数据大于或等于分配给间隔二叉搜索树的当前选定节点的值时,经修改的二叉搜索沿一个方向遍历该间隔二叉搜索树,并且当用于至少一个基于范围的元素的分组数据小于分配给当前选定节点的值时,该经修改的二叉搜索沿相反方向遍历该间隔二叉搜索树。在一些实施例中,直到完全遍历了间隔二叉搜索树,才确定经修改的二叉搜索的查找结果。在一些实施例中,根据经修改的二叉搜索的配置来确定方向和相反方向。在一些实施例中,经修改的二叉搜索在其遍历间隔二叉搜索树时将数据累积在结果值中。在一些实施例中,仅当经修改的二叉搜索沿该方向移动时,经修改的二叉搜索用分配给当前选定节点的值覆盖结果值,但当经修改的二叉搜索沿相反方向移动时,经修改的二叉搜索不替换结果值。在一些实施例中,存储器单元包括多个缓存行,并且通过获取存储在缓存行中的选定一个中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,存储器指针不存储在缓存行中。在一些实施例中,查找结果数据不存储在用于间隔二叉搜索树的内部节点的缓存行中,并且查找结果数据仅存储在用于叶节点的缓存行中。在一些实施例中,存储在缓存行中的一个中的间隔二叉搜索树的各个节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在当前缓存行中的间隔二叉搜索树的传出分支的索引来计算下一缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,执行经修改的二叉搜索包括执行分布式算法,该分布式算法包括多个级联级。在一些实施例中,经由至少一个ALU在每个级联级处执行算术运算或逻辑运算。在一些实施例中,算术运算包括:加、减、乘或除。在一些实施例中,逻辑运算包括:小于、大于或等于。在一些实施例中,级联级使用高效的分而治之方法来对处理进行分布,该处理在每个级处使用高指数扩展和最小处理。在一些实施例中,间隔二叉搜索树的多个层次各自被压缩到缓存行的相应缓存行中。在一些实施例中,在级联级中的一个处处理经压缩的多个层次中的每一个。在一些实施例中,通过以下步骤将用于至少一个基于范围的元素及其相关联的数据元素的配置值转换成间隔二叉搜索树:生成用于至少一个基于范围的元素的基于范围的值的数字线表示,作为基于范围的元素数字线,以及在另一个数字线上生成与每个基于范围的值相关联的相应数据元素值,作为表示搜索键的整个数字空间的键空间数字线;将每个基于范围的元素数字线投影到键空间数字线上,以标记每个基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上的最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同间隔和与每个不同间隔相关联的相应数据元素值导出间隔二叉搜索树。在一些实施例中,来自间隔二叉搜索树的内部节点的结果数据值被推送到间隔二叉搜索树的叶节点。在一些实施例中,在控制平面中离线确定对于间隔二叉搜索树的每个出口分支占优(prevail)的结果数据值。在一些实施例中,所确定的值仅存储在间隔二叉搜索树的叶节点中。在一些实施例中,间隔二叉搜索树的每个子树从相应的父树结果数据值仅继承一个默认值。在一些实施例中,对于在间隔二叉搜索树的根节点处开始的间隔二叉搜索树的所有节点的右子树,来自通向间隔二叉的子树的最近右分叉处的节点的结果数据值被存储在子树的最左叶节点中作为子树的最左出口分支的结果数据值。在一些实施例中,在二叉搜索树中映射的每个数据元素包括路由元素。在一些实施例中,至少一个基于范围的元素包括IP地址,相关联的路由元素包括下一跳,并且基于查找结果对分组进行分类包括将分组提供给出站接口(outboundinterface),该出站接口根据查找结果确定。在一些实施例中,可编程IO设备包括高级RISC机(ARM)处理器。在一些实施例中,基于查找结果对分组进行分类包括:当不能为下一跳确定出站接口时,将查找结果提供给ARM处理器以用于条目插入。在一些实施例中,ARM处理器向MPU提供分组并在MPU经由卸载应用执行LPM以将基于范围的数据映射到查找结果之后将分组接收回来。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括路由策略,并且基于查找结果对分组进行分类包括执行根据查找结果确定的路由策略。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括计量的标识符,并且基于查找结果对分组进行分类包括根据查找结果将分组映射到所基于的账户。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括监管器标识符,并且基于查找结果对分组进行分类包括根据查找结果实施流量契约。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,并且相关联的路由元素包括标签。在一些实施例中,采用LPM来替换RFC算法中的第一级查找。在一些实施例中,在ACL的单个实例中采用LPM的多个实例。在一些实施例中,操作包括:经由MPU,通过执行多个经修改的二叉搜索来确定适用于分组的安全策略,该多个经修改的二叉搜索中的每一个使用来自分组的相应数据在相应间隔二叉搜索树上被执行。在一些实施例中,其中基于查找结果对分组进行分类包括执行安全策略以允许或拒绝分组。在一些实施例中,基于查找结果对分组进行分类包括将查找结果提供给ARM处理器,用于条目插入,以允许或拒绝随后在不执行策略的情况下接收到的分组。在一些实施例中,在没有进行掩蔽(masking)或与运算(ANDing)的情况下确定查找结果。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。
在相关但独立的方面中,本文公开了一种用于从可编程数据平面的LPM实现确定下一跳的方法。该方法由可编程IO设备执行。该方法包括:从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;经由MPU,通过使用分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果,其中该间隔二叉搜索树将至少一个基于范围的元素映射到相关联的数据元素;以及基于查找结果对分组进行分类。在一些实施例中,当用于至少一个基于范围的元素的分组数据大于或等于分配给间隔二叉搜索树的当前选定节点的值时,经修改的二叉搜索沿一个方向遍历该间隔二叉搜索树,并且当用于至少一个基于范围的元素的分组数据小于分配给当前选定节点的值时,该经修改的二叉搜索沿相反方向遍历该间隔二叉搜索树。在一些实施例中,直到完全遍历了间隔二叉搜索树,才确定经修改的二叉搜索的查找结果。在一些实施例中,根据经修改的二叉搜索的配置来确定方向和相反方向。在一些实施例中,经修改的二叉搜索在其遍历间隔二叉搜索树时将数据累积在结果值中。在一些实施例中,仅当经修改的二叉搜索沿该方向移动时,经修改的二叉搜索用分配给当前选定节点的值覆盖结果值,但当经修改的二叉搜索沿相反方向移动时,经修改的二叉搜索不替换结果值。在一些实施例中,可编程IO包括存储器单元。在一些实施例中,存储器单元包括多个缓存行。在一些实施例中,通过获取存储在缓存行的选定一个中数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,存储器指针不存储在缓存行中。在一些实施例中,查找结果数据不存储在用于间隔二叉搜索树的内部节点的缓存行中。在一些实施例中,查找结果数据仅存储在用于叶节点的缓存行中。在一些实施例中,存储在缓存行中的一个中的间隔二叉搜索树的各个节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在当前缓存行中的间隔二叉搜索树的传出分支的索引来计算下一缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,MPU包括至少一个ALU。在一些实施例中,执行经修改的二叉搜索包括执行分布式算法,该分布式算法包括多个级联级。在一些实施例中,经由至少一个ALU在每个级联级处执行算术运算或逻辑运算。在一些实施例中,算术运算包括:加、减、乘或除。在一些实施例中,逻辑运算包括:小于、大于或等于。在一些实施例中,级联级使用高效的分而治之方法来对处理进行分布,该处理在每个级处使用高指数扩展和最小处理。在一些实施例中,间隔二叉搜索树的多个层次各自被压缩到缓存行的相应缓存行中。在一些实施例中,在级联级中的一个处处理经压缩的多个层次中的每一个。在一些实施例中,通过以下步骤将用于至少一个基于范围的元素及其相关联的数据元素的配置值转换成间隔二叉搜索树:生成用于至少一个基于范围的元素的基于范围的值的数字线表示,作为基于范围的元素数字线,以及在另一个数字线上生成与每个基于范围的值相关联的相应数据元素值,作为表示搜索键的整个数字空间的键空间数字线;将每个基于范围的元素数字线投影到键空间数字线上,以标记每个基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上的最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同间隔和与每个不同间隔相关联的相应数据元素值导出间隔二叉搜索树。在一些实施例中,来自间隔二叉搜索树的内部节点的结果数据值被推送到间隔二叉搜索树的叶节点。在一些实施例中,在控制平面中离线确定对于间隔二叉搜索树的每个出口分支占优的结果数据值。在一些实施例中,所确定的值仅存储在间隔二叉搜索树的叶节点中。在一些实施例中,间隔二叉搜索树的每个子树从相应的父树结果数据值仅继承一个默认值。在一些实施例中,对于在间隔二叉搜索树的根节点处开始的间隔二叉搜索树的所有节点的右子树,来自通向间隔二叉的子树的最近右分叉处的节点的结果数据值被存储在子树的最左叶节点中作为子树的最左出口分支的结果数据值。在一些实施例中,在二叉搜索树中映射的每个数据元素包括路由元素。在一些实施例中,至少一个基于范围的元素包括IP地址,相关联的路由元素包括下一跳,并且基于查找结果对分组进行分类包括将分组提供给出站接口,该出站接口根据该查找结果确定。在一些实施例中,可编程IO设备包括ARM处理器。在一些实施例中,基于查找结果对分组进行分类包括:当不能为下一跳确定出站接口时,将查找结果提供给ARM处理器以用于条目插入。在一些实施例中,ARM处理器向MPU提供分组并在MPU经由卸载应用执行LPM以将基于范围的数据映射到查找结果之后将分组接收回来。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括路由策略,并且基于查找结果对分组进行分类包括执行根据查找结果所确定的路由策略。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括计量的标识符,并且基于查找结果对分组进行分类包括根据查找结果将分组映射到所基于的账户。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括监管器标识符,并且基于查找结果对分组进行分类包括根据查找结果实施流量契约。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,并且相关联的路由元素包括标签。在一些实施例中,采用LPM来替换RFC算法中的第一级查找。在一些实施例中,在ACL的单个实例中采用LPM的多个实例。在一些实施例中,操作包括:经由MPU,通过执行多个经修改的二叉搜索来确定适用于分组的安全策略,该多个经修改的二叉搜索中的每一个使用来自分组的相应数据在相应间隔二叉搜索树上被执行。在一些实施例中,其中基于查找结果对分组进行分类包括执行安全策略以允许或拒绝分组。在一些实施例中,基于查找结果对分组进行分类包括将查找结果提供给ARM处理器,用于条目插入,以允许或拒绝随后在不执行策略的情况下接收到的分组。在一些实施例中,在没有进行掩蔽或与运算的情况下确定查找结果。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。
在相关但独立的方面中,本文公开了一种系统,包括:可编程IO设备,该可编程IO设备被配置成执行使可编程IO设备执行操作的指令,该操作包括:从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;经由MPU,通过使用分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果,其中该间隔二叉搜索树将至少一个基于范围的元素映射到相关联的数据元素;以及基于查找结果对分组进行分类。在一些实施例中,当用于至少一个基于范围的元素的分组数据大于或等于分配给间隔二叉搜索树的当前选定节点的值时,经修改的二叉搜索沿一个方向遍历该间隔二叉搜索树,并且当用于至少一个基于范围的元素的分组数据小于分配给当前选定节点的值时,该经修改的二叉搜索沿相反方向遍历该间隔二叉搜索树。在一些实施例中,直到完全遍历了间隔二叉搜索树,才确定经修改的二叉搜索的查找结果。在一些实施例中,根据经修改的二叉搜索的配置来确定方向和相反方向。在一些实施例中,经修改的二叉搜索在其遍历间隔二叉搜索树时将数据累积在结果值中。在一些实施例中,仅当经修改的二叉搜索沿该方向移动时,该经修改的二叉搜索用分配给当前选定节点的值覆盖结果值,但当经修改的二叉搜索沿相反方向移动时,该经修改的二叉搜索不替换结果值。在一些实施例中,可编程IO包括存储器单元。在一些实施例中,存储器单元包括多个缓存行。在一些实施例中,通过获取存储在缓存行的选定一个中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,存储器指针不存储在缓存行中。在一些实施例中,查找结果数据不存储在用于间隔二叉搜索树的内部节点的缓存行中。在一些实施例中,查找结果数据仅存储在用于叶节点的缓存行中。在一些实施例中,存储在缓存行的一个中的间隔二叉搜索树的各个节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在该当前缓存行中的间隔二叉搜索树的传出分支的索引来计算下一缓存行的地址。在一些实施例中,根据经修改的二叉搜索确定传出分支的索引。在一些实施例中,MPU包括至少一个ALU。在一些实施例中,执行经修改的二叉搜索包括执行分布式算法,该分布式算法包括多个级联级。在一些实施例中,经由至少一个ALU在每个级联级处执行算术运算或逻辑运算。在一些实施例中,算术运算包括:加、减、乘或除。在一些实施例中,逻辑运算包括:小于、大于或等于。在一些实施例中,级联级使用高效的分而治之方法来对处理进行分布,该处理在每个级联级处使用高指数扩展和最小处理。在一些实施例中,间隔二叉搜索树多个层次各自被压缩到缓存行的相应缓存行中。在一些实施例中,在级联级中的一个处处理经压缩的多个层次中的每一个。在一些实施例中,通过以下步骤将用于至少一个基于范围的元素及其相关联的数据元素的配置值转换成间隔二叉搜索树:生成用于至少一个基于范围的元素的基于范围的值的数字线表示,作为基于范围的元素数字线,以及在另一个数字线上生成与每个基于范围的值相关联的相应数据元素值,作为表示搜索键的整个数字空间的键空间数字线;将每个基于范围的元素数字线投影到键空间数字线上,以标记每个基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上的最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同间隔和与每个不同间隔相关联的相应数据元素值导出间隔二叉搜索树。在一些实施例中,来自间隔二叉搜索树的内部节点的结果数据值被推送到间隔二叉搜索树的叶节点。在一些实施例中,在控制平面中离线确定对于间隔二叉搜索树的每个出口分支占优的结果数据值。在一些实施例中,所确定的值仅存储在间隔二叉搜索树的叶节点中。在一些实施例中,间隔二叉搜索树的每个子树从相应的父树结果数据值仅继承一个默认值。在一些实施例中,对于在间隔二叉搜索树的根节点处开始的间隔二叉搜索树的所有节点的右子树,来自通向间隔二叉的子树的最近右分叉处的节点的结果数据值被存储在子树的最左叶节点中作为子树的最左出口分支的结果数据值。在一些实施例中,在二叉搜索树中映射的每个数据元素包括路由元素。在一些实施例中,至少一个基于范围的元素包括IP地址,相关联的路由元素包括下一跳,并且基于查找结果对分组进行分类包括将分组提供给出站接口,该出站接口根据该查找结果确定。在一些实施例中,可编程IO设备包括ARM处理器。在一些实施例中,基于查找结果对分组进行分类包括:当不能为下一跳确定出站接口时,将查找结果提供给ARM处理器以用于条目插入。在一些实施例中,ARM处理器向MPU提供分组并在MPU经由卸载应用执行LPM以将基于范围的数据映射到查找结果之后将分组接收回来。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括路由策略,并且基于查找结果对分组进行分类包括执行根据查找结果确定的路由策略。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括计量的标识符,并且基于查找结果对分组进行分类包括根据查找结果将分组映射到所基于的账户。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括监管器标识符,并且基于查找结果对分组进行分类包括根据查找结果实施流量契约。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,并且相关联的路由元素包括标签。在一些实施例中,采用LPM来替换RFC算法中的第一级查找。在一些实施例中,在ACL的单个实例中采用LPM的多个实例。在一些实施例中,操作包括:经由MPU,通过执行多个经修改的二叉搜索来确定适用于分组的安全策略,该多个经修改的二叉搜索中的每一个使用来自分组的相应数据在相应间隔二叉搜索树上被执行。在一些实施例中,其中基于查找结果对分组进行分类包括执行安全策略以允许或拒绝分组。在一些实施例中,基于查找结果对分组进行分类包括将查找结果提供给ARM处理器,用于条目插入,以允许或拒绝随后在不执行策略的情况下接收到的分组。在一些实施例中,在没有进行掩蔽或与运算的情况下确定查找结果。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。
可以实现本公开中所描述的主题的特定实施例,以便实现以下优点中的一个或更多个。在一些实施例中,所描述的系统提供在使用静态随机存取存储器(SRAM)数据平面中执行的最长前缀匹配,而不必使用TCAM。所描述的系统还节省了芯片实际面积(realestate),提供了更简单的设计,在构建和操作过程中提供了效率和节省,消耗更少的功率,生成更少的热量。所描述的系统还支持巨大的规模,这是因为极其有效的存储器使用,以及所导致的在每个级处的高指数爆炸。由于分而治之的搜索的log N复杂性,所描述的系统在巨大的数据集上非常快,并且由于没有哈希冲突,为可能的查找键提供了可预测的(和相同的)搜索时间延迟。
应当理解,所描述的系统的不同方面可以单独地、集体地或相互结合地被理解。本文所描述的系统的各个方面可应用于下文所阐述的任何特定应用或用于本文所公开的任何其他类型的数据处理系统。本文关于数据处理的任何描述可以适用于并被用于任何其他数据处理情况。附加地,在数据处理系统或装置的上下文中所公开的任何实施例也适用于本文公开的方法。
附图简述
通过参考以下对说明性实施例加以阐述的详细描述及附图,将会获得对本主题的特征和优势的更好的理解,在附图中:
图1描绘了可由本公开的实施例采用计算系统架构的非限制性示例;
图2描绘了可由本公开的实施例采用的用于执行程序的多个MPU的配置的非限制性示例;
图3描绘了可由本公开的实施例采用的MPU的非限制性示例;
图4描绘了可由本公开的实施例采用的P4入口或出口管线(pipeline)(PIP管线)的非限制性示例;
图5A描绘了非限制性示例路由表;
图5B描绘非限制型示例策略匹配表;
图5C描绘了除了要匹配的键和要检索的数据之外,还包括掩码的非限制性示例表;
图5D描绘了示出如何在传统交换机中实现LPM的非限制性示例表;
图6描绘了非限制性示例树结构,该树结构示出了对于LPM实现,什么使二叉搜索前缀变得困难;
图7A描绘了可以被用于将前缀和相应的下一跳转换成可以被二叉搜索的某物的非限制性示例前缀空间表示;
图7B描绘了被投影到数字线上不同间隔的前缀空间表示的非限制性示例;
图7C描绘了被投影到数字线上的前缀空间表示的非限制性示例,其中在必要的地方添加了新的点;
图7D描绘了从变换中导出的非限制性示例间隔表;
图7E描绘了从间隔表中导出的非限制性示例间隔二叉搜索树;
图8描绘了对采用间隔二叉搜索树的地址的非限制性示例经修改二叉搜索;
图9A-图9K描绘了用于可在间隔二叉搜索树上执行的示例经修改的二叉搜索的一系列非限制性渐进步骤;
图10A-图10N描绘了用于可在间隔二叉搜索树上执行的示例经修改的二叉搜索的另一系列的非限制性渐进步骤;
图11描绘了可以在间隔二叉搜索树上执行的对各种传入地址的非限制性示例经修改的二叉搜索;
图12描绘了其中数据不存储在内部节点中的非限制性示例二叉搜索树;
图13描绘了可由所描述的系统采用的示例存储器实现;
图14A描绘了可以被所描述的系统采用的用于1K规模的IPv4路由LPM的示例存储器实现;
图14B描绘了32b LPM缓存行格式;
图14C描绘了LPM缓存行格式的非限制性树表示;
图14D描绘了32b LPM缓存行格式;
图14E描绘了LPM缓存行格式的非限制性树表示;
图15A描绘了可以被所描述的系统采用的用于1K规模的IPv6(64b)路由LPM的示例存储器实现;
图15B描绘了64b LPM缓存行格式;
图15C描绘了LPM缓存行格式的非限制性树表示;
图15D描绘了64b LPM缓存行格式;
图15E描绘了非限制性树表示;
图16A描绘了可以被所描述的系统采用的用于1K规模的IPv6(128b)策略LPM的示例存储器实现;
图16B描绘了128b LPM缓存行格式;
图16C描绘了LPM缓存行格式的非限制性树表示;
图16D描绘了128b LPM缓存行格式;
图16E描绘了LPM缓存行格式的非限制性树表示;
图17描绘了可以被所描述的系统采用的用于8K规模的端口范围(16b)LPM的示例存储器实现;
图18描绘了使用LPM来替换RFC的第一级;
图19描绘了可以由本公开的实施例实现的非限制性示例过程的流程图;
图20描绘了可以被编程或以其他方式被配置以实现本公开的方法或系统的非限制性示例计算机系统;以及
图21描绘了可以采用的本公开的实现的非限制性示例环境。
详细描述
在某些实施例中,本文描述了可编程IO设备。每个可编程IO设备包括:MPU和存储器单元。该MPU包括至少一个ALU。该存储器单元具有存储在其上的指令,当该指令由可编程IO设备执行时,使该可编程IO设备执行操作。这些操作包括:从入站接口接收分组,该分组包括IP地址;经由该MPU,通过使用该IP地址在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果;以及将分组提供给出站接口,该出站接口根据该查找结果来确定。
在某些实施例中,本文还描述了用于从可编程数据平面的LPM实现确定的下一跳的方法。该方法由可编程IO设备执行,并包括:从入站接口接收分组,该分组包括IP地址;经由MPU,通过使用该IP地址在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果;以及将分组提供给出站接口,该出站接口根据该查找结果来确定。
在某些实施例中,本文还描述了包括可编程IO设备的系统,该可编程IO设备被配置成执行使该可编程IO设备执行操作的指令,该操作包括:从入站接口接收分组,该分组包括IP地址;经该MPU,通过使用IP地址在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果;以及将分组提供给出站接口,该出站接口根据该查找结果来确定。
某些定义
除非特别定义,本文使用的所有技术术语具有该所描述的系统所属领域的普通技术人员通常理解的相同意思。
如本文所使用的,除非上下文另有明确规定,单数形式“一(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的吞吐量。
所描述的系统的实施例可用于各种应用中。所描述的系统的一些实施例可与各种设备和系统结合使用,例如,个人计算机(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-IOVNIC可以具有多达256个虚拟功能,其中每个虚拟功能表示相应的NIC端口。
在一个方面,提供了一种可编程设备接口。设备接口可以是高度优化的基于环的I/O队列接口,具有高效的软件编程模型,以对CPU和PCIe总线效率交付高性能。图1示出了根据所描述系统的实施例的示例性计算系统架构100的框图。主机计算系统120上的管理程序(hypervisor)121可以使用PF 115和一个或更多个VF 113与物理IO设备110交互。如图所示,计算系统120可以包括被配置用于管理接口设备的管理设备117。管理设备117可以与处理实体111(例如,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。PF115可以是包括用于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)模式,用于高性能的中断处理;支持每个队列具有未决请求(例如,高达64K)的I/O队列;传输具有改进的发送大小的TCP分段卸载(TCP segmentationOffload)(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字节完成响应。该寄存器接口一次允许单个命令突出(outstand)。设备命令门铃是一种特殊用途的门铃,用于告知设备命令寄存器中的命令已准备就绪。
第二BAR可以包含门铃页面。第二BAR的一般形式可以包含多个LIF,其中每个LIF具有多个门铃页面。网络设备(即,IO设备)可以具有至少一个LIF,该LIF具有至少一个门铃页面。具有单个/许多门铃页面的单个/许多LIF的任何组合都是可能的,驱动器可以准备好识别和操作不同的组合。在示例中,门铃页面可以默认以4k步幅呈现,以匹配通用系统页面大小。可以在虚拟功能设备113中调整门铃页面之间的步幅,以匹配父物理功能设备115中的SR-IOV能力报头中的系统页面大小配置设置。通过允许每个进程映射和访问专用于其使用的门铃页面,该页面大小分离允许进程对一组门铃寄存器进行受保护的独立直接访问。每个页面可以提供操作LIF的数据路径队列资源所需的门铃资源,同时保护从另一个进程对这些资源的访问。
门铃寄存器可以由软件写入以调整队列的生产者索引。调整生产者索引是将队列描述符环中队列条目的所有权转移到硬件的机制。一些门铃类型,诸如管理队列、以太网传输队列和RDMA发送队列,可能会导致硬件队列调度对队列中可用描述符的进一步处理。其他队列类型(诸如完成队列和接收队列)在更新生产者索引后可能不需要来自硬件队列的进一步动作。
中断状态寄存器可以包含用于设备的每个中断资源的位。寄存器可以具有指示对应中断资源已断言其中断的位集合。例如,中断状态中的位0指示已断言中断资源0,位1指示已断言中断资源1。
控制器存储器缓冲器可以是驻留在IO设备上的通用存储器区域。用户或内核驱动器可以映射到该控制器存储器BAR中,并在该区域中构建描述符环、描述符和/或有效载荷数据。可以在描述符中添加位以选择描述符地址字段是被解释为主机存储器地址,还是被解释为相对于设备控制器存储器窗口开始的偏移量。如果该地址是主机地址,则扩展的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可以跟踪哪些字节已经被写入(也称为脏字节),哪些字节保持不变。当表条目被刷新回存储器时,脏字节向量可以作为写选通提供给AXI,允许多个写操作安全地更新单个表数据结构,只要它们不写入相同的字节。在一些情况下,表中的脏字节不需要是连续的,并且MPU只能在脏向量中至少有一个位被设置时被写回表。尽管根据根据本说明书中的本示例性实施例的分组数据通信片上互连系统中的AXI协议来传输分组数据,但该数据分组也可以应用于通过支持锁定操作的其他协议(诸如,除了AXI协议之外的高级高性能总线(AHB)协议或高级外围总线(APB)协议)操作的分组数据通信片上互连系统。
MPU300可以包括指令获取单元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)和从主机存储器加载到通用寄存器中的控制数据结构执行计算。
MPU300可以包括各种其他功能单元,诸如计量仪、计数器、动作插入单元等。例如,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和多个MPU403。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被分组成一组。该组级单元可以共享一组公共的SRAM411和TCAM413。SRAM411和TCAM413可以是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程序可以包括,例如,完成队列事件、中断、定时器设置以及控制寄存器写和各种其他程序。
最长前缀匹配
通常,LPM在硬件(诸如IO子系统)中被执行。当接收到具有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需要复杂的逻辑,并且需要大量的硅片空间,这使得它们的建造成本很高。此外,逻辑和速度要求使它们非常耗电,因此操作成本很高。电力的使用也会生成大量的热量。移除热量是一项挑战,并增加了操作成本。此外,数据检索可能需要复杂的排序(编译)才能找到正确的结果。所有这些通过对控制平面处理器提出了很高的要求而限制了规模。
图6描绘了示例树结构600,该树结构600示出了对于LPM实现,什么使二叉搜索前缀变得困难。示例树结构600包括作为范围(例如,具有低值和高值)的前缀条目。当发现查找键所属的范围(前缀条目)时,LPM搜索不能像普通的二叉搜索一样停止,因为嵌套前缀可能存在于该范围(前缀条目)内。因此,创建需要三元树的三元决策,每个前缀层次有一个平面(例如,示例树结构600)。此外,前缀在前缀长度上的分布是不可预测的。因此,可以为每个前缀长度层次提供最大规模。例如,用于IPv6的多达128个嵌套层次需要128倍的存储器、每个节点处的更多处理以及复杂的树构建。
间隔二叉搜索树
图7A描绘了可以被用于将前缀和相应的下一跳转换成可以被二叉搜索的结构(例如,间隔二叉搜索树)的示例前缀空间表示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万个级。图7E描绘了从图7D中所描绘的示例间隔表730导出的示例间隔二叉搜索树740。该间隔二叉搜索树表示740允许用(经修改的)二叉搜索算法替换顺序搜索,以在对数时间内搜索数字线712上的点。例如,利用对数搜索时间,并且每个级能够在4个间隔上进行比较和分支(即,搜索二叉树的4个层次,这给出了在每个级处的16向指数爆炸),可以仅在3个级(16x16x16)中搜索4096个间隔(2K个前缀),并且可以仅在6个级(16x16x16x16x16x16)中搜索1600万个间隔(800万个前缀)。此外,由于存储在间隔二叉搜索树节点中的值是间隔值而不是前缀,因此该解决方案不必在每个节点处采用复杂的三元树或做出复杂的三元决策。
修改的二叉搜索
图8描绘了采用示例间隔二叉搜索树740的用于地址的示例800经修改的二叉搜索。与常规二叉搜索不同,该示例经修改的二叉搜索800在节点处的值与正在被搜索的键相同时不会停止。相反,当键大于或等于节点中的值时,它会遍历到右孩子。否则(当键小于节点中的值时),搜索将遍历到左孩子。在一些实施例中,仅当搜索沿经配置的方向移动(例如,当搜索向右时,用存储在该节点处的数据替换当前数据)时,由所描述的系统采用的经修改的二叉搜索才从节点“拾取”数据。在一些实施例中,一旦搜索到达并处理叶节点,经修改的二叉搜索的结果就被确定。
所描述的系统采用的示例经修改的二叉搜索可以根据以下方式被执行,其中x是正在被搜索的键,并且值(节点)和nh(节点)是存储在该节点处的间隔值和对应的下一跳数据。NH是累积的下一跳,其被初始化为默认的下一跳,并在搜索终止时为搜索键保持正确的下一跳结果:
在从根开始的每个节点处:
图9A-图9K分别描绘了用于传入地址9.1.1.1的示例经修改的二叉搜索的一系列渐进步骤900-920,该示例经修改的二叉搜索可以在所描述系统内的示例间隔二叉搜索树740上执行。该查找会导致查找丢失,默认的下一跳(-1)将在搜索中被保留,并在端部处作为传入地址的所产生的下一跳被正确返回。
图10A-图10N分别描绘了用于传入地址10.15.1.1的示例经修改的二叉搜索的一系列渐进步骤1000-1026,该示例经修改的二叉搜索可以在所描述系统内的示例间隔二叉搜索树740上执行。该查找导致与前缀10.15.0.0/16的匹配,并且在端部处返回正确的下一跳C,作为用于传入地址的所产生的下一跳。
图11描绘了用于包括在表1102中的各种传入地址(1-8)的示例经修改的二叉搜索1100,该经修改的二叉搜索1100可以在所描述系统内的示例间隔二叉搜索树740上执行。示例经修改的二叉搜索中的每一个被描绘为遍历间隔二叉搜索树740的箭头。所描绘的示例经修改的二叉搜索1100示出了遍历二叉搜索树740所采用的路径。注意:表1102的元素1是传入地址9.1.1.1,其中遍历间隔二叉搜索树740的经修改的二叉搜索步骤也被描绘在图9A-图9K中;并且表1102的元素4是传入地址10.15.0.0,其中遍历间隔二叉搜索树740的经修改的二叉搜索步骤也被描绘在图10A-图10N中。
图12描绘了其中数据未被存储在内部节点中的示例二叉搜索树1200。如在示例二叉搜索树1200中所描绘的,仅到达最左出口分支而从未在节点处采取右分叉。通过采取至少一个右分叉,并在每个右分叉处用来自节点的数据覆盖累积的数据,可以到达示例二叉搜索树1200的所有其他出口分支。这样的实现提供了:仅该最后的数据占优(即,最后的数据用于最终结果的正确推导),并且允许对每个可能的出口分支的该数据进行离线预计算(例如,由控制平面计算),并且允许该数据仅存储在叶(例如,最后级)节点中。这允许内部节点(例如,先前的级)只存储键而不存储数据,因为没有从这些节点积累任何内容,这节省了大量的存储器。在一些实施例中,每个子树从其父树仅继承一个默认数据:来自通向该子树的最近右分叉处的节点的数据,然后将该数据下“推”并存储为该子树的最左出口分支的数据。图12示出了通过将上述规则应用于从根开始的每个内部节点的右子树,如何将来自内部节点的数据下“推”到正确的出口分支。
示例二叉搜索树1200可以由所描述的系统在经由IO子系统所提供的数据平面中被采用。例如,所采用的IO子系统可以从存储器中提取一个缓存行(64B)的数据,并以线速执行多达16条机器指令。所采用的IO子系统还可以在一个缓存行中压缩相应的二叉搜索树(诸如二叉搜索树1200)的多个层次,以便每个级可以处理该树的多个层次。在一些实施例中,数据不存储在内部节点中,而是存储在最后级节点中。这样的实现节省了缓存行存储器,并允许将树的更多层次分组到一个缓存行中。在一些实施例中,存储器指针不存储在缓存行中。在一些实施例中,在IO子系统内采用地址计算,以基于在该级处采用的传出分支来找到下一个缓存行。采用地址计算节省了缓存行存储器,并允许将树的更多层次分组到一个缓存行中。在一些实施例中,15个IPv4地址间隔(60B)被存储在每个内部节点缓存行中,这形成二叉树的四个层次。在一些实施例中,可以使用16条或更少的指令在这四个层次上执行经修改的二叉搜索(包括分支惩罚和以线速的下一个缓存行地址计算)。在一些实施例中,处理二叉树的4个层次在每个级处提供树的16向扩展。这种分而治之的方法和指数扩展提供了一个显著的规模优势,因为更多的级被添加。例如,这样的架构仅用三个级就可以扩展到1000个IPv4前缀,在六个级中可以扩展到400万个,在八个级中可以扩展到庞大的10亿个(即使在应用了上面解释的缓存行约束并考虑了用于在最后级节点中存储结果数据的缓存行存储器之后)。在一些实施例中,通过将数据推送到外部节点,诸如在示例二叉搜索树1200中所描绘的,对于每个出口分支将占优的数据可以在控制平面处离线地预先计算,并且可以仅存储在最后级,留下内部节点来仅存储键。
图13描绘了可由所描述的系统采用的示例存储器实现1300。示例存储器1300被组织为缓存行阵列。如图所示,缓存行内的各个树节点可以直接作为结构成员(例如,cache-line.node[0]-cache-line.node[n])来访问,这取决于在每个缓存行内分组了多少节点。箭头(例如,B00,B01等)表示可以由处理该缓存行的经修改的二叉搜索来从缓存行中取出的可能分支,以及如果取出这些分支中的每一个,搜索将通向的对应的下一个缓存行。采用示例存储器1300允许以不需要将指针存储在缓存行中的方式将存储器中的缓存行组装为阵列。在一些实施例中,在当前级中,基于当前缓存行的地址和在当前级中被采用的传出分支的索引,计算要由后续级取出用于处理的下一个缓存行的地址。在一些实施例中,示例存储器1300被组织成使得可以在不必存储存储器地址的情况下执行上述地址获取。
在一些实施例中,下一地址被计算为:
curr_idx=(curr_addr-base_addr)/sizeof(cache_line);
next_idx=(curr_idx*16)+传出分支数;
next_addr=(next_idx*sizeof(cache_line))+base_addr;
图14A描绘了可以被所描述的系统采用的用于1K(1024)规模实现的IPv4路由LPM的示例存储器实现1400。所描绘的存储器实现1400在三个级(1402、1404和1406)上被扩展,其中每个矩形表示64B(512b)缓存行,该缓存行保持相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1402和级2 1404使用四个层次的子树,每个子树有15个节点,节点在这些级处提供了16向扩展。如图所示,最后的级3 1406被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有一半的节点可以被分组为先前的级。因此,级3 1406使用三个层次的子树,每个子树有七个节点,这在最后一个级处提供了八向扩展。存储器实现1400提供16x16x8或2K个间隔,其在最坏的情况下容纳1K个前缀。
图14B描绘了可以被用于图14A中所描绘的级1 1140,和级2 1404的32b LPM缓存行格式1410。如图所示,LPM缓存行格式1410存储15个键(间隔值),每个键有32b,并且不存储数据,因为数据被推到最后一级(参见图14D和图14E)。图14C描绘了对应于LPM缓存行格式1410的树表示1412。树表示1412在每个级处提供16向分支,其中级2共有256个分支。
图14D描绘了可以被用于图14A中所描绘的级3 1406的32b LPM缓存行格式1420。如图所示,LPM缓存行格式1420存储七个键及它们对应的16b数据。如图所示,附加16b字段1424存储从父子树推送的数据。图14E描绘了对应于LPM缓存行格式1420的树表示1422。树表示1422在级3 1406处提供8向分支。256x8为LPM总共提供了2K个决策,其支持1K个前缀的解析。
在图14A-图14E中所描绘的1K规模的32b LPM的存储器计算可以被表示为:
对于1K IPv4规模的总存储器需求:
=mem_usage(stage1)+mem_usage(stage2)+mem_usage(stage3)
=64B+(16*64B)+(256*64B)
=17,472B;以及
对于1M规模的总存储器需求:
=17.47KB*1024
=17.47MB(与其他方法相比,这是一个很小的部分)。
图15A描绘了可以被所描述的系统采用的用于1K规模实现的IPv6(64b)路由LPM的示例存储器实现1500。
所描绘的实现1500在四个级(1502、1504、1506和1508)上被扩展,其中每个矩形表示64B(512b)缓存行,该缓存行保持该相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1502、级2 1504和级3 1506使用三个层次的子树,每个子树有七个节点,这在这些级处提供了八向扩展。如图所示,级4 1508被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有一半的节点可以被分组为先前的级。因此,级4 1508使用两个层次的子树,每个子树有三个节点,这在最后一个级处提供了四向扩展。实现1500提供了8x8x8x4=2K个间隔,其在最坏的情况下容纳1K个前缀。
图15B描绘了可以被用于图15A中所描绘的级1 1502、级2 1504和级3 1506的64bLPM缓存行格式1510。如图所示,LPM缓存行格式1510存储七个键(间隔值),每个键有64b,并且不存储数据,因为数据被推到最后一级(参见图15D和图15E)。图15C描绘了对应于LPM缓存行格式1510的树表示1512。树表示1512在每个级处提供8向分支,其中级3共有512个分支。
图15D描绘了可以被用于图15A中所描绘的级4 1508的64b LPM缓存行格式1520。如图所示,LPM缓存行格式1520存储三个键及其对应的16b数据。如图所示,附加16b字段1524存储从父子树推送的数据。图15E描绘了对应于LPM缓存行格式1520的树表示1522。树表示1522在级4 1508处提供四向分支。512x4为LPM总共提供了2K个决策,其支持1K个前缀的解析。
图15A-图15E中所描绘的1K规模的64b LPM的存储器计算可以被表示为:
对于1K IPv6规模的总存储器需求:
=64B+(8*64B)+(64*64B)+(512*64B)
=21,568B;以及
对于1M规模的总存储器需求:
=21.6KB*1024
=21.6MB(再次地,与其他方法相比,是一个很小的部分)。
图16A描绘了可以被所描述的系统采用的用于1K规模实现的IPv6(128b)策略LPM的示例存储器实现1600。所描绘的实现1600在六个级(1601、1602、1603、1604、1605和1606)上展开,其中每个矩形表示一个64B(512b)缓存行,该缓存行保持该相应层次处的所有子树的集合中的一个子树,该层次可以由该级以线速处理。如图所示,级1 1601、级2 1602、级31603、级4 1604和级5 1605使用两个层次的子树,每个子树有三个节点,这在这些级处提供了四向扩展。如图所示,级6 1606被用于存储叶节点,该叶节点除了在缓存行中存储键之外还存储数据,因此只有一半的节点可以被分组为先前的级。因此,级6 1606使用一个层次的子树,每个子树有一个节点,这在最后一个级处提供双向扩展。实现1600提供了4x4x4x4x4x2=2K个间隔,其在最坏的情况下容纳1K个前缀。
图16B描绘了可以被用于图16A中所描绘的级1 1601、级2 1602、级3 1603、级41604和级5 1605的128b LPM缓存行格式1610。如图所示,LPM缓存行格式1610存储三个键(间隔值),每个键有128b,并且不存储数据,因为数据被推到最后一级(参见图16D和图16E)。图16C描绘了对应于LPM缓存行格式1610的树表示1612。树表示1612在每个级处提供四向分支,其中级5共有1K个分支。
图16D描绘了可以被用于图15A中所描绘的级6 1606的128b LPM缓存行格式1620。如图所示,LPM缓存行格式1620存储一个键及其对应的16b数据。如图所示,附加16b字段1624存储从父子树推送的数据。图16E描绘了对应于LPM缓存行格式1620的树表示1622。树表示1622在级6 1606处提供二向分支。1Kx2为LPM总共提供了2K个决策,这支持1K个前缀的解析。
图16A-图16E中所描绘的1K规模的128b LPM的存储器计算可以被表示为:
对于1K IPv6规模的总存储器需求:
=64B+(4*64B)+(16*64B)+(64*64B)+(256*64)+(1024*64)
=87,104b;以及
用于1M规模的总存储器需求:
=87.1KB*1024
=87.1MB(再次地,与其他方法相比,是一个很小的部分)。
图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=2K个间隔,其在最坏的情况下容纳1K个前缀。
图17中所描绘的8K规模的32b LPM的存储器计算可以被表示为:
对于8K规模的32LPM的总存储器需求:
=64B+(32*64B)+(1K*64B)
=67,648B
图18描绘了采用LPM来替换被用于使用等价类进行策略评估的RFC的第一级的示例1800。在一些实施例中,使用这样的RFC算法来实现策略。如图所示,RFC算法中的第一级查找被替换。在一些实施例中,通过采用所描述的系统(参见例如,图5B),这些第一级查找被用于将源IP、目的地IP、源端口、目的地端口和协议从传入分组转换为“类id”。
示例过程
图19描绘了示例过程1900的流程图。示例过程1900可以由所描述系统的各种元素来实现。如图所示,该示例过程更详细地示出了如何通过用接收到的分组数据(例如,IP前缀)在间隔二叉搜索树上执行经修改的二叉搜索以确定最长前缀匹配来在可编程IO设备(例如,ISA)上或在诸如路由器或交换机的独立网络设备内确定结果值(例如,下一跳)。为了清楚呈现,下面的描述一般在图1-图18、图20和图21的上下文中描述示例过程1900。然而,将理解,过程1900可以例如由任何其他合适的系统、环境、软件和硬件执行,或者由适当的系统、环境、软件和硬件的组合执行。在一些实施例中,过程1900的各种操作可以并行、组合、循环或以任何顺序运行。在一些实施例中,过程1900由可编程IO设备执行。在一些实施例中,可编程IO设备是ISA。在一些实施例中,可编程IO设备是路由器或交换机。在一些实施例中,可编程IO设备包括具有存储在其上的指令的存储器单元,当该指令由可编程IO设备执行时,使可编程IO设备执行过程1900。在一些实施例中,可编程IO设备包括MPU,该MPU包括至少一个ALU。在一些实施例中,可编程IO设备包括ARM处理器。
在1902处,从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组。从1902开始,过程1900进行到1904。
在1904处,通过利用分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来经由MPU确定查找结果。在一些实施例中,间隔二叉搜索树将至少一个基于范围的元素映射到相关联的数据元素。在一些实施例中,当用于至少一个基于范围的元素的分组数据大于或等于分配给间隔二叉搜索树的当前选定节点的值时,经修改的二叉搜索沿一个方向遍历该间隔二叉搜索树,并且当用于至少一个基于范围的元素的分组数据小于分配给当前选定节点的值时,该经修改的二叉搜索沿相反方向遍历该间隔二叉搜索树。在一些实施例中,直到完全遍历了间隔二叉搜索树,才确定经修改的二叉搜索的查找结果。在一些实施例中,根据经修改的二叉搜索的配置来确定方向和相反方向。在一些实施例中,经修改的二叉搜索在其遍历间隔二叉搜索树时将数据累积在结果值中。在一些实施例中,仅当经修改的二叉搜索沿该方向移动时,经修改的二叉搜索用分配给当前选定节点的值覆盖结果值,但当经修改的二叉搜索沿相反方向移动时,不替换结果值。在一些实施例中,存储器单元包括多个缓存行,并且通过获取存储在缓存行的选定一个中的数据来执行经修改的二叉搜索。在一些实施例中,基于地址计算来确定选定的缓存行。在一些实施例中,存储器指针不存储在缓存行中。在一些实施例中,查找结果数据不存储在用于间隔二叉搜索树的内部节点的缓存行中,查找结果数据仅存储在用于叶节点的缓存行中。在一些实施例中,存储在缓存行中的一个中的间隔二叉搜索树的各个节点作为结构成员被直接访问。在一些实施例中,基于当前缓存行的地址和存储在当前缓存行中的间隔二叉搜索树的传出分支的索引来计算下一缓存行的地址,传出分支的索引根据经修改的二叉搜索来确定。在一些实施例中,执行经修改的二叉搜索包括执行分布式算法,该分布式算法包括多个级联级。在一些实施例中,经由至少一个ALU在每个级联级处执行算术运算或逻辑运算。在一些实施例中,算术运算包括:加、减、乘或除。在一些实施例中,逻辑运算包括:小于、大于或等于。在一些实施例中,级联级使用分而治之方法来对处理进行分布,该处理在每个级处使用高指数扩展和最小处理。在一些实施例中,间隔二叉搜索树的多个层次各自被压缩到缓存行中的相应缓存行中。在一些实施例中,在级联级中的一个处处理经压缩的多个层次中的每一个。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括路由策略,并且基于查找结果对分组进行分类包括执行根据查找结果确定的路由策略。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括计量的标识符,并且基于查找结果对分组进行分类包括根据查找结果将分组映射到所基于的账户。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,相关联的路由元素包括监管器标识符,并且基于查找结果对分组进行分类包括根据查找结果实施流量契约。在一些实施例中,至少一个基于范围的元素包括IP地址或L4端口,并且相关联的路由元素包括标签。在一些实施例中,采用LPM来替换RFC算法中的第一级查找。在一些实施例中,在ACL的单个实例中采用LPM的多个实例。在一些实施例中,在没有进行掩蔽或与运算的情况下确定查找结果。从1904开始,过程1900进行到1906。
在1906处,基于查找结果对分组进行分类。在一些实施例中,通过以下步骤将用于至少一个基于范围的元素及其相关联的数据元素的配置值转换成间隔二叉搜索树:生成用于至少一个基于范围的元素的基于范围的值的数字线表示,作为基于范围的元素数字线,以及在另一个数字线上生成与每个基于范围的值相关联的相应数据元素值,作为表示搜索键的整个数字空间的键空间数字线;将每个基于范围的元素数字线投影到键空间数字线上,以标记每个基于范围的元素数字线的起点和终点,使得键空间数字线被划分为不同的间隔,其中每个不同的间隔包括唯一的数据元素值,并且其中每个唯一的数据元素值表示在相应间隔之上的最深嵌套的基于范围的元素数字线的数据元素值;以及从键空间数字线上的不同间隔和与每个不同间隔相关联的相应数据元素值导出间隔二叉搜索树。在一些实施例中,来自间隔二叉搜索树的内部节点的结果数据值被推送到间隔二叉搜索树的叶节点。在一些实施例中,在控制平面中离线确定对于间隔二叉搜索树的每个出口分支占优的结果数据值。在一些实施例中,所确定的值仅存储在间隔二叉搜索树的叶节点中。在一些实施例中,间隔二叉搜索树的每个子树从相应的父树结果数据值仅继承一个默认值。在一些实施例中,对于在间隔二叉搜索树的根节点处开始的间隔二叉搜索树的所有节点的右子树,来自通向间隔二叉的子树的最近右分叉处的节点的结果数据值被存储在该子树的最左叶节点中作为该子树的最左出口分支的结果数据值。在一些实施例中,在二叉搜索树中映射的每个数据元素包括路由元素。在一些实施例中,至少一个基于范围的元素包括IP地址,相关联的路由元素包括下一跳,并且基于查找结果对分组进行分类包括将分组提供给出站接口,该出站接口根据该查找结果确定。在一些实施例中,基于查找结果对分组进行分类包括:当不能为下一跳确定出站接口时,将查找结果提供给ARM处理器以用于条目插入。在一些实施例中,ARM处理器向MPU提供分组并在MPU经由卸载应用执行LPM以将基于范围的数据映射到查找结果之后将分组接收回来。在一些实施例中,经由MPU,通过执行多个经修改的二叉搜索来确定适用于该分组的安全策略,每个经修改的二叉搜索使用来自该分组的相应数据在相应间隔二叉搜索树上执行。在一些实施例中,其中基于查找结果对分组进行分类包括执行安全策略以允许或拒绝分组。在一些实施例中,基于查找结果对分组进行分类包括将查找结果提供给ARM处理器,用于条目插入,以允许或拒绝随后在不执行策略的情况下接收到的分组。从1906,过程1900结束。
计算机系统
本文提供了可以被用于实现本公开的方法或系统的计算机系统。图20描绘了示例计算机系统2000,该计算机系统2000可以被编程或以其他方式被配置成实现本公开的方法或系统。例如,计算设备2010可以被编程或以其他方式被配置,通过采用离盒服务来在没有分组丢失的情况下升级IO子系统2070(例如,ISA)。如图所示,计算机系统2000包括计算设备2010和可选的电子显示器2080。在一些实施例中,计算设备2010基本上类似于图1中所描绘的计算系统120。
在所描绘的实施例中,计算设备2010包括CPU(本文中也是“处理器”和“计算机处理器”)2020,其可选地是单核、多核处理器或用于并行处理的多个处理器。计算设备2010还包括存储器或存储器位置2030(例如,随机存取存储器、只读存储器、闪速存储器);电子存储单元2040(例如,硬盘);用于与一个或更多个其他系统进行通信的通信界面2050(例如,网络适配器);外围设备2060(例如,缓存、其他存储器、数据存储装置和/或电子显示适配器)以及IO子系统2070(例如,IO设备,诸如智能NIC)。存储器2030、电子存储单元2040、通信界面2050、外围设备2060和IO子系统2070与CPU 2020通过诸如主板(motherboard)的通信总线(实线)通信。
在一些实施例中,CPU 2020可以执行一系列的机器可读指令,该机器可读指令可以以程序或软件来体现。指令可以被存储于存储器位置,诸如存储器2030中。指令可以被导向CPU 2020,其可以随后对CPU 2020进行编程或以其他方式配置CPU 2020,以实现本公开的方法。由CPU 2020执行的操作的实例可以包括获取、解码、执行和写回。在一些实施例中,CPU 2020是电路(诸如集成电路)的一部分。计算设备2010的一个或更多个其他部件可以可选地被包括在该电路中。在一些实施例中,该电路是ASIC或现场可编程门阵列(FPGA)。
在一些实施例中,IO子系统2070(例如,上述IO设备)包括经由PCIe与CPU 2020连接的扩展卡,诸如智能NIC。在一些实施例中,IO子系统2070是完全可编程的ASIC引擎。在一些实施例中,ASIC引擎被定制为特定的功能子集,诸如压缩和校验和,而另一个引擎专用于对称密码学。
在一些实施例中,电子存储单元2040包括用于存储数据的数据存储单元(或数据存储库)。在一些实施例中,电子存储单元2040存储文件,诸如驱动器、库、图像和保存的程序。在一些实施例中,电子存储单元2040存储用户数据,例如,用户偏好和用户程序。在一些实施例中,计算设备2010包括外部(诸如位于通过内联网或互联网进行通信的远程服务器上)的一个或更多个附加数据存储单元。
计算设备2010借助通信接口2050可选地可操作地耦合到网络,诸如在图21中所描绘的和所描述的网络2110。在一些实施例中,计算设备2010通过网络与一个或更多个远程计算机系统通信。远程计算机系统的示例包括个人计算机(例如,便携式PC)、板型或平板PC(例如,iPad、Galaxy Tab等)、智能手机(例如,iPhone、支持Android的设备、等)或个人数字助理。在一些实施例中,用户可以经由网络访问计算设备2010。
在一些实施例中,本文描述的方法通过机器(例如,计算机处理器)可执行代码的方式实现,该机器可执行代码被存储在计算设备2010的电子存储位置,诸如,例如存储在存储器2030上或电子存储单元2040上。在一些实施例中,CPU 2020适于执行代码。在一些实施例中,以软件的形式提供机器可执行或机器可读代码。在一些实施例中,在使用期间,代码由CPU 2020执行。在一些实施例中,代码从电子存储单元2040检索并存储在存储器2030上,以用于由CPU 2020迅速访问。在一些情况下,排除电子存储单元2040,而将机器可执行指令存储在存储器2040上。在一些实施例中,代码是预编译的。在一些实施例中,在运行时间期间编译代码。代码可以以编程语言的形式提供,该编程语言可被选择以便使得代码能够以预编译的或按编译原样(as-compiled)的方式被执行。
在一些实施例中,计算设备2010可以包括电子显示器2080或与电子显示器2080通信。在一些实施例中,电子显示器2080提供用户界面(UI)2085。
示例环境
图21描绘了可以被用于执行本公开的实现的示例环境2100。示例系统2100包括计算设备2102、2104和2106;后端系统2130;和网络2110。
在一些实施例中,网络2110包括局域网(LAN)、广域网(WAN)、互联网、或其组合,并连接网站、设备(例如,计算设备2102、2104和2106)和后端系统(例如,后端系统2130)。在一些实施例中,网络2110包括互联网、内联网)和/或外联网、或与互联网通信的内联网和/或外联网。在一些实施例中,网络2110包括电信和/或数据网络。在一些实施例中,可以通过有线和/或无线通信链路访问网络2110。例如,移动计算设备(例如,智能手机设备2102和平板设备2106)可以使用蜂窝网络来访问网络2110。
在所描绘的示例环境2100中,后端系统2130包括服务器设备2132和2134,其可以被用于提供所描述的系统。在一些实施例中,后端系统2130可以被部署在提供服务(诸如web服务)的数据中心、计算设备2102、2104和2106内。所描述的系统可以在示例环境2100内被采用,以通过分布式算法为可编程数据平面提供LPM实现。
在一些实施例中,后端系统2130包括在通过网络2110访问时使用集群的计算机和部件充当无缝资源的单个池的计算机系统。例如,这样的实现可以被用于数据中心、云计算、存储区域网络(SAN)和网络附加存储(NAS)应用。在一些实施例中,服务器2132和2134托管一个或更多个计算机实现的服务,其中用户2122、2124和2126可以使用相应的计算设备2102、2104和2106与该服务交互。
在一些实施例中,服务器设备2132和2134各自可以持续地类似于图20中所描绘的计算设备2010,这取决于在所描述的系统(例如,采用IO子系统来执行诸如上文所述的LPM查找的服务器)内如何使用服务器设备2132和2134。在一些实施例中,服务器设备2132和2134是服务器类硬件类型设备。
在一些示例中,用户2122、2124和2126通过在其各自的计算设备2102、2104和2106上安装和执行的图形用户界面(GUI)或应用与由后端系统2130提供的服务交互。在一些示例中,计算设备2102、2104和2106向用户2122、2124和2126可以与其交互的屏幕提供观看数据。在一些实施例中,计算设备2102、2104、2106和2132可持续地类似于图20中所描绘的计算设备2010。计算设备2102、2104、2106可以各自包括任何适当类型的计算设备,诸如台式计算机、膝上型计算机、手持计算机、平板计算机、个人数字助理(PDA)、蜂窝电话、网络器件、相机、智能手机、增强型通用分组无线电服务(EGPRS)移动电话、媒体播放器、导航设备、电子邮件设备、游戏控制台、或这些设备中的任何两个或更多个的适当组合或其他数据处理设备。在所描绘的示例中,计算设备2102是智能手机,计算设备2104是平板计算设备,并且计算设备2106是桌面计算设备。为了简单起见,在图21中描绘了三个用户计算设备2102、2104和2106。然而,可以设想,本公开的实现可以使用任何适当的计算设备来实现,诸如前面提到的那些设备。此外,本公开的实现可根据需要采用任意数量的设备。
处理设备和处理器
在一些实施例中,本文所描述的平台、系统、介质和方法包括计算机或其使用。在进一步的实施例中,计算机包括一个或更多个硬件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 (39)
1.一种可编程输入输出(IO)设备,包括:
匹配处理单元(MPU),其包括至少一个算术逻辑单元(ALU);以及
存储器单元,所述存储器单元上存储有指令,当所述指令由所述可编程IO设备执行时,使所述可编程IO设备执行包括以下项的操作:
从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;
经由所述MPU,通过使用所述分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定最长前缀匹配(LPM)来确定查找结果,其中,所述间隔二叉搜索树将所述至少一个基于范围的元素映射到相关联的数据元素;以及
基于所述查找结果对所述分组进行分类。
2.根据权利要求1所述的可编程IO设备,其中,当用于至少一个基于范围的元素的所述分组数据大于或等于分配给所述间隔二叉搜索树的当前选定节点的值时,所述经修改的二叉搜索沿一个方向遍历所述间隔二叉搜索树,并且当用于至少一个基于范围的元素的所述分组数据小于分配给所述当前选定节点的值时,所述经修改的二叉搜索沿相反方向遍历所述间隔二叉搜索树。
3.根据权利要求2所述的可编程IO设备,其中,直到完全遍历了所述间隔二叉搜索树,才确定所述经修改的二叉搜索的查找结果。
4.根据权利要求2所述的可编程IO设备,其中,所述方向和所述相反方向是根据所述经修改的二叉搜索的配置确定的。
5.根据权利要求2所述的可编程IO设备,其中,所述经修改的二叉搜索在其遍历所述间隔二叉搜索树时将数据累积在结果值中。
6.根据权利要求5所述的可编程IO设备,其中,仅当所述经修改的二叉搜索沿所述方向移动时,所述经修改的二叉搜索用分配给所述当前选定节点的值覆盖所述结果值,但当所述经修改的二叉搜索沿所述相反方向移动时,所述经修改的二叉搜索不替换所述结果值。
7.根据权利要求1所述的可编程IO设备,其中,所述存储器单元包括多个缓存行,并且其中,通过获取存储在所述缓存行的选定一个中的数据来执行所述经修改的二叉搜索。
8.根据权利要求7所述的可编程IO设备,其中,选定缓存行是基于地址计算来确定的。
9.根据权利要求7所述的可编程IO设备,其中,存储器指针不存储在所述缓存行中。
10.根据权利要求7所述的可编程IO设备,其中,查找结果数据不存储在用于所述间隔二叉搜索树的内部节点的缓存行中,并且其中,所述查找结果数据仅存储在用于叶节点的缓存行中。
11.根据权利要求7所述的可编程IO设备,其中,存储在所述缓存行中的一个中的所述间隔二叉搜索树的各个节点作为结构成员被直接访问。
12.根据权利要求7所述的可编程IO设备,其中,基于当前缓存行的地址和存储在当前缓存行中的所述间隔二叉搜索树的传出分支的索引来计算下一缓存行的地址,其中,所述传出分支的索引根据所述经修改的二叉搜索来确定。
13.根据权利要求7所述的可编程IO设备,其中,执行所述经修改的二叉搜索包括执行分布式算法,所述分布式算法包括多个级联级,其中,在所述级联级中的每一个处经由所述至少一个ALU执行算术运算或逻辑运算。
14.根据权利要求13所述的可编程IO设备,其中,所述算术运算包括:加、减、乘或除。
15.根据权利要求13所述的可编程IO设备,其中,所述逻辑运算包括:小于、大于或等于。
16.根据权利要求13所述的可编程IO设备,其中,所述级联级使用高效的分而治之方法来对处理进行分布,所述处理在每个级处使用高指数扩展和最小处理。
17.根据权利要求13所述的可编程IO设备,其中,所述间隔二叉搜索树的多个层次各自被压缩到所述缓存行的相应缓存行中,并且其中,被压缩的多个层次中的每一个在所述级联级中的一个处被处理。
18.根据权利要求1所述的可编程IO设备,其中,通过以下步骤将用于所述至少一个基于范围的元素及其相关联的数据元素的配置值转换成所述间隔二叉搜索树:
生成用于所述至少一个基于范围的元素的基于范围的值的数字线表示,作为基于范围的元素数字线,以及在另一数字线上生成与所述基于范围的值中的每一个相关联的相应数据元素值,作为表示搜索键的整个数字空间的键空间数字线;
将所述基于范围的元素数字线中的每一个投影到所述键空间数字线上,以标记所述基于范围的元素数字线中的每一个的起点和终点,使得所述键空间数字线被划分为不同的间隔,其中,不同的间隔中的每一个包括唯一的数据元素值,并且其中,所述唯一的数据元素值中的每一个表示在相应间隔之上的最深嵌套的基于范围的元素数字线的数据元素值;以及
从所述键空间数字线上的不同间隔和与所述不同间隔中的每一个相关联的相应数据元素值导出所述间隔二叉搜索树。
19.根据权利要求18所述的可编程IO设备,其中,来自所述间隔二叉搜索树的内部节点的结果数据值被推送到所述间隔二叉搜索树的叶节点。
20.根据权利要求18所述的可编程IO设备,其中,在控制平面中离线确定对于所述间隔二叉搜索树的每个出口分支占优的结果数据值,其中,所确定的值仅存储在所述间隔二叉搜索树的叶节点中。
21.根据权利要求20所述的可编程IO设备,其中,所述间隔二叉搜索树的每个子树从相应的父树结果数据值仅继承一个默认值。
22.根据权利要求21所述的可编程IO设备,其中,对于在所述间隔二叉搜索树的根节点处开始的所述间隔二叉搜索树的所有节点的右子树,来自所述节点的结果数据值被存储在所述子树的最左叶节点中作为所述子树的最左出口分支的结果数据值。
23.根据权利要求1所述的可编程IO设备,其中,映射在所述二叉搜索树中的所述数据元素中的每一个包括路由元素。
24.根据权利要求23所述的可编程IO设备,其中,所述至少一个基于范围的元素包括互联网协议(IP)地址,其中,相关联的路由元素包括下一跳,并且其中,基于所述查找结果对所述分组进行分类包括将所述分组提供给出站接口,所述出站接口根据所述查找结果被确定。
25.根据权利要求24所述的可编程IO设备,包括高级RISC机器(ARM)处理器,其中,基于所述查找结果对所述分组进行分类包括:当不能为所述下一跳确定所述出站接口时,将所述查找结果提供给所述ARM处理器,以用于条目插入。
26.根据权利要求24所述的可编程IO设备,包括高级RISC机器(ARM)处理器,其中,ARM处理器向所述MPU提供所述分组,并在所述MPU经由卸载应用执行LPM以将基于范围的数据映射到查找结果之后将所述分组接收回来。
27.根据权利要求23所述的可编程IO设备,其中,所述至少一个基于范围的元素包括互联网协议(IP)地址或L4端口,其中,所述相关联的路由元素包括路由策略,并且其中,基于所述查找结果对所述分组进行分类包括执行根据所述查找结果确定的路由策略。
28.根据权利要求23所述的可编程IO设备,其中,所述至少一个基于范围的元素包括互联网协议(IP)地址或L4端口,其中,所述相关联的路由元素包括计量的标识符,并且其中,基于所述查找结果对所述分组进行分类包括根据所述查找结果将所述分组映射到所基于的账户。
29.根据权利要求23所述的可编程IO设备,其中,所述至少一个基于范围的元素包括互联网协议(IP)地址或L4端口,其中,所述相关联的路由元素包括监管器标识符,并且其中,基于所述查找结果对所述分组进行分类包括根据所述查找结果实施流量契约。
30.根据权利要求23所述的可编程IO设备,其中,所述至少一个基于范围的元素包括互联网协议(IP)地址或L4端口,并且其中,所述相关联的路由元素包括标签。
31.根据权利要求1所述的可编程IO设备,其中,所述LPM被用于替换递归流分类(RFC)算法中的第一级查找。
32.根据权利要求1所述的可编程IO设备,其中,在访问控制列表(ACL)的单个实例中采用所述LPM的多个实例。
33.根据权利要求1所述的可编程IO设备,其中,所述操作包括:
经由所述MPU,通过执行多个经修改的二叉搜索来确定适用于所述分组的安全策略,所述多个经修改的二叉搜索中的每一个使用来自所述分组的相应数据在相应的间隔二叉搜索树上被执行,其中,基于所述查找结果对所述分组进行分类包括执行所述安全策略以允许或拒绝所述分组。
34.根据权利要求33所述的可编程IO设备,包括高级RISC机器(ARM)处理器,其中,基于所述查找结果对所述分组进行分类包括将所述查找结果提供给所述ARM处理器,以用于条目插入,以允许或拒绝随后在没有执行所述策略的情况下接收到的分组。
35.根据权利要求1所述的可编程IO设备,其中,所述查找结果是在没有进行掩蔽或与运算的情况下被确定的。
36.根据权利要求1所述的可编程IO设备,其中,所述可编程IO设备是智能服务器适配器(ISA)。
37.根据权利要求1所述的可编程IO设备,其中,所述可编程IO设备是路由器或交换机。
38.一种用于从可编程数据平面的最长前缀匹配(LPM)实现确定下一跳的方法,所述方法由可编程IO设备执行,并且包括:
从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;
经由匹配处理单元(MPU),通过使用所述分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定LPM来确定查找结果,其中,所述间隔二叉搜索树将所述至少一个基于范围的元素映射到相关联的数据元素;以及
基于所述查找结果对所述分组进行分类。
39.一种系统,包括:
可编程输入输出(IO)设备,其被配置成执行使所述可编程IO设备执行操作的指令,所述操作包括:
从入站接口接收包括用于至少一个基于范围的元素的分组数据的分组;
经由匹配处理单元(MPU),通过使用所述分组数据在间隔二叉搜索树上执行经修改的二叉搜索以确定最长前缀匹配(LPM)来确定查找结果,其中,所述间隔二叉搜索树将所述至少一个基于范围的元素映射到相关联的数据元素;以及
基于所述查找结果对所述分组进行分类。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/860,650 | 2020-04-28 | ||
US16/860,650 US11588734B2 (en) | 2020-04-28 | 2020-04-28 | Systems for providing an LPM implementation for a programmable data plane through a distributed algorithm |
PCT/US2021/029368 WO2021222224A1 (en) | 2020-04-28 | 2021-04-27 | Systems for providing an lpm implementation for a programmable data plane through a distributed algorithm |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115917520A true CN115917520A (zh) | 2023-04-04 |
Family
ID=78222984
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180031979.7A Pending CN115917520A (zh) | 2020-04-28 | 2021-04-27 | 用于通过分布式算法为可编程数据平面提供lpm实现的系统 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11588734B2 (zh) |
EP (1) | EP4143691A4 (zh) |
CN (1) | CN115917520A (zh) |
WO (1) | WO2021222224A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11212227B2 (en) | 2019-05-17 | 2021-12-28 | Pensando Systems, Inc. | Rate-optimized congestion management |
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 |
US11818022B2 (en) * | 2020-06-30 | 2023-11-14 | Pensando Systems Inc. | Methods and systems for classifying traffic flows based on packet processing metadata |
US11258707B1 (en) | 2020-08-21 | 2022-02-22 | Pensando Systems Inc. | Systems for building data structures with highly scalable algorithms for a distributed LPM implementation |
US11949605B2 (en) * | 2021-10-28 | 2024-04-02 | Avago Technologies International Sales Pte. Limited | Systems for and methods of unified packet recirculation |
CN114416150A (zh) * | 2022-01-18 | 2022-04-29 | 清华大学 | 可编程数据平面在运行时的更新方法及装置 |
US11711425B1 (en) * | 2022-10-17 | 2023-07-25 | International Business Machines Corporation | Broadcast and scatter communication operations |
Family Cites Families (40)
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 |
US6567408B1 (en) * | 1999-02-01 | 2003-05-20 | Redback Networks Inc. | Methods and apparatus for packet classification with multi-level data structure |
US7089240B2 (en) * | 2000-04-06 | 2006-08-08 | International Business Machines Corporation | Longest prefix match lookup using hash function |
AU2000266750A1 (en) * | 2000-08-17 | 2002-02-25 | Redback Networks, Inc. | Methods and apparatus for packet classification with multi-level data structure |
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 |
US20050083937A1 (en) * | 2003-10-15 | 2005-04-21 | Hyesook Lim | IP address lookup method using pipeline binary tree, hardware architecture, and recording medium |
US20050114393A1 (en) * | 2003-11-24 | 2005-05-26 | Alcatel | Dynamic forwarding method using binary search |
US7019674B2 (en) | 2004-02-05 | 2006-03-28 | Nec Laboratories America, Inc. | Content-based information retrieval architecture |
EP1779347A4 (en) | 2004-08-17 | 2009-06-17 | California Inst Of Techn | METHOD AND DEVICE FOR NETWORK EXTENSION CONTROL USING A QUEEN CONTROL AND DISTANCE DELAY MEASUREMENTS |
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 |
US8521751B2 (en) | 2008-08-22 | 2013-08-27 | Nec Corporation | Search device, a search method and a program |
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 |
CN103959314A (zh) * | 2011-07-05 | 2014-07-30 | 迈克尔·斯图尔特·舒诺克 | 用于注释图像的系统和方法 |
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 |
US8879550B2 (en) * | 2012-05-08 | 2014-11-04 | Telefonaktiebolaget L M Ericsson (Publ) | Method and apparatus for packet classification |
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 |
US10110712B2 (en) * | 2014-06-04 | 2018-10-23 | Nicira, Inc. | Efficient packet classification for dynamic containers |
US9980156B2 (en) | 2015-07-17 | 2018-05-22 | Altiostar Networks, Inc. | Optimization of downlink throughput |
US10148571B2 (en) * | 2016-06-20 | 2018-12-04 | Mellanox Technologies Tlv Ltd. | Jump on a match optimization for longest prefix match using a binary search tree |
WO2018138062A1 (en) * | 2017-01-24 | 2018-08-02 | Rockley Photonics Limited | Multi-field classifier |
CA3074282A1 (en) | 2017-08-31 | 2019-03-07 | Pensando Systems Inc. | Methods and systems for network congestion management |
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 |
US10616113B2 (en) * | 2018-07-19 | 2020-04-07 | Mellanox Technologies Tlv Ltd. | Longest prefix match using a binary search tree with compressed hash tables |
EP3734916A1 (en) * | 2019-04-29 | 2020-11-04 | Juniper Networks, Inc. | Prefix-based fat flows |
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-04-28 US US16/860,650 patent/US11588734B2/en active Active
-
2021
- 2021-04-27 CN CN202180031979.7A patent/CN115917520A/zh active Pending
- 2021-04-27 EP EP21796106.9A patent/EP4143691A4/en active Pending
- 2021-04-27 WO PCT/US2021/029368 patent/WO2021222224A1/en unknown
Also Published As
Publication number | Publication date |
---|---|
WO2021222224A1 (en) | 2021-11-04 |
US20210336883A1 (en) | 2021-10-28 |
EP4143691A4 (en) | 2024-01-17 |
US11588734B2 (en) | 2023-02-21 |
EP4143691A1 (en) | 2023-03-08 |
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 | |
CN111684769B (zh) | 包括基于表的动作的匹配处理单元的网络系统 | |
US8176300B2 (en) | Method and apparatus for content based searching | |
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 | |
CA3167334C (en) | Zero packet loss upgrade of an io device | |
US11394700B2 (en) | Proxy service through hardware acceleration using an IO device | |
US10944696B2 (en) | Variable-length packet header vectors | |
US20220166718A1 (en) | Systems and methods to prevent packet reordering when establishing a flow entry | |
US11552907B2 (en) | Efficient packet queueing for computer networks |
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 |