首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

可定制的多队列DMA接口 

申请/专利权人:赛灵思公司

申请日:2019-02-02

公开(公告)日:2024-07-05

公开(公告)号:CN110134623B

主分类号:G06F13/32

分类号:G06F13/32;G06F13/42

优先权:["20180208 US 15/892,266"]

专利状态码:有效-授权

法律状态:2024.07.05#授权;2021.01.22#实质审查的生效;2019.08.16#公开

摘要:这里的示例描述了用于提供可定制的直接存储器存取DMA接口的技术,该接口可以允许用户逻辑改变或控制如何执行DMA读取和写入。在一个示例中,DMA引擎可以被硬化例如,包括由半导体材料形成的电路,其防止DMA引擎像可编程逻辑那样被重新配置。不用改变DMA引擎,用户逻辑可以改变或定制在用户逻辑与DMA引擎之间的DMA接口。这样,DMA引擎执行DMA写入和读取的方式可以通过用户逻辑改变。在一个示例中,DMA引擎包括旁路操作模式,其中与DMA队列相关联的描述符被传递通过DMA引擎并到达用户逻辑。

主权项:1.一种操作直接存储器存取DMA引擎的方法,其特征在于,所述方法包括:在所述DMA引擎处从主机接收第一描述符;在旁路操作模式中,使用DMA接口将所述第一描述符从所述DMA引擎转发到接收逻辑,其中,所述接收逻辑将所述DMA接口配置为在不同的操作模式中操作,所述不同的操作模式包括所述旁路操作模式和第一操作模式,其中在所述旁路操作模式中,所述DMA引擎不处理所述第一描述符,并且在所述第一操作模式中,所述DMA引擎处理所述第一描述符;以及在所述接收逻辑处确定所述第一描述符是否包括以下之一:对应于第一DMA操作的有效载荷和指向所述有效载荷的存储器指针。

