VPP:编译安装及运行

本文详细介绍了在Ubuntu 20.04上使用VMware Workstation和VPP 2001版本的编译过程,包括安装依赖、编译DPDK获取igb_uio.ko,以及如何配置DPDK驱动、加载和绑定网卡,最后配置VPP以支持DPDK并启动。
摘要由CSDN通过智能技术生成

安装环境

VMware Workstation:16.2.3

OS:    Ubuntu 20.04.4 LTS

VPP:2001

  • 系统驱动如果支持MSI-X,就无法使用驱动uio_pci_generic,必须使用vfio-pci。
  • 在没有IOMMU的系统上,vfio驱动也能被用到 内核4.15.0-33-generic kernel (Ubuntu 18.04)非iommu模式下。

下载 && 编译

 链接:
gerrit:https://gerrit.fd.io/r/admin/repos/vpp
GitHub:https://github.com/FDio/vpp

#例如下载2001分支

git clone -b stable/2001 https://github.com/FDio/vpp.git

 官方文档链接

# if vpp<08.10
make install-dep                                      ----安装依赖
make bootstrap
make build                                               ----debug版本

# or `make build-release`                        ----release版本
 
# vpp 08.10+ (cmake)
make install-dep                                     ----安装依赖
make install-ext-deps                            
make build                                              ----debug版本

# or `make build-release`                       ----release版本
 
#make pkg-deb                                      ----用于构建vpp的deb安装包,可以不构建

make详细选项

root@ubuntu:/home/hhd/vpp# make 
Make Targets:
 install-dep[s]       - install software dependencies
 wipe                 - wipe all products of debug build 
 wipe-release         - wipe all products of release build 
 build                - build debug binaries
 build-release        - build release binaries
 build-coverity       - build coverity artifacts
 rebuild              - wipe and build debug binaries
 rebuild-release      - wipe and build release binaries
 run                  - run debug binary
 run-release          - run release binary
 debug                - run debug binary with debugger
 debug-release        - run release binary with debugger
 test                 - build and run tests
 test-help            - show help on test framework
 run-vat              - run vpp-api-test tool
 pkg-deb              - build DEB packages
 pkg-deb-debug        - build DEB debug packages
 vom-pkg-deb          - build vom DEB packages
 vom-pkg-deb-debug    - build vom DEB debug packages
 pkg-rpm              - build RPM packages
 install-ext-dep[s]   - install external development dependencies
 ctags                - (re)generate ctags database
 gtags                - (re)generate gtags database
 cscope               - (re)generate cscope database
 checkstyle           - check coding style
 checkstyle-commit    - check commit message format
 checkstyle-test      - check test framework coding style
 fixstyle             - fix coding style
 doxygen              - (re)generate documentation
 bootstrap-doxygen    - setup Doxygen dependencies
 wipe-doxygen         - wipe all generated documentation
 checkfeaturelist     - check FEATURE.yaml according to schema
 featurelist          - dump feature list in markdown
 json-api-files       - (re)-generate json api files
 json-api-files-debug - (re)-generate json api files for debug target
 docs                 - Build the Sphinx documentation
 docs-venv            - Build the virtual environment for the Sphinx docs
 docs-clean           - Remove the generated files from the Sphinx docs

Make Arguments:
 V=[0|1]                  - set build verbosity level
 STARTUP_CONF=<path>      - startup configuration file
                            (e.g. /etc/vpp/startup.conf)
 STARTUP_DIR=<path>       - startup directory (e.g. /etc/vpp)
                            It also sets STARTUP_CONF if
                            startup.conf file is present
 GDB=<path>               - gdb binary to use for debugging
 PLATFORM=<name>          - target platform. default is vpp
 TEST=<filter>            - apply filter to test set, see test-help
 DPDK_CONFIG=<conf>       - add specified dpdk config commands to
                            autogenerated startup.conf
                            (e.g. "no-pci" )
 SAMPLE_PLUGIN=yes        - in addition build/run/debug sample plugin
 DISABLED_PLUGINS=<list>  - comma separated list of plugins which
                            should not be loaded

Current Argument Values:
 V                 = 
 STARTUP_CONF      = 
 STARTUP_DIR       = /home/hhd/vpp
 GDB               = gdb
 PLATFORM          = vpp
 DPDK_VERSION      = 
 DPDK_CONFIG       = no-pci
 SAMPLE_PLUGIN     = no
 DISABLED_PLUGINS  = 

        本文采用20.01版本VPP编译,目前编译操作方式也适用于版本20.05,最后一步make build编译好DEBUG版本后,可以在/root/vpp/build-root下面看到生成目录install-vpp_debug-native/vpp以及build-vpp_debug-native/vpp目录。

其中,

  • 第一个目录install-vpp_debug-native/vpp为运行安装文件目录,所有编译好的运行及配置等文件已准备好。
  • 第二个目录build-vpp_debug-native/vpp为编译时运行目录,里面很多编译过程中采用的文件。

