DPDK之环境抽象层(1)

本文详细介绍了DPDK环境抽象层(EAL)的角色,特别是其在多核编程策略和内存管理中的作用。EAL提供通用接口访问底层资源,包括核心分配、内存初始化(如HugePage)、MemZone子系统以及任务分配。文章通过图解展示了核心分配流程,并解释了内存分配和释放的机制,强调了DPDK如何通过内存管理策略优化数据平面性能。
摘要由CSDN通过智能技术生成

概述

DPDK的设计目标是设计一个能够开发一个快速高效的数据平面应用的简单而完整的框架。用户能够自由地在DPDK的基础上构建他们自己的协议栈或其他系统。
基于以上这些现实,DPDK在架构设计、数据包处理以及平台的优化上做了很多相适应的优化和改进。DPDK在设计上采取一种简单的原则,所有的模块设计都围绕EAL这个核心来进行,通过EAL提供的同一接口,DPDK将各种硬件和实现上的差异对用户隐藏。DPDK的实现上还使用了run-to-completion这样一种模式,即从一条数据的接收到数据的处理都在一个核心上完成。这种策略的主要设计原因在于可以明显的减少因为大量的中断处理导致数据处理性能的下降。同时还支持另一种并发的模式,及某个核心接收的数据由另一个核心处理,这种模式用到了一种无锁循环队列的技术,也避免了锁机制带来的性能开销。这些具体将在以后的章节细讲。
这儿将主要讲述DPDK的多核编程策略和内存管理策略。

核心模块组成

这里写图片描述
上图展示了DPDK最核心的几个模块以及它们之间的基本关系,其中的每个模块都将在以后的章节逐一讲到,我们先从环境抽象层(EAL)说起。

环境抽象层

环境抽象层(EAL)的作用是提供访问底层资源(硬件或内存等)的通用接口,基于这点,现行的DPDK设计上提供在EAL模块提供了如下实现:

  • 加载和初始化
  • 分配核心
  • 系统内存保留
  • PCI地址空间抽象
  • 跟踪和Debug接口
  • 常用的工具函数,如自旋锁
  • CPU特性接口
  • 中断处理机制
  • 闹钟机制

加载和初始化

这个功能实现我们从一个图开始讲起,如下图所示,
这里写图片描述
上图描述了在调用rte_eal_init,rte_eal_remote_launch,以及rte_eal_mp_wait_lcore接口后所发生的事情,在rte_eal_init_里,对内存,log机制,pci等完成了必要的初始化,接着调用rte_eal_remote_launch为每个core分配任务,rte_eal_mp_wait_lcore则等待每个core的任务结束。对于初始化部分我们在对EAL的其它部分实现时讲到,这儿我们先看看是怎么为每个CPU分配任务的。

任务的分配——Launch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值