在虚拟机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模式,两个桥接模式。
Vmnet0桥接模式映射网卡为PC2上面的Inter网卡。
编译VPP
- apt update -y
- 下载代码:git clone https://github.com/FDio/vpp
- 在vpp目录下,安装依赖:make install-dep, make install-ext-deps
- 编译含debug功能的版本:make build
- make pkg-deb
- dpkg -i build-root/*.deb,该步骤会自动配置大页
编译dpdk
- 最新版本的dpdk编译没有发现IGB_UIO.ko文件;
- 下载dpdk版本为19.08,编译后可得到igb_uio.ko文件;
- 可通过修改build/external/packages/dpdk.mk(vpp目录)中的dpdk_version,运行make build自动下载dpdk代码;
修改后的dpdk.mk截图:
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
绑定成功后截图:
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:
为接口配置IP:
DBGvpp# set interface ip address GigabitEthernet2/7/0 10.10.10.10/24
此时,用PC1去ping该IP,能ping通,则说明环境搭建成功!