-
Name of article:PISCES: A Programmable, Protocol-Independent Software Switch
-
Origin of the article:Shahbaz M , Choi S , Pfaff B , et al. PISCES: A Programmable, Protocol-Independent Software Switch[C]// the 2016 conference. ACM, 2016.
Abstract:
- Hypervisors use software switches to steer packets to and from virtual machines (VMs)
虚拟机监控程序使用软件交换机引导数据包往返于虚拟机(VM)。这些交换机经常需要升级和定制,以支持隧道和覆盖层的新协议头或封装,改进测量和调试功能,甚至添加类似于MiddleBox的函数。
-
Changing how a software switch forwards packets
-
specify how packets are processed and forwarded in a high-level domainspecific language (DSL) such as P4, and compiled to run on a software switch
软件交换机通常基于大量代码(包括内核代码),而更改交换机是一项艰巨的任务,需要精通网络协议设计、开发、测试和维护大型复杂的代码库。相反,如果改变软件交换转发数据包的方式则不需要对其实现有深入的了解,可以指定如何使用高级领域特定语言(DSL,如P4)处理和转发数据包,并将其编译为在软件交换机上运行。
我们提出PISCES,一个软件交换机衍生自开放虚拟交换机(OVS)——一个硬连线管理程序交换机,其行为是定制使用P4,PISCES并没有硬连接到特定的协议,这种独立性使得添加新功能变得容易。
我们还展示了编译器如何分析高级规范以优化转发性能,我们的评估表明,PISCES的性能与OVS相当,PISCES的程序比OVS源代码的等效更改短40倍左右。
1 Introduction:
- every packet that passes to or from a virtual machine (VM) passes through a software switch
软件交换机,如Open vSwitch(OVS),在现代数据中心中扮演着关键的角色:除了少数例外,每个进出虚拟机(VM)的数据包都经过软件交换,在此环境中服务器的数量远远超过物理交换机。
软件管理程序交换机的一个主要优点是,它比硬件交换机更容易升级。
- In the future, as data center owners customize and optimize their infrastructure, they will continue to add features to hypervisor switches
未来,随着数据中心所有者定制和优化其基础设施,他们将继续向Hypervisor交换机添加功能,每个新特性都需要定制Hypervisor交换机,这些定制实际执行比看起来还更困难。
-
First, most of the machinery that enables fast packet forwarding resides in the kernel.
-
Furthermore, customization requires not only incorporating changes into switch code, but also maintaining these customizations as the underlying software evolves over time
首先,大多数支持快速包转发的机器位于内核中,编写内核代码需要大多数网络运营商所缺乏的领域专业知识,因此给开发和部署新功能带来了重大障碍。
此外,定制不仅需要将更改合并到交换机代码中,而且还需要随着底层软件的发展而维护这些定制,这可能需要大量资源。
更改软件交换机转发数据包的方式不应要求对交换机的实现方式有详细的了解。
- A key insight, borrowed from a similar trend in hardware switches [11, 41], is that the underlying switch should be a substrate, well-tuned to process packets at high speed, but not tied to a specific protocol
硬件交换机的类似趋势中得到的一个关键见解是,底层交换机应该是一个基板,经过良好的调整,能够以高速处理数据包,但不能与特定的协议绑定。
我们假设DSL中编写的程序指定要解析的数据包头和匹配操作表的结构(即,要匹配的头字段和要对匹配的头执行的操作),底层的是一个通用引擎,经过优化,可以按照程序指定的格式解析、匹配和操作包头。
然而,在DSL中表达这些定制需要将DSL编译为在交换机中运行的代码,与手写实现固定协议的交换机相比,这种协议编译过程可能会降低底层实现的效率,牺牲了一定的性能。
本文的目标是:
1.量化在这种DSL中表达自定义协议所产生的额外成本
2.设计和评估领域特定的编译器的优化问题,以尽可能减少性能开销
- we demonstrate that, with the appropriate compiler optimizations, the performance of a protocol-independent software switch—a switch that supports custom protocol specification in a highlevel DSL without direct modifications to the low-level source code—approaches parity with the native hypervisor software switch
最后,我们将演示通过适当的编译器优化,独立于协议的软件交换机(一种在高级DSL中支持自定义协议规范而不直接修改低级源代码的交换机)的性能与本地Hypervisor软件交换机接近。
我们期望我们的研究结果将启发设计新的独立于协议的、运行速度更高的软件交换机。
我们做出了以下贡献:
- The design and implementation of PISCES, the first software switch that allows custom protocol specification in a high-level DSL, without requiring direct modifications to switch source code
1.PISCES的设计和实现,PISCES是第一个允许在高级DSL中自定义协议规范的软件交换机,无需直接修改切换源代码
- A public, open-source implementation of PISCES on GitHub
2.在Github上公开、开源地实现PISCES
- Domain-specific optimizations and a back-end optimizer to reduce the performance overhead of customizing OVS using P4
3.特定于域的优化和后端优化器,以减少使用P4定制OVS的性能开销
- An evaluation of the code complexity of PISCES programs and its forwarding performance
4.PISCES程序的代码复杂度及其转发性能的评估
2 The Need for a Protocol-Independent Switch:
- it does not know what a protocol is or how to process packets on behalf of a protocol
我们说双鱼座是一个独立于协议的软件交换机,因为它不知道什么是协议,也不知道如何代表协议处理数据包,直到程序员指定它。
独立于协议的交换机带来许多好处:
- Adding new standard or private protocol headers
1. 添加新的标准或专用协议头:供应商一直在建议新的协议头,特别是针对数据中心,一个数据中心的拥有者可以将新的协议添加到P4程序中,这样,他可以很快地编译和部署新的协议。
- Removing a standard protocol header
2. 删除标准协议头:数据中心网络通常比传统的校园网和企业网运行更少的协议,部分原因是大部分流量是机器到机器的,不需要许多传统协议。从传统交换机中删除协议是很困难的:对于硬件,这意味着等待新的,而对于软件交换机,这意味着要与一个大的代码库搏斗以提取特定的协议。而PISCES,删除未使用的协议就像删除协议规范中未使用的部分并重新编译交换机源代码一样简单。
- Adding better visibility
3. 增加更好的可见性:随着数据中心越来越大并被越来越多的应用程序所使用,了解网络的行为和运行条件变得非常重要。提高网络可见性可能需要支持新的统计信息、生成新的探测数据包,或者添加新的协议和操作来收集交换机状态。
- Adding entirely new features
4. 添加全新功能:如果用户和网络所有者可以修改转发行为,他们甚至可以添加全新的功能。
3 Background:
- PISCES is a software switch whose forwarding behavior is specified using a domain-specific language. PISCES is based on the Open vSwitch (OVS) [57] software switch and is configured using the P4 domain-specific language [10]. We describe both P4 and OVS below.s
PISCES是一个软件交换机,其转发行为是使用特定于域的语言指定的。双鱼座是基于开放式虚拟交换机(OVS)软件交换机,并使用P4领域特定语言进行配置的。
我们在下面描述P4和OVS:
Domain-Specific Language: P4
- P4 is a domain-specific language that expresses how the pipeline of a network forwarding element should process packets using the abstract forwarding model shown in Figure 1
P4是一种特定于域的语言,它表示网络转发元素的管道应该如何使用图1所示的抽象转发模型处理数据包。
在这个模型中,每个包首先通过一个可编程解析器,该解析器提取报头。P4程序指定每个可能的头的结构以及表示顺序和依赖关系的解析图。然后,数据包通过一系列匹配操作表(MATs),P4程序指定这些MATs中每个MATs可能匹配的字段和它们之间的控制流,以及每个表的允许操作范围。
Software Switch: Open vSwitch
- OVS switches packets among virtual interfaces to VMs and physical interfaces
Open vSwitch(OVS)作为运行在虚拟机监控程序中的软件交换机,在数据中心中被广泛使用,OVS在虚拟接口与VM和物理接口之间交换数据包。
- The Open vSwitch virtual switch has two important pieces, called the slow path and the fast path (i.e., datapath)
Open vSwitch虚拟交换机有两个重要部分,称为慢路径和快路径(即数据路径),如图2所示。
慢路径是一个用户空间程序,它提供了OVS的大部分智能,快速路径充当一个缓存层,只包含实现最大性能所需的代码。
4 PISCES Prototype:
- Our PISCES prototype is a modified version of OVS with the parse, match, and action code replaced by C code generated by our P4 compiler
我们的PISCES原型是OVS的一个改进版本,解析、匹配和操作代码被P4编译器生成的C代码替换。
工作流程如下:
首先,程序员创建一个P4程序,并使用P4编译器的PISCES版本为OVS生成新的解析、匹配和操作代码。
其次,编译OVS(使用常规C编译器)以创建一个依赖于协议的交换机,该交换机按照P4程序中的描述处理数据包。为了修改协议,用户修改P4程序,该程序编译成一个新的Hypervisor交换机二进制文件。
4.1 The P4-to-OVS Compiler in PISCES
- P4 compilers have two parts: a front end that turns the P4 code into a target-independent intermediate representation (IR), and a back end that maps the IR to the target
P4编译器有两部分:前端将P4代码转换为独立于目标的中间表示(IR),后端将IR映射到目标。
- the back end optimizes CPU time, latency, or other objectives by manipulating the IR, and then generates C code that replaces the parsing, match, and action code in OVS, as shown in Figure 3
在我们的例子中,后端通过操作IR优化CPU时间、延迟或其他目标,然后生成C代码来替换OVS中的解析、匹配和操作代码,如图3所示。P4到OVS编译器输出c源代码,该代码实现编译相应的交换机可执行文件所需的所有功能。
编译过程还生成一个独立的类型检查程序,可执行文件使用该程序来确保来自控制器的任何运行时配置指令(例如,插入流规则)符合P4程序中指定的协议。
4.2 Modifications to OVS
- We need to make three modifications to OVS to enable it to implement the forwarding behavior described in any P4 program
我们需要对OVS进行三次修改,使其能够实现任何P4程序中描述的转发行为:
- Arbitrary encapsulation and decapsulation
1. 任意包封和脱包封:OVS不支持P4程序可能需要的任意封装和解封装,因此,我们向OVS添加了两个新的原语add header()和remove header(),分别执行封装和解封装,并在快速路径中执行这些操作。
- Conditionals based on comparison of header fields
2.基于标题字段比较的条件:OpenFlow直接支持针对头字段的按位相等测试,P4直接支持这样的测试,但是用这种方式在OpenFlow中实现它们太昂贵了,所以我们在OVS中添加了对它们的直接支持作为条件操作,这是OpenFlow操作的一种“if”语句。
- General checksum verify/update
3.常规校验和验证、更新:IP路由器应该在入口验证校验和,然后在出口重新计算校验和,大多数硬件交换机都是这样做的,而软件路由器通常在进入时跳过校验和验证以减少CPU周期。如果它更改了任何字段(例如TTL),它只会增量地更新校验和。目前,OVS只支持增量校验和,但是我们希望以程序员希望的方式支持校验和的其他使用,因此我们添加了增量校验和优化。
4.3 The Compiler’s Back-end Optimizer
- Two aspects of a software switch ultimately affect forwarding performance
软件交换机的两个方面最终会影响转发性能:
1.用于快速路径处理的每个包的成本
2.发送到慢速路径的包的数量
- Table 1 lists the optimizations that we have implemented, as well as whether the optimization reduces trips to the slow path, fast path CPU cycles, or both
表1列出了我们已经实现的优化,以及优化是否减少了到慢路径、快路径CPU周期或两者的行程。
本节的其余部分将详细介绍这些优化:
- Inline editing vs. post-pipeline editing
1. 内联编辑与后期管道编辑
- Incremental checksum
2. 增量校验和。
- Parser specialization
3. 分析器专用化
- Action specialization
4. 行动专门化
- Action coalescing
5. 作用凝聚
- Cached field modifications
6. 缓存字段修改
- Stage assignment
7. 阶段分配
5 Evaluation:
- We compare the complexity and performance of a PISCES virtual software switch with equivalent OVS native packet processing
我们比较了PISCES虚拟软件交换机与等效OVS本地包处理的复杂性和性能。
我们从两个方面对得到的程序进行了比较:
-
复杂性:包括开发和部署的复杂性以及可维护性
-
性能:将PISCES的包转发性能与相同的本地OVS功能进行了比较
5.1 Complexity
- Complexity indicates the ease with which a program may be modified to fix defects, meet new requirements, simplify future maintenance, or cope with changes in the software environment
复杂性表示程序可以很容易地进行修改,以修复缺陷、满足新的需求、简化将来的维护或处理软件环境中的更改。
我们评估了两类复杂性:
- development complexity of developing baseline features for a software switch
1. 为软件交换机开发基线特征的开发复杂性
我们使用三种不同的度量来评估开发复杂性:代码行、方法计数和平均方法大小
表2总结了本地OVS头字段和解析器实现的每个度量,PISCES中的等效逻辑将代码行减少大约40倍,平均方法大小减少大约20倍。
- change complexity of maintaining an existing software switch
2. 更改维护现有软件交换机的复杂性
为了评估在PISCES中维护一个独立于协议的软件交换机的复杂性,我们比较了在OVS和P4中添加对一个新的头字段的支持所需的工作量。
表3显示了我们对添加对三个字段支持的更改的分析:
- connection label 连接标签
- tunnel OAM flag 隧道OAM标志
- TCP flags TCP标志
表3显示了基于公共Open vSwitch提交对OVS的更改:
结果表明,在一个P4文件中只修改几行代码就足以支持一个新字段,而在OVS中,相应的更改通常需要在数十个文件中进行数百行更改。
5.2 Forwarding Performance
- In this section, we compare OVS and PISCES packetforwarding performance.
在本节中,我们将比较OVS和PISCES的包装转发性能。
Experiment setup and evaluation metrics实验设置和评估指标:
- Calibrating OVS to enable performance comparison 校准OVS以启用性能比较
End-to-end performance 端到端性能:
-
Individual compiler optimizations 单个编译器优化
-
Parser specialization 分析器专用化
Microbenchmarks 微基准:
-
Parser performance 分析器性能
-
Fast-path action performance 快速路径动作性能
-
Slow-path forwarding performance 慢路径转发性能
-
Control flow 控制流
6 Related Work:
PISCES的协议和包处理功能可以使用高级的特定于域的包处理语言来指定。
尽管PISCES使用P4作为高级语言,OVS作为软件交换机,但之前的工作已经开发了用于数据包处理和虚拟软件交换机的领域专用语言,其中,我们实现协议独立性和从DSL到软件交换机的高效编译的方法也可能适用。
-
Domain-specific languages for packet processing 用于数据包处理的特定于域的语言
-
Virtual software switches 虚拟软件交换机
-
Other programmable switches 其他可编程交换机
-
Measuring performance 衡量性能
-
Measuring complexity 衡量复杂性
7 Conclusion:
随着软件管理程序交换机在数据中心的日益广泛使用,需要快速修改这些软件交换机的数据包转发行为。如今,修改这些交换机既需要对交换机代码库的深入了解,也需要在网络协议设计方面的广泛专业知识,这使得定制这些软件交换机的门槛高得令人望而却步。作为这种操作模式的替代,我们开发了PISCES,一种可编程的、独立于协议的软件交换机,它允许协议设计者用高级特定于域的语言(在我们的例子中是P4)指定软件交换机的自定义包处理行为,编译器随之为底层目标软件交换机(在我们的例子中是OVS)生成源代码。
PISCES的程序比软件交换的本地代码中的同等程序简洁40倍,我们演示了通过适当的编译器优化,与本机软件交换实现相比这种复杂度的大幅降低只会带来很小的性能开销。我们的原型演示了一个以P4为编程语言,OVS为目标交换机的原型独立软件交换机的可行性。
此外,我们的软件交换协议独立性和将特定于域的包处理语言编译为高效低级实现的技术应该推广到其他语言和目标。实现语言和目标独立的一种方法是:首先将特定于领域的语言编译成独立于协议的高级中间表示(HLIR),如协议不经意转发或NetASM,然后将PISCES的技术和优化应用到HLIR。
PISCES未来的另一个增强功能是使自定义解析、匹配和操作代码能够动态加载到正在运行的独立于协议的交换机中。目前,在每次程序员改变P4规格,PISCES需要重新编译交换机源代码。在某些情况下,例如向运行中的生产交换机添加新功能和协议,或临时更改协议行为以增加可见性或抵御攻击,在运行中的交换机中动态加载代码将非常有价值。
我们期望未来的可编程协议独立软件交换机支持动态加载新的或修改的包处理代码。最后,PISCES没有实现P4的某些特性,比如P4特性可以跨数据包(即计数器、仪表或寄存器)保持状态,这就需要扩展和推广Open-vSwitch缓存模型,以获得可接受的性能。
现在来看PISCES对协议开发的影响还为时过早,但由此产生的代码简单性应该会使部署、实现和维护自定义软件交换机变得更容易。尤其是,协议设计人员可以使用像P4这样的高级领域特定语言来维护他们的自定义软件交换机实现,而无需跟踪(更大和更复杂)底层软件交换机代码库的演变,开发专有定制而不必修改(和跟踪)的OVS等软件交换机的源代码的能力也可能是协议设计人员的一个卖点,当我们开放PISCES并与使用PISCES的协议设计者互动时,我们打算研究和描述这些效应。