gpt4 book ai didi

c - dpdk mempool 分配的方式超出了必要

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:59 29 4
gpt4 key购买 nike

我有一个使用 dpdk 内存池的 Linux 应用程序。我正在尝试分配一个内存池,其中包含 8000000 个 24 字节的对象。当在内存池创建中没有MEMPOOL_F_NO_CACHE_ALIGN 运行时,它分配了 1688 兆字节的 eal 内存,大约是所需内存的 10 倍。当我添加 MEMPOOL_F_NO_CACHE_ALIGN 时,它减少到 512 兆字节,这也是必要的两倍多。我怎样才能减少这种情况?

最佳答案

不幸的是,您无能为力。每个内存池对象都有一个 header , header 指向:

  1. 下一个对象。
  2. 对象所属的内存池。
  3. IO/物理地址。

参见: http://doc.dpdk.org/api/structrte__mempool__objhdr.html

Plus内部内存池存储了一个循环缓冲区,大致就是每个对象的另一个指针。因此,每个对象的开销远远超过您尝试在每个对象中存储的数据。

如果我们不关心物理地址等,我们所需要的只是能够快速高效地存储这 24 个字节,我们几乎可以只使用循环缓冲区(rte_ring)和一个小的平面数组对象。在这种情况下,每个对象的开销约为 8 字节。

性能会降低,因为内存池实现了内部每核缓存。

如果还是太多,你应该看看其他非DPDK的数据结构。

或存储对象桶。比如说,每个桶 100 个对象将使开销有效降低约 100 倍。

关于c - dpdk mempool 分配的方式超出了必要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56667858/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com