摘要
可重构匹配表(reconfigurable match table, RMT)是一种可编程的数据包处理流水线架构。为了实现可编程数据平面对更多不同网络协议的支持,在该架构的基础上扩展逆解析器,使用扩展后的逆解析器以及两个RMT流水线组成一个协议无关的网络切片可编程数据平面模型。由于RMT架构中采用精简指令集,扩展后的逆解析器采用复杂指令集,因此称扩展后的架构为混合指令RMT(hybrid-instruction RMT, HiRMT)。HiRMT能够支持基于IPv6转发平面的段路由、SID(segment ID)的多语义、微分段技术、多协议标签交换技术,以及虚拟扩展局域网技术。该架构具有广阔的应用场景。在Corundum原型平台上进行了逆解析器模块的性能测试,结果表明扩展后的逆解析器能够使用较少的资源在数据包大小达到512 B时以 100 Gbit/s的吞吐量进行处理。
Abstract
RMT (reconfigurable match table) is a programmable pipeline architecture for packet processing. In order to enable the programmable data plane to support more different network protocols, the deparser based on RMT was extended. A protocol-independent network slicing programmable data plane model was formed by using the extended deparser and two RMT pipelines. Since reduced instruction set was used in RMT architecture and complex instruction set was used in the extended deparser, the extended architecture was called HiRMT(hybrid-instruction RMT). HiRMT can support segment routing IPv6, multiple semantics for SID(segment ID), micro SID, multi-protocol label switching and virtual extensible local area network. This architecture has broad application prospects. The performance of the deparser module was tested on the Corundum prototype platform, and the results show that the extended deparser can process the packet size up to 512 B with a throughput of 100 Gbit/s with fewer resources.
网络技术的发展往往是服务于实际需求的。近几年来,网络的架构发生了深刻的变化,尤其是在云计算的模型中,要求云中的网络资源能够得到足够的抽象和灵活的调度,即虚拟化的能力。随着网络虚拟化与网络功能的发展,对可编程数据平面的要求也不断提高,开发者需要能够根据自身需求对网络的转发过程进行重编程。
网络虚拟化是指虚拟网络节点之间的连接并不使用物理线缆连接,而是依靠特定的虚拟化链路相连。其主要是对网络资源(端口、宽带、IP地址)进行抽象,支持按照租户和应用进行动态分配和管理。作为虚拟化技术的分支,网络虚拟化本质上还是一种资源共享技术[1]。
网络分片是一种按需组网的方式,可以让运营商在统一的基础设施上分离出多个虚拟的端到端网络,每个网络切片从无线接入网到承载网再到核心网上进行逻辑隔离,以适配各种各样类型的应用[2]。
段路由(segment routing,SR)是基于源路由理念而设计的在网络上转发数据包的一种协议。SR将网络路径分成一个个段,并且为这些段和网络节点分配SID(segment ID)。通过对SID进行有序排列,就可以得到一条转发路径[3]。SR是替代多协议标签交换(multiple protocol label switching,MPLS)的隧道技术,它的应用场景与MPLS类似。一些常见的使用MPLS隧道的业务都可以平滑地切换到SR隧道。
无论是对可编程交换机[4]还是对智能网卡[5]来说,数据平面的可编程性都是重要的发展趋势[6]。针对交换芯片和OpenFlow[7]协议中的两个限制——只允许在一组固定的字段上进行匹配-动作处理、OpenFlow规范仅定义了有限的包处理动作集,The McKeown Group提出了可重构匹配表(reconfigurable match tables,RMT)模型[8]。这是一种新的受精简指令集计算机(reduced instruction set computing,RISC)启发的流水线架构,用于交换芯片分组转发,确定了基本的最小动作原语集,以指定报头在硬件中如何处理。RMT允许在不修改硬件的情况下通过修改匹配字段和算术逻辑单元(arithmetic logic unit,ALU)程序以更改转发平面。与在OpenFlow中一样,设计者可以在资源允许的范围内指定任意宽度和深度的多个匹配表,每个表可经过配置后具备在任意字段上进行匹配的能力。然而,RMT相比于OpenFlow允许更全面地修改所有报头字段。在OpenFlow Switch通用转发模型的基础上,研究人员尝试建立更加通用的网络数据处理抽象模型。华为美国研究所的宋浩宇[9]提出了协议无关转发(protocol oblivious forwarding,POF)框架,通过对网络转发处理行为进行再次抽象,实现协议无关转发处理。在POF架构中,POF交换机并没有协议的概念,它仅在POF控制器的指导下通过{offset,length}来定位待匹配的数据,从而完成网络数据转发处理。随着网络可编程性的成熟,单个设备将不得不同时支持多个独立开发的模块。数据平面可编程性需要能够在单个设备中运行多个包处理模块,这些可能是由不同独立的团队开发的。因此,需要隔离机制来确保同一设备上的模块不会相互干扰。Menshen通过在RMT的基础上添加轻量级的隔离机制实现了同一设备上对不同模块处理流程的隔离[10],并允许加载新模块而不影响已经运行的模块,保证了可编程数据平面资源的安全性。dRMT[11]将计算资源(例如,匹配/动作处理器)从内存中分离出来,它们通过一个Crossbar互连。每个匹配动作(match-action,MA)处理器都持有一个P4程序,并以运行至终结(run-to-completion,RTC)的方式处理数据包。FlexCore[12]体系结构在dRMT部分分解设计中引入了另一个创新点,在MA处理器的计算本地内存持有一个称为程序描述表的间接数据结构。该表包含关于程序控制流的元数据,可用于重新配置该处理器的处理流程。本文中扩展后的Deparser借鉴了dRMT中以RTC方式处理数据包的做法,并在MA处理器中引入过程描述表(processing description table,PDT)来控制数据包的处理流程。
当前RMT架构中的Deparser模块仅负责执行简单的合并操作。它将包头向量(packet header vector,PHV)写入包头中相应的字节偏移位置,将包头与包缓存中相应的有效负载合并,并将合并后的包从流水线中传输出去。RMT在每个阶段进行匹配动作,通过超长指令字(very long instruction word,VLIW)简单地对数据包头进行解析与改写,无法支持更为复杂的网络协议处理。本文通过扩展RMT中的Deparser模块来扩展RMT架构的功能,使Deparser模块不再是简单合并PHV与报文,而是通过解析容器生成的PHV完成更加复杂的报文处理,如插入报文头、封装报文头、压缩报文头等有状态的操作,使其能够更好地支持不同协议的处理与转发,实现协议无关的流水线处理架构。
本文介绍了混合指令RMT(hybrid-instruction RMT,HiRMT)的具体设计思路以及架构,最后分析了HiRMT在各个应用场景下的性能,实验表明扩展后的逆解析器能够使用较少的资源在数据包大小达到512 B时以100 Gbit/s的吞吐量进行处理。
1 协议无关的流水线设计
CacheP4[13]的思想来源于转发设备在数据平面转发报文时,对同一无状态报文流中的报文进行重复的表项匹配。CacheP4通过避免这种重复匹配,加快了报文转发的处理速度。受CacheP4的启发,我们认为不需要在RMT的起始位置放置匹配动作表(match action table,MAT)缓存,而是应该将这条快速路径视作多级流水,即每个处理阶段视作一级缓存,并在末端补充一条慢速路径用来进行复杂的有状态的报文处理,使该慢速路径成为RMT架构的Cache ALU。参照CacheP4,在RMT架构的基础上扩展Deparser为Deparser plus,其中RMT架构主要负责简单无状态的处理,即采用精简指令集对字段进行修改,是传统专用网络处理器(network processor,NP)转发模型中的流水线(Pipeline)架构;Deparser plus主要负责复杂且有状态的操作,如报文头的封装与协议头的插入等,采用复杂指令集,是NP转发模型中的RTC架构。RTC架构与Pipeline架构的对比如表1所示。通过RTC与Pipeline架构的结合实现混合指令的协议无关报文处理架构设计。
1.1 HiRMT总体架构
如图1所示,HiRMT由Ingress RMT、Deparser plus与Egress RMT三部分组成。Ingress RMT中原有的Deparser模块被Deparser plus替代,所以Ingress RMT的最后阶段结束后不对报文数据与报文头进行合并,而是将解析结果(metadata与PHV)与缓存中的报文直接发送给Deparser plus模块。
表1RTC对比Pipeline
Tab.1 RTC versus Pipeline


