博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ovs+dpdk bond功能总结
阅读量:4055 次
发布时间:2019-05-25

本文共 2145 字,大约阅读时间需要 7 分钟。

1、ovs支持bond现状

ovs 支持自身bond接口,命令操作如下:

 

ovs-vsctl add-bond br0 dpdkbond dpdk0 dpdk1 -- set Interface dpdk0 type=dpdk -- set Interface dpdk1 type=dpdk

以下说法引用于:的bond部分

 

   物理网卡需要和原网络结构兼容,需要两个port支持bond协议,但现在dpdk接管网卡。一种方案是用ovs 本身的bond, 但是这样对于ovs,看到的还是两个port, 如果加流表规则, 需要加两份,这样不便于控制管理。另一种方案,使用dpdk 的bond,为ovs添加支持dpdk-bond类型port的代码,  类似dpdk, dpdk-vhost-user, tap类型。 这里我们对ovs代码进行修改,支持了dpdk bond类型的port。同时也fix了部分dpdk bond代码的bug。

  上面是美团人员总结,但并没有说具体的修改方案,我在简单分析了ovs代码后,修改部分代码,实现了上面说的另一种方案,但只做实验用,稳定性不做保证。

2、ovs+dpdk bond修改点

 

图1

 

有两种方法:

 

2.1、方法1

  思想是直接在运行ovs前让dpdk就bond接口

  a、修改点是添加ovs参数

  参数的主要目的就是传入dpdk本身支持bond功能的参数,详情参考dpdk参数

在启动ovs前设置参数ovs-vsctl --no-wait set Open_vSwitch . other_config:

dpdk-vdev='eth_bond0,mode=2,slave=0000:81:00.1,slave=0000:82:00.1,xmit_policy=l34'

上面的命令最后做的操作其实就是把“eth_bond0,mode=2,slave=0000:81:00.1,slave=0000:82:00.1,xmit_policy=l34”传给了dpdk库

“dpdk-vdev”是我自己添加的参数,

“eth_bond0,mode=2,slave=0000:81:00.1,slave=0000:82:00.1,xmit_policy=l34”是dpdk的配置参数(详情查看dpdk配置),

上面的命令是把bond口设置成0号port,所以在使用的时候直接使用0号就行了,当然你可以遍历所有port,然后判断它是不是bond,

是的话再检查bond口里的slave pci号也是可以的,做这些操作必须有dpdk相关知识,不然可能看不懂,

b、添加接口时使用命令:

ovs-vsctl add-br br-bond_virt -- set bridge  br-bond_virt datapath_type=netdev

ovs-vsctl add-port br-bond_virt  dpdkb0 -- set Interface  dpdkb0 type=dpdkb

2.2、方法2

让ovs代码添加bond接口,这个主要是调用dpdk的接口bond,bond制定port

 

上面2种方法只是思路,2种方法的共同点是都要添加dpdkb接口类型

  在修改代码时添加了dpdkb的接口类型,它与dpdk类型的接口基本相同,不同的请参考代码

ovs-vsctl add-port br-bond_virt  dpdkb0 -- set Interface dpdkb0 type=dpdkb

  这里的dpdkb0中的0可不是随便的值,0必须和图一中 “Create bonded device eth_bond0 onport 0 in mode 2 on socket 0”

中port 0中的值对应。dpdk类型的接口是以dpdk加上port值组成的,所以我改代码时dpdkb类型的接口也是dpdkb加port值组成。

3、测试

添加成功后,显示如图2

图2

测试拓扑:

    接口A0-----------接口A1

服务器1              服务器B
    接口B0-----------接口B1

测试结果,:

4、代码下载

OVS版本:openvswitch-2.6.1

修改文件路径:/openvswitch-2.6.1/lib/netdev-dpdk.c

(2017-1-18号更新,根据intel的patch做了修改,不需要参数,直接添加dpdkb类型接口就是,ovs默认将dpdk port 0和1作为slave port)(作废)

5、纠正(2017-3-7)

intel的patch可能没有给完整,导致ovs挂掉或是数据发不出去,我还是退回到我自己的版本,

6、备注

上面的2种方法都是我通过dpdk库的bond实现添加到ovs 代码里的,最新的ovs是不是支持这两种,我还没有研究,在这我只是提供思路,若是有同学想直接拿来用,估计有困难。上面说的核心还是在dpdk bond功能的实现,ovs添加网络设备,所以要搞清楚bond的实现,第一是了解dpdk bond(传参数或是调用bond 接口)的实现,第二是了解在ovs里添加网络设备。看代码才是真感情,否则就是耍流氓。

你可能感兴趣的文章
android boot animation
查看>>
Python环境搭建
查看>>
Python3 基础
查看>>
Python3 基础(itcast学习笔记)
查看>>
ubuntu_fastboot
查看>>
ubuntu18.04 Android 7.1.2 编译配置
查看>>
s6e3ha3 amoled屏
查看>>
fts touchscreen
查看>>
gpio pinctrl
查看>>
ubuntu 五笔
查看>>
LVMP 扩容
查看>>
EasyPermissions
查看>>
ubuntu wine
查看>>
开启电量的百分比
查看>>
U9300C 在Linux下的调试
查看>>
Android APP 直接操作内核sysfs
查看>>
ethernet
查看>>
VS2005 wince6.0 environment
查看>>
Wince6.0 目录结构
查看>>
BSP_WINCE_ARM_A8_User_Guide
查看>>