本发明属于互联网,特别是涉及一种基于dpdk的零拷贝进程间通信方法及模型。
背景技术:
1、在传统的进程间通信(ipc)机制中,常见的方式有管道、共享内存、消息队列等。这些方式虽然在某些场景下可以满足需求,但在高性能网络应用中往往表现不佳,其中多次数据复制、上下文切换、数据一致性等带来的开销都会严重影响高性能网络应用的性能。
技术实现思路
1、本发明的目的在于克服现有技术的不足,提供一种基于dpdk的零拷贝进程间通信方法及模型。
2、本发明的目的是通过以下技术方案来实现的:
3、本发明的第一方面公开了一种基于dpdk的零拷贝进程间通信方法,包括:
4、配置进程间通信模型,所述进程间通信模型包括由dpdk库封装得到的通信库和基于通信库创建的主进程,所述通信库具有用于配置共享资源的yaml文件;
5、基于通信库创建通信进程;
6、以dpdk主进程方式启动主进程;其中,所述主进程在启动时调用通信库的初始化接口读取所述yaml文件,并基于所述yaml文件创建共享资源;
7、在主进程启动后,以dpdk从进程方式启动通信进程;其中,所述通信进程在启动时调用通信库的初始化接口获取共享资源;
8、生产进程基于共享资源创建内存对象,并将所述内存对象封装到消息对象中;
9、生产进程调用通信库的消息发送接口,将所述消息对象以同步模式或异步模式的方式发送给消费进程的消息队列,以便消费进程对其消息队列中的所述消息对象直接进行读写操作;
10、其中,所述生产进程为发送消息对象的通信进程,所述消费进程为接收消息的通信进程。进一步地,所述主进程和通信进程在启动时调用通信库的初始化接口,获取dpdk内存模型。
11、进一步地,在所述通信进程启动时为通信进程配置一个名称参数,以便生产进程根据所述名称参数将消息对象发送给对应的消费进程。
12、进一步地,生产进程将所述消息对象以同步模式的方式发送给消费进程的消息队列后进入阻塞状态,并在接收到成功标记或超时标记时结束阻塞状态;
13、其中,生产进程处于阻塞状态期间,消息发送接口定时检查所述消息对象是否含有结束标志:若消息发送接口在预设时间内检测到结束标志,则向生产进程返回成功标记,否则向生产进程返回超时标记。
14、进一步地,所述进程间通信方法还包括:
15、生产进程将所述消息对象以异步模式的方式发送给消费进程的消息队列后,将该消息对象插入到生产进程的pending消息链表结构;
16、消费进程在对消息对象处理结束后调用消息对象释放接口,将消息对象发送至生产进程的待释放队列;
17、生产进程检查到其待释放队列中有待释放的消息对象后,清空待释放队列中的消息对象,并将该消息对象回收到对应的内存池中,以及将该待释放的消息对象从pending消息链表结构中删除。
18、进一步地,生产进程定时遍历其pending消息链表结构,若在遍历pending消息链表结构时检测到超时未处理的消息对象,则将该消息对象从pending消息链表结构中移除,并回收到内存池中。
19、进一步地,主进程定时对各个通信进程进行心跳检测,若某个生产进程异常挂掉超过预设时间仍未重启,则主进程替该生产进程清空待释放队列中的消息对象,并将该消息对象回收到对应的内存池中,以及将该待释放的消息对象从pending消息链表结构中删除。
20、进一步地,主进程定时对各个通信进程进行心跳检测,若生产进程和消费进程异常挂掉超过预设时间都未重启,则主进程替其清空生产进程的待释放队列和消费进程的消息队列中的消息对象,并将该消息对象回收到对应的内存池中,以及将该消息对象从pending消息链表结构中删除。
21、本发明的第二方面公开了一种基于dpdk的零拷贝进程间通信模型,包括由dpdk库封装得到的通信库和基于通信库创建的主进程;
22、所述通信库具有用于配置共享资源的yaml文件;
23、所述主进程用于在其启动时调用通信库的初始化接口读取所述yaml文件,并基于所述yaml文件创建共享资源;
24、所述通信库还用于创建通信进程;所述通信进程用于在启动时调用通信库的初始化接口获取共享资源,并基于所述通信库和共享资源实现进程间通信。
25、进一步地,所述通信进程包括用于发送消息的生产进程和用于接收消息的消费进程;
26、所述生产进程用于根据共享资源创建内存对象,并将所述内存对象封装到消息对象中;以及用于调用通信库的消息发送接口,将所述消息对象以同步模式或异步模式的方式发送给消费进程的消息队列;
27、所述消费进程用于对其消息队列中的所述消息对象直接进行读写操作。
28、本发明的有益效果是:本发明提出了一种基于dpdk的零拷贝进程间通信模型,解决了传统进程间通信技术带来的性能损耗,使进程间通信达到或接近进程内部通信的性能效果。
1.一种基于dpdk的零拷贝进程间通信方法,其特征在于,包括:
2.根据权利要求1所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,所述主进程和通信进程在启动时调用通信库的初始化接口,获取dpdk内存模型。
3.根据权利要求1所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,在所述通信进程启动时为通信进程配置一个名称参数,以便生产进程根据所述名称参数将消息对象发送给对应的消费进程。
4.根据权利要求1所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,生产进程将所述消息对象以同步模式的方式发送给消费进程的消息队列后进入阻塞状态,并在接收到成功标记或超时标记时结束阻塞状态;
5.根据权利要求1所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,所述进程间通信方法还包括:
6.根据权利要求5所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,生产进程定时遍历其pending消息链表结构,若在遍历pending消息链表结构时检测到超时未处理的消息对象,则将该消息对象从pending消息链表结构中移除,并回收到内存池中。
7.根据权利要求5所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,主进程定时对各个通信进程进行心跳检测,若某个生产进程异常挂掉超过预设时间仍未重启,则主进程替该生产进程清空待释放队列中的消息对象,并将该消息对象回收到对应的内存池中,以及将该待释放的消息对象从pending消息链表结构中删除。
8.根据权利要求5所述的一种基于dpdk的零拷贝进程间通信方法,其特征在于,主进程定时对各个通信进程进行心跳检测,若生产进程和消费进程异常挂掉超过预设时间都未重启,则主进程替其清空生产进程的待释放队列和消费进程的消息队列中的消息对象,并将该消息对象回收到对应的内存池中,以及将该消息对象从pending消息链表结构中删除。
9.一种基于dpdk的零拷贝进程间通信模型,其特征在于,包括由dpdk库封装得到的通信库和基于通信库创建的主进程;
10.根据权利要求9所述的一种基于dpdk的零拷贝进程间通信模型,其特征在于,所述通信进程包括用于发送消息的生产进程和用于接收消息的消费进程;
