VPP安装

简介: VPP安装

前言


此系列文章是对自己工作中使用vpp 的总结和从新学习。从毕业到现在也工作好几年了。我开始接触VPP大约是,在2018年开始接触DPDK+VPP 的方案。当时工作的时候自己对于VPP也没有深入学习,但是是对DPDK比较感兴趣,业务大部分时间都去研究DPDK 了和玩游戏了。自己对于VPP的理解还仅限于VPP充当DPDK的协议栈。VPP是面向数据面的,对数据本身的操作。中途换工作,新工作不需要这个方案,自己也就断了对于DPDK和VPP的学习。大约2年的时间没有在研究过这个方案。随着年龄的增长,有时候回顾近几年的工作经、历,我有时候感觉到迷茫.恐惧。我感到了这几年我颓废了,我应该利用业余时间在研究点什么。我决定还是深入研究研究DPDK 和VPP 。


一、VPP是什么


示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。


二、VPP安装


2.1 环境

选择ubuntu 版本,也是看到centos 未来的趋势向收费方向走,还是后期使用ubuntu.

**ubuntu **: Ubuntu 9.4.0-1ubuntu1~20.04.1

vpp: stable/2206

下载地址:vpp下载地址


三. VPP 安装


3.1 使用脚本安装

# ./extras/vagrant/build.sh
# make

结果


3.2 查询DPDK支持的网卡类型

关闭计划用dpdk接管的网卡接口,并查询其pci端口号,可以通过lspci |grep Ethernet查看。此时需要确认本机物理网卡或虚拟网卡为DPDK支持类型,查询网址查询


3.3 选择NIC网卡驱动模块

为了正常工作,不同物理介质关联层接口(PMD)可能需要不同驱动程序。取决正在使用的PMD,同时加载对应的内核驱动并绑定网络端口。这里网卡可加载模块驱动类型包含uio_pci_generic、igb_uio、vfio-pci等。

目前内核基本都自带vfio-pci或者uio_pci_generic驱动,可满足基本需求,但是igb_uio也有自己的特点,而且从2101版本开始igb_uio被移除了,vpp 2206 版本可以使用uio_pci_generic,VPP 能够正常运行。


注意


  • 作为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)


VPP1801

该版本还需要使用igb_uio 驱动。vpp利用dpdk收包,需要编译igb_uio这个网卡驱动。


两种方式编译igb_uio驱动:

方法一 :下载VPP对应的DPDK版本,然后编译出igb_uio.ko 然后加载上驱动。

方式二 :是修改配置文件,让vpp编译安装dpdk时编译igb_uio驱动。

cd /home/vpp-20.09/build/external/packages
vi dpdk.mk
# 找到 $(call set,RTE_EAL_IGB_UIO,n)
# 把 n 改成 y 并保存退出

推荐使用方法一,这样把dpdk 和vpp 分开编译。效率高。


3.4 加载网卡驱动

因为虚拟机的系统内核为3.10,内置vfio,所以直接加载vfio-pci。读者可根据实际情况选用uio_pci_generic/igb_uio/vfio-pci等。(如果igb_uio,需要单独编译dpdk获取igb_uio.ko,并采用命令insmod igb_uio.ko进行安装)

#0.启动对应驱动模块,此处选用vfio
modprobe vfio
modprobe vfio-pci
#modprobe igb-uio
#modprobe uio
#modprobe uio_pci_generic
#1.如果采用vfio,启动非安全NO IOMMU模式(仅在系统没有IOMMU时) ,启动该选项VPP可自动接管网卡显示在vppctl中
echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode

3.5配置静态大页

1.配置大页
# 分配巨页1024*2M=2G
echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages  // 大页个数
# 后面方法也可行sysctl -w vm.nr_hugepages=2048
# 查看大页分配数目
cat /proc/meminfo| grep Huge
  1. 配置静态1G大页
    配置1G大页只能在系统启动的时候开辟。避免后期1G大业开辟错误
vim /etc/default/grub
# 修改 GRUB_CMDLINE_LINUX 这一行并保存退出
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet default_hugepagesz=1G hugepagesz=1G hugepages=1"
# 在尾部添加了 default_hugepagesz(默认大页大小) hugepagesz(大页大小) hugepages(大页个数)
# 这里是设置了1个大页内存 大页内存大小是1G linux还支持2M的大页
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
# 通过/proc/meminfo 查看大页内存情况
cat /proc/meminfo

查看大业是否配置成功

cat /proc/meminfo |grep Hug

安装vpp 生成的dep表

