掌桥专利:专业的专利平台
掌桥专利
首页

一种基于零拷贝的DDS通信方法及系统

文献发布时间:2024-01-17 01:19:37


一种基于零拷贝的DDS通信方法及系统

技术领域

本发明涉及自动驾驶通信技术领域,具体而言,涉及一种基于零拷贝的DDS通信方法及系统。

背景技术

在过去的几十年中,汽车行业发展由最初的发动机控制系统,发展到当下热门的辅助驾驶/自动驾驶等等,汽车电子技术有了革命性的发展。随之而来的,是电子控制单元(ECU)中不同执行线程之间的数据传输单位从KB/s增加到GB/s,而能够完整地“支撑”自动驾驶功能的数据传输速度甚至将会达到10GB/s。

因此传统分布式的E/E架构已经无法满足智能汽车的发展。这意味着随着E/E架构的升级演进和“软件定义汽车”时代的到来,上层应用将以SOA(service-orientedarchitecture,面向服务)的模式进行开发,并通过OTA(Over-The-Air technology,空中下载技术)进行迭代升级。通信中间件(Communication Middleware)在其中扮演着重要角色,尤其在智能驾驶功能域中,大量节点需要进行频繁的信息交互,在多核异构的大算力架构下融合来自不同传感器的感知信息、核内通信、跨核通信、跨芯片通信、跨域通信,都需要通信中间件从中协调。

基于上述情况,为满足辅助驾驶/自动驾驶的高带宽、低延时的通讯需求,目前DDS(Data Distribution Service,数据分发服务)通信中间件常用的通信方式包括:UDP/IP(User Datagram Protocol,用户数据报协议)、TCP/IP(Transmission Control Protocol,传输控制协议)、共享内存等。共享内存通信方式用于本地通信中,其核心在于通过利用共享内存空间,减少了CPU的多次数据拷贝过程。UDP、TCP通信方式常用于本地通信、跨节点通信和网络通信,其传输速率与网络带宽存在直接联系。虽然相较于网络传输通信(UDP、TCP协议),共享内存通信方式数据传输速率更快。但当两个不同进程进行数据交换,因为进程的物理资源是独立的,同样一份数据在两个进程之间交互就需要拷贝副本,这会产生对应的CPU及内存I/O耗时。如此,当通信频繁、数据量大时,通信的时延就会越来越大。

因此,本发明基于DDS通信中间件在共享内存通信方式的基础上进行零拷贝优化,提供一种稳定的本地数据通信传输方案,解决现有技术中当通信频繁、数据量大时,数据传输延迟较大的问题,满足大数据包的即时传输需求。

发明内容

本发明提供一种基于零拷贝的DDS通信方法及系统,用以克服现有技术中存在的至少一个技术问题。

一方面,本发明实施例提供一种基于零拷贝的DDS通信方法,包括:初始化阶段、数据发送阶段和数据接收阶段;

其中,所述初始化阶段包括:

初始化DDS的通信配置,选择零拷贝协议作为数据传输方式;

所述数据发送阶段包括:

通过数据发送者将数据存储至共享内存中,得到所述数据的存储指针信息;

将所述存储指针信息发送至写入缓存区,并进行数据封装,得到消息类型指针;

将所述消息类型指针存储至写入缓冲区;

所述写入缓冲区将所述消息类型指针发送至共享内存中;

所述数据接收阶段包括:

将所述共享内存中的消息类型指针发送至读取缓冲区;

将所述读取缓冲区中的消息类型指针进行解封,得到所述存储指针信息;

通过所述存储指针信息获取数据在共享内存中的位置信息;

数据读取者读取所述共享内存中与所述位置信息对应位置处存储的数据。

可选地,初始化DDS的通信配置,包括发布端配置;

所述发布端配置,具体为:

建立发布端,在所述发布端中建立数据发送者,并选择零拷贝协议作为数据发送模式;

设置所述数据发送者的Topic和QoS策略。

可选地,所述数据发送者的QoS策略设置为RELIABLE。

可选地,所述初始化DDS的通信配置,还包括订阅端配置;

所述订阅端配置,具体为:

建立订阅端,在所述订阅端中建立数据读取者,并选择零拷贝协议作为数据接收模式;

设置所述数据读取者的Topic和QoS策略;其中,所述数据读取者的Topic和QoS策略与所述数据发送者的Topic和QoS策略一致。

