官方文档: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 软件包的说明:
curl -s https://packagecloud.io/install/repositories/fdio/master/script.deb.sh | sudo bash
1.2 安装 Packages
(1) 安装 vpp 执行包
sudo apt-get update
sudo apt-get install vpp
(2) 安装其它包
sudo apt-get install \
vpp-plugin-core \
vpp-plugin-dpdk \
vpp-dbg vpp-dev \
vpp-ext-deps \
vpp-api-python \
vpp-api-java
(3) 卸载方式
sudo apt-get remove --purge vpp*
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/
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
**
<a name="YoyxD"></a>
## 2.3 设置巨页
可选步骤,可后期配置
```bash
#### 分配巨页1024*2M=2G
echo 2048 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
# 或者使用sysctl命令
sysctl -w vm.nr_hugepages=2048
#### 查看大页分配数目
cat /proc/meminfo| grep Huge
# mkdir /mnt/huge
# mount -t hugetlbfs nodev /mnt/huge
2.4 接口绑定驱动
本步骤主要用于检验物理网口是否被 DPDK 驱动接管网卡成功,首次使用时一定要执行,具体绑定及几种驱动理解也可参考 DPDK 编译及使用 ,也可参考VPP官方相关文档。创建网卡接口时可选用指定接口来创建。通过驱动 vfio-pci 绑定网卡 PCI 端口,-b 表示 –bind 的意思;0000:0b:00.0 是当前物理机或虚拟机采用的网卡 PCI 端口号。
#### 查询网卡物理地址
lspci |grep Ethernet
# 或采用如下命令
sudo lshw -class network -businfo
# 回显返回 02:05.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01),其中02.05.0为物理地址。
#### 绑定接口到vfio-pci
cd /root/vpp/extras/vpp_config/scripts/
# 将物理网卡绑定驱动
./dpdk-devbind.py --bind vfio-pci 0000:02:05.0
# 也可执行
./dpdk-devbind.py --bind vfio-pci ens34
# 查看网卡使用驱动状态
./dpdk-devbind.py --status
如果绑定网卡出现问题,通过 dmesg | grep -i vfio-pci
检查错误信息。实验中总是绑定网卡失败错误码-22,表示无效参数。最后证明是驱动不支持网卡类型,或者是 DPDK 不支持. 排错时首先需要启动 IOMMU 支持。
#### 修改系统内核启动参数,重启系统,查看是否开启IOMMU
$ dmesg | grep -e DMAR -e IOMMU
[0.000000] DMAR: IOMMU enabled
#### 查看是否开启intel-vt-x/vt-d
$ cat /proc/cpuinfo | grep vmx
这里重点是,一定要启动 intel-vt(IOmmu) 或 AMD-V!!!-22 错误一般都是 IOmmu 没有开启。解决方法如下依次列出:
- 开机后按F12进入 BIOS 界面打开 VT-x 和 VT-d;
- 若为虚拟机,点击设置处理器,并开启 VT-x 等;若无法打开,需要提高内存分配,有些需要在虚拟机选项上配置,关闭虚拟机,右键单击虚拟机 —> 设置 —> 处理器 —> 虚拟化引擎标签栏中,选中 启动虚拟化IOmmu。
2.5 修改配置文件
如果采用包安装,默认配置文件位置为 /etc/vpp/startup.conf;如果采用编译安装方式安装,配置文件位置为 /root/vpp/build-root/install-vpp_debug-native/vpp/etc/vpp/startup.conf。dpdk {
uio-driver auto # 设置网卡驱动类型,vpp会根据情况自动判断并接管网卡
dev 0000:02:05.0 {name G0} # 根据命令查看lspci |grep Ethernetpci接口修改
dev 0000:02:06.0 {name G1}
socket-mem 1024
}