CN115858434A - 一种计算设备及请求处理方法 - Google Patents

一种计算设备及请求处理方法 Download PDF

Info

Publication number
CN115858434A
CN115858434A CN202111114530.5A CN202111114530A CN115858434A CN 115858434 A CN115858434 A CN 115858434A CN 202111114530 A CN202111114530 A CN 202111114530A CN 115858434 A CN115858434 A CN 115858434A
Authority
CN
China
Prior art keywords
target
memory block
storage address
memory
data
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.)
Pending
Application number
CN202111114530.5A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202111114530.5A priority Critical patent/CN115858434A/zh
Publication of CN115858434A publication Critical patent/CN115858434A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种计算设备及请求处理方法,可以应用于计算设备,所述计算设备与目标设备通信连接,所述计算设备包括请求处理模块,所述请求处理模块用于:在获取指示将目标数据传递至第一进程的数据传递请求后,通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,并向所述目标存储地址对应的存储空间传递所述目标数据。计算设备与目标设备的进程间的数据传递不再需要经过网卡进行转发,减少了进程间数据的传递次数(由3次网络传输简化为只有1次),提高了进程间数据的传输效率。

Description

一种计算设备及请求处理方法
技术领域
本申请涉及计算机技术领域,尤其涉及一种计算设备及请求处理方法。
背景技术
外设组件快速互联标准(peripheral component interconnect express,PCIe),是一种连接计算机主板和外设的总线标准。它是显卡、硬盘、固态硬盘(solid state disk,SSD)、WIFI模块、网络适配器等等外设与主机相连的通用总线标准。数据处理器(dataprocessing unit,DPU),是专用处理器的一个大类,与中央处理器(central processingunit,CPU)、图形处理器(graphics processing unit,GPU)并列。
PCIe总线可以将主机host的CPU与若干外设互连起来,DPU一般就作为PCIe的终节点endpoint而连接在PCIe总线拓扑中。在主机host、DPU的架构中,可以将主机的特定的业务功能(如网络协议栈、存储协议栈)卸载到DPU执行,从而释放主机的CPU去进行其他业务活动,此外,还可以在主机CPU负荷高的时段,或者触发计算密集型的任务时,可以利用DPU的闲置核分担主机CPU的计算任务,使性能线性提升。由此可见,很多业务需求需要主机的进程与DPU中的进程进行通信。
在现有的实现中,DPU和主机host分别都要与网卡设备交互,在进行进程间数据的迁移时,需要由网卡设备进行一次内部转发,转发次数较多,导致处理流程较长。
发明内容
本申请公开了一种计算设备及请求处理方法,减少了进程间数据的传递次数(由3次网络传输简化为只有1次),提高了进程间数据的传输效率。
第一方面,本申请提供了一种计算设备,所述计算设备与目标设备通信连接,所述计算设备包括请求处理模块,所述请求处理模块用于:获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程;通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;为了能够使得发送端在向接收端发送数据时,不需要通过中间连接的网卡设备的转发,接收端可以向发送端暴露可以供发送端使用的存储地址,发送端可以将要发送给接收设备的数据存放至该存储地址对应的存储空间。也就是说,需要一个中间存储位置,该存储位置可以供计算设备和目标设备共享。其中,BAR的地址空间对于计算设备和目标设备来说均是可见的(或者描述为计算设备和目标设备来均可访问BAR),因此,接收端可以将供发送端使用的存储地址存至BAR中,以便发送端可以将要发送给接收设备的数据存放至BAR中的存储地址对应的存储空间。向所述目标存储地址对应的存储空间传递所述目标数据。
通过上述方式,计算设备与目标设备的进程间的数据传递不再需要经过网卡进行转发,减少了进程间数据的传递次数(由3次网络传输简化为只有1次),实现了计算设备到目标设备的端到端通信。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。在主机、DPU的架构中,可以将主机的特定的业务功能(如网络协议栈、存储协议栈)卸载到DPU执行,从而释放主机的CPU去进行其他业务活动,此外,还可以在主机CPU负荷高的时段,或者触发计算密集型的任务时,可以利用DPU的闲置核分担主机CPU的计算任务,使性能线性提升。
在一种可能的实现中,所述数据传递请求来自于第二进程,所述第二进程为运行在所述计算设备上的进程。
从计算设备的角度来说,计算设备从软件层可以划分为用户态和内核态,第二进程可以运行在用户态中,第二进程需要将目标数据传递至第一进程时,可以将目标数据写入内核态提供的内存块中。在现有的从用户态到内核态的拷贝过程中,需要在内核态缓存中拷贝一次数据,然后从用户态缓存(send buf)拷贝到内核态缓存(kernel send buf),内核态缓存再拷贝一次,在这个过程中,从内存的视角来看,就是把消息从一块内存区域拷贝到另一块内存,这样的拷贝在内存的视角看来是毫无意义而且浪费时间的,出于提高业务性能和系统效率的考虑,这种没有意义的拷贝都是需要避免的。本申请实施例中,用户态可以直接将目标数据写入内核态提供的内存块中,实现了内核态与用户态之间的零拷贝。
应理解,可选的,可以采用mmap等内存映射方法将目标数据从用户态写入内核态提供的内存块中,本申请并不限定将目标数据从用户态写入内核态的具体实现方式。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址,其中,所谓目标设备的内存地址可以理解为目标设备的内存中的存储地址。应理解,存储地址可以是内存的实际物理地址,也可以是虚拟地址,例如经过输入/输出内存管理单元(input/outputmemory management unit,IOMMU)转换得到的虚拟地址。
在一种可能的实现中,所述BAR存储有为所述第一进程分配的多个存储地址;所述请求处理模块在获取所述第一进程对应的目标存储地址时,具体用于:通过访问所述BAR,获取第一状态信息,所述第一状态信息指示所述多个存储地址中每个存储地址是否被占用;基于所述第一状态信息指示所述目标存储地址未被占用,从所述多个存储地址中获取所述目标存储地址。
在一种可能的实现中,请求处理模块可以从为所述第一进程分配的一个或多个存储地址中选择未被占用且存储空间大小足够的地址(目标存储地址)作为传递目标数据的目的地址。
在一种可能的实现中,所述请求处理模块还可以在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,所述第二状态信息指示所述目标存储地址被占用。
应理解,当请求处理模块将数据存储至BAR中的存储地址对应的存储空间后,在目标设备未从该存储空间中获取到数据时,该存储地址可以认为处于被占用的状态,当BAR中的存储地址对应的存储空间未被请求处理模块存储数据时,该存储地址可以认为处于未被占用的状态。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;
在一种可能的实现中,可以配置状态信息来表示BAR中各个存储地址的被占用情况以及读取情况,例如状态信息可以包括第一指针(例如可以称之为pHead)和第二指针(例如可以称之为pTail),其中,第一指针可以指向目标设备将要读取的内存块中的存储地址(也就是第一个可用的存储地址,或者称之为头部的存储地址),第二指针可以指向当前最后一个可用的存储地址(或者称之为尾部的存储地址)。
以第一进程为例,所述第一指针指向为第一进程分配的所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址,而在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,所述请求处理模块在修改所述第一状态信息时,具体用于:将所述第二指针指向的内存块修改为所述多个内存块中的第三内存块,所述第三内存块包括所述目标存储地址。
在一种可能的实现中,所述请求处理模块可以通过直接存储器访问DMA的方式,将所述目标数据搬运到目标存储地址对应的存储空间。其中,请求处理模块可以将本端存储目标数据的内存块作为源消息内存,从BAR中获取的目标存储地址作为目的内存,驱动DMA将目标数据块传递到目的内存中,完成数据从发送端进程到接收端进程的传送。
在一种可能的实现中,所述请求处理模块还可以在将所述目标数据传递至所述目标存储地址对应的存储空间之后,向所述目标设备发送指示信息,所述指示信息用于指示所述目标设备从所述目标存储地址对应的存储空间中获取所述目标数据。其中,DMA完成消息的传递后,会向计算设备回填一个完成描述符,此时,计算设备通过中断通知目标设备有新消息到达。
第二方面,本申请提供了一种目标设备,所述目标设备与计算设备通信连接,所述目标设备包括数据处理模块,所述数据处理模块用于:
获取指示信息,所述指示信息来自于所述计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为所述目标设备上运行的进程;
基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;所述数据处理模块在获取所述第一进程对应的目标存储地址时,具体用于:
通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用;
基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
在一种可能的实现中,所述数据处理模块还用于:
在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
在一种可能的实现中,所述数据处理模块还用于:
在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,
在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址,所述第一存储地址与所述目标存储地址不同。
在一种可能的实现中,所述第二状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,在修改所述第二状态信息时,所述请求处理模块具体用于:
将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
在一种可能的实现中,所述数据处理模块还用于:
在获取指示信息之前,为所述第一进程分配所述目标存储地址,并将所述目标存储地址存储至所述BAR中。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址。
第三方面,本申请提供了一种请求处理方法,其特征在于,所述方法应用于计算设备,所述计算设备与目标设备通信连接,所述方法包括:
获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程;
通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;
向所述目标存储地址对应的存储空间传递所述目标数据。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
在一种可能的实现中,所述数据传递请求来自于第二进程,所述第二进程为运行在所述计算设备上的进程。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址。
在一种可能的实现中,所述BAR存储有为所述第一进程分配的多个存储地址;所述获取所述第一进程对应的目标存储地址,包括:
通过访问所述BAR,获取第一状态信息,所述第一状态信息指示所述多个存储地址中每个存储地址是否被占用;
基于所述第一状态信息指示所述目标存储地址未被占用,从所述多个存储地址中获取所述目标存储地址。
在一种可能的实现中,所述方法还包括:
在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,所述第二状态信息指示所述目标存储地址被占用。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;
所述第一状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,所述修改所述第一状态信息,包括:
将所述第二指针指向的内存块修改为所述多个内存块中的第三内存块,所述第三内存块包括所述目标存储地址。
在一种可能的实现中,所述请求处理模块在向所述目标存储地址对应的存储空间传递所述目标数据时,具体用于:
通过直接存储器访问DMA的方式,将所述目标数据搬运到目标存储地址对应的存储空间。
在一种可能的实现中,所述方法还包括:
在将所述目标数据传递至所述目标存储地址对应的存储空间之后,向所述目标设备发送指示信息,所述指示信息用于指示所述目标设备从所述目标存储地址对应的存储空间中获取所述目标数据。
第四方面,本申请提供了一种数据处理方法,所述方法应用于目标设备,所述目标设备与计算设备通信连接,所述方法包括:
获取指示信息,所述指示信息来自于所述计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为所述目标设备上运行的进程;
基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;所述获取所述第一进程对应的目标存储地址,包括:
通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用;
基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
在一种可能的实现中,所述方法还包括:
在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
在一种可能的实现中,所述方法还包括:
在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,
在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址,所述第一存储地址与所述目标存储地址不同。
在一种可能的实现中,所述第二状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,所述修改所述第二状态信息,包括:
将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
在一种可能的实现中,所述方法还包括:
在获取指示信息之前,为所述第一进程分配所述目标存储地址,并将所述目标存储地址存储至所述BAR中。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址。
本方面的有益效果请参阅前述第一方面相关的介绍,具体此处不再赘述。
第五方面提供一种计算机可读存储介质,该计算机可读存储介质中存储了程序代码,这些程序代码在计算机设备上运行时,使得计算机设备执行如本申请能够执行第二方面或第二方面的任意一种可能的实现方式所描述的方法。
第六方面提供一种计算机程序产品,该计算机程序产品包含的程序代码被计算机设备执行时,以实现如本申请能够执行第二方面或第二方面的任意一种可能的实现方式所描述的方法。
由于本申请提供的各装置可用于执行前述对应的方法,因此本申请各装置所能获得到的技术效果可参考前述对应的方法所获得的技术效果,此处不再赘述。
附图说明
图1为一种可能的应用架构示意图;
图2为一种可能的应用架构示意图;
图3a和图3b为一种请求处理方法的流程示意;
图4为一种状态信息的示意;
图5为一种状态信息的示意;
图6为一种状态信息的示意;
图7为一种状态信息的示意;
图8为内存块的一种状态变化示意;
图9a为一种数据处理方法的流程示意;
图9b为一种数据处理方法的流程示意;
图10为一种请求处理方法的流程示意;
图11为一种数据处理方法的流程示意。
具体实施方式
下面结合本发明实施例中的附图对本发明实施例进行描述。本发明的实施方式部分使用的术语仅用于对本发明的具体实施例进行解释,而非旨在限定本发明。
下面结合附图,对本申请的实施例进行描述。本领域普通技术人员可知,随着技术的发展和新场景的出现,本申请实施例提供的技术方案对于类似的技术问题,同样适用。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本申请的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
参照图1,图1为本申请实施例的一个应用架构示意,其中该应用架构包括计算设备和目标设备,其中,计算设备可以为主机host10,目标设备可以为DPU20,或者,计算设备可以为DPU20,目标设备可以为主机host10。计算设备和目标设备通信连接,例如可以通过PCIe总线连接。
其中,PCIe是一种连接计算机主板和外设的总线标准。它是显卡、硬盘、固态硬盘(solid state disk,SSD)、WIFI模块、网络适配器等等外设与主机相连的通用总线标准。
参照图2,图2为本申请实施例的一个应用架构示意,其中该应用架构包括主机host10和DPU20。
主机host10可以包括用户态侧的libframe101,该libframe101可以指主机host10的用户态库。主机host10还可以包括内核态侧的frame101,frame101可以指主机host10的内核态软件框架以及驱动。DPU20可以包括用户态侧的libframe201,该libframe201可以指DPU20的用户态库。DPU20还可以包括内核态侧的frame201,frame201可以指DPU20的内核态软件框架以及驱动。其中,libframe101和libframe201可以为进程提供接口,并且向内核发起收发消息请求,frame101以及frame 201可以为用户态进程进行消息转发和接收。
主机host10和DPU20上可以运行有进程,进程也可以称之为线程或者应用程序(application,APP)。主机host10和DPU20上运行的进程之间可以进行通信,也就是进程间通信(inter-process communication,IPC)。IPC可以指在不同进程(相同主机或不同主机)之间相互传递信息或访问资源的通信技术。
主机host10和DPU20之间可以部署基地址寄存器(base address register,BAR),BAR是位于PCIe设备之内的一段共享内存空间,设备和主机软件都可以读写该内存空间。
主机host10和DPU20之间可以通过直接内存访问(direct memory access,DMA)的方式进行数据传输,DMA是一种内存访问技术,它允许内部的硬件子系统独立地直接读写系统内存,而不需要CPU的介入。DMAC可以代表DMA控制器(controller)。
其中,DPU RX ring是指DPU的接收ring环,host驱动DMA将消息填入其中,由DPU接收。host RX ring是指host的接收ring环,DPU驱动DMA将消息填入其中,host接收。
参见图3a和图3b,图3a和图3b为本申请实施例提供的一种计算设备的示意,所述计算设备与目标设备通信连接,所述计算设备包括请求处理模块300,所述请求处理模块300用于:
301、获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程。
本申请可以应用于发送端(本实施例也可以称之为计算设备)的进程向接收端(本实施例也可以称之为目标设备)的进程发送数据的过程,其中,发送端可以为DPU 20,接收端可以为主机host 10,或者发送端可以为主机host 10,接收端可以为DPU 20。
应理解,计算设备和目标设备的角色可以互换,例如在某一时刻,发送端可以为DPU20,接收端可以为主机host 10,在另一时刻,发送端可以为DPU 20,接收端可以为主机host10,这里并不限定。
应理解,本实施例中的进程也可以称之为线程,每个进程通常都有自己的一部分独立的系统资源,且彼此是隔离的,为了能使不同的进程互相访问资源并进行协调工作,才有了进程间的通信。
在主机、DPU 20的架构中,可以将主机的特定的业务功能(如网络协议栈、存储协议栈)卸载到DPU 20执行,从而释放主机的CPU去进行其他业务活动,此外,还可以在主机CPU负荷高的时段,或者触发计算密集型的任务时,可以利用DPU 20的闲置核分担主机CPU的计算任务,使性能线性提升。由此可见,很多业务需求需要主机的进程与DPU 20中的进程进行通信。本申请实施例以计算设备的第二进程向目标设备的第一进程传输目标数据为例进行描述。
为了能够使得发送端在向接收端发送数据时,不需要通过中间连接的网卡设备的转发,接收端可以向发送端暴露可以供发送端使用的存储地址,发送端可以将要发送给接收设备的数据存放至该存储地址对应的存储空间。也就是说,需要一个中间存储位置,该存储位置可以供计算设备和目标设备共享。其中,BAR的地址空间对于计算设备和目标设备来说均是可见的(或者描述为计算设备和目标设备来均可访问BAR),因此,接收端可以将供发送端使用的存储地址存至BAR中,以便发送端可以将要发送给接收设备的数据存放至BAR中的存储地址对应的存储空间。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址,其中,所谓目标设备的内存地址可以理解为目标设备的内存中的存储地址。应理解,存储地址可以是内存的实际物理地址,也可以是虚拟地址,例如经过输入/输出内存管理单元(input/outputmemory management unit,IOMMU)转换得到的虚拟地址。
在一种可能的实现中,可以对BAR进行初始化。在进行BAR的初始化时,DPU 20侧的frame 202驱动可以通过相关的配置设定属性,例如包括申请BAR空间内存(可以包括多个内存块)、设置MSIX中断向量表等等。而主机host 10侧可以通过标准的PCIe协议驱动,扫描得到DPU 20设备,然后调用主机侧的frame 102驱动,由frame 102驱动初始化DPU 20的BAR空间,例如可以将内存块的状态初始化为未使用状态(或者称之为为被占用的状态)。
从接收端,也就是目标设备的角度来说,需要选择用于供发送端,也就是计算设备发送目标数据时的存储地址,并将存储地址存储至BAR中以便暴露给计算设备,该存储地址需要是未被其他数据占用的存储空间的地址。接下来介绍如何选择存储地址。
在一种可能的实现中,目标设备上可以运行有一个或多个进程,BAR中可以存储有为各个进程分配的存储地址,以第一进程为例,在一种可能的实现中,第一进程可以通过自身的libframe(若第一进程为运行在DPU20上的进程,则为libframe201,若第一进程为运行在主机host10上的进程,则为libframe101)向内核frame(若第一进程为运行在DPU20上的进程,则为frame202,若第一进程为运行在主机host10上的进程,则为frame102)框架注册一个进程通道,frame框架可以为本通道(即第一进程)申请内存池(包括多个内存块,每个内存块对应一个存储地址,每个存储地址为为第一进程分配的存储地址),可选的,内存块的大小可以为1Kbyte、2Kbyte等。
应理解,放置到BAR中的存储地址在未被释放之前不可以被使用(例如被放置到BAR中的其他位置),因此,可以对各个内存块配置状态,该状态可以指示存储地址所在的内存块是否可以被存储至BAR中,例如,可以基于多个链表来管理各个内存块的状态,针对于未被放置到BAR中的内存块,可以将其置于内存池idle链表中(该链表中的内存块为未被置于BAR中的内存块),针对于内存池idle链表中的内存块,可以被取出放置到BAR中,进而可以供计算设备传递目标数据时使用,针对于放置到BAR中的内存块,可以将其置于内存池shared链表中(该链表中的内存块为被置于BAR中的内存块)。
应理解,将内存块置于BAR中可以描述为将内存块中的存储地址存储至BAR中。
以将为第一进程分配的内存块为例,该内存块(数量为一个或多个)可以被置于BAR中,由于BAR中可以存储有为一个或多个进程(可以是目标设备上运行的进程,也可以是计算设备上运行的进程)分配的存储地址,因此为了区分各个进程,可以在BAR中配置多个队列,每个队列对应一个进程,且每个队列仅用于存储为对应的进程所分配的存储地址。进而,为第一进程分配的内存块在BAR中的存放位置可以为与第一进程对应的内存池队列。可选的,该队列可以为ring环203或ring环204。
此外,可以配置状态信息来表示BAR中各个存储地址的被占用情况以及读取情况,例如状态信息可以包括第一指针(例如可以称之为pHead)和第二指针(例如可以称之为pTail),其中,第一指针可以指向目标设备将要读取的内存块中的存储地址(也就是第一个可用的存储地址,或者称之为头部的存储地址),第二指针可以指向当前最后一个可用的存储地址(或者称之为尾部的存储地址)。
以第一进程为例,所述第一指针指向为第一进程分配的所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址,而在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
参照图4,第一指针可以指向第一内存块(内存块2),第二指针可以指向第二内存块(内存块4),由于内存块2和内存块4不重合,则所述第一内存块(内存块2)包括的存储地址、所述第二内存块(内存块4)包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块(内存块3)包括的存储地址为被占用的存储地址。由所述第二内存块(内存块4)到所述第一内存块(内存块2)之间的内存块(内存块5、内存块6、内存块7、内存块8、内存块9、内存块1)包括的存储地址为未被占用的存储地址。
参照图5,第一指针可以指向第一内存块(内存块2),第二指针可以指向第二内存块(内存块2),由于内存块2和内存块2重合,则所述多个内存块(内存块1、内存块2、内存块3、内存块4、内存块5、内存块6、内存块7、内存块8、内存块9)包括的存储地址均为未被占用的存储地址。
在初始化时,由于BAR中未存储有为第一进程分配的存储地址,则frame(若第一进程为运行在DPU20上的进程,则为frame202,若第一进程为运行在主机host10上的进程,则为frame102)可以将pHead(第一指针)和pTail(第二指针)两个协同指针初始化为0,表示初始全部指向队列中第一个内存块。
从计算设备的角度来说,计算设备从软件层可以划分为用户态和内核态,第二进程可以运行在用户态中,第二进程需要将目标数据传递至第一进程时,可以将目标数据写入内核态提供的内存块中。具体的,计算设备可以通过frame(若第一进程为运行在DPU20上的进程,则为frame202,若第一进程为运行在主机host10上的进程,则为frame102)内存池申请内存块,对这部分内存块也可以配置状态来指示内存块的使用状态,例如未被使用的内存块可以配置为idle状态,正被使用的内存块可以配置为using状态,可选的,可以分别通过内存池idle链表和内存池using链表来管理上述内存块。可以由frame从idle链中分配新的内存块给第二进程使用,第二进程可以将目标数据写入该内存块中,且被使用的内存从idle链进入using链,表示正在被使用。
在现有的从用户态到内核态的拷贝过程中,需要在内核态缓存中拷贝一次数据,然后从用户态缓存(send buf)拷贝到内核态缓存(kernel send buf),内核态缓存再拷贝一次,在这个过程中,从内存的视角来看,就是把消息从一块内存区域拷贝到另一块内存,这样的拷贝在内存的视角看来是毫无意义而且浪费时间的,出于提高业务性能和系统效率的考虑,这种没有意义的拷贝都是需要避免的。本申请实施例中,用户态可以直接将目标数据写入内核态提供的内存块中,实现了内核态与用户态之间的零拷贝。
在一种可能的实现中,位于内核态的请求处理模块可以获取到用户态中第二进程的数据传递请求,该数据传递请求可以包括目标数据,该数据传递请求可以指示将目标数据传递至第一进程。
302、通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址。
在一种可能的实现中,请求处理模块在获取到数据传递请求之后,可以从BAR存储的存储地址中确定为第一进程分配的目标存储地址。
在一种可能的实现中,请求处理模块可以在BAR存储的多个队列中确定第一进程对应的队列(即目标队列),该目标队列中可以包括多个内存块,每个内存块可以包括为所述第一进程分配的一个或多个存储地址。
在一种可能的实现中,请求处理模块可以从为所述第一进程分配的一个或多个存储地址中选择未被占用且存储空间大小足够的地址(目标存储地址)作为传递目标数据的目的地址。
在一种可能的实现中,所述请求处理模块还可以在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,所述第二状态信息指示所述目标存储地址被占用。
应理解,当请求处理模块将数据存储至BAR中的存储地址对应的存储空间后,在目标设备未从该存储空间中获取到数据时,该存储地址可以认为处于被占用的状态,当BAR中的存储地址对应的存储空间未被请求处理模块存储数据时,该存储地址可以认为处于未被占用的状态。
在一种可能的实现中,所述BAR存储有为所述第一进程分配的多个存储地址;所述请求处理模块可以通过访问所述BAR,获取第一状态信息,所述第一状态信息指示所述多个存储地址中每个存储地址是否被占用,基于所述第一状态信息指示所述目标存储地址未被占用,从所述多个存储地址中获取所述目标存储地址。
其中,可选的,所述第一状态信息可以包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址。
参照图4,目标存储地址可以为内存块2、内存块3或内存块4中的地址。
在一种可能的实现中,请求处理模块可以基于第一状态信息,确定当前为第一进程分配的存储地址中未被占用的存储地址的存储空间大小,并将存储空间大小和目标数据的数据大小进行比对,若存储空间大小大于目标数据的数据大小,则可以确定空间充足,若存储空间大小大于目标数据的数据大小,则可以认为发送失败。
参照图4,若目标数据所需的内存块数量为4,而图4中可用的内存块数量为6,也就是存储空间大小大于目标数据的数据大小,则可以确定空间充足。若目标数据所需的内存块数量为7,而图4中可用的内存块数量为6,则可以认为发送失败。
在一种可能的实现中,所述请求处理模块可以在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,所述第二状态信息指示所述目标存储地址被占用。可选的,请求处理模块可以将所述第二指针指向的内存块修改为所述多个内存块中的第三内存块,所述第三内存块包括所述目标存储地址。其中,以BAR中存储的数据为队列形式为例,计算设备frame可以将该第一进程的第二指针向后挪动目标存储地址对应的内存块的数量,若该队列为ring环,则第二指针可以按ring环的机制挪动。应理解,由于涉及到共享资源的使用,所以需要由计算设备frame保证资源的原子操作,具体的,当计算设备的多个进程需要向第一进程发送数据时,在同一时刻,可以只执行一个进程的处理。
参照图6,若目标数据所需的内存块数量为3,则可以将第二指针由指向内存块2修改为指向内存块5。
以BAR中的一个存储地址的存储空间为1Kbyte为例,计算设备的frame可以从BAR中获取目标设备的第一进程的接收内存块指针,如果目标数据小于1Kbyte则获取一个内存块指针(即目标存储地址),大于1Kbyte则按需要获取多个内存块指针(即目标存储地址),注意,如果当前目标设备的第二进程的第一状态信息指示当前可用的内存块数量小于等于所需内存块个数则表示BAR中为第一进程分配的可用内存块处于不足的状态,发送将要失败。
303、向所述目标存储地址对应的存储空间传递所述目标数据。
在一种可能的实现中,在请求处理模块通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址之后,可以向所述目标存储地址对应的存储空间传递所述目标数据。
在一种可能的实现中,所述请求处理模块可以通过直接存储器访问DMA的方式,将所述目标数据搬运到目标存储地址对应的存储空间。其中,请求处理模块可以将本端存储目标数据的内存块作为源消息内存,从BAR中获取的目标存储地址作为目的内存,驱动DMA将目标数据块传递到目的内存中,完成数据从发送端进程到接收端进程的传送。
在一种可能的实现中,所述请求处理模块还可以在将所述目标数据传递至所述目标存储地址对应的存储空间之后,向所述目标设备发送指示信息,所述指示信息用于指示所述目标设备从所述目标存储地址对应的存储空间中获取所述目标数据。其中,DMA完成消息的传递后,会向计算设备回填一个完成描述符,此时,计算设备通过中断通知目标设备有新消息到达。
目标设备在接收到目标指示之后,可以通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用,并基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
在一种可能的实现中,所述数据处理模块还可以在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
在一种可能的实现中,在修改所述第二状态信息时,所述请求处理模块可以将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
参照图7,若目标数据占据了内存块2、内存块3和内存块4,则请求处理模块可以将第一指针由指向内存块2修改为指向内存块5,此时,内存块2、内存块3和内存块4未被占用。
在一种可能的实现中,以所述第二状态信息包括第一指针(pHead)和第二指针(pTail)为例,目标设备可以通过比较pHead与pTail可以得知有新消息到来,接着收取目标数据,从pHead往后直到pTail之前的内存块都包含目标数据。目标设备的Frame可以将pHead向后移动,直到目标数据全部收取完成后,pHead应与pTail重合,收取目标数据后,frame可以将目标数据报给第一进程。由于目标数据可以包括若干个新消息,可以由目标设备的libframe层通过协议进行拆分。
在一种可能的实现中,所述数据处理模块还可以在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址(第一存储地址为内存池中处于idle状态的地址),所述第一存储地址与所述目标存储地址不同。
在一种可能的实现中,目标设备frame在移动pHead之前,可以将目标内存块从BAR中移出,如果不是立刻填充新的空闲内存块,则应该先清零,防止被对端重复使用导致消息被错误覆盖。如果是立刻填充,则frame从现有的idle链中移出新的内存块填入BAR中,同时将它们记录在shared链中,表示被占用。
无论是收端或发端进程,在内存块的使用结束后,应该调用libframe的释放接口,将内存块返还给frame框架,此时frame框架将该内存块从using链中移出,重新放入idle链。这个内存管理机制保障内存池中的内存块在idle、shared、using三个链中良性循环,重复使用。
在一种可能的实现中,本实施例为匹配基于BAR进行DPU 20和host双边协同的通信机制,可以将内存池的状态分为idle、shared、using三种状态。参照图8,图8为内存块的三个状态的转换关系,这三种状态可以分别由双向链表维护,状态转换的复杂度都是O(1),其中,idle状态可以表示其中的内存是空闲状态,可以向另外两个状态转换,初始所有内存块可以是idle状态,shared状态可以表示其中的内存正在BAR中暴露,可以被对端用作发送目标内存,而不能被本端用于其他目的,可以只由idle状态转换过来,并转换为using状态,using状态可以表示内存块正在被占用,很快将会回到idle状态,可以由另外两个状态转换而来,并转向idle状态。
本申请实施例提供了一种计算设备,所述计算设备与目标设备通信连接,所述计算设备包括请求处理模块,所述请求处理模块用于:获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程;通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;向所述目标存储地址对应的存储空间传递所述目标数据。通过上述方式,计算设备与目标设备的进程间的数据传递不再需要经过网卡进行转发,减少了进程间数据的传递次数(由3次网络传输简化为只有1次),实现了计算设备到目标设备的端到端通信。
此外,DeX可以实现同一进程下的不同线程运行在不同的机器上。在运行过程中,不同节点上的线程共享统一的地址空间,当线程操作内存页面时,通过节点之间内核的缺页交互机制,使所有运行在不同节点上的线程看到的内存是完全一致的。节点之间的缺页机制需要交互内存页面数据,这需要节点之间有一个低延迟、高性能的消息通道,在图中用红色粗线框标出。一般来说,DeX框架的消息层可以使用网络通信来实现,但是对于DeX来说,网络通信延迟太高、性能太差。采用RDMA技术可以达到低延迟、高性能的要求,不过相应的RDMA的组网成本和复杂度较高。因此,现有消息通信技术无法支撑DeX在DPU场景中商用。参照表1,本申请实施例提供的消息层可以满足低延迟、高性能的数据交换需求,并且没有额外的组网要求,为DeX在DPU上落地使用奠定了技术基础。通过本专利使能DeX部署在DPU上时,HOST可以使用DPU进行算力横向扩展,也可以方便地卸载特定算法到DPU进行加速运算,进一步扩大了DPU的应用场景和市场价值。
表1
Figure BDA0003274815090000151
参照图9a和图9b,图9a和图9b示出了本申请实施例提供一种目标设备的示意,其中所述目标设备与计算设备通信连接,所述目标设备包括数据处理模块,所述数据处理模块用于:
901、获取指示信息,所述指示信息来自于所述计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为所述目标设备上运行的进程。
关于901的描述,可以参照上述实施例中303的描述,这里不再赘述。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU20;或者,所述目标设备为DPU 20,且所述计算设备为host。
902、基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
目标设备在接收到目标指示之后,可以通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用,并基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
在一种可能的实现中,所述数据处理模块还可以在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
在一种可能的实现中,在修改所述第二状态信息时,所述请求处理模块可以将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
参照图7,若目标数据占据了内存块2、内存块3和内存块4,则请求处理模块可以将第一指针由指向内存块2修改为指向内存块5,此时,内存块2、内存块3和内存块4未被占用。
在一种可能的实现中,以所述第二状态信息包括第一指针(pHead)和第二指针(pTail)为例,目标设备可以通过比较pHead与pTail可以得知有新消息到来,接着收取目标数据,从pHead往后直到pTail之前的内存块都包含目标数据。目标设备的Frame可以将pHead向后移动,直到目标数据全部收取完成后,pHead应与pTail重合,收取目标数据后,frame可以将目标数据报给第一进程。由于目标数据可以包括若干个新消息,可以由目标设备的libframe层通过协议进行拆分。
在一种可能的实现中,所述数据处理模块还可以在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址(第一存储地址为内存池中处于idle状态的地址),所述第一存储地址与所述目标存储地址不同。
在一种可能的实现中,目标设备frame在移动pHead之前,可以将目标内存块从BAR中移出,如果不是立刻填充新的空闲内存块,则应该先清零,防止被对端重复使用导致消息被错误覆盖。如果是立刻填充,则frame从现有的idle链中移出新的内存块填入BAR中,同时将它们记录在shared链中,表示被占用。
903、将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
基于同一发明构思,本申请实施例还提供一种请求处理方法,参见图10,该方法可以包括如下步骤。
1001、获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程;
步骤1002的描述可以参照上述实施例中301的描述,这里不再赘述。
1002、通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;
步骤1002的描述可以参照上述实施例中302的描述,这里不再赘述。
1003、向所述目标存储地址对应的存储空间传递所述目标数据。
步骤1003的描述可以参照上述实施例中303的描述,这里不再赘述。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU20;或者,所述目标设备为DPU 20,且所述计算设备为host。
在一种可能的实现中,所述数据传递请求来自于第二进程,所述第二进程为运行在所述计算设备上的进程。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址。
在一种可能的实现中,所述BAR存储有为所述第一进程分配的多个存储地址;所述获取所述第一进程对应的目标存储地址,包括:
通过访问所述BAR,获取第一状态信息,所述第一状态信息指示所述多个存储地址中每个存储地址是否被占用;
基于所述第一状态信息指示所述目标存储地址未被占用,从所述多个存储地址中获取所述目标存储地址。
在一种可能的实现中,所述方法还包括:
在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,所述第二状态信息指示所述目标存储地址被占用。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;
所述第一状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,所述修改所述第一状态信息,包括:
将所述第二指针指向的内存块修改为所述多个内存块中的第三内存块,所述第三内存块包括所述目标存储地址。
在一种可能的实现中,所述请求处理模块在向所述目标存储地址对应的存储空间传递所述目标数据时,具体用于:
通过直接存储器访问DMA的方式,将所述目标数据搬运到目标存储地址对应的存储空间。
在一种可能的实现中,所述方法还包括:
在将所述目标数据传递至所述目标存储地址对应的存储空间之后,向所述目标设备发送指示信息,所述指示信息用于指示所述目标设备从所述目标存储地址对应的存储空间中获取所述目标数据。
需要说明的是,图10所示的请求处理方法可以视为图3a和图3b所示的计算设备所执行的方法,图10所示的请求处理方法中未详尽描述的实现方式和技术效果可以参见图3a和图3b所示的计算设备中的相关描述。
基于同一发明构思,本申请实施例还提供一种数据处理方法,参见图11,该方法包括如下步骤。
1101、获取指示信息,所述指示信息来自于所述计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为所述目标设备上运行的进程;
步骤1101的描述可以参照上述实施例中901的描述,这里不再赘述。
1102、基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
步骤1102的描述可以参照上述实施例中902的描述,这里不再赘述。
1103、将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
在一种可能的实现中,所述计算设备为主机设备host,所述目标设备为数据处理器DPU20;或者,所述目标设备为DPU 20,且所述计算设备为host。
步骤1103的描述可以参照上述实施例中903的描述,这里不再赘述。
在一种可能的实现中,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;所述获取所述第一进程对应的目标存储地址,包括:
通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用;
基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
在一种可能的实现中,所述方法还包括:
在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
在一种可能的实现中,所述方法还包括:
在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,
在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址,所述第一存储地址与所述目标存储地址不同。
在一种可能的实现中,所述第二状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
在一种可能的实现中,所述修改所述第二状态信息,包括:
将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
在一种可能的实现中,所述方法还包括:
在获取指示信息之前,为所述第一进程分配所述目标存储地址,并将所述目标存储地址存储至所述BAR中。
在一种可能的实现中,所述存储地址为所述目标设备的内存地址。
需要说明的是,图11所示的数据处理方法可以视为图9a和图9b所示的目标设备所执行的方法,图11所示的数据处理方法中未详尽描述的实现方式和技术效果可以参见图9a和图9b所示的目标设备中的相关描述。
本申请实施例中,多个是指两个或两个以上,本申请不做限制。在本申请实施例中,“/”可以表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;“和/或”可以用于描述关联对象存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。为了便于描述本申请实施例的技术方案,在本申请实施例中,可以采用“第一”、“第二”等字样对功能相同或相似的技术特征进行区分。该“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。在本申请实施例中,“示例性的”或者“例如”等词用于表示例子、例证或说明,被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本申请的这些修改和变型属于本发明权利要求的范围之内,则本发明也意图包括这些改动和变型在内。

