浅析DPDK内存管理:Mempool

news2024/9/22 19:38:47

文章目录

    • 前言
    • 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.coloradmin.cn/o/1468194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解人工智能的13个细分领域

人工智能(Artificial Intelligence,简称AI)作为当今最热门和前沿的技术之一,已经在各种领域发挥着越来越重要的作用。随着人工智能技术的不断进步和应用,AI的细分领域也越来越多。目前,根据AI的应用领域和特…

flink源码分析 - 获取调用位置信息

flink版本: flink-1.11.2 调用位置: org.apache.flink.streaming.api.datastream.DataStream#flatMap(org.apache.flink.api.common.functions.FlatMapFunction<T,R>) 代码核心位置: org.apache.flink.api.java.Utils#getCallLocationName() flink算子flatmap中调用了一…

【深度学习笔记】3_6 代码实现softmax-regression

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.6 softmax回归的从零开始实现 这一节我们来动手实现softmax回归。首先导入本节实现所需的包或模块。 import torch import torchvision import numpy as np import…

神经网络系列---权重初始化方法

文章目录 权重初始化方法Xavier初始化&#xff08;Xavier initialization&#xff09;Kaiming初始化&#xff0c;也称为He初始化LeCun 初始化正态分布与均匀分布Orthogonal InitializationSparse Initializationn_in和n_out代码实现 权重初始化方法 Xavier初始化&#xff08;X…

java面试题之SpringMVC篇

Spring MVC的工作原理 Spring MVC的工作原理如下&#xff1a; DispatcherServlet 接收用户的请求找到用于处理request的 handler 和 Interceptors&#xff0c;构造成 HandlerExecutionChain 执行链找到 handler 相对应的 HandlerAdapter执行所有注册拦截器的preHandler方法调…

Java知识点一

hello&#xff0c;大家好&#xff01;我们今天开启Java语言的学习之路&#xff0c;与C语言的学习内容有些许异同&#xff0c;今天我们来简单了解一下Java的基础知识。 一、数据类型 分两种&#xff1a;基本数据类型 引用数据类型 &#xff08;1&#xff09;整型 八种基本数…

计算机网络-网络互联与互联网(一)

1.常用网络互联设备&#xff1a; 1层物理层&#xff1a;中继器、集线器2层链路层&#xff1a;网桥、交换机3层网络层&#xff1a;路由器、三层交换机4层以上高层&#xff1a;网关 2.网络互联设备&#xff1a; 中继器Repeater、集线器Hub&#xff08;又叫多端口中继器&#xf…

一分钟 由浅入深 学会Navigation

目录 1.官网正式概念 1.1 初认知 2.导入依赖 2.1 使用navigation 2.2 safe Args插件-> 传递数据时用 3.使用Navigation 3.1 搭建初始框架 3.2 确定action箭头的属性 3.3 为Activity添加NavHostFragment控件 3.4 NavController 管理应用导航的对象 3.5 数据传递(单…

leetcode单调栈

739. 每日温度 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, …

基于SpringBoot的停车场管理系统

基于SpringBootVue的停车场管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页 停车位 个人中心 管理员界面 摘要 摘要&#xff1a;随着城市化进程的…

基于django的购物商城系统

摘要 本文介绍了基于Django框架开发的购物商城系统。随着电子商务的兴起&#xff0c;购物商城系统成为了许多企业和个人创业者的首选。Django作为一个高效、稳定且易于扩展的Python web框架&#xff0c;为开发者提供了便捷的开发环境和丰富的功能模块&#xff0c;使得开发购物商…

Java零基础 - 条件运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

Vue(学习笔记)

什么是Vue Vue是一套构建用户界面的渐进式框架 构建用户界面&#xff1a; 基于数据渲染出用户可以看到的界面 渐进式&#xff1a; 所谓渐进式就是循序渐进&#xff0c;不一定非得把Vue中的所有API都学完才能开发Vue&#xff0c;可以学一点开发一点 创建Vue实例 比如就上面…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

汽车常识网:电脑主机如何算功率的计算方法?

今天汽车知识网就给大家讲解一下如何计算一台主机的功率。 它还会解释如何计算计算机主机所需的功率&#xff1f; &#xff1f; &#xff08;如何计算电脑主机所需的功率&#xff09;进行说明。 如果它恰好解决了您现在面临的问题&#xff0c;请不要忘记关注本站。 让我们现在就…

vue3 vite 经纬度逆地址解析

在web端测试经纬度逆地址解析有2中方式&#xff0c;先准备好两个应用key 第一种&#xff0c;使用“浏览器端”应用类型 const address ref() const latitude ref() // 经度 const longitude ref() // 纬度 const ak 你的key // 浏览器端 function getAddressWeb() {// 创建…

【读博杂记】:近期日常240223

近期日常 最近莫名其妙&#xff0c;小导悄悄卷起来&#xff0c;说要早上八点半开始打卡&#xff0c;我感觉这是要针对我们在学校住的&#xff0c;想让我们自己妥协来这边租房子住&#xff0c;但我感觉这是在逼我养成规律作息啊&#xff01;现在基本上就是6~7点撤退&#xff0c;…

【Spring】 AOP面向切面编程

文章目录 AOP是什么&#xff1f;一、AOP术语名词介绍二、Spring AOP框架介绍和关系梳理三、Spring AOP基于注解方式实现和细节3.1 Spring AOP底层技术组成3.2 初步实现3.3 获取通知细节信息3.4 切点表达式语法3.5 重用&#xff08;提取&#xff09;切点表达式3.6 环绕通知3.7 切…

R语言入门笔记2.6

描述统计 分类数据与顺序数据的图表展示 为了下面代码便于看出颜色参数所对应的值&#xff0c;在这里先集中介绍&#xff0c; col1是黑色&#xff0c;2是粉红&#xff0c;3是绿色&#xff0c;4是天蓝&#xff0c;5是浅蓝&#xff0c;6是紫红&#xff0c;7是黄色&#xff0c;…

前沿科技速递——YOLOv9

随着YOLO系列的不断迭代更新&#xff0c;前几天&#xff0c;YOLO系列也迎来了第九个大型号的更新&#xff01;YOLOv9正式推出了&#xff01;附上原论文链接。 arxiv.org/pdf/2402.13616.pdf 同样是使用MS COCO数据集进行对比比较&#xff0c;通过折线图可看出AP曲线在全方面都…