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

基于DPDK的高性能网络方案 - 指南

基于DPDK的高性能网络方案 - 指南

1、背景介绍

由于之前的应用收发数是基于PCIe方式的单机方案,存在扩展性的限制,现打算将其通过多块计算板卡基于网络进行方案改造,以达到带宽与性能线性拓展的能力。本文将基于DPDK与lwip协议栈详细阐述其中解决网络性能的方式,以基本满足应用业务目标。

2、架构分析与设计

2.1 业务特征描述

数据源端以RocketIO方式通过最多8根光纤进行接入,其中每根光纤带宽为6.4Gbps,这些数据过来后并不是立刻通过FPGA进行转发,而是会先进入FPGA侧的DDR中,由FPGA侧进行数据包的预处理(生成新数据包),然后发送到鲲鹏CPU端进行计算处理,处理完毕后再将结果通过DDS网络(非DPDK网络)进行发出。

鲲鹏CPU端网卡是100Gbps,而FPGA侧通常具备一路或两路发数端口,倘若是一路(简称40G网络应用),其流量范围是38.4Gbps(6根光纤)到40Gbps,假设是两路(简称80G网络应用),则达到51.2Gbps(8根光纤)到80Gbps,这其中峰值流量是瞬间产生的(由DDR累积产生),不会一直触发这么多,所以可认为平均流量是38.4Gbps或51.2Gbps。

2.2 数据模型

由RocketIO过来的数据,经FPGA侧,会进行数据格式的转换,如下图所示:

图1 数据格式转换图

首先,RocketIO过来的数据是按光纤拆分,每个数据包都包含一个控制字和多块资料,之后通过FPGA侧将这些光纤的数据进行合并,生成一个UDP报文进行发送,最后由鲲鹏CPU接收到的这些UDP报文将被组合成应用所需的大报文,其包含一个报文头和多份脉冲报文(也称之为帧)。

应用计算处理的基本单位是这个大报文,该大报文被处理的最大延迟要求是500ms,这个时间段包含大报文进到网卡、进行计算处理及产生结果凭借网卡发出。而整个系统(并非仅指该系统,而是指从雷达到鲲鹏CPU侧这一路上的所有系统)链路上的最大延迟是600ms。

2.3 关键技术

2.3.1 DPDK

一个开源的高性能数据包处理框架,它通过绕过Linux内核协议栈,直接在用户空间处理网络数据包,广泛被应用于得高速网络处理的领域。DPDK提供多种用户态驱动,结合轮询模式,将数据包从网卡直接DMA到用户态内存中,实现了零拷贝,大幅减少了内存操作。就是DPDK

不过,DPDK本身并不具备协议栈的处理能力,只负责祼数据包的高速收发处理,同时结合大页内存,提升内存访问效率,并且DPDK库本身提供了各线程调度方式。

2.3.2 LWIP

Lwip是一个专为资源受限的嵌入式体系设计的开源TCP/IP协议栈,提供了兼容传统Socket API的接口,具备可移植性。在内存管理方面,提供了专门的数据结构可用于消除冗余的数据拷贝,同时采用动态内存池和静态内存堆的管理模式,以平衡内存利用率和碎片难题。

Lwip通常以独立的内核线程运行,当网卡接收到材料后,底层驱动会将数据包封装成消息,投递到一个名为tcpip_mbox的邮箱中,当线程被唤醒后,会从邮箱中取出消息并进行解析,此种设计使得用户程序与内核协议栈通过进程间通信机制进行交互,彼此独立。

2.4 架构设计

通过结合DPDK与lwip两项关键技术点就形成了如下的架构:

图2 轮询架构设计

每个DPDK线程通过轮询网卡各自的队列,获得网络数据包,之后交给lwip进行TCP/IP协议栈(这里只用到UDP协议)的处理,剥离得到数据包中有用的报文。

不过,由于该应用体系数据模型的特殊性,带来了以下几方面的挑战:

  1. 如何快速接收数据包,并生成应用大报文
    为了保证应用数据包不能在FPGA侧的DDR发生溢出,需在CPU侧网卡端将其所有UDP数据包都能够收齐,同时还要将其组合成大报文,其间要是处理不够好,就会反向影响收包效率。
  2. 各个脉冲的顺序性如何进行并行分割

由于脉冲是一个接着一个被处理的,因此貌似天然的是串行化的流程,但考虑到应用计算处理单元是大报文,于是可基于该方面进行并行化处理。但这种分割如何与调度进行结合起来处理,仍是一大挑战。