图1HiRMT总体架构
Fig.1HiRMT overall architecture
Ingress RMT模块采用精简指令集,主要负责接收报文并判断报文类型,完成对报文简单的预处理。将处理报文所需的解析结果写入metadata中,其中包含报文类型以及流ID,之后交由Deparser plus模块进行处理。
Deparser plus模块主要负责接收由Ingress RMT发送的PHV与metadata,根据metadata中的流ID与报文类型对数据包进行相应的有状态的处理,并根据动作表中的复杂指令对PHV任意字段进行修改,然后将修改后的PHV传送给Egress RMT模块进行最后的修改与转发。
Egress RMT模块采用精简指令集,主要负责接收由Deparser plus模块发送的PHV,进入RMT管道进行目的IP地址的替换,查找转发表与邻接表生成第二层头部并完成转发。
Ingress RMT、Deparser plus与Egress RMT三部分均为可编程模块,共同构成可编程混合指令流水线HiRMT。编程人员可根据需要改变HiRMT的功能,符合可编程数据平面的要求,实现协议无关的流水线处理架构。
1.2 可编程的MAT
MAT是RMT架构中的核心模块。每个阶段都在MAT中通过精确匹配查找由键提取器构造的固定大小的键,这是在匹配表中实际查找的条目。查找结果用作VLIW操作表的索引,以标识要执行的相应操作。
每个VLIW操作表项表明PHV中的哪些字段用作ALU操作数(每个ALU的操作数Crossbar的配置),以及由VLIW指令控制的每个ALU应该使用哪些操作码(加减等)。每个ALU根据其操作数和操作码输出一个值。每个PHV容器有一个ALU,不需要在输出上使用Crossbar,因为每个ALU的输出直接连接到相应的PHV容器。当一级ALU修改其PHV后,将修改后的PHV传递到下一级。
1.3 协议无关的可编程的Deparser plus
Deparser plus的功能是接收由Ingress RMT发送的metadata与PHV,metadata中携带有报文类型与流ID,可据此判断需要对报文进行的操作。通过分析metadata查找动作表得到操作指令,并对报文的任意位置进行相应的处理,例如进行段路由头部(segment routing header,SRH)的插入或VXLAN报文的封装,然后将修改后的报文与解析结果传送给Egress RMT模块进行最后的修改与转发。Deparser plus主要负责复杂且有状态的操作,如报文头的压缩、封装与协议头的插入等,采用复杂指令集,是NP转发模型中的RTC架构。
将PDT放入Deparser plus 的PDT模块中,以此来控制Action模块对数据包进行RTC处理。该模块可由结果解析器模块配置,也可由开发人员通过P4程序编译而来。每个MA处理器维护一个本地PDT,所有到达端口的数据包将首先命中PDT中的一个默认条目,以激活数据包处理。每个条目存储一个程序元素的指令,用来表示一个具体操作,并包含指向下一指令的指针。指令包含操作码以及其他处理数据所需要的信息,例如指向该指令实现的资源指针。指针地址可以是静态随机存储器(static random access memory,SRAM)位置或三态内容寻址存储器(ternary content addressable memory,TCAM)位置,因为对于一个PDT条目,只有一种指针类型是有效的。以SRH的插入操作为例,PDT的表项与控制流程如图2所示。

