1.dpdk的安装
step1 准备软件
本文使用的是dpdk21.11。在官网下载dpdk21.11
step2 安装dpdk
tar -xf <dpdk-21.11.tar.gz>
meson build
ninja -C build
ninja -C build install
编译过程中会出现的问题:提示找不到rxp-xompiler.h头文件
出现这个问题的原因: librxp_compiler.so库存在系统中,dpdk找到了这个库,默认在编译过程中支持这个库。但是社区办并不支持,导致报错。
解决办法: 删除librxp_compiler.so
// 备份这个文件
cp librxp_compiler.so /<dir>
// 删除这个文件
rm -rf librxp_compiler.so
2.编译ovs
step1 准备
openvswitch-2.17.5版本
修改dpdk动态库连接export PKG_CONFIG_PATH=/usr/local/lib/aarch64-linux-gnu
step2 编译
cd openvswitch
// 这一步可以选择安装位置,如果没有--prefix=/usr/local/ovs-2.17.5/ 会自动编译到/usr/local中
./configure --prefix=/usr/local/ovs-2.17.5/ --with-dpdk=yes
make -j 7
make install
step3 删除原来的ovs-dpdk
这里只删除/usr/bin
下的ovs-*文件。并将/usr/local/ovs-2.17.5/bin
软连接到/usr/bin
下:
ln -s -f <要软连接的文件> <目的目录>
将/usr/local/ovs-2.17.5/share/openvswitch/scrip/ovs-ctl和ovs-bin
软连接到/usr/bin
下:
step4 启动ovs
ovs-ctl start
注意:ovs-serverdb和ovs-vswitch都要启动成功 否则为启动失败。
3.配置ovs-dpdk
step1 检查ovs-dpdk是否安装成功
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs-vsctl --no-wait set Open_vSwitch . other_config:hw-offload=true
ovs-vsctl list open_vswitch:
root@localhost:/usr/local/ovs-2.17.5/bin# ovs-vsctl list open_vswitch
_uuid : 02479fd2-e240-4dc1-a8e3-ac6021fe94a9
bridges : [1510d24a-9337-4fd6-a5e3-abe55538163d, 5fcdeb5d-a96e-434d-87c6-eebc0acd1009]
cur_cfg : 28
datapath_types : [netdev, system]
datapaths : {}
db_version : "8.3.0"
dpdk_initialized : true
dpdk_version : "DPDK 21.11.0"
external_ids : {hostname=localhost.localdomain, rundir="/usr/local/ovs-2.17.5/var/run/openvswitch", system-id=""}
iface_types : [bareudp, dpdk, dpdkvhostuser, dpdkvhostuserclient, erspan, geneve, gre, gtpu, internal, ip6erspan, ip6gre, lisp, patch, stt, system, tap, vxlan]
manager_options : []
next_cfg : 28
other_config : {dpdk-extra="-a 0000:01:00.0,representor=[0,65535],dv_flow_en=1,dv_esw_en=1,dv_xmeta_en=1 -a 0000:01:00.0,representor=[0,65535],dv_flow_en=1,dv_esw_en=1,dv_xmeta_en=1", dpdk-init="true", hw-offload="true"}
ovs_version : "2.17.5"
ssl : []
statistics : {}
system_type : Ubuntu
system_version : "20.04-focal"
出现上述表示ovs-dpdk安装成功
step2 配置dpdk网桥
ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-extra="-a 0000:01:00.0,representor=[0,65535],dv_flow_en=1,dv_esw_en=1,dv_xmeta_en=1 -a 0000:01:00.0,representor=[0,65535],dv_flow_en=1,dv_esw_en=1,dv_xmeta_en=1"
// 配置第一网桥
ovs-vsctl --no-wait add-br ovs_dpdk_br0 -- set bridge ovs_dpdk_br1 datapath_type=netdev
ovs-vsctl --no-wait add-port ovs_dpdk_br0 dpdk1 -- set Interface dpdk1 type=dpdk -- set Interface dpdk1 options:dpdk-devargs=0000:03:00.0
ovs-vsctl --no-wait add-port ovs_dpdk_br0 dpdk2-- set Interface dpdk2 type=dpdk -- set Interface dpdk2 options:dpdk-devargs=0000:03:00.0,representor=[0,65535]
// 配置第二个网桥
ovs-vsctl --no-wait add-br ovs_dpdk_br1 -- set bridge ovs_dpdk_br1 datapath_type=netdev
ovs-vsctl --no-wait add-port ovs_dpdk_br1 dpdk2 -- set Interface dpdk2 type=dpdk -- set Interface dpdk2 options:dpdk-devargs=0000:03:00.1
ovs-vsctl --no-wait add-port ovs_dpdk_br1 dpdk3 -- set Interface dpdk3 type=dpdk -- set Interface dpdk3 options:dpdk-devargs=0000:03:00.1,representor=[0,65535]
// 配置成功的网桥如下
root@localhost:/usr/local/ovs-2.17.5/bin# ovs-vsctl show
02479fd2-e240-4dc1-a8e3-ac6021fe94a9
Bridge ovs_dpdk_br0
datapath_type: netdev
Port pf
Interface pf
type: dpdk
options: {dpdk-devargs="0000:03:00.0"}
Port dpdk1
Interface dpdk1
type: dpdk
options: {dpdk-devargs="0000:03:00.0,representor=[0,65535]"}
Port ovs_dpdk_br0
Interface ovs_dpdk_br0
type: internal
Bridge ovs_dpdk_br1
datapath_type: netdev
Port dpdk3
Interface dpdk3
type: dpdk
options: {dpdk-devargs="0000:03:00.1,representor=[0,65535]"}
Port ovs_dpdk_br1
Interface ovs_dpdk_br1
type: internal
Port dpdk2
Interface dpdk2
type: dpdk
options: {dpdk-devargs="0000:03:00.1"}
ovs_version: "2.17.5"
step3 在主机将两个BF2网卡直通到两个namespace/vm中
配置网卡ip,可以相互ping通即可。