Claims (24)

1.一种计算设备,其特征在于,所述计算设备与目标设备通信连接,所述计算设备包括请求处理模块,所述请求处理模块用于:
获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为所述目标设备上运行的进程;
通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;
向所述目标存储地址对应的存储空间传递所述目标数据。
2.根据权利要求1所述的计算设备,其特征在于,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
3.根据权利要求1或2所述的计算设备,其特征在于,所述数据传递请求来自于第二进程,所述第二进程为运行在所述计算设备上的进程。
4.根据权利要求1至3任一所述的计算设备,其特征在于,所述存储地址为所述目标设备的内存地址。
5.根据权利要求1至4任一所述的计算设备,其特征在于,所述BAR被配置为所述计算设备与所述目标设备均可访问,且所述BAR存储的所述存储地址来自于所述目标设备。
6.根据权利要求1至5任一所述的计算设备,其特征在于,所述BAR存储有为所述第一进程分配的至少一个存储地址;所述请求处理模块在获取所述第一进程对应的目标存储地址时,具体用于:
通过访问所述BAR,获取第一状态信息,所述第一状态信息指示所述至少一个存储地址中每个存储地址是否被占用;
基于所述第一状态信息指示所述目标存储地址未被占用,从所述至少一个存储地址中获取所述目标存储地址。
7.根据权利要求6所述的计算设备,其特征在于,所述请求处理模块还用于:
在所述向所述目标存储地址对应的存储空间传递所述目标数据之后,修改所述第一状态信息,得到第二状态信息,其中所述第二状态信息指示所述目标存储地址被占用。
8.根据权利要求6或7所述的计算设备,其特征在于,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的至少一个存储地址;
所述第一状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
9.根据权利要求7或8所述的计算设备,其特征在于,所述请求处理模块在修改所述第一状态信息时,具体用于:
将所述第二指针指向的内存块修改为所述多个内存块中的第三内存块,所述第三内存块包括所述目标存储地址。
10.根据权利要求1至9任一所述的计算设备,其特征在于,所述请求处理模块在向所述目标存储地址对应的存储空间传递所述目标数据时,具体用于:
通过直接存储器访问DMA的方式,将所述目标数据搬运到目标存储地址对应的存储空间。
11.根据权利要求1至10所述的计算设备,其特征在于,所述请求处理模块还用于:
在将所述目标数据传递至所述目标存储地址对应的存储空间之后,向所述目标设备发送指示信息,所述指示信息用于指示所述目标设备从所述目标存储地址对应的存储空间中获取所述目标数据。
12.一种目标设备,其特征在于,所述目标设备与计算设备通信连接,所述目标设备包括数据处理模块,所述数据处理模块用于:
获取指示信息,所述指示信息来自于所述计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为所述目标设备上运行的进程;
基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
13.根据权利要求12所述的目标设备,其特征在于,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
14.根据权利要求12或13所述的目标设备,其特征在于,所述BAR存储有目标队列,所述目标队列包括多个内存块,每个内存块包括为所述第一进程分配的一个或多个存储地址;所述数据处理模块在获取所述第一进程对应的目标存储地址时,具体用于:
通过访问所述BAR,获取第二状态信息,所述第二状态信息指示所述多个内存块中每个内存块包括的存储地址是否被占用;
基于所述第二状态信息指示所述多个内存块中的第一内存块被占用,从所述第一内存块中获取所述目标存储地址。
15.根据权利要求14所述的目标设备,其特征在于,所述数据处理模块还用于:
在从所述第一内存块中获取所述目标存储地址之后,修改所述第二状态信息,得到第一状态信息,所述第一状态信息指示所述第一内存块未被占用。
16.根据权利要求14或15所述的目标设备,其特征在于,所述数据处理模块还用于:
在从所述第一内存块中获取所述目标存储地址之后,将所述第一内存块中的所述目标存储地址删除;或者,
在获取所述第一进程对应的目标存储地址之后,将所述第一内存块中的所述目标存储地址替换为第一存储地址,所述第一存储地址与所述目标存储地址不同。
17.根据权利要求14至16任一所述的目标设备,其特征在于,所述第二状态信息包括第一指针和第二指针,所述第一指针指向所述多个内存块中的第一内存块,所述第二指针指向所述多个内存块中的第二内存块;其中,
在所述第一内存块和所述第二内存块不重合的情况下,所述第一内存块包括的存储地址、所述第二内存块包括的存储地址以及由所述第一内存块到所述第二内存块之间的内存块包括的存储地址为被占用的存储地址,由所述第二内存块到所述第一内存块之间的内存块包括的存储地址为未被占用的存储地址;
在所述第一内存块和所述第二内存块重合的情况下,所述多个内存块包括的存储地址为未被占用的存储地址。
18.根据权利要求15至17任一所述的目标设备,其特征在于,在修改所述第二状态信息时,所述请求处理模块具体用于:
将所述第一指针指向的内存块修改为所述多个内存块中的第三内存块,第三内存块为由所述第一内存块到所述第二内存块之间的内存块,或者所述第三内存块为所述第一内存块。
19.根据权利要求12至18任一所述的目标设备,其特征在于,所述数据处理模块还用于:
在获取指示信息之前,为所述第一进程分配所述目标存储地址,并将所述目标存储地址存储至所述BAR中。
20.根据权利要求12至19任一所述的目标设备,其特征在于,所述存储地址为所述目标设备的内存地址。
21.一种请求处理方法,其特征在于,包括:
获取数据传递请求,所述数据传递请求指示将目标数据传递至第一进程,所述第一进程为目标设备上运行的进程;
通过访问基地址寄存器BAR,获取所述第一进程对应的目标存储地址,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址;
向所述目标存储地址对应的存储空间传递所述目标数据。
22.根据权利要求21所述的方法,其特征在于,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
23.一种数据处理方法,其特征在于,包括:
获取指示信息,所述指示信息来自于计算设备,所述指示信息指示从BAR中获取数据,且所述数据用于传递至第一进程,其中所述BAR存储有为所述目标设备上运行的进程分配的存储地址,所述存储地址为所述目标设备上存储空间的地址,所述第一进程为目标设备上运行的进程;
基于所述指示信息,通过访问所述BAR,获取所述第一进程对应的目标存储地址,并从所述目标存储地址对应的存储空间中获取所述目标数据;
将所述目标数据传递至所述第一进程,以便所述第一进程执行所述目标数据。
24.根据权利要求23所述的方法,其特征在于,所述计算设备为主机设备host,所述目标设备为数据处理器DPU;或者,所述目标设备为DPU,且所述计算设备为host。
CN202111114530.5A 2021-09-23 2021-09-23 一种计算设备及请求处理方法 Pending CN115858434A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111114530.5A CN115858434A (zh) 2021-09-23 2021-09-23 一种计算设备及请求处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111114530.5A CN115858434A (zh) 2021-09-23 2021-09-23 一种计算设备及请求处理方法