全文数据:可定制的多队列DMA接口技术领域本公开内容的示例大致涉及用于支持不同的操作模式的可定制的DMA接口。背景技术直接存储器存取DMA允许诸如外围设备那样的硬件子系统访问主存储器例如,RAM而不用依赖于中央处理单元。硬件子系统包括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是根据示例的、实施DMA的计算系统的框图;图2是根据示例的、实施DMA的计算系统的框图;图3示出了根据示例的、可定制的DMA接口;图4示出了根据示例的、用于执行从主机到用户逻辑的DMA写入的流程;图5示出了根据示例的、用于执行从主机到用户逻辑的DMA写入的流程;图6示出了根据示例的、用于执行从用户逻辑到主机的DMA写入的流程;图7示出了根据示例的、用于执行从用户逻辑到主机的DMA写入的流程;图8示出了根据示例的、用于执行从用户逻辑到主机的DMA写入的流程。为了便于理解,在可能的情况下,使用相同的附图标记来表示附图中共有的相同元件。预期一个示例中的元件可以有利地并入其他示例中。具体实施方式在下文中参考附图描述了各种特征。应当指出,附图可以或可以不按比例绘制,并且在所有附图中相似结构或功能的元件由相同的附图标记表示。应当指出,附图仅旨在便于描述特征。它们不是对说明书的详尽描述或对权利要求范围的限制。另外,图示的示例不需要具有所示的所有方面或优点。结合特定示例描述的方面或优点不必限于该示例,并且即使未如此示出,或者如果没有如此明确地描述,也可以在任何其他示例中实践。本文的示例描述了用于提供可定制的DMA接口例如,应用程序接口API的技术,其可以允许用户逻辑改变或控制如何执行DMA读取和写入。在一个示例中,DMA引擎可以被硬化例如,包括由半导体材料形成的电路,这防止DMA引擎像可编程逻辑那样被重新配置。用户逻辑可以使用可编程逻辑PL来改变或定制在用户逻辑和DMA引擎之间的DMA接口,而不用改变DMA引擎。以这种方式,DMA引擎执行DMA写入和读取的方式可以由用户逻辑改变。在一个示例中,DMA引擎包括旁路操作模式,其中与DMA队列相关联的描述符被传递通过DMA引擎并传递到用户逻辑。换句话说,描述符旁路DMA引擎并传递通过DMA接口到达用户逻辑。这使得用户逻辑能够控制执行DMA的各个方面,例如定制描述符、管理流量、执行地址转换以及分配用户空间DMA。用户逻辑可以定制DMA接口以帮助用户逻辑执行这些功能中的一些或全部功能。图1是根据示例的、实施DMA的计算系统100的框图。计算系统100包括主计算系统105和现场可编程门阵列FPGA150,其使用DMA在存储器之间传输数据。也就是说,主计算系统105中的操作系统120可以在FPGA150中的存储器上执行DMA读写,并且在FPGA150中的用户逻辑170也称为接收逻辑,其可以包括可编程逻辑或非可编程逻辑可以在主计算系统105中的存储器上执行DMA读写。在一个实施例中,FPGA150包括硬化电路以及可编程电路或逻辑。如图所示,主计算系统也简称为“主机”105包括处理器110、操作系统120、和外围组件互连快速PCIe接口135A。处理器110可以代表任何数量的不同处理元件。在该示例中,处理器110包括多个核。每个核115可以彼此独立地操作。例如,核115中的第一个均可以执行第一应用或操作系统120,而核115中的第二核执行第二应用或操作系统120。操作系统120包括允许主机105和FPGA150执行DMA的多个DMA队列125。DMA队列125存储描述符130,在一个示例中,描述符130包括用于标识执行DMA读取和写入的可用存储器的指针。例如,操作系统120可以使用描述符130指示可用于存储在主机105和FPGA150之间移动的有效载荷的存储器部分。在一个示例中,队列125建立描述符环,其包括指示当执行DMA时可用的描述符的索引indices。在一个示例中,DMA队列包括用于将数据从主机105发送到FPGA150的至少一个发送TX队列和用于将数据从FPGA150发送到主机105的至少一个接收RX队列。在一个示例中,核115中的每一个均被分配以DMA队列125的相应一个。在这种情况下,DMA引擎155可以是允许多个独立流的多队列DMA引擎155。也就是说,每个核115具有其自己的队列125,因此核115不需要等待锁定来发送或接收数据。也就是说,核115可以传输非阻塞数据,并且可以在没有或很少协调的情况下并行操作。在另一实施例中,不是将核115分配给队列125之一,而是将由核115执行的不同应用分配给不同的DMA队列125,或者可以将虚拟化环境中的虚拟核分配给DMA队列125。PCIe接口135A允许主机105使用PCIe串行通信与FPGA150通信。PCIe链路140使主机105中的PCIe接口135A能够与FPGA150上的PCIe接口135B通信。然而,本示例不限于用于执行DMA读取和写入的PCIe通信,它也可以使用于其他高速数据通信技术。FPGA150包括PCIe接口135B、DMA引擎155、桥接器160、DMA接口175和可编程逻辑165。在一个实施例中,DMA引擎155允许硬件子系统例如,用户逻辑独立于主机105中的中央处理单元CPU、来例如访问主机105中的主存储器。在一个示例中,DMA引擎155是包括至少一些不可配置的电路的、硬化的DMA引擎。也就是说,DMA引擎155包括非可编程逻辑或电路,而不是可编程电路-例如可编程逻辑165。例如,DMA引擎155可以包括其功能被设置并且不能被重新配置的半导体电路。形成硬化DMA引擎155的一个优点是FPGA150中的可编程逻辑165可专用于用户使用,而不必使用可编程逻辑165的一部分来形成DMA引擎155。然而,这里描述的示例可以与可编程或软DMA引擎以及硬化DMA引擎一起使用。换句话说,可定制的DMA接口175可以与软的或硬化的DMA引擎155一起使用。DMA接口175定义用于在DMA引擎155和包括用户逻辑170的可编程逻辑165之间传输数据的信号和数据路径。例如,用户可以配置可编程逻辑165以生成用户逻辑170,用户逻辑170可以执行任何数量的功能、诸如网络接口卡NIC、神经网络加速器、图形加速器、加密加速器、OpenCL、电路仿真、数据挖掘等。可编程逻辑165可以包括诸如可配置逻辑块CLB那样的逻辑块。此外,虽然未示出,但是FPGA150可以包括其他专用硬件块,诸如用于执行特定数据处理的数字信号处理DSP块。桥接器160是允许用户逻辑170旁路DMA引擎155而与主机105直接通信的开关元件。例如,用户逻辑170可以在执行除了DMA读取或写入之外的其他功能时使用桥接器160。如上所述,DMA接口175是可由用户逻辑170定制的,使得用户逻辑170可以改变或修改DMA的执行方式。也就是说,用户逻辑170可以改变它使用的、由DMA接口175例如,API可用的信号和特征。在一个示例中,DMA接口175允许用户逻辑170设置不同的操作模式,例如,正常操作模式和旁路操作模式。此外,根据需要,用户可以在执行DMA时重新配置用户逻辑170以执行不同的任务。也就是说,先前由DMA引擎155执行的某些功能可以通过使用DMA接口175被卸载到用户逻辑170。这样,用户逻辑170可以执行先前仅由DMA引擎155执行的任务,例如定制描述符、管理流量、执行地址转换、和分配用户空间DMA。在一个示例中,FPGA150被设置在与主机105相同的主体或壳体内。例如,FPGA150可以是硬件卡,其被插入到主机105中的主板中的PCIe连接器。然而,在其他示例中,FPGA150是在包含主机105的外壳的外部。此外,这里的示例不限于FPGA150,并且可以在被耦合到主机105或其他外围设备的图形处理器单元GPU中使用。图2是根据示例的、实施DMA的计算系统的框图。计算系统包括主计算系统205以FPGA150,其与图1中详细讨论的FPGA150相的,因此这里不再描述。主机205包括处理器210、多个操作系统215、管理程序220和PCIe接口135A。处理器210代表任何数量的处理元件,每个处理元件可包括任何数量的处理核。操作系统215可以是由管理程序220管理的不同虚拟机的一部分。也就是,管理程序220允许主机205中的硬件元件例如,处理器210、PCIe接口135A、存储器等被虚拟化。在一个示例中,每个操作系统215被分配至少一个DMA队列125,用于执行DMA读取和写入。因此,代替如在图1中给每个核分配至少一个DMA队列,在图2中,每个操作系统215或每个虚拟机被分配一个DMA队列125。这样,由每个操作系统215执行的应用程序可以通过使用多队列DMA引擎155执行DMA读取和写入,而不用等待锁定或与另一操作系统或虚拟机共享队列。操作系统215可以并行地执行DMA读取和写入,而不用协调或很少协调。除了如图1所示将每个核115分配给队列125或者如图2所示将每个操作系统215分配给队列125之外,这里的示例可以应用于其他多队列场景。例如,操作系统215中的不同应用程序可以使用不同的队列125来并行地执行DMA。在另一示例中,不同的线程可以被分配给相应的DMA队列125。图3示出了根据示例的、可定制DMA接口175。如图所示,主机105被耦合到片上系统SOC300,其可以是NIC、FPGA、GPU、ASIC或其他硬件卡或外部设备。此外,尽管未示出,SOC300可以包括一个或多个处理器或网络组件,其可以使用DMA引擎155来发送和读取存储在主机105的存储器中的数据。也就是说,代替使用DMA引擎155来在主机和用户逻辑170之间传输数据,这里的技术可用于在主机105和SOC300中的其他硬件组件之间传输数据,而不管这些组件是可编程的还是不可编程的。使用相应的PCIe接口135,主机105可以使用DMA将数据写入SOC300中的存储器并从SOC300中的存储器接收数据。相反,SOC300可以使用DMA将数据写入主机105中的存储器并从主机105中的存储器接收数据。DMA接口175包括在DMA引擎155和用户逻辑170之间传输数据的不同信号或子接口。用户逻辑170可以是可编程逻辑的一部分,但这并不是必需的,相反用户逻辑可以被硬化,并且仍然可以从具有可定制的DMA接口175获益。TX可用指针信号305指示在DMA队列中的可用指针或可用描述符的数量。换句话说,所述信号305指示用户逻辑170可用于执行从主机105到SOC300中的存储器的DMA写入的描述符的数量。在一个示例中,DMA引擎155从主机105例如,主机105中的操作系统接收可用指针的数量,然后使用TX可用指针信号305将该信息转发到用户逻辑170。TX信用信号310由用户逻辑170提供给DMA接口。在一个示例中,用户逻辑170基于TX可用指针确定它可以处理或执行的DMA写入和读取的数量。例如,DMA队列可以具有一百个可用指针,但是用户逻辑170当前只能处理十个。这样,用户逻辑170可以通过使用TX信用信号310仅向DMA接口发出10个信用。以这种方式,用户逻辑170除DMA引擎155之外或代替DMA引擎155可以执行流量管理,以增加或减少DMA读出和写入。TX描述符输出信号315向用户逻辑170提供描述符。在一个示例中,DMA引擎155和接口175以旁路操作模式操作,其中由DMA引擎155从队列获取的描述符被发送到用户逻辑用语处理,这对比于DMA引擎155处理描述符的正常操作模式。描述符可以包括指向存储器的指针,存储器存储对应于接收到的数据包的有效载荷,主机105想要将该数据包存储在SOC300的存储器中。或者,代替包含指向有效载荷的指针,有效载荷被存储在描述符中。也就是说,描述符本身存储有效载荷,有效载荷在这里被称为具有即时数据。在一个示例中,DMA格式是固定的,这意味着难以预测用户逻辑170可能如何实现旁路模式以接收即时数据。因此,设计能够满足即时数据的当前和未来的使用的DMA引擎155是困难的。相反,如下面更详细描述的,这里的示例使用DMA接口175在旁路操作模式期间将描述符处理卸载到用户逻辑170,这确定是描述符包括指向存储器的包含有效载荷的指针还是描述符本身包含有效载荷。在一个示例中,每个DMA队列具有的描述符要么包含指向有效载荷的指针要么其本身包含有效载荷。当描述符本身包含有效载荷时,这在本文中称为“即时数据”。因此,通过确定哪个队列包含有在TX描述符输出315中描述的描述符,用户逻辑170可以确定如何处理描述符。一旦被处理,用户逻辑170就可以使用信号320中的TX描述符来将处理后的描述符发送到DMA接口175,然后发送到DMA引擎155。在一个示例中,用户逻辑170仅当所接收的描述符存储指向有效载荷的指针时,才使用信号320中的TX描述符将描述符发送回到DMA引擎155。如果描述符直接存储有效载荷,则用户逻辑170已经具有有效载荷而不是请求DMA引擎155通过使用在信号320中的TX描述符发送的已处理的描述符来获取有效载荷。即,当接收到具有有效载荷的描述符时,用户逻辑170可以不通过使用信号320中的TX描述符来发送已处理的描述符。以这种方式,由用户逻辑使用的DMA接口175中的信号是可定制的。这允许用户逻辑进行流量管理,例如速率限制、服务质量QoS等。此外,TX描述符可以是流例如,AXI4信号或存储器映射信号。如果描述符是存储器映射的,则描述符在DMA接口175的存储器映射部分上发送。具有流格式的描述符对应于从DMA接口175写入或读取的数据,而具有存储器映射格式的描述符对应于从SOC例如,FPGA150中的存储器写入或读取的数据。例如,存储器映射的DMA可以复制到附接于FPGA150的存储器例如,DDR3,HBM等或从附接于FPGA150的存储器例如,DDR3,HBM等被复制。一旦获取有效载荷,DMA引擎155就可以通过使用TXDMAAXI4信号325将有效载荷转发到用户逻辑170。在一个示例中,信号325使用高级可扩展接口AXI格式来将有效载荷从DMA引擎155传送到用户逻辑170。然而,这些示例不限于此,而是可以使用其他类型的通信协议,诸如存储器映射信号360和365。在一个示例中,当执行从主机105到SOC300中的存储器的DMA写入时,使用信号305、310、315、320和325这里称为TX操作。然而,当执行从SOC300到主机105中的存储器的DMA写入时这里称为RX操作,可以使用信号330、335、340、345和350。DMA引擎155使用DMA接口175经由RX可用指针信号330将用于执行RX操作的可用指针或描述符发送到用户逻辑170。例如,主机105可以操作不同的TX和RXDMA队列,用于执行TX操作和RX操作。因此,用于执行TX操作的可用指针或描述符如由TX可用指针信号305所指示的可以不同于用于执行RX操作的可用指针或描述符如由RX可用指针信号330所指示的。RX可用指针信号330可以指示在RXDMA队列中的可用指针的数量。换句话说,信号330指示用户逻辑170可使用来执行从SOC300到主机105中的存储器的DMA写入-即,RX操作-的描述符的数量。在一个示例中,DMA引擎155从主机105例如,主机105中的操作系统接收可用描述符的数量,然后使用RX可用指针信号330将该信息转发到用户逻辑170。RX信用信号335可以由用户逻辑170使用来执行流量管理,以控制有多少RX运算符由DMA引擎155执行。例如,与TX信用信号310一样,用户逻辑170可以响应于其自身的性能参数例如其当前可用的处理能力,存储器使用量等来发出RX信用。DMA引擎155使用RX描述符输出信号340来将提取的存储器指针例如,RXDMA队列提供给用户逻辑170。反过来,用户逻辑170使用RX描述符输入信号345来将已处理的描述符提供给DMA引擎155,然后,该引擎155可以使用它来将数据从SOC300中的存储器传输到主机105中的存储器。在一个示例中,用户逻辑170使用RX预取提示信号350来减少执行RX操作时的延迟。例如,当接收到数据包并且DMA引擎155确定执行DMA需要多少描述符时,可以根据需要满足RX操作。然而,这在使用PCIe接口135执行DMA写入之前引起PCIe延迟例如,在200纳秒到几毫秒之间。相反,由RX预取提示信号350提供的预取提示允许DMA引擎155从RXDMA队列中预取描述符,以避免PCIe延迟。用户逻辑170可以使用RXDMAAXI4信号355将用于DMARX操作的数据包的有效载荷发送到DMA引擎155。通过使用从RX描述符输入信号345接收的处理后的描述符和从RXDMAAXI4信号355接收的有效载荷,DMA引擎155可以通过将有效载荷写入主机105中的存储器来完成RX操作。然而,在其他示例中,存储器映射信号360和365可以被使用于将有效载荷从用户逻辑170传输到主机105,而不是使用RXDMAAXI4信号355。可以类似于上面讨论的DMA写入操作那样执行DMA读取。例如,在执行将数据从SOC300传送到主机105的RX操作可以是由用户逻辑170发起的DMA写入或由主机105发起的DMA读取。类似地,执行将数据从主机105传送到SOC300的TX操作可以是由主机105发起的DMA写入或由用户逻辑170发起的DMA读取。此外,DMA接口175包括主M和从S端口或连接370。例如,连接370A和370C是主连接,而连接370B和370D是从连接。在一个示例中,主连接370用于将数据驱动或存储到SOC300上,而当从SOC300接收数据时使用从连接370。如果TX描述符输入信号320是存储器映射的,则由DMA引擎155获取的数据被返还到存储器-例如,在用户逻辑170中的DDR存储器。图4示出了根据示例的、用于执行从主机到用户逻辑的DMA写入即,TX操作的流程400。在框图405,主机将用于DMA队列的可用指针或可用描述符发送到DMA引擎,该DMA引擎可用于执行TX操作。在框图410,在旁路操作模式中,DMA引擎使用DMA接口将可用指针转发到用户逻辑。在框图415,用户逻辑评估诸如其当前工作负荷、可用处理能力、存储器使用量、描述符存储空间等性能参数,来执行流量管理,以确保用户逻辑不会从主机接收多于用户逻辑当前可以处理的数据。基于用户逻辑的工作负荷,在框图420,DMA引擎向主机发出DMA读取请求,作为响应,主机获取对应于由DMA引擎发送的DMA读取请求的描述符。当处于旁路操作模式时,DMA引擎将获取的描述符转发到用户逻辑。在框图425,用户逻辑确定描述符是否包含即时数据。如果是,则在框图430,用户逻辑存储即时数据有效载荷,从而完成DMA操作。然而,如果不是,则方法400来到框图435,其中用户逻辑将描述符提供回DMA引擎。在框图440,DMA引擎将DMA读取请求发送到主机以提供在由描述符指向的存储器位置处存储的有效载荷。在框图445,主机通过将有效载荷发送到DMA引擎来完成DMATX操作,该DMA引擎然后将有效载荷发送到用户逻辑。图5示出了根据示例的、用于使用DMA引擎155执行从主机105到用户逻辑170的DMA写入的流程500。箭头505示出主机105将DMA队列的可用指针或可用描述符发送到DMA引擎155。在一个示例中,主机105例如,在主机105中执行的操作系统保持具有描述符环和索引的TXDMA队列,索引用于确定包括可用于执行TX操作的指向存储器的指针的可用描述符。主机105周期性地或间隔地将可用指针发送到DMA引擎155。在旁路操作模式中,箭头510显示DMA引擎155通过使用例如图3中所示的DMA接口175的TX可用指针信号305将可用指针转发到用户逻辑170。通过这样做,通知用户逻辑170主机105中有多少存储器可用于执行TX操作。在一个示例中,用户逻辑170评估诸如其当前工作载荷、可用处理能力、存储器使用量、描述符存储空间等的性能参数,来例如通过使用图3中的TX信用信号310确定向DMA引擎155发出多少信用,如由箭头515所示。换句话说,用户逻辑170使用信用来执行流量管理,以确保用户逻辑170没有从主机105接收比起用户逻辑170当前可以处理的更多的数据。例如,DMA队列中可能有一百个可用描述符,但是用户逻辑170基于用户逻辑170的当前工作量可能仅为十个描述符发出信用。通过使用信用,DMA引擎155向主机105发出DMA读取请求,如箭头520所示。在一个示例中,主机105获取对应于由DMA引擎155发送的DMA读取请求的描述符。DMA读取请求可以对应于从用户逻辑170发出到DMA引擎155的信用的数量。例如,DMA引擎155可以基于由用户逻辑170发出的信用的数量来发送DMA读取请求,以仅用于主机105想要写入到用户逻辑170的存储器或用户逻辑170想要从主机105中的存储器读取的那部分数据。以这种方式,当执行TX操作时,用户逻辑170而不是DMA引擎155可以节流和控制数据流。箭头525示出主机105将DMA完成数据发送到DMA引擎155。在一个示例中,DMA完成数据包括与由DMA引擎155发送的DMA读取请求相对应的描述符,如箭头520所示。代替处理描述符,在该示例中,描述符通过使用例如图3中所示的TX描述符输出信号315旁路DMA引擎155,如箭头530所示。换句话说,DMA引擎155将描述符转发给用户逻辑170以用于处理。然而,虽未示出,在正常操作模式中,DMA引擎155可以处理描述符本身而不用使用DMA接口将描述符转发到用户逻辑170以进行处理。如上所述,不同的DMA队列可以存储包括指向存储器的指针的描述符,或者具有存储即时数据而不是指向存储器位置的指针的描述符。例如,主机105可以包括多个核或多个虚拟机,它们每个具有自己的TXDMA队列。这些队列中的每一个都可以使用包含指针的描述符或包含即时数据的描述符。此外,描述符可以包括标识数据,该标识数据指示它们源自哪个DMA队列,从而使用户逻辑170能够确定描述符的类型。如果描述符对应于发送描述符中的即时数据的队列,则用户逻辑170可以直接从DMA引擎155接收的描述符获取对应于TX操作的数据,如箭头530所示。在本例中,流程500将在箭头530处结束,因为对应于TX操作的有效载荷被嵌入描述符本身中。用户逻辑170可以存储即时数据有效载荷,从而完成DMA操作。然而,如果描述符对应于在描述符中嵌入存储器指针的队列,而不是即时数据,则流程500继续箭头535,其中用户逻辑170例如使用图3中所示的TX描述符输入信号320将描述符提供回DMA引擎155。通过这样做,将指令DMA引擎155来获取被存储在描述符中的指针处的数据。因此,旁路DMA引擎155以允许用户逻辑170处理描述符允许用户逻辑170通过使用描述符发送即时数据。这样,DMA引擎155可以是固态化的可以与将即时数据嵌入描述符的用户逻辑170和主机105一起使用,以及跟那些不将即时数据嵌入描述符的用户逻辑170和主机105一起使用。此外,因为DMA引擎155不处理描述符,所以描述符中的格式可以改变,而不影响流程500的操作。也就是说,创建和处理描述符的主机105和用户逻辑170可以改变描述符的格式例如,改变被存储在描述符中的数据量,描述符中的识别数据的类型等并且仍然使用相同的DMA引擎155,因为引擎155被旁路。箭头540示出DMA引擎155向主机105发送DMA读取请求,以指示主机105提供被存储在描述符所指向的存储器位置处的有效载荷。箭头545示出了主机105通过将有效载荷发送到DMA引擎155来完成DMA操作,DMA引擎155然后将有效载荷发送到用户逻辑170,如箭头550所示。DMA引擎155可以使用AXI或存储器映射的信号来将有效载荷发送到用户逻辑170。例如,DMA引擎155可以使用TXDMAAXI4信号325或存储器映射信号360和365来将有效载荷发送到用户逻辑170。一旦完成,则将信用返回到用户逻辑170,如果用户逻辑107判定合适,则可以向DMA引擎155发出更多信用以执行更多TX操作。如箭头555所示,用户逻辑170还可以改变描述符信息,该描述符信息控制是否发出回写、是否发送回写内、以及在描述符完成之后是否生成中断。在存储器映射的DMA中,用户逻辑170可能想要知道提供者请求的DMA何时完成。换句话说,数据何时从主机存储器被复制到附接于用户逻辑170的存储器。因此,在该示例中,流程500包括从DMA引擎155到主机的附加箭头560,其指示DMA引擎155已完成存储器映射MM请求。该消息可以在TX描述符输出信号315上发送。在流量管理的一个示例中,用户逻辑170可以推迟提供者描述符的发出,直到该流程获得足够的信用来发送。图6示出了根据示例的、用于执行从用户逻辑到主机的DMA写入的方法600的流程-即,RX操作。在框图605,主机将可用指针发送到DMA引擎。在框图610,当处于旁路操作模式时,DMA引擎通过使用DMA接口将可用指针转发到用户逻辑。在框图615,用户逻辑评估诸如其当前工作负载、可用处理能力、存储器使用、描述符存储空间等的性能参数以执行流量管理,确保用户逻辑不从用户接收比用户逻辑当前可以处理的更多的数据。基于用户逻辑的工作负载,在框图620,DMA引擎向主机发出DMA读取请求。在框图625,主机将DMA完成数据发送到DMA引擎,其可以包括与DMA引擎发送的DMA读取请求相对应的描述符。在框图630处,DMA引擎将描述符转发到用户逻辑。也就是说,不是处理描述符,而是描述符旁路DMA引擎。在框图635,用户逻辑向DMA引擎提供经处理或修改的描述符和有效载荷,以包括指向存储有效载荷的存储器位置的指针。在框图640处,DMA引擎将描述符和有效载荷发送到主机以完成DMARX操作。图7示出了根据示例的、用于执行从用户逻辑到主机的DMA写入即,RX操作的流程700。箭头705示出主机105将用于DMA队列的可用指针发送到DMA引擎155。在一个示例中,主机105例如,在主机105中执行的操作系统维护具有描述符环和索引的RXDMA队列,用于确定可用于执行RX操作的指向存储器的可用指针。主机105周期性地或以预定间隔将可用指针或描述符发送到DMA引擎155。在旁路操作模式中,箭头710示出DMA引擎155使用例如图3中所示的DMA接口175的RX可用指针信号330将可用指针转发到用户逻辑170。这样做将通知用户逻辑170主机105中有多少存储器可用于执行RX操作。与流程500中一样,用户逻辑170可以评估诸如其当前工作载荷、可用处理能力、存储器使用量等的性能参数,以确定向DMA引擎155发出多少信用,正如例如通过使用图3中的RX信用信号335的箭头515所示。换句话说,用户逻辑170使用信用来执行流量管理,以确保用户逻辑170不会致力于向主机105发送比用户逻辑170目前能处理的更多的数据。通过使用信用,DMA引擎155向主机105发出DMA读取请求,如箭头720所示。在一个示例中,主机105获取与由DMA引擎155发送的DMA读取请求相对应的描述符。而且,DMA读取请求可以对应于从用户逻辑170发到DMA引擎155的信用的数量。例如,DMA引擎155可以基于用户逻辑170发出的信用的数量,来发送主机105想要从用户逻辑170的存储器读取或用户逻辑170想要写入主机105的存储器的那部分数据的DMA读取请求。以这种方式,当执行RX操作时,用户逻辑170而不是DMA引擎155可以节流和控制数据流。箭头725示出了主机105将DMA完成数据发送到DMA引擎155。在一个示例中,DMA完成数据包括与由DMA引擎155发送的DMA读取请求相对应的描述符,如箭头720所示。代替处理描述符,在本例中,通过使用例如图3中所示的RX描述符输出信号340,描述符旁路DMA引擎155,如箭头730所示。即,DMA引擎155将描述符转发到用户逻辑170以进行处理。在一个示例中,用户逻辑170在将处理的描述符发送回DMA引擎155之前缓冲描述符。例如,缓冲可以使用DMA引擎155中的缓存,其可以存储用于多个DMA队列的多个描述符。替换地,用户逻辑170可以相对于输入的数据包或有效载荷同步地返回描述符,这可以避免缓冲。在一个示例中,因为用户逻辑170处理描述符,所以用户逻辑170可以对存储在描述符中的存储器指针执行虚拟到物理存储器转换。也就是说,当从主机105中的DMA队列取出时,描述符可以包括到SOC中的虚拟存储器地址空间的虚拟存储器地址。然而,用户逻辑170可以执行虚拟到物理存储器地址转换,然后将SOC中的有效载荷的物理存储器地址插入到描述符中。该存储器地址转换可以在使用融合以太网上的RDMARoCE其中RDMA是远程直接存储器访问或iWARP的系统中执行。箭头735示出了用户逻辑170通过使用例如图3中所示的RX描述符输入信号345将描述符和有效载荷提供到DMA引擎155。在一个示例中,用户逻辑170修改从DMA引擎155所接收的描述符,以包括指向存储有效载荷的存储器位置的指针。用户逻辑170可以使用DMA接口中的AXI或存储器映射信号来将有效载荷传送到DMA引擎155。或者,如果描述符对应于使用即时数据的队列,则用户逻辑170将有效载荷嵌入到描述符中。箭头740示出了DMA引擎155通过将描述符和有效载荷发送到主机105来执行DMA写入以完成DMA操作。一旦完成,就将信用返回给用户逻辑107,如果用户逻辑107判定合适,则可以向DMA引擎155发出更多信用以执行更多的RX操作。箭头745示出了可以从DMA引擎155向主机105发送回写或中断。图8示出了根据示例的、用于执行从用户逻辑到主机的DMA写入即,RX操作的流程800。图8中的箭头805和810可以与图7中的箭头705和710相同,因此,将不再详细描述。箭头815示出了用户逻辑170通过使用DMA接口中的AXI或存储器映射信号向DMA引擎155提供对应于RX操作的有效载荷。因此,代替向DMA引擎155发出信用,在该示例中,用户逻辑170允许DMA引擎155中的硬件执行流量调节例如,发出和维持信用。这样做的优点是用户逻辑170可以避免如在图7中的流程700中完成的那样对描述符进行缓冲,这可以减少用于执行DMA操作的用户逻辑170中的存储量。通过将与RX操作相对应的有效载荷提供给DMA引擎155,引擎155知道有效载荷的大小,从而知道需要多少描述符来将有效载荷传输到主机105。箭头820示出了DMA引擎155执行DMA读取请求以从主机105获取描述符和从DMA主机105接收DMA完成数据,如箭头825所示。这些步骤可以与流程700中的箭头720和725相同。箭头830示出了用户逻辑170从DMA引擎155接收描述符。然而,因为DMA逻辑执行流量管理,所以用户逻辑170可以不缓冲描述符。也就是说,用户逻辑可以在不用缓冲的情况下处理描述符例如,执行虚拟到物理地址转换。这样做可能增加延迟,因为描述符需要由DMA引擎155获取,但是如果用户逻辑通过使用例如图3中的RX预取提示信号350提供预取提示,则可以减少该延迟。然而,如果DMA引擎155预取描述符但是用户逻辑170太忙而不能处理描述符,DMA引擎155可以丢弃描述符并发出否定信用并稍后获取描述符。在另一示例中,当DMA引擎155通过往回滚动指针而丢弃已经预取的描述符时,DMA引擎155可以执行指针回滚。箭头835示出了用户逻辑170将处理后的描述符提供给DMA引擎155,然后引擎155可以使用该描述符来执行对主机105的DMA写入,如箭头840所示。一旦完成,DMA引擎155就可以发出用于执行RX操作的额外信用。箭头845示出了可以从DMA引擎155向主机105发送回写或中断。在前文中,参考了在本公开内容中呈现的示例。然而,本公开内容的范围不限于具体描述的示例。相反,本文描述的特征和单元的任何组合,无论是否与不同的示例相关,都可以被想到用于实现和实践预期的示例。此外,尽管本文公开的示例可以实现优于其他可能的解决方案或优于现有技术的优点,但通过给定示例是否实现特定的优点并不限制本公开内容的范围。因此,除非在权利要求中明确叙述,否则这里描述的方面、特征、示例和优点仅仅是说明性的,并且不被认为是所附权利要求的要素或限制。同样地,对“本发明”的引用不应被解释为本文公开的任何发明主题的概括,并且除非在权利要求中明确叙述,否则不应认为是所附权利要求的要素或限制。本文描述的方面可以采取完全硬件示例、完全软件示例包括固件、驻留软件、微代码等或者组合软件和硬件方面的示例的形式,这些示例在本文中通常都可以被称为作为“模块”或“系统”。本发明可以是系统、方法、和或计算机程序产品。所述计算机程序产品可以包括其上具有计算机可读程序指令的计算机可读存储介质或介质,用于使处理器执行本发明的各方面。计算机可读存储介质可以是有形设备,其可以保留和存储指令以供指令执行装置使用。计算机可读存储介质可以是例如但不限于电子存储装置、磁存储装置、光存储装置、电磁存储装置、半导体存储装置或前述的任何合适组合。计算机可读存储介质的更具体示例的非详尽列表包括以下内容:便携式计算机磁盘、硬盘、随机存取存储器RAM、只读存储器ROM、可擦除可编程只读存储器EPROM或闪存、静态随机存取存储器SRAM、便携式光盘只读存储器CD-ROM、数字通用光盘DVD、记忆棒、软盘、机械编码装置例如在其上记录有指令的凹槽中的穿孔卡或凸起结构,以及前述的任何合适的组合。这里使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波例如,通过光纤电缆的光脉冲、或通过电线传输的电信号。本文描述的计算机可读程序指令可以经由网络例如,因特网、局域网、广域网和或无线网络从计算机可读存储介质或外部计算机或外部存储设备下载到相应的计算处理设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和或边缘服务器。每个计算处理设备中的网络适配器卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算处理设备内的计算机可读存储介质中。用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构ISA指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据或以一种或多种编程语言的任意组合编写的源代码或目标代码,包括诸如Smalltalk,C++等的面向对象的编程语言,以及诸如“C”编程语言或类似编程语言的传统过程编程语言。计算机可读程序指令可以完全在用户的计算机上、部分在用户的计算机上、作为独立的软件包、部分地在用户的计算机上、部分地在远程计算机上或完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可以通过任何类型的网络连接到用户的计算机,包括局域网LAN或广域网WAN,或者可以连接到外部计算机例如,通过使用互联网的互联网服务提供商。在一些示例中,包括例如可编程逻辑电路、FPGA、或可编程逻辑阵列PLA的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使得电子电路个性化,以便执行本发明的各方面。这里参照根据本发明的示例的方法、装置系统和计算机程序产品的流程图和或框图来描述本发明的各方面。应当看到,流程图图示和或框图的每个框图以及流程图图示和或框图中的框图的组合可以由计算机可读程序指令实现。这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,从而使得经由计算机的处理器或其他可编程数据处理装置执行的指令创建用于实现流程图和或框图块中指定的功能动作的装置。这些计算机可读程序指令还可以被存储在计算机可读存储介质中,该计算机可读存储介质可以指示计算机、可编程数据处理装置和或其他设备以特定方式起作用,从而使得存储有指令的计算机可读存储介质包括制品,该制品包括实现在流程图和或框图块中指定的功能动作的各方面的指令。计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程装置、或其他设备上执行的指令实现在流程图和或框图块中指定的功能动作。附图中的流程图和框图示出了根据本发明的各种示例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这方面,流程图或框图中的每个框图可以代表模块、分段或指令的一部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框图中提到的功能可以不按图中所示的顺序发生。例如,连续示出的两个框图实际上可以基本上同时执行,或者这些框图有时可以以相反的顺序执行,这取决于所涉及的功能。还应指出,框图和或流程图说明的每个框图以及在框图和或流程图说明中的框图的组合可以由执行特定功能或动作或实行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。虽然前述内容针对特定示例,但是可以在不脱离其基本范围的情况下设计其他和进一步的示例,并且本发明的范围由所附权利要求确定。

