作者简介

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网站获取。

图2:使用DPDK(数据面开发套件)高级架构的OpenvSwitch *

PART 2

OvS-DPDK交换表层次结构

从物理或虚拟接口进入OvS-DPDK的数据包根据其头部字段来确定唯一标识符或散列,然后将其与三个主要交换表之一中的条目进行匹配,三个主要交换表是:完全匹配缓存(EMC),数据路径分类器(dpcls)或ofproto分类器。除非找到匹配,否则数据包的标识符将按顺序遍历这三个表,若找到匹配,则将执行表中匹配规则指示的相应操作并且在完成所有动作后将数据包转出交换机。该方案如图3所示。

图3:使用DPDK(数据面开发套件)交换表层次结构的OpenvSwitch *

这三个表具有不同的特性和相应吞吐量性能/延迟。EMC为有限数量的表条目提供最快的处理。数据包的标识符必须与此表中的所有字段的条目完全匹配 ,包括源IP和端口的5元组,目标IP和端口,以及协议,这是为了最高速度处理,否则它将未命中EMC并传递给dpcls。dpcls包含更多表条目(排列在多个子表中)并启用数据包标识符的通配符匹配(例如,指定目标IP和端口,但允许任何源)。这提供了大约一半的EMC吞吐量性能,并且可以满足更多的表条目。将dpcls中匹配的数据包流配置在EMC中,可以以最高速度处理具有相同标识符的后续分组。

未命中 dpcls会导致数据包被发送到ofproto分类器,以便OpenFlow控制器可以决定数据包操作。此路径的性能最低,比EMC慢10倍以上。ofproto分类器中的匹配会导致新表条目建立在切换更快的表中,以便可以更快地处理同一流中的后续数据包。

PART 3

OvS-DPDK功能和性能

在撰写本文时,OvS主代码分支上提供了以下高级的OvS-DPDK功能:

·      v16.07的DPDK支持(每个新DPDK版本支持的版本增量)

·      vHost-user支持

·      vHost重连

·      vHost多队列

·      本地隧道支持:VxLAN,GRE,Geneve

·      VLAN支持

·      MPLS支持

·      Ingress/egress/QoS策略

·      巨帧支持

·      连接跟踪

·      统计:DPDKvHost和扩展的DPDK统计数据

·      调试:DPDKpdump支持

·      链接聚合

·      链接状态

·      VFIO支持

·       DPDK端口的ODL/OpenStack检测

·      vHost-user NUMA感知

图4突出显示了原有OvS和OvS-DPDK之间的最新性能比较。这显示了Phy-OvS-Phy使用场景下的每秒数据包吞吐量,表明OvS-DPDK比原有的OvS性能提升约为10倍,在启用英特尔®超线程技术(英特尔®HT技术)的情况下增加到约12倍(标记为1C2T,或图中带有两个逻辑线程的物理核心)。类似地,Phy-OvS-VM-OvS-Phy用户场景表明OvS-DPDK相对于原有OvS的性能提高了约9倍。

图4:性能比较 – 原有OpenvSwitch *(OvS)和带数据平面开发套件的OvS

此数据的硬件和软件配置以及更多用例结果可在英特尔®开放式网络平台(英特尔®ONP)性能报告[9]中找到。

OvS-DPDK获取方式

OvS-DPDK可以在openvswitch.org[10]存储库中找到,也可以通过如下所示Linux发行版获得。最新的里程碑版本是OvS2.6(2016年9月),发布时间为6个月。

代码可供下载,如下所示:OvS主分支[11];OvS 2.6版本分支[12]。主分支的安装步骤[13]以及2.6版本分支的安装步骤[14]都可获得。

基于DPDK的OvS打包版本可从以下网址获得:

红帽*OpenStack平台[15]

Ubuntu*[16]

Mirantis * OpenStack[17]

Open Platform for NFV*[18]

附加信息

要了解有关OvS-DPDK的更多信息,请查看以下视频和文章,来自英特尔®开发人员专区,01.org,英特尔®网络构建商和英特尔®网络建设者大学。

用户指南

使用基于DPDK的OvS进行VM间NFV应用[19]

在Ubuntu上使用基于DPDK的OvS[20]

开发者指南

基于DPDK的OpenvSwitch  - 如何使用DPDK数据路径构建和安装Open vSwitch[21]

使用基于DPDK的OpenvSwitch - 包括高级性能调优信息[22]

文章和视频

基于DPDK的OvS的速率限制配置和使用[23]

基于DPDK的OvS的QoS配置和使用[24]

基于DPDK的OvS中vHost user多队列配置[25]

OvS-DPDK中vhost user的NUMA感知[26]

基于DPDK的OvS中的Pdump[27]

在OpenStack中使能OvS-DPDK[28]

基于DPDK的Open vSwitch *中的巨帧[29]

基于DPDK的vSwith中vhost-user客户端模式[30]

OVS-DPDK数据通分类器- 第1部分[31]

OvS-DPDK数据通路分类器- 第2部分[32]

OvS-DPDK中的链路聚合配置和使用[33]

使用英特尔®VTuneAmplifier分析OvS-DPDK中的性能瓶颈[34]

在DevStack中使基于OvS和DPDK的Neutron[35]

使用OVS-DPDK构建和测试简单的NFV 跨VM使用场景(YouTube视频系列)[36]

OvS与DPDK里程碑发布网络研讨会

在OpenStack中使用DPDK启用OvS2.5.0[37]

在OpenStack中使用DPDK启用OvS2.4.0[38]

在OpenStack中使用DPDK启用OvS2.6.0[39]

INB大学

OvS-DPDK深入研究[40]

DPDK Open vSwitch:加速虚机访问路径[41]

白皮书

OvS-DPDK使能SDN和NFV[42]

有问题?请随时关注Open vSwitch讨论邮件[43]线程上的问答。

【序号链接网址】

  1. https://software.intel.com/en-us/user/1386481

  2. http://docs.openvswitch.org/en/latest/intro/install/dpdk/

  3. https://github.com/openvswitch/ovs/archive/master.zip

  4. http://github.com/openvswitch/ovs/archive/branch-2.6.zip

  5. https://github.com/openvswitch/ovs/blob/branch-2.6/INSTALL.DPDK.md

  6. http://openvswitch.org/

  7. https://github.com/openvswitch/ovs/blob/master/Documentation/topics/porting.rst

  8. http://dpdk.org/

  9. https://github.com/openvswitch/ovs/blob/master/Documentation/topics/porting.rst

  10. https://download.01.org/packet-processing/ONPS2.1/Intel_ONP_Release_2.1_Performance_Test_Report_Rev1.0.pdf

  11. http://openvswitch.org/

  12. https://codeload.github.com/openvswitch/ovs/zip/master

  13. https://codeload.github.com/openvswitch/ovs/zip/branch-2.6

  14. https://github.com/openvswitch/ovs/blob/master/Documentation/intro/install/dpdk.rst

  15. https://github.com/openvswitch/ovs/blob/branch-2.6/INSTALL.DPDK.md

  16. https://access.redhat.com/products/red-hat-openstack-platform"\t "_blank

  17. http://releases.ubuntu.com/16.04/" \t"_blank

  18. https://www.mirantis.com/products/mirantis-openstack-software/"\t "_blank

  19. https://www.opnfv.org/brahmaputra"\t "_blank

  20. https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications

  21. https://software.intel.com/en-us/articles/using-open-vswitch-with-dpdk-on-ubuntu

  22. http://docs.openvswitch.org/en/latest/intro/install/dpdk/

  23. http://docs.openvswitch.org/en/latest/howto/dpdk/

  24. https://software.intel.com/en-us/articles/rate-limiting-configuration-and-usage-for-open-vswitch-with-dpdk

  25. https://software.intel.com/en-us/articles/qos-configuration-and-usage-for-open-vswitch-with-dpdk

  26. https://software.intel.com/en-us/articles/configure-vhost-user-multiqueue-for-ovs-with-dpdk

  27. https://software.intel.com/en-us/articles/vhost-user-numa-awareness-in-open-vswitch-with-dpdk

  28. https://software.intel.com/en-us/articles/dpdk-pdump-in-open-vswitch-with-dpdk

  29. https://01.org/openstack/blogs/stephenfin/2016/enabling-ovs-dpdk-openstack

  30. https://software.intel.com/en-us/articles/jumbo-frames-in-open-vswitch-with-dpdk

  31. https://software.intel.com/en-us/articles/vhost-user-client-mode-in-open-vswitch-with-dpdk

  32. https://software.intel.com/en-us/articles/ovs-dpdk-datapath-classifier

  33. http://software.intel.com/en-us/articles/ovs-dpdk-datapath-classifier-part-2

  34. http://software.intel.com/en-us/articles/link-aggregation-configuration-and-usage-in-open-vswitch-with-dpdk

  35. https://software.intel.com/en-us/articles/analyzing-open-vswitch-with-dpdk-bottlenecks-using-vtune-amplifier

  36. https://software.intel.com/en-us/articles/using-open-vswitch-and-dpdk-with-neutron-in-devstack

  37. https://www.youtube.com/playlist?list=PLg-UKERBljNwc7kz6bsRnwPb4kTBSldLs

  38. https://www.brighttalk.com/webcast/12229/209935"\t "_blank

  39. https://www.brighttalk.com/webcast/12229/194949"\t "_blank

  40. http://www.brighttalk.com/webcast/12229/232617/open-vswitch-with-dpdk-in-ovs-2-6-0

  41. https://networkbuilders.intel.com/university/course/open-vswitch-with-dpdk-architectural-deep-dive

  42. https://networkbuilders.intel.com/university/course/dpdk-open-vswitch-accelerating-the-path-to-the-guest"\t "_blank

  43. https://networkbuilders.intel.com/docs/open-vswitch-enables-sdn-and-nfv-transformation-paper.pdf

  44. http://mail.openvswitch.org/mailman/listinfo/discuss

    转载须知   