可选地,所述数据的存储指针信息包括数据存储的首地址和偏移量。

可选地,所述共享内存包括数据内存和缓冲内存;

通过数据发送者将数据存储至共享内存中,具体为:通过数据发送者将数据存储至共享内存的数据内存中;

所述写入缓冲区将所述消息类型指针发送至共享内存中,具体为:所述写入缓冲区将所述消息类型指针发送至共享内存的缓冲内存中。

另一方面,本发明还提供一种基于零拷贝的DDS通信系统,包括:

初始化模块,用于初始化DDS的通信配置,选择零拷贝协议作为数据传输方式;

数据发送者模块,用于将数据存储至共享内存中,得到所述数据的存储指针信息;

第一发送模块,用于将所述存储指针信息发送至写入缓存区,并进行数据封装,得到消息类型指针;

第一存储模块,用于将所述消息类型指针存储至写入缓冲区;

第二发送模块,用于使所述写入缓冲区将所述消息类型指针发送至所述共享内存中;

第三发送模块,用于将所述共享内存中的消息类型指针发送至读取缓冲区;

解封模块,用于将所述读取缓冲区中的消息类型指针进行解封,得到存储指针信息;

获取模块,用于通过所述存储指针信息获取数据在共享内存中的位置信息;

数据读取者模块,用于读取所述共享内存中与所述位置信息对应位置处存储的数据。

可选地,所述初始化模块包括发布端配置模块;

所述发布端配置模块用于建立发布端,在所述发布端中建立数据发送者,并选择零拷贝协议作为数据发送模式;还用于设置所述数据发送者的Topic和QoS策略。

可选地,所述初始化模块还包括订阅端配置模块;

所述订阅端配置模块用于建立订阅端,在所述订阅端中建立数据读取者,并选择零拷贝协议作为数据接收模式;还用于设置所述数据读取者的Topic和QoS策略;其中,所述数据读取者的Topic和QoS策略与所述数据发送者的Topic和QoS策略一致。

可选地,所述共享内存包括数据内存和缓冲内存;

所述数据内存用于存储数据;

所述缓冲内存用于存储消息类型指针。

本发明实施例的创新点包括:

1、本实施例中,针对共享内存技术进行零拷贝优化,减少了数据拷贝次数,从而能够加快数据收发速率,降低通信延时,是本发明实施例的创新点之一。

2、本实施例中,通过将数据存储至共享内存中获取数据的存储指针信息,当用户需要传输数据时仅需传递所对应的指针,由于指针数据大小固定,故无论所交互的数据量多大,数据在传输过程中所消耗的时间都是恒定的,也即数据传输效率一致,能够提供稳定的数据传输方式,是本发明实施例的创新点之一。

3、本实施例中,通过传递指针信息,有利于提高数据收发速率,解决了现有技术中当通信频繁、数据量大时,数据传输延迟较大的问题,满足大数据包的即时传输需求,是本发明实施例的创新点之一。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的通信方法的一种流程图;

图2为本发明实施例提供的数据发送阶段的一种流程图;

图3为本发明实施例提供的数据接收阶段的一种流程图;

图4为本发明实施例提供的通信方法的另一种流程图;

图5为本发明实施例提供的通信方法的一种数据传输过程示意图;

图6为本发明实施例提供的发布端配置的一种流程图;

图7为本发明实施例提供的订阅端配置的一种流程图;

图8为本发明实施例提供的通信系统的一种结构示意图;

图9为本发明实施例提供的初始化模块的一种结构示意图;

图10为本发明实施例提供的不同传输协议下的一种数据传输延时对比图;

图11为本发明实施例提供的不同传输协议下的另一种数据传输延时对比图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,本发明实施例及附图中的术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。

本发明实施例公开了一种基于零拷贝的DDS通信方法及系统。以下分别进行详细说明。

图1为本发明实施例提供的通信方法的一种流程图,图2为本发明实施例提供的数据发送阶段的一种流程图,图3为本发明实施例提供的数据接收阶段的一种流程图,图4为本发明实施例提供的通信方法的另一种流程图,图5为本发明实施例提供的通信方法的一种数据传输过程示意图,请参考图1-图5,本发明实施例提供的基于零拷贝的DDS通信方法,包括:步骤1,初始化阶段;步骤2,数据发送阶段;步骤3,数据接收阶段;

其中,步骤1中,初始化阶段包括:

初始化DDS的通信配置,选择零拷贝协议作为数据传输方式;