安装要求,先安装vpp lib ,在安装vpp, 剩下的安装没有顺序。剩下的deb 实在不会区分那就全部安装上。

dpkg i libvppinfra_22.06.0-4~gd03b3bf62_amd64.deb       // vpp 底层驱动 lib 库
dpkg i libvppinfra-dev_22.06.0-4~gd03b3bf62_amd64.de   // vpp 底层设备
dpkg i vpp_22.06.0-4~gd03b3bf62_amd64.deb              // vpp 
dpkg i vpp-dbg_22.06.0-4~gd03b3bf62_amd64.deb          // vpp debug     
dpkg i vpp-dev_22.06.0-4~gd03b3bf62_amd64.deb          // vpp 驱动
dpkg i vpp-plugin-devtools_22.06.0-4~gd03b3bf62_amd64.deb 
dpkg i vpp-plugin-core_22.06.0-4~gd03b3bf62_amd64.deb
dpkg i vpp-plugin-dpdk_22.06.0-4~gd03b3bf62_amd64.deb
dpkg i python3-vpp-api_22.06.0-4~gd03b3bf62_amd64.deb     // 使用python 相关安装

查看

dpkg -l |grep xx

查看 配置文件

ls /etc/vpp/
startup.conf.default
ls /usr/lib/x86_64-linux-gnu/vpp_plugins/
abf_plugin.so                  dhcp_plugin.so            l2tp_plugin.so               nat64_plugin.so       srv6as_plugin.so
acl_plugin.so                  dispatch_trace_plugin.so  l3xc_plugin.so               nat66_plugin.so       srv6mobile_plugin.so
adl_plugin.so                  dns_plugin.so             lacp_plugin.so               nat_plugin.so         

查看网卡 pci

# lspci|grep Ethernet
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:06.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
03:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
root@ubuntu:/home# sudo lshw -class network -businfo
Bus info          Device     Class          Description
=======================================================
pci@0000:02:01.0  eth2       network        82545EM Gigabit Ethernet Controller (Copper)
pci@0000:02:06.0  eth3       network        82545EM Gigabit Ethernet Controller (Copper)
pci@0000:03:00.0             network        VMXNET3 Ethernet Controller
pci@0000:0b:00.0  eth1       network        VMXNET3 Ethernet Controller

配置启动文件

需要在配置文件内加入如下信息

unix {
  nodaemon
  log /var/log/vpp/vpp.log
  full-coredump
  cli-listen /run/vpp/cli.sock   //监听
  gid vpp
}
dpdk {
        ## Whitelist specific interface by specifying PCI address
        dev 0000:03:00.0 {  // 添加自己的网卡pci 地址 用于绑定的网卡
                name dpdk0
        }
  }

创建 日志目录

mkdir -p /var/log/vpp

启动vpp

先down 掉绑定的网卡

// 绑定的网卡down 掉
vpp -c /etc/vpp/startup.conf.default &  //后台启动

通过vppctl控制台登录服务进行管理

./vppctl -s /run/vpp/cli.sock


思考

  1. 对于驱动的特点还得是深入了解 igb_uio uio_pci_generic vfio 等NIC驱动?
  2. 加大对大业的理解


参考


参考20.9安装

参考

NIC驱动

目录
相关文章
|
7月前
|
5G 网络架构 索引
安装一个开源虚拟路由器VPP-20.09
安装一个开源虚拟路由器VPP-20.09
|
7月前
|
Kubernetes 网络协议 数据安全/隐私保护
WireGuard 系列文章(八):基于 WireGuard 的 K8S CNI Kilo 简介
WireGuard 系列文章(八):基于 WireGuard 的 K8S CNI Kilo 简介
|
Ubuntu
iperf3 交叉编译
iperf3 交叉编译
486 0
|
4月前
|
Ubuntu 编译器
|
7月前
|
网络性能优化
[VPP] vpp_com使用
[VPP] vpp_com使用
|
7月前
|
编译器 网络性能优化 C语言
VPP DPDK,不是翻墙!!
VPP DPDK,不是翻墙!!
|
7月前
|
Linux 开发工具 芯片
玩转 PI 系列 - 如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?
玩转 PI 系列 - 如何在 Rockchip Arm 开发板上安装 Docker Tailscale K3s Cilium?
|
7月前
【vpp2206 测试】
【vpp2206 测试】
|
Ubuntu Linux
ROS利用ros-kinetic-serial包与下位机串口通信
ROS利用ros-kinetic-serial包与下位机串口通信
247 0
|
缓存 Linux 网络性能优化
安装部署VPP,不是翻墙!!
安装部署VPP,不是翻墙!!
安装部署VPP,不是翻墙!!