在虚拟机Ubuntu中搭建vpp+dpdk开发环境

环境

Ubuntu:18.04

vpp:20.05

dpdk:19.08

硬件

Inter网卡:Intel(R) PRO/1000 MT Dual Port Server Adapter(82545EM Gigabit Ethernet Controller (Copper) 100f)

拓扑

PC1--------Inter网卡--------PC2(Ubuntu)

PC1用于验证网卡连通性,仅用于测试。Inter网卡插在PC2上,Ubuntu虚拟机运行在PC2上。

Ubuntu添加网卡模式为桥接模式。我添加了三块网卡,一个nat模式,两个桥接模式。

在虚拟机Ubuntu中搭建vpp+dpdk开发环境

Vmnet0桥接模式映射网卡为PC2上面的Inter网卡。

在虚拟机Ubuntu中搭建vpp+dpdk开发环境

编译VPP

  1. apt update -y
  2. 下载代码:git clone  https://github.com/FDio/vpp
  3. 在vpp目录下,安装依赖:make install-dep, make install-ext-deps
  4. 编译含debug功能的版本:make build
  5. make pkg-deb
  6. dpkg -i build-root/*.deb,该步骤会自动配置大页

编译dpdk

  1. 最新版本的dpdk编译没有发现IGB_UIO.ko文件;
  2. 下载dpdk版本为19.08,编译后可得到igb_uio.ko文件;
  3. 可通过修改build/external/packages/dpdk.mk(vpp目录)中的dpdk_version,运行make build自动下载dpdk代码;

修改后的dpdk.mk截图:

在虚拟机Ubuntu中搭建vpp+dpdk开发环境

 

4. 运行make build后,代码包放在build/external/downloads,解压dpdk源码包,进入dpdk文件夹;

5. export RTE_SDK=‘pwd'

export RTE_TARTGET=x86_64-native-linuxapp-gcc

make config T=x86_64-native-linuxapp-gcc

make

6. 编译好的igb_uio.ko文件在build/kmod/文件夹;

7. 加载驱动:modprobe uio

insmod build/kmod/igb_uio.ko

8. 确认驱动加载成功:lsmod | grep uio

驱动卸载:rmmod igb_uio

设置大页

mkdir /mnt/huge

//echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages,这一步在我这中操作下不需要

mount -t hugetlbfs nodev /mnt/huge

绑定接口

在dpdk文件目录下操作:

 

查看接口状态:

./usertools/dpdk-devbind.py -s

一般接口是先被内核接管。

 

绑定网卡:

./dpdk-devbind --bind=igb_uio 0000:02:06.0

./dpdk-devbind --bind=igb_uio 0000:02:07.0

绑定成功后截图:

在虚拟机Ubuntu中搭建vpp+dpdk开发环境

 

dpdk解绑网卡:./dpdk-devbind -u 0000:02:06.0

修改vpp启动配置文件

将/etc/vpp/startup.conf文件中的dpdk配置放开,并添加绑定的网卡。

简化后关于dpdk配置为:

dpdk {

dev 0000:02:06.0 {

num-rx-queues 2

}

dev 0000:02:07.0{

num-rx-queues 2

}

}

重启vpp:service vpp restart

测试

启动vpp,将接口配置为up:

在虚拟机Ubuntu中搭建vpp+dpdk开发环境

 

为接口配置IP:

DBGvpp# set interface ip address GigabitEthernet2/7/0 10.10.10.10/24

此时,用PC1去ping该IP,能ping通,则说明环境搭建成功!