• VPP:编译安装及运行


    安装环境

    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详细选项

    1. root@ubuntu:/home/hhd/vpp# make
    2. Make Targets:
    3. install-dep[s] - install software dependencies
    4. wipe - wipe all products of debug build
    5. wipe-release - wipe all products of release build
    6. build - build debug binaries
    7. build-release - build release binaries
    8. build-coverity - build coverity artifacts
    9. rebuild - wipe and build debug binaries
    10. rebuild-release - wipe and build release binaries
    11. run - run debug binary
    12. run-release - run release binary
    13. debug - run debug binary with debugger
    14. debug-release - run release binary with debugger
    15. test - build and run tests
    16. test-help - show help on test framework
    17. run-vat - run vpp-api-test tool
    18. pkg-deb - build DEB packages
    19. pkg-deb-debug - build DEB debug packages
    20. vom-pkg-deb - build vom DEB packages
    21. vom-pkg-deb-debug - build vom DEB debug packages
    22. pkg-rpm - build RPM packages
    23. install-ext-dep[s] - install external development dependencies
    24. ctags - (re)generate ctags database
    25. gtags - (re)generate gtags database
    26. cscope - (re)generate cscope database
    27. checkstyle - check coding style
    28. checkstyle-commit - check commit message format
    29. checkstyle-test - check test framework coding style
    30. fixstyle - fix coding style
    31. doxygen - (re)generate documentation
    32. bootstrap-doxygen - setup Doxygen dependencies
    33. wipe-doxygen - wipe all generated documentation
    34. checkfeaturelist - check FEATURE.yaml according to schema
    35. featurelist - dump feature list in markdown
    36. json-api-files - (re)-generate json api files
    37. json-api-files-debug - (re)-generate json api files for debug target
    38. docs - Build the Sphinx documentation
    39. docs-venv - Build the virtual environment for the Sphinx docs
    40. docs-clean - Remove the generated files from the Sphinx docs
    41. Make Arguments:
    42. V=[0|1] - set build verbosity level
    43. STARTUP_CONF=<path> - startup configuration file
    44. (e.g. /etc/vpp/startup.conf)
    45. STARTUP_DIR=<path> - startup directory (e.g. /etc/vpp)
    46. It also sets STARTUP_CONF if
    47. startup.conf file is present
    48. GDB=<path> - gdb binary to use for debugging
    49. PLATFORM=<name> - target platform. default is vpp
    50. TEST=<filter> - apply filter to test set, see test-help
    51. DPDK_CONFIG=<conf> - add specified dpdk config commands to
    52. autogenerated startup.conf
    53. (e.g. "no-pci" )
    54. SAMPLE_PLUGIN=yes - in addition build/run/debug sample plugin
    55. DISABLED_PLUGINS=<list> - comma separated list of plugins which
    56. should not be loaded
    57. Current Argument Values:
    58. V =
    59. STARTUP_CONF =
    60. STARTUP_DIR = /home/hhd/vpp
    61. GDB = gdb
    62. PLATFORM = vpp
    63. DPDK_VERSION =
    64. DPDK_CONFIG = no-pci
    65. SAMPLE_PLUGIN = no
    66. 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 查看接口是否绑定成功
    在这里插入图片描述

  • 相关阅读:
    数组去重,数组去除空格
    设计模式学习笔记 - 面向对象 - 5.接口和抽象类的区别
    StyleGAN 调整面部表情,让虚拟人脸更生动
    【05】基础知识:React组件实例三大核心属性 - props
    mysql中使用json_arrayagg(),指定数组中元素排序
    泛微入选《金融信创解决方案(第一批)》
    区块链(4):java区块链项目前言
    DC/DC开关电源学习笔记(十)Buck降压电路仿真及工程应用实例
    节点流和处理流
    学习 TensorFlow:构建和训练机器学习模型的利器
  • 原文地址:https://blog.csdn.net/hhd1988/article/details/125457349