VPP 是一个开源的软件项目,由 Cisco 发起,用于高性能网络数据包处理。它提供了一个模块化的、可扩展的网络数据平面框架,支持各种网络功能虚拟化(NFV)和软件定义网络(SDN)应用。VPP 使用向量化和并行处理技术,能够在普通的通用处理器上实现高吞吐量和低延迟的数据包处理。
1. 编译
分支切换成stable/2302,否则由于libc的原因,无法在centos7上编译。
git checkout stable/2302
打上相关patch
1.1. llvm编译过程
extra库中的xdp需要使用到llvm编译器,其编译过程如下:
llvm编译过程
yum install -y epel-release
yum groupinstall -y "Development tools"
yum install -y elfutils-libelf-devel cmake3 git bison flex ncurses-devel
yum install -y devtoolset-8
git clone ccc://github.com/llvm/llvm-project.git
source /opt/rh/devtoolset-8/enable
cd llvm-project
mkdir build
cd build
cmake3 -DLLVM_ENABLE_PROJECTS=clang -G "Unix Makefiles" ../llvm -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release
make -j
make install
1.2. MLX驱动
如果需要mlx驱动的话,需要编译mlx相关的驱动
1.3. Vpp编译
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH
make install-dep
make install-ext-deps DPDK_MLX5_PMD=y DPDK_MLX4_PMD=n DPDK_MLX_IBV_LINK=dlopen
make build vpp_uses_dpdk_mlx5_pmd=yes DPDK_MLX_IBV_LINK=dlopen
#RPM包
make pkg-rpm vpp_uses_dpdk_mlx5_pmd=yes DPDK_MLX_IBV_LINK=dlopen -j4
make install-ext-deps会去下载以下外部依赖源码包。
如(meson、xdp-tools、rdma-core、quickly、dpdk)
1.4. 问题列表
问题1: 会有个getrandom的依赖问题,与libc相关
解决: spec中加 . /opt/rh/devtoolset-9/enable
问题2:类型不对, error: implicit truncation from 'int' to a one-bit wide bit-field changes value from 1 to -1
解决: 将i32替换成u32
问题3:recvmmsg重复定义
+#ifndef _GNU_SOURCE
问题4: rpm打包时会遇到dwarf5与rpmbuild的dwarf4不匹配问题,是因为vpp编译使用的是clang工具,clang工具默认是使用dwarf5,而gcc默认的是dwarf4.
spec中加
+export CFLAGS="-g -gdwarf-4"
+export CXXFLAGS="-g -gdwarf-4"
+export LDFLAGS="-Wl,--build-id"
2. 安装
rpm -ivh vpp-selinux-policy.rpm
rpm -ivh vpp-lib-xxx.rpm
rpm -ivh vpp-xx.rpm
rpm -ivh vpp-plugins-xxx.rpm
3. 配置启动
相应的插件对应的相应的配置。
vppctl命令:FD.io VPP: Interface
vim /etc/vpp/startup.conf
#!/bin/bash
#bind nic
modprobe uio_pci_generic
dpdk-devbind.py -b uio_pci_generic 0000:03:00.0
#set memory
#/etc/sysctl.d/80-vpp.conf
#modify startup.conf
#run
vpp -c $PWD/startup_vm.conf