dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)

简介: dpdk课程学习之练习笔记七(vpp环境搭建及plugin demo测试)

vpp插件环境搭建笔记:

安装vpp环境,运行一个插件的demo相关操作笔记。

1:vpp测试环境安装

1.1:vpp安装

git clone -b stable/1801 https://github.com/FDio/vpp.git
./extras/vagrant/build.sh
make
cd build-root/
dpkg -i vpp-lib_18.01.2-1~g9b554f3_amd64.deb
dpkg -i vpp_18.01.2-1~g9b554f3_amd64.deb
dpkg -i vpp-dev_18.01.2-1~g9b554f3_amd64.deb
dpkg -i vpp-plugins_18.01.2-1~g9b554f3_amd64.deb
#安装成功后 查看
ls /etc/vpp/startup.conf    #存在该文件
ls /usr/lib/vpp_plugins/    #该目录下生成一些lib

1.2:vpp配置

#查看相关网卡信息
root@ubuntu:/home/hlp/vpp_1801/vpp/build-root# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:20:c7:0d  
          inet addr:192.168.0.109  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:c70d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7663 (7.6 KB)  TX bytes:1332 (1.3 KB)
eth1      Link encap:Ethernet  HWaddr 00:0c:29:20:c7:17  
          inet addr:192.168.0.114  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:c717/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:41 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:7663 (7.6 KB)  TX bytes:1332 (1.3 KB)
eth2      Link encap:Ethernet  HWaddr 00:0c:29:20:c7:21  
          inet addr:192.168.0.111  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:c721/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:48 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:8654 (8.6 KB)  TX bytes:1868 (1.8 KB)
eth3      Link encap:Ethernet  HWaddr 00:0c:29:20:c7:2b  
          inet addr:192.168.105.142  Bcast:192.168.105.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe20:c72b/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:440 errors:0 dropped:0 overruns:0 frame:0
          TX packets:319 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:47076 (47.0 KB)  TX bytes:50800 (50.8 KB)
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:224 errors:0 dropped:0 overruns:0 frame:0
          TX packets:224 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:17664 (17.6 KB)  TX bytes:17664 (17.6 KB)
#查看网卡相关pci地址
root@ubuntu:/home/hlp/vpp_1801/vpp/build-root# lspci |grep Eth
02:04.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
03:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
0b:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
13:00.0 Ethernet controller: VMware VMXNET3 Ethernet Controller (rev 01)
#在配置文件中增加网卡配置 /etc/vpp/startup.conf
cpu {
        main-core 0
}
unix {
        interactive cli-listen 127.0.0.1:5002
        log /tmp/vpp.log
        full-coredump
}
dpdk {
        uio-driver igb_uio
        dev 0000:03:00.0
        dev 0000:0b:00.0
}

1.3:vpp运行

#这里vpp的测试运行依赖于uio 和igb_uio模块,igb_uio模块依赖于dpdk,我用dpdk插入igb_uio模块
export RTE_SDK=/home/hlp/dpdk/dpdk-stable-19.08.2
export RTE_TARGET=x86_64-native-linux-gcc
 ./usertools/dpdk-setup.sh
 #选择43 
#配置内存  这里的大内存页如果使用1G的话需要自己去mount,这个自己也没测试
modprobe uio
#modprobe igb_uio
echo 4 >/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages 
echo 1024 >/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages 
#这里我的虚拟机环境设置的是四个网卡,有三个是多队列网卡供dpdk vpp用的
ifconfig eth0 down
ifconfig eth1 down
ifconfig eth2 down

启动vpp进行测试

#我发现运行时这个是个进程,可以后台运行
vpp -c /etc/vpp/startup.conf
#每次运行时如果有提示有环境在运行,可以用这个命令关闭vpp
service vpp stop
#通过vppctl进入,操作vpp配置
vppctl
vpp# show int
              Name               Idx       State          Counter          Count     
GigabitEthernet13/0/0             3        down      
GigabitEthernet3/0/0              1        down      
GigabitEthernetb/0/0              2        down      
local0                            0        down 
#配置ip
vpp# set interface state GigabitEthernet13/0/0 up
vpp# set interface ip address GigabitEthernet13/0/0 192.168.0.119/24
vpp# show int
              Name               Idx       State          Counter          Count     
GigabitEthernet13/0/0             3         up       rx packets                     6
                                                     rx bytes                     469
                                                     drops                          6
                                                     ip4                            4
                                                     ip6                            1
GigabitEthernet3/0/0              1        down      
GigabitEthernetb/0/0              2        down      
local0                            0        down 
#配置vlan
vpp# create bridge-domain 10
bridge-domain 10
vpp# set interface l2 bridge GigabitEthernet3/0/0 10
vpp# create sub-interfaces GigabitEthernet3/0/0 10 dot1q 10
GigabitEthernet3/0/0.10
vpp# show bridge-domain 10 detail
  BD-ID   Index   BSN  Age(min)  Learning  U-Forwrd  UU-Flood  Flooding  ARP-Term  BVI-Intf
   10       1      0     off        on        on        on        on       off       N/A   
           Interface           If-idx ISN  SHG  BVI  TxFlood        VLAN-Tag-Rewrite       
     GigabitEthernet3/0/0        1     1    0    -      *                 none             
