linux - DPDK中预分配了多少虚拟内存
问题描述
假设我正在运行具有以下配置的 DPDK 进程:
8 个 Numa 节点。每个 numa 节点有 4 个核心(即:32 个物理核心)
我只选择前 4 个 Numa 节点的核心,即前 32 个核心用于快速路径处理。
但是我的 2 个 NIC 已插入 Numa 节点 6
我有大小为 1G 的大页面,请求的大页面数量为 64G(64G/8 NUMA = 8G 每个 NUMA)并且总 RAM 约为 256G。
问题:
- 那么通过上面的配置,并且在 DPDK 通用 _base 文件中将最大虚拟内存限制设置为 512G,DPDK 会出现吗?因为似乎每个 numa 节点需要分配 128 G 的虚拟内存,并且在达到第 5 个节点时,将达到 512 G 的虚拟内存限制。
- 即使所有的操作核心都在前 4 个 Numa 节点中,但是在最后一个 Numa 节点中的 NIC 会影响 DPDK?
- 假设有 16 个 Numa 节点,那么我们是否还应该增加 common_base 中的虚拟内存限制?
解决方案
是的,对于每个 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 带宽访问其他内存域和更高的延迟,从而导致低数据吞吐量.
推荐阅读
- android - React Native 应用程序在后台重新启动
- c# - WPF TextBox 错误消息可见且在 TextBox 中写入文本时不会消失
- typescript - 如何将数组的值显示为逗号分隔值
- regex - 在 Raku 中查找重复数字的优雅方法(née Perl 6)
- javascript - babel-loader 破坏了 npm 包中的 `this` 变量
- facebook - Facebook user_posts 权限:不要从时间线获取朋友的帖子/评论。只拥有
- android - 反向数据绑定android kotlin
- git - Git:为什么仍然提到 __pycache__?
- c++ - 在 C++ 中将时间从 txt 转换为 xml?
- android - 访问 Kotlin 中匿名实现的接口之外的变量(使用 Object)