图2PDT处理流程实例
Fig.2PDT process example
Deparser plus由结果解析器、PDT与Action模块组成,其中结果解析器模块与动作表相连接,PDT模块与映射表相连,Action模块与PDT模块相连接。两个先入先出(first in first out,FIFO)队列分别向结果解析器模块发送metadata和PHV。结果解析器模块根据metadata确定数据包类型,查找动作表得到动作指令。指令内容包括操作码和其他信息的附加字段。动作表中包含每一条指令对应的一系列具体操作,如插入数据、修改报文长度等。结果解析器以这种方式来解析指令并配置PDT模块。之后由PDT模块按照指令设置程序对Action模块进行调用以处理PHV。映射表中存有PDT处理报文头时所需要的数据,如SRH。Action模块由PDT模块控制,以获得偏移量、偏移长度和要插入或修改的信息。偏移量表示要操作的报文的位置。最后,修改后的PHV被发送到Egress RMT。
对于一些基本的简单指令,可以在RMT流水线中完成,如加、减、替换指令等,因此只需在Deparser plus中定义复杂操作的指令。目前共定义了7种指令:向报文头中插入数据、删除报文头数据、封装报文头、解封装报文头、向动作表中插入指令、报文头的压缩以及解压缩。这7种指令的定义及格式如表2所示。
表2Deparser plus指令定义
Tab.2 Deparser plus instruction definition

