Dpdk介绍

Dpdk绕过了Linux内核态协议栈,以提升报文处理效率。直接截获网卡的原始数据,让用户自行处理,解析协议等等。

网卡是将数字信号与模拟信号进行转换的设备。

可用作:防火墙、测试工具、CDN(对网络要求比较高的场景都可以使用)

特点:

1. 用户态驱动(PMD:Poll Mode Driver)

传统网卡驱动运行在内核态,DPDK使用轮询模式驱动(PMD) 替代中断模式:

应用程序直接调用PMD API,主动轮询网卡接收队列(Rx Queue),而非等待网卡中断通知;

避免了"中断风暴"(大量数据包到来时的频繁中断处理开销),同时消除了内核态到用户态的上下文切换。

2. 大页内存(HugePages)

默认Linux内存页大小为4KB,DPDK要求使用2MB/1GB的大页内存

减少TLB( Translation Lookaside Buffer,地址转换缓存)的缺失率,加速虚拟地址到物理地址的转换,提高吞吐量;

降低内存管理开销,提升内存访问效率。

3. 零拷贝(Zero-Copy)

传统流程中数据包需从"网卡DMA缓冲区→内核缓冲区→用户缓冲区"三次拷贝,DPDK通过以下方式实现零拷贝:

网卡直接通过DMA将数据写入用户态预先分配的大页内存缓冲区

应用程序直接从该缓冲区读取数据,无需中间拷贝。

4. CPU亲和性(CPU Affinity)

将DPDK线程绑定到特定的CPU核心(Core Affinity):

避免线程在不同核心间迁移导致的缓存失效(Cache Miss);

充分利用多核CPU的并行处理能力,实现"每个核心处理一个队列"的高效模型。

5. 无锁队列与环形缓冲区(Ring Buffer)

DPDK提供多生产者-多消费者(MPMC)的无锁环形队列,用于线程间或组件间的数据传递:

基于原子操作实现同步,避免锁竞争的开销;

高效支持高并发场景下的数据包流转。

DPDK适用于对网络性能、延迟、吞吐量要求极高的场景。(云计算,高性能计算,网络安全等)

DPDK可以只处理特点的协议,然后将其他的协议再写回协议栈,继续使用内核的协议栈进行解析。

UDPDPDK最擅长的协议之一

UDP是无连接、轻量的传输层协议,无需三次握手、重传机制,天生适合低延迟场景。DPDK可直接在用户态解析UDP头部,快速提取数据(如游戏、直播、金融行情的UDP数据包)。

TCP :虽然TCP比UDP复杂(需处理连接、重传、拥塞控制),但DPDK也支持TCP的用户态实现(如librte_net_tcp库),用于高性能TCP代理、负载均衡等场景。

DPDK的接收发送队列怎么理解?好像有8个接口

DPDK中,队列是网卡与应用程序之间传递数据包的"缓冲区通道"

接收队列(Rx Queue):网卡将收到的数据包存入队列,应用程序从队列中读取并处理;

发送队列(Tx Queue):应用程序将待发送的数据包放入队列,网卡从队列中取出并发送到网络。

每个队列对应一组内存缓冲区(通常是DPDK预分配的大页内存),数据包在队列中以"指针"形式存在(避免拷贝),实现高效流转。

每一个物理接口有8个队列,有的会支持16、32队列。

多队列优势:

  1. 多核并行处理。
  2. 低延迟
  3. 高可靠。

大小端的处理是什么情况?

大小端是"多字节数据的存储顺序"问题,网络协议用大端,x86主机用小端;DPDK必须处理大小端转换,否则会解析错误网络数据包;DDK提供rte_byteorder.h中的函数,使用时只需调用对应函数即可。

基于DPDK实现eth、ip、udp、tcp协议;基于DPDK实现dns server都可以写在简历中。

环境配置

cd ~/share/dpdk/dpdk-stable-19.08.2

sudo su

exportRTE_SDK=/home/king/share/dpdk/dpdk-stable-19.08.2/

export RTE_TARGET=x86_64-native-linux-gcc

ifconfig eth0

ifconfig eth0 down

./usertools/dpdk-setup.sh

依次输入:43、44 、45、46(512)、47(512)、49(eth0 地址)、60

环境准备就绪,eth0已经被dpdk接管,使用命令ifconfig -a也看不到eth0

重启后cd ~/share/dpdk/dpdk-stable-19.08.2

ifconfig

再次配置一下,只需要43 44 49即可

然后返回代码目录

更改Makefile里的参数SRCS-y := ustack_01_re.c

make

sudo ./build/ustack

Windows配置

Windows shell:

arp -a

netsh i i show in

netsh -c i i add neighbors 19 172.xx.xx.xx 00-0c-xx-xx-xx-xx

netsh -c i i add neighbors 19 10.xx.xx.xx 00-0c-xx-xx-xx-xx

172.xx.xx.xx(eth0的IP地址) 00-0c-xx-xx-xx-xx(eth0的Mask地址)

报错" Cannot use IOVA as 'PA' since physical addresses are not available"

Debug:

没有权限,执行文件前加sudo

卡在这一个多小时,如果直接将上面句话百度,就可以解决。但我问了Ai,给出"./build/ustack -l 0-7 --iova-mode=va",然后报错 巨页 设置有问题,改巨页的问题改了一个多小时,还恢复了快照!!!

虚拟机配置

使用DPDK时, 一定要支持多队列网卡,所修改的 zerovoice.vmx中的vmxnet3 就是为了支持多队列网卡。

添加:

ethernet0.virtualDev = "vmxnet3"

ethernet0.wakeOnPcktRcv = "TRUE"

拟机配置

使用DPDK时, 一定要支持多队列网卡,所修改的 zerovoice.vmx中的vmxnet3 就是为了支持多队列网卡。

添加:

ethernet0.virtualDev = "vmxnet3"

ethernet0.wakeOnPcktRcv = "TRUE"

相关推荐
风送雨20 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
model20051 天前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
yuhaiqun19891 天前
学服务器训练AI模型:5步路径助力高效入门
运维·服务器·人工智能·笔记·机器学习·ai
阿杰 AJie1 天前
主流传输 /通信协议的【使用场景 + 详细使用说明】大全
服务器·tcp/ip
工程师老罗1 天前
龙芯2k0300 PMON取消Linux自启动
linux·运维·服务器
千百元1 天前
centos如何删除恶心定时任务
linux·运维·centos
skywalk81631 天前
网站证书自动续订失败的问题解决,原来是续订指令certbot renew出错,导致crontab定时任务续订失败
运维·服务器·证书·certbot
额呃呃1 天前
游戏服务器和一般高性能服务器的区别
运维·服务器·游戏
liwulin05061 天前
【JAVA】创建一个不需要依赖的websocket服务器接收音频文件
java·服务器·websocket