博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vpp+dpdk 安装与运行
阅读量:4057 次
发布时间:2019-05-25

本文共 3766 字,大约阅读时间需要 12 分钟。

参考:  (感谢 VPP&DPDK 417538415的群主,欢迎加入此群共同学习)

vpp主页:

一、获取vpp:

1、git方式()

    gitclone ,获取简单,也是最新的代码,不是release版本

2、yum方式()         

 Add fd.io repo

 [] 

CentOS 7.2 - VPP Release RPMs (VPP 16.09)

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

这种方式获取的事rpm,对于研发来说不太方便

3、发行版压缩包方式()

 开发建议使用这种方式,不用每天对比vpp代码,因为vpp代码每天都在更新!vpp主页->Getting the Current Release (16.xx)->Download a vpp tarball vpp。主页版本更新有点慢,外面显示的是16.09,其实里面是16.06。06.09改动还有点大,最大的区别就是09把插件独立出来了,最好获取16.09以后的代码。
备注:发行版压缩包方式原来可以直接下载tar包,现在找不到了
二、编译安装
参考icebluechao的专栏

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_uioigb_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请查看

你可能感兴趣的文章
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>
iOS获取手机的Mac地址
查看>>
ios7.1发布企业证书测试包的问题
查看>>
如何自定义iOS中的控件
查看>>
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
js判断空对象的几种方法
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>