本文概述了带有数据平面开发套件(OvS-DPDK)(高性能,开源虚拟交换机)的Open vSwitch *,并链接到进一步深入探讨各个OvS-DPDK功能的其他技术文章。本文是为希望了解有关DPDK集成的OvS用户编写的。
注:用户可以下载的zip文件OVS主分支或2.6分支,以及安装步骤的主分支或2.6分支。
发布时间: 2016年9月27日 最后更新: 2016年12月19日
OvS-DPDK高级架构
Open vSwitch是一种生产质量的多层虚拟交换机,已获得开源Apache * 2.0许可证的许可。它通过OpenFlow *协议及其OVSDB管理接口支持SDN控制语义。可从 openvswitch.org,GitHub *获得,也可以通过Linux *发行版使用。
本机Open vSwitch通常通过内核空间数据路径转发数据包(请参见图1)。在内核数据路径中,切换“快速路径”由一个简单的流表组成,该流表指示了接收到的数据包的转发/操作规则。异常数据包(流中的第一个数据包)与内核快速路径表中的任何现有条目都不匹配,并被发送到用户空间守护程序进行处理(慢路径)。用户空间处理流中的第一个数据包后,守护程序将更新内核空间中的流表,以便可以在快速路径中处理流中的后续数据包,而不将其发送到用户空间。按照这种方法,本机OvS可以消除大部分接收到的数据包在内核和用户空间之间进行的昂贵上下文切换。然而,可实现的数据包吞吐量受到Linux网络堆栈的转发带宽的限制,这不适用于需要高数据包处理速率的用例;例如,Telco。
DPDK是一组用户空间库,使用户可以创建优化的高性能数据包处理应用程序(信息可在DPDK.org上找到)。实际上,它提供了一系列轮询模式驱动程序(PMD),可绕过内核网络堆栈在用户空间和物理接口之间直接传输数据包。通过消除中断处理和内核网络堆栈的遍历,这大大提高了内核转发的性能。通过将OvS与DPDK集成,交换快速路径位于用户空间中,而异常路径与内核快速路径情况下的数据包所遍历的路径相同。DPDK与OvS的集成如图1所示。
图1:Data Plane Development Kit数据平面与本机Open vSwitch *的集成。
下面的图2显示了OvS-DPDK的高级体系结构。OvS交换端口由网络设备(或netdevs)表示。Netdev-dpdk是DPDK加速的网络设备,它通过三个独立的接口使用DPDK来加速交换机I / O:一个物理接口(由DPDK中的librte_eth库处理)和两个虚拟接口(librte_vhost和librte_ring)。这些与连接到虚拟交换机的物理和虚拟设备接口。
其他OvS架构层提供了进一步的功能和与SDN控制器的接口。Dpif-netdev提供用户空间转发,ofproto是实现OpenFlow交换机的OvS库。它通过网络与OpenFlow控制器进行通信,并通过ofproto提供程序交换硬件或软件。ovsdb服务器维护该OvS实例的最新交换表信息,并将其传达给SDN控制器。下一节将提供有关切换/转发表的详细信息,并通过openvswitch.org网站提供有关OvS体系结构的更多信息。
图2:具有Data Plane Development Kit高层架构的Open vSwitch *。
OvS-DPDK交换表层次结构
从物理或虚拟接口进入OvS-DPDK的数据包根据其报头字段接收唯一的标识符或哈希,然后将其与三个主要交换表之一中的条目进行匹配:精确匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器。数据包的标识符将按顺序遍历这三个表中的每一个,除非找到匹配项,否则将执行表中匹配规则指示的适当操作,并在完成所有操作后将数据包转发出交换机。此方案如图3所示。
图3:使用Data Plane Development Kit切换表层次结构打开vSwitch *。
这三个表具有不同的特性和相关的吞吐量性能/延迟。EMC为有限数量的表条目提供了最快的处理速度。数据包的标识符必须与该表中所有字段的条目完全匹配(源IP和端口,目标IP和端口以及协议的5元组),以实现最高速度的处理,否则它将在EMC上“遗漏”并传递给dpcls。dpcls包含更多表条目(安排在多个子表中),并启用数据包标识符的通配符匹配(例如,指定了目标IP和端口,但允许任何源)。这提供了大约EMC吞吐性能的一半,并且可以满足大量的表条目。
dpcls上的未命中会导致将数据包标识符发送到ofproto分类器,以便OpenFlow控制器可以决定操作。该路径性能最低,比EMC慢10倍以上。ofproto分类器中的匹配导致在更快的交换表中建立新的表条目,以便可以更快地处理相同流中的后续数据包。
OvS-DPDK功能和性能
在撰写本文时,OvS主代码分支上提供了以下高级OvS-DPDK功能:
- DPDK对v16.07的支持(每个新的DPDK版本所支持的版本都会递增)
- vHost用户支持
- vHost重新连接
- vHost多队列
- 本机隧道支持:VxLAN,GRE,Geneve
- VLAN支持
- MPLS支持
- 入口/出口QoS策略
- 巨型帧支持
- 连接跟踪
- 统计信息:DPDK vHost和扩展的DPDK统计信息
- 调试:DPDK pdump支持
- 链接绑定
- 连结状态
- VFIO支持
- ODK / OpenStack检测DPDK端口
- vHost用户NUMA意识
图4中突出显示了本机OvS与OvS-DPDK之间的最新性能比较。该图显示了Phy-OvS-Phy用例的每秒数据包吞吐量,表明与本机OvS相比,OvS-DPDK的性能提高了约10倍。 ,在启用了英特尔®超线程技术(英特尔®HT技术)(在图例中标为1C2T或一个带有两个逻辑线程的物理核心)的情况下,该值增加到约12倍。同样,Phy-OvS-VM-OvS-Phy用例证明了OvS-DPDK的性能比本地OvS约高9倍。
图4:性能比较-原生Open vSwitch *(OvS)和带有Data Plane Development Kit的OvS。
可以在英特尔®开放网络平台(Intel®ONP)性能报告中找到此数据的硬件和软件配置,以及更多用例结果。
OvS-DPDK的可用性
OvS-DPDK在上游openvswitch.org存储库中可用,也可以通过以下Linux发行版获得。最新的里程碑版本是OvS 2.6(2016年9月),并且发布的周期为六个月。
可通过以下方式下载代码:OvS master分支;OvS 2.6版本分支。提供master分支的安装步骤以及2.6 release分支的安装步骤。
带有DPDK的OvS打包版本可从以下网站获得:
附加信息
要了解有关OvS-DPDK的更多信息,请查看以下有关英特尔®开发人员专区,01.org,英特尔®网络构建器和英特尔®网络构建器大学的视频和文章。
用户指南:
开发人员指南:
- 使用DPDK的Open vSwitch- 如何使用DPDK数据路径构建和安装Open vSwitch
- 将Open vSwitch与DPDK结合使用 -包括高级性能调整信息
文章和视频:
- 带DPDK的OvS的速率限制配置和使用
- 带DPDK的OvS的QoS配置和使用
- 使用DPDK为OvS配置vHost用户多队列
- 带DPDK的OvS中的vHost用户NUMA意识
- 带DPDK的OvS中的DPDK Pdump
- 在OpenStack中使用DPDK启用OvS
- 带有DPDK的Open vSwitch *中的巨型帧
- 带DPDK的Open vSwitch *中的vHost用户客户端模式
- OV S-DPDK数据通路Classifie [R -第1部分
- OvS-DPDK数据路径分类器–第2部分
- 使用DPDK在Open vSwitch *中进行链路聚合配置和使用
- 使用英特尔®VTune放大器分析具有DPDK瓶颈的OvS
- 在DevStack中将OvS和DPDK与Neutron一起使用
- 使用OVS-DPDK构建和测试简单的NFV虚拟机间用例 (YouTube视频系列)
带DPDK里程碑的OvS发行网络研讨会:
INB大学:
白皮书:
有一个问题?随时跟进Open vSwitch 讨论邮件线程上的查询。
关于作者
Robin Giller是英特尔网络平台事业部的项目经理。
产品和性能信息
对于非Intel微处理器而言,Intel的编译器可能会或可能不会针对非Intel微处理器进行相同程度的优化。这些优化包括SSE2,SSE3和SSSE3指令集以及其他优化。英特尔不保证非英特尔制造的微处理器的任何优化的可用性,功能或有效性。该产品中与微处理器有关的优化旨在与Intel微处理器一起使用。不特定于英特尔微体系结构的某些优化保留给英特尔微处理器。有关本通知涵盖的特定指令集的更多信息,请参阅适用的产品《用户和参考指南》。
公告修订版#20110804