用于软件定义的数据中心网络的协议独立的可编程交换机(PIPS)的制作方法

文档序号:13336484阅读:328来源:国知局
用于软件定义的数据中心网络的协议独立的可编程交换机(PIPS)的制作方法

相关申请

按照35u.s.c.§119(e),本申请要求于2015年3月13日提交的美国临时专利申请号62/133,166,题为“pips:protocolindependentprogramableswitch(pips)forsoftwaredefineddatacenternetworks”的优先权,并且其是于2013年12月30日提交的共同未决的美国专利申请号14/144,270,题为“apparatusandmethodofgeneratinglookupsandmakingdecisionsforpacketmodifyingandforwardinginasoftware-definednetworkengine”的部分接续申请案,这两项专利均通过引用并入本文。

本发明涉及网络设备领域。特别地,本发明涉及软件定义的数据中心设备、系统和方法。



背景技术:

软件定义网络(sdn)范例有望通过对网络的细粒度控制来满足现代数据中心的需求。然而,固定管线交换机无法提供软件定义数据中心(sddc)架构为优化底层网络而要求的灵活性和可编程性的水平。具体来说,虽然sddc架构将应用程序置于创新的中心,但是这些应用程序的完整功能受到网络设备支配的刚性管线的阻碍。例如,应用程序被迫设计为使用现有协议,这减缓了创新速度。



技术实现要素:

本发明的实施例涉及软件定义网络(sdn)的系统、设备和方法,其包括一个或多个输入端口、可编程解析器、多个可编程查找和决策引擎(lde)、可编程查找存储器、可编程计数器、可编程重写块、以及一个或多个输出端口。解析器、查找和决策引擎、查找存储器、计数器和重写块的可编程性使得用户能够将系统内的每个微芯片定制为特定分组环境、数据分析需求、分组处理功能、以及其他所需功能。此外,同一个微芯片能够被动态地重新编程用于其他目的和/或优化。而且,通过提供具有灵活表管理的可编程管线,pips使得软件定义方法能够满足许多分组处理需求。

第一个方面涉及用于软件定义网络的交换机微芯片。微芯片包括:可编程解析器,其从多个传入分组的报头来解析所需的分组上下文数据,其中报头由解析器基于解析器的软件定义解析图来识别;具有多个表的一个或多个查找存储器,其中查找存储器被配置为逻辑覆盖,使得查找存储器的比例和宽度由用户来软件定义;多个可编程查找和决策引擎的管线,基于存储在查找存储器中的数据和由用户编程到引擎中的软件定义逻辑,来接收和修改分组上下文数据;可编程重写块,其基于从引擎中的一个引擎接收的分组上下文数据,来重建并准备在交换机内处理的分组报头用于输出;可编程计数器块,用于对查找和决策引擎的计数来操作,其中计数器块所计数的操作由用户来软件定义。在一些实施例中,从解析图的相同初始节点开始,通过解析图的每条路径表示能够被解析器识别的报头之一的层类型组合。在一些实施例中,路径的部分能够相重叠。在一些实施例中,重写块扩展由解析器解析的报头中的每个报头的每一层,以基于与层相关联的协议来形成通用大小的扩展层类型。在一些实施例中,重写块生成位向量,该位向量指示扩展层类型的哪些部分包含有效数据、以及扩展层类型的哪些部分包含在由重写块扩展期间所增加的数据。在一些实施例中,查找存储器的表各自能够在哈希、直接访问、或最长前缀匹配的操作模式中被独立设置。在一些实施例中,查找存储器的表能够被用户动态地重新格式化和重新配置,使得被分割并分配给与查找存储器相耦合的查找路径的、查找存储器的区块的数量是基于查找路径中的每条查找路径所需的存储器容量。在一些实施例中,查找和决策引擎中的每个查找和决策引擎包括:密钥生成器,其被配置来为每个输入令牌生成一组查找密钥;以及输出生成器,其被配置来基于与这一组查找密钥相关联的查找结果的内容而修改输入令牌,来生成输出令牌。在一些实施例中,查找和决策引擎中的每个查找和决策引擎包括:输入缓冲器,用于在输入令牌被查找和决策引擎处理之前,临时存储输入令牌;简档表,用于标识每个输入令牌中的字段位置;查找结果合并器,用于将输入令牌和查找结果相结合,并用于将经结合的输入令牌和查找结果发送到输出生成器;环回检查器,用于确定输出令牌是应发送回当前查找和决策引擎、还是应发送至另一个查找和决策引擎;环回缓冲区,用于存储环回令牌。在一些实施例中,密钥生成器和输出生成器的控制路径是可编程的,使得用户能够配置查找和决策引擎来支持不同的网络特性和协议。在一些实施例中,计数器块包括:n个环绕计数器,其中n个环绕计数器中的每个环绕计数器与计数器标识相关联;以及溢出fifo,该溢出fifo被n个环绕计数器使用和共享,其中该溢出fifo存储所有溢出的计数器的相关联的计数器标识。

