OVS流表归一化

开源 OVS (Open vSwitch)流表归一化特性,可用于公有云和私有云场景,其中Open vSwitch是一个优秀的开源软件交换机,支持主流的交换机功能,比如二层交换、网络隔离、QoS、流量监测等,而其最大的特点就是支持OpenFlow。OpenFlow定义了灵活的数据包处理规范,为用户提供L1-L4包处理能力。OVS支持多种Linux虚拟化技术,包括Xen、KVM以及VirtualBox。华为自研XPF(Extensible Packet Framework)在开源的基础之上,将多种类型的流表动作集进行了组合归一,减少了查询次数,在Connection Tracking场景下,可以大幅度提升报文转发性能。

OVS流表归一化解决方案架构如图1所示,组件说明请参见表1

图1 OVS流表归一化架构
表1 OVS流表归一化各类组件说明

名称

说明

网卡

发送和接收报文。

QEMU

QEMU作为进程运行在宿主机的用户态,它基于KVM及内核的特性,为Guest OS模拟出CPU、内存、IO等硬件,支撑Guest OS在进程中运行。

DPDK

DPDK提供的数据平面开发工具集,为用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。

ovs-vswitchd

OVS守护进程,OVS的核心部件,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换(flow-based switching)。它和上层controller通信遵从OpenFlow协议,它与ovsdb-server通信使用OVSDB协议,它和内核模块通过netlink通信。

OpenFlow

OpenFlow实现了数据层和控制层的分离,其中OpenFlow交换机进行数据层的转发,而Controller实现了控制层的功能。图中的OpenFlow组件主要实现了控制层。

XPF加速库

自研功能模块,在OVS软件内部实现了一个智能卸载引擎模块,该模块用于跟踪数据报文在OVS软件中所经历的所有流表和CT表,将执行的CT行为和所有流表行为项进行综合编排成一条综合行为项并结合统一匹配项生成一条集成流表项。后续的数据报文在进入OVS后,若匹配命中该集成流表,则直接执行综合行为,相比开源的处理流程,查询次数将减少,性能将大幅度提升。

OVS流表归一化软件包依赖开源的OVS,二次开发的OVS依赖XPF库,因此在编译安装OVS时需要编译两次OVS。第一次是编译开源的OVS,并复制一些必要的头文件,第二次是编译二次开发的OVS。

OVS DB

开放虚拟交换机中保存的各种配置信息(如网桥、端口)的数据库,是针对OVS开发的轻量级数据库。

DPDK

DPDK全称Intel Data Plane Development Kit,是Intel提供的数据平面开发工具集,用户空间高效的数据包处理提供库函数和驱动的支持。通俗地说,就是一个用来进行包数据处理加速的软件库。

DPDK不同于Linux系统以通用性设计为目的,而是专注于网络应用中数据包的高性能处理。具体体现在DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,绕过了Linux内核协议栈对数据包处理过程。它不是一个用户可以直接建立应用程序的完整产品,不包含需要与控制层(包括内核和协议堆栈)进行交互的工具。

相比原生Linux(Native Linux),采用Intel DPDK技术后能够大幅提升IPv4的转发性能,可以让用户在迁移包处理应用时,获得更好的成本和性能优势。同时可以采用统一的平台部署不同的服务,如应用处理,控制处理和包处理服务。DPDK架构如图2所示。

图2 DPDK架构图

OVS

OVS是产品级的虚拟交换机,大量应用在生产环境中,支撑整个数据中心虚拟网络的运转。OVS基于 SDN 的思想,将整个核心架构分为 控制面 数据面 ,数据面负责数据的交换工作,控制面实现交换策略,指导数据面工作。从整体上看,OVS可以划分为三大块,管理面、数据面和控制面。数据面就是以用户态的ovs-vswitchd和内核态的datapath为主的转发模块,以及与之相关联的数据库模块ovsdb-server,控制面主要是由ovs-ofctl模块负责,基于OpenFlow协议与数据面进行交互,而管理面则是由OVS提供的各种工具来负责,这些工具的提供也是为了方便用户对底层各个模块的控制管理,提高用户体验。

OVS组件架构如图3所示。

图3 OVS组件架构图