产品:openEuler
版本:openEuler22.03 LTS
分类:内核/网络
来源:现网
问题描述
客户在鲲鹏916上dpdk启动失败,报错如下图;了解到该dpdk编译环境在鲲鹏920上编译正常,同时在鲲鹏920上编译出的文件在鲲鹏916上可正常运行
定位过程:
根据报错查看板卡与OS的兼容性,网卡驱动,大页内存分配,均未发现异常;
结合同样编译环境在920上成功,916上失败的现象,定界为硬件差异导致的编译参数变化;
查看debug日志,发现在NUMA3上分配内存失败;执行dpdk-testpmd,发现探测到的核心数与实际核心数不符;
查找与核心数相关的参数RTE_MAX_LCORE,发现配置文件meson.build中有根据CPU类型进行预设
问题根因:
鲲鹏916和920的cpu类型不同,在编译时执行了不同的编译选项
客户的环境有64核,但默认只给了16
异常:
[root@gzgwu-1 app]# ./dpdk-testpmd --log-level=pmd.net.mlx5:8
EAL: Detected 16 lcore(s)
EAL: Detected 1 NUMA nodes
正常:
[root@gzgwu-1 app]# /usr/gzgwu/etc/dpdk/app-oe22.aarch64/dpdk-testpmd --log-level=pmd.net.mlx5:8
EAL: Detected 64 lcore(s)
EAL: Detected 4 NUMA nodes
只检测到1个numa,导致在numa3上申请内存失败
mlx5_pci: probe of PCI device 000d:31:00.0 aborted after encountering an error: Cannot allocate memory
解决方案:
在config\arm\meson.build文件中将RTE_MAX_LCORE参数改为64