推荐阅读 

基于DPDK的Open vSwitch概述相关推荐

  1. 使用DPDK打开Open vSwitch(OvS) *概述

    本文概述了带有数据平面开发套件(OvS-DPDK)(高性能,开源虚拟交换机)的Open vSwitch *,并链接到进一步深入探讨各个OvS-DPDK功能的其他技术文章.本文是为希望了解有关DPDK集 ...

  2. Open vSwitch概述

    转自https://blog.csdn.net/lizheng2300/article/details/54582310 Open vSwitch概述 Open vSwitch(下面简称OVS)是一个 ...

  3. 《深入浅出DPDK》读书笔记(十六):DPDK应用篇(基于DPDK的存储软件优化:SPDK)

    Table of Contents 基于DPDK的存储软件优化 180.基于以太网的存储系统 181.以太网存储系统的优化 SPDK介绍 182.SPDK介绍 (1)兼容性 (2)性能 183.用户态 ...

  4. 20个基于DPDK开源项目,建议收藏

    一.ANS – DPDK 原生加速网络堆栈 ANS(加速网络堆栈)是DPDK本地TCP/IP堆栈,也参考FreeBSD实现.ANS提供了一个与Intel DPDK一起使用的用户空间TCP/IP堆栈. ...

  5. 一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器

    # LVS DR 原理 LVS-DR不同于普通的haproxy代理机制,它在网络中的作用层级更加底层.haproxy一般代理应用层的应用数据,所有的数据都会通过haproxy收发,导致了haproxy ...

  6. 基于DPDK+VPP实现高性能防火墙

    0. 数据平面和用户态协议栈 传统基于linux netfilter实现防火墙,虽然方便,但是性能很差.于是pfring/netmap/dpdk等机制,都要bypass掉内核协议栈. 多年来,各大操作 ...

  7. 基于事件的异步模式概述

    基于事件的异步模式概述 MSDN 那些同时执行多项任务.但仍能响应用户交互的应用程序通常需要实施一种使用多线程的设计方案.System.Threading 命名空间提供了创建高性能多线程应用程序所必需 ...

  8. 分享你的Crypto资源:基于DPDK的Virtio-Crypto运算资源虚拟化方案

    作者简介 Zhang, Roy Fan Intel软件工程师 主要从事DPDK开发与虚拟化方面的工作. 为什么要Virtio-Crypto? 随着近年来互联网,特别是移动互联网的高速发展,用户对数据安 ...

  9. Open vSwitch 概述

    Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机.在虚拟化平台上,OVS 可以为动态变化的端点提供 2 ...

最新文章

  1. MATLAB已知坐标均匀取电,基于MATLAB带钢卷取电液伺服控制系统的分析(word文档良心出品)(11页)-原创力文档...
  2. substr判断最后一个是不是逗号_用java帮助你判断一个数是不是回文数
  3. html怎么在图片上加文字_怎么把图片文字转换成word文档
  4. SGU 248. Integer Linear Programming( 背包dp )
  5. java游戏运行环境_Java运行环境
  6. 《关键对话——从“心”开始,如何确定目标》读书笔记(三)
  7. KVC、KVO实现过程
  8. 如何拍好运动风人像?
  9. [Usaco2014 Open]Gold Fair Photography(hash)
  10. [VB]用记录集填充表格函数
  11. B6-简析响应者链条
  12. Java中String.format()的简单用法介绍
  13. 游戏数据分析指标定义 | 通用
  14. 运筹说第34期丨运输问题发展应用及领域风云人物
  15. BP神经网络拟合函数
  16. [转]外贸出口流程图
  17. Ubuntu Server 20.04.4 在树莓派上的体验之连接网络和WIFI(WLAN0)
  18. 在线更换背景网站(白色背景换为蓝色背景证件照)
  19. 可买房摇号,北京市工作居住证全面解读
  20. Mac系统安装/升级 Git

热门文章

  1. 操作系统(四)补充---DOS微软磁盘操作系统
  2. Google Earth Engine(GEE)——swissSURFACE3D光栅(DSM)数据集
  3. linux实现开机自启动服务/脚本
  4. express.static 作用及用法
  5. 蓝牙耳机什么牌子的好又实惠?实惠好用的蓝牙耳机品牌
  6. 数商云X日本高化学,共同打造跨境化学品B2B平台新范式
  7. windows中maven的环境变量配置
  8. 小于三位的正整数 正则式_蓝调解码|样板文章,投稿必读:计算思维培养的“递进式”活动设计研究...
  9. Java 集合常见面试题
  10. NVIDIA Tesla/Quadro和GeForce GPU比较