CN114945009B - PCIe总线连接的设备间进行通信的方法、设备及系统 - Google Patents

PCIe总线连接的设备间进行通信的方法、设备及系统 Download PDF

Info

Publication number
CN114945009B
CN114945009B CN202210667664.8A CN202210667664A CN114945009B CN 114945009 B CN114945009 B CN 114945009B CN 202210667664 A CN202210667664 A CN 202210667664A CN 114945009 B CN114945009 B CN 114945009B
Authority
CN
China
Prior art keywords
message
ipc
buffer
request message
length
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210667664.8A
Other languages
English (en)
Other versions
CN114945009A (zh
Inventor
罗建洪
刘琛
宋新立
杨珏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Moore Threads Technology Co Ltd
Original Assignee
Moore Threads Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Moore Threads Technology Co Ltd filed Critical Moore Threads Technology Co Ltd
Priority to CN202210667664.8A priority Critical patent/CN114945009B/zh
Publication of CN114945009A publication Critical patent/CN114945009A/zh
Application granted granted Critical
Publication of CN114945009B publication Critical patent/CN114945009B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9031Wraparound memory, e.g. overrun or underrun detection
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Systems (AREA)

Abstract

本公开提供了一种用于在通过PCIe总线连接的设备之间进行通信的方法,其应用于消息发送设备,包括:将IPC请求消息写入第一缓冲区,其中,第一缓冲区能够被消息发送设备和消息接收设备访问;生成第一中断信息并将其发送给消息接收设备。本公开还提供了一种用于在通过PCIe总线连接的设备之间进行通信的方法,其应用于消息接收设备,包括:接收来自消息发送设备的第一中断信息;响应于第一中断信息,从第一缓冲区中获取来自消息发送设备的IPC请求消息,其中,第一缓冲区能够被消息发送设备和消息接收设备访问。本公开还涉及分别应用上述方法的消息发送设备和消息接收设备,以及还涉及包括该消息发送设备和消息接收设备的系统。

Description

PCIe总线连接的设备间进行通信的方法、设备及系统
本申请是2022年2月24日提交的、申请号为202210169494.0、且发明名称为“PCIe设备与主机设备的通信方法、系统及设备”的发明专利申请的分案申请。
技术领域
本发明涉及数据通信技术领域,尤其涉及一种用于在通过PCIe总线连接的设备之间进行通信的方法,还涉及应用了该方法的设备,以及包括该设备的系统。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
目前主机系统对PCIe设备的通信,主要通过以下两种方式:
1. 将PCIe(PCI-Express,peripheral component interconnect express,高速串行计算机扩展总线标准)设备的寄存器空间地址映射到PCIe BAR(Base AddressRegisters,基址寄存器)空间,使设备寄存器空间,暴露在主机侧,然后主机通过对映射的BAR空间进行相关的读写来达到与PCIe设备通信的目的。由于设备寄存器空间暴露在主机端,对于某些敏感寄存器,比如复位、重启等,攻击者可以通过写BAR空间对设备进行一定的攻击,导致PCIe设备异常。
2. 主机访问通过PCIe通道,实现硬件IPC(Inter-Process Communication,进程间通信)通信机制进行获取配置。
上述两种通信方式存在的问题是:
1. 针对PCIe BAR完全映射方式,PCIe设备资源不安全,会被随意篡改。
2. 针对硬件IPC方式:硬件实现的IPC深度小,IPC消息长度固定,使用不方便,导致通信效率低;同时,为了确保通信同步性,一次只能发送一个信息,也会导致通信效率低。
发明内容
根据本申请的第一个方面,提供了一种用于在通过PCIe总线连接的设备之间进行通信的方法,所述方法应用于消息发送设备,包括:将IPC请求消息写入第一缓冲区,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问;生成第一中断信息并将其发送给所述消息接收设备。
根据一些示例性实施例,根据上述第一个方面的方法还包括:根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度;确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度。
根据一些示例性实施例,其中,所述将IPC请求消息写入第一缓冲区还包括:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将所述IPC请求消息的消息头写入所述第一缓冲区,其中,所述消息头包括所述内容的存放地址。
根据一些示例性实施例,其中,所述将IPC请求消息写入第一缓冲区包括:将所述第一缓冲区中的IPC请求消息按照环形队列的形式进行排列。
根据一些示例性实施例,根据上述第一个方面的方法还包括:接收来自所述消息接收设备的第二中断信息;响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。
根据一些示例性实施例,其中,所述IPC请求消息包括同步异步标识和优先级标识。
根据本申请的第二个方面,提供了一种用于在通过PCIe总线连接的设备之间进行通信的方法,所述方法应用于消息接收设备,包括:接收来自消息发送设备的第一中断信息;响应于所述第一中断信息,从第一缓冲区中获取来自所述消息发送设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问。
根据一些示例性实施例,其中,所述响应于所述第一中断信息,从第一缓冲区中获取来自所述消息发送设备的IPC请求消息还包括:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。
根据一些示例性实施例,根据上述第二个方面的方法还包括:将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问;生成第二中断消息并将其发送给所述消息发送设备。
根据一些示例性实施例,根据上述第二个方面的方法还包括:根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度;确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度。
根据一些示例性实施例,其中,所述将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区包括:将所述第二缓冲区中的IPC答复消息按照环形队列的形式进行排列。
根据本申请的第三个方面,提供了一种通过PCIe总线连接的消息发送设备,包括:IPC请求消息写入单元,其被配置成:将IPC请求消息写入第一缓冲区,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问;第一中断信息发送单元,其被配置成:生成第一中断信息并将其发送给所述消息接收设备。
根据一些示例性实施例,根据上述第三个方面的消息发送设备还包括:第一缓冲区当前深度确定单元,其被配置成:根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度;IPC请求消息数量确定单元,其被配置成:确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度。
根据一些示例性实施例,其中,所述IPC请求消息写入单元还被配置成:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将所述IPC请求消息的消息头写入所述第一缓冲区,其中,所述消息头包括所述内容的存放地址。
根据一些示例性实施例,根据上述第三个方面的消息发送设备还包括:第二中断信息接收单元,其被配置成:接收来自所述消息接收设备的第二中断信息;IPC答复消息获取单元,其被配置成:响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。
根据本申请的第四个方面,提供了一种通过PCIe总线连接的消息接收设备,包括:第一中断信息接收单元,其被配置成:接收来自消息发送设备的第一中断信息;IPC请求消息获取单元,其被配置成:响应于所述第一中断信息,从第一缓冲区中获取来自所述消息接收设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问。
根据一些示例性实施例,其中,所述IPC请求消息获取单元还被配置成:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。
根据一些示例性实施例,根据上述第四个方面的消息接收设备还包括:IPC答复消息写入单元,其被配置成:将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问;第二中断信息发送单元,其被配置成:生成第二中断消息并将其发送给所述消息发送设备。
根据一些示例性实施例,根据上述第四个方面的消息接收设备还包括:第二缓冲区当前深度确定单元,其被配置成:根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度;IPC答复消息数量确定单元,其被配置成:确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度。
根据本申请的第五个方面,提供了一种系统,包括:根据上述第三个方面及其示例性实施例所述的消息发送设备;根据上述第四个方面及其示例性实施例所述的消息接收设备;其中,所述消息发送设备和所述消息接收设备通过PCIe总线彼此连接。
首先,与现有技术中针对PCIe BAR完全映射方式,PCIe设备资源不安全的技术方案相比,本发明实施例提供的在通过PCIe总线连接的设备之间进行通信的技术方案中,将通过PCIe共享的预设空间大小的内存作为IPC通信的共享内存,将预设空间大小的内存配置成PCIe设备和主机设备都能访问的第一缓冲区,基于该预先配置的第一缓冲区进行PCIe设备与主机设备的通信,可以保证PCIe设备与主机设备之间通信的安全性。
其次,与现有技术中针对硬件IPC方式,硬件实现的IPC深度小,IPC消息长度固定,使用不方便,同时为了确保通信同步性,一次只能发送一个信息,导致通信效率低的技术方案相比,本发明实施例提供的PCIe设备与主机设备的通信方案中,IPC请求消息长度不固定,消息发送设备(例如PCIe设备或者主机设备)可以根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一缓冲区的当前深度,由此可见,第一缓冲区的深度是实时计算出来的,是弹性深度,根据该弹性深度,将第一数量的IPC请求消息写入第一缓冲区,支持IPC请求消息的弹性深度和长度;同时,在消息发送设备(例如PCIe设备或者主机设备)将第一数量的IPC请求消息写入第一环形队列缓冲区后,触发中断,消息接收设备(例如主机设备或PCIe设备)在接收到中断后及时查询环形队列缓冲区,从第一环形队列缓冲区中获取第一数量的IPC请求消息。之后,消息接收设备可以对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。因此,通过上述可知,本发明实施例保证了PCIe设备与主机设备之间通信的高效性。
综上,本发明实施例提供的PCIe设备与主机设备的通信方案可以保证PCIe设备与主机设备高效安全地进行通信。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。应理解的是,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中应用于系统的PCIe设备与主机设备的通信方法的流程示意图;
图2为本发明实施例中环形队列缓冲区示意图;
图3为本发明实施例中PCIe设备与主机设备的通信原理示意图;
图4为本发明实施例中应用于PCIe设备的通信方法的流程示意图;
图5为本发明实施例中应用于主机设备的通信方法的流程示意图;
图6为本发明实施例中PCIe设备与主机设备的通信系统的结构示意图;
图7为本发明实施例中PCIe设备的结构示意图;
图8为本发明实施例中主机设备的结构示意图;
图9为本发明实施例中应用于通过PCIe总线连接的消息发送设备的通信方法的流程示意图;
图10为本发明实施例中应用于通过PCIe总线连接的消息接收设备的通信方法的流程示意图;
图11a至图11c为本发明实施例中消息发送设备的结构示意图;
图12a至图12c为本发明实施例中消息接收设备的结构示意图;
图13为本发明实施例中包括消息发送设备和消息接收设备的通信系统的结构示意图。
应理解的是,附图中显示的内容都仅仅是示意性的,因此其不必按照比例进行绘制。此外,在全部附图中,相同或相似的特征由相同或相似的附图标记指示。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
图1为本发明实施例中应用于系统的PCIe设备与主机设备的通信方法的流程示意图,如图1所示,该方法包括如下步骤:
步骤100:高速串行计算机扩展总线标准PCIe设备在进程间通信IPC请求消息长度小于或等于预先配置的第一环形队列缓冲区的当前可用长度时,根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一环形队列缓冲区的当前深度;根据第一环形队列缓冲区的当前深度,确定可写入第一环形队列缓冲区中的IPC请求消息的第一数量;将第一数量的IPC请求消息写入第一环形队列缓冲区;生成第一中断信息发送至主机设备;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
步骤200:主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
首先,与现有技术中针对PCIe BAR完全映射方式,PCIe设备资源不安全的技术方案相比,本发明实施例提供的PCIe设备与主机设备的通信方法中,将通过PCIe共享的预设空间大小的内存作为IPC通信的共享内存,将预设空间大小的内存配置成环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问,基于该预先配置的第一环形队列缓冲区进行PCIe设备与主机设备的通信,可以保证PCIe设备与主机设备之间通信的安全性。
其次,与现有技术中针对硬件IPC方式:硬件实现的IPC深度小,IPC消息长度固定,使用不方便,同时为了确保通信同步性,一次只能发送一个信息,导致通信效率低的技术方案相比,本发明实施例提供的PCIe设备与主机设备的通信方法中,IPC请求消息长度不固定,PCIe设备根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一环形队列缓冲区的当前深度,由此可见,第一环形队列缓冲区的深度是实时计算出来的,是弹性深度,根据该弹性深度,将第一数量的IPC请求消息写入第一环形队列缓冲区,支持IPC消息弹性深度和长度,其中,第一数量小于或等于该弹性深度;同时,在PCIe设备将第一数量的IPC请求消息写入第一环形队列缓冲区后,触发中断,主机设备在接收到中断后及时查询环形队列缓冲区,从第一环形队列缓冲区中获取第一数量的IPC请求消息,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,因此,通过上述可知,本发明实施例保证了PCIe设备与主机设备之间通信的高效性。
综上,本发明实施例提供的PCIe设备与主机设备的通信方法可以保证PCIe设备与主机设备高效安全地进行通信。
PCIe(PCI-Express)是最新的总线和接口标准,越来越多的外置高速设备都使用PCIe接口与主机通信。这些通过PCIe接口与主机通信的外置高速设备可以被统称为PCIe设备(例如:显卡、视频加速卡和千兆网卡等),本发明主要以PCIe设备为显卡为例进行说明。下面结合图2和图3,对本发明实施例提供的PCIe设备与主机设备的通信方法进行详细介绍。
具体实施时,在上述步骤100之前的预先配置的步骤中,PCIe BAR映射所有PCIe设备(例如显卡,其GPU)的内存空间(SRAM + DDR),可以通过GPU设备安全配置寄存器配置将内存空间设置为安全和非安全两种,安全即通过PCIe无法访问,非安全则PCIe能够访问。通过PCIe共享一块不涉及安全(预设空间大小的内存能被PCIe设备和主机设备访问)的小内存(预设空间大小的内存,例如4K)作为IPC通信的共享内存,软件的方式将这块小内存配置成环形队列缓冲区;其中:
(1)对于共享一块不涉及安全的小内存,这块小内存可以是芯片内部SRAM(StaticRandom-Access Memory,静态随机存取存储器),也可以是外部的DDR(Double Data RateSDRAM,双倍速率的SDRAM)上某一个区域,可以通过安全控制寄存器和相关的软件配合动态配置。
(2)经过配置后,对于分配出来的作为环形队列缓冲区的内存区域,可通过PCIeBAR读写,其他安全内存区域读写,都会被强制回复全F的值。
具体实施时,在上述步骤100中,通信双方各自有生产者和消费者,环形队列缓冲区深度可按照消息长度变化,弹性深度;具体地:
环形队列缓冲区深度可以理解为环形队列缓冲区可以放多少个IPC消息,存放多少消息是弹性的,根据消息长度来确定,不会在软件建立环形缓冲区时候就定。弹性深度与发生IPC消息通信当时的场景需求相关,场景比如:
(1)发送消息长度接近或者等于环形队列缓冲区最大长度场景,这时候深度就为1,只能存一个消息
(2)发送消息长度特别短场景,那这时深度就为环形队列缓冲区最大长度除上发送消息长度
(3)混合消息长度场景,这时候的深度不确定,需要图2的头指针和尾指针的差值计算缓冲区剩余的长度,来确定缓冲区是否满足下一个消息发送。
为了便于更好地理解本发明如何实施,下面对环形缓冲区数据结构进行介绍。
如图2所示,头指针:指向第一个消息起始地方,每取出一个消息,头指针加上取走消息长度,更新头指针;尾指针:指向最后一个消息结束地方,每写入一个消息,尾指针加上写入消息长度,更新尾指针;环形缓冲区指针,指向缓冲区开始地方。消息:由消息头和消息内容构成,其中,消息头如下表1所示。
消息类型 多IPC通道场景下,告知当前消息是发给哪个设备的,联合消息中断信息使用
消息编号 多IPC消息时候,消息需要回复情况下,标记是回复的哪个消息。
消息优先级 设置消息优先级
消息同步异步标志位 标记消息是同步还是异步
消息回复标志位 标记消息需不需要回复
消息中断信息 在多IPC通道场景下,告诉消息中断该发给那个设备
消息内容长度 标记消息内容的大小
消息位置标记 标记消息实际存在缓冲区,显存,还是系统内存中
表1。
具体实施时,通信双方互相发送信息时候,IPC消息可灵活封装实现:
(1)IPC消息长度小于分配环形队列缓冲区最大长度时,可以将消息放入环形缓冲区进行发送。
(2)IPC消息长度大于软件分配环形队列缓冲区时,IPC消息在环形缓冲区只传送显存或者系统内存的地址,通过GPU DMA进行传输。比如分配环形队列缓冲区最大长度为4K,但是发送消息长度为1M,这时候装不下1M数据,可通过如下步骤:
对于消息发送方,如图2所示,消息头中,将消息位置标记设置为PCIe设备的内存(例如显卡地显存)或者系统内存,消息长度设置为1M,消息内容保存1M信息存放在显存或者系统内存的地址A(存放地址)。
接收方收到消息,解析消息头,知道消息存放在显存或者系统内存,将DMA的目的地址设为A,源地址设备本地地址B,触发DMA搬移,将1M消息搬移到B地址(预设地址)起始的1M内存内。
通过上述可知,在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:
PCIe设备在IPC请求消息长度大于第一环形队列缓冲区的当前可用长度时,将IPC请求消息的内容存放在PCIe设备的内存或系统内存内,将存放地址写入第一环形队列缓冲区;
主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取存放地址,将直接存储器访问DMA的目的地址设为所述存放地址,触发DMA搬移,将IPC请求消息的内容搬移到预设地址的内存内。
具体实施时,本发明实施例实现SGI中断,通过中断实现IPC消息实时收发,一次可处理多笔IPC消息。
(1)SGI中断也称为软件生成中断,是可以通过软件来触发的一种硬件中断机制。
(2)由于GPU的内存全部都分配给PCIe BAR,且安全控制寄存器将SGI的寄存器配置空间设置为非安全,主机设备就可以通过软件方式配置SGI寄存器产生中断给GPU设备,GPU设备反之也可以通过软件方式配置,通过PCIe MSI产生中断给主机设备。
(3)这种中断机制比设备轮询,有实时性效果,双方可以及时收到中断去查询环形队列缓冲区数据结构,如图2所示。
(4)如图2所示,根据环形缓冲区数据结构头指针、尾指针和消息头的消息内容长度,可以取一个或者多个消息。
在一个实施例中,在上述步骤200中,主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,可以包括:
主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,在判断IPC请求消息为同步消息时,在预设时长内处理所述同步消息,得到IPC请求消息的处理结果。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:
主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,在判断IPC请求消息为异步消息时,将异步消息放入预先配置的待处理队列,在满足预设处理条件后处理所述异步消息,得到IPC请求消息的处理结果。
具体实施时,支持IPC消息同步和异步模式。
(1)同步消息模式,用于紧急消息、时效性高的消息,需要马上执行,例如,通过IPC消息去获取设备告警温度、功耗、时间戳等。
(2)异步消息模式,用于不紧急消息,时效性不高消息,耗费资源消息,例如通过IPC消息 更新16M flash、获取加密算法处理结果等。
在一个实施例中,主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,可以包括:
主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,根据IPC请求消息的同步异步标识和优先级标识,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,主机设备在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,根据IPC请求消息的同步异步标识和优先级标识,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,可以包括:
主机设备根据高优先级同步消息、低优先级同步消息、高优先级异步消息和低优先级异步消息的处理顺序,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
具体实施时,支持IPC优先级处理,根据消息的优先级不同,处理不同优先级别的IPC消息请求。
(1)如图3所示,每个消息的消息头信息中设置有消息优先级,实现了8个同步消息优先级、8个异步消息各优先级和优先级链表,比如当前环形缓冲区中有7个不同优先级别的IPC 消息时,在收到SGI中断后,取出全部消息,对于同步消息,则直接处理并回复;对于异步消息,根据消息优先级分别插入到优先级链表,之后,再根据优先级链表逐个优先级处理。
(2)对于优先级处理顺序:高优先级同步消息>低优先级同步消息>高优先级异步消息>低优先级异步消息。
在一个实施例中,如图3所示,上述PCIe设备与主机设备的通信方法还可以包括:
主机设备在处理完IPC请求消息后,判断IPC请求消息需要回复时,在IPC请求消息对应的IPC答复消息长度小于或等于预先配置的第二环形队列缓冲区的当前可用长度时,根据IPC答复消息长度和第二环形队列缓冲区的当前可用长度,确定第二环形队列缓冲区的当前深度;根据第二环形队列缓冲区的当前深度,确定可写入第二环形队列缓冲区中的IPC答复消息的第二数量,将第二数量的IPC答复消息写入第二环形队列缓冲区,其中第二数量小于或等于当前深度;生成第二中断信息发送至PCIe设备;所述第二环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;所述IPC答复消息为IPC请求消息的处理结果;
PCIe设备在接收到第二中断信息时,从第二环形队列缓冲区中获取第二数量的IPC答复消息。
图3中1-18为设备A给设备B发送一次消息处理过程。设备B给设备A发送消息时候也是同样操作。图3中的设备A可以是主机设备,设备B可以是PCIe设备;或者,设备B可以是主机设备,设备A可以是PCIe设备。另外,为了便于理解本发明如何实施,关于图3中的IPC消息,再做阐述如下:IPC消息可以包括IPC请求消息和IPC答复消息,IPC请求消息可以包括同步消息和异步消息两种。其中:同步请求消息可以是请求获取时间戳、设备温度阈值、风扇转速等实时性高的业务请求消息,这时候同步请求消息对应的IPC答复消息也为同步消息,需要及时答复,实时返回温度和时间戳等信息。异步消息可以是获取固件升级结果、设备日志、开机日志等信息,这种信息时效性不是很高,所以异步消息对应的IPC的答复消息也是异步的,消息回复快慢不影响设备的正常运行。
本发明实施例提供的PCIe设备与主机设备的通信方法通过PCIe BAR映射小内存作为共享内存,通过软件配置的环形缓冲区、SGI中断、security control等方式,实现对GPU的安全实时通信。具体地:
1. SGI中断保证实时性同时,减少硬件复杂度;即软硬件结合,保证实时性同时,不需要硬件复杂实现简单且安全。
2. 弹性深度和长度,支持IPC深度可软件定制;支持不同长度IPC消息;即,软件环形缓冲区管理,支持IPC消息弹性深度和长度。
3. 中断实时处理的同时,支持IPC消息优先级处理和同步异步处理。
本发明实施例中还提供了一种应用于PCIe设备的通信方法,如下面的实施例所述。由于该应用于PCIe设备的通信方法解决问题的原理与应用于系统的PCIe设备与主机设备的通信方法相似,因此该应用于PCIe设备的通信方法的实施可以参见应用于系统的PCIe设备与主机设备的通信方法的实施,重复之处不再赘述。
图4为本发明实施例中应用于PCIe设备的通信方法的流程示意图,如图4所示,该方法包括如下步骤:
步骤101:在进程间通信IPC请求消息长度小于或等于预先配置的第一环形队列缓冲区(图3中的环形缓冲区0)的当前可用长度时,根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一环形队列缓冲区的当前深度;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
步骤102:根据第一环形队列缓冲区的当前深度,确定可写入第一环形队列缓冲区中的IPC请求消息的第一数量;
步骤103:将第一数量的IPC请求消息写入第一环形队列缓冲区;
步骤104:生成第一中断信息发送至主机设备。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:
在IPC请求消息长度大于第一环形队列缓冲区的当前可用长度时,将IPC请求消息的内容存放在PCIe设备的内存或系统内存内;
将存放地址写入第一环形队列缓冲区。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:在接收到第二中断信息时,从第二环形队列缓冲区(图3中的环形缓冲区1)中获取第二数量的IPC答复消息。
本发明实施例中还提供了一种应用于主机设备的通信方法,如下面的实施例所述。由于该应用于主机设备的通信方法解决问题的原理与应用于系统的PCIe设备与主机设备的通信方法相似,因此该应用于主机设备的通信方法的实施可以参见应用于系统的PCIe设备与主机设备的通信方法的实施,重复之处不再赘述。
图5为本发明实施例中应用于主机设备的通信方法的流程示意图,如图5所示,该方法包括如下步骤:
步骤201:在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
步骤202:对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:
在接收到第一中断信息时,从第一环形队列缓冲区中获取存放地址;
将直接存储器访问DMA的目的地址设为所述存放地址;
触发DMA搬移,将IPC请求消息的内容搬移到预设地址的内存内。
在一个实施例中,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,可以包括:
在判断IPC请求消息为同步消息时,在预设时长内处理所述同步消息,得到IPC请求消息的处理结果。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:在判断IPC请求消息为异步消息时,将异步消息放入预先配置的待处理队列,在满足预设处理条件后处理所述异步消息,得到IPC请求消息的处理结果。
在一个实施例中,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,包括:
根据IPC请求消息的同步异步标识和优先级标识,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,根据IPC请求消息的同步异步标识和优先级标识,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果,可以包括:
根据高优先级同步消息、低优先级同步消息、高优先级异步消息和低优先级异步消息的处理顺序,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,上述PCIe设备与主机设备的通信方法还可以包括:
在处理完IPC请求消息后判断IPC请求消息需要回复,IPC请求消息对应的IPC答复消息长度小于或等于预先配置的第二环形队列缓冲区的当前可用长度时,根据IPC答复消息长度和第二环形队列缓冲区的当前可用长度,确定第二环形队列缓冲区的当前深度;所述第二环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;所述IPC答复消息为IPC请求消息的处理结果;
根据第二环形队列缓冲区的当前深度,确定可写入第二环形队列缓冲区中的IPC答复消息的第二数量;
将第二数量的IPC答复消息写入第二环形队列缓冲区;
生成第二中断信息发送至PCIe设备。
本发明实施例中还提供了一种PCIe设备与主机设备的通信系统,如下面的实施例所述。由于该系统解决问题的原理与应用于系统的PCIe设备与主机设备的通信方法相似,因此该系统的实施可以参见应用于系统的PCIe设备与主机设备的通信方法的实施,重复之处不再赘述。
图6为本发明实施例中PCIe设备与主机设备的通信系统的结构示意图,如图6所示,该系统包括:
PCIe设备01,用于在IPC请求消息长度小于或等于预先配置的第一环形队列缓冲区的当前可用长度时,根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一环形队列缓冲区的当前深度;根据第一环形队列缓冲区的当前深度,确定可写入第一环形队列缓冲区中的IPC请求消息的第一数量;将第一数量的IPC请求消息写入第一环形队列缓冲区;生成第一中断信息发送至主机设备;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
主机设备02,用于在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,所述PCIe设备还用于在IPC请求消息长度大于第一环形队列缓冲区的当前可用长度时,将IPC请求消息的内容存放在PCIe设备的内存或系统内存,将存放地址写入第一环形队列缓冲区;
在一个实施例中,所述主机设备还用于在接收到第一中断信息时,从第一环形队列缓冲区中获取存放地址,将直接存储器访问DMA的目的地址设为所述存放地址,触发DMA搬移,将IPC请求消息的内容搬移到预设地址的内存内。
在一个实施例中,所述主机设备还用于在处理完IPC请求消息后判断IPC请求消息需要回复时,在IPC请求消息对应的IPC答复消息长度小于或等于预先配置的第二环形队列缓冲区的当前可用长度时,根据IPC答复消息长度和第二环形队列缓冲区的当前可用长度,确定第二环形队列缓冲区的当前深度;根据第二环形队列缓冲区的当前深度,确定可写入第二环形队列缓冲区中的IPC答复消息的第二数量,将第二数量的IPC答复消息写入第二环形队列缓冲区;生成第二中断信息发送至PCIe设备;所述第二环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;所述IPC答复消息为IPC请求消息的处理结果;
所述PCIe设备还用于在接收到第二中断信息时,从第二环形队列缓冲区中获取第二数量的IPC答复消息。
本发明实施例中还提供了一种PCIe设备,如下面的实施例所述。由于该PCIe设备解决问题的原理与应用于系统的PCIe设备与主机设备的通信方法相似,因此该PCIe设备的实施可以参见应用于系统的PCIe设备与主机设备的通信方法的实施,重复之处不再赘述。
图7为本发明实施例中PCIe设备的结构示意图,如图7所示,该PCIe设备包括:
第一深度确定单元011,用于在进程间通信IPC请求消息长度小于或等于预先配置的第一环形队列缓冲区的当前可用长度时,根据IPC请求消息长度和第一环形队列缓冲区的当前可用长度,确定第一环形队列缓冲区的当前深度;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
第一数量确定单元012,用于根据第一环形队列缓冲区的当前深度,确定可写入第一环形队列缓冲区中IPC请求消息的第一数量;
第一写入单元013,用于将第一数量的IPC请求消息写入第一环形队列缓冲区;
第一中断单元014,用于生成第一中断信息发送至主机设备。
在一个实施例中,上述PCIe设备还可以包括:第一获取单元,用于在接收到第二中断信息时,从第二环形队列缓冲区中获取第二数量的IPC答复消息。
在一个实施例中,上述PCIe设备还可以包括:
存储单元,用于在IPC请求消息长度大于第一环形队列缓冲区的当前可用长度时,将IPC请求消息的内容存放在PCIe设备的内存或系统内存内;
所述第一写入单元还用于将所述存放地址写入第一环形队列缓冲区。
本发明实施例中还提供了一种主机设备,如下面的实施例所述。由于该主机设备解决问题的原理与应用于系统的PCIe设备与主机设备的通信方法相似,因此该主机设备的实施可以参见应用于系统的PCIe设备与主机设备的通信方法的实施,重复之处不再赘述。
图8为本发明实施例中主机设备的结构示意图,所述主机设备与PCIe设备进行通信,如图8所示,该主机设备包括:
第二获取单元021,用于在接收到第一中断信息时,从第一环形队列缓冲区中获取第一数量的IPC请求消息;所述第一环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;
处理单元022,用于对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,所述第二获取单元还用于在接收到第一中断信息时,从第一环形队列缓冲区中获取存放地址;
所述主机设备还可以包括:
地址设置单元,用于将直接存储器访问DMA的目的地址设为所述存放地址;
数据搬移单元,用于触发DMA搬移,将IPC请求消息的内容搬移到预设地址的内存内。
在一个实施例中,所述处理单元具体用于:在判断IPC请求消息为同步消息时,在预设时长内处理所述同步消息,得到IPC请求消息的处理结果。
在一个实施例中,所述处理单元还用于在判断IPC请求消息为异步消息时,将异步消息放入预先配置的待处理队列,在满足预设处理条件后处理所述异步消息,得到IPC请求消息的处理结果。
在一个实施例中,所述处理单元具体用于:根据IPC请求消息的同步异步标识和优先级标识,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,所述处理单元具体用于:根据高优先级同步消息、低优先级同步消息、高优先级异步消息和低优先级异步消息的处理顺序,对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。
在一个实施例中,上述主机设备还可以包括:
第二深度确定单元,用于在处理完IPC请求消息后判断IPC请求消息需要回复,IPC请求消息对应的IPC答复消息长度小于或等于预先配置的第二环形队列缓冲区的当前可用长度时,根据IPC答复消息长度和第二环形队列缓冲区的当前可用长度,确定第二环形队列缓冲区的当前深度;所述第二环形队列缓冲区为将通过PCIe共享的预设空间大小的内存预先配置成的环形队列缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问;所述IPC答复消息为IPC请求消息的处理结果;
第二数量确定单元,用于根据第二环形队列缓冲区的当前深度,确定可写入第二环形队列缓冲区中IPC答复消息的第二数量;
第二写入单元,用于将第二数量的IPC答复消息写入第二环形队列缓冲区;
第二中断单元,用于生成第二中断信息发送至PCIe设备。
参见图9,其为本发明实施例中应用于通过PCIe总线连接的消息发送设备的通信方法的流程示意图。如图9所示,用于在通过PCIe总线连接的设备之间进行通信的应用于消息发送设备的方法包括步骤301、302:
在步骤301,将IPC请求消息写入第一缓冲区,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问;
在步骤302,生成第一中断信息并将其发送给所述消息接收设备。
在图9所示的方法中,消息发送设备可以是PCIe设备,消息接收设备可以是主机设备,或者,消息发送设备可以是主机设备,消息接收设备可以是PCIe设备,本申请对此不作限制。第一缓冲区由通过PCIe共享的预设空间大小的内存构成,并且可以具有图2所示那样的结构,IPC请求消息可以具有图2所示那样的消息结构。因此,在该方法中,消息发送设备向消息接收设备发送IPC请求消息的操作经由双方都对第一缓冲区的访问来实现,由此,避免了现有技术中采用的PCIe BAR完全映射方式,从而确保了通信的安全性。此外,通过第一中断信息告知消息接收设备的方式具有更好的实时性。
在一个实施例中,图9所示的方法还可以包括下述步骤:根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度;确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度。在该实施例中,第一缓冲区的当前深度是实时计算出来的,是弹性深度,IPC请求消息的长度也可以是可变的,是弹性长度,并且可以一次写入多个IPC请求消息。由此,确保了通过PCIe总线连接的设备之间的通信的灵活性和高效性。
在一个实施例中,图9所示的方法的步骤301还可以包括:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将所述IPC请求消息的消息头写入所述第一缓冲区,其中,所述消息头包括所述内容的存放地址。由此,可以实现对IPC请求消息的灵活封装,同时确保了即便在IPC请求消息的长度大于第一缓冲区的可用长度的情况下,通过将包括所述内容的存放地址的IPC请求消息的消息头写入所述第一缓冲区,依然能够以安全、实时的方式实现PCIe总线连接的设备之间的通信。
在一个实施例中,图9所示的方法的步骤301还可以包括:将所述第一缓冲区中的IPC请求消息按照环形队列的形式进行排列。因此,第一缓冲区中各消息的排列方式可以如图3所示。环形队列的应用使得第一缓冲区的空间能够得到充分的利用。
在一个实施例中,图9所示的方法还可以包括下述步骤:接收来自所述消息接收设备的第二中断信息;响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。如前面已经详细描述的,在一些情形中,IPC请求消息需要进行回复。因此,消息接收设备以相似的方式,即经由双方都能够访问的第二缓冲区和相应的中断消息,来实现对IPC答复消息的发送。在这种情形中,消息发送设备接收来自消息接收设备的第二中断信息,并且响应于第二中断信息,从第二缓冲区中获取IPC答复消息。
参见图10,其为本发明实施例中应用于通过PCIe总线连接的消息接收设备的通信方法的流程示意图。如图10所示,用于在通过PCIe总线连接的设备之间进行通信的应用于消息发送设备的方法包括步骤401、402:在步骤401,接收来自消息发送设备的第一中断信息;
在步骤402,响应于所述第一中断信息,从第一缓冲区中获取来自所述消息发送设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问。
在图10所示的方法中,消息发送设备可以是PCIe设备,消息接收设备可以是主机设备,或者,消息发送设备可以是主机设备,消息接收设备可以是PCIe设备,本申请对此不作限制。应理解的是,图10所示的应用于消息接收设备的方法与图9所示的应用于消息发送设备的方法对应,由此,两者共同用于实现在通过PCIe总线连接的设备之间的通信。
在一个实施例中,图10所示的方法中的步骤402还包括:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。由此,确保了在IPC请求消息的长度大于第一缓冲区的可用长度的情况下,仍然能够获取IPC请求消息的内容。
在一个实施例中,图10所示的方法还包括下述步骤:将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问;生成第二中断消息并将其发送给所述消息发送设备。如前面已经详细描述的,在一些情形中,IPC请求消息需要进行回复。因此,消息接收设备以类似的方式,即,经由双方都能够访问的第二缓冲区和相应的中断消息,来实现对IPC答复消息的发送。第二缓冲区同样可以由通过PCIe共享的预设空间大小的内存构成,并且可以具有图2所示那样的结构。进一步地,在该实施例中,该方法还可以包括下述步骤:根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度;确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度。在该实施例中,第二缓冲区的当前深度是实时计算出来的,是弹性深度,IPC答复消息的长度也可以是可变的,是弹性长度,并且可以一次写入多个IPC答复消息。由此,确保了通过PCIe总线连接的设备之间的通信的灵活性和高效性。
在一个实施例中,图10所示的方法中的将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区的步骤包括:将所述第二缓冲区中的IPC答复消息按照环形队列的形式进行排列。因此,第二缓冲区中各消息的排列方式可以如图3所示。环形队列的应用使得第二缓冲区的空间能够得到充分的利用。
参见图11a至图11c,其显示了根据本申请的一些实施例的通过PCIe总线连接的消息发送设备。
如图11a所示,根据一个实施例的消息发送设备030a包括:IPC请求消息写入单元031和第一中断信息发送单元032。IPC请求消息写入单元031被配置成:将IPC请求消息写入第一缓冲区,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问。第一中断信息发送单元032被配置成:生成第一中断信息并将其发送给所述消息接收设备。此外,在一个实施例中,IPC请求消息写入单元031还被配置成:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将包括所述内容的存放地址的IPC请求消息的消息头写入所述第一缓冲区。
如图11b所示,根据另一个实施例的消息发送设备030b除了IPC请求消息写入单元031和第一中断信息发送单元032之外,还包括第一缓冲区当前深度确定单元033和IPC请求消息数量确定单元034。第一缓冲区当前深度确定单元033被配置成:根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度。IPC请求消息数量确定单元034被配置成:确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度。
如图11c所示,根据另一个实施例的消息发送设备030b除了IPC请求消息写入单元031、第一中断信息发送单元032、第一缓冲区当前深度确定单元033和IPC请求消息数量确定单元034之外,还包括第二中断信息接收单元035和IPC答复消息获取单元036。第二中断信息接收单元035被配置成:接收来自所述消息接收设备的第二中断信息。IPC答复消息获取单元036被配置成:响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。
此外,如前面已经详细描述的,消息发送设备所发送的IPC请求消息可以包括同步异步标识和优先级标识。由此,能够针对同步消息、异步消息或者具有不同优先级的消息进行不同的处理。例如,可以根据高优先级同步消息、低优先级同步消息、高优先级异步消息和低优先级异步消息的处理顺序,对IPC请求消息进行处理,得到IPC请求消息的处理结果。
应理解的是,图11a至图11c所示的消息发送设备030a、030b和030c包括的各个单元涉及上文中关于图9及其相关实施例描述的方法的各个步骤的操作,因此,这里不再赘述。
参见图12a至图12c,其显示了根据本申请的一些实施例的通过PCIe总线连接的消息接收设备。
如图12a所示,根据一个实施例的消息发送设备040a包括第一中断信息接收单元041和IPC请求消息获取单元042。第一中断信息接收单元041被配置成:接收来自消息发送设备的第一中断信息。IPC请求消息获取单元042被配置成:响应于所述第一中断信息,从第一缓冲区中获取来自所述消息接收设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问。此外,在一个实施例中,IPC请求消息获取单元042还被配置成:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。
如图12b所示,根据另一个实施例的消息接收设备040b除了第一中断信息接收单元041和IPC请求消息获取单元042之外,还包括IPC答复消息写入单元043和第二中断信息发送单元044。IPC答复消息写入单元043被配置成:将与所述IPC请求消息对应的IPC答复消息写入第二缓冲区,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。第二中断信息发送单元044被配置成:生成第二中断消息并将其发送给所述消息发送设备。
如图12c所示,根据另一个实施例的消息接收设备040c除了第一中断信息接收单元041、IPC请求消息获取单元042、IPC答复消息写入单元043和第二中断信息发送单元044之外,还包括第二缓冲区当前深度确定单元045和IPC答复消息数量确定单元046。第二缓冲区当前深度确定单元045被配置成:根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度。IPC答复消息数量确定单元046被配置成:确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度。
应理解的是,图12a至图12c所示的消息发送设备040a、040b和040c包括的各个单元涉及上文中关于图10及其相关实施例描述的方法的各个步骤的操作,因此,这里不再赘述。
还应理解的是,上文中关于图7描述的PCIe设备的各个单元、关于图8描述的主机设备的各个单元、关于图11a至图11c描述的消息发送设备的各个单元以及关于图12a至12c描述的消息接收设备的各个单元均可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些单元可以被实现为计算机可执行代码/指令,该计算机可执行代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些单元可以被实现为硬件逻辑/电路,例如,可以通过现场可编程门阵列(即FPGA)来实现。此外,在另一些示例性实施例中,这些单元中的一个或多个可以一起被在片上系统(SoC)中实现。SoC可以包括集成电路芯片(其包括处理器(例如,中央处理单元(CPU)、微控制器、微处理器、数字信号处理器(DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
参见图13,其示出了根据本申请的实施例的一种系统,其可以应用根据本申请的方法来实现通信。如图13所示,系统050包括消息发送设备051和消息接收设备052,其中,消息发送设备051和消息接收设备052通过PCIe总线053彼此连接。因此,对于消息发送设备051,其可以应用上文中关于图9及其相关实施例描述的方法,对于消息接收设备052,其可以应用上文中关于图10及其相关实施例描述的方法。应理解的是,消息发送设备051可以是PCIe设备或者主机设备,消息接收设备052可以是主机设备或者PCIe设备,本申请对此不作限制。
本申请技术方案中对数据的获取、存储、使用、处理等均符合国家法律法规的相关规定。
本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述PCIe设备与主机设备的通信方法。
本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现上述PCIe设备与主机设备的通信方法。
由上述详细说明可知,根据本发明的各实施提供的在通过PCIe总线连接的设备之间进行通信的技术方案至少实现了如下有益的技术效果:
首先,与现有技术中针对PCIe BAR完全映射方式,PCIe设备资源不安全的技术方案相比,本发明实施例提供的PCIe设备与主机设备的通信方案中,将通过PCIe共享的预设空间大小的内存作为IPC通信的共享内存,将预设空间大小的内存配置成第一缓冲区,所述预设空间大小的内存能被PCIe设备和主机设备访问,基于该预先配置的第一缓冲区进行PCIe设备与主机设备的通信,可以保证PCIe设备与主机设备之间通信的安全性。
其次,与现有技术中针对硬件IPC方式:硬件实现的IPC深度小,IPC消息长度固定,使用不方便,同时为了确保通信同步性,一次只能发送一个信息,导致通信效率低的技术方案相比,本发明实施例提供的PCIe设备与主机设备的通信方案中,IPC请求消息长度不固定,消息发送设备(例如PCIe设备或主机设备)可以根据IPC请求消息长度和第一缓冲区的当前可用长度,确定第一缓冲区的当前深度,由此可见,第一缓冲区的深度是实时计算出来的,是弹性深度,根据该弹性深度,将第一数量的IPC请求消息写入第一缓冲区,由此,支持IPC消息弹性深度和长度;同时,在消息发送设备(例如PCIe设备或主机设备)将第一数量的IPC请求消息写入第一缓冲区后,触发中断,消息接收设备(例如主机设备或PCIe设备)在接收到中断后及时查询环形队列缓冲区,从第一环形队列缓冲区中获取第一数量的IPC请求消息。之后,消息接收设备(例如主机设备或PCIe设备)可以对第一数量的IPC请求消息进行处理,得到IPC请求消息的处理结果。因此,通过上述可知,本发明实施例保证了PCIe设备与主机设备之间通信的高效性。
综上,本发明实施例提供的PCIe设备与主机设备的通信方案可以保证PCIe设备与主机设备高效安全地进行通信。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。此外,还应理解的是,在流程图中表示或在此以其他方式描述的方法的各个步骤仅仅示例性的,并不意味着所图示或描述的方法的步骤必须按照所示或所述的步骤执行。相反,在流程图中表示或在此以其他方式描述的方法的各个步骤可以按照与本公开中不同的顺序被执行,或者可以同时被执行。此外,根据需要,在流程图中表示或在此以其他方式描述的方法还可以包括其他附加的步骤。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (14)

1.一种用于在通过PCIe总线连接的设备之间进行通信的方法,所述方法应用于消息发送设备,包括:
当IPC请求消息长度小于或等于第一缓冲区的当前可用长度时,根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问;
确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度;
将所述IPC请求消息写入所述第一缓冲区;
生成第一中断信息并将其发送给所述消息接收设备。
2.根据权利要求1所述的方法,其中,所述方法还包括:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将所述IPC请求消息的消息头写入所述第一缓冲区,其中,所述消息头包括所述内容的存放地址。
3.根据权利要求1所述的方法,其中,所述将所述IPC请求消息写入所述第一缓冲区包括:将所述第一缓冲区中的IPC请求消息按照环形队列的形式进行排列。
4.根据权利要求1所述的方法,还包括:
接收来自所述消息接收设备的第二中断信息;
响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。
5.根据权利要求1所述的方法,其中,所述IPC请求消息包括同步异步标识和优先级标识。
6.一种用于在通过PCIe总线连接的设备之间进行通信的方法,所述方法应用于消息接收设备,包括:
接收来自消息发送设备的第一中断信息;
响应于所述第一中断信息,从第一缓冲区中获取来自所述消息发送设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问;
当与所述IPC请求消息对应的IPC答复消息长度小于或等于第二缓冲区的当前可用长度时,根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问;
确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度;
将所述IPC答复消息写入所述第二缓冲区;
生成第二中断消息并将其发送给所述消息发送设备。
7.根据权利要求6所述的方法,其中,所述方法还包括:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。
8.根据权利要求6所述的方法,其中,所述将所述IPC答复消息写入所述第二缓冲区包括:将所述第二缓冲区中的IPC答复消息按照环形队列的形式进行排列。
9.一种通过PCIe总线连接的消息发送设备,包括:
第一缓冲区当前深度确定单元,其被配置成:当IPC请求消息长度小于或等于第一缓冲区的当前可用长度时,根据所述第一缓冲区的当前可用长度和所述IPC请求消息的长度确定所述第一缓冲区的当前深度,其中,所述第一缓冲区能够被所述消息发送设备和消息接收设备访问;
IPC请求消息数量确定单元,其被配置成:确定要写入所述第一缓冲区的IPC请求消息的数量,其中,所述数量小于或等于所述当前深度;
IPC请求消息写入单元,其被配置成:将IPC请求消息写入所述第一缓冲区;
第一中断信息发送单元,其被配置成:生成第一中断信息并将其发送给所述消息接收设备。
10.根据权利要求9所述的消息发送设备,其中,所述IPC请求消息写入单元还被配置成:当所述IPC请求消息的长度大于所述第一缓冲区的当前可用长度时,将所述IPC请求消息的内容存放于所述消息发送设备的内存或者系统内存中,并且将所述IPC请求消息的消息头写入所述第一缓冲区,其中,所述消息头包括所述内容的存放地址。
11.根据权利要求9所述的消息发送设备,还包括:
第二中断信息接收单元,其被配置成:接收来自所述消息接收设备的第二中断信息;
IPC答复消息获取单元,其被配置成:响应于所述第二中断信息,从第二缓冲区中获取来自所述消息接收设备的IPC答复消息,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问。
12.一种通过PCIe总线连接的消息接收设备,包括:
第一中断信息接收单元,其被配置成:接收来自消息发送设备的第一中断信息;
IPC请求消息获取单元,其被配置成:响应于所述第一中断信息,从第一缓冲区中获取来自所述消息接收设备的IPC请求消息,其中,所述第一缓冲区能够被所述消息发送设备和所述消息接收设备访问;
第二缓冲区当前深度确定单元,其被配置成:当与所述IPC请求消息对应的IPC答复消息长度小于或等于第二缓冲区的当前可用长度时,根据所述第二缓冲区的当前可用长度和所述IPC答复消息的长度确定所述第二缓冲区的当前深度,其中,所述第二缓冲区能够被所述消息发送设备和所述消息接收设备访问;
IPC答复消息数量确定单元,其被配置成:确定要写入所述第二缓冲区的IPC答复消息的数量,其中,所述数量小于或等于所述当前深度;
IPC答复消息写入单元,其被配置成:将所述IPC答复消息写入所述第二缓冲区;
第二中断信息发送单元,其被配置成:生成第二中断消息并将其发送给所述消息发送设备。
13.根据权利要求12所述的消息接收设备,其中,所述IPC请求消息获取单元还被配置成:当所述IPC请求消息为包括内容的存放地址的消息头时,将DMA的目的地址设为所述存放地址,并且将所述IPC请求消息的内容以DMA搬移的方式搬移到预设地址的内存中。
14.一种系统,包括:
根据权利要求9至11中任一项所述的消息发送设备;
根据权利要求12或13所述的消息接收设备;
其中,所述消息发送设备和所述消息接收设备通过PCIe总线彼此连接。
CN202210667664.8A 2022-02-24 2022-02-24 PCIe总线连接的设备间进行通信的方法、设备及系统 Active CN114945009B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210667664.8A CN114945009B (zh) 2022-02-24 2022-02-24 PCIe总线连接的设备间进行通信的方法、设备及系统

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202210169494.0A CN114244790B (zh) 2022-02-24 2022-02-24 PCIe设备与主机设备的通信方法、系统及设备
CN202210667664.8A CN114945009B (zh) 2022-02-24 2022-02-24 PCIe总线连接的设备间进行通信的方法、设备及系统

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN202210169494.0A Division CN114244790B (zh) 2022-02-24 2022-02-24 PCIe设备与主机设备的通信方法、系统及设备

Publications (2)

Publication Number Publication Date
CN114945009A CN114945009A (zh) 2022-08-26
CN114945009B true CN114945009B (zh) 2023-04-25

Family

ID=80747942

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202210169494.0A Active CN114244790B (zh) 2022-02-24 2022-02-24 PCIe设备与主机设备的通信方法、系统及设备
CN202210667664.8A Active CN114945009B (zh) 2022-02-24 2022-02-24 PCIe总线连接的设备间进行通信的方法、设备及系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202210169494.0A Active CN114244790B (zh) 2022-02-24 2022-02-24 PCIe设备与主机设备的通信方法、系统及设备

Country Status (1)

Country Link
CN (2) CN114244790B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114513545B (zh) * 2022-04-19 2022-07-12 苏州浪潮智能科技有限公司 请求处理方法、装置、设备及介质
CN115168259B (zh) * 2022-09-06 2023-01-24 浪潮电子信息产业股份有限公司 一种数据存取方法、装置、设备和计算机可读存储介质
CN116303130B (zh) * 2023-05-16 2023-08-15 苏州浪潮智能科技有限公司 存储设备异步事件上报方法及其应用设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113742269A (zh) * 2021-11-03 2021-12-03 浙江国利信安科技有限公司 用于epa设备的数据传输方法、处理设备和介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1286038C (zh) * 2003-10-17 2006-11-22 中兴通讯股份有限公司 基于双环形队列、非中断式pci通信方法
US7669000B2 (en) * 2007-10-23 2010-02-23 Brocade Communication Systems, Inc. Host bus adapter with multiple hosts
KR20110072023A (ko) * 2009-12-22 2011-06-29 삼성전자주식회사 휴대 단말기의 프로세서 간 데이터 통신 방법 및 장치
CN102255794B (zh) * 2010-05-17 2014-07-30 塔塔咨询服务有限公司 远程消息收发吞吐量优化和等待时间缩短用系统和方法
US8745291B2 (en) * 2011-10-04 2014-06-03 Qualcomm Incorporated Inter-processor communication apparatus and method
CN111666148A (zh) * 2014-04-30 2020-09-15 华为技术有限公司 计算机,控制设备和数据处理方法
CN107368379B (zh) * 2017-07-14 2020-07-10 中南大学 面向EVP的跨Guest OS进程间通信方法及系统
US10496457B2 (en) * 2018-04-02 2019-12-03 Micron Technology, Inc. Grouping requests to reduce inter-process communication in memory systems
US10789110B2 (en) * 2018-09-28 2020-09-29 Apple Inc. Methods and apparatus for correcting out-of-order data transactions between processors
CN109508241B (zh) * 2018-11-20 2021-04-20 中国电子科技集团公司第五十四研究所 一种进程间数据交换方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113742269A (zh) * 2021-11-03 2021-12-03 浙江国利信安科技有限公司 用于epa设备的数据传输方法、处理设备和介质

Also Published As

Publication number Publication date
CN114945009A (zh) 2022-08-26
CN114244790A (zh) 2022-03-25
CN114244790B (zh) 2022-07-12

Similar Documents

Publication Publication Date Title
CN114945009B (zh) PCIe总线连接的设备间进行通信的方法、设备及系统
CN112422615B (zh) 一种通信的方法及装置
US8332866B2 (en) Methods, systems, and apparatus for object invocation across protection domain boundaries
JP6961686B2 (ja) トリガ動作を用いたgpuリモート通信
US8996774B2 (en) Performing emulated message signaled interrupt handling
US10496427B2 (en) Method for managing memory of virtual machine, physical host, PCIE device and configuration method thereof, and migration management device
CN113296884B (zh) 虚拟化方法、装置、电子设备、介质及资源虚拟化系统
US8745291B2 (en) Inter-processor communication apparatus and method
US11095626B2 (en) Secure in-line received network packet processing
CN110119304B (zh) 一种中断处理方法、装置及服务器
CN112698959A (zh) 一种多核通信方法和装置
CN114281484B (zh) 数据传输方法、装置、设备及存储介质
CN115964319A (zh) 远程直接内存访问的数据处理方法及相关产品
US9727521B2 (en) Efficient CPU mailbox read access to GPU memory
US20200293318A1 (en) Buffer Allocation with Memory-based Configuration
CN110457251B (zh) 一种多处理器间的数据通信方法及装置
WO2018000195A1 (zh) 一种报文传输方法、虚拟交换机及服务器
WO2019024763A1 (zh) 报文处理
CN112256460A (zh) 进程间通信方法、装置、电子设备及计算机可读存储介质
CN116860391A (zh) Gpu算力资源调度方法、装置、设备和介质
US20140089624A1 (en) Cooperation of hoarding memory allocators in a multi-process system
US20180052659A1 (en) Sending and receiving data between processing units
WO2017210015A1 (en) Improving throughput in openfabrics environments
CN114297129A (zh) 一种基于zynq7010的面向报文双核通信实现方法
CN106933646B (zh) 一种创建虚拟机的方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant