# 浅析DPDK内存管理:Mempool

文章目录

    • 前言
    • Mempool工作机制
    • Mempool数据结构
    • rte_mempool_ops
    • Mempool操作接口
      • rte_mempool_create:创建Mempool
      • rte_mempool_get:申请对象
      • rte_mempool_put:释放对象
    • 相关参考

前言

DPDK提供了一套内存池管理机制,以提供高效分配固定大小对象的能力。

Mempool工作机制

Mempool内部维护两级空闲对象缓存:Per-Core缓存和共享缓存,其中:

  • Per-Core缓存为每个在用的CPU core分配了专用的空闲对象池,避免了当前运行CPU core分配内存时与其它CPU core的冲突;
  • 共享缓存提供了在Per-Core缓存不足时,仍能分配空闲对象的能力。

Mempool工作机制示意如下:
在这里插入图片描述

应用申请对象时,Mempool优先从Per-core缓存进行分配,在Per-core缓存不足时,从共享池中进行分配。Per-core缓存和共享池都是基于DPDK Ring数据结构进行组织,并使用Ring接口完成空闲对象的分配与回收。

Mempool数据结构

Mempool核心数据结构关联如下:
在这里插入图片描述

  • rte_mempool:Mempool管理结构;
  • rte_mempool_cache:Per-core缓存,维护了一个共享对象的数组队列;
  • rte_mempool_memhdr:管理共享缓存的后端内存;
  • rte_mempool_objhdr:Object管理结构,位于对象头部。

rte_mempool_ops

DPDK Mempool在创建时,会为Mempool初始化一套回调接口,通过这套接口,上层应用可以自定义共享缓存的构建方式,并根据业务场景定制共享缓存对象的的分配和释放实现。rte_mempool_ops结构定义如下:

struct rte_mempool_ops {char name[RTE_MEMPOOL_OPS_NAMESIZE]; rte_mempool_alloc_t alloc; rte_mempool_free_t free;rte_mempool_enqueue_t enqueue; rte_mempool_dequeue_t dequeue; rte_mempool_get_count get_count; rte_mempool_calc_mem_size_t calc_mem_size;rte_mempool_populate_t populate;rte_mempool_get_info_t get_info;rte_mempool_dequeue_contig_blocks_t dequeue_contig_blocks;
} __rte_cache_aligned;

DPDK框架使用rte_mempool_ops_table变量维护所有类型的Mempool回调接口,应用可以通过RTE_MEMPOOL_REGISTER_OPS宏进行注册。

struct rte_mempool_ops_table rte_mempool_ops_table = {.sl =  RTE_SPINLOCK_INITIALIZER,.num_ops = 0
};#define RTE_MEMPOOL_REGISTER_OPS(ops)				\RTE_INIT(mp_hdlr_init_##ops)				\{							\rte_mempool_register_ops(&ops);			\}

DPDK框架默认内置了几种类型的操作回调,这些回调主要利用DPDK Ring来对共享缓存对象进行组织,同时使用Ring提供的操作接口来分配和释放对象。

RTE_MEMPOOL_REGISTER_OPS(ops_mp_mc);
RTE_MEMPOOL_REGISTER_OPS(ops_sp_sc);
RTE_MEMPOOL_REGISTER_OPS(ops_mp_sc);
RTE_MEMPOOL_REGISTER_OPS(ops_sp_mc);

Mempool操作接口

rte_mempool_create:创建Mempool

在这里插入图片描述

rte_mempool_get:申请对象

rte_mempool_get负责完成从一个Mempool中需求对象的的分配。
在这里插入图片描述

  1. Per-core缓存维护了一个空闲对象的数组队列。当Per-core缓存能满足分配需求时,则直接操作Per-core缓存区域获取;
  2. 若Per-core缓存无法满足要求,则先从共享缓存中获取超量的对象填充Per-core缓存,最后再从Per-core缓存中分配。

rte_mempool_put:释放对象

rte_mempool_put负责将不使用的对象释放回Mempool中。
在这里插入图片描述

  1. Per-core缓存维护的空闲对象数组,空间比Per-core支持分配的大小要大的多,可以用来临时存放上层应用释放的对象;
  2. 当Per-core缓存已存放的对象数量超过配置的阀值时,需要刷到共享缓存中。

