DPDK-mempool(3)

简介: DPDK-mempool(3)

前言


内存池该概念

内存池是固定大小的对象分配器。 在DPDK中,它由名称唯一标识,并且使用mempool操作来存储空闲对象。 默认的mempool操作是基于ring的。它提供了一些可选的服务,如per-core缓存和对齐帮助,以确保对象被填充, 方便将他们均匀扩展到DRAM或DDR3通道上。


提示:以下是本篇文章正文内容,下面案例可供参考


一、本地缓存


在CPU使用率方面,由于每个访问需要compare-and-set (CAS)操作,所以多核访问内存池的空闲缓冲区成本比较高。 为了避免对内存池ring的访问请求太多,内存池分配器可以维护per-core cache,并通过实际内存池中具有较少锁定的缓存对内存池ring执行批量请求。 通过这种方式,每个core都可以访问自己空闲对象的缓存(带锁), 只有当缓存填充时,内核才需要将某些空闲对象重新放回到缓冲池ring,或者当缓存空时,从缓冲池中获取更多对象。


虽然这意味着一些buffer可能在某些core的缓存上处于空闲状态,但是core可以无锁访问其自己的缓存提供了性能上的提升。


缓存由一个小型的per-core表及其长度组成。可以在创建池时启用/禁用此缓存。


缓存大小的最大值是静态配置,并在编译时定义的(CONFIG_RTE_MEMPOOL_CACHE_MAX_SIZE)。

6c74c780e93202039f2ef92ecfda26da_c2ed93458f82414e9bc9441b56ba07ae.png

不同于per-lcore内部缓存,应用程序可以通过接口 rte_mempool_cache_create() , rte_mempool_cache_free() 和 rte_mempool_cache_flush( 创建和管理外部缓存。 这些用户拥有的缓存可以被显式传递给 rte_mempool_generic_put() 和 rte_mempool_generic_get() 。 接口 rte_mempool_default_cache() 返回默认内部缓存。 与默认缓存相反,用户拥有的高速缓存可以由非EAL线程使用。


二、Mempool Handlers


这允许外部存储子系统,如外部硬件存储管理系统和软件存储管理与DPDK一起使用。


mempool 操作包括两方面:


添加新的mempool操作代码。这是通过添加mempool ops代码,并使用 MEMPOOL_REGISTER_OPS 宏来实现的。 使用新的API调用 rte_mempool_create_empty() 及 rte_mempool_set_ops_byname() 用于创建新的mempool,并制定用户要使用的操作。 在同一个应用程序中可能会使用几个不同的mempool处理。 可以使用 rte_mempool_create_empty() 创建一个新的mempool,然后用 rte_mempool_set_ops_byname() 将mempool指向相关的 mempool处理回调(ops)结构体。


传统的应用程序可能会继续使用旧的 rte_mempool_create() API调用,它默认使用基于ring的mempool处理。 这些应用程序需要修改为新的mempool处理。


对于使用 rte_pktmbuf_create() 的应用程序,有一个配置设置(RTE_MBUF_DEFAULT_MEMPOOL_OPS),允许应用程序使用另一个mempool处理。

996ba8f31482046b9ddf34b1a7bff609_ab63b7d5b63142349ef57c728b6beddb.png

用例


All allocations that require a high level of performance should use a pool-based memory allocator. Below are some examples:


  • Mbuf Library Environment
  • Abstraction Layer , for logging service
  • Any application that needs to allocate fixed-sized objects in the data plane and that will be continuously utilized by the system.(任何需要在程序中分配固定大小对象,并将被系统持续使用的应用程序)

参考


参考

DPDK 官网

dpdk mempool cache 机制

目录
相关文章
|
存储 算法 Linux
打破常规,Linux内核新的数据结构上场maple tree(下)
打破常规,Linux内核新的数据结构上场maple tree
|
存储 数据挖掘 API
DPDK_Hash(1)
DPDK_Hash(1)
638 0
|
9月前
|
自然语言处理 IDE 开发工具
Xcode 26.1.1 (17B100) 发布 - Apple 平台 IDE
Xcode 26.1.1 (17B100) 发布 - Apple 平台 IDE
549 1
|
9月前
|
弹性计算 关系型数据库 网络安全
新手零代码建站指南:3步搭建适配阿里云的企业官网
本文介绍新手用 PageAdmin CMS 搭建企业官网的核心流程:先准备阿里云资源(域名注册备案、2 核 4G 入门级 ECS、LNMP/LAMP 环境)及下载该 CMS;再分 3 步搭建(部署程序到 ECS、配置数据库完成安装、选模板填内容 + 域名解析与 SSL 配置);上线后需做数据备份、安全优化与性能监控。
975 0
|
存储 安全 Linux
从零开始学习DPDK:掌握这些常用库函数就够了(上)
从零开始学习DPDK:掌握这些常用库函数就够了
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
621 6
|
小程序 数据可视化 API
低代码可视化-uniapp商城首页小程序-代码生成器
低代码可视化-uniapp商城首页小程序-代码生成器
420 0
|
SQL 开发框架 数据库
在Python中使用sqlalchemy来操作数据库的几个小总结
在Python中使用sqlalchemy来操作数据库的几个小总结
|
存储 缓存 算法
从零开始学习DPDK:掌握这些常用库函数就够了(下)
从零开始学习DPDK:掌握这些常用库函数就够了