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

dpdk 程序多个 secondary type 绑定同个 lcore 是否可以这个么干?麻烦有经验的大牛指点迷津

0 投票
自己试了一下绑到不同lcore 是正常运行的,而绑到相同lcore 则会出现core掉的情况(跑两个的时候比较少出现,跑多个的时候必现,感觉是内存问题),core的地方是从ring rx  然后处理rte_mbuf。dpdk小白,最新需要做多个服务器节点(一百来个)运行在同个机器上,而且要用dpdk优化收发包性能。目前最大的门槛就是 一个 lcore 上绑多个进程,或者进程压根就不绑lcore最好,只有这样才能满足业务需求。求大牛解答。
像这样比coredump

./appname -l 8 -n 4 --proc-type=secondary -- -n 1&

./appname -l 8 -n 4 --proc-type=secondary -- -n 2&

./appname -l 8 -n 4 --proc-type=secondary -- -n 3&

./appname -l 8 -n 4 --proc-type=secondary -- -n 4&
最新提问 3月 31 分类:DPDK初学入门 | 用户: ywz123 (410 分)

3 个回答

+1 投票
 
已采纳
啊搞了这么久终于有比较好的解决方法了,不用额外加锁,不用关掉cache。只要确保alloc和free是用不同的ring就ok了,最好是sp-sc性能最好,采用的方法比较挫每个client对应一个mempool这样alloc的问题就解决了,free的问题搞个核专门做free操作
最新回答 4月 11 用户: ywz123 (410 分)
采纳于 4月 12 用户:sysight
0 投票
看到有大牛博客说是 mempool cache 会有问题,因为cache 是per-core的,于是 create mempool 的时候 把cache size 填 0. 不挂了,但新的问题又来了,rte_pktmbuf_free 会有个enqueue ring操作死循环,奇怪的很mempool对应的ring enqueue 是 multi-prod 的还会出现类似死锁的情况,ring 一直在等 tail 更新死循环。又出现新的疑问即使是跑在多个core 上,一旦在ring head 修改后,程序退出,那么tail一直不会更新,其他进程也会一直等啊,但实际使用没出现过,不知道有什么特殊操作。
最新回答 3月 31 用户: ywz123 (410 分)
重新显示 4月 2 用户:sysight
0 投票
用DPDK自带的例子应该是不行的,如果自己写程序应该是可以吧,不过没试过多个进程绑定到同一个核,这样对性能的影响会比较大。
最新回答 4月 2 用户: sysight (12,190 分)
程序是自己写的,问题好像出在ring,多核多个进程用 multi-prod 和 multi-cons 没问题,但一核多进程好像会乱,加锁之后就正常但性能好差。考虑rte_pktmbuf_free和 rte_pktmbuf_alloc,以及rte_eth_tx 都统一由一个核一进程来搞
...