基于这些挑战,提出了需从FPGA发数模型、线程模型和多核亲和性这三个方面予以解决。整个调度流程如下图所示:

图3 调度流程图

2.4.1 FPGA发数模型

为了配合网络软件层的处理模型,在FPGA侧发数阶段,需要按光纤进行发数,如下图所示:

图4 FPGA发数模型

在40G网络,由于只有一路端口,发数时就会将整个光纤(1-4)一起发出,而在80G网络,存在两路端口,因此按光纤进行了分区发送,其中每路只发送4个光纤的数据,且每路的报文头是相同的。另外,FPGA侧每次在发送这些大报文时,其中最大报文大小为64M。

2.4.2 线程模型

为了充分发挥网卡带宽,需结合网卡RSS的特性进行多队列收数,如图3所示,物理网卡硬件都带有多个队列,队列个数取决于网卡本身。其中每个队列由独立的一个线程负责接收数据包、组合大包等操控,由于各个线程运行的独立性,从而形成线性扩展能力,以应对不同网络带宽的应用。

另一方面,各个队列收到的数据包可以并行地发生数据拷贝运行,将其拷贝到由应用分配的缓冲区中,这样就提高了应用计算模块所需数据准备的效率。

2.4.3 多核亲核性处理

为了提高应用计算的并行度及保证线程处理的独立性,需要对网络流量进行分割,如图3所示,将ARP/IGMP流量定位到队列0中,将业务流量按大报文进行负载均衡,分别投递到队列1到队列N(N由网卡硬件决定)中。这样就充分利用了CPU及网卡队列的并发能力。

http://www.jsqmd.com/news/370501/

相关文章:

  • 云上Openclaw(Clawdbot)快速接入腾讯云智能体开发平台ADP指南
  • 实用指南:Redis底层原理-持久化【详细易懂】
  • 2026年抗过敏猫粮产品推荐:基于成分功效与喂养实证维度下的权威榜单 - 品牌推荐
  • 2026年洗地机产品终极评测(权威数据与市场趋势双重背书)| 家庭选购避坑全指南 - 品牌推荐
  • 2026年儿童牙膏品牌推荐:基于2026年成分安全趋势评测,涵盖幼儿与学龄儿童核心场景 - 品牌推荐
  • jvm相关概念
  • 期货套保系统指标监控面板设计与应用
  • Mysql 5.7 windows安装 zip安装
  • 期现对冲交易系统合同状态监控功能解析
  • 利用LuatOS的errDump功能实现运行时错误追踪与上报
  • 洗地机哪个品牌好?2026年洗地机产品推荐与排名,解决维护与性价比核心痛点 - 品牌推荐
  • 铝箔胶带怎么选?基材纯度、耐候性与定制化服务Top5厂家全攻略 - 深度智识库
  • OpenClaw从本地运行时到云端推理的完全接管机制与安全边界
  • 2026银川酒店民宿装修推荐哪家?专业工装 实力品牌 省心落地指南 - 宁夏壹山网络
  • 2026年度儿童牙膏品牌TOP5综合评估与选型指南 - 品牌推荐
  • 2026年2月,为你推荐评价好的资质代办公司,代办营业执照/注册公司/资质代办/代办公司/公司注册,代办公司推荐 - 品牌推荐师
  • 杭州GEO优化推荐:2026年提升搜索可见度的优选,GEO优化/GEO优化服务,GEO优化实力厂家找哪家 - 品牌推荐师
  • 2026年度儿童牙膏品牌推荐榜单:成分安全与防蛀功效双维度综合评估 - 品牌推荐
  • 2026年儿童牙膏品牌推荐:基于分龄护理趋势评价,针对龋齿与成分焦虑提供选购推荐 - 品牌推荐
  • 告别论文恐惧症!实测6款免费AI写论文工具,写作无压力,初稿轻松搞定! - 麟书学长
  • a16z 领投 AI 伴侣 Shizuku AI:让社区参与 AI 角色成长;夸克 AI 眼镜新增直播功能丨日报
  • 开封金盛机械:定制种子加工生产线 全系列设备赋能全球 - 朴素的承诺
  • 电气铁路柔性过分相:从供电臂a到供电臂b的换相之旅
  • win11 wsl2安装Ubuntu详细步骤
  • 使用 Visual Studio 2022 其他语言乱码问题
  • 4090模型切换
  • wireshark
  • 基于DirectX和C#的三维显示控件实现
  • Codeforces Round 1078 (Div. 2) A,B,C,D,E,F1个人题解 - CUC
  • Distributed Hybrid Parallelism for Large Language Models Comparative Study and System Design Guide