dpdk协议栈之udp架构优化

dpdk优势

传统网络架构与 DPDK(Data Plane Development Kit)网络架构之间存在许多区别,而 DPDK 的优势主要体现在以下几个方面:

数据包处理性能:传统网络架构中,网络数据包的处理通常由操作系统的网络协议栈负责,涉及多次内核态和用户态的切换,以及复杂的协议处理。这种方式对于高速数据包处理来说会产生较大的性能开销。而 DPDK 提供了一个用户空间的数据平面库,绕过了操作系统的网络协议栈,直接操作硬件和内存,实现了零拷贝和零中断的高效数据包处理,从而显著提升了数据包处理性能。

硬件抽象:传统网络架构中,网络设备的驱动程序是与特定硬件和操作系统紧密耦合的,不同的硬件需要编写不同的驱动程序。而 DPDK 提供了通用的抽象层,使得网络设备驱动可以更容易地在不同的硬件和操作系统上移植和使用,降低了硬件的依赖性。

高性能队列:传统网络架构中,操作系统提供的网络队列通常具有较高的延迟和较低的吞吐量,限制了数据包处理的性能。而 DPDK 采用基于Linux 内核的无锁环形缓冲 kfifo优化的无锁环形队列,针对单个或多个数据包生产者、单个数据包消费者的出入队列提供无锁机制,有效减少系统开销。

多核支持:传统网络架构中,由于操作系统的网络协议栈通常在单个核心上运行,无法充分利用多核处理器的性能。而 DPDK 支持多核并行处理,能够将数据包处理任务分配到多个核心上并行执行,从而充分利用多核处理器的性能优势。

采用HugePage:减少TLB Miss,降低访存开销;

采用精巧的内存池技术 :创建Mbuf直接映射到实际报文,内核空间和用户空间的内存交互

不进行拷贝,只做控制权转移,避免拷贝开销;

利用CPU 亲和性 :将线程绑定到指定CPU上,一方面减少了CPU线程间切换的开销,另一方

面避免了 CPU 缓存的局部失效性,增加了 CPU 缓存的命中率;

总体而言,DPDK 的优势在于其高性能、低延迟、硬件抽象和多核支持等特点,使得它成为高性能网络应用的理想选择。它被广泛应用于网络功能虚拟化、数据中心网络、云计算等场景,能够实现高速数据包的处理和转发,满足现代网络对性能和效率的要求

架构优化

主要采用三线程以及两组环形队列进行异步处理提升性能,此外,也很好的体现分层思想,具体架构如下:

因为暂时的功能不多,先实现上图中的框架,之后有新功能再不断完善。

这次代码太多先上伪代码

c 复制代码
int pkt_process{
	while (1) {
		udp_process(); //处理UDP包
		rte_ring_mp_enqueue(); //将ring->in中的数据内容 送到新的环形队列host->rcvbuf中
		pthread_cond_signal(&host->cond);//条件变量 通知udp server 有数据需要处理
		udp_out();//从host->sndbuf中取出数据来封装响应的udp包,并将包放入环形队列ring->out中
	}
}

int udp_server_entry(){
	nsocket();
	nbind();
	while (1) {
		nrecvfrom();//从host->rcvbuf取数据
		nsendto();//将要发送的数据写入host->sndbuf中
	}
}

int main{
	//创建环形队列,准备收包
	ring->in = rte_ring_create("in ring",RING_SIZE,rte_socket_id(),RING_F_SP_ENQ | RING_F_SC_DEQ);
	ring->out = rte_ring_create("out ring",RING_SIZE,rte_socket_id(),RING_F_SP_ENQ | RING_F_SC_DEQ);
	
	//启动用户态协议栈中处理数据包的线程
	rte_eal_remote_launch(pkt_process,mbuf_pool,lcore_id);
	
	//启动udp server 线程
	rte_eal_remote_launch(udp_server_entry,mbuf_pool,lcore_id);
	
	while(1){
		//将收到的包直接送入环形队列ring->in中
		rte_eth_rx_burst();
		rte_ring_sp_enqueue_burst();
		
		//从环形队列ring->out中取出数据包发送
		rte_ring_sc_dequeue_burst();
		rte_eth_tx_burst();
	}
}
相关推荐
tan77º1 分钟前
【Linux网络编程】Socket - UDP
linux·服务器·网络·c++·udp
Codebee15 分钟前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构
掘金-我是哪吒25 分钟前
分布式微服务系统架构第158集:JavaPlus技术文档平台日更-JVM基础知识
jvm·分布式·微服务·架构·系统架构
JohnYan33 分钟前
模板+数据的文档生成技术方案设计和实现
javascript·后端·架构
Da_秀1 小时前
软件工程中耦合度
开发语言·后端·架构·软件工程
用户21960094442852 小时前
利用布隆过滤器设计亿级用户视频浏览历史过滤系统:方案详解与内存预估
架构
Kookoos2 小时前
ABP VNext + Tye:本地微服务编排与调试
微服务·云原生·架构·tye
秋千码途3 小时前
小架构step系列06:编译配置
架构
qq_171538854 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
网络·网络协议·tcp/ip
打好高远球5 小时前
如何用AI破解相亲信息不对称
架构