前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ovs+Dpdk简单实践

Ovs+Dpdk简单实践

作者头像
SDNLAB
发布于 2018-04-02 06:36:35
发布于 2018-04-02 06:36:35
3K00
代码可运行
举报
文章被收录于专栏:SDNLABSDNLAB
运行总次数:0
代码可运行

一、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命令的相关网口部分如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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资源池的大小该设为多少等等我们都做了一些探索性工作,这些工作我们会在后期和大家逐步分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于K8s的SR-IOV网络实践
在传统的虚拟化中,虚拟机的网卡通常是通过桥接(Bridge或OVS)的方式,因为这种方式最方便,也最简单,但是这样做最大的问题在于性能。本文讲的SR-IOV在2010年左右由Intel提出,但是随着容器技术的推广,intel官方也给出了SR-IOV技术在容器中使用的开源组件,例如:sriov-cni和sriov-device-plugin等,所以SR-IOV也开始在容器领域得到的大量使用。
zouyee
2022/05/25
4K1
基于K8s的SR-IOV网络实践
OVS-DPDK
若上面的操作是在vmware上操作,需要加上上面额外的参数pmu=off,为了规避vmware的bug。若不加会报下面的错误:
后端云
2022/11/25
1.8K0
OVS-DPDK
这就是你日日夜夜想要的docker!!!---------Docker四种网络模式解析
我们安装完Docker时,会发现系统已经自动创建了一个docker0网卡和其他Docker网络模式
不吃小白菜
2020/09/24
3870
这就是你日日夜夜想要的docker!!!---------Docker四种网络模式解析
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
笔记内容:CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统 笔记日期:2018-03-07
端碗吹水
2020/09/23
4.1K0
CentOS7上安装并配置KVM,以及通过KVM安装CentOS系统
Docker-网络&跨主机通信
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/12/19
1380
Docker-网络&跨主机通信
社区实践|基于Kube-OVN多租户虚拟机+容器隔离
随Kubernetes的普及,容器环境对于大多数业务已经足够,但某些特殊业务涉及对内核的修改,还需要运行在虚拟机里,K8s将容器和虚拟机统一管理是将来的趋势。
灵雀云
2024/05/14
5121
社区实践|基于Kube-OVN多租户虚拟机+容器隔离
docker+ovs+pipework配置容器ip互通
(可以查看ip,命令ip a。以192.168.100.122和192.168.100.118为例)
千羽
2023/08/28
3010
docker+ovs+pipework配置容器ip互通
KVM部署篇
KVM 介绍 KVM是以色列初创公司Qumranet开发,2008年9月RedHat公司收购了Qumranet KVM是Linux内核的一个模块,它把Linux内核变成了一个Hypervisor KVM是完全开源的,RedHat基于KVM的虚拟化解决方案叫做RHEV KVM在Linux操作系统里面以进程的形式出现,由标准的Linux调度程序进行调度,这使得KVM能够使用Linux内核的已有功能,只有一个KVM内核模块还不能实现虚拟化的全部功能,就好比操作系统只有内核还不能成为一个完整的操作系统一样 QEMU
老七Linux
2018/05/31
1.6K0
如何实现oVirt与Tungsten Fabric的集成
ovirt 4.2.6.4-1.el7 tungsten-fabric r5.0.1 centos7.5
Tungsten Fabric
2020/10/22
7380
如何实现oVirt与Tungsten Fabric的集成
Kubernetes网络故障排查实战之旅
在开发Kata/remote-hypervisor(也称为peer-pods)方案时,我遇到了一个问题,即Kubernetes pod IP在工作节点上无法访问。在本博客中,我将描述Kubernetes网络故障排查过程,希望对读者有帮助。
云云众生s
2024/03/27
2680
Kubernetes网络故障排查实战之旅
Docker网络详解
Docker 网络 Docker网络原理 每启动一个Docker 容器,docker 将给docker 容器分配一个ip 只要启动了docker 就会有一个docker0 网络使用的是桥接模式,ev
PayneWu
2020/12/18
4860
Docker网络详解
KVM简介,安装及常见使用详解
查看状态操作结果,如Active: active (running),说明运行情况良好
用户8851537
2021/07/21
3.5K0
PVE下使用OpenvSwitch实现网络绑定聚合负载均衡
PVE默认使用Linux自带的网桥提供网络交换服务,在划分vlan的时候还需要修改IP路由表文件,配置稍显繁琐。
用户9314062
2022/05/20
8.9K0
PVE下使用OpenvSwitch实现网络绑定聚合负载均衡
VMware-使用VMware在本地搭建多个CentOS虚机
下载地址: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-14.0.0-6661328.exe
小小工匠
2021/08/17
1.1K0
Docker容器网络
Docker在安装后自动提供3种网络,可以使用``docker network ls`命令查看
Alone-林
2022/08/23
5280
Docker容器网络
macvtap实践教程
macvtap是虚拟机网络虚拟化常用的一种技术,当然容器也可以用。MACVTAP 的实现基于传统的 MACVLAN。
sealyun
2019/07/25
6K0
KubeVirt网络源码分析(2)
对上篇分析的是老版本的KubeVirt的网络源码,这篇继续上篇,对目前的最新版本v0.53再做一次源码分析,作为对上篇的补充。
后端云
2022/06/09
8470
Docker实践之09-高级网络配置
当Docker启动时,会自动在主机上创建一个名为docker0虚拟网桥,实际上是Linux的一个bridge,可以理解为一个软件交换机,它会在挂载到它的网口之间进行转发。 同时,Docker随机分配一个本地未占用的私有网段中的一个地址给docker0接口。比如典型的172.17.0.1,掩码为255.255.0.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。 当创建一个Docker容器的时候,同时会创建了一对veth pair接口(当数据包发送到一个接口时,另外一个接口也可以收到相同的数据包)。这对接口一端在容器内,即一端在本地并被挂载到docker0网桥,名称以veth开头(例如vethb305ad8)。通过这种方式,主机可以跟容器通信,容器之间也可以相互通信。 Docker创建了在主机和所有容器之间一个虚拟共享网络。
编程随笔
2022/09/16
1.4K0
Docker实践之09-高级网络配置
关于docker环境运行zabbix时,你可能不知道的事
关于docker环境运行zabbix时,可以快速的部署一套zabbix环境,不管是学习docker还是学习zabbix,都是可以作为一个实际项目来进行测试和练习,但是如果对docker的网络模式不熟悉,可能会遇到一些坑,本文就一些你可能不知道的事进行了测试,与试水,希望能给与大家帮助
用户6641876
2020/02/19
3.9K0
CNI 小精灵 GENIE
想同时使用多个CNI? 想往容器里塞多张网卡?试试这款CNI插件 CNI-Genie genie可以引用CNI插件,包含默认CNI插件如(bridge macvlan ipvlan loopback)
sealyun
2019/09/12
1.6K0
CNI 小精灵 GENIE
相关推荐
基于K8s的SR-IOV网络实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档