DPDK : 进程间通信以及在内存管理的应用

本文详细介绍了DPDK中的进程间通信机制,包括使用Socket进行IPC,以及在内存管理中的应用。通过同步和异步通信方式,阐述了primary和secondary进程如何交互,特别是在内存分配和释放时的流程,提供了相关结构体的说明和通信协议栈的概述。
摘要由CSDN通过智能技术生成
说明

       这一篇文章主要是对DPDK中的进程间通信(Inter-Process Communication)进行介绍。
       由于个人水平所限,若所写的博文中存在错误,希望大家能帮忙指出。

一,DPDK的进程间通信

       前面的文章<DPDK内存的初始化过程>提到,DPDK将进程分为两种 : primary process 和secondary process。并且DPDK在单机上是一个集中式控制的系统,即主要由primary process对系统的资源(如内存,vfio container等)进行控制,而secondary process若需要申请资源,则向primary process发送申请的请求,由promary process处理请求后,将结果通知secondary process。

       涉及到多个进程之间的相互协作,就必然会涉及到进程间通信(Inter-Process Communication, 缩写为IPC), 就目前阅读到的代码而言,主要采用了两种IPC的方式:共享内存通信(memory share)Socket

       DPDK在初始化时创建一个控制线程用来监听来自其他进程的消息,接收到消息后,会根据消息的类型(同步或者异步)进行不同的处理,详情见rte_mp_channel_init(), process_msg()(位于文件lib/librte_eal/common/eal_common_proc.c)

       <DPDK内存的初始化过程>提到,primary process对内存初始化后,会将一部分初始化信息写入到文件中,而secondary process在初始化时能读取此文件,这就是使用了共享内存通信的方式。

       这一篇博文主要介绍DPDK中采用Socket的进程间通信方式。

二,相关结构体的说明

       下面还是先对一些结构体作简单的说明 :

********************rte_eal.h********************
struct rte_mp_msg {
    char name[RTE_MP_MAX_NAME_LEN]; //用来指明消息的类型
    int len_param; //指明param的长度
    int num_fds; //指明fds的长度
    uint8_t param[RTE_MP_MAX_PARAM_LEN]; //用来存放消息的相关参数
    int fds[RTE_MP_MAX_FD_NUM]; //用于进程间传递fd
};

struct rte_mp_reply {
    int nb_sent; //发送出去的消息的个数
    int nb_received; //收到回复的消息的个数
    struct rte_mp_msg *msgs; /* caller to free */ //用于存放收到回复的消息
};

********************eal_common_proc.c********************
//消息的四种类型
enum mp_type {
    MP_MSG, /* Share message with peers, will not block */
    MP_REQ, /*
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值