作者简介
Robin Giller
英特尔网络平台集团的项目经理
本文是关于基于DPDK(数据面开发套件)的Open vSwitch[1](OvS-DPDK)的概述,这是一种高性能,开源的虚拟交换机,本文还提供了有关OvS-DPDK功能的更为深入的技术文章的链接。本文是为希望深入了解OvS与DPDK集成的用户所撰写的。
注意:用户可以下载OVS主分支[2]或2.6分支[3]的压缩文件,及其安装步骤[4]。
(蓝色字部分链接见文末,下同)
▼
PART 1
OvS-DPDK高级架构
OpenvSwitch是一个生产质量的多层虚拟交换机,在开源Apache*2.0 license下获得许可。它通过OpenFlow*协议及其OVSDB管理接口支持SDN控制语义。OpenvSwitch可以从openvswitch.org[5],GitHub[6]*获得,也可通过Linux*发行版获得。
原有的 OpenvSwitch通常通过内核空间数据路径转发数据包(参见图1)。在内核数据路径中,交换机的“快速路径”包括一个对接收报文的转发和操作规则的简单流表。异常数据包(流中的第一个数据包)与内核快速路径表中的任何现有条目都不匹配,并被发送到用户空间守护程序进行处理(慢速路径)。在用户空间处理流中的第一个数据包之后,守护进程将更新内核空间中的流表,以便该流的后续数据包可以在快速路径中处理而不会发送到用户空间。根据此方法,对于大部分接收到的数据包,原始OvS可以消除在内核和用户空间之间进行昂贵的上下文切换。但是,可达到的数据包吞吐量受到Linux网络协议栈的转发带宽限制,这不适用于需要高速率数据包处理的用例;例如,电信运营商场景。
DPDK是一组用户空间库,使用户能够创建高性能优化的数据包处理应用程序(可在DPDK.org[7]上找到相关信息)。实际上,它提供了一系列轮询模式驱动程序(PMD),可以绕过内核网络协议栈,在用户空间和物理接口之间直接传输数据包。通过消除内核网络协议栈的中断处理和遍历,可以显著提升转发性能。将OvS与DPDK集成后,交换机快速路径在用户空间中,异常路径与内核方案下的数据包路径相同。图1是DPDK与OvS的集成示意图。
图1:DPDK(数据面开发套件)数据平面与原始Open vSwitch*的集成
下图2显示了OvS-DPDK的高级架构。OvS交换端口由网络设备(或netdevs)表示。Netdev-dpdk是一个DPDK加速过的网络设备,它通过三个独立的接口:一个物理接口(由DPDK中的librte_eth库处理)和两个虚拟接口(librte_vhost和librte_ring),使用DPDK加速交换机的I/O性能,这些物理和虚拟的接口会连接到虚拟交换机上。
其他OvS架构层提供了进一步的功能,并和例如SDN控制器相连接。Dpif-netdev提供用户空间转发,ofproto是实现OpenFlow交换的OvS库。它通过网络与OpenFlow控制器通信并通过ofproto提供软件和硬件接口的数据交换功能。ovsdb服务器维护该OvS实例的最新交换表信息并将其传送给SDN控制器。接下来的章节将提供交换/转发表的详细信息,更多有关OvS体系结构的信息[8],可通过openvswitch.org网站获取。