DPDK主从进程模式 rte_mempool_put失败

版本:19.11.6

情景:主进程应用rte_mempool_create创建mempool,rte_mempool_get获取数据;从进程应用rte_mempool_put归还数据

问题:从进程rte_mempool_put无法归还数据

原因:DPDK通过rte_mempool_ops_table.ops来存储当前应用支持的mempool,这些mempool是跟编译时连接的librte_mempool库有关系的。如果主从进程连接的库不同,rte_mempool_ops_table.ops列表就不同。但是,DPDK是通过rte_mempool的ops_index成员来表示自己是用的哪个实现,而主从进程相同rte_mempool的ops_index是相同的。如果库不同,就导致rte_mempool的ops_index对应的实现不同。最终导致访问失败。

解决:将主从进程mempool连接库要保持一致。

心得:主从进程编译参数、连接库能保持一致就保持一致,别多事。

DPDK19.11.6 mempool链接库:

librte_mempool.a

librte_mempool_bucket.a

librte_mempool_dpaa.a

librte_mempool_dpaa2.a

librte_mempool_octeontx.a

librte_mempool_octeontx2.a

librte_mempool_ring.a

librte_mempool_stack.a

mempool的实现(以下内容来自chatGPT):

  1. ring:ring内存池是DPDK中最常用的内存池实现方式之一。它基于环形缓冲区的概念,提供了高效的数据包收发和处理能力。ring内存池适用于多核环境下的数据包处理应用程序。

  2. heap:heap内存池是一种通用的内存池实现方式,它使用动态内存分配来管理内存。heap内存池适用于需要动态分配和释放内存的应用程序。

  3. stack\lcore:stack_lcore内存池是一种特殊的内存池实现方式,它与特定的lcore(逻辑核心)相关联。每个lcore都有自己的内存池,用于存储与该lcore相关的数据。stack_lcore内存池适用于需要在多个lcore之间共享数据的应用程序。

  4. memzone:memzone内存池是一种用于在共享内存中分配内存的实现方式。它允许多个进程在共享内存中分配和访问内存块,用于实现进程间的通信和数据共享。

  5. dpaa(Data Path Acceleration Architecture):dpaa是一种特定于NXP QorIQ处理器的内存池实现方式。它利用了处理器的硬件加速功能,提供了高性能的数据包处理能力。dpaa内存池适用于在NXP QorIQ处理器上运行的DPDK应用程序。

相关推荐
flysnow0101 个月前
WSL(Ubuntu20.04)编译和安装DPDK
dpdk·1024程序员节
彭泽布衣2 个月前
解读: 火山引擎自研vSwitch技术
dpdk·火山引擎·ovs·云网络·vswitch
别NULL2 个月前
DPDK 简易应用开发之路 2:UDP数据包发送及实现
linux·网络·网络协议·udp·dpdk
别NULL2 个月前
DPDK基础入门(十):虚拟化
linux·网络·tcp/ip·dpdk
Once_day4 个月前
DPDK源码分析之(1)libmbuf模块补充
dpdk
墨染 锦年5 个月前
DPDK概述
笔记·学习·dpdk·uio·igb-uio
小勇者5 个月前
【DPDK学习路径】八、轮询
dpdk
大1234草6 个月前
dpdk flow 的简单使用
dpdk
写一封情书6 个月前
tldk之tle简单记录
dpdk·tldk·tle
范桂飓6 个月前
Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
运维·负载均衡·dpdk