ovs+dpdk bond功能总结

1、ovs支持bond现状

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

 

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

以下说法引用于:http://blog.csdn.net/hliyuxin/article/details/52155136的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挂掉或是数据发不出去,我还是退回到我自己的版本,

http://pan.baidu.com/s/1hsOIjdi

6、备注

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

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值