DPDK多进程间通信机制

DPDK将进程分为两种 : primary process 和secondary process。由primary process对系统的资源(如内存,vfio container等)进行初始化,而secondary process通过共享内存访问即可。

进程间通信(Inter-Process Communication, 缩写为IPC)主要采用两种方式:
1、共享内存通信(memory share)
2、Socket

共享内存:

结合rte_ring队列以及大页共享内存来实现多进程间得交互。

socket:

此方式是dpdk基于AF_UNIX/SOCK_DGRAM封装得一套进程间通信API,
DPDK每个进程在eal初始化时创建一个控制线程用来监听来自其他进程的消息,接收到消息后,会根据消息的类型(同步或者异步)进行不同的处理,代码见rte_mp_channel_init(), process_msg()(位于文件lib/librte_eal/common/eal_common_proc.c)。
此通信方式性能并不是最优方式,只是DPDK实现得一套较为通用的通信接口,方便使用。如对性能要求较高,视情况决定是否合适。

实现:

1、内存同步使用了socket

从进程发起内存申请过程

在这里插入图片描述

从进程释放过程:

在这里插入图片描述

常见问题点:

Q1、多进程时申请内存效率是否会受影响?
A1、legacy模式下不需要同步,不受影响; 非legacy时,只有try_expand_heap时才需要进程间同步,所以是否影响取决与heap是否会频繁变化,如果运行时频繁使用rte_malloc申请释放内存,可能会导致heap收缩、扩展频繁,此时还是会影响性能的,因为同步时需要经过多次unix socket通信。特别是从进程还是阻塞式的等待同步结果。(主进程是异步方式)

未解决疑惑:

1、loclal_memsegs变量是做什么用的?主从进程的内存同步是为了解决什么问题?(memseg_list本来就是共享内存,主进程更新完,从进程直接就可以使用,不需要同步?)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值