dpdk探究1-理解dpdk的运行逻辑

DPDK介绍

DPDK主要功能:利用IA(intel architecture)多核处理器进行高性能数据包处理

Linux下传统的网络设备驱动包处理的动作可以概括如下:

  • 数据包到达网卡设备
  • 网卡设备依据配置进行DMA操作
  • 网卡发送中断,唤醒处理器
  • 驱动软件填充读写缓冲区数据结构
  • 数据报文到达内核协议栈,进行高层处理
  • 如果最终应用在用户态,数据从内核搬移到用户态
  • 如果最终应用在内核态,在内核继续进行

频繁的中断会降低系统处理数据包的速度。

DPDK可以很好的在英特尔架构下执行高性能网络数据包处理,主要使用了以下技术:

  • 轮询
    • 避免中断上下文切换的开销
  • 用户态驱动(UIO驱动)
    • 规避了不必要的内存拷贝,避免了系统调用。
  • 亲和性与独占
    • DPDK工作在用户态,线程的调度依然依赖内核,利用线程的CPU亲和性绑定的方式,特定任务可以被指定只在某个核上工作
  • 降低访存开销
    • 如内存大页,内存多通道的交错访问,NUMA系统的使用
  • 软件调优
    • 内存对齐,数据预取,避免跨cache行共享
  • 利用IA新硬件技术
  • 充分挖掘网卡的潜能

UIO驱动简介

UIO提供了用户态驱动开发的框架,主要是由于驱动依赖的内核函数和宏因内核版本变化,导致驱动可能也需要改。所以改为用户态驱动来完成任务。

dpdk中的驱动需要定期检查设备是否有中断产生,并不是用来收发数据。另外通过mmap来操作设备的设备内存。UIO框架本身要处理设备的中断,中断只能在内核态处理,uio的中断处理函数也只是增加中断的计数而已

mmap可以处理物理内存映射,逻辑内存,内核虚拟内存映射。 UIO也是通过mmap将设备的内存映射到用户空间,当然用户态也可以通过/sys/class/uio/uioX/maps/mapX来实现对设备内存的访问,所以发送和接受数据是通过操作设备的内存来完成的。

DPDK框架简介

  1. 核心库Core Libs:提供系统抽象,打野内存,缓存池,定时器和无锁环等基础组件
  2. PMD库:提供全用户态的驱动,以便通过轮询和线程板顶得到极高的网络吞吐
  3. Classify库:支持精确匹配,最长匹配和通配符匹配,提供常用包处理的查表操作
  4. QoS库:提供网络服务质量相关组件,如限速和调度

解读简单的示例程序,初步了解DPDK

解读helloworld程序,探究DPDK运行思路

#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <sys/queue.h>
#include <rte_memory.h>
#include <rte_launch.h>
#include <rte_eal.h>
#include <rte_per_lcore.h>
#include <rte_lcore.h>
#include <rte_debug.h>
static int
lcore_hello(__attribute__((unused)) void *arg)
{
        unsigned lcore_id;
        lcore_id = r
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值