VMware Workstation:16.2.3
OS: Ubuntu 20.04.4 LTS
VPP:2001
链接:
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目录。
其中,
编译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截图:
![]()
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
为了正常工作,不同物理介质关联层接口(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进行安装)。
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。
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 查看接口是否绑定成功