安装环境
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截图:
- 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 查看接口是否绑定成功