步骤2中,数据发送阶段包括:

步骤21,通过数据发送者将数据存储至共享内存中,得到数据的存储指针信息;

步骤22,将存储指针信息发送至写入缓存区,并进行数据封装,得到消息类型指针;

步骤23,将消息类型指针存储至写入缓冲区;

步骤24,写入缓冲区将消息类型指针发送至共享内存中;

步骤3中,数据接收阶段包括:

步骤31,将共享内存中的消息类型指针发送至读取缓冲区;

步骤32,将读取缓冲区中的消息类型指针进行解封,得到存储指针信息;

步骤33,通过存储指针信息获取数据在共享内存中的位置信息;

步骤34,数据读取者读取共享内存中与位置信息对应位置处存储的数据。

具体地,请参考图1,本发明实施例提供的基于零拷贝的DDS通信方法,包括步骤1,初始化阶段;步骤2,数据发送阶段;步骤3,数据接收阶段。

在进行DDS通信时,需要对DDS的通信配置进行初始化,本实施例中,通过步骤1初始化DDS的通信配置,DDS的通信配置具体可以包括发布/订阅端的配置,发布者和订阅者根据消息的Topic(主题标识)和QoS(Quality of Service,服务质量)策略进行收发,因此,初始化DDS的通信配置例如可以为,建立数据发送者、数据接收者、以及发布者和订阅者Topic和QoS策略等。

此外,由于进行数据拷贝会产生对应的CPU及内存I/O耗时,因此,本实施例中,在初始化阶段,选择零拷贝协议作为数据传输方式,零拷贝即零拷贝技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,这种技术有利于节省CPU周期和内存带宽。因此,本发明通过采用零拷贝协议作为数据传输方式,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

请参考图2、图4和图5,初始化完成之后,在步骤2中进行数据发送。发送数据时,首先在步骤21中,通过数据发送者将用户需要发送的数据存储至共享内存中,此处,数据发送者指的是发布端建立的DataWriter,共享内存指的是DDS通信中间件中可以被不同中央处理器、进程访问的大容量内存,共享内存是进程间共享数据的一种最快的方法,一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。通过将数据存储至共享内存中,数据发送者可以得到数据的存储指针信息,数据的存储指针信息包括数据存储的首地址和偏移量。

由于指针信息为4字节整型数据,因此,将直接传输数据内容转换为指针信息传输,则传输时间不会受到数据量的影响,也即,无论用户需要发送的数据量多大,数据在传输过程中所消耗的时间都是恒定的。

得到数据的存储指针信息后,在步骤22中,数据发送者将存储指针信息发送至写入缓存区,例如数据发送者的CacheChange,并对其进行数据封装,得到消息类型指针。消息类型指针主要包括数据类型、数据长度、RTPS(实时发布订阅协议)标识和GUID(GloballyUnique Identifier,全局唯一标识符)前缀等信息。通过步骤23,将消息类型指针存储至写入缓冲区,例如数据发送者的Buffer。并在步骤24中,使写入缓冲区将消息类型指针发送至共享内存缓冲区。

针对本地进程间的数据传输,本发明通过构建本地共享内存空间的缓冲区,代替UDP网络缓存空间中的Send Buffer和Recive Buffer缓冲区,该过程减少了从Send Buffer到Recive Buffer的一次数据传输过程,实现了内存共享,有利于提高传输效率。

请参考图3-图5,在数据接收阶段,首先通过步骤31,将数据发送阶段发送至共享内存Buffer中的消息类型指针发送至读取缓冲区,例如数据读取者的Buffer。在步骤32中,将读取缓冲区中的消息类型指针进行解封,得到数据的存储指针信息,此时得到的存储指针信息即为发送端发送至写入缓存区中的存储指针信息,解封后得到的存储指针信息存储至数据读取者的缓存区例如Reader CacheChange中,存储指针信息包括数据类型、数据存储的首地址以及偏移量等信息。在步骤33中,由于存储指针信息包括了数据存储的首地址以及偏移量信息,因此,根据数据存储的首地址以及偏移量,即可得到数据在共享内存中的位置信息。得到数据的位置信息后,在步骤34中,数据读取者可以根据数据在共享内存中的位置信息读取到数据发送者发送的数据。