权利要求:1.一种操作直接存储器存取DMA引擎的方法,其特征在于,所述方法包括:在所述DMA引擎处从主机接收第一描述符;在旁路操作模式中,使用DMA接口将所述第一描述符从所述DMA引擎转发到接收逻辑;以及在所述接收逻辑处确定所述第一描述符是否包括以下之一:对应于第一DMA操作的有效载荷和指向所述有效载荷的存储器指针。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:接收多个可用描述符,用于对所述DMA引擎执行所述第一DMA操作,其中所述DMA引擎使用所述DMA接口将所述可用描述符转发到所述接收逻辑。3.根据权利要求2所述的方法,其特征在于,所述方法还包括:响应于接收到所述多个可用描述符,向所述DMA引擎发出信用,其中,在将所述第一描述符转发到所述接收逻辑之前,所述DMA引擎被配置为使用所述信用中的至少一个来向所述主机发送请求以获取所述第一描述符。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:根据所述接收逻辑的性能参数,确定要发出到所述DMA引擎的所述信用的数量。5.根据权利要求2所述的方法,其特征在于,所述第一DMA操作包括将被存储在片上系统中的数据写入所述主机,其中所述接收逻辑被配置为响应于接收到所述多个可用描述符而向所述DMA引擎提供预取提示,其中所述预取提示指示在所述可用描述符中的至少一个描述符以从所述DMA队列中预取。6.根据权利要求2所述的方法,其特征在于,所述方法还包括:响应于接收到所述可用描述符,提供对应于所述第一DMA操作的有效载荷,其中所述有效载荷是在所述DMA引擎将所述第一描述符发送到所述接收逻辑之前被提供的;和处理所述第一描述符,而不用在包括从所述DMA引擎接收的多个描述符的缓存中缓冲所述第一描述符。7.根据权利要求1所述的方法,其特征在于,所述第一描述符包括对应于各个有效载荷的即时数据,其中所述方法包括:完成所述第一DMA操作,而不用将所述第一描述符转发回所述DMA引擎。8.根据权利要求1所述的方法,其特征在于,所述第一描述符将对应的指针存储到存储器,其中所述方法包括:将所述第一描述符从所述接收逻辑转发回所述DMA引擎,其中所述DMA引擎使用所述第一描述符向所述主机发送DMA指令。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:在将所述第一描述符转发回所述DMA引擎之前,对所述第一描述符中的对应指针执行虚拟到物理存储器地址转换。10.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述DMA引擎处从所述主机接收多个描述符,其中所述多个描述符包括流格式和存储器映射格式,其中具有所述流格式的描述符对应于写入或读取自所述DMA接口的数据,而具有所述存储器映射格式的描述符对应于写入或读取自集成电路中的存储器的数据,所述集成电路包括所述DMA引擎和所述接收逻辑。11.一种片上系统SOC,其特征在于,所述SOC包括:包括电路的DMA引擎;用户逻辑;和DMA接口,其包括将所述DMA引擎通信地耦接到所述用户逻辑的信号,其中在旁路操作模式中,所述DMA引擎被配置为使用所述DMA接口将从主机接收的第一描述符转发到所述用户逻辑,以及其中所述用户逻辑评估所述第一描述符,以确定所述第一描述符是否包括以下之一:对应于第一DMA操作的有效载荷和指向所述有效载荷的存储器指针。12.根据权利要求11所述的SOC,其特征在于,所述DMA引擎被配置成接收可用描述符以用于执行所述第一DMA操作,以及使用所述DMA接口将所述可用描述符转发到所述用户逻辑。13.根据权利要求12所述的SOC,其特征在于,所述用户逻辑被配置成响应于接收到所述可用描述符,向所述DMA引擎发出信用,其中,在将所述第一描述符转发到所述用户逻辑之前,所述DMA引擎被配置为使用所述信用中的至少一个来向主机发送请求以获取所述第一描述符。14.根据权利要求13所述的SOC,其特征在于,所述用户逻辑被配置成根据所述用户逻辑的性能参数,确定发出到所述DMA引擎的所述信用的数量。15.根据权利要求14所述的SOC,其特征在于,所述用户逻辑被配置成:响应于接收到所述可用描述符,提供对应于所述第一DMA操作的有效载荷,其中所述有效载荷是在所述DMA引擎将所述第一描述符发送到所述用户逻辑之前被提供的;和处理所述第一描述符,而不用在包括从所述DMA引擎接收的多个描述符的缓存中缓冲所述第一描述符。16.根据权利要求11所述的SOC,其特征在于,所述第一描述符存储对应于所述有效载荷的即时数据,其中所述用户逻辑被配置成完成第一DMA操作,而不用将所述第一个描述符转发回所述DMA引擎。17.根据权利要求11所述的SOC,其特征在于,所述第一描述符将对应指针存储到存储器,其中所述用户逻辑被配置成使用所述DMA接口将所述第一描述符转发回所述DMA引擎,其中所述DMA引擎使用所述第一描述符向主机发送DMA指令。18.根据权利要求11所述的SOC,其特征在于,所述用户逻辑被配置成在将所述第一描述符转发回所述DMA引擎之前,对所述第一描述符中的对应指针执行虚拟到物理存储器地址转换。19.根据权利要求11所述的SOC,其特征在于,所述SOC还包括:硬件卡,其中所述用户逻辑包括被设置在所述硬件卡中的可编程逻辑,以及所述DMA引擎被硬化,从而使得所述电路包括被设置在所述硬件卡中的非可编程逻辑。20.根据权利要求11所述的SOC,其特征在于,所述DMA引擎被配置成从所述主机接收多个描述符,其中所述多个描述符包括流格式和存储器映射格式,其中具有所述流格式的描述符对应于写入或读取自所述DMA接口的数据,而具有所述存储器映射格式的描述符对应于写入或读取自集成电路中的存储器的数据,所述集成电路包括所述DMA引擎和所述用户逻辑。

百度查询: 赛灵思公司 可定制的多队列DMA接口

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。