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