当前位置: 首页 > news >正文

Ubuntu 虚拟机 | DPDK 协议栈开发 | 2、DPDK驱动绑定VMWare模拟网卡 + Testpmd发包测试

原创不易!转载请注明出处!!

上一节

Ubuntu 虚拟机 | DPDK 协议栈开发 | 1、环境搭建 + 虚拟端口测试

前言

在之前的文章中,已经展示了如何在Ubuntu虚拟机中搭建基础的DPDK环境、运行Helloworld,以及借助Testpmd+net_null完成最简单的虚拟端口回环发包测试。

本节中,将会基于上一节配置的环境,完成DPDK驱动的安装,并将VMWare模拟网卡绑定到DPDK。最终,仍然通过Testpmd进行发包测试,但这次是基于驱动+模拟网卡,而非通过net_null模拟的虚拟端口。

一、初识VMWare虚拟网卡

DPDK官网中列举了所有支持DPDK的网卡,以下是Intel支持DPDK的网卡列表:

在这里插入图片描述

下面再看VMWare中安装的Ubuntu24.04的网卡型号。VMware 会为 Linux 虚拟机模拟一张独立的虚拟网卡(而非直接使用物理网卡),虚拟机的操作系统(Ubuntu)仅能识别到这张 “模拟网卡”,无法感知物理网卡的存在。

VMware 默认提供几种通用的虚拟网卡型号(确保兼容性),常见包括:

  • Intel E1000:模拟 Intel 千兆以太网网卡(兼容性强,支持多数 Linux 系统);
  • VMXNET3:VMware 自研的高性能虚拟网卡(需安装 VMware Tools 才能识别,性能优于 E1000)。

输入lspci | grep -i "Ethernet",可以查看到以下内容:

在这里插入图片描述

这里显示的其实就是Intel E1000网卡,可以看到DPDK支持的网卡列表中,e1000后面的括号里就有82545这个型号。也就是说,VMWare提供的模拟网卡是支持DPDK操作的。

二、安装DPDK驱动

直接点击支持列表的e1000超链接,定位到以下文档:

17. Driver for VM Emulated Devices

这里描述了可以为虚拟机模拟设备添加驱动,但使用的并非Ubuntu,因此我们忽略。但可以看到这一段信息:

在这里插入图片描述

也就是说,模拟设备和真实网卡之间还是有一定区别的。

2.1 安装VFIO驱动

输入以下指令:

./usertools/dpdk-devbind.py --status

可以查看到网卡绑定状态:

在这里插入图片描述

可以看到,模拟网卡目前还被归属在使用内核的设备,目前它使用的是内核态协议栈,drv=e1000表示使用e1000驱动,unused=表示其它可用的驱动,目前后面没有内容,这是因为我们还没安装DPDK驱动。

下面来安装DPDK驱动,首先配置在无IOMMU模式下安装:

sudo modprobe vfio enable_unsafe_noiommu_mode=1

然后安装VFIO:

sudo modprobe vfio-pci

这时候再次查看网卡绑定状态:

在这里插入图片描述

可以看到unused=vfio_pci,表示目前有了一个可用的驱动,也就是vfio_pci。

2.2 模拟网卡绑定到VFIO驱动

在将模拟网卡绑定到VFIO之前,我们先执行ifconfig,可以看到:

在这里插入图片描述

这时候,还可以查看到ens33。

下面开始将ens33绑定到VFIO,执行指令:

./usertools/dpdk-devbind.py --bind=vfio-pci ens33 # 取决于你的if=的值
# 或
./usertools/dpdk-devbind.py --bind=vfio-pci 02:01.0 # 取决于你的PCI设备地址

此时,你可能会弹出以下报错:

在这里插入图片描述

这是因为要从内核解绑的网卡此时正处于使用状态,前面查看状态时也可以看到,该网卡在Active状态。

解决方法是关闭该网卡的链接:

sudo ip link set ens33 down

此时再执行绑定操作,就能够成功执行。

成功绑定后,我们再来查看网卡状态:

在这里插入图片描述

可以看到该网卡变成了Network devices using DPDK-compatible driver,使用的驱动也变成了vfio-pci,说明我们成功将它从Linux内核解绑,绑定到了DPDK驱动中。

这时候再次执行ifconfig,发现ens33不见了,这是因为它被被DPDK接管了。

将ens33切换回内核驱动的方式也很简单,执行以下指令即可:

./usertools/dpdk-devbind.py --bind=e1000 02:01.0

三、Testpmd发包

在前面的文章中,已经使用testpmd进行了最简单的虚拟端口发包。在绑定了模拟网卡后,可本小节我们通过VFIO+模拟网卡实现发包,并在主机端使用Wireshark抓包。

简单画了一下我们要做的事,如下图所示。我们已经完成了E1000模拟网卡绑定到VFIO,现在我们要通过VMnet1接口,利用testpmd向主机发包。

在这里插入图片描述

这里省去了大页配置等操作,详情参考前一节。

3.1 VMWare修改网络设置

修改虚拟机的网络适配器设置,如下图所示。

在这里插入图片描述

修改后,虚拟机可以通过VMnet1端口与主机通信。

3.2 Wireshark安装

Wireshark直接通过官网安装即可。

安装成功后,打开软件,选择VMnet1并双击。

在这里插入图片描述

这时就可以抓到一些VMnet1端口下的报文了。