扩展--编译dpdk && 加载

编译

        编译dpdk可以采用以下两种方法:

        方法一:

        1、vpp 2001版本没有发现dpdk编译的IGB_UIO.ko文件,需要下载dpdk版本为19.08,编译后可得到igb_uio.ko文件。

       2、可通过修改build/external/packages/dpdk.mk(vpp目录)中的dpdk_version,运行make build自动下载dpdk代码;

修改后的dpdk.mk截图:

  1.         3、运行make build后,代码包放在build/external/downloads,解压dpdk源码包,进入dpdk文件夹;

export RTE_SDK=`pwd`

export RTE_TARTGET=x86_64-native-linuxapp-gcc

make config T=x86_64-native-linuxapp-gcc

make

        4、编译

        编译好的igb_uio.ko文件在build/kmod/文件夹

vpp/build/external/downloads/dpdk-19.08/build/kmod/

        

        方法二:

        1、打开以下文件

build/external/downloads/dpdk-19.08/config/common_base

        2、修改文件build/external/packages/dpdk.mk

         3、编译好的igb_uio.ko文件在build/kmod/文件夹

 vpp/build/external/downloads/dpdk-19.08/build/kmod/

加载

        1、加载前确认

        使用命令lsmod | grep uio确认设备上是否已加载过,若没有回显,说明没有加载过。

        2、加载

modprobe uio

insmod build/kmod/igb_uio.ko

 查看网卡状态

        在目录build-root/build-vpp-native/external/dpdk-19.08/usertools中包含常用dpdk的工具

        ./dpdk-devbind.py --status 查看接口状态

        可以使用以下命令绑定网卡到dpdk,也可以不绑定(在后面vpp的startup.conf文件里配置)。

 ./dpdk-devbind.py --bind=igb_uio.ko 接口名称

 

配置运行

关闭待接管网卡

         关闭计划用dpdk接管的网卡接口,并查询其pci端口号,可以通过lspci |grep Ethernet查看。此时需要确认本机物理网卡或虚拟网卡为DPDK支持类型,查询网址DPDK

ifconfig ens34 down

安装NIC网卡驱动模块

        为了正常工作,不同物理介质关联层接口(PMD)可能需要不同驱动程序。取决于正在使用的PMD,同时加载对应的内核驱动并绑定网络端口。这里网卡可加载模块驱动类型包含uio_pci_generic、igb_uio、vfio-pci等。

注意:

  • 作为uio_pci_generic替代方案,DPDK包含igb_uio模块。对于一些不支持传统中断的设备,例如虚拟化功能(VF)设备,可能需要使用igb_uio來代替uio_pci_generic。

  • 如果启用UEFI安全引导,则Linux可能会禁止在系统上使用UIO。因此,由DPDK使用的设备应绑定到vfio-pci内核模块,而不是使用igb_uio或uio_pci_generic。 VFIO内核模块自Linux内核3.6.0版以来已包含在内核中,通常是默认存在的,请查阅您的发行版文档以确保是这样的。此外,要使用VFIO,内核和BIOS必须支持并配置为使用IO虚拟化(如Intel®VT-d)

        读者可根据实际情况选用uio_pci_generic/igb_uio/vfio-pci等。(如果igb_uio,需要单独编译dpdk获取igb_uio.ko,并采用命令insmod igb_uio.ko进行安装)。

配置vpp

        1、查看cpu核数量

       2、配置startup.conf

vim build-root/install-vpp_debug-native/vpp/etc/vpp/startup.conf(cpu核足够的情况下,如下配置)

unix {
#  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen 0.0.0.0:5002
#  gid vpp
}

cpu {
    main-core 0
    workers 1
}

dpdk{
    dev default{
        num-rx-queues 3
        num-tx-queues 3
        num-rx-desc 512
        num-tx-desc 512
        vlan-strip-offload on
    }
    dev 0000:04:00.0     #根据命令lspci |grep Ethernetpci查看接口修改
    dev 0000:05:00.0
    uio-driver igb_uio   #设置网卡驱动类型,auto的话,vpp会根据情况自动判断并接管网卡
    socket-mem 2048,2048
    no-tx-checksum-offload
}

        说明:

       uio-driver igb_uio    这里配置了igb_uio后,启动vpp会自动绑定网卡到dpdk。

启动vpp

配置大页

1、cat /proc/meminfo 查看是否配置大页

        配置2G大页 

echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

启动

        在vpp/build-root/install-vpp_debug-native/vpp/bin目录下执行

./vpp -c …/etc/vpp/startup.conf

ps -aux | grep vpp 查看
在这里插入图片描述

 telnet 0 5002进入vpp或者./vppctl进入控制台
在这里插入图片描述
show int 查看接口是否绑定成功
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值