BlueField-2 DPU 安装自定义 ovs-dpdk

DPU 安装 ovs-dpdk

1、查找对应版本的dpdk和ovs

DPU上原本的ovs和dpdk版本如下:

root@localhost:~# ovs-vswitchd --version
ovs-vswitchd (Open vSwitch) 2.17.2-24a81c8
MLNX_DPDK 20.11.6.1.5

!!! 选择 ovs 版本为 2.17.2 ,但是经尝试后发现DPU自带的MLNX_DPDK 20.11.6.1.5 无法编译 ovs,因此选择编译新版本的dpdk-21.11.6

2、编译dpdk

# 下载源码,也可以上传
wget http://fast.dpdk.org/rel/dpdk-21.11.6.tar.gz
tar -zxvf dpdk-21.11.6.tar.xz
cd dpdk-stable-21.11.6
  • 问题: DPU (BF-2) 上安装dpdk有一个驱动问题,解决方式如下:
vim dpdk-stable-21.11.6/drivers/regex/octeontx2/meson.build

lib = cc.find_library('rxp_compiler', required: false)

改为 lib = cc.find_library('rxpcompiler', required: false)

  • 编译安装
export DPDK_DIR=$PWD
export DPDK_BUILD=$DPDK_DIR/build
meson build
ninja -C build
ninja -C build install
ldconfig

安装好的版本可能和默认版本冲突,修改方式如下:

  • 使用 DPDK-21.11.6:
# 先移除之前的pkgconfig路径(/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig),再导入当前的路径
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/aarch64-linux-gnu/pkgconfig
ldconfig
  • 使用默认版本dpdk:
# 先移除之前的pkgconfig路径(/usr/local/lib/aarch64-linux-gnu/pkgconfig),再导入当前的路径
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/mellanox/dpdk/lib/aarch64-linux-gnu/pkgconfig
ldconfig
  • 查看当前dpdk版本:
pkg-config --modversion libdpdk

2 编译ovs-dpdk源码

# 自定义安装路径
mkdir -p ovs/etc ovs/usr ovs/var

# 下载源码,也可以上传
wget https://www.openvswitch.org/releases/openvswitch-2.17.2.tar.gz
tar -zxvf openvswitch-2.17.2.tar.gz
cd openvswitch-2.17.2



# 配置自定义目录及相关参数, /path/修改为自己的ovs路径
./configure \
--prefix=/path/ovs/usr \
--localstatedir=/path/ovs/var \
--sysconfdir=/path/ovs/etc --with-dpdk=static

# 编译
make

# 安装,安装在configure配置的目录中,后续运行的命令也在这些目录中
make install
  • 查看大页,记得分配
grep HugePages_ /proc/meminfo
  • 设置并开启ovs-dpdk
ovs/usr/share/openvswitch/scripts/ovs-ctl --system-id=random start
ovs/usr/bin/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true
ovs/usr/bin/ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=1024
  • 查询版本及配置
ovs/usr/sbin/ovs-vswitchd --version
ovs/usr/bin/ovs-vsctl get Open_vSwitch . dpdk_version
# 确认是否初始化ovs-dpdk
ovs/usr/bin/ovs-vsctl get Open_vSwitch . dpdk_initialized

3 ovs-dpdk和原ovs冲突问题

  • 新的ovs-dpdk一旦网桥配置后,原先的ovs就会失效,可能是数据库没有配置正确

  • 还原方式

# 关闭新ovs-dpdk的vswitchd
ovs/usr/share/openvswitch/scripts/ovs-ctl stop
# 重启原先的ovs
/etc/init.d/openvswitch-switch restart
  • 关闭原先的ovs,使用ovs-dpdk
# 停止原先的ovs服务
/etc/init.d/openvswitch-switch stop
# 开启ovs-dpdk
ovs/usr/share/openvswitch/scripts/ovs-ctl --system-id=random start
  • 重要:ovs-dpdk启动和配置的命令和方式可能有误,有新的或者正确的方式请添加或修改以上内容

4 更新配置ovs-dpdk命令

  • 为保证可用先确保配置为flow-restore-wait="false" ,或者不存在这个配置,暂时不知原因
root@localhost:/home/ubuntu/zhaoyi/ovs_workspace/ovs/usr/share/openvswitch/scripts# ../../../bin/ovs-vsctl list open-vswitch
_uuid               : 966d2b68-9402-429d-af25-13c4ad104ac0
bridges             : [e32d6bff-e555-419a-86cf-798095cf4aaa]
cur_cfg             : 60
datapath_types      : [netdev, system]
datapaths           : {}
db_version          : "8.3.0"
dpdk_initialized    : true
dpdk_version        : "DPDK 21.11.6"
external_ids        : {hostname=localhost.localdomain, rundir="/home/ubuntu/zhaoyi/ovs_workspace/ovs/var/run/openvswitch", system-id="fa52701d-06df-4513-9b1e-66083eca1a3b"}
iface_types         : [bareudp, dpdk, dpdkvhostuser, dpdkvhostuserclient, erspan, geneve, gre, gtpu, internal, ip6erspan, ip6gre, lisp, patch, stt, system, tap, vxlan]
manager_options     : []
next_cfg            : 60
other_config        : {dpdk-extra="-a 0000:03:00.1,representor=[0,65535],dv_flow_en=1,dv_xmeta_en=1,sys_mem_en=1", dpdk-init="true", dpdk-socket-mem="1024", flow-restore-wait="false", hw-offload="true"}
ovs_version         : "2.17.2"
ssl                 : []
statistics          : {}
system_type         : Ubuntu
system_version      : "20.04-focal"
  • 配置ovs-dpdk及网桥
# 查看ovs配置
./ovs-vsctl list open-vswitch

# 设置ovs配置
./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 set Open_vSwitch . other_config:dpdk-extra="-a 0000:03:00.1,representor=[0,65535],dv_flow_en=1,dv_xmeta_en=1,sys_mem_en=1"

# 创建网桥
./ovs-vsctl --no-wait add-br ovsbr1 -- set bridge ovsbr1 datapath_type=netdev

# 添加p1
./ovs-vsctl add-port ovsbr1 p1 -- set Interface p1 type=dpdk options:dpdk-devargs=0000:03:00.1

# 添加pf1hpf
./ovs-vsctl add-port ovsbr1 pf1hpf -- set Interface pf1hpf type=dpdk options:dpdk-devargs=0000:03:00.1,representor=[65535]

# 重启ovs  (restart不太好用)
# 先关闭
./ovs-ctl stop
# 再开启(需要开启两次,不知道原因)
# system-id可以使用--system-id=random代替
./ovs-ctl start --system-id="fa52701d-06df-4513-9b1e-66083eca1a3b"
./ovs-ctl start --system-id="fa52701d-06df-4513-9b1e-66083eca1a3b"

修改ovs-dpdk代码并重新编译运行

  • 修改代码,添加一段log,vswitchd/ovs-vswitchd.c中的main函数中,使用VLOG_INFO()函数
int
main(int argc, char *argv[])
{ 

            ......

    while (!exiting) {
        VLOG_INFO("main_ovs_info");
        OVS_USDT_PROBE(main, run_start);
        memory_run();

            ......

    return 0;
}
  • 卸载ovs-dpdk
cd openvswitch-2.17.2
make uninstall
  • 编译并安装ovs-dpdk
make
make install
  • 查询log输出
cat /home/ubuntu/zhaoyi/ovs_workspace/ovs/var/log/openvswitch/ovs-vswitchd.log | grep main_ovs_info
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值