内核处理网络数据包弊端
中断处理
处理大量网络数据包时,出现频繁的硬件中断,产生较高的性能开销。
内存拷贝
网络数据包从网卡到应用程序流程是,数据从网卡通过DMA传到内核缓冲区,从内核态拷贝到用户态。
上下文切换
硬件中断、多线程、锁竞争产生上下文切换开销。
CPU缓存失效
数据包处理可能跨多个CPU,例如数据包中断在cpu0,内核态处理在cpu1,用户态处理在cpu2,跨多核容易造成CPU缓存失效,影响性能。
内存管理
传统服务器内存页4K,内存访问速度慢,容易出现缺页异常。
DPDK优势
UIO
通过UIO能够拦截中断,重设中断回调行为,绕过内核协议栈处理流程,用户态完成数据包处理。
内核网络数据包处理流程
硬件中断->取包分发至内核线程->软件中断->内核线程在协议栈中处理包->处理完毕通知用户层->用户层收包->网络层->逻辑层->业务层
DPDK网络数据包处理流程
硬件中断->放弃中断流程->用户层通过设备映射取包->进入用户层协议栈->逻辑层->业务层
内存池技术
在用户态实现了内存池,内核态和用户态内存交互不拷贝,只做控制权转移。收发数据包时,减少了内存拷贝。
大页内存管理
使用1G或者2M大页内存替代普通内存,大页内存不受内核管理,减少缺页异常。
无锁环形队列
基于内核的无锁环形缓冲kfifo实现无锁环形队列。
poll-mode网卡驱动
DPDK网卡驱动完全抛弃中断模式,基于轮询方式收包,避免中断。
NUMA
内存分配上通过proc提供的内存信息,使CPU核尽量使用靠近其所在节点的内存,避免了跨NUMA节点远程访问内存的性能问题。
CPU亲和性
网卡多队列绑核,线程绑核,减少上下文切换,避免CPU缓存失效。
多核调度框架
DPDK基于多核架构,主核完成模块初始化,从核处理业务。
参考资料
https://www.cnblogs.com/linbingfeng/p/16793926.html
标签:中断,基本原理,内核,DPDK,数据包,CPU,内存 From: https://www.cnblogs.com/WJQ2017/p/17675228.html