CN118035143A - 一种dma地址的分配方法、设备及存储介质 - Google Patents

一种dma地址的分配方法、设备及存储介质 Download PDF

Info

Publication number
CN118035143A
CN118035143A CN202410173121.XA CN202410173121A CN118035143A CN 118035143 A CN118035143 A CN 118035143A CN 202410173121 A CN202410173121 A CN 202410173121A CN 118035143 A CN118035143 A CN 118035143A
Authority
CN
China
Prior art keywords
address
dma
borrowing
dma address
segment
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
CN202410173121.XA
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.)
Beijing Shenzhou Digital Cloud Information Technology Co ltd
Original Assignee
Beijing Shenzhou Digital Cloud Information 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 Beijing Shenzhou Digital Cloud Information Technology Co ltd filed Critical Beijing Shenzhou Digital Cloud Information Technology Co ltd
Priority to CN202410173121.XA priority Critical patent/CN118035143A/zh
Publication of CN118035143A publication Critical patent/CN118035143A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • G06F2213/2806Space or buffer allocation for DMA transfers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)

Abstract

本申请公开了一种DMA地址的分配方法、设备及存储介质,涉及计算机技术领域,应用于借入设备,所述借入设备通过非透明桥与借出设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述方法包括:拦截DMA地址申请请求;根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;向所述借出设备传输所述DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。该方法能够降低整个系统的负担,提高整个系统的处理效率。

Description