本发明实施例提供的基于零拷贝的DDS通信方法,针对共享内存技术进行零拷贝优化,减少了数据拷贝次数,从而能够加快数据收发速率,降低通信延时。通过将数据存储至共享内存中获取数据的存储指针信息,当用户需要传输数据时仅需传递所对应的指针,由于指针数据大小固定,故无论所交互的数据量多大,数据在传输过程中所消耗的时间都是恒定的,也即数据传输效率一致,能够提供稳定的数据传输方式。此外,通过传递指针信息,还有利于提高数据收发速率,解决了现有技术中当通信频繁、数据量大时,数据传输延迟较大的问题,满足大数据包的即时传输需求。

可选地,图6为本发明实施例提供的发布端配置的一种流程图,请参考图1和图6,步骤1中,初始化DDS的通信配置,包括发布端配置;发布端配置,具体为:步骤11,建立发布端,在发布端中建立数据发送者,并选择零拷贝协议作为数据发送模式;步骤12,设置数据发送者的Topic和QoS策略。优选地,数据发送者的QoS策略设置为RELIABLE。

具体地,DDS的通信配置包括发布端配置和订阅端配置,请参考图6,配置发布端时,首先在步骤11中,通过DDS通信中间件建立发布端,并在发布端中建立数据发送者,数据发送者用于发送数据,建立好数据发送者后,选择零拷贝协议作为数据发送模式,如此,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

发布者和订阅者根据消息的Topic(主题标识)和QoS(Quality of Service,服务质量)策略进行收发,因此,本实施例在步骤12中设置数据发送者的Topic和QoS策略,使得发布端和订阅端可以通过Topic和QoS策略建立发布/订阅的匹配关系。

本发明中,设置数据发送者的QoS策略设置为RELIABLE,RELIABLE表示可靠性策略,如果在数据发送者上应用此QoS策略,则可以保证数据发送者发布的数据都能被数据读取者收到。例如,在定义Kind=RELIABLE的情况下,当网络发生错误,数据读取者可能无法收到数据发送者的样本数据时,会对样本数据进行重发,保证数据读取者能够收到数据。

可选地,图7为本发明实施例提供的订阅端配置的一种流程图,请参考图1和图7,步骤1中,初始化DDS的通信配置,还包括订阅端配置;订阅端配置,具体为:步骤13,建立订阅端,在订阅端中建立数据读取者,并选择零拷贝协议作为数据接收模式;步骤14,设置数据读取者的Topic和QoS策略;其中,数据读取者的Topic和QoS策略与数据发送者的Topic和QoS策略一致。

具体地,请参考图7,DDS的通信配置包括发布端配置和订阅端配置,请参考图7,配置订阅端时,首先在步骤13中,通过DDS通信中间件建立订阅端,并在订阅端中建立数据接收者数据读取者,数据读取者用于接收数据,建立好数据读取者后,选择零拷贝协议作为数据接收模式,如此,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

发布者和订阅者根据消息的Topic(主题标识)和QoS(Quality of Service,服务质量)策略进行收发,因此,本实施例在步骤14中设置数据读取者的Topic和QoS策略。在本实施例中,订阅者的Topic和QoS策略与发布者的Topic和QoS策略一致,从而可以使订阅端和发布端之间建立发布/订阅的匹配关系。

可选地,请参考图5,共享内存包括数据内存和缓冲内存;通过数据发送者将数据存储至共享内存中,具体为:通过数据发送者将数据存储至共享内存的数据内存中;写入缓冲区将消息类型指针发送至共享内存中,具体为:写入缓冲区将消息类型指针发送至共享内存的缓冲内存中。

具体地,请参考图5,共享内存包括数据内存和缓冲内存。在本发明中,数据发送者将用户需要发送的数据存储至共享内存的数据内存后,可以得到数据的存储指针信息。通过DDS通信中间件对存储指针信息进行数据封装,可以得到消息类型指针,写入缓冲区将消息类型指针发送至共享内存的缓冲内存中。

可见,本发明将直接传输数据内容转换为指针信息传输,由于指针信息为4字节整型数据,因此,传输时间不会受到数据量的影响,也即,无论用户需要发送的数据量多大,数据在传输过程中所消耗的时间都是恒定的。

基于同一发明构思,本发明还提供一种基于零拷贝的DDS通信系统,图8为本发明实施例提供的通信系统的一种结构示意图,请参考图5和图8,本发明实施例提供的基于零拷贝的DDS通信系统100,包括:

初始化模块110,用于初始化DDS的通信配置,选择零拷贝协议作为数据传输方式;

