2408883_zh-CN

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2408883_zh-CN

2408883_zh-CN

从 DPDK 池分配 mbuff 失败

大家好,

使用:LX2160 LSDK 2108 主程序
MC固件版本:10.32.0

DPDK 版本:dpdk_19_11_tags_LSDK20.04-isc-09

主进程 (DPDK):使用 [ rte_pktmbuf_pool_create("dlmempool", ] 创建 mbuff 池

辅助(DPDK)进程:使用 API [ rte_pktmbuf_alloc(mempool) ] 分配 mbuff 失败

在辅助内存池中,我可以看到内存池是正确的。我看到mbuff可用空间已满。第一次使用 rte_pktmbuf_alloc 进行 mbuff 分配时发生失败。


有什么解决办法吗?谢谢。


Re: Secondary failed allocate mbuff from DPDK Pool谢谢,我会尝试这些方法,明天再向您汇报。Re: Secondary failed allocate mbuff from DPDK Pool

你好,

辅助进程必须将大页映射到与主进程相同的虚拟地址。如果 ASLR 处于活动状态,则辅助内存池指针将解析到不同的虚拟地址,导致第一次内存分配失败。

echo 0 > /proc/sys/kernel/randomize_va_space
 

在启动主进程或辅助进程之前运行此程序。

2. 配置充足的DPMCP对象

创建与进程总数(主进程 + 辅助进程)相同的 DPMCP 对象数量。对于 1 个主要处方药 + 1 个次要处方药,您至少需要 2 个 DMPCP:

export DPMCP_COUNT=3   # for 1 Primary + 2 Secondary (always provision +1 as buffer)
./dynamic_dpl.sh dpmac.X

3. 配置足够的DPIO对象

每个流程都需要自己的 DPIO 门户。公式为:

(总进程数)×(每个进程的核心数 + 每个进程额外 1 个核心)

例如,1 个主处理器(2 个核心)+ 1 个辅助处理器(2 个核心)= 至少 9 个 DPIO。

export DPIO_COUNT=20   # set generously

4. 在辅助设备中正确设置黑名单/白名单设备

辅助进程不得重新初始化 I/O 设备(dpni、dpbp、dpcon、dpseci)。只有dpiodpmcp应该由辅助节点初始化。传递正确的黑名单标志:

# Secondary process example — blacklist all dpni/dpbp/dpcon, allow only dpio + dpmcp
./your_secondary_app --proc-type=secondary \
  -b fslmc:dpni.X \
  -b fslmc:dpbp.X \
  -b fslmc:dpcon.X \
  -- [app args]
 

或者,也可以明确地将分配给辅助节点的 dpio 和 dpmcp 对象列入白名单:

./your_secondary_app --proc-type=secondary \
  -w fslmc:dpio.Y \
  -w fslmc:dpmcp.Z \
  -- [app args]

5. 使用--proc-type=secondary EAL 参数

确保备用服务器使用正确的 EAL 标志启动:

./your_secondary_app -c  -n 1 --proc-type=secondary ...
 

或者使用--proc-type=auto让 DPDK 自动检测。


6. 验证辅助内存池查找

在辅助节点中,不要再次调用rte_pktmbuf_pool_create 。相反,查找主节点创建的现有池:

// In secondary process:
struct rte_mempool *mempool = rte_mempool_lookup("dlmempool");
if (mempool == NULL) {
    // Error: pool not found — ASLR or hugepage mapping issue
}
struct rte_mbuf *m = rte_pktmbuf_alloc(mempool);
 
 

如果rte_mempool_lookup返回一个有效的非 NULL 指针,但rte_pktmbuf_alloc仍然返回 NULL,则问题几乎肯定是辅助线程/核心的 DPIO 门户没有被初始化。

 

此致

Re: Secondary failed allocate mbuff from DPDK Pool

感谢@Bio_TICFSL的快速解决方案

标记 (1)
无评分
版本历史
最后更新:
星期五
更新人: