数据处理系统中的消息传递的制作方法

文档序号:20889220发布日期:2020-05-26 17:47阅读:206来源:国知局
本公开涉及数据处理。更具体地说,它涉及数据处理系统中的消息传递。在数据处理系统中,可能需要多个单独的数据处理代理通过交换消息来相互通信。取决于应用,这些消息可具有各种内容,例如,命令、确认、用于委托处理的数据,等等。这些消息可以由始发代理创建并存储在队列中,然后由目的地代理从队列中检索它们,例如,使用共享存储器中的环形缓冲区。存在各种各样的方式来管理这种队列。在一个示例实施例中,存在一种数据处理系统,包括:第一数据处理代理和第二数据处理代理;以及在第一数据处理代理和第二数据处理代理之间相干共享的数据存储组件,该数据存储组件用于存储针对一个或多个消息的消息数据结构,以在第一数据处理代理和第二数据处理代理之间提供消息通道;以及第一数据处理代理和第二数据处理代理可访问的另一数据存储组件,该另一数据存储组件用于存储消息通道元数据,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是为第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一,并且其中第一数据处理代理和第二数据处理代理中的至少一个响应于初始化触发,而建立具有选定消息通道类型的消息通道。在另一示例实施例中,存在一种数据处理的方法,包括:操作第一数据处理代理;操作第二数据处理代理;在数据存储组件中存储针对一个或多个消息的消息数据结构,该数据存储组件在第一数据处理代理和第二数据处理代理之间相干共享;在第一数据处理代理和第二数据处理代理可访问的另一数据存储组件中存储消息通道元数据,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是为第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一;以及响应于初始化触发,而建立具有选定消息通道类型的消息通道。在另一示例实施例中,存在一种数据处理系统,其包括:用于操作第一数据处理代理的装置;用于操作第二数据处理代理的装置;用于存储针对一个或多个消息的消息数据结构的装置,该用于存储针对一个或多个消息的消息数据结构的装置在第一数据处理代理和第二数据处理代理之间相干共享;用于存储消息通道元数据的装置,该用于存储消息通道元数据的装置可由第一数据处理代理和第二数据处理代理访问,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是为第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一;以及用于响应于初始化触发而建立具有选定消息通道类型的消息通道的装置。参照在附图中示出的本技术的实施例,仅以示例的方式来进一步描述本技术,其中:图1示意性地示出了一个实施例中的数据处理系统;图2示意性地示出了在一些实施例中如何使用存储器映射、共享的相干存储器和附加存储组件来存储消息数据结构和消息通道状态信息;图3a示意性地示出了一个实施例中的数据处理系统,其中在与多个处理元件相关联的专用本地外围设备上存在一些存储器映射的寄存器地址的混叠(aliasing);图3b示意性地示出了一个实施例中的数据处理系统,其中系统中的多个处理元件所使用的存储器映射的寄存器地址映射到外围设备中的唯一物理寄存器;图4示意性地示出了在一些实施例中如何提供第一类型的消息通道,其中保存用于消息通道的消息的消息数据结构被存储在共享的相干存储器中,而与消息通道相关联的所有消息通道元数据被存储在加速器单元的内部存储组件中;图5示出了在一些实施例中当软件任务通过第一类型的通道发送消息时采取的一系列步骤;图6示出了在一些实施例中当软件任务通过第一类型的消息通道接收消息时采取的一系列步骤;图7示意性地示出了在一些实施例中如何提供第二类型的消息通道,其中保存用于消息通道的消息的消息数据结构以及与消息通道相关联的许多消息通道元数据都存储在共享的相干存储器中,而通知寄存器被用在加速器单元的内部存储组件中;图8示出了在一些方法实施例中当软件任务通过第二类型的消息通道发送消息时采取的一系列步骤;以及图9示出了在一些方法实施例中当软件任务通过第二类型的消息通道接收消息时采取的一系列步骤。至少一些实施例提供了一种数据处理系统,包括:第一数据处理代理和第二数据处理代理;以及在第一数据处理代理和第二数据处理代理之间相干共享的数据存储组件,该数据存储组件用于:存储用于一个或多个消息的消息数据结构,以在第一数据处理代理和第二数据处理代理之间提供消息通道;以及第一数据处理代理和第二数据处理代理可访问的另一数据存储组件,该另一数据存储组件用于存储消息通道元数据,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是针对第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一,并且其中第一数据处理代理和第二数据处理代理中的至少一个响应于初始化触发而建立具有选定消息通道类型的消息通道。数据处理系统利用相干共享的数据存储组件(例如,诸如dram之类的存储器)来存储定义的消息数据结构,其中第一和第二数据处理代理之间的消息可被存储在该数据存储组件中,并且第一和第二数据处理代理都可访问该数据存储组件。消息可以采取各种各样的形式,并且一般可在本公开中通篇被简单地认为是一个数据处理代理希望发送给另一数据处理代理的某种类型的数据。数据处理系统还提供另一数据存储组件,该数据存储组件对于第一和第二数据处理代理二者都是可访问的,并且用于存储与存储在相干共享的数据存储组件中的消息数据结构相关联的消息通道元数据。可以以各种方式来提供对第一和第二数据处理代理二者的可访问性,但是在一些实施例中,这是通过在另一数据存储组件内的存储器映射地址来实现的。存在为数据处理系统定义的多种消息通道类型,并且可以为在数据处理系统中的数据处理代理之间的消息通信建立这些消息通道类型。消息通道元数据的形式和内容根据消息通道的类型而变化。可以在数据处理系统中动态地创建消息通道(通过数据存储组件中的消息数据结构和另一数据存储组件中对应的消息通道元数据的实例化)。因此,在系统启动时,未预先定义在数据处理系统中建立的用于数据处理代理之间的通信的消息通道,而是可以根据数据处理系统的数据处理活动的需要来创建消息通道(此外,可以在不再需要通道时将其关闭)。此外,就支持该类型的消息通道的存储要求而言,不同类型的消息通道可具有不同的要求。当在数据处理系统中建立新的消息通道时(响应于可能采用多种形式的适当触发),根据消息通道的要求以及可用于支持该消息通道的资源来选择消息通道类型。在一些实施例中,数据处理系统被布置为存储消息接口数据结构,其中每个消息接口数据结构定义在数据存储组件和另一数据存储组件中建立的多个消息通道。因此,可以在消息接口数据结构中将多个消息通道捆绑在一起。这促进多个消息通道的监管,例如使得可以在单个动作中建立一组消息通道(通过一个消息接口数据结构的实例化),并且可以通过在消息接口数据结构级别上选择用于多个消息通道的配置来单方面应用该配置。在一些实施例中,第一数据处理代理和第二数据处理代理中的至少一个响应于初始化触发,而通过为消息接口数据结构选择选定消息通道类型来为多个消息通道定义选定消息通道类型。因此,可以单方面建立的多个消息通道的一种配置是选定消息通道类型,其中,当创建消息接口数据结构时,消息接口数据结构的性质可以为该消息接口数据结构所定义的多个消息通道中的每一者定义选定消息通道类型。在一些实施例中,数据处理系统被布置为存储多个消息接口数据结构,并且针对多个消息接口数据结构中的每一者的选定消息通道类型被独立地设置。本技术的灵活性进一步扩展到允许在数据处理系统中建立多个消息接口数据结构,从而可以建立多个单独的消息通道组,其中针对这些组中的每一者的选定消息通道类型可被独立地设置。换言之,可以在数据处理系统内并行配置和操作多个消息通道类型。在一些实施例中,第一数据处理代理和第二数据处理代理可访问的另一数据存储组件包括在数据处理系统中的硬件设备中的寄存器的集合,其中存储器地址的集合被存储器映射到该寄存器的集合。该另一数据存储组件在数据处理系统中可以采用各种形式,但是将该另一数据存储组件提供为硬件设备中的寄存器的集合、将数据处理系统中的存储器地址的集合映射到该寄存器的集合是可以实现此目的的一种方式。可以以各种方式来执行对在数据处理系统中建立的消息通道的监管,但是其中该另一数据存储组件包括在硬件设备中的寄存器的集合的这种类型的途径可以使得将由硬件设备执行的该监管的有用程度成为可能。在明确地提供此类硬件设备以支持数据处理系统中消息交换的情况下,这从而支持高效的系统,其中由存储在另一数据存储组件(即,此处,硬件设备中的寄存器的集合)中的消息通道元数据提供的消息状态信息使得硬件设备能够有效地监管消息通道。在一些实施例中,至少存储器地址集合的子集被存储器映射到数据处理系统中的多个位置,并且多个位置中的至少一个位置在数据处理系统中专用于数据处理设备的外围设备中。换言之,这样的实施例允许在本地外围设备中对这些存储器地址进行混叠。例如,该途径可以用在以下实施例中:其中,出于性能原因,期望数据处理系统中的个体数据处理代理能够相对于彼此以更大的独立性进行操作。例如,数据处理系统中的数据处理代理可以访问系统中其他数据处理代理无法访问的外围设备,并允许数据处理代理针对保存在其专用外围设备中的消息通道数据执行其某些操作能够提高性能,例如,因为较低的平均访问时延。在一些实施例中,存储器地址集合中的每个地址被存储器映射到数据处理系统中的各个唯一位置。换言之,在这样的实施例中,可以不存在上述混叠,使得存储器映射的寄存器的视图对于数据处理系统中的所有数据处理代理是一致的。例如,这可以促进由一个数据处理代理执行的任务的迁移到由另一数据处理代理执行。在一些实施例中,各个唯一位置在数据处理系统中的单个外围设备中。例如,如果存储了消息通道元数据中的另一数据存储组件,则数据处理系统中的多个数据处理代理可以访问单个外围设备。这可以例如在上述专用硬件设备内。在一些实施例中,存储器地址的集合中的至少一个地址被存储器映射到数据处理系统中的多个外围设备中的位置,其中多个外围设备被布置为实现相干性机制以确保该寄存器的集合的内容的一致副本。可替代地,因此可以采取另外的途径,其中允许混叠以使得多个外围设备能够并行操作以提高性能,然而借助于该相干性机制可以实现存储在这些多个外围设备中的消息通道元数据之间的一致性。在一些实施例中,该寄存器的集合包括用于存储消息通道元数据的通知寄存器,其中存储在该通知寄存器中的值提供该消息通道的消息状态信息,并且其中硬件设备响应于存储在通知寄存器中的值的修改而对消息通道执行预定动作。因此,该存储器映射的通知寄存器可以充当各种“门铃”,其中在数据处理系统中的数据处理代理中可以修改存储在通知寄存器中的值,并且该修改可以触发硬件设备中对消息通道的动作。硬件设备被配置为通知通知寄存器中的值的修改的特定方式可以采取各种形式。例如,硬件设备可以以适合于消息通道的目的的频率来轮询通知寄存器,或者可以为通知寄存器提供物理连接以触发该“门铃”通知。此外,取决于系统要求,硬件设备对消息通道采取的预定动作可以采取各种形式。例如,值的修改可以通知硬件设备新消息已被存储在提供消息通道的消息数据结构中,然后硬件设备可以采取动作将该消息传输到恰当的目的地。在一些实施例中,寄存器的集合包括分别对应于多个消息通道的多个通知寄存器,并且存储在通知寄存器中的值指示存储在消息通道的消息数据结构中的选定消息。因此,当针对每个消息通道有一个通知寄存器时,存储在给定通知寄存器中的值可用于指示存储在该消息通道的消息数据结构中的特定消息。例如,可以配置通知寄存器,以使得其可以存储的值的范围对应于(至少)可以存储在消息通道的消息数据结构中的个体消息的数量,因此该值可以指示特定消息(例如,新存储的消息)。在一些实施例中,寄存器的集合包括用于消息通道元数据的存储的摘要寄存器,其中摘要寄存器中存储的值为多个消息通道中的每个消息通道提供消息状态信息,该消息状态信息指示每个相应的消息通道当前是否具有保存一个或多个新消息的容量。因此,在这样的实施例中,可以提供摘要寄存器(“传输”摘要)以给出多个消息通道的概述,并具体地示出每个消息通道是具有保存一个或多个新消息的容量(即,有空间剩余)还是没有(即,满了)。类似地,在一些实施例中,寄存器的集合包括用于存储消息通道元数据的另一摘要寄存器,其中存储在该另一摘要寄存器中的值为多个消息通道中的每个消息通道提供消息状态信息,该消息状态信息指示每个相应的消息通道当前是否保存了一个或多个消息。因此,在这样的实施例中,可以提供另一摘要寄存器(“接收”摘要)以给出多个消息通道的概述,并且具体地示出每个消息通道当前是正在保存一个或多个新消息(即,具有新消息准备好要处理)或否(即,空的)。在一些实施例中,硬件设备中的寄存器的集合被布置为存储与消息数据结构相关联的配置数据结构,其中该配置数据结构定义消息数据结构的使用参数,并且其中该使用参数包括该消息数据结构的索引,并且其中该硬件设备响应于对索引的修改,而对该消息数据结构执行预定动作。因此,在配置数据结构中的配置数据结构中提供的使用参数之一可以是索引,并且例如,这可以采取关于消息通道中的排队消息的集合的写索引或读索引的形式。因此,在数据处理系统中的数据处理代理将消息添加到消息数据结构中的排队的消息的集合中的情况下,它可以递增写索引以指示随后应将下一条消息添加到消息数据结构的何处,并且该写索引的修改可以用来通知硬件设备新消息已被存储在消息数据结构中。可替代地,该索引可以是读索引,并且一旦数据处理系统中的数据处理代理已经检索到存储在消息数据结构中的消息,该数据处理代理就可以相对于该消息数据结构来更新读索引,并且该读索引的修改还可以用作向硬件设备的通知,以通知现在已检索到消息数据结构中先前存储的消息。如在上述通知(“门铃”)寄存器的示例中一样,可以通过各种方式来实现从硬件设备对寄存器中的值修改的响应,例如,轮询索引寄存器或直接触发响应的到索引寄存器的连接。在一些实施例中,第一数据处理代理和第二数据处理代理中的至少一个是在数据处理系统中执行的软件任务。在一些实施例中,第一数据处理代理和第二数据处理代理中的至少一个是数据处理系统中的硬件代理。因此,本技术可以用于在两个软件任务之间、在软件任务和硬件设备之间、或在两个硬件设备之间传递消息。在一些实施例中,消息数据结构是消息的有序队列。这可以是环形缓冲区。在一些实施例中,消息通道提供从第一数据处理代理到第二数据处理代理的单向消息传输。至少一些实施例提供了一种数据处理的方法,包括:操作第一数据处理代理;操作第二数据处理代理;在数据存储组件中存储针对一个或多个消息的消息数据结构,该数据存储组件在第一数据处理代理和第二数据处理代理之间相干共享;在第一数据处理代理和第二数据处理代理可访问的另一数据存储组件中存储消息通道元数据,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是为第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一;以及响应于初始化触发,而建立具有选定消息通道类型的消息通道。至少一些实施例提供了一种数据处理系统,包括:用于操作第一数据处理代理的装置;用于操作第二数据处理代理的装置;用于存储针对一个或多个消息的消息数据结构的装置,该用于存储针对一个或多个消息的消息数据结构的装置在第一数据处理代理和第二数据处理代理之间相干共享;用于存储消息通道元数据的装置,该用于存储消息通道元数据的装置可由第一数据处理代理和第二数据处理代理访问,其中消息通道元数据提供消息通道的消息状态信息,并且其中消息通道元数据是为第一数据处理代理和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一;以及用于响应于初始化触发而建立具有选定消息通道类型的消息通道的装置。现在参考附图描述一些具体的实施例。图1示意性地示出了一个实施例中的数据处理系统10。一般而言,数据处理系统10包括多个数据处理核心12-18(在所示示例中为四个),其在数据处理系统可操作时执行各种数据处理活动。所示出的核心12-18中的每一者可以替代地是核心的集群。为了支持数据处理活动,数据处理系统10被配备有相干共享的存储器(例如,dram),数据处理核心12-18中的每一者都可以通过互连22访问该相干共享的存储器。在该示例中还提供了系统缓存24以提高系统性能。如将参考随后的附图更详细地描述的,存储在相干共享的存储器20中的一个项目是消息数据结构26,该消息数据结构26被用于提供消息通道以支持消息在数据处理系统中的两个数据处理代理之间的传递。将参考随后的附图更详细地讨论消息数据结构26和为了支持消息通道的使用而在数据处理系统中定义的其他数据结构的更多细节,并且其中将陈述消息数据结构和其他数据结构的配置的各种可能性。在这里,足以认识到数据处理系统被配备有如下能力:动态地建立消息通道以支持在数据处理系统中的数据处理代理之间以各种不同类型进行消息传递。如下面将进一步讨论的,在消息通道的不同可能类型之中的给定类型的消息通道可能更适合于特定的数据处理情境,因此,当在数据处理系统中建立消息通道时,依据当前的数据处理要求来选择消息通道类型。图1还示出了加速器管理设备28和外围设备30。当在数据处理系统中建立消息通道时,与消息数据结构26相关联的消息通道元数据被另外存储在数据处理系统的另一数据存储组件中,例如加速器管理设备28的寄存器32或外围设备30的存储组件34。该消息通道元数据提供消息通道的消息状态信息,并且其在另一不同的数据存储组件中(与相干共享的存储器分开)的存储支持消息通道的监管,从而支持系统中的数据处理代理之间的通信。例如,消息通道元数据可以被存储在加速器管理设备28的寄存器32中。可以通过对系统中的数据处理代理(无论什么类型)进行存储器映射,而使得这些寄存器可供它们访问。此外,加速器管理设备28可以被提供为专用于经由所建立的消息通道来促进系统中的数据处理代理之间的通信的硬件设备。在消息通道的消息状态信息被存储在此硬件设备的寄存器中的情况下,则该硬件设备也可以被构造为响应于消息通道的状态的变化(例如,消息数据结构26中新消息的存储)而采取恰当的动作,以将该新消息传送到其目的地。然而,不需要该额外的存储组件物理地位于诸如加速器管理设备28之类的硬件设备内,并且也可以在数据处理系统10中实现的变型实施例可以为此目的而利用外围设备30中的存储组件34。然后,可以将加速器管理设备28视为“无状态”(从而可能不提供寄存器32,或者至少可能仅将其用于与此处公开的技术不直接相关的目的),然而实际上,在图1的示意图中,它被示为单个自包含的单元28,它可以完全分布在数据处理系统中,由各种单独的组件来提供其功能。从图1的示意图将理解,核心12-18中的每一个可以在以下情况下访问加速器管理设备28(具体是其寄存器32)并且可以访问外围设备30(具体地访问其存储组件34):其中一者被用于提供其中存储了消息通道元数据的上述另一数据存储组件。然而,也如图1所示,在该示例中,核心12-18中的每一个还配备有各自的本地外围设备36-42。本地外围设备的该集合可以用于存储器映射的地址的本地存储,并且可以允许至少一些存储器映射的地址的混叠,以使得混叠的存储器映射的地址的集合中的每个地址被映射到系统中的多个位置(跨越本地外围设备36-42的集合)。允许数据处理核心12-18以这种方式访问其自已的本地外围设备中的存储器映射的寄存器地址可以提高性能(例如,由于减少的平均访问时延),但是在存储器映射的寄存器的视图对于系统中的所有处理元件是不一致的情况下,这可能会限制能够在核心之间迁移软件线程的难易程度。图1还示出了存储在相干共享的存储器20中的会话表40(其也可以称为路由表),该会话表用于存储指示数据处理系统中每个定义的消息通道的源和目的地的信息。在以下描述中,消息通道也可以被称为“会话”,而源或目的地也可以被称为“套接字(socket)”。在此术语中,套接字和会话的概念彼此直接相关:会话是指两个套接字之间的逻辑链接,反之,套接字是一个特定会话中的端点。可以在两个软件任务(可称为线程)之间、在硬件任务和软件任务(可视为加速器和执行完全独立于彼此的工作所要求的状态的颗粒)之间、或者两个硬件任务之间建立会话。会话用于在数据处理系统中的这些“代理”的任务之间传输消息。图2示意性地示出了如何存储本技术的消息数据结构和消息通道元数据的一些更多细节。该图示出了共享的相干存储器50,其中存储了消息数据结构,以及加速器存储组件52(应当理解,该存储组件可以形成加速器设备本身的一部分,或者可以是加速器设备可访问的其他系统存储组件),其中存储了消息通道元数据。还示出了对应的系统存储器映射54,其示出了消息通道元数据和消息数据结构两者本身形成了存储器映射的一部分,并且因此可以相干地被系统中的任何数据处理代理访问。在初始化时,共享的相干存储器50中的消息数据结构和加速器存储组件52中的消息通道元数据都被实例化。图2示出了如下示例:利用在共享的相干存储器50中设立的消息数据结构1来初始化消息通道1,并且将消息通道1状态信息存储在提供加速器存储组件52的寄存器58中。已经存在单独的消息通道0,其具有在共享的相干存储器50中的对应的消息数据结构0和存储在作为加速器存储组件52的一部分的寄存器56中的消息通道0状态信息。这两个消息通道彼此独立,并且可以具有不同的类型。图2还示出了加速器消息处理控件60,其可以例如形成诸如图1所示的加速器管理设备28的一部分。此处示出的该控制单元60的一个作用是监视寄存器56和58的内容,从而可以响应于那些寄存器之一的内容的改变而执行恰当的消息相关的处理。在图2中示出了执行此监视的两种替代机制。在第一机制中,在各个寄存器和加速器消息处理控件60之间建立连接,使得每个寄存器可以充当“门铃”以触发加速器消息处理控件60的响应。在第二机制中,加速器消息处理控件60轮询寄存器以确定何时发生内容改变,其中轮询周期的设置取决于后续动作应遵循的速度和与提供该轮询相关联的开销之间的平衡。图3a和3b返回到给定寄存器地址的存储器映射的问题,该给定寄存器地址用于给定消息通道的消息通道元数据(包括消息状态信息)的存储。所示的示例紧密地基于例如参考图1讨论的数据处理系统的结构,并且在图3a和图3b中复现了该系统的各个组件,并给以相同的标号(但是请注意,在这里,图1的核心12-16被称为“处理元件”12-16)。在图3a的示例中,可以看到寄存器地址(0x100)映射到系统中的多个位置,即在每个本地外围设备36、38和40中。这意味着对于每个处理元件12-16,具体地对于分别被示为在处理元件12-16中执行的每个线程70-74,存储器映射的寄存器的视图不一致。然而,这也意味着每个处理元件12-16都能够访问其本地外围设备36-40中的该存储器映射的寄存器地址0x100,这可能例如由于减少的平均访问时延而对性能有益处。相比之下,在图3b的示例中,对于每个处理元件12-16,具体地对于分别被示为当前正在处理元件12和16中执行的每个线程76和78,存储器映射的寄存器的视图是一致的,因为所有存储器映射(地址0x100)被一致地映射到外围从设备30中的指示寄存器80。由于这种一致性,这意味着在一个处理元件(例如,核心)中执行的线程可以迁移到不同处理元件,而不会导致明显的复杂性。这在图3b中示意性地示出,其中线程76从在处理元件12中执行迁移到在处理元件14中执行。返回对图3a的考虑,可以替代地通过在本地外围设备36-40之间实现相干性机制来实现一致性(例如,以允许直接进行线程迁移)。通过提供实现该相干性机制的相干性控件82,这在图3a中被示为替代方案(虚线)。可替代地,可以使用本文所述的第二类型的消息通道来提供消息通道(其中,整个ams表被存储在共享的相干存储器中,以促进软件线程的迁移)。如上面所提到的,本技术提供了可以在数据处理系统中动态建立的不同类型的消息通道,并且图4示意性地示出了在一些实施例中如何提供第一类型的消息通道的更多细节,其中保存消息通道的消息的消息数据结构被存储在共享的相干存储器中,而与此消息通道相关联的所有消息通道元数据都被存储在数据处理系统中的加速器设备的内部存储组件中。示出了共享的相干存储器102和加速器设备内部存储组件104的示例内容,其中所有这些内容都被存储器映射,并且还示出了存储器映射100。在存储器映射100的上部中,示出了用于软件的加速器消息接口(ami-sw)的三个示例(ami-sw0、ami-sw1和ami-swn)。前两个接口都提供此第一类型的消息通道的群组(其中,与消息通道相关联的所有消息通道元数据都被存储在共享的相干存储器外部—在此示例中,被存储在加速器设备的寄存器中)。在图4所示的实施例中,消息通道也称为加速器消息套接字(ams),并且每个ams支持一个消息队列。接口ami-swn提供的ams类型在图4中是不可见的,实际上应该注意,消息通道(ams)类型的配置是在每个接口的粒度级别上确定的,因此该接口ami-swn也可以提供这种第一类型的消息通道(如图4所示),或者可以提供系统所支持的另一类型的消息通道(例如下面参考图7讨论的第二类型)。在存储器映射100的下部,示出了两个示例环形缓冲区的映射。与该第一类型的消息通道相关联的消息通道元数据的第一层次级别在图4中被示为项目106,其对于每个ami-sw包括tx_digest和rx_digest寄存器以及tx和rxams数据结构,它们在该ami-sw被建立时被布置在相应的ami-sw分区中。ami-sw分区包含摘要,后跟ams数据结构。分区的大小取决于系统中每个ami定义的发送(tx)和接收(rx)ams的数量(num_tx_ams和num_rx_ams)。在一个示例中,对于每个amisw,存在用于发送的64个amstx和用于接收的64个amsrx。下面在表1中描述了本实施例中的tx_digest和rxdigest寄存器以及tx和rxams数据结构。表1——第一类型的ams的ami-sw分区环形缓冲区数据结构tx_ams_table和rx_ams_table在图4中被标记为套接字(ams)表。套接字表的内容的更多细节在与该第一类型的消息通道相关联的消息通道元数据的第二层次级别中被示出为项目108,这些是针对该ami-sw分区中的每个tx套接字的环形缓冲区参数,之后是针对该ami-sw分区中的每个rx套接字的环形缓冲区参数。环形缓冲区参数(针对tx_ams#1)的一个集合的具体细节在与该第一类型的消息通道相关联的消息通道元数据的第三层次级别中被示出为项目110。这些环形缓冲区参数包括:该环形缓冲区的当前读和写索引(本质上指示应从环形缓冲区读取下一消息的位置,并指示下一消息应被写入环形缓冲区的位置);环形缓冲区的元素大小定义(给定消息可以占用一个或多个元素);指示环形缓冲区大小的掩码值(是n2,其中n是由二进制的掩码值指示的值);以及基址指针,其指示共享的相干存储器中环形缓冲区的基地址。现在参考图5和图6来讨论使用与该第一类型的消息通道相关联的消息通道元数据的示例方式,图5和图6示出了当软件任务分别经由tx_ams数据结构之一来发送消息并且经由rx_ams数据结构之一来接收消息时所采取的步骤的示例序列。从图5开始,随着来自软件任务的消息的发送,在步骤150,软件任务使用索引(i,s)访问ams数据结构以获得对应的环形缓冲区的参数。然后在步骤152,软件任务通过访问tx_digest值来确定环形缓冲区中是否为其正要发送的消息留有空间。对应于相关环形缓冲区的比特的值以二进制值(是/否)的方式来表明这一点。在没有可用空间的情况下,任务等待,经由步骤154循环。当空间可用时,在步骤156,软件任务将消息存储在索引write_index处的环形缓冲区中。然后在步骤158,软件任务发出屏障指令,以确保所有进行中的写事务均已到达其目的地。这是因为共享的相干存储器中的写入不受顺序限制,因此这确保在屏障指令之前发出的对共享存储器的其他写入事务被保证在屏障指令之后发出的其他事务前面的以执行。然后在步骤160,软件任务递增其自己的写索引(在其本地ams表中),并通过ami-sw分区将该更新后的值写入ams(套接字)表。现在,由软件任务执行的步骤已完成。作为响应,加速器管理器将采取后续步骤。在步骤162,加速器管理器(这里也称为amu)检测对套接字#s、接口#i的写索引的更新。请注意,此检测可以通过各种方式来实现,例如,轮询write_index寄存器或配置write_index寄存器以充当门铃,该门铃触发加速器管理器的另外的动作(另请参见上面关于此主题的图2的描述)。然后在步骤164,加速器管理器通过访问会话表来确定目的地套接字(参见图1中的项目40)。在步骤166,加速器管理器确定是否可以将消息写入目的地套接字(即,rx_ams的rx_digest是否指示相关的环形缓冲区具有空间)。当没有可用空间时,加速器管理器将等待,经由步骤168进行循环。当空间可用时,在步骤170,加速器管理器执行将消息从tx_ams环形缓冲区复制到rx_ams环形缓冲区。现在转向图6,示出了当软件任务接收到消息时所采取的步骤的示例序列。首先,在步骤180,软件任务通过访问ami#i的rx_digest来确定可从ami#i的rxams#s获得消息。然后在步骤182,软件任务使用索引(i,s)访问ams数据结构,以获得相关环形缓冲区的参数。在步骤184,软件任务从索引read_index处的环形缓冲区读取一个(或多个)消息,并在步骤186,软件任务递增其自身的本地读索引,并将此更新的值通过ami-sw分区写入到ams表中。现在由软件任务执行的步骤已完成,并且作为响应,加速器管理器采取最后的步骤190。在步骤190,加速器管理器检测到对ams#s、ami#i的读索引的更新,并因此已经确认了目的地软件任务已经接收到该消息。如果需要,则可以将此确认传播到消息的发送方。注意,如上关于对写索引的修改的检测所述,也可以以多种方式来实现这种对读索引的修改的检测,例如轮询read_index寄存器或配置read_index寄存器以用作门铃,该门铃触发加速器管理器采取另外的动作(另请参见上面关于此主题的图2的描述)。图7示意性地示出了在一些实施例中如何提供可以在数据处理系统中动态建立的第二类型的消息通道的更多细节。对于此第二类型的消息通道,不仅保存消息通道的消息的消息数据结构被存储在共享的相干存储器中,而且与消息通道相关联的消息通道元数据的很大一部分(实际上是所有的ams表)也被存储在这里。在数据处理系统中,只有一小组状态指示(通知寄存器)被存储在加速器设备的内部存储组件中。示出了共享的相干存储器200和加速器设备内部存储组件202的示例内容,其中所有这些内容都被存储器映射并且还示出了存储器映射204。在存储器映射204的上部中,示出了用于软件的加速器消息接口(ami-sw)的两个示例(ami-sw[0]和ami-sw[n]),用于它们到共享的相干存储器的映射。这两个接口都提供了该第二类型的消息通道的群组,其中与消息通道相关联的大多数消息通道元数据(所有的ams表)都被存储在共享的相干存储器中。在图7所示的实施例中,消息通道在这里也被称为加速器消息套接字(ams),并且每个ams支持一个消息队列。再次应注意,消息通道(ams)类型的配置是在每个接口的粒度级别上确定的,以使得其他ami-sw接口也可以提供该第二类型的消息通道(如图7所示)或可以提供系统所支持的另一类型的消息通道(例如,上面参考比方说图4讨论的第一类型)。在存储器映射的中间部分,示出了到针对ami软件分区(每个ami-sw一个)的加速器设备内部存储组件的映射(ami-sw分区的大小取决于指定的ams的数量),并且在存储器映射100的最下面的部分中,示出了两个示例环形缓冲区的映射。与第二类型的消息通道相关联的消息通道元数据的第一层次级别在图7中被示为项目206,(与第一类型的消息通道类似)其针对每个ami-sw包括tx_digest和rx_digest值以及tx和rxams数据结构,它们在ami-sw被建立时被布置在相干共享的存储器中。摘要之后是ams数据结构。与第二类型的消息通道相关联的消息通道元数据的第二层次级别在图7中被示为项目208,并且第三层次级别被示为项目210。这些与图4中描述的项目108和110相同。下面在表2中提供了ami-sw条目的格式,其中n=(num_tx_ams-1)且m=(num_rx_ams-1)。ami表包含每个ams一个门铃寄存器。表2——第二类型的ams的ami-sw表在该实施例中,如图7所示,在每个门铃寄存器中,比特[15:0]用于指定环形缓冲区中的元素的数量,而比特[31:16]被保留。在其他实施例中,每个门铃寄存器的所有比特可以对应于环形缓冲区中的元素。现在参考图8和图9来讨论使用与该第二类型的消息通道相关联的消息通道元数据的示例方式,图8和图9示出了当软件任务分别经由tx_ams数据结构之一来发送消息并且经由rx_ams数据结构之一来接收消息时所采取的步骤的示例序列。从图8开始,随着来自软件任务的消息的传输,在步骤250,软件任务使用索引(i,s)访问ams数据结构以获得对应的环形缓冲区的参数。然后在步骤252,软件任务通过访问tx_digest值来确定环形缓冲区中是否为其正要发送的消息留有空间。对应于相关环形缓冲区的比特的值以二进制值(是/否)的方式来表明这一点。在没有可用空间的情况下,任务等待,经由步骤254循环。当空间可用时,在步骤256,软件任务将消息存储在索引write_index处的环形缓冲区中。然后在步骤258,软件任务发出屏障指令,以确保所有进行中的写事务均已到达其目的地(参见上文—共享的相干存储器中的写入不受顺序限制)。然后在步骤260,软件任务递增其自己的写索引(在其本地ams表中),并通过将其刚刚排队的元素的编号写入ams#s的门铃寄存器来通知加速器管理器(amu)。现在由软件任务执行的步骤已完成。作为响应,加速器管理器将采取后续步骤。在步骤262,加速器管理器(amu)检测对套接字#s、接口#i的门铃寄存器的更新。请注意(如上针对读和写索引所述),可以通过各种方式(尽管有“门铃寄存器”的便利名称)来实现此检测,例如轮询门铃寄存器或将门铃寄存器配置为实际上充当门铃,该门铃触发加速器管理器的另外的动作(另请参见上面有关此主题的图2的描述)。然后在步骤264,加速器管理器通过访问会话表来确定目的地套接字(参见图1中的项目40)。在步骤266,加速器管理器确定是否可以将消息写入目的地套接字(即,rx_ams的rx_digest是否指示相关的环形缓冲区具有空间)。当没有可用空间时,加速器管理器等待,经由步骤268循环。当空间可用时,在步骤270,加速器管理器执行将消息从tx_ams环形缓冲区复制到rx_ams环形缓冲区。现在转向图9,示出了当软件任务接收到消息时采取的步骤的示例序列。首先,在步骤280,软件任务通过访问ami#i的rx_digest来确定可从ami#i的rxams#s获得消息。然后在步骤282,软件任务使用索引(i,s)访问ams数据结构,以获得相关环形缓冲区的参数。在步骤284,软件任务从索引read_index处的环形缓冲区读取一个(或多个)消息,并在步骤286,软件任务递增其自身的本地读索引,并通过将其刚刚离队的元素的编号写入到ams#的门铃寄存器中来通知加速器管理器(amu)。现在由软件任务执行的步骤已完成。在步骤290,加速器管理器检测到对ams#s、ami#i的门铃寄存器的更新,并因此已经确认了目的地软件任务已经接收到该消息。如果需要,则可以将此确认传播到消息的发送方。注意,如上关于对写索引的修改的检测所述,也可以以多种方式来实现这种对门铃寄存器的修改的检测,例如通过轮询或实际上配置门铃寄存器以充当门铃,该门铃触发加速器管理器的另外的动作(另请参见上面有关此主题的图2的描述)。最终,在步骤292,加速器管理器发起dma读事务以获取read_index的更新的值。作为简短的总体概括,提供了一种数据处理系统和数据处理的方法。该系统包括第一和第二数据处理代理,以及在两个数据处理代理之间相干共享的数据存储组件,该数据存储组件用于存储消息数据结构以在它们之间提供消息通道。两个数据处理代理均可访问另一数据存储组件,该另一数据存储组件用于存储消息通道元数据,该消息通道元数据为消息通道提供消息状态信息。消息通道元数据是为第一和第二数据处理代理之间的对应的多个消息通道类型定义的多个消息通道元数据类型之一,并且第一和第二数据处理代理中的至少一个响应于初始化触发而建立具有选定消息通道类型的消息通道。在本申请中,词语“被配置为…”用于表示装置的元件具有能够执行所定义的操作的配置。在此上下文中,“配置”指的是硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者可以被编程以执行该功能的处理器或其他处理设备。“被配置为”并不意味着需要以任何方式改变装置元件来提供所定义的操作。尽管已经参考附图在本文中详细地描述了说明性实施例,但是应理解,本发明不限于那些具体的实施例,并且本领域技术人员可以在不脱离如所附权利要求所限定的本发明的范围的情况下,实践各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可以与独立权利要求的特征进行各种组合。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1