Ovs+Dpdk简单实践

一、Dpdk简介

Dpdk是X86平台报文快速处理的库和驱动的集合,不是网络协议栈,不提供二层,三层转发功能,不具备防火墙ACL功能,但通过DPDK可以轻松的开发出上述功能。优势在于通过Dpdk,可以将用户态的数据,不经过内核直接转发到网卡,实现加速目的。主要架构如图1.1所示。在intel的大力发展下,Dpdk已经基本建立了自己的生态系统,比较完善的文档以及各种开发范例都可以在http://www.dpdk.org/下载到,目前最新的发行版本是V16.01。

二、Ovs+Dpdk编译与安装

目前Ovs的最新发行版版本为v2.5.0,根据Ovs的官方文档,由于Qemu早期版本不支持vhost-usertype,所以qemu版本必须在v2.1以上。虽然qemu版本更新很快,但是我们测试机器采用的是Centos7.1系统,Centos官方升级包中支持的qemu版本较低,所以我们使用了符合要求的较低版本Qemuv2.2以防止出现新的问题。Qemu编译安装时间比较长,需要提前去qemu官网下载对应版本,并安装。

Step1:下载Ovs和Dpdk相关版本

wgethttp://openvswitch.org/releases/openvswitch-2.5.0.tar.gz

wgethttp://www.dpdk.org/browse/dpdk/snapshot/dpdk-16.04.tar.gz

Step2:清理环境,因为Ovs+Dpdk,需要Ovs在编译时link到Dpdk的lib库,所以如果环境原来已经安装有Ovs,也需要先卸载掉,重新编译安装。

Step3:编译Dpdk

修改配置文件config/common_linuxapp,这里我们测试vhost模式,所以需要把下面两个配置项,配置为yes。

Step 4:安装Dpdk

新建一个安装目录 mkdir -p /usr/src/dpdk

Step 5:编译相关模块

Step 6:安装ovs

Step7:安装相关内核模块

三、环境准备

Step1:启动namespace ovs

Step2:配置hugepage

1)查看当前hugepage配置

2)修改hugepage页数为1024

3)挂载

Step3:启动dpdk和ovs

这里socket-mem400,400的含义是,在socket0和socket1上分别分配400MB的内存给dpdk使用。

Step4:将网口绑定为Dpdk设备

在/Dpdk/tools目录下,有一个网口绑定工具,使用这个工具可以将eth设备绑定为Dpdk设备(绑定的目的是修改网口的驱动)

dpdk_nic_bind.py --bind=igb_uio eth1

使用这个工具也可以查看当前网卡驱动的绑定情况,图2.1中显示,两个82599ES网口一个使用内核驱动,一个使用DPDK驱动。

四、简单测试

测试环境选择在两台物理机上分别通过Dpdk网口,创建两台虚拟机,使用netperf工具来测试两台虚拟机之间的网络性能。Ovs+Dpdk和Ovs本身之间的区别可以由图3.1简单来表示。

虚拟机以及Dpdk的bridge和port之间的结构如图3.2所示:

先通过ovs命令,创建相关bridge和port:

在bridge和port创建好以后,ip addr命令的相关网口部分如下:

36: br0: mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 500
link/ether 16:8e:6a:b6:4f:44 brdff:ff:ff:ff:ff:ff
inet 6.0.0.101/24 brd 6.0.0.255 scopeglobal br0
valid_lft forever preferred_lft forever
inet6 fe80::148e:6aff:feb6:4f44/64 scopelink
valid_lft forever preferred_lft forever
37: br1: mtu 1500 qdisc pfifo_fast state UNKNOWNqlen 500
link/ether ec:f4:bb:e9:2b:4a brdff:ff:ff:ff:ff:ff
inet7.0.0.1/24 brd 7.0.0.255 scope global br1
valid_lft forever preferred_lft forever
inet6 fe80::eef4:bbff:fee9:2b4a/64 scopelink
valid_lft forever preferred_lft forever

通过ovs创建的bridge和port如图3.2下:

Dpdk相关port创建好以后,一个简单的方法可以判断一下Dpdk端口是否创建成功,如果成功,通过top命令可以看到/usr/local/sbin/ovs-vswitchd进程的cpu使用率会一直保持在100%。

两台物理机上采用相同的方式来配置bridge和port。然后启动虚拟机。在Ovs的官方文档中,虚拟机的启动都是采用命令的方式,在命令中进行相关参数的配置。类似下面这样的:

很多人喜欢使用xml文件的方式来启动虚拟机。这种命令转换为xml文件也很简单,可以使用qemu commands的方式:

