SDN实战团技术分享(三十八):DPDK助力NFV与云计算

DPDK是一个旨在优化高性能包处理的软件库,适用于Linux环境,提供用户态驱动以减少中断开销和内存拷贝。DPDK通过核心与PMD模块实现高性能,利用IA多核处理器,支持网络虚拟化技术如SR-IOV和VIRTIO,提高云计算和NFV的性能。其优化包括内存管理、CPU亲和性、预取技术和硬件加速。DPDK广泛应用于DPI、IPsec处理,并在阿里巴巴、中国移动等企业中有实际应用案例。
摘要由CSDN通过智能技术生成

DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理。

什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加速软件库;对于开发者来说,它可能是一个实践包处理新想法的创新工场;对于性能调优者来说,它可能又是一个绝佳的成果分享平台。DPDK在主流Linux包含,比如Debian, Fedora,Redhat, Ubuntu, FreeBSD。

DPDK代码在www.dpdk.org上自由提交,软件发布时间是1年4次,分别是2017年2月、5月8月和11月。本质上,是一个软件优化。进一步讲,是对Linux的网络运行环境进行优化。

一张图示,大致包含这些软件模块,最核心的是Core与PMD。PMD- 基于轮询的用户态驱动。轮询,这一点很直接,为了避免中断上下文切换的开销。LINUX也采用该方法改进对大吞吐数据的处理,效果很好。

用户态驱动,在这种工作方式下,既规避了不必要的内存拷贝又避免系统调用。一个间接的影响在于,用户态驱动不受限于内核现有的数据格式和行为定义。有个假设: 很多应用都是在用户态,亲和性和独占,DPDK工作在用户态,线程的调度仍旧依赖内核。利用线程的CPU亲和绑定的方式,特定任务可以被指定只在某个核上工作。

好处是避免线程在不同核间频繁切换,核间线程切换容易导致因cache miss和cache write back造成的大量性能损失。如果更进一步地限定某些核不参与linux系统调度,就能使线程独占该核,保证更多cache hit的同时,也避免了同一个核内的多任务切换开销。

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

DPDK很强调软件优化,四处吸取营养,比如结构的cache line对齐(cache alignment),比如数据在多核间访问避免跨cache line共享(false sharing),比如适时地预取数据(prefeching),再如多元数据批量操作(multi-buffer)。简单说,可以在一个例子中阅读,著名的l3fwd(链接http://www.dpdk.org/browse/dpdk/tree/examples/l3fwd)

DPDK 大量利用IA新硬件技术,DDIO,SIMD等等。在网卡驱动上,花了很多力,充分挖掘网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值