1.4 面向网络切片的可编程SR转发
本文提出的流水线具有广阔的应用场景,例如可应用于SR、VXLAN、基于用户数据报协议的段路由(segment routing over UDP,SRoU)、带内网络遥测(in-band network telemetry,INT)以及服务函数链(service function chain,SFC)编排等技术中。其中对SR技术的支持包含MPLS SR[14]、SRv6、SID的多语义与Function三方面。
MPLS SR和SRv6是两种SR技术的主要应用形式。相比于MPLS SR,SRv6有着更加强大的网络可编程空间,这归功于其灵活简易的SRH扩展头,其中的关键之一是128 bit的SRv6 SID的使用。SRv6的每个Segment可以灵活分为多段,每段的长度也可以变化,由此为编程提供更大空间。SID中的Function字段使SID具有多语义特点,该字段占用较少比特位用于定义所属设备收到该标签后的操作。
1.4.1 SRv6
SRv6简单来讲即SR+IPv6,是新一代IP承载协议。其采用现有的IPv6转发技术,通过灵活的IPv6扩展头,实现网络可编程。为基于IPv6转发平面实现SR技术,在IPv6路由扩展头新增SRH扩展头,该扩展头指定一个IPv6的显式路径,存储IPv6的Segment List信息。Segment List即为对段和网络节点进行有序排列得到的一条转发路径。报文转发时,依靠Segments Left(指示当前活跃的Segment List)和Segment List字段共同决定IPv6目的地址信息,从而指导报文的转发路径和行为。
数据包的SRH由SRv6传输域的入口节点产生,这类节点被称为源节点。当产生新的SRv6数据包或收到需要进行SRv6转发的一般IPv6数据包时,源节点会为数据包创建SRH,并将这个SRH插入数据包的报文头中。
在HiRMT中,通过扩展RMT流水线中的Deparser模块,使其成为Deparser plus以支持SRv6的转发。如图3所示,以源节点为例展示了SRv6报文转发流程在该流水线上的映射。

图3源节点的SRv6报文转发流程映射
Fig.3SRv6 packet forwarding process mapping of source nodes
Ingress RMT负责解析报文,提取其流ID并写入metadata。若该数据包为需要插入SRH的数据包,则将metadata发送给Deparser plus模块。
在Deparser plus模块中,根据metadata判断报文类型,若为源节点SRv6报文,则根据metadata中的流ID和包类型查找动作表,得到insert指令并配置PDT,指令中包含insert操作码、偏移量、映射表索引、插入数据长度、报文长度字段偏移量。PDT模块通过映射表索引得到SRH,通过insert指令中的偏移量和偏移长度调用Action模块将SRH插入IPv6报文中,并将IPv6报文头中的PayLoad Length字段增加对应的长度值。最后将解析结果与报文发送给Egress RMT进行常规的SRv6报文处理,如替换目的IP地址、改写Segment Left字段、替换介质访问控制(media access control,MAC)地址等,并查找转发表得到输出端口将报文发送出去。使用P4程序描述HiRMT对SRv6报文的具体处理行为如算法1所示。该算法的复杂度仅与转发表的大小以及邻居表的大小有关,因此该算法的复杂度为O(n)。
1.4.2 SID的多语义与Function
SRv6的可编程能力来源于三部分:①可以将多个Segment组合起来,形成SRv6路径,即路径可编辑。②SRv6 Segment定义了SRv6网络编程中的网络指令,指示要去哪,怎么去。标识SRv6 Segment的ID被称为SRv6 SID。SRv6 SID是一个128 bit的值,为IPv6地址形式,由Locator、Function和Arguments三部分组成。SRv6的每个Segment是128 bit,可以灵活分为多段,每段功能和长度可以自定义,由此具备灵活编程能力,即业务可编辑。③Segment序列之后的Optional TLV(type-length-value)。报文在网络中传送时,需要在转发面封装一些非规则的信息,可以通过SRH中TLV的灵活组合来完成,即应用可编辑。
算法1 P4程序描述SRv6报文处理流程实例
Alg.1 P4 program description example of the SRv6 packet processing flow

