DPDK 学习笔记-原理

DPDK不是用了什么凭空产生的特殊技术,更多的是从工程优化角度的迭代和最佳实践的融合。

轮询,这一点很直接,可避免中断上下文切换的开销。


用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免了系统调用。一个间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。对mbuf 头格式的重定义、对网卡DMA 操作的重新优化可以获得更好的性能。而用户态驱动也便于快速地迭代优化,甚至对不同场景进行不同的优化组合。


亲和性与独占,DPDK 工作在用户态,线程的调度仍然依赖内核。利用线程的CPU 亲和绑定的方式,特定任务可以被指定只在某个核上工作。好处是可避免线程在不同核间频繁切换,核间线程切换容易导致因cache miss 和cache write back 造成的大量性能损失。如果更进一步地限定某些核不参与Linux 系统调度,就可能使线程独占该核,保证更多cache hit 的同时,也避免了同一个核内的多任务切换开销。


降低访存开销,网络数据包处理是一种典型的I/O 密集型(I/O bound)工作负载。无论是CPU 指令还是DMA,对于内存子系统(Cache+DRAM)都会访问频繁。利用一些已知的高效方法来减少访存的开销能够有效地提升性能。比如利用内存大页能有效降低TLB miss,比如利用内存多通道的交错访问能有效提高内存访问的有效带宽,再比如利用对于内存非对称性的感知可以避免额外的访存延迟。


软件调优,调优本身并不能说是最佳实践。这里其实指代的是一系列调优实践,比如结构的cache line 对齐,比如数据在多核间访问避免跨cache line 共享,比如适时地预取数据,再如多元数据批量操作。


利用IA 新硬件技术,IA 的最新指令集以及其他新功能一直是DPDK 致力挖掘数据包处理性能的源泉。拿Intel® DDIO 技术来讲,这个cache 子系统对DMA 访存的硬件创新直接助推了性能跨越式的增长。有效利用SIMD(Single Instruction Multiple Data)并结合超标量技术(Superscalar)对数据层面或者对指令层面进行深度并行化,在性能的进一步提升上也行之有效。另外一些指令(比如cmpxchg),本身就是lockless 数据结构的基石,而crc32 指令对与4 Byte Key 的哈希计算也是改善明显。


充分挖掘网卡的潜能,经过DPDK I/O 加速的数据包通过PCIe 网卡进入系统内存,PCIe外设到系统内存之间的带宽利用效率、数据传送方式(coalesce 操作)等都是直接影响I/O 性能的因素。在现代网卡中,往往还支持一些分流(如RSS,FDIR 等)和卸载(如ChksumTSO 等)功能。DPDK 充分利用这些硬件加速特性,帮助应用更好地获得直接的性能提升。


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值