CN111490969A - 网络设备中的灵活报头变更 - Google Patents
网络设备中的灵活报头变更 Download PDFInfo
- Publication number
- CN111490969A CN111490969A CN202010079124.9A CN202010079124A CN111490969A CN 111490969 A CN111490969 A CN 111490969A CN 202010079124 A CN202010079124 A CN 202010079124A CN 111490969 A CN111490969 A CN 111490969A
- Authority
- CN
- China
- Prior art keywords
- header
- packet
- processor
- programmable
- processing
- 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.)
- Granted
Links
- 230000004075 alteration Effects 0.000 title claims abstract description 386
- 238000012545 processing Methods 0.000 claims abstract description 314
- 230000015654 memory Effects 0.000 claims abstract description 106
- 238000000034 method Methods 0.000 claims description 124
- 230000008859 change Effects 0.000 claims description 98
- 239000000872 buffer Substances 0.000 claims description 48
- 230000008569 process Effects 0.000 claims description 39
- 238000005538 encapsulation Methods 0.000 claims description 7
- 238000013507 mapping Methods 0.000 claims description 6
- 230000004044 response Effects 0.000 claims description 5
- 230000001133 acceleration Effects 0.000 claims description 3
- 238000012546 transfer Methods 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 19
- 238000012805 post-processing Methods 0.000 description 13
- 230000001960 triggered effect Effects 0.000 description 10
- 238000007781 pre-processing Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000001351 cycling effect Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000007493 shaping process Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 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
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- 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
-
- 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/25—Routing or path finding in a switch fabric
-
- 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/9015—Buffering arrangements for supporting a linked list
-
- 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/9084—Reactions to storage capacity overflow
- H04L49/9089—Reactions to storage capacity overflow replacing packets in a storage arrangement, e.g. pushout
- H04L49/9094—Arrangements for simultaneous transmit and receive, e.g. simultaneous reading/writing from/to the storage element
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/12—Protocol engines
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/164—Adaptation or special uses of UDP protocol
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
- H04L12/46—Interconnection of networks
- H04L12/4641—Virtual LANs, VLANs, e.g. virtual private networks [VPN]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/6245—Modifications to standard FIFO or LIFO
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本公开的实施例涉及网络设备中的灵活报头变更。由网络设备接收的分组的分组报头至少被提供给可编程报头变更引擎,该可编程报头变更引擎包括在硬件中实现的硬件输入处理器和可编程报头变更处理器,该可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令。硬件输入处理器确定分组报头将被提供给被耦合到可编程报头变更处理器的处理路径,还是将被转移到绕过可编程报头变更处理器的旁路路径,并且分组报头基于该确定而被提供给处理路径或旁路路径。分组报头被选择性地i)当分组报头被提供给处理路径时由可编程报头变更处理器处理,ii)当分组报头被提供给旁路路径时不由可编程报头变更处理器处理。
Description
相关申请的交叉引用
本公开要求于2019年1月29日提交的、名称为“可编程报头变更(ProgrammableHeader Alteration)”的美国临时专利申请号62/798,240的权益,该申请通过引用而被整体并入本文。
技术领域
本发明总体上涉及网络设备(诸如网络交换机、网桥、路由器等),并且更具体地,涉及处理网络设备中的分组。
背景技术
诸如网桥和路由器的网络设备基于分组的报头中的地址通过网络转发分组。网络设备通常包括被耦合到不同网络链路的多个端口。网络设备通常经由一个端口接收分组,并至少处理分组的报头以决定网络设备应经由哪个或哪些其他端口发送分组。然后,网络设备将分组转发到所确定的一个或多个其他端口。
在分组的处理期间,网络设备通常在分组的传输之前执行报头变更以修改分组中的至少一些分组的报头。通常,使用能够以线速执行报头修改操作的硬件引擎来执行报头变更。这种硬件报头变更引擎通常实现某些预先确定的报头变更操作,并且缺乏用于支持各种类型的报头和多功能报头变更处理集的灵活性。虽然利用处理器基于可编程指令来执行报头变更的报头变更引擎的软件实现更加灵活,但是纯软件实现无法支持足够高的分组速率和/或不能支持足够多样的报头变更操作。
发明内容
在实施例中,用于处理网络设备中的分组的方法包括:在网络设备的分组处理器处接收由网络设备从网络链路接收的分组;利用分组处理器确定至少一个出口接口,分组将由网络设备经由该至少一个出口接口而被传输;向分组处理器的可编程报头变更引擎提供分组的至少分组报头,可编程报头变更引擎包括:i)在硬件中被实现的硬件输入处理器和ii)被耦合到程序存储器的可编程报头变更处理器,可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作;利用可编程报头变更引擎的硬件输入处理器确定分组报头将被提供给被耦合到可编程报头变更处理器的处理路径,还是将被转移到绕过可编程报头变更处理器的旁路路径;利用可编程报头变更引擎的硬件输入处理器,基于分组报头将被提供给处理路径还是将被转移到旁路路径的确定,将分组报头提供给处理路径或旁路路径;选择性地i)当分组报头被提供给处理路径时,由可编程报头变更处理器处理分组报头,ii)当分组报头被提供给旁路路径时,不由可编程报头变更处理器处理分组报头;以及使用网络设备经由网络设备的至少一个出口接口发送分组。
在另一实施例中,网络设备包括分组处理器和可编程报头变更引擎,该分组处理器被配置为:i)从网络链路接收分组,以及ii)确定至少一个出口接口,分组将由网络设备经由该至少一个出口接口而被传输,该可编程报头转换引擎包括i)在硬件中实现的硬件输入处理器,以及ii)被耦合到程序存储器的可编程报头变更处理器,可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作。硬件输入处理器被配置为确定分组的分组报头将被提供给被耦合到可编程报头变更处理器的处理路径,还是将被转移到绕过可编程报头变更处理器的旁路路径,以及基于分组报头将被提供给处理路径还是将被转移到旁路路径的确定,将分组报头提供给处理路径或旁路路径。可编程报头变更处理器被配置为选择性地:i)当报头被提供给处理路径时处理分组报头,以及ii)当分组报头被提供给旁路路径时不处理分组报头。分组处理器还被配置为使得分组经由网络设备的至少一个出口接口被传输。
在又一实施例中,用于处理网络设备中的分组的方法包括:在网络设备的分组处理器处接收由网络设备从网络链路接收的分组;利用分组处理器确定至少一个出口接口,分组将由网络设备经由该至少一个出口接口而被传输;使用耦合到程序存储器的可编程报头变更处理器处理分组的分组报头,可编程报头变更处理器被配置为执行存储在程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作,处理包括触发硬件校验和加速器引擎以计算针对与分组报头的至少一部分相对应的比特串的校验和,其中触发硬件校验和加速器引擎包括:i)将比特串划分成比特串的多个分段,以及ii)向硬件校验和加速器引擎传送比特串的多个分段;使用硬件校验和加速器,至少通过对传输到硬件校验和加速器引擎的比特串的多个分段中的相应分段进行递增求和来递增计算校验和;以及经由网络设备的至少一个出口接口发送具有经修改的报头的分组,该经修改的报头包括校验和。
在又一实施例中,网络设备包括分组处理器和可编程报头变更处理器,该分组处理器被配置为i)从网络链路接收分组,分组包括分组报头和有效载荷,以及ii)确定至少一个出口接口,分组将由网络设备经由至少一个出口接口而被传输,可编程报头变更处理器被耦合到程序存储器,可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令,以对接收到的分组的分组报头执行一个或多个报头变更操作,可编程报头变更处理器被配置为在处理接收到的分组的分组报头期间,触发硬件校验和加速器引擎,以计算与分组报头的至少一部分相对应的比特串的校验和。可编程报头变更处理器被配置为将比特串分割成比特串的多个分段,并将比特串的多个分段传输到硬件校验和加速引擎。硬件校验和加速器引擎被配置为:至少通过对传输到硬件校验和加速器引擎的比特串的多个分段中的相应分段进行递增求和来递增计算校验和。分组处理器进一步配置,使具有经修改的报头的分组经由网络设备的至少一个出口接口被发送,该经修改的报头包括校验和。
附图说明
图1是根据实施例的包括可编程报头变更引擎的示例网络设备的框图。
图2是根据实施例的图1的网络设备的可编程报头变更引擎的输入处理单元的框图。
图3是根据实施例的用于通过图1的可编程报头变更引擎来确定分组是否将绕过报头变更的方法的流程图。
图4A是示出根据实施例的由图1的可编程报头变更引擎执行的从分组报头提取报头变更处理器可访问报头的过程的示图。
图4B是根据实施例的被执行以在图1的可编程报头变更引擎处理报头变更可访问报头之后生成经处理的分组报头的过程的示图。
图5是根据实施例的图1的可编程报头变更引擎的报头变更处理器的框图。
图6是根据实施例的图5的报头变更处理器中包括的示例分组处理节点的框图。
图7是根据实施例的图6的分组处理节点的处理器使用的示例存储器映射的框图。
图8A-图8B是示出根据实施例的由图7的分组处理节点的处理器发出的数个示例加速器引擎触发指令的示图。
图9是根据实施例的用于在图1的网络设备中处理分组的示例方法的流程图。
图10是根据实施例的用于在图1的网络设备中处理分组的示例方法的流程图。
具体实施方式
在下文描述的实施例中,网络设备包括可编程报头变更引擎,其包括可编程报头变更处理器,该可编程报头变更处理器被耦合到程序存储器,并且被配置为通过执行存储在程序存储器中的计算机可读指令来实现报头变更操作。通常,由于使用可编程报头变更处理器执行在程序存储器中存储的计算机可读指令来执行报头变更,所以报头变更引擎可灵活地可编程/可配置以执行必要的报头变更操作,例如,取决于正在处理的特定分组和/或使用网络设备的特定场景。
在本文描述的各种实施例中,可编程报头变更引擎包括允许可编程报头变更引擎以线速支持报头变更的各种能力。例如,可编程报头变更引擎包括用于某些分组动态绕过报头变更的能力,这些分组可以不需要由可编程报头变更处理器进行报头变更,从而,在实施例中,允许这些分组快速通过可编程报头变更引擎,同时还增加可用于处理需要由可编程报头变更处理器进行报头变更的分组的处理功率。为了快速高效地处理需要由可编程报头变更引擎进行报头变更的分组报头,可编程报头变更引擎被配置为执行以下中的一项或多项:i)选择分组报头的一个或多个部分,并将所选择的部分而不是整个分组报头提供给处理器以对分组报头执行报头变更操作;ii)对分组报头(或所选择的分组报头的一个或多个部分)进行分段,使得分组报头的一个或多个部分可以高效地被传送到处理器;iii)标识用于处理分组报头的一个或多个部分的特定指令线程,并且向处理器提供所标识的指令线程的指示,使得可以在处理器接收到分组报头时更快地(例如,立即)开始执行指令;iv)以允许需要相对较慢(例如更长)的处理线程进行处理的分组不阻塞需要相对较快(例如较短)的处理线程进行处理的分组的方式,在可编程报头变更处理器的多个分组处理节点之间有效地分配分组报头;v)并行地将不同分组的分组报头提供给可编程的分组报头变更处理器的不同分组处理节点,以用于分组报头的并发处理;vi)高效地触发外部加速器引擎以执行在处理分组报头期间的某些处理操作等。本文描述的这些和其他机制允许可编程报头变更引擎提供可编程报头变更的灵活性,同时还允许报头变更足够快地执行,例如支持分组线速度的报头变更。
图1是根据实施例的示例性网络设备100的简化框图,该示例性网络设备100被配置为使用本公开的分组报头变更技术。网络设备100通常在两个或多个计算机系统、网络分段、子网等之间转发分组。例如,在一个实施例中,网络设备100是路由器。然而,需要注意的是,网络设备100不一定限于特定的协议层或特定的网络技术(例如,互联网协议)。例如,在其他实施例中,网络设备100适当地是网桥、交换机、虚拟专用网络(VPN)集中器等。
网络设备100包括多个网络接口(例如,端口)102,该多个网络接口102被配置为被耦合到相应的网络链路。尽管在图1中示出了六个网络接口102,但是在各种实施例中,网络设备100包括任何适当数目的网络接口102。网络设备100还包括被耦合到网络接口102的分组处理器104。在一个实施例中,由网络设备100接收的分组由用于处理分组的分组处理器104提供。在一些实施例中,分组被存储在分组存储器(未示出)中,并且与分组相对应的数据单元(而不是分组本身)被提供给用于处理分组的分组处理器104。在一些实施例中,除分组描述符之外或代替分组描述符,分组的部分(例如分组报头)被提供给分组处理器104,而分组的其余部分被存储在分组存储器中。为了便于解释,本文中术语“分组”被用来指代以下项的任何组合:分组本身、分组的分组报头和对应于分组的分组描述符。
一般而言,分组处理器104被配置为:接收和处理经由入口网络接口102接收的分组,确定要经由其发送分组的相应出口网络接口102,并使分组经由所确定的出口网络接口102发送。在一个实施例中,分组处理器104包括转发引擎106和分组分类器108。转发引擎106被配置为分析经由网络接口102接收的分组中的报头信息,以确定要经由其发送分组的网络接口102(本文中被称为“目标端口”)。仅作为说明性示例,转发引擎106被配置为使用分组的报头中的目的地地址来在存储目的地地址和网络接口102之间的对应关系的转发数据库(未示出)中执行查找,以确定要经由其传输分组的特定网络接口102。作为另一说明性示例,转发引擎106被配置为使用分组报头中的VLAN ID来在存储VLAN ID和网络接口102之间的对应关系的转发数据库(未示出)(例如,上面讨论的相同的转发数据库或不同的转发数据库)中执行查找,以确定分组的一组特定的目标网络接口102。根据一个实施例,转发引擎106被配置为将目标端口(或多个目标端口的集合)的ID存储在与分组相对应的分组描述符中。
根据一个实施例,分组分类器108被配置为通过分析分组的分组报头中的至少信息来确定分组属于哪个分组流。在一些实施例中,分组分类器108被配置为通过附加地或备选地分析与分组相关联的其他信息(例如,经由其接收分组的网络接口102的标识符)来确定分组属于哪个分组流。分组流对应于共享某些共享特征的分组。作为一个示例,一些流(例如互联网协议(IP)传输控制协议(TCP)/用户数据报协议(UDP)流)在网络行业中通常由5元组定义,例如{目标IP地址、源IP地址、L4协议、UDP/TCP目的地端口、UDP/TCP源端口}。作为另一示例,在实施例中,特定分组流可以被定义为具有具有特定源地址和特定目的地地址的报头的分组。在各种实施例中,分组流可以被定义为具有特定公共信息的报头的分组,该特定公共信息例如以下项中的一个或多个:i)特定源地址、ii)特定目的地地址、iii)特定虚拟局域网(VLAN)标识符(ID)、iv)特定优先级、v)特定分组类型等。根据一个实施例,分类器108被配置为将相应流ID分配给至少一些分组,其中,流ID指示分组所属于的相应流。根据一个实施例,分组分类器108被配置为将分配给分组的流ID存储在与分组相对应的分组描述符中。
在一些实施例中,分组分类器108(或另一单元)被配置为附加地确定分组的类型,例如,通过分析分组的分组报头的初始部分和/或以及除形成分组报头之外获得的信息,例如,网络设备100接收分组所通过的源端口的标识符、网络设备100发送数据包所通过的目标端口(或多个目标端口的集合)的标识符、分配给数据包的流ID等。在各种实施例中,分组分类器108(或另一单元)基于以下项中的一项或多项来确定分组的分组类型:分组的目的地、分组所属于的流、分组的以太网类型、分组是否是虚拟局域网(VLAN)标记的分组等。根据实施例,分组分类器108(或另一单元)被配置为将相应的分组类型ID指派给至少一些分组,其中分组类型ID指示分组的分组类型。根据一个实施例,分组分类器108(或另一单元)被配置为将分配给分组的分组类型ID存储在与分组相对应的分组描述符中。
在一个实施例中,分组处理器104还包括可编程报头变更引擎110。可编程报头变更引擎110被配置为执行报头变更操作,以修改由分组处理器104处理的分组中的至少一些分组的报头。在各种实施例中,例如,由可编程报头变更引擎110执行的报头变更操作包括:在分组的报头中设置显式拥塞通知(ECN)标记、在分组的报头中设置信道化流控制指示、在分组的报头中插入或更新时间戳、向分组的报头添加转发标记、从分组的报头中移除转发标记、更新分组的报头中的转发标记、更新分组的报头中的透明时钟校正字段、更改分组的报头中的下一跳地址、添加封装报头、移除封装报头等。
可编程报头变更引擎110包括可编程报头变更处理器112。在一个实施例中,可编程报头变更处理器112包括分组处理阵列(PPA),该分组处理阵列(PPA)具有耦合到程序存储器116的多个分组处理节点114。在一个实施例中,可编程报头变更处理器112的每个分组处理节点114包括分组报头处理器(例如,小型通用中央处理单元(CPU)),该分组报头处理器被配置为执行存储在程序存储器116中的计算机可读指令以执行报头变更操作。在一个实施例中,在每个分组处理节点114中包括的小CPU是从Tensilica可获得的CPU(例如Xtensa LX5 CPU)或其他合适的CPU(例如ARC、RISCV、ARM、MIPS等)。在一个实施例中,CPU包括用于从程序存储器(例如,程序存储器116)读取指令的单个指令接口、用于实现指令的7个处理管级和用于与数据存储器交互的单个读/写接口。在一个实施例中,CPU还包括一个或多个逻辑控制单元(LCU)和多个(例如8、16、32等)寄存器,例如32位寄存器或其他合适大小的寄存器。在其他实施例中,利用其他合适的CPU架构。
在一些实施例中,可编程报头变更引擎110附加地包括或被耦合到纯硬件报头变更引擎(未示出),该纯硬件报头变更引擎被配置为在硬件中执行报头变更操作。在各种实施例中,例如,纯硬件报头变更引擎被耦合到可编程报头变更引擎110的输入或可编程报头变更引擎110的输出。在这种实施例中,纯硬件报头变更引擎硬连接以实现某些报头变更操作,而可编程报头变更处理器110可配置为实现未硬连接到纯硬件报头变更引擎的其他报头变更操作。
在一个实施例中,可编程报头变更引擎110还包括输入处理器118、统一旁路缓冲区120、输出处理器122和流合并器124。在一个实施例中,输入处理器118在硬件中实现,并且输入处理器118有时在本文中被称为“硬件输入处理器”118。在一个实施例中,硬件输入处理器118使用被配置为如本文所述操作的一个或多个集成电路来实现。在其他实施例中,输入处理器118以其它适当方式实现。在一个实施例中,输入处理器118被配置为执行提供给可编程报头变更引擎110的分组报头的预处理。在一个实施例中,分组报头的预处理包括确定处理线程标识符(线程ID),该处理线程标识符指示将由可编程报头变更引擎110对分组报头执行的处理的类型。在一个实施例中,输入处理器118基于与分组相关联的分组流和/或基于分组的分组类型来确定线程ID。在一个实施例中,输入处理器118被耦合到存储分组流和/或分组类型与线程ID之间的关联的配置存储器119,并且输入处理器118被配置为从配置存储器119获取报头,在实施例中,基于与分组相关联的分组流ID和/或与分组相关联的分组类型ID的与分组相对应的线程ID。在一个实施例中,分组报头的预处理还包括对分组报头作出旁路决策,以确定分组报头是被提供给可编程报头变更处理器112以用于处理还是被可编程报头变更处理器112旁路处理。在一个实施例中,输入处理器118被配置为至少部分地基于与分组相关联的分组流和/或分组类型来作出旁路决策。在实施例中,输入处理器118被配置为至少部分地基于针对分组获得的线程ID和/或基于输入处理器118可以从配置存储器119针对分组获得的其他配置属性(例如,统计属性)来作出旁路决定。在一些实施例中,输入处理器118基于可编程报头变更处理器112的拥塞状态附加地或备选地作出旁路决策。下面参照图3更详细地描述由输入处理器118实现以根据一个实施例作出旁路决策的示例方法。
在一个实施例中,当输入处理器118确定分组是将绕过可编程报头变更处理器112的处理的旁路分组时,输入处理器将分组报头写入统一旁路缓冲区120。在实施例中,当输入处理器118确定分组是将被提供给可编程报头变更处理器112的非旁路分组时,输入处理器118将分组报头提供给可编程报头变更处理器112。在另一实施例中,输入处理器118选择分组报头的一个或多个部分,并且将分组报头的所选择的一个或多个部分而不是整个分组报头提供给可编程报头变更处理器112。在一些实施例中,输入处理器118附加地生成与分组相对应的元数据,并将元数据连同分组报头的所选择的一个或多个部分一起提供给可编程报头变更处理器112。在实施例中,元数据包括由用于处理分组报头的可编程报头变更处理器112使用的处理线程的标识符(例如,线程ID)。在一些实施例中,元数据还包括由用于处理分组报头的可编程报头变更处理器112使用的其他信息。在实施例中,在分组报头被提供给可编程报头变更处理器112之前,元数据被提供给可编程报头变更处理器112,以允许可编程报头变更处理器112的分组处理节点114的处理器基于在接收分组报头之前包括的指示,从程序存储器116获取与所标识的处理线程相对应的计算机可读指令,从而在实施例中,可以在处理器接收到分组报头时立即开始分组报头的处理。
在实施例中,输入处理器118还将整个分组报头、或至少没有被提供给可编程报头变更处理器112的分组报头的剩余部分写入到统一旁路缓冲区120。如将在下文更详细地解释的,在实施例中,在分组报头的所选择的一个或多个部分被可编程报头变更处理器112处理之后,整个分组报头、或者至少分组报头的没有被提供给可编程报头变更处理器112的部分从统一旁路缓冲区被获取,使得分组报头可以被重构。
在实施例中,输入处理器118被配置为在统一旁路缓冲区120中的队列中(例如,先进先出(FIFO)队列或链接列表队列)写入旁路分组。例如,在实施例中,输入处理器118被配置为维持被存储在统一旁路缓冲区120中的旁路分组的链表。在操作中,在实施例中,当输入处理器118要将旁路分组写入到统一旁路缓冲区120时,输入处理器118从由输入处理器118维持的空闲缓冲区ID 121的池获得缓冲区的标识符(“缓冲区ID”)。在实施例中,空闲缓冲区ID 121的池中的空闲缓冲区ID标识统一旁路缓冲区120中的空闲缓冲区位置。在实施例中,输入处理器118然后将缓冲区ID放置在链表的尾部,并且将分组报头写入统一旁路缓冲器120中的所标识的缓冲区位置。由于输入处理器118将旁路分组存储在队列中,因此可编程报头变更引擎110维持旁路分组的次序,并且随后按分组被可编程报头变更引擎110接收的次序来输出旁路分组。
另一方面,在实施例中,被提供至可编程报头变更处理器112的非旁路分组的次序在必要时由可编程报头变更处理器112来维持。相应地,输入处理器118不需要维持统一旁路缓冲区120中的非旁路分组的队列。在实施例中,当输入处理器118要将处理流分组写入到统一旁路缓冲区120时,输入处理器118从空闲缓冲区ID的拉取(pull)获得缓冲区ID,包括元数据中的针对分组生成的缓冲区ID,并且将分组写入到统一旁路缓冲区120中的经标识的缓冲区。在实施例中,随后,当可编程报头变更处理器112完成对分组报头的所选择的一个或多个部分的处理时,分组从被包括在与该分组相对应的元数据中的缓冲区ID所指示的缓冲区位置被获取。在实施例中,因为旁路分组被存储在统一旁路缓冲区120中的队列中、并且处理流分组被存储在统一旁路缓冲区120中的非队列缓冲区位置中,所以统一旁路缓冲区120充当用于旁路分组的队列缓冲区(例如,FIFO缓冲区或链表缓冲区),并且充当用于由可编程报头变更处理器112处理的分组的随机存取存储器(RAM)。
继续参考图1,被提供给可编程报头变更处理器112的分组报头在用于分组处理的处理节点114之间被分发。在实施例中,可编程报头变更处理器112实现再循环机制,以在处理节点114之间分发分组报头,并随后从处理节点114获得经处理的分组报头,使得分组流内的次序被维持为通过可编程报头变更处理器112的分组流。在实施例中,如在下文更详细地描述的,再循环机制允许:在维持分组流内的分组次序时,需要由可编程报头变更处理器112进行相对更短处理时间的分组流不被需要由可编程报头变更处理器112进行相对更长处理时间的分组流阻塞。
在实施例中,输出处理器122被配置为对由可编程报头变更处理器112处理的分组执行后处理。在实施例中,输出处理器122在硬件中被实现,并且输出处理器122在本文中有时被称为“硬件输出处理器”122。在实施例中,硬件输出处理器122使用被配置为按本文描述来操作的一个或多个集成电路而被实现。在其他实施例中,输出处理器122以其他合适方式被实现。在实施例中,输出处理器122被配置为对经处理的分组执行一个或多个检查,以检测可能由于可编程报头变更处理器112对分组的处理而导致的错误,在实施例中。在实施例中,输出处理器122被配置为从统一旁路缓冲区120获取对应的分组,并且通过将分组报头的经处理的一个或多个部分并入到从统一旁路缓冲区120获取的分组报头中来重构分组报头。
在实施例中,流合并器124将由输出处理器122输出的分组流与从统一旁路缓冲区120获取的旁路分组流合并。在实施例中,可编程报头变更引擎110提供合并的流以用于分组的进一步处理和/或从网络设备100的分组的传输。例如,在实施例中,可编程报头变更引擎110向出口队列和成形单元128提供合并的流,出口队列和成形单元128将分组在与要经由其传输分组的出口网络接口102相对应的出口队列中排队,随后使分组经由对应的出口网络接口102被传输。
总体上,在至少一些实施例中,由于可编程报头变更引擎110被配置为使用执行计算机可读指令的处理器来执行报头变更功能,因此报头变更110可灵活地被配置为关于由网络设备100正在处理的各种分组执行必要的报头变更操作,例如,至少与其中分组报头变更完全在硬件中被实现的系统相比。进一步地,在各种实施例中,可编程报头变更引擎110包括本文描述的各种能力,其允许可编程报头变更引擎110在足够快地执行必要报头变更的同时提供该灵活性,例如以支持分组线速。
图2是根据实施例的适用于与网络设备的可编程报头变更引擎一起使用的输入处理器200的框图。在实施例中,输入处理器200与图1的网络设备100的可编程报头变更引擎110的输入处理器118相对应。出于示例性的目的,输入处理器200在下文中参照图1的网络设备100的可编程报头变更引擎110被描述。然而,在其他实施例中,输入处理器200与不同于可编程报头变更引擎110和/或不同于网络设备100的网络设备一起被使用。
输入处理器200包括线程标识符204。线程标识符204被配置为至少部分地基于流和/或分组类型来确定针对分组报头的线程ID。在实施例中,线程标识符204被配置为访问被存储在存储器210中的线程ID表212,并且从线程ID表212获得针对分组的线程ID。在实施例中,线程标识符204被配置为基于以下中的一项或者两项或更多项的组合来标识线程ID表212中的条目:i)分组的源端口,(ii)分组的目标端口,iii)分组的流,iv)分组类型等;并且从线程ID表212中的经标识的条目获取线程ID。
在实施例中,输入处理器200还包括旁路判定单元206,该旁路判定单元206被配置为确定分组是经由处理路径而被提供给可编程报头变更处理器112,还是被转移到绕过可编程报头变更处理器112的旁路路径。
图3是根据实施例的用于确定分组是经由处理路径而被提供给可编程报头变更处理器,还是被转移到绕过可编程报头变更处理器的旁路路径的方法300的流程图。在实施例中,方法300由图2的输入处理单元200所实现。例如,在实施例中,方法300的至少一部分由图2的输入处理单元200的旁路判定引擎206来执行。为了便于说明,参考图2的输入处理单元200描述方法300。然而,在一些实施例中,方法300由不同于图2的输入处理单元200的合适的处理单元实现。
在框302,输入处理器200(例如,旁路判定引擎206)确定与分组相关联的线程ID是否指示该分组属于绕过可编程报头变更处理器112的旁路流。例如,旁路判定引擎206检查与分组相关联的线程ID是否等于指示分组属于旁路流的特定值(例如,线程ID=0)。如果旁路判定引擎206在框302确定分组属于旁路流,则方法300在框304终止,其中判定该分组将绕过可编程报头变更处理器112。
另一方面,在实施例中,如果旁路判定引擎206在框302确定分组属于处理流,则输入处理器200(例如,第一级线程配置单元208)获得另外的旁路配置信息,并且旁路判定引擎206另外进行确定分组是否将在旁路配置信息上被转移到旁路路径。为了获得另外的旁路配置信息,在实施例中,第一级线程配置单元208基于与分组相关联的线程ID来在存储器202中访问旁路线程配置表214,并且从旁路线程配置表214获取被配置用于对应的处理线程的一个或多个旁路属性,诸如:i)被配置用于对应的处理线程的统计因子,ii)被配置用于对应的处理线程的统计处理模式,以及iii)被配置用于对应的处理线程的停顿模式。
然后,方法300进行到框306,在框306处,旁路判决引擎206(例如,从被包括在旁路判决引擎206中或被耦合到旁路判决引擎206的伪随机数生成器)获得伪随机生成数(PRGN),并且将PRGN与对应的处理线程的统计因子相比较。基于在PRGN与对应的处理线程的统计因子之间的比较,旁路判决引擎206确定是否要统计地选择分组以绕过可编程报头变更处理器112。例如,在实施例中,如果旁路判决引擎206在框306确定PRGN大于还是等于对应的处理线程的统计因子,这指示该分组将由可编程报头变更处理器112针对报头变更而被统计地选择,并且方法300进行到框308。另一方面,在实施例中,如果旁路判决引擎206在框306确定PRGN小于对应的处理线程的统计因子,则这指示分组将被统计地选择以绕过可编程报头变更处理器112,并且该方法300在框310继续。
在框310,旁路判决引擎206基于被配置用于对应的处理线程的统计处理模式来确定统计处理模块是否被启用用于对应的处理线程。如果旁路判决引擎206在框310确定统计处理模式被启用用于对应的处理线程(例如,如果统计处理模式被设置为逻辑1),则方法300在旁路框304终止,从而统计地将分组转移到旁路路径。另一方面,在实施例中,如果旁路判决引擎206在框310确定统计处理模式未被启用用于对应的处理线程(例如,如果统计处理模式被设置为逻辑0),则旁路判决引擎206不会统计地选择将被转移到旁路路径的分组,并且方法300进行到框311,在框311,与分组相对应的线程ID被重新映射到“不做任何事”线程。在实施例中,方法300然后返回到框308。
在框308,旁路判决引擎206确定可编程报头变更处理器112的拥塞级别。在实施例中,旁路判决引擎206基于来自可编程报头变更处理器112的反馈信号(例如,反压信号)来确定拥塞级别。如果旁路判决引擎206确定可编程报头变更处理器112不忙碌,或者可编程报头变更处理器112的拥塞级别足够低,则方法300在框318终止,其中决定将分组提供给可编程报头变更处理器112。另一方面,在实施例中,如果旁路判决引擎206确定可编程报头变更处理器112忙碌、或者可编程报头变更处理器112的拥塞级别不足够低,则方法300进行到框312-316,在框312-316,做出进一步确定以确定分组是否绕过可编程报头变更处理器112。
在框312,旁路判决引擎206基于被配置用于对应的处理线程的停顿模式来确定:处理线程在可编程报头变更处理器112繁忙时是否允许分组绕过报头变更。如果旁路判决引擎206在框312确定处理线程不允许分组绕过报头变更(例如,如果线程停顿模式ID被设置为逻辑00),则方法300在框318终止,其中决定分组将被提供给可编程报头变更处理器112。另一方面,如果旁路判决引擎206在框312确定处理线程允许分组绕过报头变更处理(例如,如果线程停顿模式ID没有被设置为逻辑00),则方法300进行到框314,其中旁路判决引擎206基于处理线程的停顿模式来确定处理线程是否允许绕过可编程报头变更处理器112的处理的分组被网络设备100丢弃。如果旁路判决引擎206在框314确定处理线程的停顿模式指示与不由可编程报头变更处理器112进行报头变更的处理线程相关联的分组将被网络设备100丢弃,则方法300在旁路框304终止,其中指示分组随后将被网络设备100丢弃。
另一方面,如果旁路判决引擎206在框314确定处理线程的停顿模式指示与没有进行可编程报头变更处理器112的处理的处理线程相关联的分组没有被网络设备100丢弃,则方法300进行到框316,其中旁路判决引擎206确定处理线程的停顿模式指示没有进行可编程报头变更处理器112的处理的分组是否:i)仍然将被提供给可编程报头变更处理器112以维持与处理线程相关联的分组的适当次序,作为通过可编程报头变更引擎110的分组流,ii)将被重新定向到旁路路径并且不被提供给可编程报头变更处理器112。在实施例中,如果在框316确定分组仍然将被提供给可编程报头变更处理器112,则方法300进行到框317,其中与该分组相对应的线程ID被重新映射到“不做任何事”线程。在实施例中,分组方法300然后在框318终止,其中决定将分组提供给可编程报头变更处理器112,使得分组流穿过可编程报头变更处理器112,而不会由可编程报头变更处理器112处理。另一方面,如果在框316确定分组将被重新定向到旁路路径、并且不被提供给可编程报头变更处理器112,则方法300在框304利用旁路判决而终止,从而将分组重新定向到旁路路径。
再次参考图2,在实施例中,输入处理器200还包括第二级配置单元210,元数据生成器212和报头提取器214,其被配置为关于不绕过可编程报头变更处理器112的处理的分组来执行附加预处理操作。在实施例中,第二级配置单元210被配置为基于与分组相对应的线程ID来在存储器202中访问第二级线程配置表216,并且获得线程配置信息,该线程配置信息将被用于可编程报头变更处理器112对分组的处理。附加地或备选地,在实施例中,第二级配置单元210被配置为基于源端口的指示符来访问源端口配置表218和/或基于目标端口的指示符来访问目标端口配置表220,分组在该源端口被接收,分组经由该目标端口被传输以获得配置信息,该配置信息将被由可编程报头变更处理器112使用,以用于处理经由源端口接收的分组和/或经由目标端口传输的分组。在其他实施例中,其他合适的配置信息通过第二级配置单元210而被获得。在实施例中,元数据生成器212被配置为生成针对分组的元数据,以至少包括通过第二级配置单元210而被获得的配置信息。
在实施例中,分组提取器214被配置为提取分组的分组报头的一个或多个部分,并且生成变更处理器可访问报头以包括从分组报头提取的一个或多个部分。图4A-图4B是分别图示了根据实施例的提取分组报头400的一个或多个部分以生成变更处理器可访问报头402、以及在由可编程报头变更处理器112处理变更处理器可访问报头400之后生成经处理的分组报头450的图。在实施例中,分组报头400与正在被网络设备100处理的所接收的分组的未经变更的报头相对应。在另一实施例中,其中可编程报头变更引擎110之前是与可编程报头变更引擎110的输入耦合的纯硬件报头变更引擎,分组报头400对应于接收到的分组的、(在至少一些场景下)被纯硬件报头变更引擎所变更的报头。参照图1和图2,根据实施例,输入处理器118(例如,图2中的报头提取器208)生成变更处理器可访问报头402,并且输出处理器122在变更处理器可访问报头402被可编程报头变更处理器112处理之后,随后生成经处理的分组报头450。以示例的方式,在图4A-图4B中,在图1的网络设备100的上下文中图示了变更处理器可访问报头提取和经处理的报头生成。在其他实施例中,图4A-图4B中图示的变更处理器可访问报头提取和经处理的报头生成由不同于图1的网络设备100的网络设备来执行。
在实施例中,根据实施例,输入处理器118基于可访问报头锚点406来标识变更处理器可访问报头部分404,该变更处理器可访问报头部分404将从分组报头400被提取,可访问报头锚点406指示起始位置(例如,第一比特)和将从分组报头400被提取的单个部分的长度。在实施例中,可访问报头锚点406与处理线程相关联,该处理线程将被用于处理分组报头400。在实施例中,输入处理器118基于与分组报头400相关联的线程ID(例如,通过图2的线程标识符204确定的)来从配置处理器116获得可访问报头锚点406。在实施例中,输入处理器118在由可访问报头锚点406指示的位置处开始、并且提取由可访问报头锚点406指示的长度的变更处理器可访问报头部分404,并且生成变更处理器可访问报头402,以包括从分组报头400提取的变更处理器可访问报头部分404。
在实施例中,输入处理器118将变更处理器可访问报头402提供给可编程报头变更处理器112以用于处理。另外,在实施例中,输入处理器118将整个分组报头400存储在统一旁路缓冲器120中。在另一实施例中,输入处理器118在统一旁路缓冲器120中存储分组报头412的预可访问报头部分410和后可访问报头部分412,而不是整个分组报头400。
现在参考图4B,在实施例中,可编程报头变更处理器112处理变更处理器可访问报头402以生成后处理变更处理器可访问报头454。在实施例中,后处理变更处理器可访问报头452包括根据分组报头400与之相关联的处理线程而变更的变更处理器可访问报头404。在实施例中,后处理变更处理器可访问报头452被提供给输出处理器112,并且输出处理器112通过将后处理变更处理器可访问报头454并入分组报头400中来生成经处理的分组头450。例如,在实施例中,输出处理器122从统一旁路缓冲器120获取整个分组报头400,并且用后处理变更处理器可访问报头454替换变更处理器可访问报头部分404。在另一实施例中,输出处理器112从统一旁路缓冲器120获取预可访问报头部分410和后可访问报头部分412,并且通过适当地组合预可访问报头部分410和后可访问报头部分412与后处理变更处理器可访问报头454来生成处理后的分组报头450。
继续参照图4A-图4B,尽管变更处理器可访问报头402在图4A中被图示为仅包括从分组报头400提取的单个变更处理器可访问报头部分404,但是在其他实施例中,变更处理器可访问报头402包括从分组报头400提取的多个变更处理器可访问部分404。在实施例中,多个变更处理器可访问部分404中的至少一些是分组报头400的非连续部分。例如,输入处理器118获得(例如,基于与分组报头400相关联的线程ID)多个可访问报头锚点406,其中多个可访问报头锚中的各个报头锚指示将被包括在变更处理器可访问报头402中的多个(例如,非连续的)变更处理器可访问部分404中的相应变更处理器可访问部分的开始位置和长度。在实施例中,输入处理器118然后从分组报头400提取多个变更处理器可访问部分404,并且生成变更处理器可访问报头402以包括从分组报头400提取的多个变更处理器可访问部分402。在实施例中,可编程报头变更处理器112处理变更处理器可访问报头402以生成后处理变更处理器可访问报头452,该后处理变更处理器可访问报头452包括多个后处理变更处理器可访问报头部分。在实施例中,然后,通过将被包括在后处理变更处理器可访问报头452中的多个后处理变更处理器可访问报头部分并入到经处理的分组报头450的相应后处理变更处理器可访问报头部分454中,输出处理器122生成经处理的分组报头450。
在一些实施例中,其中可编程报头变更引擎110之后是纯硬件报头变更引擎,然后,纯硬件报头变更引擎对经处理的分组报头450进行操作,以对经处理的分组报头450实现一个或多个附加的报头变更操作。
图5是根据实施例的可编程报头变更处理器500的框图。在实施例中,可编程报头变更处理器500与图1的网络设备100的可编程报头变更处理器112相对应,并且出于解释的目的,在图1的网络设备100的上下文中描述了可编程报头变更处理器500。然而,在其他实施例中,可编程报头变更处理器500与图1的网络设备100之外的另一合适网络设备一起被使用。
可编程报头变更处理器500被配置为从输入处理器118接收分组报头,并且实现对应的处理线程以处理分组报头。在实施例中,可编程报头变更处理器500接收从分组报头提取的变更处理器可访问报头(例如,图4A的变更处理器可访问报头402)、而不是整个分组报头,并且处理变更处理器可访问报头。为了便于解释,本文中使用的术语“分组报头”是指分组报头或从分组报头提取的变更处理器可访问报头。
可编程报头变更处理器500包括被耦合到存储器504的多个分组处理节点(PPN)502,并且被配置为实现被存储在处理器504中的计算机可读指令。在所示的实施例中,PPN502被布置在分组处理节点组506中。在实施例中,分组处理节点组506的PPN 502共享特定资源。例如,尽管图5中仅图示了单个存储器504,但是在一些实施例中,相应组506的PPN502被耦合到相应的存储器504。
在实施例中,可编程报头变更处理器500还包括分发器508,分发器508被配置为将分组报头分发在用于处理分组报头的分组处理节点502之间。分发器508通常通过循环通过PPN 502来按照由分发器508接收分组报头的次序将分组报头分发给PPN 502来进行操作。在实施例中,分发器508根据分发方案来将分组报头分发给PPN,该分发方案允许与需要PPN502的处理时间相对更短的处理线程相关联的数据报头不会被与需要PPN 502的处理时间更短的处理线程相关联的数据报头阻止或延迟。根据该分发方案,分发器508根据被指派给要用于处理分组报头的处理线程的再循环编号,通过循环通过PPN502来分发分组报头,其中更小的再循环编号(例如,再循环编号为1)被指派给具有相对更短的处理时间的处理线程,并且更大的再循环编号(例如,再循环编号为2、3、4等)被指派给具有相对更长的处理时间的的处理线程。在实施例中,当分发器508循环通过PPN 502时,如果再循环编号大于1,则根据被指派给由PPN 502实现的处理线程的再循环编号,分发器508在一个或多个循环期间跳过PPN 502。因此,在实施例中,例如,当分组报头与被分发给特定PPN的再循环编号为2的处理线程相关联时,分发器508在下一分发循环期间跳过该特定PPN。相应地,在下一分发循环期间,代替将分组报头分发给特定的PPN,分发器508将分组报头分发给可用于处理分组报头的另一PPN 502,从而避免分组报头被由特定PPN 502实现的处理线程的相对更长的处理时间所阻塞。
在实施例中,除了被分发给PPN 502的分组报头之外,分发器508还提供与对应的分组相关联的分组描述符,以及由输入处理器118生成的元数据,在实施例中。可编程报头变更处理器500还包括多个分割器510,分割器510被配置为将要被提供给PPN 502的分组报头、分组描述符和元数据分解成块,使得信息以块为单位(in chunk)被传递到PPN 502。使用分割器510与PPN 502之间的合适的窄接口(例如,总线),来执行将信息以块为单位传递到PPN 502,同时仍然允许相对大量的报头信息(例如,所选择的报头部分)和与分组报头相对应的元数据传送。在实施例中,与分组相关联的各个信息块(包括例如分组报头、分组描述符和元数据)具有与接口相对应或窄于该接口(例如,总线)的大小,该接口在分割器510与PPN 502之间。例如,在实施例中,当比特流进入分离器510时,包括与分组、分组报头和分组描述符相对应的元数据的信息的比特流被分解成块,其中每个块对应于接口或比接口窄(例如,总线),该接口在在分离器510与PPN 502之间。以块为单位向PPN 502传递信息还允许:与由PPN502已经处理的信息的块从PPN 502被传输出来并发地,将与分组相对应的信息的块(例如,分组报头、分组描述符、元数据等的块,其对应于由PPN 502处理的先前的分组报头)传输到PPN 502。
尽管仅与每个PPN组506相对应的单个分割器在图5中被图示,但是在一些实施例中,可编程报头变更处理器500包括与分组处理节点组506中的每个分组处理节点组506相对应的多个分割器510。在实施例中,分割器510中的各个分割器510并行操作以分解分组报头、分组描述符和元数据并将分组报头、分组描述符和元数据传递到不同的PPN 502。在实施例中,每个特定的分割器510在任何给定的时间对与特定分组相对应的分组报头、分组描述符和元数据进行操作,并且生成对应于特定分组的分组报头、分组描述符和元数据的块。在实施例中,由分割器510生成的块被提供给特定PPN 502以用于特定报头的处理。在实施例中,以此方式,与特定分组相对应的信息块(分组报头、分组描述符和元数据)串行地被传递到特定PPN,从而支持经由适当狭窄的通信总线来传递相对大量的信息。另一方面,在实施例中,对应于不同分组的信息块(分组报头、分组描述符和元数据)被并行地传递到不同的PPN 102。
在实施例中,在将对应的报头信息传递到PPN 502之前,分割器510使与分组报头相对应的元数据的至少一部分被传递到PPN 502。在实施例中,例如,与从分割器610传递到PPN 502的分组报头相对应的初始块(例如,第一块)包括元数据的至少一部分。在实施例中,被传递到PPN 502的元数据的至少一部分包括与分组报头相关联的线程ID,或将由PPN502用于处理分组报头的处理线程的其他指示符,诸如指向在存储器504中存储的处理线程的起点的存储器位置的指针。相应地,在实施例中,PPN 502在接收将使用处理线程而被处理的报头信息之前,接收线程ID或处理线程的其他指示符。在实施例中,PPN 502在接收报头信息之前从存储器504至少获取与处理线程相对应的初始指令。在实施例中,在接收到报头信息之后,PPN 502然后立即开始实现处理线程。在实施例中,在接收到包括报头信息的第一块之后,PPN 502立即开始实现处理线程。
在实施例中,可编程报头变更处理器500还包括多个累加器512和聚合器514。在实施例中,由PPN 502处理的分组报头的块被传递到组装块的累加器512。尽管图5中仅图示了与每个分组处理节点组506相对应的单个累加器512,但是在实施例中,可编程报头变更处理器500通常包括与分组处理节点组506中的每个分组处理节点组506相对应的多个累加器512。在实施例中,累加器510中的各个累加器并行地操作以从不同的PPN 502接收和组装经处理的报头块。
在实施例中,聚合器514将被分发给PPN 502的分组报头聚合成经处理的分组报头流。在实施例中,为了将由PPN 502处理的分组报头的次序维持作为行进穿过可编程报头变更处理器500的分组报头,聚合器514利用与由分发器506使用的分发方案相对应的聚合方案。根据聚合方案,聚合器514根据分发器506用来分发分组报头的再循环编号,通过循环通过PPN 502来聚合分组报头。因此,在实施例中,当聚合器514循环通过PPN 502时,聚合器514根据当分发分组报头时分发器506所使用的的再循环编号来在一个或多个循环期间跳过PPN 502,从而维持分组报头的次序。
可编程报头变更处理器500以比被用于操作分组处理器104的其余部分的核心时钟更快的时钟操作,该时钟包括除了可编程报头变更处理器500之外的可编程报头变更引擎110的组件。相应地,在实施例中,报头变更处理器500包括输入同步组件,诸如同步FIFO520,以及输出同步组件,诸如同步FIFO 522,以在两个时钟域之间进行同步。在实施例中,在至少一些场景中,以相对于核心时钟更快时钟来操作可编程报头变更处理器500允许可编程报头变更处理器500实现相对更长处理线程,来针对流动穿过分组处理器110的分组执行报头变更,而不降低流动穿过分组处理器110的流量。
继续参照图5,在实施例中,在分组报头的处理期间,PPN 502接合一个或多个硬件加速器引擎530以对分组报头执行特定的处理操作。在一些实施例中,尽管PPN 502共享硬件加速器引擎530的单个集合,但是可编程报头变更处理器500包括报头变更530的多个集合。例如,在实施例中,每个PPN 502包括在硬件中被实现的硬件加速器引擎530的相应集合。在实施例中,硬件加速器引擎530使用被配置为如本文所描述进行操作的一个或多个集成电路而被实现。在其他实施例中,硬件加速器引擎530以其他合适的方式而被实现。
在实施例中,一个或多个硬件加速器引擎530被配置为执行相应的特定操作,这些操作经由计算机可读指令将消耗显著更长的时间(例如,两倍长,四倍长,一百倍长等)。例如,一个或多个硬件加速器引擎530被配置为执行相应的信息移动操作以移动分组报头中的字段,例如用于将标签插入到分组报头中和/或用于从分组报头中移除标签。作为更特定的示例,在实施例中,一个或多个硬件加速器引擎530包括比特移动操作加速器引擎530-1和字节移动操作加速器引擎530-2,该比特移动操作加速器引擎530-1被配置为将分组报头中的字段移动给定数目的比特,在实施例中,该字节移动操作加速器引擎530-2被配置为将分组报头中的字段移动给定数目的字节。作为另一示例,在实施例中,加速器引擎530包括校验和加速器引擎530-3,校验和加速器引擎530-3被配置为计算对分组报头的校验和字段的增量更新。在其他实施例中,加速器引擎530附加地或备选地包括加速器引擎530,该加速器引擎530被配置为执行其他合适的操作。在至少一些实施例中,用以执行处理操作的接合硬件加速器引擎530允许PPN 502例如:与执行计算机可读指令的处理器不接合硬件引擎执行操作(例如,信息移动操作)的实现相比,将标签(例如,转发标签)更快地插入到分组报头中,和/或从分组报头更快地剥离标签(例如,转发标签)。在至少一些实施例中,用以执行处理操作的接合硬件加速器引擎502许可PPN 502以网络设备100接收分组的全线速来执行分组报头的报头变更处理。
如上所述,在实施例中,校验和加速器引擎530-3被配置为计算对分组报头的校验和字段的增量更新。在实施例中,正在处理分组的分组报头的PPN 502被配置为触发校验和加速器引擎530-3基于从分组报头提取到的比特串来计算校验和。在实施例中,比特串对应于分组报头的特定部分,例如,取决于分组报头所对应的分组的类型。作为示例,在实施例中和/或在场景中,比特串对应于分组报头中所包括的IP报头,诸如IPv4或IPv6报头。在这种情况下,在实施例中,PPN502触发校验和加速器引擎530-3以生成将被包括在IP报头的校验和字段中的校验和。作为另一示例,在另一实施例中和/或在另一场景中,比特串对应于被包括在分组报头中的UDP报头,并且PPN 502触发校验和加速器引擎530-3以生成将被包括在UDP报头的校验和字段中的校验和。作为又一示例,在另一实施例中和/或在另一场景中,该比特串对应于分组报头中所包括的通用UDP封装(GUE)报头,并且PPN 502触发校验和加速器引擎530-3以生成将被包括在GUE报头的校验和字段中的校验和。在其他实施例中,该比特串对应于报头的其他合适的部分。
在实施例中,为了触发校验和加速器引擎530-3,PPN 502被配置为将比特串划分成多个分段,并且生成相应的触发指令以将分段中的相应多个分段顺序地传递到校验和加速器引擎530-3。作为示例,PPN 502被配置为将比特串划分为最多四个分段,每个分段包括16比特,并生成相应的触发指令,以将16比特的分段中的相应分段串行地传递到校验和加速器引擎530-3。在其他实施例中,其他合适数目的分段和/或其他合适大小的分段被利用。在实施例中,校验和加速器引擎530-3被配置为将各个分段逐步地彼此相加,并且累积所计算的和。例如,在实施例中,校验和加速器引擎530-3包括一个或多个加法器(例如,串行加法器,诸如16比特串行加法器)和累加器。在实施例中,一个或多个加法器被配置为通过向累加器提供在每个累加级中生成的总和,并随后将累加器中的后一个分段与当前总和相加,来递增地确定多个求和级中各个分段的总和。在至少一些实施例中,因为比特串的各个分段被串行地传递到校验和加速器引擎530-3,并且被用于由校验和加速器引擎530-3增量地生成校验和,所以与将整个比特串以相同的时钟周期提供给校验和引擎的系统相比(尤其是当需要相对较长的比特串时),就大小、功耗等而言,可以使用较小的校验和加速器引擎530-3。
在一些实施例中,校验和加速器引擎530-3被配置为在执行计算的相同时钟周期中,将通过加法器中的计算生成的和中的一个或多个“进位”封装到累加器中,从而在实施例中,在校验和计算完成后,消除对执行最终的环绕操作的需求。当校验和加速器引擎530-3完成校验和的生成时,校验和加速器引擎530-3例如通过将校验和提供回PPN 502或通过将校验和写入由PPN 502指示的存储位置来输出校验和。在实施例中,PPN 502被配置为向校验和加速器引擎530-3提供计算的校验和将被写入的存储器位置(例如,在分组寄存器文件中)的指示符(例如,目的地指针)。例如,在实施例中,PPN 502配置为将指示符包含在一个或多个触发指令中,该指令被用于将各个分段传递到校验和加速器引擎530-3。在实施例中,当校验和加速器引擎530-3完成校验和计算时,PPN 502将校验和写入所指示的存储位置,从而将计算的校验和放入分组报头中的适当校验和字段中。
在一些实施例中,在至少一些情况下,校验和加速器引擎530-3被配置为在输出校验和之前对校验和求反。例如,在实施例中,校验和加速器引擎530-3被配置为在基于IP报头或者在至少一些情况下基于UDP报头生成校验和时,对计算出的校验和求反。在实施例中,校验和加速器引擎530-3被配置为基于被包括在(例如,被编码为)一个或多个触发指令中的指令来确定是否对所计算的校验和求反,该一个或多个触发指令被用于将各个分段传递到校验和加速器引擎530-3。例如,在实施例中,PPN 502被配置为将触发指令编码为“加载新的校验和”指令以指示不需要对计算出的校验和进行求反,或者将触发指令编码为“加载旧校验和”指令,以指示需要对计算出的校验和求反。在一些实施例和/或场景中,校验和加速器引擎530-3附加地或备选地基于计算出的校验和的值来确定是否对计算出的校验和求反。例如,在实施例中,对于基于UDP报头计算的校验和,校验和加速器引擎530-3被配置为:如果计算的校验和的值是0xFFF,则对计算的校验和求反。
图6是根据实施例的被包括在报头变更处理器中的示例分组处理节点600的框图。在实施例中,分组处理节点600对应于图5的可编程报头变更处理器500的分组处理节点502,并且出于说明目的,分组处理节点处于图5的可编程报头变更处理器500的上下文中。然而,在其他实施例中,存储器访问系统600与除图5的可编程报头变更处理器500之外的另一合适的处理器设备一起被使用。
分组处理节点600包括处理器601,暂存器(例如,数据RAM)602和分组寄存器文件603。根据实施例,处理器601通常被配置为实现从存储器504获取的处理线程以处理被提供给处理节点600的分组报头。在实施例中,处理器601是小型通用CPU或被配置为执行被存储在存储器504中的计算机可读指令的另一合适的处理器。分组处理节点600另外包括多个加速器引擎604和分组寄存器文件访问系统605。在实施例中,加速器引擎604对应于加速器引擎530。在另一实施例中,加速器发动机604附加地或备选地包括与加速器引擎530不同的加速器引擎。分组寄存器文件访问系统605允许处理器601使用本机CPU指令(native CPUinstruction)(诸如本机CPU读/写指令)来触发加速器引擎604,并且针对与加速器引擎604无关的读/写操作提供对分组寄存器堆文件603的常规访问。
分组寄存器文件604被配置为存储分组信息,该分组信息由分发器508提供给分组处理节点600,诸如,分组的分组报头的至少一部分,与该分组相对应的描述符,由输入处理器200(图2)针对该分组生成的元数据等。分组寄存器文件603被配置为还存储在关于该分组的处理线程的实现期间所生成的各种数据。在实施例中,分组寄存器文件603另外被配置为存储由加速器引擎604生成的数据,诸如由加速器引擎604处理的分组报头的部分。在实施例中,分组寄存器文件603包括例如寄存器阵列和/或多端口随机存取存储器(RAM)。在其他实施例中,分组寄存器文件603以其他合适的方式被实现。
在实施例中,分组寄存器文件访问系统605包括输入电路610和指令译码器614。在操作中,由处理器601发出的指令611被提供至输入电路610。在实施例中,指令611包括读指令或写指令。在实施例中,读指令或写指令在一些情况下被编码为加速器引擎指令,而在其他情况下被编码为常规的读指令或写指令。例如,在实施例中,处理器601被配置为将读指令编码为加速器触发指令,以触发加速器引擎604执行操作。作为另一示例,处理器601被配置为将写指令编码为加速器写指令,以在触发加速器引擎604执行操作之前,将加速器引擎操作数数据动态地写入分组寄存器文件603。在其他实施例中,指令611包括除了被编码为加速器指令的写/读指令以外的合适类型的指令。
输入电路610包括被配置为执行危险解决方案以解决如下情况的电路装置:在这些情况中,与另一读或写指令并发地(例如,以相同的时钟周期),或者当存储器访问系统600忙于处理先前发出的读或写指令时,读或写指令被提供至存储器访问系统600。在实施例中,输入电路602包括缓冲器(未示出),该缓冲器临时缓冲一个或多个指令,直到存储器访问系统600能够处理一个或多个指令为止。
在实施例中,输入电路610将指令611写入暂存存储器602,并且指令译码器614对被写入暂存存储器602的指令进行译码。在实施例中,指令译码器614基于由处理器601使用的存储器映射对指令611进行译码,其中根据实施例,该存储器映射包括常规读/写指令和被编码为加速器指令的读/写指令两者的映射。图7是根据实施例的由处理器601使用的示例存储器映射700的框图。在实施例中,存储器映射700包括加速器指令映射702,该加速器指令映射702将被寻址到第一地址范围中的地址的指令映射到加速器指令。因此,例如,根据所图示的实施例中的存储器映射700,地址范围为0000 1000到00001FFF的读/写指令映射到加速器指令。在实施例中,存储器映射700还包括分组寄存器文件映射704,其将被寻址到第二地址范围中的地址的指令映射到常规分组寄存器文件读/写指令。例如,根据所图示的实施例中的存储器映射700,地址范围为0000 2000到0000 23FF的读/写指令映射到常规分组寄存器文件指令。
再次参考图6和图7,在实施例中,当指令611的地址在由存储器映射700映射到加速器指令的地址范围中时,指令译码器614将指令611译码为加速器指令,诸如触发指令或加速器写指令。在实施例中,加速器指令611是32比特处理器指令,并且出于示例性目的,加速器触发指令611在32比特处理器指令的上下文中被描述。然而,在其他实施例中,其他合适的处理器指令(例如16比特指令、64比特指令)被利用。在实施例中,加速器指令的比特[31:26]被编码以指示加速器指令所请求的操作的类型,并且相应地指示正在由该指令触发的加速器引擎的类型。作为示例,加速器指令611的比特[31:26]被编码以指示加速器指令611是以下中的一项:i)请求字节字段复制操作的字节复制指令,ii)请求新校验和加载操作的加载新校验和指令,iii)请求旧校验和加载操作的加载旧校验和指令,iv)请求比特字段复制操作的比特字段复制指令,v)请求比特字段加法操作的比特字段加法指令,vi)请求比特字段减法操作的比特字段减法指令等。在实施例中,加速器指令611的剩余比特[25:0]被编码以指示分组寄存器文件603中的源和/或目的地报头字段、描述符字段或配置寄存器的位置。根据一些实施例,指令的示例编码在下面参照图8A-图8B更详细地被描述。
在实施例中,指令译码器614确定指令611是映射到加速器指令还是映射到常规读/写指令。在实施例中,如果指令611映射到加速器指令,则指令译码器614将该指令译码为加速器触发指令或加速器写指令,并且提取分组寄存器文件603中作为对应指令的源/目的地字段的相关源/目的地位置的指示。在实施例中,由指令译码器604译码的加速器触发指令和由处理器601发出的常规CPU读指令被提供至连接(junction)620。类似地,由指令译码器604译码的加速器写指令和由处理器601发出的常规写指令被提供至连接630。在实施例中,为了均衡在发出加速器指令与对应的经译码的加速器指令被提供至连接620/630的时间之间的时间,以及在发出常规CPU读指令与该常规CPU指令被提供至连接620/630的时间之间的时间,经译码的加速器指令和/或常规CPU指令经由一个或多个延迟线(诸如图6中的延迟线618/628)被提供至连接620/630。
经译码的加速器触发指令控制多路复用器622以选择用于指令的执行的适当操作数数据。在实施例中,多路复用器611在从分组寄存器文件603读取的操作数数据和从加速器引擎604获得的操作数数据之间进行选择,从而允许在实施例中在先前触发的操作中直接使用由加速器引擎604生成的数据以用于当前加速器触发指令的执行。在实施例中,当分组寄存器文件603包含所执行的操作的目的地时,由加速器引擎604生成的数据也被写入分组寄存器文件603,如由加速器触发指令611所指示的。类似地,在实施例中,被请求由常规CPU写指令写入到分组寄存器文件603的数据被写入分组寄存器文件603。另外,在实施例中,响应于常规CPU读指令从分组处理器文件603读取的数据被直接提供至处理器601。
图8A-图8B是根据实施例的图示了对应于由处理器601发出的指令611的若干示例加速器指令。图8A是根据实施例的示例字节字段操作指令800的示意图。图8A图示了在字节字段操作指令800中所使用的示例比特分配。在其他实施例中,与图8A中所示的比特分配不同的合适的比特分配被利用。
在实施例中,指令800的比特[31:26]被编码以指示由指令800触发的字节字段操作的类型。例如,在各种实施例中,指令800的比特[31:26]的第一值(例如,000000)指示字节字段复制操作被触发,指令800的比特[31:26]的第二值(例如,000001)指示校验和加载操作被触发等。在实施例中,在一些情况下,指令800的比特[25:21]被编码以指示字节字段操作的子类型。例如,在实施例中,当指令800的比特[31:26]被设置以指示校验和加载操作时,指令800的比特[31:26]被设置以指示:指令800是用于将新计算的校验和加载到分组报头校验和字段中的加载新校验和指令,还是用于将旧校验和加载到分组报头校验和字段中的加载旧校验和指令。
继续参照图8A,在实施例中,指令800的比特[20:15]被编码以指示操作的目的地/源字段的长度。在实施例中,例如,比特[20:15]被设置为对应于字段的长度减去一(长度-1)的值。在实施例中,指令800的比特[15:8]被编码以指示操作要被应用于的目的地字段的位置。在实施例中,指令800的比特15被编码以指示操作的目的地字段是分组报头字段还是非分组报头字段,诸如分组描述符字段或其他分组寄存器字段。另外,在实施例中,根据被编码在比特15中的指示,指令800的比特[14:8]被编码以指示:分组寄存器文件603中分组报头中的源字段的第一字节的索引、分组寄存器文件603中分组描述符中的源字段的第一字节的索引、或者分组寄存器文件603中配置寄存器中的第一字节的索引。在实施例中,指令800的比特[7:0]被编码以指示要从其获得操作的源数据的源字段的位置。在实施例中,指令800的比特7被编码以指示操作的源字段是分组报头字段还是非分组报头字段,诸如分组描述符字段或其他分组寄存器字段。另外,在实施例中,根据被编码在比特7中的指示,指令800的比特[6:0]被编码以指示:分组寄存器文件603中分组报头中的源字段的第一字节的索引、分组寄存器文件603中分组描述符中的源字段的第一字节的索引、或者分组寄存器文件603中配置寄存器中的第一字节的索引。
图8B是根据实施例的示例比特字段操作指令850的示意图。图8B图示了在比特字段操作指令850中所使用的示例比特分配。在其他实施例中,与图8B中所示的比特分配不同的合适的比特分配被利用。在实施例中,指令850的比特[31:26]被编码以指示由指令850触发的比特字段操作的类型。例如,在各种实施例中,指令850的比特[31:26]的第一值(例如,000001)指示字节字段复制操作被触发,指令850的比特[31:26]的第二值(例如,000010)指示比特字段加法操作被触发,指令850的比特[31:26]的第三值(例如,000011)指示比特字段减法操作被触发等。在实施例中,指令850的比特[25:23]被编码以指示操作的目的地比特的集合的初始位置,并且指令850的比特[25:23]被编码以指示操作的源比特的集合的初始位置。在实施例中,比特[19:16]被编码以指示操作的目的地比特和源比特的集合的长度(例如,比特的数目)。
继续参照图8B,在实施例中,指令850的比特[15:0]被编码以指示目的地/源字段的字节位置,该目的地/源字段包括由比特[25:16]指示的比特的集合。在实施例中,指令850的比特15被编码以指示操作的目的地字段是分组报头字段还是非分组报头字段,诸如分组描述符字段或其他分组寄存器字段。另外,在实施例中,根据被编码在比特15中的指示,指令850的比特[14:8]被编码以指示:分组寄存器文件603中分组报头中的源/目的地字段的第一字节的索引、分组寄存器文件603中分组描述符中的源/目的地字段的第一字节的索引、或者分组寄存器文件603中配置寄存器中的第一字节的索引。类似地,在实施例中,指令850的比特[7:0]被编码以指示要从其获得操作的源数据的源字段的位置。在实施例中,指令850的比特7被编码以指示操作的源字段是分组报头字段还是非分组报头字段,诸如分组描述符字段或其他分组寄存器字段。另外,在实施例中,根据被编码在比特7中的指示,指令850的比特[6:0]被编码以指示:分组寄存器文件603中分组报头中的源字段的第一字节的索引、分组寄存器文件603中分组描述符中的源字段的第一字节的索引、或者分组寄存器文件603中配置寄存器中的第一字节的索引。
图9是根据实施例的图示用于处理网络设备中的分组的示例方法900的流程图。在实施例中,网络设备100实现方法900以处理由网络设备100接收的分组。因此,仅出于解释的目的,参照网络设备100描述了方法900。在其他实施例中,方法900由另一合适的网络设备实现。
在框902,经由网络设备的端口被接收的分组由网络设备的分组处理器接收。在实施例中,在框902被接收的分组包括分组报头和有效载荷。在实施例中,该分组由图1的网络设备100的分组处理器104接收。在另一实施例中,该分组由与图1的网络设备100的接收处理器104不同的合适的分组处理器接收,和/或由与图1的网络设备100不同的网络设备的分组处理器接收。
在框904,分组经由其被网络设备传输的至少一个出口接口被确定。在实施例中,图1的分组处理器104的转发引擎106确定分组经由其被传输的至少一个出口接口。在另一实施例中,另一合适的设备(不是转发引擎106)确定分组经由其被传输的至少一个出口接口。
在框906,分组的至少一个分组报头被提供至可编程报头变更引擎,该可编程报头变更引擎包括:i)在硬件中被实现的硬件输入处理器,以及ii)可编程报头变更处理器,其被耦合至程序存储器并且被配置为执行存储在程序存储器中的计算机可读指令以执行对所接收的分组的一个或多个报头变更操作。在实施例中,至少分组报头被提供至图1的分组处理器104的可编程报头变更引擎110。在该实施例中,可编程报头变更引擎的硬件输入处理器对应于可编程报头变更引擎110的输入处理器118,并且报头变更引擎的可编程报头变更处理器对应于可编程报头变更处理器112。在其他实施例中,至少分组报头被提供至不同于可编程报头变更引擎110的可编程报头变更引擎。
在框908,确定分组报头是将被提供至被耦合到可编程报头变更处理器的处理路径,还是将被转移到绕过可编程报头变更处理器的旁路路径。在实施例中,可编程报头变更引擎的硬件输入处理器确定分组报头是将被提供至被耦合到可编程报头变更处理器的处理路径,还是将被转移到绕过可编程报头变更处理器的旁路路径。在实施例中,图2的输入处理器200的旁路决策引擎206确定分组是将经由处理路径被提供至可编程报头变更处理器,还是将被转移到绕过报头变更处理器的旁路路径。在实施例中,图3的方法300被实现以确定分组是将经由处理路径被提供至可编程报头变更处理器,还是将被转移到绕过报头变更处理器的旁路路径。在其他实施例中,框908的确定以其他合适的方式来进行。
在框910,基于在框909进行的、关于分组报头将被提供至处理路径还是将被转移到旁路路径的确定,分组报头将被提供至处理路径或旁路路径。在实施例中,基于在框909进行的、关于分组报头将被提供至处理路径还是将被转移到旁路路径的确定,可编程报头变更引擎的硬件输入处理器将分组报头提供至处理路径或旁路路径。
在框912,分组报头被选择性地:i)当分组报头被提供至处理路径时由可编程报头变更处理器处理,或者ii)当分组报头被提供至旁路路径时不由可编程报头变更处理器处理。在实施例中,在框912,图1的可编程报头变更处理器112或者图5的可编程报头变更处理器500选择性地处理或者不处理分组报头。在另一实施例中,在框912,另一合适的可编程报头变更处理器选择性地处理或者不处理分组报头。
一般而言,因为方法900允许分组动态地绕过报头变更处理器,所以在实施例中,方法900允许可以不要求由可编程报头变更处理器进行报头变更的分组快速地通过可编程报头变更引擎。例如,在实施例中,不要求由可编程报头变更处理器进行报头变更的某些分组流和/或分组类型被允许快速地通过可编程报头变更引擎。在一些实施例中,在报头变更处理器发生拥塞的时间期间,某些分组和/或分组流被允许绕过报头变更处理器。在至少一些实施例中,与不利用报头变更处理器的动态旁路的系统相比,允许一些分组动态地绕过可编程报头变更处理器增加了可用于处理要求由可编程报头变更处理器进行报头变更的分组的处理能力。
在框914,具有在框910选择性地被处理或不被处理的分组报头的分组经由在框904被确定的网络设备的至少一个出口接口而被传输。
图10是根据另一实施例的图示用于处理网络设备中的分组的示例方法1000的流程图。在实施例中,网络设备100实现方法1000以处理由网络设备100接收的分组。因此,仅出于解释的目的,参照网络设备100描述了方法1000。在其他实施例中,方法1000由另一合适的网络设备实现。
在框1002,经由网络设备的端口被接收的分组由网络设备的分组处理器接收。在实施例中,在框902被接收的分组包括分组报头和有效载荷。在实施例中,该分组由图1的网络设备100的分组处理器104接收。在另一实施例中,该分组由与图1的网络设备100的接收处理器104不同的合适的分组处理器接收,和/或由与图1的网络设备100不同的网络设备的分组处理器接收。
在框1004,分组经由其被网络设备传输的至少一个出口接口被确定。在实施例中,图1的分组处理器104的转发引擎106确定分组经由其被传输的至少一个出口接口。在另一实施例中,另一合适的设备(不是转发引擎106)确定分组经由其被传输的至少一个出口接口。
在框1006,分组的分组报头用可编程报头变更处理器来处理,该可编程报头变更处理器被耦合至程序处理器并且被配置为执行存储在程序存储器中的计算机可读指令以执行对所接收的分组的一个或多个报头变更操作。在实施例中,分组报头由图1的可编程报头变更处理器112处理。在另一实施例中,分组报头由不同于图1的可编程报头变更处理器112的合适的可编程报头变更处理器处理。在实施例中,处理框1006的分组报头包括:触发硬件校验和加速器引擎以计算针对与分组报头的至少一部分相对应的比特串。在实施例中,在框1006处的处理分组报头包括:触发图5的硬件校验和加速器引擎530-3。在另一实施例中,框1006的处理分组报头包括:触发不同于图5的硬件校验和加速器引擎530-3的合适的硬件校验和加速器引擎。在实施例中,触发硬件校验和加速器引擎包括:i)将比特串划分成比特串的多个分段,以及ii)将比特串的多个分段传递至硬件校验和加速器引擎。
在框1008,至少通过递增地求和比特串的多个分段的相应分段,校验和由硬件校验和加速器引擎递增地计算。在实施例中,框1008的递增地求和多个分段的相应分段包括:在多个求和级对多个段求和。在实施例中,框1008的递增地求和多个分段的相应分段按照上面结合图5的硬件校验和加速器引擎530-3描述的方式被执行。在另一实施例中,框1008的递增地求和多个分段的相应分段按照其他合适的方式被执行。在实施例中,在多个求和级递增地求和多个分段在累加器中存储了先前求和级的结果,先前求和级的结果对应于多个分段中被传递到硬件校验和加速器引擎的两个或更多个分段的和,并且在后续求和级中,将被存储在累加器中的先前求和级的结果与多个分段中被传递到硬件校验和加速器引擎的后续分段进行求和。
在至少一些实施例中,因为比特串的相应分段在框1006被串行地传递至硬件校验和加速器引擎并且在框1008被用来由硬件校验和加速器引擎递增地计算校验和,所以与在同一时钟周期向校验和引擎提供整个比特串并且对整个比特串计算校验和的系统相比,方法1000允许较小的硬件校验和加速器引擎(就大小、功耗等而言)被使用,特别是在相对长的比特串需要校验和计算的时候。
在框1010,具有包括在框1008被递增地计算的校验和的经修改的分组报头的分组经由在框1004被确定的网络设备的至少一个出口接口而被传输。
在实施例中,用于处理网络设备中的分组的方法包括:在网络设备的分组处理器处接收由网络设备从网络链路接收到的分组;利用该分组处理器来确定分组经由其由网络设备传输的至少一个出口接口;将分组的至少分组报头提供至分组处理器的可编程报头变更引擎,该可编程报头变更引擎包括:i)在硬件中被实现的硬件输入处理器,以及ii)可编程报头变更处理器,其被耦合至程序存储器,可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令以执行对所接收的分组的一个或多个报头变更操作;利用可编程报头变更引擎的硬件输入处理器确定分组报头是将被提供至被耦合至可编程报头变更处理器的处理路径还是将被转移到绕过可编程报头变更处理器的旁路路径;基于分组报头将被提供至处理路径还是将被转移到旁路路径的确定,利用可编程报头变更引擎的硬件输入处理器将分组报头提供至处理路径或者旁路路径;选择性地i)当分组报头被提供至处理路径时由可编程报头变更处理器处理分组报头,以及ii)当分组报头被提供至旁路路径时不由可编程报头变更处理器处理分组报头;以及利用网络设备经由网络设备的至少一个出口接口传输分组。
在其他实施例中,方法还包括以下特征中的一个特征,或者两个或更多个特征的任何合适的组合。
方法还包括:利用分组处理器确定分组所属于的分组流。
方法还包括:确定分组报头是将被提供至处理路径还是将被转移到旁路路径包括:至少部分地基于分组所属于的分组流,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
确定分组报头是将被提供至处理路径还是将被转移到旁路路径包括:基于与分组相关联的一个或多个统计属性,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
确定分组报头是将被提供至处理路径还是将被转移到旁路路径包括:至少部分地基于i)可编程报头变更处理器的拥塞级别和ii)与分组相关联的一个或多个拥塞处理属性,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
方法还包括:当确定分组报头将被转移到旁路路径时,将分组报头与可编程报头变更处理器并行地存储在统一的缓冲器中,该统一的缓冲器被配置为临时存储:i)绕过可编程报头变更处理器的分组的分组报头,以及ii)不绕过可编程报头变更处理器的分组报头的至少多个部分,其中分组报头的部分不需要用于由可编程报头变更处理器进行处理。
方法还包括:当确定分组报头将被提供至处理路径时:提取分组报头中将被提供至可编程报头变更处理器的一个或多个部分,生成报头变更处理器可访问报头以包括从分组报头中提取的一个或多个部分,报头变更处理器可访问报头与分组报头分离,将报头变更可访问报头而不是分组报头提供至可编程报头变更处理器,利用可编程报头变更处理器处理报头变更可访问报头,并且在利用可编程报头变更处理器处理报头变更可访问报头之后,将经处理的报头变更可访问报头集成到分组报头中。
方法还包括:利用可编程报头变更引擎的硬件输入处理器生成元数据以至少包括被存储在程序存储器中的处理线程的指示符,该处理线程将被实现为由可编程报头变更处理器处理分组报头;以及利用可编程报头变更引擎的硬件输入处理器将元数据与变更可访问报头一起提供至可编程报头变更处理器。
将元数据与变更可访问报头一起提供至可编程报头变更处理器包括:将包括元数据与变更可访问报头的信息分割成多个块,并且串行地将多个块中的相应块传递至可编程报头变更处理器,其中被传递至可编程报头变更处理器的多个块的初始块至少包括被存储在程序存储器中的处理线程的指示符,该处理线程将被实现为由可编程报头变更处理器处理分组。
方法还包括:在可编程报头变更处理器处接收变更可访问报头的初始部分之前,基于多个块中的初始块中所包括的处理线程的指示符,利用可编程报头变更处理器从程序存储器获取将被用于处理变更可访问报头的计算机可读指令的集合。
可编程报头变更处理器包括多个处理节点。
方法还包括:当确定分组报头将被提供至处理路径时,将分组报头的至少一部分提供至多个处理节点中的处理节点,以用于由处理节点处理分组报头,其中由处理节点对分组报头的处理与由多个处理节点中的另一处理节点对另一分组报头的处理并行地被执行,该另一分组报头对应于由网络设备接收的另一分组。
由可编程报头变更处理器处理分组报头包括:利用可编程报头变更处理器执行从分组存储器获取的计算机可读指令的集合,包括,在计算机可读指令的集合的执行期间,触发一个或多个硬件加速器引擎以执行相对于分组报头的一个或多个特定处理操作。
触发一个或多个硬件加速器引擎中的硬件加速器引擎包括:发出可编程报头变更处理器的处理节点的本机中央处理单元(CPU)指令;以及基于本机CPU指令中所指示的地址,将本机CPU指令映射至加速器触发指令,以触发硬件加速器引擎。
在另一实施例中,一种网络设备包括分组处理器和可编程报头变更引擎,分组处理器被配置为:i)接收来自网络链路的分组,以及ii)确定分组经由其由网络设备传输的至少一个出口接口,可编程报头变更引擎包括:i)在硬件中被实现的硬件输入处理器,以及ii)被耦合至程序存储器的可编程报头变更处理器,该可编程报头变更处理器被配置为:执行被存储在程序存储器中的计算机可读指令以对所接收的分组执行一个或多个报头变更操作。该硬件输入处理器被配置为:确定分组的分组报头是将被提供至被耦合至可编程报头变更处理器的处理路径还是将被转移至绕过可编程报头变更处理器的旁路路径;并且基于关于分组报头将被提供至处理路径还是将被转移至旁路路径的确定,将分组报头提供至处理路径或者旁路路径。可编程报头变更处理器被配置为选择性地:i)当分组报头被提供至处理路径时处理分组报头,并且ii)当分组报头被提供至旁路路径时不处理分组报头。分组处理器还被配置为使得分组经由网络设备的至少一个出口接口而被传输。
在其他实施例中,网络设备还包括以下特征中的一个特征,或者两个或更多个特征的任何合适的组合。
分组处理器还被配置为确定分组所属于的分组流。
硬件输入处理器被配置为:至少部分地基于分组所属于的分组流,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
硬件输入处理器被配置为:基于与分组相关联的一个或多个统计属性,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
硬件输入处理器被配置为:至少部分地基于i)可编程报头变更处理器的拥塞级别和ii)与分组相关联的一个或多个拥塞处理属性,确定分组报头是将被提供至处理路径还是将被转移到旁路路径。
硬件输入处理器还被配置为:当确定分组报头将被提供至旁路路径时,将分组报头与可编程报头变更处理器并行地存储在统一的缓冲器中,该统一的缓冲器被配置为临时存储:i)绕过可编程报头变更处理器的分组的分组报头,以及ii)不绕过可编程报头变更处理器的分组报头的至少部分,其中分组报头的部分不需要用于由报头变更处理器进行处理。
硬件输入处理器还被配置为:当确定分组报头将被提供至处理路径时:提取分组报头中将被提供至可编程报头变更处理器的一个或多个部分;生成报头变更处理器可访问报头以包括从分组报头中提取的一个或多个部分,报头变更处理器可访问报头与分组报头分离;以及将报头变更可访问报头而不是分组报头提供至报头变更处理器。
硬件输入处理器还被配置为:生成对应于分组的元数据,该元数据至少包括被存储在程序存储器中的处理线程的指示符,该处理线程将被实现为由可编程报头变更处理器处理分组报头;以及将元数据与变更可访问报头一起提供至报头变更处理器。
硬件输入处理器被配置为:将包括元数据与变更可访问报头的信息分割成多个块,并且串行地将多个块中的相应块传递至可编程报头变更处理器,其中被传递至可编程报头变更处理器的多个块的初始块包括被存储在程序存储器中的处理线程的指示符,该处理线程将被实现为由可编程报头变更处理器处理分组报头。
可编程报头变更处理器被配置为:在可编程报头变更处理器处接收变更可访问报头的初始部分之前,基于多个块中的初始块中所包括的处理线程的指示符,从程序存储器获取将被用于处理变更可访问报头的计算机可读指令的集合。
可编程报头变更处理器包括多个处理节点。
硬件输入处理器被配置为:当确定分组报头将被提供至处理路径时,将分组报头的至少一部分提供至多个处理节点中的处理节点,以用于由处理节点处理分组报头,其中由处理节点对分组报头的处理与由多个处理节点中的另一处理节点对另一分组报头的处理并行地被执行,该另一分组报头对应于由网络设备接收的另一分组。
可编程报头变更处理器被配置为:执行从分组存储器获取的计算机可读指令的集合以处理分组报头,可编程报头变更处理器被配置为:在计算机可读指令的集合的执行期间,触发一个或多个硬件加速器引擎以执行相对于分组报头的一个或多个特定处理操作,其中报头变更处理器被配置为:至少通过发出报头变更处理器的处理节点的本机CPU指令来触发一个或多个加速器引擎中的加速器引擎,其中基于本机CPU指令中所指示的地址,本机CPU指令被映射至加速器触发指令,以触发硬件加速器引擎。
在又一实施例中,一种用于处理网络设备中的分组的方法,包括:在网络设备的分组处理器处接收由网络设备从网络链路接收到的分组;利用分组处理器来确定分组经由其由网络设备传输的至少一个出口接口;利用被耦合至程序存储器的可编程报头变更处理器来处理分组的分组报头,可编程报头变更处理器被配置为执行被存储在程序存储器中的计算机可读指令以执行对所接收的分组的一个或多个报头变更操作,该处理包括触发硬件校验和加速器引擎以计算针对与分组报头的至少一部分相对应的比特串的校验和,其中触发硬件校验和加速器引擎包括:i)将比特串划分成比特串的多个分段,以及ii)将比特串的多个分段传递至硬件校验和加速器引擎;至少通过递增地求和被传递至硬件校验和加速器引擎的比特串的多个分段的相应分段,利用硬件校验和加速器来递增地计算校验和;以及经由网络设备的至少一个出口接口传输具有包括校验和的经修改的报头的分组。
在其他实施例中,方法还包括以下特征中的一个特征,或者两个或更多个特征的任何合适的组合。
触发硬件校验和加速器引擎包括:利用可编程报头变更处理器生成相应触发指令,以将比特串的多个分段的相应分段传递至硬件校验和加速器引擎;以及串行地将该相应触发指令提供至硬件校验和加速器引擎。
触发硬件校验和加速器引擎包括:发出由可编程报头变更处理器支持的一个或多个本机中央处理单元(CPU)指令,以及基于一个或多个本机CPU指令中所指示的地址,将一个或多个本机CPU指令中的每个本机CPU指令映射至加速器触发指令,以用于触发硬件校验和加速器引擎。
递增地计算校验和包括:利用硬件校验和加速器引擎对多个求和级中的多个分段进行递增地求和,包括:将先前求和级的结果存储在累加器中,先前求和级的结果对应于多个分段中被传递至硬件校验和加速器引擎的两个或更多个分段的和;并且在后续求和级中,将被存储在累加器中的先前求和级的结果与多个分段中被传递至硬件校验和加速器引擎的后续分段进行求和。
递增地计算校验和还包括:在先前求和级由硬件校验和加速器引擎执行的同一时钟周期内,将先前求和级中所生成的一个或多个进位比特包装(wrap)回累加器中。
方法还包括:基于由可编程报头变更处理器提供至硬件校验和加速器引擎的信息,利用硬件校验和加速器引擎确定校验和是否将被求反;以及响应于确定校验和将被求反,在输出来自硬件校验和加速器引擎的校验和之前对校验和进行求反。
触发硬件校验和加速器引擎以计算针对比特串的校验和包括:向硬件校验和加速器引擎提供校验和将被写入的存储器中的存储器位置的指示。
方法还包括:利用硬件校验和加速器引擎使得校验和被写入到存储器中所指示的存储器位置。
触发硬件校验和加速器引擎以计算针对比特串的校验和包括:触发硬件校验和加速器引擎以计算针对对应于以下中的一项的比特串的校验和:i)分组报头中所包括的互联网协议(IP)报头,ii)分组报头中所包括的用户数据报协议(UDP)报头或者iii)分组报头中所包括的通用UDP封装(GUE)报头。
在又一实施例中,网络设备包括分组处理器和可编程报头变更处理器,分组处理器被配置为:i)从网络链路接收分组,该分组包括分组报头和有效载荷,以及ii)确定分组经由其将由网络设备传输的至少一个出口接口,可编程报头变更处理器被耦合至程序存储器,该可编程报头变更处理器被配置为:执行被存储在程序存储器中的计算机可读指令以对所接收的分组的分组报头执行一个或多个报头变更操作,该可编程报头变更处理器被配置为:在所接收的分组的分组报头的处理期间,触发硬件校验和加速器引擎以计算针对与分组报头的至少一部分相对应的比特串的校验和。可编程报头变更处理器被配置为:将比特串划分成比特串的多个分段,以及将比特串的多个分段传递至硬件校验和加速器引擎。硬件校验和加速器引擎被配置为:至少通过递增地求和被传递至硬件校验和加速器引擎的比特串的多个分段的相应分段,递增地计算校验和。分组处理器还被配置为使得具有包括校验和的经修改的报头的分组经由网络设备的至少一个出口接口而被传输。
在其他实施例中,网络设备还包括以下特征中的一个特征,或者两个或更多个特征的任何合适的组合。
可编程报头变更处理器被配置为:生成相应触发指令以将比特串的多个分段的相应分段传递至硬件校验和加速器引擎,以及串行地将该相应的触发指令提供至硬件校验和加速器引擎。
可编程报头变更处理器被配置为:至少通过发出由可编程报头变更处理器支持的一个或多个本机CPU指令来触发硬件校验和加速器引擎,其中基于本机CPU指令中所指示的地址,一个或多个本机CPU指令中的每个本机CPU指令被映射至加速器触发指令,以用于触发硬件校验和加速器引擎。
硬件校验和加速器引擎被配置为:至少通过对多个求和级的多个分段进行求和来递增地计算校验和。
硬件校验和加速器引擎被配置为:将先前求和级的结果存储在累加器中,先前求和级的结果对应于多个分段中被传递至硬件校验和加速器引擎的两个或更多个分段的和,并且在后续求和级中,将被存储在累加器中的先前求和级的结果与多个分段中被传递至硬件校验和加速器引擎的后续分段进行求和。
硬件校验和加速器引擎还被配置为:在先前求和级由硬件校验和加速器引擎执行的同一时钟周期内,将先前求和级中所生成的一个或多个进位比特包装回累加器中。
硬件校验和加速器引擎还被配置为:基于由可编程报头变更处理器提供至硬件校验和加速器引擎的信息,确定校验和是否将被求反;以及响应于确定校验和将被求反,在输出校验和之前对校验和进行求反。
可编程报头变更处理器还被配置为:向硬件校验和加速器引擎提供校验和将被写入的存储器中的存储器位置的指示。
硬件校验和加速器引擎还被配置为:使得校验和被写入到存储器中所指示的存储器位置。
可编程报头变更处理器还被配置为:触发硬件校验和加速器引擎以计算针对对应于以下中的一项的校验和:i)分组报头中所包括的互联网协议(IP)报头,ii)分组报头中所包括的用户数据报协议(UDP)报头或者iii)分组报头中所包括的通用UDP封装(GUE)报头。
上述各种框、操作和技术中的至少一些可以利用硬件、执行固件指令的处理器、执行软件指令的处理器或其任何组合来实现。
当在硬件中被实现时,硬件可以包括以下中的一种或多种:分立组件、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)等。
当利用执行软件或固件指令的处理器实现时,软件或固件指令可以被存储在任何计算机可读存储器中,诸如,在磁盘、光盘或其他存储介质上,在RAM或ROM或者闪速存储器、处理器、硬盘驱动器、光盘驱动器、磁带驱动器等中。软件或固件指令可以包括机器可读指令,其在由一个或多个处理器执行时使得一个或多个处理器执行各种动作。
虽然本发明已经参考特定示例进行了描述,但是这些特定示例仅旨在是说明性的,并且不限于本发明,可以对所公开的实施例进行改变、添加和/或删除,而不脱离本发明的范围。例如,上述方法或技术的一个或多个部分可以按照不同的顺序(或并发地)被执行,而仍然实现期望的结果。
Claims (38)
1.一种用于处理网络设备中的分组的方法,所述方法包括:
在所述网络设备的分组处理器处接收由所述网络设备从网络链路接收的分组;
利用所述分组处理器确定至少一个出口接口,所述分组将由所述网络设备经由所述至少一个出口接口而被传输;
向所述分组处理器的可编程报头变更引擎至少提供所述分组的分组报头,所述可编程报头变更引擎包括:i)在硬件中被实现的硬件输入处理器;和ii)被耦合到程序存储器的可编程报头变更处理器,所述可编程报头变更处理器被配置为执行被存储在所述程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作;
利用所述可编程报头变更引擎的所述硬件输入处理器来确定:所述分组报头将被提供给被耦合到所述可编程报头变更处理器的处理路径,还是将被转移到绕过所述可编程报头变更处理器的旁路路径;
利用所述可编程报头变更引擎的所述硬件输入处理器,基于所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径的所述确定,将所述分组报头提供给所述处理路径或所述旁路路径;
选择性地i)当所述分组报头被提供给所述处理路径时,由所述可编程报头变更处理器处理所述分组报头;ii)当所述分组报头被提供给所述旁路路径时,不由所述可编程报头变更处理器处理所述分组报头;以及
利用所述网络设备、经由所述网络设备的所述至少一个出口接口来传输所述分组。
2.根据权利要求1所述的方法,其中:
所述方法还包括利用所述分组处理器确定所述分组所属于的分组流,以及
确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径包括:至少部分地基于所述分组所属于的所述分组流,确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径。
3.根据权利要求2所述的方法,其中确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径包括:基于与所述分组相关联的一个或多个统计属性,确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径。
4.根据权利要求1所述的方法,其中确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径包括:至少部分地基于以下各项来确定分组报头将被提供给所述处理路径还是将被转移到所述旁路路径:i)所述可编程报头变更处理器的拥塞级别;以及ii)与所述分组相关联的一个或多个拥塞处理属性。
5.根据权利要求1所述的方法,还包括:当确定所述分组报头将被转移到所述旁路路径时,将所述分组报头存储在与所述可编程报头变更处理器并行的统一缓冲区中,所述统一缓冲区被配置为临时存储i)绕过所述可编程报头变更处理器的分组的分组报头;以及ii)不绕过所述可编程报头变更处理器的分组报头的至少部分,其中所述分组报头的所述部分不需要由所述可编程报头变更处理器来处理。
6.根据权利要求1所述的方法,还包括:当确定所述分组报头将被提供给所述处理路径时,
提取将被提供给所述可编程报头变更处理器的所述分组报头的一个或多个部分,
生成报头变更处理器可访问报头以包括从所述分组报头提取的所述一个或多个部分,所述报头变更处理器可访问报头与所述分组报头分离,
向所述可编程报头变更处理器提供所述报头变更可访问报头,而不是所述分组报头,
利用所述可编程报头变更处理器处理所述报头变更可访问报头,以及
在利用所述可编程报头变更处理器处理所述报头变更可访问报头之后,将经处理的所述报头变更可访问报头集成到所述分组报头中。
7.根据权利要求6所述的方法,还包括:
利用所述可编程报头变更引擎的所述硬件输入处理器生成元数据,以至少包括被存储在所述程序存储器中的处理线程的指示符,所述处理线程将由所述可编程报头变更处理器实现以处理所述分组报头,以及
利用所述可编程报头变更引擎的所述硬件输入处理器,向所述可编程报头变更处理器提供所述元数据以及所述变更可访问报头。
8.根据权利要求7所述的方法,其中向所述可编程报头变更处理器提供所述元数据以及所述变更可访问报头包括:
将包括所述元数据和所述变更可访问报头的信息分割成多个块,以及
将所述多个块之中的相应块串行地传送到所述可编程报头变更处理器,其中被传送到所述可编程报头变更处理器的所述多个块中的初始块至少包括:被存储在所述程序存储器中的所述处理线程的所述指示符,所述处理线程将由所述可编程报头变更处理器实现以处理所述分组。
9.根据权利要求8所述的方法,还包括:在所述可编程报头变更处理器处接收所述变更可访问报头的初始部分之前,利用所述可编程报头变更处理器、基于所述处理线程的所述指示符,从所述程序存储器获取将被用于处理所述变更可访问报头的计算机可读指令集,所述指示符被包括在所述多个块的所述初始块中。
10.根据权利要求1所述的方法,其中:
所述可编程报头变更处理器包括多个处理节点,以及
所述方法还包括:当确定所述分组报头将被提供给所述处理路径时,将所述分组报头的至少一部分提供给所述多个处理节点之中的处理节点,以用于由所述处理节点处理所述分组报头,其中由所述处理节点对所述分组报头的处理与由所述多个处理节点中的另一处理节点对另一分组报头的处理被并行地执行,所述另一分组报头与由所述网络设备接收的另一分组相对应。
11.根据权利要求1所述的方法,其中由所述可编程报头变更处理器处理所述分组报头包括:利用所述可编程头变更处理器执行从所述分组存储器中获取的计算机可读指令集,在所述计算机可读指令集的执行期间,触发一个或多个硬件加速器引擎以执行关于所述分组报头的一个或多个特定处理操作,其中触发所述一个或多个硬件加速器引擎之中的硬件加速器引擎包括:
发出所述可编程报头变更处理器的处理节点的本机中央处理单元(CPU)指令,以及
基于在所述本机CPU指令中指示的地址,将所述本机CPU指令映射为加速触发指令以触发所述硬件加速器引擎。
12.一种网络设备,包括:
分组处理器,被配置为:i)从网络链路接收分组,以及ii)确定至少一个出口接口,所述分组将由所述网络设备经由所述至少一个出口接口而被传输;以及
可编程报头变更引擎,包括:i)在硬件中被实现的硬件输入处理器,以及ii)被耦合到程序存储器的可编程报头变更处理器,所述可编程报头变更处理器被配置为执行被存储在所述程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作,其中:
所述硬件输入处理器被配置为:
确定所述分组的分组报头将被提供给被耦合到所述可编程报头变更处理器的处理路径,还是将被转移到绕过所述可编程报头变更处理器的旁路路径,以及
基于所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径的所述确定,将所述分组报头提供给所述处理路径或所述旁路路径,并且
所述可编程报头变更处理器被配置为选择性地:i)当所述报头被提供给所述处理路径时处理所述分组报头,以及ii)当所述分组报头被提供给所述旁路路径时不处理所述分组报头,以及
其中所述分组处理器还被配置为使所述分组经由所述网络设备的所述至少一个出口接口被传输。
13.根据权利要求12所述的网络设备,其中:
所述分组处理器还被配置为:确定所述分组所属于的分组流,以及
所述硬件输入处理器被配置为:至少部分地基于所述分组所属于的所述分组流,确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径。
14.根据权利要求12所述的网络设备,其中所述硬件输入处理器被配置为:基于与所述分组相关联的一个或多个统计属性,确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径。
15.根据权利要求12所述的网络设备,其中所述硬件输入处理器被配置为:至少部分地基于以下各项来确定所述分组报头将被提供给所述处理路径还是将被转移到所述旁路路径:i)所述可编程报头变更处理器的拥塞级别;以及ii)与所述分组相关联的一个或多个拥塞处理属性。
16.根据权利要求12所述的网络设备,其中所述硬件输入处理器还被配置为:当确定所述分组报头将被提供给所述旁路路径时,将所述分组报头存储在与所述可编程报头变更处理器并行的统一缓冲区中,所述统一缓冲区被配置为临时存储:i)绕过所述可编程报头变更处理器的分组的分组报头,以及ii)不绕过所述可编程报头变更处理器的分组报头的至少部分,其中所述分组报头的所述部分不需要由所述报头变更处理器来处理。
17.根据权利要求12所述的网络设备,其中所述硬件输入处理器还被配置为:当确定所分组报头将被提供给所述处理路径时,
提取将被提供给所述可编程报头变更处理器的所述分组报头的一个或多个部分,
生成报头变更处理器可访问报头以包括从所述分组报头提取的所述一个或多个部分,所述报头变更处理器可访问报头与所述分组报头分离,以及
向所述报头变更处理器提供所述报头变更可访问报头,而不是所述分组报头。
18.根据权利要求17所述的网络设备,其中所述硬件输入处理器还被配置为:
生成与所述分组相对应的元数据,所述元数据至少包括被存储在所述程序存储器中的处理线程的指示符,所述处理线程将由所述可编程报头变更处理器实现以处理分组报头,以及
将所述元数据与所述变更可访问报头一起提供给所述报头变更处理器。
19.根据权利要求18所述的网络设备,其中所述硬件输入处理器被配置为:
将包括所述元数据和所述变更可访问报头的信息分割成多个块,以及
将所述多个块之中的相应块串行地传送到所述可编程报头变更处理器,其中被传送到所述可编程报头变更处理器的所述多个块中的初始块包括:被存储在所述分组存储器中的所述处理线程的所述指示符,所述指示符将由所述可编程报头变更处理器实现以处理所述分组报头。
20.根据权利要求19所述的网络设备,其中所述可编程报头变更处理器被配置为:在所述可编程报头变更处理器处接收所述变更可访问报头的初始部分之前,基于所述处理线程的所述指示符,从所述程序存储器获取将被用于处理所述变更可访问报头的计算机可读指令集,所述指示符被包括在所述多个块的所述初始块中。
21.根据权利要求12所述的网络设备,其中:
所述可编程报头变更处理器包括多个处理节点,以及
所述硬件输入处理器被配置为:当确定所述分组报头将被提供给所述处理路径时,将所述分组报头的至少一部分提供给所述多个处理节点中的处理节点,以用于由所述处理节点处理所述分组报头,其中由所述处理节点对所述分组报头的处理与由所述多个处理节点中的另一处理节点对另一分组报头的处理被并行地执行,所述另一分组报头与由所述网络设备接收的另一分组相对应。
22.根据权利要求12所述的网络设备,其中所述可编程报头变更处理器被配置为执行从所述分组存储器中获取的计算机可读指令集,以处理所述分组报头,所述可编程报头变更处理器被配置为在所述计算机可读指令集的执行期间,触发一个或多个硬件加速器引擎来执行关于所述分组报头的特定一个或多个处理操作,其中所述报头变更处理器被配置为:至少通过发出所述报头变更处理器的处理节点的本机CPU指令来触发所述一个或多个加速器引擎中的加速器引擎,其中所述本机CPU指令基于在所述本机CPU指令中指示的地址而被映射为加速器触发指令,以触发所述硬件加速器引擎。
23.一种用于处理网络设备中的分组的方法,所述方法包括:
在所述网络设备的分组处理器处接收由所述网络设备从网络链路接收的分组;
利用所述分组处理器确定至少一个出口接口,所述分组将由所述网络设备经由所述至少一个出口接口而被传输;
利用被耦合到程序存储器的可编程报头变更处理器处理所述分组的分组报头,所述可编程报头变更处理器被配置为执行被存储在所述程序存储器中的计算机可读指令,以对接收到的分组执行一个或多个报头变更操作,所述处理包括触发硬件校验和加速器引擎以计算针对与所述分组报头的至少一部分相对应的比特串的校验和,其中触发所述硬件校验和加速器引擎包括:i)将所述比特串划分成所述比特串的多个分段,以及ii)向所述硬件校验和加速器引擎传送所述比特串的所述多个分段;
利用所述硬件校验和加速器,至少通过对被传送到所述硬件校验和加速器引擎的、所述比特串的所述多个分段中的相应分段递增地求和,来递增地计算所述校验和;以及
经由所述网络设备的所述至少一个出口接口传输具有经修改的报头的所述分组,所述经修改的报头包括所述校验和。
24.根据权利要求23所述的方法,其中触发所述硬件校验和加速器引擎包括:
利用所述可编程报头变更处理器生成相应触发指令,以向所述硬件校验和加速器引擎传送所述比特串的所述多个分段中的相应分段,以及
串行地向所述硬件校验和加速器引擎提供所述相应触发指令。
25.根据权利要求23所述的方法,其中触发所述硬件校验和加速器引擎包括:
发出由所述可编程报头变更处理器支持的一个或多个本机中央处理器(CPU)指令,以及
基于在所述一个或多个本机CPU指令中指示的地址,将所述一个或多个本机CPU指令中的每个本机CPU指令映射为用于触发所述硬件校验和加速器引擎的加速器触发指令。
26.根据权利要求23所述的方法,其中递增地计算校验和包括:利用所述硬件校验和加速器引擎来对多个求和级中的所述多个分段递增地求和,包括:
将先前求和级的结果存储在累加器中,所述先前求和级的所述结果对应于被传送到所述硬件校验和加速器引擎的、所述多个分段之中的两个或更多个分段的总和,以及
在后续求和级中,将被存储在所述累加器中的所述先前求和级的所述结果与被传送到所述硬件校验和加速器引擎的、所述多个分段之中的后续分段求和。
27.根据权利要求26所述的方法,其中递增地计算所述校验和还包括:在所述先前求和级由所述硬件校验和加速器引擎执行的相同时钟周期中,将在所述先前求和级中生成的一个或多个进位比特包装回所述累加器中。
28.根据权利要求23所述的方法,还包括:
基于由所述可编程报头变更处理器向所述硬件校验和加速器引擎提供的信息,利用所述硬件校验和加速器引擎来确定所述校验和是否将被求反,以及
响应于确定所述校验和将被求反,在从所述硬件校验和加速器引擎输出所述校验和之前,对所述校验和求反。
29.根据权利要求23所述的方法,其中:
触发所述硬件校验和加速器引擎以计算针对所述比特串的所述校验和包括:向所述硬件校验和加速器引擎提供存储器中的、所述校验和将被写入的存储器位置的指示,以及
所述方法还包括:利用所述硬件校验和加速器引擎,使所述校验和被写入所述存储器中的所指示的所述存储器位置。
30.根据权利要求23所述的方法,其中触发所述硬件校验和加速器引擎以计算针对所述比特串的所述校验和包括:触发所述硬件校验和加速器引擎以计算针对与以下各项中的一项相对应的比特串的所述校验和:i)被包括在所述分组报头中的互联网协议(IP)报头、ii)被包括在所述分组报头中的用户数据报协议(UDP)报头、或iii)被包括在所述分组报头中的通用UDP封装(GUE)报头。
31.一种网络设备,包括:
分组处理器,被配置为:i)从网络链路接收分组,所述分组包括分组报头和有效载荷;以及ii)确定至少一个出口接口,所述分组将由所述网络设备经由所述至少一个出口接口而被传输;以及
可编程报头变更处理器,所述可编程报头变更处理器被耦合到程序存储器,所述可编程报头变更处理器被配置为执行被存储在所述程序存储器中的计算机可读指令,以对接收到的分组的分组报头执行一个或多个报头变更操作,所述可编程报头变更处理器被配置为:在处理接收到的分组的分组报头期间,触发硬件校验和加速器引擎,以计算针对与所述分组报头的至少一部分相对应的比特串的校验和,所述可编程报头变更处理器被配置为:
将所述比特串划分成所述比特串的多个分段,以及
向所述硬件校验和加速引擎传送所述比特串的所述多个分段;其中:
所述硬件校验和加速器引擎被配置为:至少通过对被传送到所述硬件校验和加速器引擎的、所述比特串的所述多个分段之中的相应分段递增地求和,来递增地计算所述校验和;以及
所述分组处理器还被配置,使具有经修改的报头的所述分组经由所述网络设备的所述至少一个出口接口而被传输,所述经修改的报头包括所述校验和。
32.根据权利要求31所述的网络设备,其中所述可编程报头变更处理器被配置为:
生成相应触发指令,以向所述硬件校验和加速器引擎传送所述比特串的所述多个分段中的相应分段,以及
串行地向所述硬件校验和加速器引擎提供所述相应触发指令。
33.根据权利要求31所述的网络设备,其中所述可编程报头变更处理器被配置为:至少通过发出由所述可编程报头变更处理器支持的一个或多个本机CPU指令来触发所述硬件校验和加速器引擎,其中基于在所述本机CPU指令中指示的地址,所述一个或多个本机CPU指令中的每个本机CPU指令被映射为用于触发所述硬件校验和加速器引擎的加速器触发器指令。
34.根据权利要求31所述的网络设备,其中所述硬件校验和加速器引擎被配置为至少通过在多个求和级上对所述多个分段求和来递增地计算所述校验和,所述硬件校验和加速器引擎被配置为:
将先前求和级的结果存储在累加器中,所述先前求和级的所述结果对应于被传送到所述硬件校验和加速器引擎的、所述多个分段中的两个或更多个分段的和,以及
在后续求和级中,将被存储在所述累加器中的所述先前求和级的所述结果与被传送到所述硬件校验和加速器引擎的、所述多个分段之中的后续分段求和。
35.根据权利要求34所述的网络设备,其中所述硬件校验和加速器引擎还被配置为:在所述先前求和级由所述硬件校验和加速器引擎执行的相同时钟周期中,将在所述先前求和级中生成的一个或多个进位比特包装回所述累加器中。
36.根据权利要求31所述的网络设备,其中所述硬件校验和加速器引擎还被配置为:
基于由所述可编程报头变更处理器向所述硬件校验和加速器引擎提供的信息,确定所述校验和是否将被求反,以及
响应于确定所述校验和将被求反,在输出所述校验和之前,对所述校验和求反。
37.根据权利要求31所述的网络设备,其中:
所述可编程报头变更处理器还被配置为:向所述硬件校验和加速器引擎提供存储器中的、所述校验和将被写入的存储器位置的指示,以及
所述硬件校验和加速器引擎还被配置为使所述校验和被写入所述存储器中的所指示的所述存储器位置。
38.根据权利要求31所述的网络设备,其中所述可编程报头变更处理器被配置为触发所述硬件校验和加速器引擎以计算针对以下各项中的一项的所述校验和:i)被包括在所述分组报头中的互联网协议(IP)报头、ii)在所述分组报头中所包括的用户数据报协议(UDP)报头、或iii)在所述分组报头中所包括的通用UDP封装(GUE)报头。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962798240P | 2019-01-29 | 2019-01-29 | |
US62/798,240 | 2019-01-29 | ||
US16/773,772 | 2020-01-27 | ||
US16/773,772 US11343358B2 (en) | 2019-01-29 | 2020-01-27 | Flexible header alteration in network devices |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111490969A true CN111490969A (zh) | 2020-08-04 |
CN111490969B CN111490969B (zh) | 2024-09-17 |
Family
ID=71733040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010079124.9A Active CN111490969B (zh) | 2019-01-29 | 2020-02-03 | 网络设备中的灵活报头变更 |
Country Status (2)
Country | Link |
---|---|
US (2) | US11343358B2 (zh) |
CN (1) | CN111490969B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111818098A (zh) * | 2020-09-01 | 2020-10-23 | 广东省新一代通信与网络创新研究院 | 一种报文编辑方法、装置及计算机可读存储介质 |
CN114499757A (zh) * | 2022-01-07 | 2022-05-13 | 锐捷网络股份有限公司 | 一种生成校验和的方法、装置及电子设备 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115088239A (zh) | 2019-12-13 | 2022-09-20 | 马维尔以色列(M.I.S.L.)有限公司 | 用于网络设备的混合固定/可编程报头解析器 |
US12095660B2 (en) * | 2020-02-13 | 2024-09-17 | Futurewei Technologies, Inc. | Method for multi-segment flow specifications |
US11593454B2 (en) * | 2020-06-02 | 2023-02-28 | Intel Corporation | Matrix operation optimization mechanism |
US20230224244A1 (en) * | 2022-01-11 | 2023-07-13 | Nokia Solutions And Networks Oy | Network device including trained neural network |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1926828A (zh) * | 2004-10-29 | 2007-03-07 | 日本电信电话株式会社 | 分组通信网络和分组通信方法 |
CN101997834A (zh) * | 2009-08-10 | 2011-03-30 | 北京多思科技发展有限公司 | 支持高性能安全协议的装置 |
CN102104541A (zh) * | 2009-12-21 | 2011-06-22 | 索乐弗莱尔通讯公司 | 报头处理引擎 |
US20120177047A1 (en) * | 2011-01-06 | 2012-07-12 | Amir Roitshtein | Network device with a programmable core |
US20140286352A1 (en) * | 2013-03-20 | 2014-09-25 | Marvell World Trade Ltd. | Cut-through processing for slow and fast ports |
Family Cites Families (62)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
FI104672B (fi) | 1997-07-14 | 2000-04-14 | Nokia Networks Oy | Kytkinjärjestely |
US6304903B1 (en) | 1997-08-01 | 2001-10-16 | Agilent Technologies, Inc. | State machine for collecting information on use of a packet network |
WO2001001272A2 (en) | 1999-06-30 | 2001-01-04 | Apptitude, Inc. | Method and apparatus for monitoring traffic in a network |
US6741591B1 (en) | 1999-11-03 | 2004-05-25 | Cisco Technology, Inc. | Search engine interface system and method |
US8300534B2 (en) | 2000-05-24 | 2012-10-30 | Alcatel Lucent | Programmable packet processor with flow resolution logic |
US6901052B2 (en) | 2001-05-04 | 2005-05-31 | Slt Logic Llc | System and method for policing multiple data flows and multi-protocol data flows |
US6904057B2 (en) | 2001-05-04 | 2005-06-07 | Slt Logic Llc | Method and apparatus for providing multi-protocol, multi-stage, real-time frame classification |
US6944168B2 (en) | 2001-05-04 | 2005-09-13 | Slt Logic Llc | System and method for providing transformation of multi-protocol packets in a data stream |
US7724760B2 (en) | 2001-07-05 | 2010-05-25 | Broadcom Corporation | Method and apparatus for bandwidth guarantee and overload protection in a network switch |
US7305492B2 (en) | 2001-07-06 | 2007-12-04 | Juniper Networks, Inc. | Content service aggregation system |
US7020657B2 (en) | 2001-09-27 | 2006-03-28 | International Business Machines Corporation | Scalable hardware scheduler time based calendar search algorithm |
US7580408B2 (en) | 2001-11-21 | 2009-08-25 | Alcatel Lucent | Configurable packet processor |
US7212531B1 (en) | 2001-11-27 | 2007-05-01 | Marvell Semiconductor Israel Ltd. | Apparatus and method for efficient longest prefix match lookup |
US7046687B1 (en) | 2002-01-16 | 2006-05-16 | Tau Networks | Configurable virtual output queues in a scalable switching system |
US7177311B1 (en) | 2002-06-04 | 2007-02-13 | Fortinet, Inc. | System and method for routing traffic through a virtual router-based network switch |
US20040066748A1 (en) | 2002-10-04 | 2004-04-08 | Burnett Charles James | Method and apparatus for testing a data network |
US7356033B2 (en) | 2002-11-21 | 2008-04-08 | Lucent Technologies Inc. | Method and apparatus for performing network routing with use of power efficient TCAM-based forwarding engine architectures |
US7426608B1 (en) | 2003-12-12 | 2008-09-16 | Rmi Corporation | Method and apparatus for constructing a search key |
KR100564768B1 (ko) | 2003-12-26 | 2006-03-27 | 한국전자통신연구원 | 순차룩업에 의한 패킷헤더 룩업장치 및 방법 |
US7664938B1 (en) | 2004-01-07 | 2010-02-16 | Xambala Corporation | Semantic processor systems and methods |
US20060050693A1 (en) * | 2004-09-03 | 2006-03-09 | James Bury | Building data packets for an advanced switching fabric |
US8218539B2 (en) | 2006-10-18 | 2012-07-10 | Broadcom Corporation | Flexible packet field processor |
US7978700B2 (en) | 2007-03-12 | 2011-07-12 | Marvell Israel (Misl) Ltd. | Apparatus for determining locations of fields in a data unit |
KR20080083828A (ko) | 2007-03-13 | 2008-09-19 | 삼성전자주식회사 | 상태기반 패킷필터링 장치 및 그 장치에서의 테이블 관리방법 |
US8365045B2 (en) | 2007-12-10 | 2013-01-29 | NetCee Systems, Inc. | Flow based data packet processing |
EP2345212B1 (en) | 2008-11-07 | 2014-01-08 | Telefonaktiebolaget L M Ericsson (publ) | Method and apparatus for forwarding data packets using aggregating router keys |
US7924860B1 (en) | 2008-12-23 | 2011-04-12 | Juniper Networks, Inc. | Maintaining data unit order in a network switching device |
US8917738B2 (en) | 2009-04-27 | 2014-12-23 | Lsi Corporation | Multicasting traffic manager in a network communications processor architecture |
US8848715B2 (en) | 2010-03-16 | 2014-09-30 | Marvell Israel (M.I.S.L) Ltd. | Combined hardware/software forwarding mechanism and method |
US8654680B2 (en) | 2010-03-16 | 2014-02-18 | Force10 Networks, Inc. | Packet forwarding using multiple stacked chassis |
US8611352B2 (en) | 2010-04-20 | 2013-12-17 | Marvell World Trade Ltd. | System and method for adapting a packet processing pipeline |
US9141831B2 (en) | 2010-07-08 | 2015-09-22 | Texas Instruments Incorporated | Scheduler, security context cache, packet processor, and authentication, encryption modules |
US20130016725A1 (en) | 2010-12-24 | 2013-01-17 | Telefonaktiebolaget L M Ericsson (Publ) | Method and system for intra-node header compression |
US9106428B2 (en) * | 2012-10-04 | 2015-08-11 | Broadcom Corporation | Multicast switching for distributed devices |
US9455907B1 (en) | 2012-11-29 | 2016-09-27 | Marvell Israel (M.I.S.L) Ltd. | Multithreaded parallel packet processing in network devices |
US9276868B2 (en) | 2012-12-17 | 2016-03-01 | Marvell Israel (M.I.S.L) Ltd. | Maintaining packet order in a parallel processing network device |
US9553820B2 (en) | 2012-12-17 | 2017-01-24 | Marvell Israel (M.L.S.L) Ltd. | Maintaining packet order in a parallel processing network device |
CN104871145A (zh) | 2012-12-20 | 2015-08-26 | 马维尔国际贸易有限公司 | 网络设备中的存储器共享 |
US9106574B2 (en) | 2012-12-27 | 2015-08-11 | Cisco Technology, Inc. | Supporting quality of service differentiation using a single shared buffer |
US10263848B2 (en) | 2013-03-20 | 2019-04-16 | Wolting Holding B.V. | Compiler for and method for software defined networks |
US9246799B2 (en) | 2013-05-10 | 2016-01-26 | Cisco Technology, Inc. | Data plane learning of bi-directional service chains |
US9485187B2 (en) | 2013-07-08 | 2016-11-01 | Futurewei Technologies, Inc. | Intelligent software-defined networking based service paths |
US9124644B2 (en) | 2013-07-14 | 2015-09-01 | Netronome Systems, Inc. | Script-controlled egress packet modifier |
WO2015036870A2 (en) | 2013-09-10 | 2015-03-19 | Marvell World Trade Ltd. | Multi-stage interconnect network in a parallel processing network device |
US9479620B2 (en) | 2013-10-17 | 2016-10-25 | Marvell World Trade Ltd. | Packet parsing and key generation in a network device |
US9467399B2 (en) | 2013-10-17 | 2016-10-11 | Marvell World Trade Ltd. | Processing concurrency in a network device |
US20150172222A1 (en) | 2013-12-16 | 2015-06-18 | James Liao | Data center ethernet switch fabric |
US9813336B2 (en) | 2013-12-18 | 2017-11-07 | Marvell Israel (M.I.S.L) Ltd. | Device and method for increasing packet processing rate in a network device |
US10031758B2 (en) | 2014-03-31 | 2018-07-24 | Netronome Systems, Inc. | Chained-instruction dispatcher |
US9954771B1 (en) | 2015-01-30 | 2018-04-24 | Marvell Israel (M.I.S.L) Ltd. | Packet distribution with prefetch in a parallel processing network device |
US10009270B1 (en) | 2015-03-01 | 2018-06-26 | Netronome Systems, Inc. | Modular and partitioned SDN switch |
US9729442B1 (en) | 2015-03-01 | 2017-08-08 | Netronome Systems, Inc. | Method of detecting large flows within a switch fabric of an SDN switch |
US10033638B1 (en) | 2015-05-29 | 2018-07-24 | Netronome Systems, Inc. | Executing a selected sequence of instructions depending on packet type in an exact-match flow switch |
AU2016385417A1 (en) | 2016-01-08 | 2018-08-23 | Inspeed Networks, Inc. | Bidirectional data traffic control |
US11044203B2 (en) | 2016-01-19 | 2021-06-22 | Cisco Technology, Inc. | System and method for hosting mobile packet core and value-added services using a software defined network and service chains |
US10191852B2 (en) * | 2016-02-29 | 2019-01-29 | Apple Inc. | Methods and apparatus for locking at least a portion of a shared memory resource |
US10230810B1 (en) | 2016-03-18 | 2019-03-12 | Barefoot Networks, Inc. | Storing packet data in mirror buffer |
CN113572758B (zh) | 2016-05-18 | 2023-11-28 | 马维尔以色列(M.I.S.L.)有限公司 | 一种用于处理通信网络中的分组的网络设备和方法 |
US10708200B2 (en) * | 2016-05-18 | 2020-07-07 | Marvell Israel (M.I.S.L) Ltd. | Traffic management in a network switching system with remote physical ports |
WO2018178906A1 (en) | 2017-03-28 | 2018-10-04 | Marvell World Trade Ltd. | Flexible processor of a port extender device |
US10263919B1 (en) | 2017-11-06 | 2019-04-16 | Innovium, Inc. | Buffer assignment balancing in a network device |
US11038993B2 (en) * | 2018-03-14 | 2021-06-15 | Fungible, Inc. | Flexible processing of network packets |
-
2020
- 2020-01-27 US US16/773,772 patent/US11343358B2/en active Active
- 2020-02-03 CN CN202010079124.9A patent/CN111490969B/zh active Active
-
2022
- 2022-05-23 US US17/751,398 patent/US20220360647A1/en active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1926828A (zh) * | 2004-10-29 | 2007-03-07 | 日本电信电话株式会社 | 分组通信网络和分组通信方法 |
CN101997834A (zh) * | 2009-08-10 | 2011-03-30 | 北京多思科技发展有限公司 | 支持高性能安全协议的装置 |
CN102104541A (zh) * | 2009-12-21 | 2011-06-22 | 索乐弗莱尔通讯公司 | 报头处理引擎 |
US20120177047A1 (en) * | 2011-01-06 | 2012-07-12 | Amir Roitshtein | Network device with a programmable core |
US20140286352A1 (en) * | 2013-03-20 | 2014-09-25 | Marvell World Trade Ltd. | Cut-through processing for slow and fast ports |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111818098A (zh) * | 2020-09-01 | 2020-10-23 | 广东省新一代通信与网络创新研究院 | 一种报文编辑方法、装置及计算机可读存储介质 |
CN114499757A (zh) * | 2022-01-07 | 2022-05-13 | 锐捷网络股份有限公司 | 一种生成校验和的方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
US20200244780A1 (en) | 2020-07-30 |
US20220360647A1 (en) | 2022-11-10 |
CN111490969B (zh) | 2024-09-17 |
US11343358B2 (en) | 2022-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111490969B (zh) | 网络设备中的灵活报头变更 | |
TWI668975B (zh) | 網路處理器中封包成形之電路與方法 | |
US7792027B2 (en) | Pipelined packet switching and queuing architecture | |
TWI559706B (zh) | 網路處理器中的封包調度 | |
KR100690418B1 (ko) | 네트워크 프로세서의 멀티캐스트 전송 방법, 이 방법을 수행하기 위한 프로그램을 기록한 컴퓨터로 판독 가능한 기록 매체 및 멀티캐스트 전송 지원 네트워크 프로세서 | |
KR100647949B1 (ko) | 네트워크 패킷 전달 방법 및 패킷 캡슐화 - 캡슐 해제 방법과 컴퓨터 판독 가능한 매체 및 프로세서 | |
TWI566551B (zh) | 封包輸出處理之裝置及方法 | |
US7769015B2 (en) | High performance network adapter (HPNA) | |
US7957392B2 (en) | Method and apparatus for high-performance bonding resequencing | |
US9094219B2 (en) | Network processor having multicasting protocol | |
US20040037322A1 (en) | Methods and apparatus for processing packets including distributing packets across multiple packet processing engines and gathering the processed packets from the processing engines | |
US8873550B2 (en) | Task queuing in a multi-flow network processor architecture | |
JP2015165650A (ja) | ソフトウェア・デファインド・ネットワークエンジンにおいてパケット修正・転送のためにルックアップを生成し決定を行う装置および方法 | |
US11681470B2 (en) | High-speed replay of captured data packets | |
US7404015B2 (en) | Methods and apparatus for processing packets including accessing one or more resources shared among processing engines | |
CN111866204A (zh) | 无锁有状态网络地址转换 | |
US8990422B1 (en) | TCP segmentation offload (TSO) using a hybrid approach of manipulating memory pointers and actual packet data | |
CA2494579C (en) | Packet processing engine | |
Elbeshti et al. | A study using a RISC core for 100 GBPS Ethernet Network Interfaces |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |