DPDK EAL

DPDK全程是Intel Data Plane Development Kit,是一个数据平面开发集。

DPDK的主要思想

  1. 绕过内核,实现Zero Copy
  2. 使用UIO驱动屏蔽硬中断,并采用PMD主动轮询,减少Cache Miss和切换上下文的开销
  3. 使用大页内存,减少TLB Miss
  4. 减少共享,降低锁竞争产生的开销
  5. 数据主动预加载,在访问随机数据前将其主动推送至Cache,降低Cache Miss。
  6. 为线程绑定固定的CPU,提高CPU亲和性。避免任务切换的开销。

在这里插入图片描述
DPDK整体架构及依赖关系
在这里插入图片描述

EAL

EAL(Environment Abstraction Layer),环境抽象层。在使用dpdk之前,需要指定其使用的具体环境,根据环境编译对应的库文件。是所有DPDK组件实现的基础。
应该可以这样理解,EAL的作用就是将许许多多底层资源的操作以及一些常用的功能例如日志、计数器等抽象包装成一个个接口,以实现调用。
在程序开始运行之前,所有硬件资源都会围绕core构成一个个unit,每个unit都可以完成数据包处理操作。
整个程序中不支持调度,即不支持中断,因为这回显著降低效率。所有任务都通过poll方式实现。
DPDK为使用人员提供了两种处理模型,一种是RTC模型,一种是pipeline模型。
pipeline模型中核分为rx核和tx核,rx核负责从网卡收包、初步解析、以及分发给对应的tx核。
rtc模型则是一个数据包从收取到发送全部使用同一个核。
TGW EIP使用的是RTC模型,因为EIP是无状态网关,不需要保留连接信息,所有数据包被每个核处理都是等价的,使用RTC模型效率更高。
TGW LD使用的是pipeline模型,因为LD需要保存连接信息,同一个流的出入包需要被同一个转发核处理,而TGW使用的是GRE封装,连接信息可能在外层IP、内层IP、甚至在GRE头中,目前的智能网卡分流无法满足我们的需求,因此需要rx核进行分流,再由tx核进行转发。
在这里插入图片描述
DPDK初始化及启动流程

内存分配:动态分配和传统分配两种模式,其中动态模式只在Linux中支持。动态模式使用rte_malloc分配内存,并在使用后通过rte_free释放。

日志:

lcore是一个EAL线程的另一种称呼,一个lcore可以绑定一个或多个CPU,为了提高运行效率,lcore与CPU通常为一对一绑定关系,因此一个lcore_id也可以视为一个CPU id。

lcore与CPU的绑定:
–lcores=’<lcore_set>[@cpu_set] [ ,<lcore_set> [@cpu_set], …] ’

例如:
–lcores=‘1,2@(5-7),(3-5)@(0,2),(0,6),7-8’ which means start 9 EAL thread;
lcore 0 runs on cpuset 0x41 (cpu 0,6);
lcore 1 runs on cpuset 0x2 (cpu 1);
lcore 2 runs on cpuset 0xe0 (cpu 5,6,7);
lcore 3,4,5 runs on cpuset 0x5 (cpu 0,2);
lcore 6 runs on cpuset 0x41 (cpu 0,6);
lcore 7 runs on cpuset 0x80 (cpu 7);
lcore 8 runs on cpuset 0x100 (cpu 8).

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DPDK (Data Plane Development Kit) 是一个高性能的网络应用开发框架,它专注于加速数据平面操作,如网络转发。`testpmd` 是 DPDK 的一个实用工具,用于测试和演示 DPDK 驱动的各种功能,特别是网卡的加速。 `EAL` 是 DPDK 架构中的一个重要部分,代表 `Early Abstraction Layer`,它是 DPDK 进程的初始化阶段。在运行 `dpdk-testpmd` 命令时,EAL 命令用于配置 DPDK 环境,包括硬件选择、内存分配、日志设置等。 一些常见的 `dpdk-testpmd EAL` 命令参数示例: 1. `-n` 或 `--nb-cores`: 指定使用多少个CPU核心来处理数据包,例如 `-n4` 表示使用4个核心。 2. `-c` 或 `--socket-mem`: 设置每个CPU核心的内存分配,如 `-c1024,2048` 分配1GB和2GB内存给每个核心。 3. `-l` 或 `--log-level`: 设置日志级别,如 `-lerror` 只显示错误信息。 4. `-i` 或 `--adapter`: 选择要使用的网卡,如 `-iigbxe` 选择Intel iGbE网卡。 5. `-P` 或 `--proc-type`: 设定进程类型,如 `auto` 自动检测,`huge` 使用大页内存。 完整的 `dpdk-testpmd EAL` 命令可能如下所示: ```bash sudo dpdk-testpmd -- -n <cores> --socket-mem <socket_memory> -l <log_level> --adapter <nic> --proc-type <proc_type> ``` 要了解更多关于 `dpdk-testpmd` EAL的命令选项及其作用,请查阅DPDK官方文档或在线教程,因为这些参数和行为可能会随DPDK版本更新而变化。你对哪个特定参数感兴趣?或者想要了解如何配置哪种类型的网络设备?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值