数据发送者模块120,用于将数据存储至共享内存中,得到数据的存储指针信息;

第一发送模块130,用于将存储指针信息发送至写入缓存区,并进行数据封装,得到消息类型指针;

第一存储模块140,用于将消息类型指针存储至写入缓冲区;

第二发送模块150,用于使写入缓冲区将消息类型指针发送至共享内存中;

第三发送模块160,用于将共享内存中的消息类型指针发送至读取缓冲区;

解封模块170,用于将读取缓冲区中的消息类型指针进行解封,得到存储指针信息;

获取模块180,用于通过存储指针信息获取数据在共享内存中的位置信息;

数据读取者模块190,用于读取共享内存中与位置信息对应位置处存储的数据。

具体地,在进行DDS通信时,需要对DDS的通信配置进行初始化,请参考图8,本实施例提供的基于零拷贝的DDS通信系统,包括初始化模块110,利用初始化模块110对DDS的通信配置进行初始化,DDS的通信配置具体可以包括发布/订阅端的配置,发布者和订阅者根据消息的Topic(主题标识)和QoS策略进行收发,因此,初始化DDS的通信配置例如可以为,建立数据发送者、数据接收者、以及发布者和订阅者Topic和QoS策略等。

此外,由于进行数据拷贝会产生对应的CPU及内存I/O耗时,因此,本实施例中,在初始化阶段,选择零拷贝协议作为数据传输方式,零拷贝即零拷贝技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域,这种技术有利于节省CPU周期和内存带宽。因此,本发明通过采用零拷贝协议作为数据传输方式,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

请参考图5和图8,初始化完成之后,需要进行数据发送。发送数据时,首先通过数据发送者模块120将用户需要发送的数据存储至共享内存中,此处,数据发送者模块120指的是发布端建立的数据发送者,共享内存指的是DDS通信中间件中可以被不同中央处理器、进程访问的大容量内存,共享内存是进程间共享数据的一种最快的方法,一个进程向共享的内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。通过将数据存储至共享内存中,数据发送者模块120可以得到数据的存储指针信息,数据的存储指针信息包括数据存储的首地址和偏移量。

由于指针信息为4字节整型数据,因此,将直接传输数据内容转换为指针信息传输,则传输时间不会受到数据量的影响,也即,无论用户需要发送的数据量多大,数据在传输过程中所消耗的时间都是恒定的。

得到数据的存储指针信息后,数据发送者模块120通过第一发送模块130,将存储指针信息发送至写入缓存区,并对其进行数据封装,得到消息类型指针。消息类型指针主要包括数据类型、数据长度、RTPS(实时发布订阅协议)标识和GUID(Globally UniqueIdentifier,全局唯一标识符)前缀等信息。第一存储模块140将消息类型指针存储至写入缓冲区,写入缓冲区指的是写入缓冲区。并通过第二发送模块150使写入缓冲区将消息类型指针发送至共享内存的缓冲区。

针对本地进程间的数据传输,本发明通过构建本地共享内存空间的Buffer,代替UDP网络缓存空间中的Send Buffer和Recive Buffer缓冲区,该过程减少了从Send Buffer到Recive Buffer的一次数据传输过程,实现了内存共享,有利于提高传输效率。

请参考图5和图8,在数据接收阶段,通过第三发送模块160,将共享内存Buffer中的消息类型指针发送至读取缓冲区。读取缓冲区接收到消息类型指针后,通过解封模块170将消息类型指针进行解封,得到存储指针信息,存储指针信息包括数据类型、数据存储的首地址以及偏移量等信息。由于存储指针信息包括了数据存储的首地址以及偏移量信息,因此,根据数据存储的首地址以及偏移量,获取模块180即可得到数据在共享内存中的位置信息。得到数据的位置信息后,数据读取者模块190可以根据数据在共享内存中的位置信息读取到数据发送者发送的数据。

本发明实施例提供的基于零拷贝的DDS通信系统,针对共享内存技术进行零拷贝优化,减少了数据拷贝次数,从而能够加快数据收发速率,降低通信延时。通过将数据存储至共享内存中获取数据的存储指针信息,当用户需要传输数据时仅需传递所对应的指针,由于指针数据大小固定,故无论所交互的数据量多大,数据在传输过程中所消耗的时间都是恒定的,也即数据传输效率一致,能够提供稳定的数据传输方式。此外,通过传递指针信息,还有利于提高数据收发速率,解决了现有技术中当通信频繁、数据量大时,数据传输延迟较大的问题,满足大数据包的即时传输需求。