第二个方面涉及用于软件定义网络的交换机微芯片的操作方法。该方法包括:利用可编程解析器从多个传入分组的报头解析所需的分组上下文数据,其中报头由解析器基于解析器的软件定义解析图来识别;基于存储在具有多个表的查找存储器中的数据和由用户编程到引擎中的软件定义逻辑,利用多个可编程查找和决策引擎的管线来接收和修改分组上下文数据;基于来自查找存储器中的请求,利用查找和决策引擎,传送一个或多个数据查找请求,并且接收处理的数据,其中查找存储器被配置为逻辑覆盖,使得查找存储器的比例和宽度由用户来软件定义;基于查找和决策引擎的动作,利用可编程计数器块来执行计数操作,其中计数器块所计数的计数器操作由用户来软件定义;以及利用可编程重写块来重建在交换机内处理的分组报头用于输出,其中该重建是基于从查找和决策引擎中的一个查找和决策引擎接收的分组上下文数据。在一些实施例中,从解析图的相同初始节点开始,通过解析图的每条路径表示能够被解析器识别的报头之一的层类型组合。在一些实施例中,路径的部分能够相重叠。在一些实施例中,重写块扩展由解析器解析的报头中的每个报头的每一层,以基于与层相关联的协议来形成通用大小的扩展层类型。在一些实施例中,重写块生成位向量,该位向量指示扩展层类型的哪些部分包含有效数据、以及扩展层类型的哪些部分包含在由重写块扩展期间所增加的数据。在一些实施例中,查找存储器的表各自能够在哈希、直接访问、或最长前缀匹配的操作模式中被独立设置。在一些实施例中,查找存储器的表能够被用户动态地重新格式化和重新配置,使得被分割并分配给耦合至查找存储器的查找路径的、查找存储器的区块的数量是基于查找路径中的每条查找路径所需的存储器容量。在一些实施例中,查找和决策引擎中的每个查找和决策引擎包括:密钥生成器,其被配置来为每个输入令牌生成一组查找密钥;以及输出生成器,其被配置为通过基于与这一组查找密钥相关联的查找结果的内容而修改输入令牌,来生成输出令牌。在一些实施例中,查找和决策引擎中的每个查找和决策引擎包括:输入缓冲器,用于在输入令牌被查找和决策引擎处理之前,临时存储输入令牌;简档表,用于标识每个输入令牌中的字段位置;查找结果合并器,用于将输入令牌和查找结果相结合,并将经结合的输入令牌和查找结果发送到输出生成器;环回检查器,用于确定输出令牌是应发送回当前查找和决策引擎、还是应发送至另一个查找和决策引擎;以及环回缓冲区,用于存储环回令牌。在一些实施例中,密钥生成器和输出生成器两者的控制路径是可编程的,使得用户能够配置查找和决策引擎来支持不同的网络特性和协议。在一些实施例中,计数器块包括:n个环绕计数器,其中n个环绕计数器中的每个环绕计数器是与计数器标识相关联;以及溢出fifo,该溢出fifo被n个环绕计数器使用和共享,其中该溢出fifo存储所有溢出的计数器的相关联的计数器标识。

第三个方面涉及架顶式交换机微芯片。微芯片包括:可编程解析器,该可编程解析器从多个传入分组的报头解析所需的分组上下文数据,其中报头由解析器基于解析器的软件定义解析图来识别,并且其中从解析图的相同初始节点开始,通过解析图的每条路径表示能够被解析器识别的报头之一的层类型组合;一个或多个查找存储器,该查找存储器具有多个表、密钥生成器和输出生成器,该密钥生成器被配置成为每个输入令牌生成一组查找密钥,该输出生成器被配置成通过基于与这一组查找密钥相关联的查找结果的内容而修改输入令牌,来生成输出令牌,其中查找存储器被配置为逻辑覆盖,使得查找存储器的比例和宽度能够由用户软件定义,并且其中查找存储器中的每个查找存储器被配置成在哈希、直接访问、或最长前缀匹配的操作模式中选择性操作;多个可编程查找和决策引擎的管线,基于存储在查找存储器中的数据和由用户编程到引擎中的软件定义逻辑来接收和修改分组上下文数据;可编程重写块,其基于从引擎中的一个引擎接收的分组上下文数据,来重建并准备在交换机内处理的分组报头用于输出,其中重写块扩展由解析器解析的报头中的每个报头的每一层,以基于与层相关联的协议来形成通用大小的扩展层类型;可编程计数器块,其用于查找和决策引擎的计数操作,其中计数器块包括:n个环绕计数器,该n个环绕计数器中的每个环绕计数器与计数器标识相关联;以及溢出fifo,该溢出fifo被n个环绕计数器使用和共享,其中该溢出fifo存储溢出的所有计数器的相关联的计数器标识,并且其中计数器块所执行的操作由用户来软件定义。

附图说明

图1图示了根据一些实施例的软件定义网络系统。

图2图示了根据一些实施例的解析器的解析器引擎。

图3图示了根据一些实施例的示例性的直接连接的循环图或解析树。

图4图示了根据一些实施例的操作解析器编程工具的方法。

图5图示了根据一些实施例的本地解析图或表的示例性结构。

图6图示了根据一些实施例的网络交换机的一个示例性方法。

图7图示了根据一些实施例的网络交换机的另一个示例性方法。

图8图示了根据实施例的lde的框图,用于生成查找密钥和修改令牌。

图9图示了根据实施例的查找存储器系统。

图10图示了根据实施例的配置和编程并行查找存储器系统的方法。

图11图示了根据实施例的计数器块的框图。

图12图示了根据实施例的计数器块(诸如图11中的计数器块)的方法。

图13图示了根据一些实施例的操作sdn系统的方法。

具体实施方式

软件定义网络(sdn)的系统、设备和方法的实施例包括一个或多个输入端口、可编程解析器、多个可编程查找和决策引擎(lde)、可编程查找存储器、可编程计数器、可编程重写块、以及一个或多个输出端口。解析器、lde、查找存储器、计数器和重写块的可编程性使得用户能够将系统内的每个微芯片定制为特定分组环境、数据分析需求、分组处理功能、以及其他所需功能。此外,同一个微芯片能够被动态地重新编程用于其他目的和/或优化。因此,系统具有以可编程方式定制系统性能的能力,创造出可以应用于各种配置的统一硬件和软件。此外,它允许优化尾部配置到特定应用程序的需求。换句话说,系统软件定义的灵活性具有定制相同交换机微芯片的能力,使得微芯片尽管位于网络中的多个不同地方,仍然能提供相同的高带宽和高端口密度。

