官方文档:https://fd.io/docs/vpp/latest/gettingstarted/index.html 官方:https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code

博客:https://blog.csdn.net/weixin_40815457/article/details/86476920

1. 安装

VPP官方安装说明:https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages

1.1 添加 fd.io repo

(1) VPP发行包获取链接:https://packagecloud.io/fdio/release
(2) 单击以获取安装 Debian / Rpm 软件包的说明:
VPP 安装与运行 - 图1

  1. curl -s https://packagecloud.io/install/repositories/fdio/master/script.deb.sh | sudo bash

1.2 安装 Packages

(1) 安装 vpp 执行包

  1. sudo apt-get update
  2. sudo apt-get install vpp

(2) 安装其它包

  1. sudo apt-get install \
  2. vpp-plugin-core \
  3. vpp-plugin-dpdk \
  4. vpp-dbg vpp-dev \
  5. vpp-ext-deps \
  6. vpp-api-python \
  7. vpp-api-java

(3) 卸载方式

  1. sudo apt-get remove --purge vpp*
  2. sudo apt autoremove

2. 配置

https://wiki.fd.io/view/VPP/Command-line_Arguments https://blog.csdn.net/turbock/article/details/106880686

2.1 关闭待接管网卡接口

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

  1. ifconfig ens34 down

**

2.2 安装 NIC 网卡驱动模块

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

  • 作为 uio_pci_generic 替代方案,DPDK 包含 igb_uio 模块。对于一些不支持传统中断的设备,例如虚拟化功能设备,可能需要使用 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);
  • 因为虚拟机的系统内核为 3.6 及以上,内置 VFIO ,所以直接加载 vfio-pci。可根据实际情况选用uio_pci_generic / igb_uio / vfio-pci 等;
  • 如果选用 igb_uio,需要单独编译 DPDK 获取 igb_uio.ko ,并使用命令 insmod igb_uio.ko 进行安装。 ```bash

    启动对应驱动模块,此处选用 vfio

    modprobe vfio modprobe vfio-pci

modprobe igb-uio

modprobe uio_pci_generic

如果采用vfio

启动非安全NOIOMMU模式(仅在系统没有IOMMU时)

启动该选项VPP可自动接管网卡显示在vppctl中

echo Y | sudo tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode

modprobe uio

insmod /vpp/build-root/build-vpp_debug-native/dpdk/dpdk-stable-18.02.1/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko

  1. **
  2. <a name="YoyxD"></a>
  3. ## 2.3 设置巨页
  4. 可选步骤,可后期配置
  5. ```bash
  6. #### 分配巨页1024*2M=2G
  7. echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
  8. # 或者使用sysctl命令
  9. sysctl -w vm.nr_hugepages=2048
  10. #### 查看大页分配数目
  11. cat /proc/meminfo| grep Huge
  12. # mkdir /mnt/huge
  13. # mount -t hugetlbfs nodev /mnt/huge

2.4 接口绑定驱动

本步骤主要用于检验物理网口是否被 DPDK 驱动接管网卡成功,首次使用时一定要执行,具体绑定及几种驱动理解也可参考 DPDK 编译及使用 ,也可参考VPP官方相关文档。创建网卡接口时可选用指定接口来创建。通过驱动 vfio-pci 绑定网卡 PCI 端口,-b 表示 –bind 的意思;0000:0b:00.0 是当前物理机或虚拟机采用的网卡 PCI 端口号。

  1. #### 查询网卡物理地址
  2. lspci |grep Ethernet
  3. # 或采用如下命令
  4. sudo lshw -class network -businfo
  5. # 回显返回 02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01),其中02.05.0为物理地址。
  6. #### 绑定接口到vfio-pci
  7. cd /root/vpp/extras/vpp_config/scripts/
  8. # 将物理网卡绑定驱动
  9. ./dpdk-devbind.py --bind vfio-pci 0000:02:05.0
  10. # 也可执行
  11. ./dpdk-devbind.py --bind vfio-pci ens34
  12. # 查看网卡使用驱动状态
  13. ./dpdk-devbind.py --status

如果绑定网卡出现问题,通过 dmesg | grep -i vfio-pci检查错误信息。实验中总是绑定网卡失败错误码-22,表示无效参数。最后证明是驱动不支持网卡类型,或者是 DPDK 不支持. 排错时首先需要启动 IOMMU 支持。

  1. #### 修改系统内核启动参数,重启系统,查看是否开启IOMMU
  2. $ dmesg | grep -e DMAR -e IOMMU
  3. [0.000000] DMAR: IOMMU enabled
  4. #### 查看是否开启intel-vt-x/vt-d
  5. $ cat /proc/cpuinfo | grep vmx

这里重点是,一定要启动 intel-vt(IOmmu) 或 AMD-V!!!-22 错误一般都是 IOmmu 没有开启。解决方法如下依次列出:

  1. 开机后按F12进入 BIOS 界面打开 VT-x 和 VT-d;
  2. 若为虚拟机,点击设置处理器,并开启 VT-x 等;若无法打开,需要提高内存分配,有些需要在虚拟机选项上配置,关闭虚拟机,右键单击虚拟机 —> 设置 —> 处理器 —> 虚拟化引擎标签栏中,选中 启动虚拟化IOmmu。

    2.5 修改配置文件

    如果采用包安装,默认配置文件位置为 /etc/vpp/startup.conf;如果采用编译安装方式安装,配置文件位置为 /root/vpp/build-root/install-vpp_debug-native/vpp/etc/vpp/startup.conf。
    1. dpdk {
    2. uio-driver auto # 设置网卡驱动类型,vpp会根据情况自动判断并接管网卡
    3. dev 0000:02:05.0 {name G0} # 根据命令查看lspci |grep Ethernetpci接口修改
    4. dev 0000:02:06.0 {name G1}
    5. socket-mem 1024
    6. }