DPDK
DPDK网络层:
硬件中断->放弃中断流程;
用户层通过设备映射取包->进入用户层协议栈->逻辑层->业务层;
核心技术:
1)将协议栈上移到用户态,利用UIO技术直接将设备数据映射拷贝到用户态
2)利用大页技术,降低TLB cache miss,提高TLB访问命中率
3)通过CPU亲和性,绑定网卡和线程到固定的core,减少cpu任务切换
4)通过无锁队列,减少资源的竞争
优势:
1)减少中断次数;
2)减少内存拷贝次数
3)绕过linux的协议栈,用户获得协议栈的控制权,能够定制化协议栈以降低复杂度;
劣势:
1)内核栈转移至用户层增加了开发成本
2)低负荷服务器不实用,会造成cpu空转
RDMA
网卡硬件收发包并进行协议栈封装/解析,然后将数据存放到指定内存地址,而不需要CPU干预。
核心技术:
协议栈硬件offload
优势:
1)协议栈offload,解放cpu
2)减少了中断和内存拷贝,降低时延
3)高带宽
劣势:
1)特定网卡才支持,成本开销相对较大;
2)RDMA提供了完全不同于传统网络编程的API,一般需要对现有APP进行改造,引入额外开发成本
总结
相同点:
1)两者均为kernel bypass技术,可以减少中断次数,消除内核态到用户态的内存拷贝;
相异点:
1)DPDK是将协议栈上移到用户态,而RDMA是将协议栈下沉到网卡硬件,DPDK仍然会消耗CPU资源;
2)DPDK的并发度取决于CPU核数,而RDMA的收包速率完全取决于网卡的硬件转发能力
3)DPDK在低负荷场景下会造成CPU的无谓空转,RDMA不存在此问题
4)DPDK用户可获得协议栈的控制权,可自主定制协议栈;RDMA则无法定制协议栈