图1图示了根据一些实施例的软件定义网络(sdn)系统100的框图。在一些实施例中,系统100能包括单个完全集成的交换机微芯片(例如架顶式交换机)。备选地,系统100能包括多个通信耦合的交换机微芯片,其共同地和/或独自地包括系统100。系统100(或系统内的每个微芯片)包括一个或多个输入端口102、解析器104、多个查找和决策引擎(lde)106(形成管线和/或网格)、查找存储器108、计数器110、重写块112、以及一个或多个输出端口114。端口102和114用于接收和传送分组进出系统100。解析器104是可编程分组报头分类器,其用于实现软件定义协议解析。具体来说,解析器104并没有硬编码到特定协议,而是基于软件定义解析树来解析传入报头。因此,解析器能从所有所需报头中识别和提取必要的数据。查找存储器108能包括直接访问存储器、哈希存储器、最长前缀匹配(lpm)、三进制可内容寻址存储器(tcam)、静态随机存取存储器(sram)、和/或用于系统操作的其他类型/分配的存储器(例如分组存储器、缓冲存储器)。特别地,查找存储器108能够包括片上存储器池,其被配置为逻辑覆盖来提供软件定义的可变比例和宽度。因此,存储器108的表能在哈希、lpm、直接访问或其他操作模式中进行独立的逻辑设置,而且能基于软件需求进行动态重新格式化。

图13图示了根据一些实施例的操作sdn系统的方法。如图13所示,在步骤1302,在解析器104处经由一个或多个输入端口102来接收网络分组。在步骤1304,解析器104基于可编程解析树来识别和解析网络分组的报头以从相关字段中提取数据,并将控制位和解析的报头放在令牌中。在步骤1306,解析器104将令牌发送至一个或多个lde106,并将原始分组的有效负载/数据发送至查找存储器108的分组存储器。在步骤1308,lde管线内的每个lde106基于存储在查找存储器108中的数据和从管线内的解析器104(或前一个lde106)接收的令牌/分组上下文,来执行用户编程的处理决策。同时在步骤1310,计数器110监视/接收更新数据,用于基于用户编程与该计数器绑定的转发/管线过程的事件。在步骤1312,随后在管线的末端,最后一个lde106将分组/分组上下文传递给重写块112。在步骤1314,重写块112基于接收的分组数据来格式化和建立/重建输出分组报头,并将其传递至输出端口,在输出端口处它能够与从查找存储器108的分组存储器获取的对应分组数据一起输出。换句话说,重写块112能够从处理(用于封装和解封装)解决分组上所需的修改,从而重建和准备输出分组。因此,在步骤1316,输出分组能够被发送到sdn系统的另一个部件用于进一步处理,或者被转发到网络中的另一个设备,或被发回(环回)到解析器,以能够进行更多所需的查找。

解析器/重写块

解析器104能够包括一个或多个解析器引擎来标识网络分组的内容,重写112能够包括一个或多个重写引擎,以在分组被网络交换机传送出去之前,修改分组。(多个)解析器引擎和(多个)重写引擎是灵活的,并且在可编程的基础上进行操作。特别地,解析器104能解码分组,并且提取内部的可编程层信息(以下将详细描述),其中由系统100来使用内部的层信息以做分组通过管线的转发决策。另外如下所述,重写块112对该内部层信息进行转换,以根据需要来修改分组。如上所述,系统100也包含存储器(例如查找存储器108)来存储由系统100使用的数据。例如,存储器能够存储用于修改协议报头的一组通用命令。又例如,存储器能以解析图(或表)的形式来存储通用格式协议的软件定义映射,其中每个协议报头根据特定于对应协议的一个软件定义映射来表示。清晰的是,这些映射能被用来标识协议的不同变型以及协议上的不同变型(包括以前未知的新协议)。在一些实施例中,解析图包括编程到解析图(或表)中的每个协议层组合的每个协议层的层信息。

在以太网中,分组包括多个协议层。每个协议层携带不同信息。众所周知的层的一些例子有:以太网、pbb以太网、arpipv4、ipv6、mpls、fcoe、tcp、udp、icmp、igmp、gre、icmpv6、vxlan、trill和cnm。理论上,这些协议层能够以任意顺序发生。然而,这些层的组合只有部分为大家熟知。这些层的有效组合的一些示例有:以太网;以太网,arp;以太网,cnm;以太网,fcoe;以太网,ipv4;以太网,ipv4,icmp;和以太网,ipv4,igmp。

在一些实施例中,网络交换机支持17种协议和8个协议层,因此存在817种可能的协议层组合。分组可以包括三协议层的组合,诸如以太网,ipv4和icmp。又例如,分组可以包括七协议层的组合,诸如以太网,ipv4,udp,vxlan,以太网和arp。尽管有817种可能的协议层组合,但仅出现这些层的一些众所周知的组合。在一些实施例中,所有已知的协议层组合都被唯一标识,并转换成一个唯一的编号,即分组标识符(pktid)。存储在网络交换机的存储器中的解析表能够被编程,以包括每个已知协议层组合的每层的层信息。在实践中,这种本地解析表包括少于256个协议层组合。在一些实施例中,这种本地表包括212个已知协议层组合。本地表能够被动态地重新编程以包括更多或更少的协议层组合。

在一些实施例中,本文描述的解析器和/或重写块可以与美国专利申请号14/309,603(题为“methodofmodifyingpacketstogenerateformatforenablingprogrammablemodificationsandanapparatusthereof”,于2014年6月19日提交)的解析器和/或重写块相同,将其通过引用并入本文。在一些实施例中,本文描述的解析器可以与美国专利申请号14/675,667(题为“aparserengineprogrammingtoolforprogrammablenetworkdevices”,于2015年3月31日提交)的解析器相同,将其通过引用并入本文。

解析器

