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

【系统搭建】DPDK实现两虚拟机基于testpmd和l2fwd的收发包

testpmdl2fwd的配合构建一个高性能的虚拟网络测试环境。l2fwd服务工作在数据链路层,使用MAC地址寻址,很多基于DPDK的策略实现可以基于l2fwd进行开发。

一、拓扑结构示意

+-------------------+    虚拟化层网络     +-------------------+
|   虚拟机1          |<------------------>|   虚拟机2          |
| (运行testpmd)     |  TAP/virtio-net    | (运行l2fwd)       |
+-------------------+                    +-------------------+

二、虚拟机设置

1. 设置子网

在这里插入图片描述

  • 新建一个虚拟机子网,并且取消勾选连接网络和IP地址分配选项,因为二层协议服务仅需要MAC地址寻址即可。

2. 网卡设置

  • 新建多张网卡(推荐三张,第三张用于联网)
  • 选择自定义模式连接到虚拟网络,使两台虚拟机处于同一子网下

三、l2fwd服务启动

1. DPDK接管网卡

按照【系统搭建】DPDK安装配置与helloworld运行中的步骤配置DPDK,并且建议DPDK仅绑定一张网卡,否则会出现数据环流的情况,即l2fwd发送数据流从一个端口到另一个端口。

2. 启动l2fwd

sudo ./dpdk-l2fwd -l 0-1 -n 4 --iova-mode=pa -- -p 0x1

关键参数解释:

  • -l 0-1:指定DPDK使用的CPU逻辑核心(核绑定)
  • -n 4:设置内存通道(memory channel)数量,需与物理内存通道数一致(通过dmidecode -t memory查看)
  • --iova-mode=pa:强制使用物理地址模式(否则会VA报错)
  • -p 0x1:启用端口 0

启动成功后出现收发包的统计,并且10s更新一次。

四、testpmd发流

testpmd的可执行文件编译在了./build/app/目录下
发送端执行指令:

sudo ./dpdk-testpmd -l 0-3 -n 4 --vdev=net_tap0 -- \--txd=2048 --rxd=2048 --txq=1 --rxq=1 \--forward-mode=txonly --eth-peer=0,00:0C:29:12:9B:99

1. EAL参数

-l 0-3
  • 作用:指定DPDK使用的CPU逻辑核心(核绑定)。
  • 详细说明
    • 0-3 表示使用逻辑核心0、1、2、3。
    • 核心分工
      • 核心0:主线程(管理/统计)。
      • 核心1-3:数据面线程(发包/收包)。
-n 4
  • 作用:设置内存通道数量(需与主板实际物理内存通道数一致)。
  • 验证方法
    dmidecode -t memory | grep "Channel"  # 查看物理内存通道数
    
--vdev=net_tap0
  • 作用:创建虚拟TAP设备。
  • 使用场景
    • 用于连接虚拟机/容器网络。
    • 在宿主机上生成tap0设备(需通过ip link验证)。

2. testpmd 参数(--后部分):

在l2fwd启动时可以看到网卡的MAC地址,注意在testpmd进行匹配
00:0C:29:12:9B:99即在接收端查看的MAC地址

--txd=2048 / --rxd=2048
  • 作用:设置每个队列的发送/接收描述符数量。
  • 推荐值
    • 10G网卡:1024-4096。
    • 25G+网卡:4096-8192。
  • 查看硬件支持最大值
    ethtool -g eth0 | grep "TX:"  # 实际值必须 ≤ 硬件支持值
    
--txq=1 / --rxq=1
  • 作用:每个端口的发送/接收队列数。
  • 多队列场景
    # 启用RSS(多队列)
    --rxq=4 --txq=4 --rss-ip --rss-udp
    
--forward-mode=txonly
  • 作用:设置转发模式为仅发送
  • 其他模式
    • rxonly:仅接收。
    • io:收发双向。
    • mac:MAC地址重写转发。
--eth-peer=0,00:0C:29:12:9B:99
  • 作用:指定端口0的对端MAC地址。
  • 关键验证点
    • 必须与接收端(如l2fwd虚拟机)的实际MAC一致。
    • 接收端启动l2fwd时会输出MAC地址
    • 或在接收端查看MAC:
      ip link show dev eth0 | grep link/ether
      

3. 流量行为说明

在这里插入图片描述

相关文章:

  • C++之类模板
  • 基于AI大语言模型的历史文献分析在气候与灾害重建领域中的技术应用
  • 对抗生成进化:基于DNA算法的AIGC检测绕过——让AI创作真正“隐形“
  • ubtuntu安装docker拉取iwebsec镜像
  • 智慧矿山数字孪生解决方案:技术剖析与实践
  • Windows快速切换屏幕/桌面
  • java基础练习DEMO
  • zynq7020 ubuntu_base 跟文件系统
  • 深入解析Java Socket服务器实现:从基础到优雅停机
  • ICP 减少的是 不必要 的回表,而不是 所有 回表
  • 《Java 并发编程实践》阅读笔记(一):线程重要性
  • 空洞卷积(膨胀卷积/扩张卷积)本质理解
  • Java 本地缓存的实现:常见的四种方式
  • 逻辑过期怎么设计
  • PclSharp ——pcl的c#nuget包
  • 自己的账号
  • 细说STM32单片机FreeRTOS任务管理API函数vTaskList()的使用方法
  • 软件测试|App测试相关面试题(3)
  • 2025年第二期DAMA认证考试通知已发布!
  • kali下maven 的安装与配置
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元
  • 山西太原一居民小区发生爆炸,应急管理部派工作组赴现场
  • 体重管理门诊来了,瘦不下来的我们有救了?|健康有方FM
  • 结婚这件事,年轻人到底怎么想的?
  • 辽宁辽阳火灾3名伤者无生命危险
  • 解放日报社论:只争朝夕、不负重托,加快建成具有全球影响力的科技创新高地