李子勇 胡宇翔田 乐 裴金川
(解放军战略支援部队信息工程大学 郑州 450002)
随着网络技术的深入发展和各种新型网络业务的大量涌现,尤其是工业互联网、自动驾驶、全息通信、物联网等新型服务模式的兴起,当前互联网在高效性、安全性、移动性、可扩展性等方面正在遭受着难以克服的挑战[1]。面对万物互联的时代,未来将会有海量差异化的通信主体接入网络,因此,未来网络应支持多样化的标识表达。同时,由于多元化通信主体的接入和各种异构化网络的互联互通。未来网络应支持多种网络协议体系共存和多样化的寻址路由能力。然而,当前互联网采用以IP/TCP为核心的“尽力而为”的传输模式,难以提供海量和差异化服务,且多种协议体系共存又面临兼容问题,已难以满足万户互联的多元化服务需求[2]。
针对当前互联网体系架构存在的缺陷与不足,近年来,以IPv4/IPv6标识过渡[3]、内容标识[4]、身份标识[5]、地理位置标识[6]等多样化的寻址与路由技术纷纷被提出,并在部分场景得到运用。为了应对未来时变且多元化的网络需求,我国邬江兴院士提出了“多模态网络[7]”的概念,指出未来网络应支持多种网络技术体系以“网络模态”的形式协同发展,每一种网络技术体系或网络模态可针对一种服务模式或用网需求,运行自定义的报文格式、寻址与路由协议,支持多样化的数据平面处理逻辑。多模态网络要求底层网络设备能同时支持多种网络模态的共存并实现不同网络模态之间的隔离,且具备较高的转发性能和灵活可编程能力。网络虚拟化可实现在同一网络基础设施中运行多个虚拟网络以适应多元化的网络需求,然而,当前网络虚拟化主要通过虚拟机或容器技术实现了多个虚拟网络功能在同一网络设备上灵活高效的部署,但其导致了较大的I/O开销,严重降低了网络吞吐量[8]。随着可编程数据平面的深入研究,尤其是可编程协议无关报文处理语言P4的出现,网络运营商能够自定义新的网络协议和数据平面处理逻辑[9]。然而,当前可编程数据平面提供了独占的数据平面抽象,难以同时支持多个网络环境[10],且相互嵌套的P 4程序会引发新的问题,如多个P4程序之间逻辑冲突,或一个程序消耗超过公平份额的资源导致资源冲突等。
针对以上问题,本文提出了一种支持并行流水线的虚拟化可编程数据平面结构(V ir tua lized P4-based Programm able Data Plane architecture w ith Parallel Pipeline,VirtP6),支持多个网络功能在同一物理数据平面上并行运行。VirtP6可实现以下目标:(1)高性能:虚拟化的网络功能保持较高的数据包转发性能,具有较低的虚拟化开销;(2)隔离性:每个虚拟网络功能都在彼此隔离的环境中运行,尤其是数据平面所需的寄存器、流表资源彼此隔离,每个虚拟网络功能都按照预先分配的资源转发数据包,避免彼此抢占资源。(3)可扩展性:支持多个虚拟网络功能动态添加和移除,且虚拟网络功能的数量对物理数据平面的转发性能影响较小。本文的主要贡献如下:
(1)提出一种虚拟化可编程数据平面结构VirtP6,在物理资源平台与虚拟网络功能之间引入管理程序,以支持并行的数据包处理流水线,实现了可编程数据平面的虚拟化。
(2)设计相应的解析与隔离机制实现了同一设备上不同虚拟网络功能之间的资源隔离、流量隔离和访问隔离。
(3)在BM v2软件交换机上实现了V irtP6原型,并对VirtP6的整体性能进行了评估。仿真结果表明:VirtP6有效降低了虚拟化开销,将延迟减少了68%,吞吐量提高了75%,实现了接近NativeP4的性能,具有良好的隔离性和扩展性。
目前的网络虚拟化技术主要采用主机虚拟化技术。主机虚拟化技术可以分为:完全虚拟化、半虚拟化和操作系统虚拟化。完全虚拟化通过在底层硬件和上层操作系统之间构建一层虚拟中间层hypervisor,负责为不同操作系统管理底层物理资源,如VMware,KVM,但该方案引入了较大虚拟化开销,严重降低了网络性能[11]。以XEN和UM L为代表的半虚拟化通过修改内核允许一部分虚拟机指令直接操作系统平台,提高了系统性能,但其实现较为复杂。操作系统虚拟化是一种轻量级的虚拟化技术,通过创建多个“容器”来承载多个数据平面功能,并预先为“容器”分配固定资源来实现物理资源的隔离[12]。基于主机的网络虚拟化技术支持多个虚拟网络高效灵活的部署,但其导致了较大的I/O开销,严重降低了网络吞吐量,随着网络带宽和端口速度的不断增加,主机虚拟化技术难以满足网络高性能需求[13]。
可编程数据平面允许网络管理员以可编程的方式在硬件交换机中添加新的网络协议和定制数据包的处理逻辑,大大提高了网络设备的可编程能力。许多研究尝试将虚拟化技术引入可编程数据平面以解决网络虚拟化的问题。Hancock等人[14]通过在动作匹配表中独立编译P4程序实现了虚拟化可编程数据平面Hyper4。但Hyper4使用大量数据包再循环操作,造成了较大的性能损失。Zhang等人[15]通过快速解析、控制流排序和动态阶段映射技术,使得多个P4处理逻辑可动态映射到不同的匹配动作阶段,实现了数据平面的完全虚拟化,但其未实现网络虚拟化所需要的隔离要求。Zhou等人[16]提出了一种基于P4的模块化编程架构ClickP4,通过将单个P4程序分解为多个可重用网络功能,并通过动态编排为P4编程提供了更高的灵活性。Stoyanov等人[17]提出了一种多租户可编程交换机架构MTPSA,可在单个可编程交换机上为不同的租户运行不同的P4程序,并给出了隔离租户的建议。但MTPSA没有考虑访问隔离,这同样存在安全威胁。Saquetti等人[18]通过改进NetFPGA架构提出了一种用于数据平面虚拟化的可重构架构P4VBox,实现了多个虚拟数据平面功能的并行执行和在线配置,实验表明,与HyPer4,HyperVDP相比,P4VBox将带宽提高了2倍,延迟减少了6倍,但P4VBox仅限于FPGA硬件,且缺乏灵活的资源调度能力。
图1所示为V irtP6整体架构,V irtP6在物理资源平台和多个虚拟网络功能之间引入VirtP6管理程序。VirtP6管理程序负责管理并行运行的多个虚拟网络功能,协调各个虚拟网络功能共享硬件资源,同时,也实施各个虚拟网络功能之间的隔离。在VirtP6管理程序上,每个虚拟网络功能聚焦于不同的网络场景,在相互隔离的网络环境里运行不同的协议与路由等功能。本文主要考虑4个设计原则来实施V irtP6管理程序:并行流水线结构、资源隔离、流量隔离、访问隔离。其中,VirtP6管理程序的关键在于如何同时支持多个虚拟网络功能,为了解决该问题,本文改变了可编程数据平面的单一流水线处理结构,引入并行流水线结构,使VirtP6管理程序可同时支持多个并行流水线运行。VirtP6管理程序可在物理数据平面上编译多个P4程序,并虚拟出多个网络功能。同时,为了防止多个虚拟网络功能在同一物理设备上共存时导致资源竞争,通过设计合理的解析和隔离机制,可为每个虚拟网络功能提供资源隔离、流量隔离、访问隔离。VirtP6在实现可编程数据平面虚拟化的同时可保持较低的虚拟化开销,实现了较高的转发性能。
图1 VirtP6整体架构
本节将详细介绍VirtP6的设计细节以支持多种虚拟网络功能的共存,同时满足多种虚拟网络功能之间的隔离。
图2所示为协议无关的交换机架构(P rotocol Independent Sw itch A rchitecture,PISA)。PISA架构通过可编程的解析器、匹配动作单元和逆解析器组成流水线,来实现数据包处理逻辑的可编程,其中流量管理器部署在入口流水线和出口流水线之间[19]。管理员可以按照P4语法规范编写相应的P4程序来定义数据包的解析/逆解析、控制流以及相应的匹配动作单元,并通过标准的P 4编译器将P4程序编译到具体的硬件位置上,从而达到自定义数据平面网络功能的目的。
图2 协议无关的交换架构(PISA架构)
为了解决当前可编程数据平面存在的独占数据平面抽象问题,同时,最大限度地保留数据平面的可编程能力,本文分析可编程数据平面的组成结构,考虑对其部分组件进行虚拟化。由于流量管理器的不可编程特性,这里考虑只对其解析器、匹配动作单元、逆解析器进行虚拟化,而保留流量管理器作为共享模块。在处理数据包时,解析器需要逐层解析数据包头以得到所有的匹配项,最终根据不同的匹配项执行相应的动作。当多个虚拟网络功能共存时,不同的网络功能可能操作独有的包头结构和处理动作,这种“解析-匹配/动作”分离的方式不利于可编程数据平面的虚拟化。如图3所示为虚拟化可编程数据平面处理模型。该模型假设基于“解析-匹配/动作-逆解析”的流水线结构可以被部分虚拟化,并组合成多条并行的流水线,同时保留其余“解析-匹配/动作-逆解析”组件作为共享流水线。具体地,以流量管理器为界,该处理模型将共享流水线分为两部分:入口阶段和出口阶段,入口阶段链接到多个并行的流水线,每个并行的流水线的末端链接到出口阶段。由于不采用集中的解析、匹配动作、逆解析操作,该处理模型将“解析-匹配动作-逆解析”组件分布到数据包处理的不同阶段,可避免1次解析所有数据包头,做到“解析-匹配/动作”同步进行。因此,基于该模型,V irtP6改变了PISA架构的单一流水线结构,可在同一数据平面上承载多个不同的网络功能,每个网络功能彼此隔离,运行在一个单独的网络环境中。
图3 虚拟化可编程数据平面处理模型
VirtP6的实现包含两部分:共享流水线和虚拟出的并行流水线。共享流水线充当类似Hypervisor的管理器(这里称之为VirtP6管理程序),可访问每个并行的流水线,负责将进入的数据包分发到不同的并行流水线来处理。每个并行的流水线是完整的“解析-匹配/动作-逆解析”的数据包处理流水线,可承载多个具有不同网络功能的P 4程序。如图4为V irtP6的具体实现结构。下面对VirtP6管理程序和并行的网络功能流水线的作用进行说明:
图4 VirtP6的具体实现结构
VirtP6管理程序:VirtP6管理程序不执行具体的数据包的转发功能,仅负责将传入的数据包分发到不同的流水线处理。VirtP6的入口阶段负责解析数据包的外层标签,调用不同的网络功能流水线来处理数据包,其出口阶段接受来自经过网络功能流水线处理后的数据包,对其进行逆解析,重新封装数据包外层标签,并送往相应的物理端口。同时,VirtP6管理程序也负责管理和配置各流水线,实施各个流水线的带宽分配、路由决策、拥塞控制等。
网络功能流水线:每个并行的流水线可运行不同的网络功能,对外提供访问接口,供VirtP6管理程序调用,并支持动态独立编译。每个流水线运行在独立的运行环境中,维护特定的流表、寄存器、计数器等存储资源,彼此之间不能互相访问。
本文根据BM v2软件交换机v1model.P4原型[20]对VirtP6管理程序和网络功能流水线的结构体进行了重新定义,VirtP6管理程序和网络功能流水线的结构体如算法1和算法2所示,与v1model.P4相比,VirtP6管理程序增加了元数据定义virtual_function_id,用来指示每个虚拟网络功能的标识符,定义了动作函数select_function(.)用于获取每一个数据包所属的虚拟网络功能ID,VirtP6管理程序通过解析+匹配表的方式为每个进入的数据包添加元数据标识virtual_function_id。为了在同一数据平面支持多个网络功能共存,V irtP6管理程序利用extern扩展来添加网络功能流水线Virtual_Function_Pipeline(.),扩展的网络功能流水线位于VirtP6管理程序的入口流水线Ingress_Pipeline和出口流水线Egress_Pipeline之间。当数据包进入VirtP6管理程序,Ingress_Pipeline会解析数据包头,通过匹配得到其virtual_function_id,并利用ex tern功能调用对应的虚拟网络功能V irtua l_Function_Pipeline来处理数据包,待处理完毕后,Egress_Pipeline将对数据包完成逆解析,并根据V irtual_Function_Pipeline的处理结果从相应的端口转发。与完整的v1model.P4定义的流水线相比,网络功能流水线对其进行了简化,V irtual_Function_Pipeline不再区分Ingress_Pipeline和Egress_Pipeline,将其统一为单一流水线VF_Pipeline。可以看出,V irtP6管理程序不参与每一个虚拟网络功能的协议解析和匹配动作逻辑,只负责数据包的分发,而网络功能流水线被设计为VirtP6管理程序的extern函数,只关注本身的功能开发。因此,VirtP6在不降低网络功能的可编程能力的同时,实现了在同一数据平面上支持多个网络功能共存。
算法1 VirtP6管理程序结构体
V irtP6允许多个虚拟网络功能运行在单个网络设备中,网络运行过程中,若没有相应的隔离机制保证多个网络功能间的资源隔离,极易导致资源抢占,影响传输性能。因此,当多个虚拟网络功能共存于同一网络设备中时,需要满足以下隔离需求:(1)资源隔离;(2)流量隔离;(3)访问隔离。如图5所示,下面分析VirtP6在满足网络功能隔离性方面的设计细节。
图5 网络功能隔离机制
资源隔离:VirtP6管理程序可接受多个承载不同网络功能流水线的P4程序作为输入。编译器在编译时会对每个P4程序进行实例化,分配网络功能ID,将其所需逻辑处理单元、流表、寄存器、计数器等资源限制在单独的操作空间内,彼此之间不能访问,实现了资源隔离。
流量隔离:除了资源隔离外,在运行过程中,还需要实施流量隔离。V irtP6通过解析-匹配表的方式为每个数据包指定其所属的网络功能流水线ID,并将数据包送入对应的流水线处理,不同的流量只会被其所属的流水线处理,而不会暴露给其它流水线,实现了流量隔离。同时,当添加、迁移或移除流水线时,只需要在VirtP6管理程序中修改相应的流表项即可,而不需要修改VirtP6管理程序。
访问隔离:当多个网络功能流水线并行运行时,若不能有效地实施访问隔离,则非法用户可能会恶意修改任一网络功能流水线的运行逻辑或数据。受Flow Visor[21]启发,本文通过改进P4Run tim e[22]协议对网络功能流水线实施访问控制。P4Runtime API允许多个用户作为gRPC客户端同时接入交换机gRPC服务器,gRPC服务器会预先明确每个用户的角色配置ID。当每个网络功能流水线向控制器发起请求消息(如packet-in)时,gRPC服务器则根据其流水线ID将请求消息发往对应的用户处理;待用户处理完成后,gRPC服务器则根据角色ID将控制消息(如packet-out)发送到相应的流水线实施管理决策。每个用户只能访问其所属网络功能的流表、寄存器、计数器等资源,对其他网络功能无权访问,实现了访问隔离。
本实验将从4个维度对所提VirtP6的性能进行分析:(1)以吞吐量、时延、匹配动作表数量作为指标,对其性能开销进行评估;(2)对V irtP6的流量隔离性能分析;(3)对V irtP 6的可扩展性分析;(4)以V irtP6原型系统搭建网络拓扑分析网络服务性能。
实验环境介绍:本文在BM v2[20]软件交换机的基础上,通过重新定义VirtP6管理程序和网络功能流水线结构体,实现了VirtP6原型设计。实验在网络仿真平台M ininet[23]上进行测试,数据平面交换机部署均为V irtP 6原型系统。虚拟机为Ubun tu Server16.04,搭载Intel Core i7-3770 3.40 GHz处理器,8GB内存。实验结果通过分别测试VirtP6交换机上的转发性能和运行在其上面的网络功能的转发性能来评估VirtP6的性能开销、流量隔离和组网运行性能。
对比方案:为了对比VirtP6的性能,在这里与原生可编程数据平面NativeP4[19]、可编程数据平面虚拟化方案HyperP4[14]进行对比,(1)NativeP4:基于原生P4的可编程数据平面,不支持多个虚拟网络功能的并行操作。作为基准对比方案,NativeP4无虚拟化开销,当需要部署多个虚拟网络功能时,多个虚拟网络功能程序需要整合到一个P 4程序中。(2)HyperP4:一种P4数据平面虚拟化方案,在硬件和P4程序之间添加类似Hypervisor的管理程序,其大量的重新提交和再循环操作实现不同数据包结构的逐层解析,将不同的网络功能转化为不同表项的组合,可在单个可编程数据平面上虚拟化多个虚拟网络功能。
V irtP6通过设计并行流水线处理结构实现了多种虚拟网络功能在同一网络设备上运行,相较于NativeP4的单一流水线结构,VirtP6增加了外层包头解析与分发处理开销。为了量化V irtP6处理开销,本实验比较V irtP6,HyperP4和NativeP4的转发时延和吞吐量,结果如图6所示。
图6 时延和吞吐量对比
从图6(a)和图6(b)可以看出,相较于NativeP4单一处理流水线结构,HyperP4实现了虚拟化的同时却导致了3~4倍的时延,吞吐量也降低了76%,具有较大的虚拟化开销。这是因为HyperP4需要通过多次重提交操作来逐层解析数据包,且需要为每个数据流动作分配一个流水线,因此,其产生较大的虚拟化开销,严重降低了转发性能。与HyperP4相比,VirtP6大大降低了虚拟化开销,将延迟减少了68%,吞吐量提高了75%,实现了接近NativeP4的性能。由于V irtP6采用相互隔离的并行流水线结构,采用统一的包头描述内部协议,避免了数据包的逐层解析,有效降低了HyperP4导致的虚拟化开销。
隔离性是指多个虚拟网络功能在同一网络设备上运行,相互独立,性能互不影响,即一个虚拟网络功能流量的增加或减少,不会影响其他虚拟网络功能的转发性能。为了验证VirtP6的隔离性能,我们进行带宽隔离实验,实验拓扑如图7所示。实验过程中,由主机产生两种业务流在共享链路上竞争带宽,共享链路带宽为200 Mbit/s,在两个交换机上均部署关于IPv4和IPv6标识的转发功能(2条流水线)。实验过程中,在主机h3和h4之间生成IPv6标识的TCP流,在主机h1和h2生成IPv4标识的以全链路带宽(200 M bit/s)恒定速率发送的UDP业务流。实验分别比较在VirtP6管理程序中不启用和启用带宽隔离时两种业务流的转发性能,启用带宽隔离时,可通过VirtP6管理程序为不同虚拟网络功能指定带宽分配IPv4网络:50 Mbit/s,IPv6网络:150 Mbit/s。实验结果如图8所示,可以看出,在0~50 s时,未启用带宽分配时,IPv4网络几乎消耗完所有链路带宽,IPv6网络只消耗2%的带宽,在启用带宽分配后,即使IPv4网络的流量很大,也只能消耗25%的带宽,通过为IPv6网络分配了固定的带宽,保证了其转发性能。因此,VirtP6可为不同的虚拟网络提供了良好的隔离性能。
图7 实验拓扑
图8 隔离性能
可扩展性是用来衡量交换机上部署的虚拟网络功能的数量对其转发性能的影响,可通过测量交换机的吞吐量和时延作为评价标准。实验过程中,在交换机上部署不同数量的虚拟网络功能,每个虚拟网络功能的带宽平均分配,且每个虚拟网络功能以全带宽发送数据,比较交换机上的转发时延和吞吐量。实验结果如图9所示,可以看出,当虚拟网络功能数量从1个增加到15个,V irtP6的平均数据包时延和吞吐量无明显变化。因此,本文提出的VirtP6采用并行流水线结构可有效承载不同的虚拟网络,具有良好的可扩展性。
图9 交换机转发性能随流水线的数量变化
VirtP6的目标是实现多种虚拟网络在同一网络基础设施上共存,以促进新兴网络技术体制在现有网络架构上增量部署。为了对所提VirtP6的网络适用性进行评估,本实验使用M ininet仿真器构建网络平台,网络拓扑如图10所示,这里选取IPv4,IPv6和身份标识3种网络,实验分别在h1与h2,h3与h4,h5与h6之间采用IPv4,IPv6,身份标识等寻址与路由方式进行通信,每个虚拟网络的带宽分配分别为100 M bit/s,60 M bit/s和40 M bit/s。如图11所示为3个虚拟网络的平均吞吐量和往返时间。从图11可以看出,IPv4,IPv6和身份标识网络在时延性能上保持较小差异,平均RTT分别为4.43 m s,4.51 m s和4.42 m s,其平均吞吐量分别为89.9 M bit/s,58.7 M bit/s和38 M bit/s,每个虚拟网络基本按照预先分配的带宽转发数据包,虽然总带宽不到200 Mbit/s,这是因为VirtP6实现多个虚拟网络共存的同时仍存在较小的虚拟化开销。因此,本文所提出的VirtP6可实现多个虚拟网络在同一物理设施上共存,并实现了良好的性能隔离。
图11 不同虚拟网络的转发性能
针对当前可编程数据平面提供独占的数据平面抽象难以同时支持多个虚拟网络的问题,本文提出了一种基于并行流水线的虚拟化可编程数据平面结构VirtP6。VirtP6改变了可编程数据平面单一的流水线结构,并在物理资源平台和多个虚拟网络功能之间引入管理程序,以支持多个虚拟网络功能的并行运行,实现了可编程数据平面的虚拟化,并满足不同虚拟网络功能之间的资源隔离、流量隔离、访问隔离要求。最后,在BM v2软件交换机上实现了VirtP6原型,并从虚拟化开销、隔离性、扩展性和网络适用性方面对VirtP6的性能进行了评估。实验结果表明,VirtP6大大减少了虚拟化开销,具有良好的隔离性和扩展性。本文的下一步工作将对VirtP6添加更多的资源管理策略,以满足不同虚拟网络的服务质量要求,并在硬件平台上实现VirtP6原型。