本文共 3766 字,大约阅读时间需要 12 分钟。
参考: (感谢 VPP&DPDK 417538415的群主,欢迎加入此群共同学习)
vpp主页:
一、获取vpp:
1、git方式()
gitclone ,获取简单,也是最新的代码,不是release版本
2、yum方式()
Add fd.io repo
Create a file /etc/yum.repos.d/fdio-release.repo with contents:
[fdio-release]name=fd.io release branch latest mergebaseurl=https://nexus.fd.io/content/repositories/fd.io.centos7/enabled=1gpgcheck=0
VPP目前安装主要支持debian和redhat系,本人在CentOS7(64)上验证。编译机一定要联网! 1、 根据上面获取源码 2、 进入目录并且安装: cd vpp; make install-dep;这一步的主要作用就是下载vpp环境所需的依赖包,这一步相当重要,一定要仔细查看执行情况,若有问题,一定要一一解决,不然在后面编译问题多,基本就是在环境搭建的第一次执行。 3、 生成Makefile: cd vpp/build-root; make distclean && /bootstrap.sh; 脚本/bootstrap.sh执行要完全无错误 4、 执行make,如下图所示
开发一般编译测试版,执行make build编译vpp主程序,执行make plugins编译插件,make wipe清除,带有release的就是发型版本了。dpdk不用专门下载,在执行make build的时候会自动下载dpdk到vpp/dpdk目录下。 只要执行make build和make plugins后,vpp基本就编译成功了 编译成功后vpp位置: vpp/build-root/install-vpp-native/vpp/bin/vpp 编译成功后插件位置:vpp/build-root/install-vpp-native/plugins/lib64/vpp_plugins/ igb_uio.ko位置:vpp/build-root/install-vpp-native/dpdk/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko vpp/build-root/install-vpp-native/dpdk/kmod/igb_uio.ko igb_uio.ko可以说是dpdk编译后生成的网卡驱动,vpp好像不能自动加载igb_uio.ko,需要自己手动加载 insmod igb_uio.ko
vpp运行加载插件默认位置是/usr/lib/vpp_plugins/ ,没有yum安装过vpp的话需要自己手动创建这个目录
三、配置文件
vpp默认配置文件位置在/etc/vpp/startup.conf, -c 参数可以指定startup.conf配置文件。
配置文件参考:
配置文件startup.conf示例:
详细参考 cpu {
main-core 18 #vpp主进程绑定到第18核上 #corelist-workers 4-5,20-21,workers 3 } #interactive加上的作用就是你在启动vpp时,直接进入交互界面 unix { interactive cli-listen 127.0.0.1:5002 #vpp交互设置,可以telnet 127.0.0.1 5002进行登录 log /tmp/vpp.log full-coredump #gdb core } dpdk { uio-driver igb_uio #这里只是说vpp使用igb_uio作为网卡的驱动,但不会自己加载igb_uio,igb_uio需要自己加载insmod igb_uio.ko dev 0000:02:05.0 #将网卡和上面的igb_uio 进行绑定,0000:02:05.0这是网卡的pci编号(lspci | grep Ethernet 查看网卡对应的pci编号) dev 0000:02:06.0 dev 0000:02:07.0 vdev eth_bond0,mode=2,slave=0000:02:06.0,slave=0000:02:07.0,xmit_policy=l34 #这个设置是将2个物理网卡绑定成一个使用 socket-mem 512,512 #有numa的设置2个,没有numa的只设置一个就行了,设置的大小 <= free大页的大小,不然启动不了 }
api-trace { on }
注意:要绑定的网卡一定要down掉
四、运行vpp
vpp运行环境: 1、加载 igb_uio.ko(也可是其他的,例如vfio-pci), 2、 设置物理机支持大页(参考)。 手动设置(不推荐) echo 10 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages (10G) echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages (2G)
运行:vpp/build-root/install-vpp-native/vpp/bin/vpp -c /etc/vpp/startup.conf
五、测试环境 A:vpp基本测试
基本测试按照这个拓扑就可以了。 简单转发:vpp转发从port0进,port1出, 虚拟机和外部机器测试:vm->vhost->vpp->port0->外部网络 vm通过vhostuser接口和vpp连接
vhostuser创建: vpp#create vhost socket /tmp/sock2.sock server vpp#set interface state VirtualEthernet0/0/0
启动qemu虚拟机时绑定这个vhost口(参考关于vhost的接口使用)
vpp支持vrf(l3fib,l2fib),这里的vrf意思是独立的路由表,及其vrf下加入的接口,可以模拟vrouter功能,二层道理一样,可以模拟vswitch
B:VPP多vrf实验 关键配置如下(我现在只发现vrf间用veth进行连接,还没发现其他方法) 参考:
将port0和port2接口分配给vrouter0的fib vpp#set int ip table GigabitEthernet0/0/0 0 vpp#set int ip table GigabitEthernet0/0/2 0
将port1和port3接口分配给vrouter1的fib vpp#set int ip table GigabitEthernet0/0/1 1
vpp#set int ip table GigabitEthernet0/0/3 1
在物理机上创建vethA,vethB(必须先于下步vpp添加loopback接口的操作) linux#ip link add vethA type veth peer name vethB
在vpp创建对应vethA,vethB的接口,分别分给不同的vrf vpp#create host-interface name vethA vpp#set int ip table vethA 0 vpp#set interface ip address host-vethA 192.168.1.1/24 vpp#set int state host-vethA up
vpp#create host-interface name vethB
vpp#set int ip table vethB 0
vpp#set interface ip address host-vethB 192.168.1.1/24
vpp#set int state host-vethB up
其他:在启动vpp时有时发现hugepage不够,但你已经设置了,分析hugepage请查看