根据一些实施例,图2图示了解析器104的解析器引擎99。如图2所示,解析器引擎99包括一个或多个袋鼠解析器单元(kpu)202,其与字段提取单元208耦合,并且与和sram206配对的tcam204耦合。其中,来自引擎99一个级的每个sram206与下一级的kpu202通信耦合,从而将这一级的确定状态/上下文(与主题分组报头相关联)馈送到下一级的kpu202,这样当解析分组报头时,可以遵循以下描述的解析树/图300。备选地,tcam204和/或sram206可以是本领域已知的其他类型的存储器。此外,尽管tcam204,204'和sram206,206'存储器对与每个kpu202,202'以分离的形式示出,但是它们可以包含单个tcam存储器和/或sram存储器,其中每个kpu202,202'与存储器的一部分相关联。在操作中,kpu202,202'接收传入分组200,并基于存储在tcam204和sram206中的解析数据来解析分组200的报头数据202。特别地,报头数据202可以被tcam204标识,并且tcam204的索引或其他标识可以被用于在sram206内找到正确的数据,该数据指示需要对分组200做何动作。此外,与kpu任意一级的sram206内分组200相关联的数据可以包括分组200/报头数据202的状态/上下文信息,该信息被发送至下一级的kpu202',其被解析树/图300所包括,从而使得解析树/图能够基于以下描述的分组200/报头数据202的状态/上下文数据进行转换或更新(例如,到树/图内的下一个结点)。基于报头数据202的解析,字段提取单元208能够从分组200中提取所需的数据用于从解析器引擎99输出,从而使得分组200能够被恰当地处理。

为了使解析器引擎99能够执行上述解析功能,它需要能被解析编程工具编程,从而可以在指定可能报头数据的范围内,任何类型的报头数据(例如,包括一个或多个报头层类型的报头)都能够恰当地被解析器引擎99解析。因此,编程工具被配置为读取输入配置文件,并且(基于文件内的数据)自动地生成对解析器引擎99编程所需的一组值,以处理由配置文件表示的所有可能报头数据。

配置文件指示可能的报头数据的范围,这些报头数据均能够由解析引擎99通过描述可能报头数据的直接连接的循环图或解析树来解析。图3图示了根据一些实施例的示例性的直接连接的循环图或解析树300。如图3所示,循环图300包括一个或多个节点或叶子302,每个节点或叶子通过单向分支或边缘304各自耦合在一起。特别地,循环图或树300能够包括作为起始点的根节点302'、多个叶节点302、以及节点302之间的多个转换/分支304。节点302,302'能够各自包括报头类型或层名称(例如,eth、ipv4、arp、ptp)、指示的报头层的提前或分组指针偏移值(未示出)、层类型标识(未示出)和层内的状态值(未示出)。尽管如图3中所示,图300包括12个分支304和六个节点302、302'(其具有根据示例性结构而耦合在一起的示例性类型),但是可以想到相同或不同类型的更多或更少的节点302,302'通过更多或更少的分支304而被耦合在一起。在一些实施例中,层类型对应于开放系统互连(osi)模型的七个层。备选地,一个或多个层类型可以偏离osi模型,使得根据osi将在不同层的报头被赋予相同的层类型值,反之亦然。附加地,节点302,302'可以包括任何连接节点302的报头层名称。转换/分支304可以各自包括匹配值(例如8100)、以及与两个相关联节点302之间的转换相关联的掩码(例如ffff)。以这种方式,匹配和掩码值能够表示两个节点302之间的转换。因此,通过图或树300(在节点302之间经由分支304)的路径的排列可以各自表示一组报头数据202,这些数据具有由路径内节点302表示的分组报头的组合。这些路径表示需要被可编程解析器引擎的kpu202解析的范围。

为了确定通过循环图300的所有可能路径,工具能用修改的深度优先搜索来沿图或树300行走。特别地,从节点302之一开始,编程工具沿图或树300的一条可能路径(如按方向性连接所允许的)向下走,直到工具到达终止节点(例如,没有输出分支304的节点)或起始节点(例如,当循环已经完成时)。备选地,在一些实施例中,即使到达起始节点,编程工具能够继续,直到到达终止节点,或者第二次或多次到达起始节点。在任何情况下,在“行走”期间,该工具可以将与每个节点302和横穿的分支304相关联的数据顺序地添加到堆栈,使得堆栈包括所采用的路径的日志或列表。当到达终止节点或起始节点302时,当前堆栈被确定,并被保存为完整路径,并且该过程被重复以找到新的完整路径,直到已经确定了所有可能的路径及与其相关联的堆栈。以这种方式,能形成分组200报头数据202的每个报头组合都可以由一条路径来表示,使得编程工具提供有基于输入配置文件自动标识所有可能的报头数据202的优势。在一些实施例中,可以省略由工具确定的一个或多个报头组合或路径。备选地,可以包括图或树300内所有可能的报头。

最后,解析器编程工具可以能够将tcam和sram值存储在解析器104的每个kpu202的所分配的tcam204和sram206对中,这样解析器104能够解析在输入配置文件的图或树300内指示的所有可能报头202。

图4图示了根据一些实施例的操作解析器编程工具的方法。如图4所示,在步骤402,存储解析器编程工具的解析设备输入该工具的解析器配置文件。在一些实施例中,编程工具包括图形用户界面,该界面具有能够输入解析器配置文件的输入特征。备选地,编程工具能为配置文件自动地搜索解析器设备。在步骤404,解析器编程工具基于配置文件来生成解析器引擎编程值。当被编程到与多个解析引擎(例如kpu202)中的每一个解析引擎相关联的存储器(例如tcam204,sram206)中时,该值使解析引擎能标识由配置文件表示的分组报头(例如报头数据202)的一组不同组合中的每个组合。在一些实施例中,基于解析器配置文件的图300的一个或多个可能路径来生成值,其中每条路径对应于分组报头202的分离的组合(例如堆栈或扁平化堆栈)。在一些实施例中,值的生成包括解析器编程工具自动地计算直接连接的循环图300的所有路径。例如,该工具能够确定每条路径,该路径或者结束和开始于图内的同一个节点302,或者结束于图300内没有输出分支304的终止节点302。在一些实施例中,该方法还包括工具来存储在tcam204的条目内的值的第一部分,使得与具有不同层类型的报头类型相关联的数据不占用tcam条目。在一些实施例中,该方法还包括用工具来自动地去除tcam204条目中的重复条目。因此,该方法具有对一个或多个解析器引擎自动编程的优势,从而使这些解析器引擎能够解析报头类型的任何组合,以形成由配置文件表示的分组200的报头数据202。