在这里插入图片描述

可以看到,这里的报文源IP其实是我目前打开的另一台虚拟机。

在这里插入图片描述

而目的IP则是主机端的VMnet1的IP地址,可以在主机windows命令行输入ipconfig查看。

在这里插入图片描述

3.3 Testpmd发包

执行指令打开testpmd。

sudo ./build/app/dpdk-testpmd -l 0-3 -- -i --portmask=0x1 --nb-cores=2 --forward-mode=txonly

端口掩码0x1表示只开启一个端口,也就是模拟网卡的端口。

输入start发包,从Wireshark可以看到,立刻抓到了大量的包。

在这里插入图片描述

从左下角解析的信息可以看到,这些包的源和目的IP是198.18.0.1和198.18.0.2,这其实是RFC规定的专用于网络测试的IP字段(详见RFC6890)。
在这里插入图片描述

传输协议使用UDP协议,Discard Protocol源自RFC863,它主要用于测试,工作在UDP端口9,在收到数据包后全部删除,所以Wireshark中显示所有包全部被DISCARD。

也就是说,这些包其实是testpmd构造的测试报文。主机能够检测到这些报文,说明testpmd的数据被成功通过VFIO+模拟网卡发送出虚拟机,证明配置成功。

四、问题和解决

4.1 Helloworld

在安装VFIO驱动并绑定网卡后,再次运行Helloworld程序,发现如下报错:

在这里插入图片描述

该提示是因为DPDK需要禁用终端,改为PMD轮循模式,但在禁用中断时出错。但目前还没有找到解决方法,在找到后会持续更新。


THE END…


文章转载自:

http://5z5iXfs9.zrnqk.cn
http://QF57vawG.zrnqk.cn
http://nZL0phA6.zrnqk.cn
http://6tel8G2f.zrnqk.cn
http://suIy9lDs.zrnqk.cn
http://v8CpCMah.zrnqk.cn
http://AyN5OFWV.zrnqk.cn
http://YP7Mr4Tf.zrnqk.cn
http://NhKcnftp.zrnqk.cn
http://cjcDUjIF.zrnqk.cn
http://WuvKgvj3.zrnqk.cn
http://wa1OvVbo.zrnqk.cn
http://Ih35pnTq.zrnqk.cn
http://2t0YLTrB.zrnqk.cn
http://ZA2XJ3MJ.zrnqk.cn
http://4eDKPdYz.zrnqk.cn
http://iHo8PxS9.zrnqk.cn
http://cegTkzK6.zrnqk.cn
http://U0opuqCH.zrnqk.cn
http://otFXVhxs.zrnqk.cn
http://aDpP0hKw.zrnqk.cn
http://UMmgi42w.zrnqk.cn
http://TwHItdfG.zrnqk.cn
http://7I1DZNSf.zrnqk.cn
http://h7MZfmd0.zrnqk.cn
http://ZZFL8yuF.zrnqk.cn
http://1SYbEGyV.zrnqk.cn
http://eaeZCQns.zrnqk.cn
http://NeXqh5rS.zrnqk.cn
http://FsW0H3Zk.zrnqk.cn
http://www.dtcms.com/a/386742.html

相关文章:

  • 【高等数学】第十二章 无穷级数——第二节 常数项级数的审敛法
  • 从弱 AI 到通用人工智能(AGI):我们还需要跨越哪些技术鸿沟?
  • Redis 在分布式会话管理中的应用:从单体到微服务的平滑迁移
  • 说说你对闭包的理解? 闭包使⽤场景
  • MySQL 存储过程完整实战手册---一篇吃透 Stored Procedure
  • Leetcode 763. 划分字母区间 贪心
  • 嵌入式系统arm高级系统调试技能-25.cat proc/vmallocinfo文件内容解读,内存异常分析
  • 良策金宝AI的技术内核:工程大模型如何破解行业知识壁垒
  • WJCZ(唯诺因)黄金三角抗衰体系的科学机制与作用解析
  • Base64:原理、应用与底层实现详解
  • 【设计模式】解析命令模式并附带一个可撤销重做的例子
  • Python爬虫实战:研究Pandas,构建物联网数据采集和分析系统
  • 视频无法播放怎么办?附详细故障排查指南
  • 【ICCV 2025】UniConvNet:扩展有效感受野并保持对任何规模的卷积神经网络的渐近高斯分布
  • 服装跟单管理系统:驱动服装行业高效运转的核心工具
  • 《LINUX系统编程》笔记p10
  • VS2022 更新 Microsoft.VisualStudio.WorkflowManagerTools安装失败
  • 利用BFS解决拓扑排序问题
  • 成本分析≠算账!6步打通从数据到决策的关键路径
  • 未来清洁技术:当有鹿巡扫机器人开始理解世界
  • 【更新至2024年】2013-2024年上市公司重点排污企业名单数据
  • 小程序获取视频第一帧
  • 文档处理控件Aspose.Words教程:在 C# 中将 Markdown 转换为 PDF
  • blender切割物体
  • 三防笔记本电脑是什么?一般什么人用?
  • openlist 或者 alist 迅雷网盘 迅雷专家版 需要手动加入输入验证码,迅雷网盘短信认证
  • 搭建node脚手架(一)
  • ARM(9) - UART
  • STM32H743-ARM例程1-IDE环境搭建与调试下载
  • 向量数据库的作用