PISCES: A Programmable, Protocol-Independent Software Switch
重要性
虚拟机监视器使用软件交换机来引导数据包进出虚拟机。这些交换机经常需要升级和定制,以支持新的协议头或用于隧道和覆盖的封装,以改进测量和调试功能,甚至添加类似于中间设备的函数。软件交换机通常基于大量的代码,包括内核代码,改变交换机是一项艰巨的任务,需要精通网络协议的设计和开发、测试,以及维护一个庞大而复杂的代码库。改变软件交换机转发数据包的方式不需要对其实现有深入的了解。相反,应该可以指定如何用高级领域特定语言(DSL)(如P4)处理和转发数据包,并将其编译为在软件交换机上运行。评估表明,PISCES的性能与OVS相当,PISCES程序的长度约为OVS源代码的1/40。
挑战
如何实现和优化
方案
软件交换机的转发行为是使用特定领域的语言指定的。本例是基于Open vSwitch (OVS)软件交换机,使用P4领域专用语言进行配置。实现的协议无关的软件交换机。 该方案的好处有:
- 添加新的标准或私有协议头:数据中心所有者可以更快地编译和部署新协议
- 删除标准协议头:删除未使用的协议与删除协议规范中未使用的部分并重新编译交换机源代码一样简单
- 更好的可视化:能够快速修改转发和监视逻辑,可以减少诊断和修复网络故障的时间。
- 可以添加添加全新的功能:用户和网络所有者可以修改转发行为,将更快地改进他们的网络。
本例对OVS进行了改进 - 任意封装和解封装:OVS不支持P4程序可能需要的任意封装和解封装。所以添加了两个新的原语,封装和解封装。
- 基于报头字段比较的条件:OpenFlow只直接支持对报头字段的按位相等测试。在OVS中添加了对不等关系的直接支持,以条件操作的形式。
- 一般的校验和验证/更新:OVS只支持增量校验和,但为了支持以程序员希望的方式使用校验和,对增量校验进行了优化。
并且本例对编译器后端进行了优化: - 内联编辑/流水线编辑:优化器分析中间表示,以确定在流水线中一个包可能需要修改多少次。如果值低于某个阈值,则优化器执行内联编辑;否则,它将执行流水线后编辑。
- 动作优化:使用诸如死代码消除之类的优化来识别和消除设置操作中的冗余
- 增量校验和:通过用高级程序描述(如P4)来表示校验和操作,程序员可以向编译器提供必要的上下文信息,以便更有效地实现校验和
- 解析器优化:在高级语言中指定转发行为可以为编译器提供可以用来优化解析器的信息。
- 动作合并:通过分析P4程序中的控制流和匹配操作处理,编译器可以发现哪些字段实际上被修改了,并可以生成一个有效的、单一的操作来直接更新这些字段。
- 缓存字段修改:通过自动生成操作来实现P4程序所需的特定算术操作,在可能的情况下避免匹配和设置
- 分阶段指派:增强了P4语言,使用户能够用阶段编号注释每个头文件
见解
设计和实现了第一个允许在高级DSL中定制协议规范而不需要直接修改交换机源代码的软件交换机。平均比等效的OVS源代码短约40倍,而转发性能(即吞吐量)开销仅为2%左右。证明在虚拟机监视器交换机中,可编程性的成本可以忽略不计,研究结果可以启发设计新的协议无关的软件交换机。
|