重写

图5图示了根据一些实施例的本地解析表500的示例性结构。解析图500能够由软件定义,以便为已知和未知的传入分组报头定制解析/重写。换句话说,分组概括方案允许软件来定义一小组通用命令,这一小组通用命令单纯地基于给定的协议层,并且独立于该协议层之前或之后的层。这具有额外的好处,其可以提供硬件灵活性来自我未来防范协议变更和增加。使用pktid索引的解析表500中的每个协议层组合包括该协议层组合的每个协议层的信息,其被示出为layer0信息、layer1信息和layern信息。通过索引pktid,可以访问或检索分组的所有n层的信息。

每个协议层的信息均能够包括以下各项:层类型、层数据偏移和杂项信息。然而,更多的信息可以被存储在本地表500中。简而言之,层类型是指协议层的相关联协议(例如,ip/tcp/udp/以太网),层数据偏移提供协议层中层数据的起始位置,并且杂项信息包括诸如校验和、长度数据之类的数据。在解析传入分组时,解析器引擎能够基于解析表来标识传入分组的pktid。具体来说,构成分组报头的层类型的每个组合都具有唯一的pktld。重写引擎使用pktid作为解析表的密钥,这为重写引擎提供了为进行修改而概括分组的每个协议层所需的所有信息。换句话说,重写引擎使用pktid来访问或检索解析表中分组的每个协议层的信息,而不是从解析器引擎接收解析结果。

层类型。层类型和分组一个或多个字段上的哈希的唯一组合为重写引擎提供了每个协议层的“通用格式”。在一些实施例中,这种唯一的组合指定存储在存储器中通用格式协议的一种软件定义映射。重写引擎使用通用格式来扩展协议层,并使用软件命令来修改协议层。该信息还告诉重写引擎分组内每个协议层开始的地方。

层数据偏移。重写引擎使用数据来修改传入报头层。该数据可以分布在分组内的任何地方。由于层的大小可以变化,因此重写引擎在修改过程中需要使用的数据偏移量也可以变化,这限制了重写引擎可以从哪里拾取哪些数据的硬件灵活性。

从传入分组报头提取的数据以分层方式排列。提取的数据结构被排列为使得层数据结构的起始偏移针对每个pktid是唯一的。每层的层数据偏移用于标识提取数据的位置用于修改。由于分组内的层结构和从层中提取的数据的位置是通过分组的pktid来标识,所以软件和硬件使用相同的唯一标识符来管理提取的数据,这简化了重写引擎中的命令。杂项信息(诸如校验和、长度数据的信息)告诉重写引擎关于相关联协议层的特殊处理要求,诸如校验和重新计算、以及报头长度更新。

图6图示了根据一些实施例的网络交换机的示例性方法600。在步骤605,解析器引擎检查传入分组以标识分组的pktid。在一些实施例中,解析器引擎将pktid传递到重写引擎,而不是将分组的解析数据传递给重写引擎。在步骤610,重写引擎引用解析表,该解析表定义了由网络交换机接收的分组的不同分组结构。重写引擎使用pktid作为解析表的密钥来提取修改所需的分组的每个协议层的信息。在步骤615,重写引擎基于存储在解析表中的数据来修改分组。通常,重写引擎在修改分组之前扩展分组的每个协议层。协议层的扩展和修改在别处讨论。

图7图示了根据一些实施例的网络交换机的另一个示例性方法700。在步骤705,解析表被存储在和/或被编程到存储器(例如查找存储器108)中。解析表定义了分组的不同分组结构。每个分组结构由pktld索引。每个分组结构表示一个协议层组合,并且包括协议层组合的每个协议层的层信息。解析表可以被更新,以添加代表新协议的新分组结构。解析表也可以被更新,以响应于协议的改变来修改分组结构。因此,解析图能够经由软件而动态地改变。在步骤710,在传入端口处接收分组。在步骤715,分组的pktld可以被标识。在一些实施例中,解析器标识分组的pktld。在步骤720,分组的每个协议层的信息(例如概括性信息)可以被访问。该信息位于解析表中。然后,根据对应协议的通用格式,该信息可以被用于概括分组的协议报头的每一层。通用格式在存储器中是软件定义的(例如,可以由用户经由编程/重新编程按照需要进行调整)。换句话说,报头的每个协议层可以被扩展,使得报头层中任何缺失的可选字段或其他字段能够以零加回到该层中。因此,一旦被扩展,报头的每一层将包括所有可能的字段的值,即使这些值在接收到的报头层中缺失。然后可以存储位向量,该位向量指示哪些字段是有效数据、以及哪些字段是为了概括的目的而被添加的。

通过对概括的协议报头应用至少一个命令,可以对概括的协议报头进行修改。在一些实施例中,通过使用确定用于修改概括的协议报头的数据的位置的信息而创建位向量,来修改概括的协议报头。特别地,位向量的每个位表示报头的字节是否有效,或者(在扩展/概括期间)被添加以便填充缺少的字段(例如,未使用的报头协议的可选字段)。重写引擎概括协议报头,并修改概括的协议报头。每个协议层具有相应的协议。如上所述,可以存在更多或更少的协议层。重写引擎能够检测任何协议报头中的缺失字段,并将每个协议报头扩展为通用格式。概括/规范层是指已经扩展为其通用格式的协议层。简而言之,每个规范层包括一个位向量,其中标记为0的位用于无效字段,而标记为1的位用于有效字段。

