vpp使用说明文档
先将vpp_arm64.tar.gz复制到目标机器上进行解压,解压后的目录结构如下:
root@localhost-Technical-B:~/vpp/vpp# ls
bin dpaa2 vpp_readme include install.sh kmod lib share startup.conf usertools vpp_papi-1.6.2-py2.7.egg
首先阅读vpp_readme,可根据该文档进行安装。
安装时需要运行install.sh脚本,该脚本主要把该目录下的文件拷贝到目的安装路径,并设置环境变量。使用如下命令进行安装:
chmod +x install.sh
./install.sh /mnt/
环境准备
绑定dpdk网口
dynamic_dpl.sh dpmac.4
export DPRC=dprc.2
驱动模块加载
-
若需要开启kni功能,则需要加载rte_kni.ko模块,使用如下命令加载:
insmod rte_kni.ko carrier=on
需要注意的是carrier=on在dpdk18.05版本后不能省略,因为dpdk18.05版本后carrier默认为off。
-
若不需要开启kni功能,则需要确保rte_kni.ko模块已经被卸载
使用如下命令查看rte_kni.ko是否存在
lsmod | grep rte_kni
若存在则使用如下命令进行卸载:
rmmod rte_kni
vpp配置文件
vpp配置文件与vpp配置一致,可直接参考vpp startup.conf相关配置(包括kni)。
-
线程参数
cpu {
main-core 4
corelist-workers 5
}一般使用一个main线程和一个worker线程。
-
dpdk参数
dpdk {
## Change default settings for all intefaces
huge-dir /mnt/hugepages
no-pci
num-mem-channels 1
# kni count
#kni 1
dev default {
## Number of receive queues, enables RSS
## Default is 1
num-rx-queues 1
num-rx-desc 40960
#num-rx-desc 65536
rss { ipv4 }
## Number of transmit queues, Default is equal
## to number of worker threads or 1 if no workers treads
num-tx-queues 1
}
proc-type primary
log-level 7
}其中需要特别留意的是num-rx-desc,该值是dpdk的环形收包缓冲区大小,若设置过小会导致dpdk丢包。按当前测试结果来看40960为最优值,若大流量时出现大量rx-errors可适当增大该值。
另外若需要启用kni功能,直接在dpdk配置中添加
kni count
即可,其中count是要支持kni的网口个数。kni网口个数依赖于实际的物理网口个数,kni个数无法超过实际物理网口个数。即kni是与物理网口一一对应的。
-
插件参数
plugins {
## Adjusting the plugin path depending on where the VPP plugins are
path /path/lib/vpp_plugins
vat-path /path/lib/vpp_api_test_plugins
plugin default { enable }
plugin gtpu_plugin.so { disable }
}插件配置中需指明vpp_plugins的路径,另外需将原生的gtpu插件禁用。
kni配置和使用
-
配置
当启用kni功能时,对于一个物理网口来说,除vpp本身进行数据包处理外,还会在操作系统中虚拟出一个网口,一般命名为vEth0,其中0跟随kni个数增加。
对于虚拟出来的网口可使用linux下的ifconfig、ethtool工具对其进行配置。可以将其当作正常的物理网口来使用。
-
查看
查看kni统计信息,可直接使用vppctl工具。
vpp# show int
Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
TenGigabitEthernet0 1 up 1500/0/0/0
local0 0 down 0/0/0/0
----------------------------------------------------------------------------------------------------
vEth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9216
inet 121.168.1.12 netmask 255.255.255.0 broadcast 121.168.1.255
inet6 fe80::b0c4:a3ff:feba:2ddf prefixlen 64 scopeid 0x20<link>
ether b2:c4:a3:ba:2d:df txqueuelen 1000 (Ethernet)
RX packets 8 bytes 708 (708.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1364 (1.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0vpp# show int addr
TenGigabitEthernet0 (up):
L3 192.168.8.25/16
local0 (dn):
----------------------------------------------------------------------------------------------------
vEth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9216
inet 121.168.1.12 netmask 255.255.255.0 broadcast 121.168.1.255
inet6 fe80::b0c4:a3ff:feba:2ddf prefixlen 64 scopeid 0x20<link>
ether b2:c4:a3:ba:2d:df txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 10 bytes 796 (796.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 -
分流
分流是指需要决定一个报文是该送往kni经内核协议栈处理,还是该送往vpp由用户态协议栈处理。当前默认分流原则为GTPU报文送往用户态协议栈,非GTPU报文送往内核协议栈。因当前无其他分流策略,暂时不支持分流策略配置,均采用默认分流策略。