vpp+dpdk 安装与运行

参考:http://blog.csdn.net/icebluechao/article/details/51208560  (感谢 VPP&DPDK 417538415的群主,欢迎加入此群共同学习)


vpp主页:https://wiki.fd.io/view/VPP


一、获取vpp:

1、git方式(https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code

    gitclone https://gerrit.fd.io/r/vpp,获取简单,也是最新的代码,不是release版本

2、yum方式(https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages         

 Add fd.io repo

 [Collapse

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 merge
baseurl=https://nexus.fd.io/content/repositories/fd.io.centos7/
enabled=1
gpgcheck=0

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

3、发行版压缩包方式(https://git.fd.io/cgit/vpp/)

 开发建议使用这种方式,不用每天对比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配置文件。

配置文件参考:http://blog.csdn.net/icebluechao/article/details/51615503
                        https://wiki.fd.io/view/VPP/Command-line_Arguments

配置文件startup.conf示例:

详细参考https://wiki.fd.io/view/VPP/Using_VPP_In_A_Multi-thread_Model
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、 设置物理机支持大页(参考https://software.intel.com/zh-cn/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications?utm_source=CSDN.com&utm_medium=Syndication&utm_campaign=MC_PRC_Q4-15_syndication)。
      手动设置(不推荐)
              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口(参考https://software.intel.com/zh-cn/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications?utm_source=CSDN.com&utm_medium=Syndication&utm_campaign=MC_PRC_Q4-15_syndication关于vhost的接口使用)

vpp支持vrf(l3fib,l2fib),这里的vrf意思是独立的路由表,及其vrf下加入的接口,可以模拟vrouter功能,二层道理一样,可以模拟vswitch

B:VPP多vrf实验

关键配置如下(我现在只发现vrf间用veth进行连接,还没发现其他方法)
参考:https://wiki.fd.io/view/VPP/Tutorial_Routing_and_Switching

将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请查看http://blog.csdn.net/shaoyunzhe/article/details/54614077

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要配置FD.io VPPDPDK,您可以按照以下步骤进行操作: 1. 安装DPDK:首先,确保您的系统符合DPDK的要求,并按照DPDK官方文档中的说明进行安装。您可以从DPDK官方网站上下载DPDK的源代码,并按照提供的说明进行编译和安装。 2. 配置DPDK环境变量:设置DPDK环境变量,包括`RTE_SDK`和`RTE_TARGET`。`RTE_SDK`指向DPDK源代码目录的路径,`RTE_TARGET`指定您要构建的目标平台。例如,在bash shell中,您可以使用以下命令设置环境变量: ``` export RTE_SDK=/path/to/dpdk export RTE_TARGET=<target> ``` 3. 配置VPP安装FD.io VPP并启动VPP进程。您可以从FD.io VPP官方网站上获取安装说明,并根据指南进行安装。在启动VPP之前,确保您已正确配置了DPDK。 4. 配置VPPDPDK集成:编辑VPP运行时配置文件,通常是位于`/etc/vpp/startup.conf`。将DPDK驱动程序与VPP绑定,指定所需的物理接口和CPU核心。 例如,要将DPDK绑定到VPP并配置两个物理接口(例如eth0和eth1),可以在配置文件中添加以下内容: ``` dpdk { dev <DPDK_DEVICE_NAME> { num-rx-queues <NUM_RX_QUEUES> num-tx-queues <NUM_TX_QUEUES> socket-mem <SOCKET_MEM> } } interface <INTERFACE_NAME> { dpdk <DPDK_DEVICE_NAME> } ``` 在上述配置中,您需要将`<DPDK_DEVICE_NAME>`替换为DPDK设备名称(例如`0000:00:00.0`),`<NUM_RX_QUEUES>`和`<NUM_TX_QUEUES>`分别是接收和发送队列的数量,`<SOCKET_MEM>`是用于DPDK内存的分配。 5. 启动VPP:使用VPP启动命令启动VPP进程,例如: ``` sudo vpp -c /etc/vpp/startup.conf ``` 在启动VPP后,它将根据配置文件中的设置与DPDK集成。 请注意,这只是简单的配置示例,您可能需要根据您的特定需求进行更详细的配置。您可以参考FD.io VPPDPDK的官方文档以获取更多详细信息和配置选项。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值