OVS流表归一化
开源
OVS流表归一化解决方案架构如图1所示,组件说明请参见表1。
名称 |
说明 |
---|---|
网卡 |
发送和接收报文。 |
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所示。
- PMD:Pool Mode Driver,轮询模式驱动,通过非中断,以及数据帧进出应用缓冲区内存的零拷贝机制,提高发送/接受数据帧的效率。
- 流分类:Flow Classification,为N元组匹配和LPM(最长前缀匹配)提供优化的查找算法。
- 环队列:Ring Queue,针对单个或多个数据包生产者、单个数据包消费者的出入队列提供无锁机制,有效减少系统开销。
- MBUF缓冲区管理:分配内存创建缓冲区,并通过建立MBUF对象,封装实际数据帧,供应用程序使用。
- EAL:Environment Abstract Layer,环境抽象(适配)层,PMD初始化、CPU内核和DPDK线程配置/绑定、设置HugePage大页内存等系统初始化。
OVS
OVS是产品级的虚拟交换机,大量应用在生产环境中,支撑整个数据中心虚拟网络的运转。OVS基于
- ovs-ofctl:这个是控制面的模块,但本质上它也是一个管理工具,主要是基于OpenFlow协议对OpenFlow交换机进行监测和管理,通过它可以显示一个OpenFlow交换机的当前状态,包括功能、配置和表中的项。
- ovs-dpctl:用来配置交换机的内核模块datapath,它可以创建,修改和删除datapath。一般,单个机器上的datapath有256条(0-255)。一条datapath对应一个虚拟网络设备。该工具还可以统计每条datapath上的设备通过的流量,打印流的信息等。
- ovs-appctl:查询和控制运行中的OVS守护进程,包括ovs-switchd,datapath,OpenFlow控制器等,兼具ovs-ofctl、ovs-dpctl的功能,是一个非常强大的命令。ovs-vswitchd等进程启动之后就以一个守护进程的形式运行,为了能够很好的让用户控制这些进程,就有了这个命令。
- ovs-vsctl:查询和更新ovs-vswitchd的配置,这也是一个很强大的命令,网桥、端口、协议等相关的命令都由它来完成。此外,还负责和ovsdb-server相关的数据库操作。
- ovsdb-client:访问ovsdb-server的客户端程序,通过ovsdb-server执行一些数据库操作。
- ovsdb-tool:和ovsdb-client要借助ovsdb-server才能进行相关数据库操作不同,ovsdb-tool可以直接操作数据库。
OVS组件架构如图3所示。