Publications (1)

Publication Number Publication Date
CN115858434A true CN115858434A (zh) 2023-03-28

Family

ID=85652255

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111114530.5A Pending CN115858434A (zh) 2021-09-23 2021-09-23 一种计算设备及请求处理方法

Country Status (1)

Country Link
CN (1) CN115858434A (zh)

Similar Documents

Publication Publication Date Title
JP7120943B2 (ja) Fpgaベースの加速のための新たなssd基本構造
CN112422615B (zh) 一种通信的方法及装置
CN110647480B (zh) 数据处理方法、远程直接访存网卡和设备
CN108363670B (zh) 一种数据传输的方法、装置、设备和系统
CN107995129B (zh) 一种nfv报文转发方法和装置
CN108243118B (zh) 转发报文的方法和物理主机
US20110004732A1 (en) DMA in Distributed Shared Memory System
US11379374B2 (en) Systems and methods for streaming storage device content
KR102403653B1 (ko) Fpga 기반 가속화를 위한 새로운 ssd 구조
CN112948318A (zh) 一种Linux操作系统下基于RDMA的数据传输方法及装置
CN114201421B (zh) 一种数据流处理方法、存储控制节点及可读存储介质
CN110119304A (zh) 一种中断处理方法、装置及服务器
CN114546913A (zh) 一种基于pcie接口的多主机之间数据高速交互的方法和装置
CN116881191B (zh) 数据处理方法、装置、设备及存储介质
WO2023186143A1 (zh) 一种数据处理方法、主机及相关设备
CN115858434A (zh) 一种计算设备及请求处理方法
WO2022073399A1 (zh) 存储节点、存储设备及网络芯片
CN115269453A (zh) 数据收发方法、处理器、电子设备和计算机系统
US10430220B1 (en) Virtual devices as protocol neutral communications mediators
JP3644158B2 (ja) 並列計算機におけるデータ送受信方法
WO2024217333A1 (zh) 一种基于块存储的io访问方法、装置、电子设备及介质
CN118708368A (zh) 一种分布式内存计算引擎集群的数据处理方法及装置
US20240103897A1 (en) Diversified virtual memory
CN114911411A (zh) 一种数据存储方法、装置及网络设备
CN118484136A (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