腾讯云主机2C2G搭建DPDK+VPP学习平台

随着云计算技术的飞速发展,网络性能优化与高速数据包处理能力的重要性日益凸显。在这个春天,腾讯云新春采购季盛大开启,为广大学习者、开发者和企业提供了一个极具性价比的机会,让您以空前优惠的价格拥有高性能的云服务器,并借此打造专业的VPP+DPDK学习实践平台。

腾讯云主机凭借其业界领先的硬件配置、卓越的稳定性以及强大的安全性,在全球范围内赢得了用户的广泛赞誉。在本次新春采购活动中,腾讯云特别推出了多款高规格云服务器,搭配灵活的存储方案和快速的网络资源,能够完美满足构建基于Vector Packet Processing (VPP) 和 Data Plane Development Kit (DPDK) 技术的学习环境需求。

借助腾讯云服务器,我们可以迅速部署一套完整的VPP+DPDK环境,进行高性能网络协议栈开发、虚拟化网络功能(NFV)、软件定义网络(SDN)等领域的深入探索。这套备受推崇的教程——“dpdk/网络协议栈/vpp/OvS/DDos/SDN/NFV/虚拟化/高性能专家之路”,已在B站上累计了丰富的视频课程,现在配合腾讯云的超值优惠,您可以在云端轻松搭建起与教程配套的实验平台,理论与实战相结合,更快地踏上通往网络技术专家的道路。点击下面图片或者文章末尾阅读原文可以参与腾讯云新春采购节,领取红包购买云主机

当前新用户首购2核2G3M价格61元,新春采购节还可以免费领取购买5-10元优惠券,下面是我实际的购买价格56元,相当实惠。

接下来我们就从github仓库直接下载源码编译搭建DPDK+VPP的学习环境,下面显示下载速度居然达到了9.55MiB/s,不到一分钟的时间就下载完毕了(后面用来下载github代码也相当不错了)。

代码语言:javascript
复制
root@learning-vpp:~/workspace# git clone https://github.com/FDio/vpp.git vpp-master
Cloning into 'vpp-master'...
remote: Enumerating objects: 143901, done.
remote: Counting objects: 100% (606/606), done.
remote: Compressing objects: 100% (361/361), done.
remote: Total 143901 (delta 312), reused 456 (delta 241), pack-reused 143295
Receiving objects: 100% (143901/143901), 103.08 MiB | 9.55 MiB/s, done.
Resolving deltas: 100% (115022/115022), done.

VPP社区有一篇文章《https://lists.fd.io/g/vpp-dev/topic/97500372#22687 在centos 7 VM中构建VPP v23.02时失败》。社区已明确不再支持Centos 7系统,Centos 8系统目前是支持的,但是在编译过程中也可能遇到各种问题。Centos 8的内核版本也比较低,对一些新技术EBPF支持也不好,所以这里推荐使用Ubuntu LTS系统。本文基于Ubuntu 22.04 LTS系统来编译VPP。

下面基本的vpp debug版本编译流程。

代码语言:javascript
复制
安装编译依赖库环境
make install-deps
编译安装外部开发依赖库 dpdk ipsec-mb xdp-tools等等。
make install-ext-deps
编译debug版本,方便学习
make build 

在执行make install-ext-deps时,可以设置dpdk 库debug版本并保留dpdk 符号表方便单步调试代码,请参考文章《Learning VPP: Building DPDK with debug symbols》。

由于购买云主机内存只有2G,ipsec-mb肯定会编译失败的(目前需要……G内存),可以通过创建一个6G的swap内存交换分区来满足8G编译环境要求。

代码语言:javascript
复制
#1、创建一个swap分区目录,使用dd命令创建swapfile分区。
dd if=/dev/zero of=/root/swap/swapfile bs=1M count=6144
chmod 666 /root/swap/swapfile
#2、格式化swap分区
mkswap /root/swap/swapfile
#3、激活分区
swapon /root/swap/swapfile
#4、free查询分区内存设置成功
root@learning-vpp:~/workspace/vpp# free
               total        used        free      shared  buff/cache   available
Mem:         2010904      305264      106384        1860     1599256     1509084
Swap:        6291452       66176     6225276

这里需要注意我们只是临时创建了一个6G的分区,编译完成之后,可以删除分区的,释放6G的存储空间。

代码语言:javascript
复制
#查询分区
root@learning-vpp:~/workspace/vpp# swapon -s
Filename                Type        Size        Used        Priority
/root/swap/swapfile                     file        6291452     66176       -2
# 关闭分区
root@learning-vpp:~/workspace/vpp# swapoff /root/swap/swapfile 
root@learning-vpp:~/workspace/vpp# free 
               total        used        free      shared  buff/cache   available
Mem:         2010904      314912       93116        2756     1602876     1498760
Swap:              0           0           0
root@learning-vpp:~/workspace/vpp# rm /root/swap/swapfile 
root@learning-vpp:~/workspace/vpp# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           197M 1008K  196M   1% /run
/dev/vda2        40G  8.0G   30G  22% /
tmpfs           982M  208K  982M   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           197M  4.0K  197M   1% /run/user/0

接下来添加一个vpp的用户组 groupadd -f -r vpp,就可以启动vpp的学习之旅了。

下面是一个简单配置验证vpp搭建vlan终结子接口配置,在内核可以ping通网关 192.168.1.1。本文就到此,后面详细介绍vlan终结子接口配置及业务转发流程。

代码语言:javascript
复制
#vpp创建二层域及tap10.10子接口,验证vlan终结子接口。
create bridge-domain 10
  bvi create instance 10
  set interface l2 bridge bvi10 10 bvi
  set interface state bvi10 up
  set interface ip address bvi10 192.168.1.1/24

create tap id 10 host-if-name tap10
create sub-interfaces tap10 10
set interface l2 bridge tap10.10 10
set interface state tap10 up
set interface state tap10.10 up
set interface l2 tag-rewrite tap10.10 pop 1

#内核配置vlan子接口
ip link add link tap10 name tap10.10 type vlan id 10
ip link set tap10.10 up
ip addr add 192.168.1.2/24 dev tap10.10