重写引擎不仅使用每个协议报头的位向量来允许协议报头基于修改用通用格式的扩展,重写引擎还使用位向量来允许协议报头从通用格式折叠成“常规”报头。通常,位向量中的每一位表示概括协议报头的一个字节。位向量中标记为0的位对应于无效字节,而位向量中标记为1的位对应于有效字节。在所有命令都已在概括协议报头上操作从而形成新的协议报头之后,重写引擎使用位向量来去除所有无效字节。因此,重写引擎使用位向量来允许分组的协议报头的扩展和折叠,从而使得能够通过使用一组通用命令来允许对分组的灵活修改。因此,重写提供有可编程的优势,使得用户能够组装适合其需要的分组的修改(例如,通过重写来进行扩展、折叠、或其他软件定义的分组修改)。

查找和决策引擎

查找和决策引擎106能够生成输入令牌的查找密钥,并且基于查找结果来修改输入令牌,使得对应的网络分组可以被系统100中的其他部件正确地处理和转发。用于生成密钥和修改令牌的条件和规则是可以通过软件完全可编程的,并且是基于为lde106配置的网络特性和协议。lde106包括两个主要块:密钥生成器和输出生成器。正如名称所示,密钥生成器为每个输入令牌生成一组查找密钥,输出生成器生成一个输出令牌,该输出令牌是基于查找结果的输入令牌的修改版本。密钥生成器和输出生成器具有类似的设计架构,其包括控制路径和数据路径。控制路径检查其输入中的特定字段和位是否满足配置协议的条件。基于检查结果,其相应地生成指令。数据路径执行由控制路径生成的所有指令,用于在密钥生成器中生成一组查找密钥,或用于在输出生成器中生成输出令牌。在密钥生成器和输出生成器的控制路径中,用于密钥生成和输出生成的条件和规则是完全可编程的。换句话说,lde106能以可编程的形式形成输入密钥用于匹配查找存储器,也能为从查找存储器返回的结果以可编程的形式形成输出密钥,以及能实现输入令牌和查找表结果的结合来形成传递给下一个可寻址lde的输出令牌。

lde106还包括:输入fifo,其用于临时存储输入令牌;查找结果收集器/合并器,其用于收集查找密钥的查找结果;环回检查,其用于在同一lde106处需要对该令牌进行多次串行查找的情况下,将输出令牌发送回lde106;以及环回fifo,其用于存储环回令牌。环回路径具有的优先级高于输入路径,以保证无死锁(deadlockfreedom)。

在一些实施例中,本文描述的lde能够与美国专利申请号14/144,270(题为“apparatusandmethodofgeneratinglookupsandmakingdecisionsforpacketmodifyingandforwardinginasoftware-definednetworkengine”,于2013年12月30日提交)描述的lde相同,其通过引用并入本文。此外,密钥生成器和输出生成器被类似地配置成美国专利申请号14/144,260(题为“methodandapparatusforparallelandconditionaldatamanipulationinasoftware-definednetworkprocessingengine”,于2013年12月30日提交)中讨论的sdn处理引擎,其通过引用并入本文。

图8图示了根据一个实施例的lde106的框图,用于生成查找密钥和修改令牌。如上所述,sdn引擎106被称为查找和决策引擎。lde106基于查找结果和输入令牌的内容来生成查找密钥并修改输入令牌。用于生成查找密钥和修改输入令牌的条件和规则可以由用户来编程。

lde106可以从解析器接收输入令牌。解析器解析每个网络分组的报头,并输出每个网络分组的输入令牌。输入令牌具有预定义的格式,使得lde106能够处理输入令牌。如果多个lde耦合在链中,则lde106还可以从先前的lde接收输入令牌,用于串行地执行多个查找和令牌修改步骤。

lde106从上游解析器或上游lde接收的输入令牌首先在输入fifo805内被缓冲。输入令牌在输入fifo805内等待,直到lde准备好处理它们。如果输入fifo805已满,则lde106将通知输入令牌的源(即上游解析器或上游lde)停止发送新的令牌。

每个输入令牌中的字段的位置是通过从表(即模板查找块810)查找来标识。输入令牌接下来被发送到密钥生成器815。密钥生成器815被配置为拾取输入令牌中的特定数据,用于构建查找密钥。密钥生成器815的配置是用户定义的,并且取决于用户想要lde106来执行的网络特性和协议。

每个输入令牌的查找密钥(或一组查找密钥)从密钥发生器815输出,并被发送到远程搜索引擎(未示出)。远程搜索引擎可以执行多个可配置的查找操作,诸如tcam、直接访问、基于哈希查找、以及最长前缀匹配查找。对于发送到远程搜索引擎的每个查找密钥,查找结果返回至查找结果收集器/合并器820处的lde106。

在为每个输入令牌生成查找密钥(或一组查找密钥)时,密钥生成器815还将输入令牌传递到查找结果收集器/合并器820。输入令牌在查找结果收集器/合并器820内被缓冲。输入令牌在查找结果收集器/合并820内等待,直到由远程搜索引擎返回查找结果。一旦得到查找结果,输入令牌连同查找结果就被发送到输出发生器825。

基于输入令牌的查找结果和内容,输出生成器825在将修改的令牌发送到输出之前,修改输入令牌的一个或多个字段。与密钥生成器815类似,输出生成器825(关于例如令牌修改的条件和规则)的配置是用户定义的,并且取决于用户想要lde106来执行的网络特性和协议。