相关参考

  • Mempool Library

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/488178.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XFF伪造 [MRCTF2020]PYWebsite1

打开题目 直接查看源码 看到一个./flag.php 访问一下 购买者的ip已经被记录,本地可以看到flag,那么使用xff或者client-ip伪造一下ip试试 bp抓包 加一个X-Forwarded-For头 得到flag

Three.js加载PLY文件

这是官方的例子 three.js webgl - PLY 我在Vue3中使用&#xff0c;测试了好久始终不显示点云数据。在网上查询后发现ply文件要放置在public目录下才行 <el-row><el-button type"primary" class"el-btn" click"IniThree1">PLY</…

Pytorch 自用 Scheduler 分享

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

智慧公厕与智慧驿站:城市未来公共厕所的革命性升级

在当今社会&#xff0c;智慧公厕已经成为城市建设中一个备受关注的话题。智慧公厕究竟是什么&#xff1f;它代表了未来式的公共厕所&#xff0c;在使用方式、服务方式、管理方式、协作方式上均是变革式的升级。随着科技的进步和城市化的发展&#xff0c;智慧公厕的未来发展趋势…

机器学习系列-生成模型和判别模型

文章目录 前言1.生成模型和判别模型2.常见的生成模型和判别模型3.判别式模型和生成式模型的优缺点 前言 监督学习模型可以分为生成模型(generative model)和判别模型(discriminative model) 1.生成模型和判别模型 判别模型由数据直接学习决策函数 f ( x ) f(x) f(x)或者条件…

windows前后端项目部署

装好windows虚拟机 1.远程连接 计算机右击属性&#xff0c;高级防火墙设置&#xff0c;远程连接服务允许 2.安装jdk,tomcat&#xff0c;解压工具 把安装包拖进去 双击安装解压软件 jdk安装 双击安装 配置环境变量&#xff08;复制jdk路径&#xff09; 计算机右击属性高级…

Vue packages version mismatch 报错解决

问题 npm run dev 运行项目的过程中&#xff0c;报错 Vue packages version mismatch 解决方法 根据报错不难看出是 vue 与 vue-template-compiler 版本产生了冲突&#xff0c;vue 与 vue-template-compiler 的版本是需要匹配的。所以解决的办法就是先修改其中一个的版本将 v…

vDPA测试环境搭建

要求&#xff1a; 运行 Linux 发行版的计算机。本指南使用 CentOS 9-stream&#xff0c;但对于其他 Linux 发行版&#xff0c;特别是对于 Red Hat Enterprise Linux 7&#xff0c;命令不应有重大变化。 具有 sudo 权限的用户 ~ 主目录中有 25 GB 的可用空间 至少 8GB 内存 …

抖音视频提取软件使用功能|抖音视频下载工具

我们的抖音视频提取软件是一款功能强大、易于操作的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们的软件支持通过关键词搜索和分享链接两种方式获取抖音视频&#xff0c;方便用户快速找到自己感兴趣的内容。 主要功能模块&#xff1a;…

华为 OD 一面算法原题

2.2 亿彩票公布调查结果 昨天&#xff0c;闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件&#xff0c;迎来了官方公告。 简单来说&#xff0c;调查结果就是&#xff1a;一切正常&#xff0c;合规合法。 关于福利彩票事件&#xff0c;之前的推文我们已经分析过。 甚至在后面出现《…

Jetson Xavier NX 与笔记本网线连接 ,网络共享,ssh连接到vscode

Jetson Xavier NX 与笔记本网线连接 &#xff0c;网络共享&#xff0c;ssh连接到vscode Jetson Xavier NX桌面版需要连接显示屏、鼠标和键盘&#xff0c;操作起来并不方便&#xff0c;因此常常需要ssh远程连接到本地笔记本电脑&#xff0c;这里介绍一种连接方式&#xff0c;通过…

FreeRtos Queue(三)

本篇主要分析向队列中发送消息 xQueueGenericSend 这个函数。 大致分为两个逻辑&#xff1a; 1、当队列没满的时候的处理 2、当队列没满的时候的处理 主意&#xff1a;整个xQueueGenericSend是在for(;;)中处理的 一、队列没满的case 队列的数据结构图可参考&#xff1a;F…