0 投票
分类:默认分类 | 用户: (120 分)
CPU架构:power8

系统:Centos7.7 ppc64le

DPDK版本:20.02.1

直接运行dpdk的testpmd,初始化失败,返回EBUSY错误。通过分析内核、dpdk代码和编写示例程序测试,发现在power上,重复mmap一块地址,如果前后映射的页大小不一致,第二次mmap会失败,而在x86上是没问题的。

在dpdk中,一开始会映射一大块连续内存(memseg_primary_init中的alloc_va_space),然而mmap中没有指定MAP_HUGETLB标志,于是映射的是普通页大小(4K),而后来又在这块预留的大内存下申请众多的memseg的大页内存(rte_eal_hugepage_init中的alloc_seg),此时mmap关联/dev/hugepages大页文件系统内的文件,因此这时候映射的页大小是16M(power默认的大页大小),但因为前后页大小不一致,后者映射失败。

我的解决方法是,在第一次映射时添加MAP_HUGETLB标志,虽然能解决这个问题,但同时也引入其它问题,虽然能映射成功,但是映射的地址并不是指定的地址,如指定地址是0x1051c0000,实际映射后的地址是0x3eefff000000(我的理解是大页内存是从另一个固定起始地址开始分配的)。我不清楚这种变数会不会带来影响,尤其是在多进程模式下。

不知道有没有人遇到这样的问题,是否有更好的方法处理。然而我疑惑的是,这是一个似乎很容易出现的问题,dpdk的开发人员难道没遇到?抑或只有我的系统会出现这个问题?因为能找到的有用信息太少了,尤其是power架构的。

登录 或者 注册 后回答这个问题。

欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。

QQ交流2群:635461501 (入群请注明来源)

冀ICP备15005332号-2
...