vpp# 
vpp# set interface l2 bridge GigabitEthernet3/0/0.10 10
vpp# set interface l2 tag-rewrite GigabitEthernet3/0/0.10 pop 1
vpp# show bridge-domain 10 detail                              
  BD-ID   Index   BSN  Age(min)  Learning  U-Forwrd  UU-Flood  Flooding  ARP-Term  BVI-Intf
   10       1      0     off        on        on        on        on       off       N/A   
           Interface           If-idx ISN  SHG  BVI  TxFlood        VLAN-Tag-Rewrite       
     GigabitEthernet3/0/0        1     1    0    -      *                 none             
    GigabitEthernet3/0/0.10      4     1    0    -      *                 pop-1  
#配置veth
sudo ip link add name vpp1out type veth peer name vpp1host
ip addr show vpp1host
ip link set dev vpp1out up
ip link set dev vpp1host up
ifconfig  #可以看到 多了两个网口 vpp1host 和vpp1out
... ......
vpp1host  Link encap:Ethernet  HWaddr ce:75:a0:a1:7f:32  
          inet addr:192.168.3.128  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::cc75:a0ff:fea1:7f32/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:648 (648.0 B)  TX bytes:648 (648.0 B)
vpp1out   Link encap:Ethernet  HWaddr 0a:9c:25:cc:e8:03  
          inet6 addr: fe80::89c:25ff:fecc:e803/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:648 (648.0 B)  TX bytes:648 (648.0 B)
ip addr add 192.168.3.128/24 dev vpp1host
ip addr show vpp1host

vpp 插件测试运行:

#获取已有的插件代码  拷贝到
root@ubuntu:/home/hlp/vpp/src/plugins# ls pkt*
pktdump.am
pktdump:
pktdump.c  pktdump.h  pktdump_node.c
#增加编译选项  configure.ac 配置中增加 PLUGIN_ENABLED(pktdump)
root@ubuntu:/home/hlp/vpp/src# grep pktdump configure.ac
PLUGIN_ENABLED(pktdump)
#在/src/plugins/Makefile.am  中增加我们的模块
if ENABLE_PKTDUMP_PLUGIN
include pktdump.am
endif
#进行编译运行
make wipe
make build
#运行前要停止vpp服务  service vpp stop
make run
DBGvpp# set interface state GigabitEthernet3/0/0 up
DBGvpp# set int ip address GigabitEthernet3/0/0 192.168.0.119/24
DBGvpp# show int address
GigabitEthernet13/0/0 (dn):
GigabitEthernet3/0/0 (up):
  192.168.0.119/24
GigabitEthernetb/0/0 (dn):
local0 (dn)
DBGvpp# pkt dump GigabitEthernet3/0/0
#######  使用另外的环境 ping 192.168.0.119 会看到相关结果
DBGvpp# 45 00 00 91 00 00 40 00 40 11 79 b3 c0 a8 00 01 ff ff ff ff b7 9c 13 89 00 7d 41 57 01 01 0e 00 e1 2b 
45 00 00 3c 8e cb 00 00 40 01 69 c4 c0 a8 00 6a c0 a8 00 77 08 00 c3 31 00 02 8a 28 61 62 63 64 65 66 
45 00 00 3c 8e cc 00 00 40 01 69 c3 c0 a8 00 6a c0 a8 00 77 08 00 c3 30 00 02 8a 29 61 62 63 64 65 66 
45 00 00 3c 8e cd 00 00 40 01 69 c2 c0 a8 00 6a c0 a8 00 77 08 00 c3 2f 00 02 8a 2a 61 62 63 64 65 66 
45 00 00 3c 8e ce 00 00 40 01 69 c1 c0 a8 00 6a c0 a8 00 77 08 00 c3 2e 00 02 8a 2b 61 62 63 64 65 66 
45 00 00 3c 8e cf 00 00 40 01 69 c0 c0 a8 00 6a c0 a8 00 77 08 00 c3 2d 00 02 8a 2c 61 62 63 64 65 66

1.4:总结

过程中遇到一些问题,需要思考:

1:使用git clone的时候,我的虚拟机如果网卡设置为net模式,一直下载不下来,改为桥接模式,反而很容易

2:直接使用vpp release版本进行安装没有成功,缺少一个version.h的头文件(下载第三方库生成的),不要用这种方式安装。

3:modprobe igb_uio 时会报错,igb_uio模块是dpdk的模块,要使用dpdk编译然后插入内核模块中。

4:相关内存页的设置,内存页的设置有一些方式,解决问题时,发现如果时1G,需要自己做挂载动作。

5:使用**“vpp -c /etc/vpp/startup.conf”**命令启动时,要注意最后的保存,根据报错分析,最可能就是后台有vpp服务在运行,使用service vpp stop进行关闭,并且使用vppctl进入命令行操作

参考课程练习及源码:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 (qq.com)

目录
相关文章
|
2月前
|
安全 关系型数据库 测试技术
学习Python Web开发的安全测试需要具备哪些知识?
学习Python Web开发的安全测试需要具备哪些知识?
38 4
|
3月前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
1097 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
3月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
78 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
2月前
|
前端开发 JavaScript 安全
学习如何为 React 组件编写测试:
学习如何为 React 组件编写测试:
43 2
|
2月前
|
编解码 安全 Linux
网络空间安全之一个WH的超前沿全栈技术深入学习之路(10-2):保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali——Liinux-Debian:就怕你学成黑客啦!)作者——LJS
保姆级别教会你如何搭建白帽黑客渗透测试系统环境Kali以及常见的报错及对应解决方案、常用Kali功能简便化以及详解如何具体实现
|
3月前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
149 1
|
3月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
84 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
3月前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
197 0
|
3月前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
422 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
3月前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
74 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)