可选地,图9为本发明实施例提供的初始化模块的一种结构示意图,请参考图9,初始化模块110包括发布端配置模块111;发布端配置模块111用于建立发布端,在发布端中建立数据发送者,并选择零拷贝协议作为数据发送模式;还用于设置数据发送者的Topic和QoS策略。

具体地,请参考图9,DDS的通信配置包括发布端配置和订阅端配置,配置发布端时,发布端配置模块111通过DDS通信中间件建立发布端,并在发布端中建立数据发送者,数据发送者用于发送数据,建立好数据发送者后,选择零拷贝协议作为数据发送模式,如此,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

发布者和订阅者根据消息的Topic和QoS策略进行收发,因此,发布端配置模块111还需要设置数据发送者的Topic和QoS策略,使得发布端和订阅端可以通过Topic和QoS策略建立发布/订阅的匹配关系。

本发明中,设置数据发送者的QoS策略设置为RELIABLE,RELIABLE表示可靠性策略,如果在数据发送者上应用此QoS策略,则可以保证数据发送者发布的数据都能被数据读取者收到。例如,在定义Kind=RELIABLE的情况下,当网络发生错误,数据读取者可能无法收到数据发送者的样本数据时,会对样本数据进行重发,保证数据读取者能够收到数据。

可选地,请参考图9,初始化模块110还包括订阅端配置模块112;订阅端配置模块112用于建立订阅端,在订阅端中建立数据读取者,并选择零拷贝协议作为数据接收模式;还用于设置数据读取者的Topic和QoS策略;其中,数据读取者的Topic和QoS策略与数据发送者的Topic和QoS策略一致。

具体地,请参考图9,DDS的通信配置包括发布端配置和订阅端配置,配置订阅端时,订阅端配置模块112通过DDS通信中间件建立订阅端,并在订阅端中建立数据接收者数据读取者,数据读取者用于接收数据,建立好数据读取者后,选择零拷贝协议作为数据接收模式,如此,可以减少数据拷贝次数,从而能够加快数据收发速率,降低通信延时。

发布者和订阅者根据消息的Topic(主题标识)和QoS(Quality of Service,服务质量)策略进行收发,因此,订阅端配置模块112还需要设置数据读取者的Topic和QoS策略。在本实施例中,订阅者的Topic和QoS策略与发布者的Topic和QoS策略一致,从而可以使订阅端和发布端之间建立发布/订阅的匹配关系。

可选地,请参考图5,共享内存包括数据内存和缓冲内存;数据内存用于存储数据;缓冲内存用于存储消息类型指针。

具体地,请参考图5,共享内存包括数据内存和缓冲内存。在本发明中,数据发送者将用户需要发送的数据存储至共享内存的数据内存后,可以得到数据的存储指针信息。通过DDS通信中间件对存储指针信息进行数据封装,可以得到消息类型指针,写入缓冲区将消息类型指针发送至共享内存的缓冲内存中。

可见,本发明将直接传输数据内容转换为指针信息传输,由于指针信息为4字节整型数据,因此,传输时间不会受到数据量的影响,也即,无论用户需要发送的数据量多大,数据在传输过程中所消耗的时间都是恒定的。

发明人针对UDP协议、共享内存协议、以及本发明的基于零拷贝的协议,建立了数据传输对比试验,在相同的数据收/发测试环境(1个数据发送者发送数据、1个数据读取者接收数据,配置相同的Topic和Qos策略),多次发送不同样本容量的数据包,获取各个传输协议下的发送延时数据如表1所示,通过对各个传输协议下的发送延时数据进行结果对比,得到数据传输延时对比图,如图10和图11所示。

表1

由表1、图10、图11可知,使用零拷贝的数据订阅分发服务,使得本地进程/用户间通信发布订阅的只是真实消息数据的地址。对于延迟和吞吐量的提升有一个质的改变,延迟时间可达到us级别,吞吐量可达到GB/s级别,传输性能大大提升,通信效率远高于UDP和共享内存传输协议。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

相关技术
  • 一种基于Contiki系统的智能云锁通信方法、通信系统
  • 一种基于AUTOSAR实现DDS通信的系统架构、通信方法及设备
  • 一种嵌入式操作系统上基于K3s的DDS通信中间件的构建方法
技术分类

06120116131314