在令牌被修改之后,修改的令牌被发送到环回检查器830。环回检查器830确定修改的令牌是应该被发送回当前的lde以进行另一查找,还是应该被发送到相关联sdn网络系统中的另一个引擎。这种环回检查是一种设计选项,其优势在于允许单个lde对相同的令牌串行地执行多次查找,而不是使用多个引擎执行相同的操作。该设计选项对由于各种限制(诸如芯片面积预算)而具有有限数量lde的系统是有用的。发送回当前的lde的令牌经由环回路径840在环回fifo835内被缓冲。环回路径840总是比输入路径(例如,从输入fifo805)具有更高的优先级,以避免死锁。尽管图8中已经描述为使用fifo缓冲器,其他缓冲器类型也是可能的。

查找存储器

当由lde106或系统100的其他部件对查找存储器108进行数据请求/查找时,系统100支持共享查找存储器108池的多个并行查找。为每个查找保留的存储器108的数量是可以基于该查找所需的存储器容量来编程/重新配置。换句话说,查找存储器108的容量和逻辑功能可以被动态地重新配置。此外,每个查找可以配置为执行基于哈希的查找、或直接访问查找。共享存储器被分组成均匀的区块。每个查找被分配一组区块。一组中的区块不与其他组共享,使得所有的查找能够并行执行而不发生冲突。系统100还包括可以重新配置的连接网络,这些网络是基于如何为每次查找分配区块来编程的。

图9图示了根据实施例的查找存储器系统900。系统900被配置为使用多个共享存储器来实现n个同时或并行的查找路径,而不发生冲突。系统900为每个查找路径的每个k位输入密钥返回n位数据。系统900包括框905-框930。框915处共享查找存储器108的池分组为t个共享均匀区块。每个区块包含m个存储器。每个查找路径被分配有来自这些区块中的若干区块。每个查找路径的区块分配可以由软件重新配置,使得例如能够调整比例和宽度。

在框905处,每个查找路径的输入密钥被转换成多个查找索引。用于读取查找数据的信息(诸如查找路径将访问的相应区块的区块id,以及将从其中读取数据的那些区块中的存储器地址)变成查找索引的一部分。每个输入密钥的区块id和存储器地址通过框910被发送到它们对应的区块,框910是中央重构互连结构。中央重构互连结构910包括多个可配置的中央网络。这些中央网络基于为相应查找路径预留的区块的位置来配置。

每个区块中,在框920处,在地址处从存储器中读取预编程的密钥和数据,该地址先前已经被从对应的输入密钥转换(例如,在框910处的转换)。将存储器中的这些预编程的密钥与用于相应查找路径的输入密钥进行比较。如果这些预编程密钥与输入密钥之间存在任何匹配,则区块返回命中数据和命中地址。每个区块的命中信息通过相应的查找路径来收集,该路径通过作为输出可重构互连网络的框925来拥有这个区块。在框930处,在查找路径返回最终查找结果之前,每个查找路径在其拥有的所有区块的命中信息之间执行另一轮选择。

图10图示了根据一个实施例的配置和编程并行查找存储器系统1000的方法。并行查找存储器系统900具有带有t个共享区块的n条并行查找路径。每个区块具有m个存储器。每个存储器具有m位宽的存储器地址。每个存储器条目包含可由软件编程的p对{密钥,数据}。系统900中的每个查找是具有m路和每路p桶(bucket)的d-left查找。方法1000从步骤1005开始,这里用户为每个查找路径分配区块。分配给每个查找路径的区块数量必须是2的幂。区块分区还必须保证在查找路径之间不存在区块重叠。在步骤1010,计算每个查找路径的哈希大小。每个查找路径的哈希大小基于为该查找路径分配的区块数量。如果查找路径被分配q个区块,则其哈希大小等于log2(q)+m。

在步骤1015,已知每个查找的哈希大小之后,相应地配置索引转换器中的寄存器cfg_hash_sel和cfg_tile_offset。cfg_hash_sel寄存器为查找路径选择一个函数。cfg_tile_offset寄存器为查找路径调整查找索引的区块id。同时,在步骤1020,中央和输出互连网络配置为将查找路径与其保留的区块相连接。索引转换器和网络的所有配置位可以由脚本根据本文所描述的原理自动生成。在步骤1025,为每个查找路径分配的存储器被编程。编程技术是基于具有每个查找m路和每路p桶的d-left查找技术。在步骤1030,所有分配的存储器被编程之后,并行查找系统100准备好接收输入密钥并且并行地执行n个查找。

实施例涉及通过互连网络的适当配置使用共享查找存储器108的池的多个并行查找。基于由该查找所需的存储器容量,可重新配置为每个查找保留的共享存储器108的数量。共享存储器108被分组成均匀的区块。根据由该查找所需的存储器容量,每个查找被分配有一组区块。为每个查找分配的区块不与其他查找重叠,以便所有查找可以并行执行而不发生冲突。每个查找可重新配置为基于哈希或直接访问。基于如何为每个查找分配区块,对互连网络进行编程。在一些实施例中,本文描述的查找存储器和/或查找存储器系统可以与美国专利申请号14/142,511(题目“methodandsystemforreconfigurableparallellookupsusingmultiplesharedmemory”,于2003年12月27日提交)中描述的查找存储器和/或查找存储器系统相同,其通过引用并入本文。

计数器