在本文的流水线架构中,可以通过在Deparser plus的动作表中添加SID表项,即使用SID的Function字段查找所需要执行的指令。将指令传递给PDT模块后由PDT模块控制Action模块执行Function所表示的指令,完成对数据包的复杂处理。
1.4.3 对微分段的支持
SRv6引入的协议开销远大于MPLS SR,Segment所对应的操作也比MPLS SR复杂,因此SRv6对网络设备提出了非常高的要求。SRv6在网络可编程性和负载均衡方面有着巨大的优势,但要发挥其优势,迫切需要解决SRv6在协议开销、承载效率、最大传输单元(maximum transmission unit,MTU)和对硬件要求方面的问题。这几个问题,其实本质上都是同一个问题:如何提高SRv6 Segment效率?为了解决这个问题,微分段(micro SID,uSID[15])与G-SID[16](general SID)头压缩方案被提出。思科系统公司对现有SRv6框架做了扩展,定义了新的Segment类型uSID。uSID将极大加速SRv6在网络侧的部署,并成为SRv6新范式。
在一个正常的 SRv6 包头( SRH),每一个 SID 都需要保存相同的公共前缀,但这些相同的部分实在多余。因此,可把 Segment List 中相同的公共前缀(网段)提取作为压缩包头的前缀块,将Node ID和Function ID作为uSID与公共前缀一起形成压缩后的SID列表。可见一个128 bit的IPv6地址被分为8份,第1份(16 bit)用于表示uSID块信息,另外7份每份用于表示一个Segment信息,这意味着SRv6 Segment效率提高了7倍。当 uSID 小于 7 跳,uSID 甚至不需要额外的 SRH 包头,只需要将 IPv6 目的地址重新规划和定义,即可实现Segment Routing的功能。这非常有利于主机和网络设备的硬件处理,大幅度地降低了SRv6实现难度、缩短了数据包的长度。SRv6数据包完全没有产生额外的包头开销,带宽完全被节约下来了。
HiRMT可以很好地支持uSID头压缩方案,这是一种有状态的处理。当SRv6报文进入流水线时,只需将报文类型与流ID写入metadata,结果解析器通过分析metadata查找动作表,得到需要执行的压缩动作指令,内容包含压缩操作码、SID前缀、SID长度、报文长度字段偏移量等,以此配置PDT模块,如图4所示为PDT中压缩uSID头部的程序。PDT模块将compress指令与SID前缀发送给Action模块进行SRH的压缩。Action模块将uSID前缀放在128 bit SID的前16 bit,而后顺序地将拥有相同前缀的SID的后16 bit压缩进第一个uSID前缀之后,当7个SID压缩完毕后再创建一个128 bit SID进行接下来的压缩,直到遇到不同的前缀或SID压缩完毕为止。最后计算压缩后的报文头长度与压缩前报文长度的差值,将差值作为偏移量指导报文的重新分片并转发。

