DPDK 核心技术-用户态驱动

在传统的 x86 网络协议栈中,网络报文通过网卡硬件接收/发送,都需要发送中断到 CPU,一次中断需要保存/恢复处理器状态,并运行中断服务程序,整个过程至少需要 300 个处理器时钟周期。对于需要处理大规模数据的高性能网络报文处理框架,频繁的中断降低了网络应用的处理速度,成为了性能瓶颈。

为了减少中断开销,DPDK 抛弃了传统的内核中断,采用轮询模式驱动( poll mode driver,PMD) 的方式直接操作网卡的接收和发送队列,将报文直接拷贝到用户空间,不再经过内核协议栈。

DPDK 的用户态 I/O( user space I/O,UIO) 驱动技术为PMD 提供了支持。其主要功能是拦截中断,并重设中断回调行为,从而绕过内核协议栈后续的处理流程。图描述了UIO 技术的基本原理以及内核与用户空间的关系。它将硬件操作映射到用户空间,对用户空间提供文件接口。比如在图中,当注册一个 UIO 设备 uioX,就会出现文件 /dev /uioX,对该文件的读写就是对设备内存的读写。

UIO 技术中仍然有一小部分驱动程序运行在内核空间中,它们主要负责两个任务: ①分配和记录设备需要的资源和注册 UIO 设备; ②处理一些必须在内核空间实现的小部分中断应答。

UIO 技术使得内核空间与用户空间的内存交互不用进行拷贝,而是只做控制权转移,减少了报文的拷贝过程。即具有零拷贝、无系统调用的好处,同步处理也减少上下文切换带来的 Cache miss。从中断与拷贝中节省的资源和时延,有效地运用在报文处理流程中,提高了报文的处理、转发效率。

综上,DPDK 舍弃了内核中断,提供全用户态的驱动,拥有高效的内存管理机制,报文直接通过直接内存存取( direct memory access,DMA) 传输到用户态处理,减少内存拷贝次数。

DPDK 核心技术-用户态驱动_第1张图片

你可能感兴趣的:(DPDK,linux,内核,网络)