一种DMA地址的分配方法、设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种DMA地址的分配方法、设备及存储介质。
背景技术
PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准。近年来随着PCIe技术的快速发展,以及计算机外设大数据传输需求的持续增长,设备厂商采用PCIe标准生产高速外设已经成为主流,例如,PCIe设备包括图像处理单元(Graphics Processing Unit,GPU)和数据处理单元(Data Processing Unit,DPU)等。
直接存储器存取(Direct Memory Access,DMA)是外设(如PCIe设备)和内存之间高效交互数据的方式。在PCIe设备借出给远端主机的场景下,被借出的PCIe设备需要访问远端主机内存,这就需要为PCIe设备分配正确的DMA地址,但是,目前的DMA地址分配方式会导致整个系统的负担加重,降低整个系统的处理效率。
发明内容
本申请提供一种DMA地址的分配方法、设备及存储介质,能够降低整个系统的负担,提高整个系统的处理效率。
为达到上述目的,本申请采用如下技术方案:
第一方面,本申请提供了一种DMA地址的分配方法,应用于借入设备,所述借入设备通过非透明桥与借出设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述方法包括:
拦截DMA地址申请请求;
根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;
向所述借出设备传输所述DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。
在一些可能的实现方式中,所述DMA地址申请请求携带有申请设备的第一标识;所述拦截DMA地址申请请求,包括:
如果所述第一标识表征所述申请设备为所述借出设备对应的第一虚拟设备,则拦截所述第一虚拟设备产生的DMA地址申请请求。
在一些可能的实现方式中,所述方法还包括:
如果所述第一标识表征所述申请设备为所述借入设备对应的第二真实设备,则根据所述DMA地址申请请求,分配给所述第二真实设备的DMA地址为第二地址段。
在一些可能的实现方式中,所述根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,包括:
根据所述DMA地址申请请求,确定所请求DMA地址的请求长度;
如果所述所请求的DMA地址的请求长度小于或等于所述目标地址段的目标长度,将所述目标地址段中的第一地址段作为第一虚拟设备的DMA地址,所述第一地址段的长度为所述请求长度。
在一些可能的实现方式中,所述方法还包括:
如果所述所请求的DMA地址的请求长度大于所述目标地址段的目标长度,对所述目标地址段的目标长度进行扩展,扩展后的目标长度大于或等于所述请求长度;
根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址。
第二方面,本申请提供了一种DMA地址的分配方法,应用于借出设备,所述借出设备通过非透明桥与借入设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述方法包括:
获取所述借入设备传输的DMA地址设置消息;
根据所述DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段,所述第一地址段为所述借入设备根据DMA地址申请请求,从目标地址段中为所述第一虚拟设备分配的地址段,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段。
第三方面,本申请提供了一种借入设备,所述借入设备通过非透明桥与借出设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述借入设备包括:
拦截模块,用于拦截DMA地址申请请求;
第一分配模块,用于根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;
第一传输模块,用于向所述借出设备传输所述DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。
在一些可能的实现方式中,所述DMA地址申请请求携带有申请设备的第一标识;
所述拦截模块,具体用于如果所述第一标识表征所述申请设备为所述借出设备对应的第一虚拟设备,则拦截所述第一虚拟设备产生的DMA地址申请请求。
在一些可能的实现方式中,所述拦截模块,还用于如果所述第一标识表征所述申请设备为所述借入设备对应的第二真实设备,则根据所述DMA地址申请请求,分配给所述第二真实设备的DMA地址为第二地址段。
在一些可能的实现方式中,所述第一分配模块,具体用于根据所述DMA地址申请请求,确定所请求DMA地址的请求长度;如果所述所请求的DMA地址的请求长度小于或等于所述目标地址段的目标长度,将所述目标地址段中的第一地址段作为第一虚拟设备的DMA地址,所述第一地址段的长度为所述请求长度。
在一些可能的实现方式中,所述装置还包括第一扩展模块;
所述第一扩展模块,用于如果所述所请求的DMA地址的请求长度大于所述目标地址段的目标长度,对所述目标地址段的目标长度进行扩展,扩展后的目标长度大于或等于所述请求长度;根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址;
所述第一分配模块,还用于根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址。
第四方面,本申请提供了一种借出设备,所述借出设备通过非透明桥与借入设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述借出设备包括:
第二传输模块,用于获取所述借入设备传输的DMA地址设置消息;
第二分配模块,用于根据所述DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段,所述第一地址段为所述借入设备根据DMA地址申请请求,从目标地址段中为所述第一虚拟设备分配的地址段,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段。
第五方面,本申请提供了一种计算设备,包括存储器和处理器;
其中,在所述存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令;当所述指令被所述处理器执行时,使得所述计算设备执行如第一方面或第二方面中任一项所述的方法。
第六方面,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行如第一方面或第二方面中任一项所述的方法。
由上述技术方案可知,本申请至少具有如下有益效果:
在本申请中,借入设备通过非透明桥与借出设备连接,借入设备上创建有借出设备对应的第一虚拟设备,借入设备预先向非透明桥请求用于DMA映射的地址段,即,目标地址段,然后借入设备可以拦截DMA地址申请请求,接着基于该DMA地址申请请求,从预先确定的目标地址段中选择第一地址段作为第一虚拟设备的DMA地址,然后向借出设备传输DMA地址设置消息,借出设备获取到该DMA地址设置消息后,将第一虚拟设备对应的第一真实设备的DMA地址更新为第一地址段。可见,在该方法中,借入设备预先从非透明桥中请求得到了目标地址段,后续无需每次均向非透明桥请求地址段,从而降低了系统负担(向非透明桥请求地址段比较耗费时间和资源),后续仅仅是从目标地址段中给第一虚拟设备分配DMA地址,提高了DMA地址分配效率。后续,第一真实设备即可对第一地址段进行访问,该第一地址段可以与借入设备的系统内存中的地址段存在映射关系,基于该映射关系,实现第一真实设备对系统内存的直接读写。因此,该方法能够降低整个系统的负担,提高整个系统的处理效率。
应当理解的是,本申请中对技术特征、技术方案、有益效果或类似语言的描述并不是暗示在任意的单个实施例中可以实现所有的特点和优点。相反,可以理解的是对于特征或有益效果的描述意味着在至少一个实施例中包括特定的技术特征、技术方案或有益效果。因此,本说明书中对于技术特征、技术方案或有益效果的描述并不一定是指相同的实施例。进而,还可以任何适当的方式组合本实施例中所描述的技术特征、技术方案和有益效果。本领域技术人员将会理解,无需特定实施例的一个或多个特定的技术特征、技术方案或有益效果即可实现实施例。在其他实施例中,还可在没有体现所有实施例的特定实施例中识别出额外的技术特征和有益效果。
附图说明
图1为本申请实施例提供的一种应用场景的示意图;
图2为本申请实施例提供的又一种应用场景的示意图;
图3为本申请实施例提供的一种DMA地址的分配方法的流程图;
图4为本申请实施例提供的又一种DMA地址的分配方法的流程图;
图5为本申请实施例提供的一种借入设备的示意图;
图6为本申请实施例提供的一种借出设备的示意图;
图7为本申请实施例提供的一种计算设备的示意图。
具体实施方式
本申请说明书和附图说明中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
为了下述各实施例的描述清楚简洁,首先给出相关技术的简要介绍:
DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。
非透明桥(Non-Transparent Bridge,NTB)是一类特殊的PCIe设备,通常情况下,不同的计算机主机拥有各自独立的PCIe域,不同的PCIe域之间不能进行通信。NTB的主要作用是对不同的PCIe域之间进行地址转换,为不同的PCIe域之间的通信提供通道。拥有不同PCIe域的计算机双方可以通过NTB共享PCIe设备。
DMA分配方式包含固定DMA分配方式和流式DMA分配方式,在通过NTB将外设借出给其它设备时,PCIe外设将和远端主机进行交互。需要将PCIe设备的DMA地址映射到NTB的地址空间,使得PCIe外设可以访问远端内存,从而实现系统间的数据交互。如果没有对借出设备的DMA地址进行正确的配置,会导致借出设备无法访问远端设备的内存;并且,对于流式DMA分配方式,每次对远端设备的内存进行访问之前,均需要进行DMA地址的配置,这个过程需要多次反复与NTB进行数据交互,从而确定用于DMA映射的地址段,这个过程不仅耗费时间,而且还会占用大量的CPU资源,进而增加整个系统的负担,降低整个系统的处理效率。
如图1所示,该图为本申请实施例提供的一种应用场景的示意图,在该应用场景中,借出设备120包括PCIe设备122,借入设备110和借出设备120通过NTB 130连接。该借出设备120将PCIe设备122共享给借入设备110,借入设备110会在本地创建该PCIe设备的驱动,如果未对该PCIe设备122的DMA地址进行正确地配置,在借入设备110运行该PCIe设备的驱动时,该PCIe设备的驱动会将借出设备120需要访问的内存地址直接写为借入设备110的标准内存地址,但是该标准内存地址不在NTB地址范围内,该PCIe设备122在借出设备120上执行时,会误认为该标准内存地址为借出设备120的内存地址,进而导致访问错误。
可见,在对PCIe设备122进行共享的场景下,如果未对PCIe设备122的DMA地址进行正确地配置,将会导致访问出现错误。另外,由于流式DMA分配方式是一种动态DMA地址分配方式,这种分配方式在PCIe设备122借出给远端设备的情况下,每次PCIe设备122访问远端设备的情况下,均需要重新从NTB处分配一段地址空间,以用于DMA地址分配,从而增加系统负担,降低系统的整体处理效率。
有鉴于此,本申请实施例提供了一种DMA地址的分配方法,该方法可以由借入设备来执行,也可以由借出设备来执行,也可以由借入设备和借出设备协同执行,本申请不具体限定该方法的执行主体。
具体地,该方法中,借入设备通过非透明桥与借出设备连接,并且,借入设备上创建有借出设备对应的第一虚拟设备,该方法包括:借入设备预先向非透明桥请求用于DMA映射的地址段,即,目标地址段,然后借入设备可以拦截DMA地址申请请求,接着基于该DMA地址申请请求,从预先确定的目标地址段中选择第一地址段作为第一虚拟设备的DMA地址,然后向借出设备传输DMA地址设置消息,借出设备获取到该DMA地址设置消息后,将第一虚拟设备对应的第一真实设备的DMA地址更新为第一地址段。
可见,在该方法中,借入设备预先从非透明桥中请求得到了目标地址段,后续无需每次均向非透明桥请求地址段,从而降低了系统负担(向非透明桥请求地址段比较耗费时间和资源),后续仅仅是从目标地址段中给第一虚拟设备分配DMA地址,提高了DMA地址分配效率。后续,第一真实设备即可对第一地址段进行访问,该第一地址段可以与借入设备的系统内存中的地址段存在映射关系,基于该映射关系,实现第一真实设备对系统内存的直接读写。因此,该方法能够降低整个系统的负担,提高整个系统的处理效率。
为了使本申请的技术方案更加清楚、易于理解,下面对本申请实施例的应用场景进行介绍,如图2所示,该图为本申请实施例提供的又一种应用场景的示意图,在该应用场景中,在借出设备120的PCIe设备122共享给借入设备110使用过程中,借入设备110会在本地创建该PCIe设备122对应的虚拟设备112,其中,PCIe设备122可以是第一真实设备,虚拟设备121可以是第一虚拟设备,在虚拟设备112完成创建后,借入设备110还会模拟该虚拟设备112的在位信号,从而触发该虚拟设备112产生DMA地址申请请求,借入设备110拦截到该DMA地址申请请求后,从预先请求得到的目标地址中选择第一地址段作为该虚拟设备112的DMA地址,该第一地址段与借入设备的系统内存中的地址段存在映射关系,该映射关系可以保存在第一DMA信号表格113中。
在该应用场景中,当该PCIe设备122产生DMA请求时,会向NTB中的第一地址段发起内存访问请求,而第一地址段与借入设备的系统内存中的地址段存在映射关系,也就是会向系统内存中的地址段发起内存访问请求,从而对借入设备110的系统内存进行读取或写入。如此,在对PCIe设备的DMA地址进行正确地配置后,能够减少内存访问异常的情况,并且,预先向NTB请求得到目标地址段后,后续无需多次频繁地向NTB请求用于DMA映射的地址段,降低系统运行负担,提高系统的处理效率。
为了使本申请的技术方案更加清楚、易于理解,下面结合附图,以借入设备和借出设备协同执行的角度,对本申请实施例提供的一种DMA地址的分配方法进行介绍,如图3所示,该图为本申请实施例提供的一种DMA地址的分配方法的流程图。该方法包括:
S301、借入设备向NTB发送地址区域请求。
在进行DMA地址分配之前,借入设备可以先向NTB发送地址区域请求,该地址区域请求用于向NTB请求用来进行DMA地址分配的地址段。
S302、NTB根据地址区域请求,向借入设备反馈目标地址段。
NTB接收到该地址区域请求后,可以基于该地址区域请求,向借入设备分配目标地址段,该目标地址段可以是一个固定范围的地址段,该地址段的长度往往比较长,为了避免地址长度不足。
如此,后续借入设备在请求DMA地址时,可以直接从上述目标地址段中选择地址段,然后分配给相应的设备,无需反复与NTB进行交互,从而减少了与NTB的交互次数,进而降低了系统的负担,提高了系统的处理效率。
需要说明的是,S301和S302可以是预先进行的步骤,也可以是首次进行DMA地址分配时进行的步骤。
S303、借入设备拦截DMA地址申请请求。
DMA地址申请请求是指申请DMA地址的请求,以便后续基于该DMA地址发起内存访问请求。
在本申请实施例中,借入设备和借出设备通过非透明桥连接,借出设备上的PCIe设备,即,第一真实设备插接在借出设备的PCIe卡槽上,借出设备会加载该第一真实设备的设备驱动,并创建虚拟功能(virtual function,VF),然后通过NTB将该VF共享给借入设备。
借入设备会为该VF创建第一虚拟设备,该第一虚拟设备与第一真实设备对应,借入设备还可以模拟该第一虚拟设备插入该借入设备的PCIe卡槽的动作,即,模拟第一虚拟设备在位的信号,然后借入设备的linux将会加载该第一虚拟设备的设备驱动,该第一虚拟设备会产生DMA地址申请请求,以请求为其分配DMA地址,借入设备可以拦截该DMA地址申请请求。
在一些实施例中,该DMA地址申请请求中携带有申请设备的第一标识,如果该第一标识表征该申请设备为借出设备对应的第一虚拟设备,则拦截该第一虚拟设备产生的DMA地址申请请求,从而改变传统的DMA地址分配规则。如果该第一标识表征该申请设备为借出设备对应的第一真实设备,则按照正常的规则对该第一真实设备的DMA地址进行分配。
S304、借入设备根据DMA地址申请请求,从目标地址段中选择第一地址段作为第一虚拟设备的DMA地址。
借入设备在拦截到该DMA地址申请请求后,会为该第一虚拟设备分配DMA地址,例如,将目标地址段中的第一地址段分配给该第一虚拟设备,作为该第一虚拟设备的DMA地址。
在一些实施例中,借入设备可以根据DMA地址申请请求,获取该第一虚拟设备对应的第一真实设备的硬件信息以及非透明桥的窗口地址信息,然后基于该第一真实设备的硬件信息和非透明桥的窗口地址信息,将目标地址段中的第一地址段设置为第一虚拟设备的DMA地址。在一些示例中,借入设备可以基于NTB的硬件信息、NTB的窗口地址信息、第一真实设备的硬件信息、借出设备的硬件架构信息、借出设备的操作系统信息等进行综合研判,确定该第一虚拟设备的DMA地址。
在一些实施例中,如果申请设备的第一标识表征申请设备不是虚拟设备,而是借入设备本地的真实设备(例如第二真实设备),则按照正常流程分配DMA地址。例如,借入设备在确定DMA地址申请请求是由第二真实设备发起的,借入设备分配给第二真实设备的DMA地址为第二地址段。
在一些实施例中,借入设备还可以根据DMA地址申请请求,确定所请求的DMA地址的请求长度,如果所请求的DMA地址的请求长度小于或等于目标地址段的目标长度,将目标地址段中的第一地址段作为第一虚拟设备的DMA地址。在另一些实施例中,DMA地址申请请求中所请求的DMA地址的请求长度大于目标地址段的目标长度,此时,需要进行动态协商。具体如下:
如果所请求的DMA地址的请求长度大于目标地址段的目标长度,对目标地址段的目标长度进行扩展,使扩展后的目标地址段的目标长度大于或等于请求长度,根据扩展后的目标地址段,将第一地址段作为第一虚拟设备的DMA地址。示例性的,借入设备可以向NTB重新发送地址区域请求,以请求更大的地址空间,从而满足后续DMA地址的分配过程。
S305、借入设备向借出设备传输DMA地址设置消息。
借入设备在确定为第一虚拟设备分配的DMA地址后,需要将分配给第一虚拟设备的DMA地址(第一地址段)通知给借出设备,以便于借出设备的第一真实设备通过对NTB中的第一地址段进行访问,以实现对借入设备的系统内存的直接读取或写入。
示例性的,借入设备可以将该第一地址段写入到NTB中的第一预设地址,该第一预设地址与借出设备的第二预设地址存在映射关系,也就是将第一地址段写到该第二预设地址中,从而借出设备从第二预设地址中读取相关信息,以获取第一地址段。
需要说明的是,上述示例仅仅是借入设备告知借出设备第一地址段的方式之一,本领域技术人员,还可以通过其他方式对第一地址段进行传输。
S306、借出设备根据DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段。
在借出设备获取到DMA地址设置消息后,可以基于该DMA地址设置消息得知第一虚拟设备对应的DMA地址为第一地址段,进而将该第一真实设备的DMA地址更新为非透明桥中的第一地址段。如此,该第一真实设备可以对非透明桥中的第一地址段发起访问请求,由于该第一地址段与借入设备的系统内存的地址段存在映射关系,通过该映射关系,实现第一真实设备对借入设备的系统内存的地址段的直接读取或写入。
为了便于理解,下面结合附图,对借入设备分配DMA地址的过程进行介绍。如图4所示,该图为本申请实施例提供的又一种DMA地址的分配方法的流程图。该方法包括:
S401、分配算法单元向NTB发送地址区域请求。
在一些实施例中,在借入设备的系统初始化后,分配算法单元先向NTB发送地址区域请求,该地址区域请求用于向NTB请求地址区域,以便于后续从请求得到的地址区域(目标地址段)中分配DMA地址。
S402、NTB根据地址区域请求,向分配算法单元分配地址区域。
NTB接收到该地址区域请求后,向分配算法单元分配一段地址区域,如目标地址段。
S403、第一虚拟设备向DMA子系统发送DMA地址申请请求。
S404、DMA初始化单元向IOMMU子系统转发DMA地址申请请求。
DMA子系统向IOMMU子系统发送DMA地址申请请求,该IOMMU子系统可以判断该DMA地址申请请求来自于哪个设备,如果是虚拟设备,则将DMA地址申请请求转发给分配算法单元,如果是真实设备,则正常分配DMA地址。
S405、IOMMU子系统将该DMA地址申请请求转发给分配算法单元。
在IOMMU子系统确定该DMA地址申请请求来自于虚拟设备,则将该DMA地址申请请求发送给分配算法单元。
S406、分配算法单元向IOMMU子系统转发第一地址段。
分配算法单元基于该DMA地址申请请求,确定该第一虚拟设备的DMA地址为第一地址段,向IOMMU子系统转发第一地址段。
S407、IOMMU子系统将第一地址段转发给DMA子系统。
IOMMU子系统接收到第一地址段后,可以将该第一地址段分配给DMA子系统。
S408、DMA子系统根据第一地址段生成DMA地址设置消息。
DMA子系统接收到第一地址段后,可以建立第一地址段与借入设备的系统内存的地址段的映射关系,并向借出设备传输DMA地址设备消息,从而将第一真实设备的DMA地址设置为第一地址段。
在本实施例中,PCIe设备实际发起DMA请求时,会请求到NTB的地址空间(目标地址段中的第一地址段),NTB会将DMA请求的目的地址修改为借入设备的IOMMU虚拟地址,IOMMU硬件再自动将其映射为实际物理内存地址(即借入设备的系统内存的地址段),实现PCIe设备对借入设备的系统内存的直接读写。
在该方法中,通过linux内核的方式将自定义的分配算法插入内核。该内核初始化时会做两件事情。首先,会对内部参数进行初始化,例如,与NTB进行通信,获取NTB的窗口地址信息;读取当前软硬件信息(例如硬件体系架构、内部版本等);获取配置信息(例如待共享设备的详细配置等)。其次,会对内核的DMA初始化函数通过hook的方式进行拦截,由此改变DMA地址分配行为。修改后的内核需要早于PCIe设备启动,避免因启动不完善而导致的异常。
对于支持单根I/O虚拟化(SR-IOV,Single Root I/O Virtualization)的PCIe设备,借出设备创建了大量虚拟功能(VF)以备灵活借出。在VF借出给借入设备后,借入设备的NTB会为其创建虚拟设备,并触发虚拟设备的驱动加载过程。在驱动加载过程中,通过对linux内核相关函数拦截的方式改变系统流程。由于PCIe设备是支持SR-IOV的设备,因此,可以创建多个虚拟设备(VF)借出给多台设备,借入设备用IOMMU对DMA地址进行虚拟映射,再通过修改IOMMU的映射地址算法,使被映射的IOMMU虚拟地址保存在一个固定的范围内,用来适配NTB的地址映射窗口(即目标地址段)。这种区间映射的方式可以在NTB借出VF设备时一次性完成,避免了流式DMA动态分配、动态映射(反复向NTB请求用来DMA映射的地址)对系统造成的负担。如果针对每一个VF均需要设置独立的NTB窗口那么还是会对NTB的地址映射表项造成浪费。为此,可以将不同VF发来的请求通过NTB映射到本地的不同PCIerequestor。这样,IOMMU子系统可以为不同设备分配相同的虚拟地址,在收到请求时,再根据PCIe requestor进行区分映射,从而达到减少NTB的地址映射表项的浪费。
基于上述内容描述,本申请实施例提供了一种DMA地址的分配方法,该方法中,借入设备通过非透明桥与借出设备连接,借入设备上创建有借出设备对应的第一虚拟设备,借入设备预先向非透明桥请求用于DMA映射的地址段,即,目标地址段,然后借入设备可以拦截DMA地址申请请求,接着基于该DMA地址申请请求,从预先确定的目标地址段中选择第一地址段作为第一虚拟设备的DMA地址,然后向借出设备传输DMA地址设置消息,借出设备获取到该DMA地址设置消息后,将第一虚拟设备对应的第一真实设备的DMA地址更新为第一地址段。可见,在该方法中,借入设备预先从非透明桥中请求得到了目标地址段,后续无需每次均向非透明桥请求地址段,从而降低了系统负担(向非透明桥请求地址段比较耗费时间和资源),后续仅仅是从目标地址段中给第一虚拟设备分配DMA地址,提高了DMA地址分配效率。后续,第一真实设备即可对第一地址段进行访问,该第一地址段可以与借入设备的系统内存中的地址段存在映射关系,基于该映射关系,实现第一真实设备对系统内存的直接读写。因此,该方法能够降低整个系统的负担,提高整个系统的处理效率。
上文结合图1至图4对本申请实施例提供的DMA地址的分配方法进行了详细介绍,下面将结合附图对本申请实施例提供的设备及存储介质进行介绍。
如图5所示,该图为本申请实施例提供的一种借入设备的示意图,该借入设备110通过非透明桥与借出设备连接,借入设备110上创建有所述借出设备对应的第一虚拟设备,借入设备110包括:
拦截模块511,用于拦截DMA地址申请请求;
第一分配模块512,用于根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;
第一传输模块513,用于向所述借出设备传输所述DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。
在一些可能的实现方式中,所述DMA地址申请请求携带有申请设备的第一标识;
所述拦截模块511,具体用于如果所述第一标识表征所述申请设备为所述借出设备对应的第一虚拟设备,则拦截所述第一虚拟设备产生的DMA地址申请请求。
在一些可能的实现方式中,所述拦截模块511,还用于如果所述第一标识表征所述申请设备为所述借入设备对应的第二真实设备,则根据所述DMA地址申请请求,分配给所述第二真实设备的DMA地址为第二地址段。
在一些可能的实现方式中,所述第一分配模块512,具体用于根据所述DMA地址申请请求,确定所请求DMA地址的请求长度;如果所述所请求的DMA地址的请求长度小于或等于所述目标地址段的目标长度,将所述目标地址段中的第一地址段作为第一虚拟设备的DMA地址,所述第一地址段的长度为所述请求长度。
在一些可能的实现方式中,所述装置还包括第一扩展模块;
所述第一扩展模块,用于如果所述所请求的DMA地址的请求长度大于所述目标地址段的目标长度,对所述目标地址段的目标长度进行扩展,扩展后的目标长度大于或等于所述请求长度;根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址;
所述第一分配模块512,还用于根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址。
如图6所示,该图为本申请实施例提供的一种借出设备的示意图,该借出设备120通过非透明桥与借入设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述借出设备120包括:
第二传输模块611,用于获取所述借入设备传输的DMA地址设置消息;
第二分配模块612,用于根据所述DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段,所述第一地址段为所述借入设备根据DMA地址申请请求,从目标地址段中为所述第一虚拟设备分配的地址段,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段。
根据本申请实施例的借入设备或借出设备可对应于执行本申请实施例中描述的方法,并且借入设备或借出设备的各个模块/单元的上述其它操作和/或功能分别为了实现图3或图4所示实施例中的各个方法的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种计算设备。该计算设备具体用于实现如图5或图6所示实施例中借入设备或借出设备的功能。
如图7所示,该图为本申请实施例提供的一种计算设备的示意图,如图7所示,计算设备700包括总线701、处理器702、通信接口703和存储器704。处理器702、存储器704和通信接口703之间通过总线701通信。
总线701可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器702可以为中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
通信接口703用于和外部通信。例如,当该计算设备700为上述借入设备110时,计算设备700可以通过通信接口703向借出设备120发送DMA地址设置消息;再例如,当该计算设备700为上述借出设备120时,计算设备700可以通过通信接口703接收借入设备110发送的DMA地址设置消息。
存储器704可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。存储器704还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,硬盘驱动器(hard diskdrive,HDD)或固态驱动器(solid state drive,SSD)。
存储器704中存储有可执行代码,处理器702执行该可执行代码以执行前述DMA地址的分配方法。
具体地,在实现图5或图6所示实施例的情况下,且图5实施例中所描述的借入设备或图6实施例中所描述的借出设备的各模块或单元为通过软件实现的情况下,执行图5或图6中的各模块/单元功能所需的软件或程序代码可以部分或全部存储在存储器704中。处理器702执行存储器704中存储的各单元对应的程序代码,执行前述DMA地址的分配方法。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质(例如软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于借入设备或借出设备的DMA地址分配方法。
本申请实施例还提供了一种计算机程序产品,所述计算机程序产品包括一个或多个计算机指令。在计算设备上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机或数据中心进行传输。
所述计算机程序产品被计算机执行时,所述计算机执行前述DMA地址分配方法的任一方法。该计算机程序产品可以为一个软件安装包,在需要使用前述DMA地址分配方法的任一方法的情况下,可以下载该计算机程序产品并在计算机上执行该计算机程序产品。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。

Claims (10)

1.一种DMA地址的分配方法,其特征在于,应用于借入设备,所述借入设备通过非透明桥与借出设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述方法包括:
拦截DMA地址申请请求;
根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;
向所述借出设备传输DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。
2.根据权利要求1所述的方法,其特征在于,所述DMA地址申请请求携带有申请设备的第一标识;所述拦截DMA地址申请请求,包括:
如果所述第一标识表征所述申请设备为所述借出设备对应的第一虚拟设备,则拦截所述第一虚拟设备产生的DMA地址申请请求。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
如果所述第一标识表征所述申请设备为所述借入设备对应的第二真实设备,则根据所述DMA地址申请请求,分配给所述第二真实设备的DMA地址为第二地址段。
4.根据权利要求1所述的方法,其特征在于,所述根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,包括:
根据所述DMA地址申请请求,确定所请求DMA地址的请求长度;
如果所述所请求的DMA地址的请求长度小于或等于所述目标地址段的目标长度,将所述目标地址段中的第一地址段作为第一虚拟设备的DMA地址,所述第一地址段的长度为所述请求长度。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
如果所述所请求的DMA地址的请求长度大于所述目标地址段的目标长度,对所述目标地址段的目标长度进行扩展,扩展后的目标长度大于或等于所述请求长度;
根据扩展后的目标地址段,将所述第一地址段作为所述第一虚拟设备的DMA地址。
6.一种DMA地址的分配方法,其特征在于,应用于借出设备,所述借出设备通过非透明桥与借入设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述方法包括:
获取所述借入设备传输的DMA地址设置消息;
根据所述DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段,所述第一地址段为所述借入设备根据DMA地址申请请求,从目标地址段中为所述第一虚拟设备分配的地址段,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段。
7.一种借入设备,其特征在于,所述借入设备通过非透明桥与借出设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述借入设备包括:
拦截模块,用于拦截DMA地址申请请求;
第一分配模块,用于根据DMA地址申请请求,从目标地址段中选择第一地址段作为所述第一虚拟设备的DMA地址,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段;
第一传输模块,用于向所述借出设备传输DMA地址设置消息,所述DMA地址设置消息用于指示所述借出设备将所述第一虚拟设备对应的第一真实设备的DMA地址更新为所述第一地址段。
8.一种借出设备,其特征在于,所述借出设备通过非透明桥与借入设备连接,所述借入设备上创建有所述借出设备对应的第一虚拟设备,所述借出设备包括:
第二传输模块,用于获取所述借入设备传输的DMA地址设置消息;
第二分配模块,用于根据所述DMA地址设置消息,将所述第一虚拟设备对应的第一真实设备的DMA地址设置为所述非透明桥中的第一地址段,所述第一地址段为所述借入设备根据DMA地址申请请求,从目标地址段中为所述第一虚拟设备分配的地址段,所述目标地址段为所述借入设备预先从所述非透明桥请求得到的地址段。
9.一种计算设备,其特征在于,包括存储器和处理器;
其中,在所述存储器中存储有一个或多个计算机程序,所述一个或多个计算机程序包括指令;当所述指令被所述处理器执行时,使得所述计算设备执行如权利要求1至6中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行如权利要求1至6中任一项所述的方法。
CN202410173121.XA 2024-02-07 2024-02-07 一种dma地址的分配方法、设备及存储介质 Pending CN118035143A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410173121.XA CN118035143A (zh) 2024-02-07 2024-02-07 一种dma地址的分配方法、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410173121.XA CN118035143A (zh) 2024-02-07 2024-02-07 一种dma地址的分配方法、设备及存储介质

Publications (1)

Publication Number Publication Date
CN118035143A true CN118035143A (zh) 2024-05-14

Family

ID=90988834

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410173121.XA Pending CN118035143A (zh) 2024-02-07 2024-02-07 一种dma地址的分配方法、设备及存储介质

Country Status (1)

Country Link
CN (1) CN118035143A (zh)

Similar Documents

Publication Publication Date Title
US9875208B2 (en) Method to use PCIe device resources by using unmodified PCIe device drivers on CPUs in a PCIe fabric with commodity PCI switches
US11960749B2 (en) Data migration method, host, and solid state disk
CN109977037B (zh) 一种dma数据传输方法及系统
CN112540941A (zh) 一种数据转发芯片及服务器
US11983136B2 (en) PCIe device and operating method thereof
CN111352873B (zh) NVMe协议命令处理方法与装置
KR102568909B1 (ko) PCIe 펑션 및 그 동작 방법
US11928070B2 (en) PCIe device
US11068283B2 (en) Semiconductor apparatus, operation method thereof, and stacked memory apparatus having the same
US20150326684A1 (en) System and method of accessing and controlling a co-processor and/or input/output device via remote direct memory access
CN111338998B (zh) 基于amp系统的flash访问处理方法及装置
CN117725012A (zh) 一种PCIe设备的共享方法、装置、设备及存储介质
CN111339000B (zh) Amp系统内存文件传输方法及装置
CN117687569A (zh) 磁盘性能优化方法、系统、电子设备及存储介质
CN115454358B (zh) 数据的存储控制方法及其装置、图像处理系统
CN118035143A (zh) 一种dma地址的分配方法、设备及存储介质
WO2022222977A1 (zh) 用于运行云业务实例的物理服务器的内存管理方法和装置
US10977201B1 (en) Per IO direct memory access redirection
US8719466B2 (en) Direct data transfer for device drivers
CN117992375A (zh) 一种中断地址的分配方法、设备及存储介质
US20120124574A1 (en) Virtual computer system and method of installing virtual computer system
KR20200143922A (ko) 메모리 카드 및 이를 이용한 데이터 처리 방법
WO2023221525A1 (zh) 电路板的资源分配方法、装置、电路板以及存储介质
CN116436787B (zh) 网络接口管理方法、使用方法、装置、设备和存储介质
CN117591037B (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