因为使用了Dpdk,数据包从虚拟机出来以后,直接送到了物理网卡,不经过内核,所以常规的Tcpdump抓包工具无法奏效。这里我们可以使用Ovs的dummy模块进行镜像抓包。根据抓包结果来确定是否真正的走了vxlan协议。

图3.3是使用Dpdk和不使用Dpdk网络性能对比情况,明显可以看出,使用Dpdk以后,网络性能有了显著提高,特别是TCP_CRR这种应用,性能提高了10倍以上。

四、问题

Ovs+Dpdk实际使用中的问题,主要来源于两个方面。一方面由于Dpdk+Ovs涉及到kernel、Qemu、Ovs、Libvirt等不同项目,各个模块都存在bug,比如Ovs的watchdog crash问题、Qemu中关于vhost socket断开以后,需要重启虚拟机才能恢复正常的问题、Dpdk使用了huagepage,当系统内存使用紧张时,会出现虚拟机网络延时变大的问题,以及GCC编译器版本不同带来的Ovs程序crash问题等等。虽然Ovs项目中正式纳入Dpdk时间已经比较长,但是真正在生产环境部署,还有很多问题需要解决。另一方面由于Ovs天生的性能方面的缺陷,当集群规模非常大的时候,Ovs性能迅速下降。今年由思科,爱立信以及intel主导的开源项目Vpp+Dpdk(https://fd.io/)横空出世,基本解决了Ovs的性能瓶颈问题。Vpp是思科一项成熟技术(目前Ovs拥有的功能,Vpp基本都有),通过和Dpdk的结合,在性能方面带来了质的提升。图4.1是思科提供给的一些测试数据,随着routes增加Vpp+Dpdk能做到性能不下降,而Ovs+Dpdk性能会出现急剧下降。

五、展望

实验室中的测试相对简单,从测试到生产环境,还有很多的路需要走。特别是Dpdk作为一个新生事物,Ovs+Dpdk如何跟Openstack,以及nova、neutron的结合、网络复杂以后,各port的mtu值如何来设定、libvirtd中qemu commands格式的xml文件如何转换为适合openstack使用的xml文件格式、Dpdk资源池的大小该设为多少等等我们都做了一些探索性工作,这些工作我们会在后期和大家逐步分享。

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2016-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏轻扬小栈

Pogoplug 破狗 配置源

59940
来自专栏张戈的专栏

安装完Win7之后推荐做的一些设置

前言:不知道写什么,就总结一下我个人安装完成 windows7 之后要做的一些设置吧!以下全文均为个人回忆总结,文章也很冗长,难免有纰漏或者不符合你个人习惯的内...

1.1K140
来自专栏V站

PHP记录蜘蛛脚本

这篇文章主要介绍了PHP记录搜索引擎蜘蛛访问网站足迹的方法,实例分析了针对php记录搜索引擎蜘蛛访问足迹的技巧,涉及数据库的创建及php记录各类常见搜索引擎访问...

27740
来自专栏liulun

基于QT的webkit与ExtJs开发CB/S结构的企业应用管理系统

一:源起 1.何为CB/S的应用程序     C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与...

44080
来自专栏草根博客站长有话说

WordPress 恶意代码的分析和排查方法

自【网站安全的「灯下黑」隐患:账号安全】一文发表后,明月收到了很多站长们有关 WordPress 站点安全的问题咨询,明月总结分析了一下几乎 90%以上都是“恶...

18150
来自专栏达摩兵的技术空间

mac总是卡死折腾记

如果你确认你mac是硬件ok,但是在某些程序运行的时候导致内存飙升,比如最明显吃内存的chrome,这时候可能就是你内存分配的一些问题,近期我就根据apple ...

14740
来自专栏刺客博客

CentOS 7 一键安装桌面环境(可远程RDP连接)

为您的Linux系统运行Windows应用程序。脚本自动帮你安装Wine X64和X86,现在可以在Linux上运行Windows应用程序。例如:Tele...

2.4K50
来自专栏Youngxj

PHP记录蜘蛛脚本

28930
来自专栏Albert陈凯

2018-10-09 lombok 生产环境报错SEVERE: Unable to process Jar entry [module-info.class] from Jar [jar:fil...

老师您好,课程里面用的lombok,感觉很方便,我就在我写的一个测试项目里面也用的这个。在idea里面用tomcat是可以正常运行的。但是打好包以后,放到服务器...

5.2K20
来自专栏YG小书屋

ES存在unassinged shard的调试方式

22830

扫码关注云+社区

领取腾讯云代金券