计数器块110可以包括能够被编程的多个计数器,使得它们各自被绑定到系统100内分组处理的一个或多个事件,以便跟踪关于这些所选事件的数据。实际上,计数器块110能够被配置为在分组上同时计数、监管和/或采样。换句话说,每个计数器(或计数器块110子单元)能够被配置为计数、采样和/或监管。例如,lde106能够请求由计数器块110监视并行活动,使得由该块110并行地或同时地对分组进行采样、监管和计数。此外,每个计数器都能够为平均情况设置,并经由溢出fifo和中断监控计数器的进程来处理溢出。该计数器块架构解决了一般的优化问题,该问题可以描述为:给定n个计数器,对于某个cpu读取间隔t,如何最小化存储和操作这n个计数器所需的存储位的数量。同样地,这个一般的优化问题也可以描述为:给定n个计数器和一定量的存储位,如何优化和增加cpu读取间隔t。该计数器块架构使计数器cpu读取间隔与溢出fifo的深度成线性关系地延长。

图11图示了根据一个实施例的计数器块的框图。计数器块1100在高速网络设备(诸例如网络交换机)中实现。架构1100包括n个环绕计数器1105和溢出fifo1110。n个计数器中的每个计数器都是w位宽,并且与计数器标识相关联。通常,计数器标识是该计数器的唯一标识。在一些实施例中,计数器存储在片上sram存储器中,使用两个库的存储器。示例性计数器和存储器库在美国专利申请序列号14/289,533(题为“methodandapparatusforflexibleandefficientanalyticsinanetworkswitch”,于2014年5月28日提交)中讨论,其全部内容通过引用并入本文。溢出fifo可以存储在sram中。备选地,溢出fifo是固定功能硬件。溢出fifo通常由所有的n个计数器来共享和使用。

溢出fifo存储所有溢出的计数器的相关联的计数器标识。通常,一旦n个计数器1105中的任一个计数器开始溢出,溢出的计数器的相关联的计数器标识就被存储在溢出fifo1110中。中断被发送到cpu以读取溢出fifo1110和溢出的计数器。在溢出的计数器被读取之后,溢出的计数器被清零或复位。

在时间间隔t中,计数器溢出的次数是m=ceiling(pps*t/2w),其中pps是每秒的分组,w是每个计数器的位宽度。间隔t期间的分组总数为pps*t。假设pps高达654.8mpps,t=1,w=17,n=16k。基于这些假设,每秒最多有4,995次溢出事件。

溢出fifo通常为m-深,log2n位宽,以捕获所有计数器溢出。这样,计数器块1100要求的总存储位为w*n+m*log2n,其中m=ceiling(pps*t/2w)。

图12图示了根据一个实施例的计数器块(诸如图11中的计数器块100)的方法1200。在步骤1205,递增至少一个计数器中的计数。如上所述,每个计数器与唯一的标识相关联。通常,所有计数器都是环绕计数器,并且具有相同的宽度。例如,如果w=17,则每个计数器表示的最大值为131,071。又例如,如果w=18,则每个计数器代表的最大值是262,143。又例如,如果w=19,则每个计数器表示的最大值是524,287。当算术运算尝试创建一个太大而不能在可用计数器中表示的数值时,会发生溢出。

在步骤1210,在至少一个计数器中的一个计数器溢出时,溢出计数器的计数器标识被存储在队列中。在一些实施例中,队列是fifo缓冲器。队列通常由计数器块1100中的所有计数器共享并使用。在一些实施例中,将计数器标识存储在队列中会向cpu发送中断以从队列和溢出的计数器中读取值。然后可以从读取的值计算溢出计数器的实际值。在溢出计数器被cpu读取之后,溢出的计数器通常被清零或复位。

例如,具有计数器标识为5的计数器是在算术运算期间的第一个溢出计数器。然后将计数器标识(即5)存储在队列中,大概在队列的头部,因为计数器#5是第一个溢出计数器。同时,计数器#5中的计数仍然可以被递增。同时,其他计数器也可以溢出,这些计数器的计数器标识将被存储在队列中。

中断被发送到cpu以读取队列头部的值(即5)。cpu读取与计数器标识相关联的计数器(即计数器#5)中存储的当前值。由于计数器宽度已知,所以可以计算出计数器的实际值。具体地,计数器的实际值是2w加上存储在计数器的当前值。继续这个示例,假设计数器#5的当前值为2,并且w=17。计数器#5的实际值是131,074(=217+2)。只要队列不为空,cpu就不断读取和清除队列和计数器的值。

特定计数器的最终总计数为:计数器标识出现在队列中的次数*2w加上剩余在计数器中的值。

虽然这些计数器被描述为对分组进行计数,但是应该注意的是,计数器可以用于计数任何数据,比如字节。一般来说,t期间的预期总计数为eps*t,其中eps为每秒的事件。由于网络交换机通常被设计成具有某一带宽(从其可以计算事件率),因而能够建立或计算在时间间隔t期间最大总计数的上限。在一些实施例中,本文描述的计数器可以与美国专利申请号14/302,343(题为“counterwithoverflowfifoandamethodthereof”,于2014年6月11日提交)中描述的计数器相同,其通过引用并入本文。

本文描述的sdn系统、设备和方法具有许多优势。具体地说,如上所述,它具有的优势是,利用完全可编程的通用分组转发管线,使得各种网络协议分组的转发智能通过软件传递到lde上。此外,该系统提供的优势是使得能够实现对资源管理的完整的软件定义控制,用于在系统内转发表使得能够配置系统来匹配网络内各个地方所需的比例简档。此外,系统提供有以可编程方式定制系统性能的能力,创造出可以应用于各种部署统一硬件和软件。此外,其允许优化定制的部署为应用程序特定的需求。换句话说,系统软件定义的灵活性提供有定制相同交换机微芯片的能力,使得微芯片尽管位于网络中的多个不同地方,仍然能提供相同的高带宽和高端口密度。因此,该信息处理系统、设备和方法具有很多优势。

本发明已经通过特定实施例来描述,其结合细节以助于理解本发明的构造和操作原理。本文中对特定实施例及其细节的引用并不旨在限制所附权利要求的范围。对于本领域技术人员清楚的是,在不脱离本发明的精神和范围的情况下,可以在为了说明而选择的实施例中进行修改。

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