初探VPP
乘势
之前经常听到一句话”适应不能改变的,改变不能适应的“。一直觉得这句话讲得挺好的,直到看到劳东燕写的改动版,”适应应该适应的,改变不该适应的“。如果没有能力去改变社会,至少应该保持自己不被外部世界所改变。共勉~
VPP技术概览
VPP
VPP全称Vector Packet Processing,Cisco 2002年开发的商用代码。2016年2月11号,Linux基金会创建FD.io项目。Cisco将VPP代码的开源版本加入该项目,目前已成为该项目的核心。VPP具备成熟的二三层交换和路由功能,同时graph node+插件化提供了灵活的框架扩展性。

FD.io 矢量数据包处理器使用矢量数据包处理算法。 这个开源的 Linux Foundation 项目是 FD.io 项目的一部分。 FD.io VPP 是一个 2 到 4 层网络堆栈。 它运行在 Linux 用户空间,并能运行在多个商用 CPU 平台上。 FD.io VPP 使用 DPDK 设备驱动程序和库来实现许多第 1 层的功能。
What is VPP? | https://wiki.fd.io/view/VPP/What_is_VPP%3F |
FD.io website | https://fd.io/ |
github | https://github.com/FDio/vpp |
网易轻舟服务网格数据面性能优化实践 | https://blog.csdn.net/NetEaseResearch/article/details/111034660 |
VCL
VCL全称VPP Communication Library,2017年左右正式提交加入VPP工程,目的是打造一个四层的主机栈。VCL自上到下分为三层:LDP、VLS、VCL。LDP(LD_PRELOAD)层通过LD_PRELOAD机制实现对于应用的无侵入加速;VLS(VCL locked sessions)层通过引入session锁来支持session共享的场景,比如多进程(如Nginx)的accept竞争;VCL层主要负责和后端VPP的通信。

VCL和VPP支持分离部署,并通过共享内存实现高效通信。整个用户态协议栈的实现在后端VPP实现,由于前端VCL的实现功能相对简单,这样可以提高Service对CPU的利用率,从而提升性能。
安装部署
行业实践
Using VPP as Envoy’sNetwork Stack | https://wiki.fd.io/images/0/08/Using_vpp_as_envoys_network_stack.pdf |
从通用的协议栈层面来优化Redis性能的实践 | https://blog.csdn.net/qq_40989769/article/details/125458529 |
安装
1、参考官方文档https://fd.io/docs/vpp/v2101/gettingstarted/installing/centos
2、安装8.9系统的仓库配置
url -s https://packagecloud.io/install/repositories/fdio/attic/script.rpm.sh | sudo bash
3、yum --showduplicates list vpp* | expand
4、yum install vpp*
5、systemctl start vpp && systemctl enable vpp
6、vppctl show version
配置
https://github.com/DPDK/dpdk.git
cd usertools
python3 dpdk-devbind.py --status-dev net
Network devices using DPDK-compatible driver
============================================
0000:03:00.0 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=uio_pci_generic unused=ixgbe
0000:03:00.1 '82599ES 10-Gigabit SFI/SFP+ Network Connection 10fb' drv=uio_pci_generic unused=ixgbe
Network devices using kernel driver
===================================
0000:01:00.0 'I350 Gigabit Network Connection 1521' if=eno1 drv=igb unused=uio_pci_generic
0000:01:00.1 'I350 Gigabit Network Connection 1521' if=eno2 drv=igb unused=uio_pci_generic
0000:01:00.2 'I350 Gigabit Network Connection 1521' if=eno3 drv=igb unused=uio_pci_generic
0000:01:00.3 'I350 Gigabit Network Connection 1521' if=eno4 drv=igb unused=uio_pci_generic
0000:84:00.0 'Ethernet Controller X710 for 10GbE SFP+ 1572' if=enp132s0f0 drv=i40e unused=uio_pci_generic
0000:84:00.1 'Ethernet Controller X710 for 10GbE SFP+ 1572' if=enp132s0f1 drv=i40e unused=uio_pci_generic
在物理机上做测试,是真实的网络环境,两个万兆网卡
在vppctl中
先做bond:
create bond mode lacp id 0 load-balance l23
bond add BondEthernet0 eth1
bond add BondEthernet0 eth2
set interface state BondEthernet0 up
set int state eth1 up
set int state eth2 up
然后给bond做trunk:
create sub-interfaces BondEthernet0 149
set interface ip address BondEthernet0.149 [分配的IP]/23
set interface state BondEthernet0.149 up
遇到的问题
1、yun安装报错

解决依赖报错的问题
wget https://ftp.nluug.nl/pub/os/Linux/distr/pclinuxos/pclinuxos/apt/pclinuxos/64bit/RPMS.x86_64/lib64mbedtls12-2.16.8-1pclos2020.x86_64.rpm
wget https://ftp.nluug.nl/pub/os/Linux/distr/pclinuxos/pclinuxos/apt/pclinuxos/64bit/RPMS.x86_64/lib64mbedcrypto3-2.16.8-1pclos2020.x86_64.rpm
wget https://ftp.nluug.nl/pub/os/Linux/distr/pclinuxos/pclinuxos/apt/pclinuxos/64bit/RPMS.x86_64/lib64mbedx509_0-2.16.8-1pclos2020.x86_64.rpm
2、x710网卡无法加到vpp里面

写在最后
上午去参考闺女的家长会,恰逢大雨,回来裤子都湿了半截。先写到这里,更新时断时续,需要多加油了!