图4PDT中压缩uSID时的程序
Fig.4Compression uSID program in PDT
2 HiRMT应用与验证
本文基于VCU118 FPGA开发板实现了HiRMT原型系统,分析了HiRMT的应用场景,并进行实验验证。
2.1 原型系统
本文的原型系统是使用基于VCU118 FPGA开发板的Corundum[17]原型平台实现的。Corundum是一个开源的、基于FPGA的NIC原型平台,用于100 Gbit/s和更高速率的网络接口开发。测试平台的搭建如图5所示,在原型系统中,Corundum通过高速串行计算机扩展总线(peripheral component interconnect express,PCIe)连接到一台配备Intel Xeon E5645 CPU的机器,时钟频率为2.40 GHz,并通过四通道小型可插拔光模块(QSFP28)连接到Spirent FX3-100GO-T2测试仪。HiRMT由2个RMT流水线和1个Deparser plus模块组合而成。
2.2 原型系统应用场景
HiRMT可支持更多丰富的应用场景,例如VXLAN、SRoU、INT与SFC。如表3所示为这4种应用场景的对比与分析。

图5原型系统测试环境
Fig.5Prototype system test environment
VXLAN将虚拟网络中的数据帧封装在实际物理网络中的报文中进行传输,主要用于解决虚拟内存系统的可移植性限制以及云数据中心之间虚拟机的迁移[18]。可通过HiRMT中的encapsulate指令对VXLAN报文头进行封装。
SRoU本质上是把SRH插入用户数据报协议(user datagram protocol,UDP)载荷中,在HiRMT中的处理方式类似于SRv6报文,可通过改变SRH的插入位置实现SRoU报文的生成与处理。
INT是一种不需要网络控制平面干预、网络数据平面收集和报告网络状态的框架,工作在L7层[19]。可通过HiRMT中的insert指令插入其头部信息与遥测信息,实现INT报文的生成与处理。
SFC引导网络流量按照业务逻辑所要求的既定的顺序经过这些业务点[20]。SR转发技术的处理思路同样可以用在SFC中[21]。可通过调用insert指令为不同网络流量添加SFC Header,也可调用delete指令将SFC Header从报文中删去,并提交给主机进行网络功能的处理。
2.3 性能分析
使用不同大小的VXLAN报文、SRv6报文以及SFC报文对流水线架构进行测试。
对于SRv6报文,Deparser plus负责查找映射表来得到SRH,因此相比于VXLAN报文的处理具有更多延迟,具体延迟取决于映射表中的SRH长度。
表3应用场景对比与分析
Tab.3 Comparison and analysis of application scenarios

在当前的实现中,在流水线中处理一个包所需的时钟周期数取决于包的大小。这是因为处理报头和负载的周期数取决于报头和负载长度。如图6所示,Corundum原型平台的接口速率可达到100 Gbit/s,经测试当数据包大小达到512 B时,Deparser plus可以在Corundum中以线速度处理报文。

图6性能测试结果
Fig.6Performance testing result
Deparser plus在Corundum原型平台中的资源利用情况如表4所示,表格中的内容为所占FPGA开发板资源的大小以及占FPGA开发板总资源的百分比。实验结果表明,Deparser plus能够使用较少的资源以线速度进行数据包的协议无关处理。
表4Deparser plus资源利用率
Tab.4 Deparser plus resource utilization

3 结论
本文扩展RMT架构中的Deparser模块为Deparser plus,采用复杂指令集设计,使之支持有状态的复杂报文处理。将Deparser plus与采用精简指令集设计的Ingress RMT、Egress RMT结合构成一种可编程混合指令集架构HiRMT,共同完成协议无关的报文处理。经测试,Deparser plus可以只增加适度的开销到现有RMT流水线并提供线速度的报文处理。
HiRMT的设计表明,复杂的包操作可以在可编程流水线中处理。但它没有针对性能进行优化,例如:可以通过额外的设计工作来增加流水线的数据宽度,从而提高吞吐量、减小延迟;可以通过优化数据包,从数据包缓存中取出、更新和发送的方式来改善延迟;从FPGA转移到ASIC将提高频率和数据宽度;更深入的流水线或多个并行解析器也可以提高吞吐量。
当前Deparser plus中定义了7种复杂指令,它们配合RMT架构中的精简指令包含了大多数复杂报文处理所需要的操作。未来的工作可以着眼于拓展Deparser plus中的复杂指令集,通过目前已有的alter指令向动作表中插入新的指令以支持更多复杂的报文处理操作。