首页 > 解决方案 > DPDK中预分配了多少虚拟内存

问题描述

假设我正在运行具有以下配置的 DPDK 进程:

8 个 Numa 节点。每个 numa 节点有 4 个核心(即:32 个物理核心)

我只选择前 4 个 Numa 节点的核心,即前 32 个核心用于快速路径处理。

但是我的 2 个 NIC 已插入 Numa 节点 6

我有大小为 1G 的大页面,请求的大页面数量为 64G(64G/8 NUMA = 8G 每个 NUMA)并且总 RAM 约为 256G。

问题:

  1. 那么通过上面的配置,并且在 DPDK 通用 _base 文件中将最大虚拟内存限制设置为 512G,DPDK 会出现吗?因为似乎每个 numa 节点需要分配 128 G 的虚拟内存,并且在达到第 5 个节点时,将达到 512 G 的虚拟内存限制。
  2. 即使所有的操作核心都在前 4 个 Numa 节点中,但是在最后一个 Numa 节点中的 NIC 会影响 DPDK?
  3. 假设有 16 个 Numa 节点,那么我们是否还应该增加 common_base 中的虚拟内存限制?

标签: linuxdpdk

解决方案


是的,对于每个 NUMA 节点,总虚拟内存设置为128G. 对于1G大页面大小,每个 NUMA 节点的内存段数将为 128,从而产生 128G 的最大应用程序数据内存。

但是,由于RTE_MAX_MEM_MB设置为512G,因此每个 NUMA 节点中只有 4 个128G可以成功分配(4 x 128G == 512G)。因此,虚拟内存限制将导致应用程序失败。为了支持更多数量的 NUMA 节点,我们可以减少总内存,64G除非应用程序不需要更高的内存要求。通过降低每个节点的内存,在连续 VA 内存的可用性方面可能会有优势。

其次,在启用 NUMA 的系统中,应从 NIC 接口与特定 NUMA 节点关联的同一内存域访问数据包缓冲区和描述符环,否则将导致 QPI 带宽访问其他内存域和更高的延迟,从而导致低数据吞吐量.


推荐阅读