电路和方法与流程

文档序号:32424706发布日期:2022-12-02 23:39阅读:52来源:国知局
电路和方法与流程
电路和方法


背景技术:

1.本公开涉及电路和方法。
2.数据传输协议可以例如在片上系统(soc)或片上网络(noc)系统的上下文中调节经互连电路彼此连接的设备或节点之间的数据传输的操作。此类数据传输协议的示例是所谓的amba(高级微控制器总线架构)chi(一致性集线器接口)协议。
3.在chi协议中,节点可以被分类为请求节点(rn)、主节点(hn)或从节点(sn)。节点可以是完全一致性的或输入/输出(i/o)一致性的。完全一致性的hn或rn(分别为hn-f、rn-f)可以包括一致性高速缓存存储装置,或者至少能够响应一致性协议;完全一致性的sn(sn-f)与hn-f配对。hn-f可以为存储区域管理一致性和/或序列化,并且可以被称为一致性点(poc)和/或序列化点(pos)的示例。
4.在此,术语“一致性”意味着由一个节点写入到一致性存储器系统中的存储器地址的该数据与随后由节点中的另一节点从一致性存储器系统中的该存储器地址读取的数据一致。因此,与一致性功能相关联的逻辑的作用是确保在发生数据处理事务之前,提供最新的副本。如果另一节点改变其副本,则一致性系统会使其他副本无效,然后如果需要,必须重新获得这些其他副本。类似地,如果数据处理事务涉及修改数据项,则一致性逻辑会避免与数据项的其他现有副本冲突。
5.序列化涉及对来自潜在的多个请求节点的存储器访问请求的处理进行排序以及潜在地采取要维护的不同延迟周期,使得来自这些请求的结果以正确的次序被呈现给请求节点,并且请求(例如,在到同一地址的数据写入之后的数据读取)之间的任何依赖性都被正确处理。
6.可以经由hn-f进行数据访问,该hn-f继而可以将数据接入请求提交给sn-f以进行解析。
7.本公开旨在提供与此类布置有关的潜在改进。


技术实现要素:

8.本公开提供了一种电路,该电路具有:
9.一组数据处理节点,该一组数据处理节点包括:
10.两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;
11.主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及
12.一个或多个从节点,该一个或多个从节点包括主存储器;
13.其中:
14.一组数据处理节点中的请求节点被配置为关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点,条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;以及
15.响应于条件请求,目标节点被配置为:
16.(i)当执行条件的结果为成功时,将数据项写入到目的节点并将完成成功指示标识传送到请求节点;以及
17.(ii)当执行条件的结果为失败时,将完成失败指示标识传送到请求节点。
18.本公开还提供了一种方法,该方法包括:
19.在一组数据处理节点之间传送数据,该一组数据处理节点包括:
20.两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;
21.主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及
22.一个或多个从节点,该一个或多个从节点包括主存储器;
23.一组数据处理节点中的请求节点关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点,条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;以及
24.响应于该条件请求,该目标节点:
25.(i)当执行条件的结果为成功时,将数据项写入到目的节点并将完成成功指示标识传送到请求节点;以及
26.(ii)当执行条件的结果为失败时,将完成失败指示标识传送到请求节点。
27.本技术的另外的相应方面和特征由所附权利要求限定。
附图说明
28.将参考如附图所示的本发明的实施方案,仅以举例的方式进一步描述本技术,其中:
29.图1示意性地示出了示例性电路;
30.图2示意性地示出了主节点;
31.图3示意性地示出了高速缓存存储器;
32.图4a示意性地示出了排他性序列;
33.图4b示意性地示出了排他性监测的使用;
34.图5和图6是示出相应方法的示意性流程图;
35.图7示意性地示出了数据处理节点;
36.图8至图11示意性地示出了数据通信的背景示例;
37.图12示意性地示出了涉及数据通信的示例性实施方案;
38.图13示意性地示出了有条件写入操作;
39.图14示意性地示出了有条件干净写入操作;
40.图15示意性地示出了有条件写入推送操作;
41.图16是示出了方法的示意性流程图;
42.图17示意性地示出了有条件加载链接存储加有条件操作的示例;并且
43.图18至图19是示出相应方法的示意性流程图。
具体实施方式
44.在参考附图讨论实施方案之前,提供了对实施方案的以下描述。
45.示例性实施方案提供了一种电路,该电路具有:
46.一组数据处理节点,该一组数据处理节点包括:
47.两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;
48.主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及
49.一个或多个从节点,该一个或多个从节点包括主存储器;
50.其中:
51.一组数据处理节点中的请求节点被配置为关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点,条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;以及
52.响应于条件请求,目标节点被配置为:
53.(i)当执行条件的结果为成功时,将数据项写入到目的节点并将完成成功指示标识传送到请求节点;以及
54.(ii)当执行条件的结果为失败时,将完成失败指示标识传送到请求节点。
55.示例性实施方案提供一种布置,通过该布置以在执行条件下有条件的方式实现与一致性系统中的数据项有关的总线写入或其他写入。该条件可以是例如指示请求的目标节点(或者在不同的情形下,由请求覆盖的数据项的目的节点)是否能够以所请求的方式处理数据项的条件,或者可以是在至少该请求节点的控制之外的另一条件。
56.示例性实施方案特别适合于以下情况:由请求节点针对第一地址处的数据项执行数据写入,其中最终的目的地被请求以将数据项存储在第二不同地址处。该布置可以提供潜在改进的安全性,即,在目标节点或目的节点无法满足请求的情况下,不会丢失数据项。
57.指示标识信息可以指示状态的各个方面,诸如唯一/共享、干净/脏中的一者或多者,但是在示例性实施方案中,指示标识信息被配置为至少指示相应副本在一组数据处理节点当中是否是唯一副本。因此,在一些示例中,指示标识信息被配置为指示相应副本在一组数据处理节点当中是否是唯一副本。
58.在示例性实施方案中,请求节点被配置为:当与给定数据项的副本相关联的指示标识信息指示相应副本在一组数据处理节点当中是唯一副本(uc/ud)时,关于该副本传送
条件请求。在副本已经处于唯一且干净状态的情况下,整体效果可以是相对于该副本执行零运算,在这种情况下,当与给定数据项的副本相关联的指示标识信息指示主存储器保持最新版本的给定数据项时,目标节点被配置为不控制对指示标识信息的任何改变。
59.在示例性布置中,目标节点是主节点。
60.执行条件可以表示单个条件,但是在其他示例中,执行条件可以包括多个条件与相应目标结果的逻辑比较。例如,逻辑比较可以是要求多个条件中的所有条件具有其相应目标结果的比较(诸如与运算)。
61.在示例性布置中,每个数据处理节点被配置为保持与由该数据处理节点保持的数据项的副本相关联的指示标识数据。
62.目的节点可以与目标节点相同,或在其他示例中,目的节点是主存储器。在其他示例中,目的节点是主控节点或主节点。
63.在一些示例(诸如以下在术语“有条件干净写入”下提及的那些)中,步骤(i)可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间不比由主存储器保持的数据项新(例如“干净”);并且步骤(ii)可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新(例如“脏”)。
64.在成功的有条件干净写入操作或类似操作的示例中,请求节点被配置为:响应于接收到完成成功指示标识,将与给定数据项的副本相关联的指示标识信息设置为指示主存储器保持最新版本的给定数据项。然而,在以下情况下,目标节点可以被配置为不控制对指示标识信息的任何改变:在将条件请求传送到目标节点时,与给定数据项的副本相关联的指示标识信息指示主存储器保持最新版本的给定数据项。
65.在这些示例中,执行条件可以表示目标节点当前是否能够控制数据项到目的节点的写入。
66.在示例(诸如以下称为“有条件写入推送”的那些)中,步骤(i)可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示在请求节点处的给定数据项的副本无效;并且步骤(ii)可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新。
67.在此类布置中,响应于接收到完成失败指示标识,请求节点可以被配置为:将与给定数据项的副本相关联的指示标识信息设置为指示给定数据项的副本的更新时间比由主存储器保持的数据项新。
68.执行条件可以表示目的节点当前是否能够接收数据项。
69.上面论述的技术特别适用于以下布置:一组数据处理节点中的请求节点被配置为发起要求对给定存储器地址处的数据进行排他性访问的操作序列,该操作序列包括到给定存储器地址的排他性存储操作。这种布置可以适用于(例如)所谓的有条件加载链接/存储操作。在示例中,请求节点被配置为使用条件请求来实现排他性存储操作。在各个示例中,排他性存储操作包括:将特定值设置到表示排他性监测的数据。
70.另一个示例性实施方案提供了一种方法,该方法包括:
71.在一组数据处理节点之间传送数据,该一组数据处理节点包括:
72.两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的
数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;
73.主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及
74.一个或多个从节点,该一个或多个从节点包括主存储器;
75.一组数据处理节点中的请求节点关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点,条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;以及
76.响应于该条件请求,该目标节点:
77.(i)当执行条件的结果为成功时,将数据项写入到目的节点并将完成成功指示标识传送到请求节点;以及
78.(ii)当执行条件的结果为失败时,将完成失败指示标识传送到请求节点。
79.电路概述
80.现在参考附图,图1示意性地示出了具体体现为通过互连器100互连的设备的网络的电路。装置可以被提供作为单个集成电路(诸如所谓的片上系统(soc)或片上网络(noc)),或者作为多个互连的分立设备。
81.各种所谓的节点经由互连器100连接。这些节点包括:监视网络化系统之内的数据一致性的一个或多个主节点(hn)110、一个或多个从节点(sn)(诸如较高级高速缓存存储器120(对“较高级”的引用是相对于由请求节点提供的并且如下所述的高速缓存存储器))、主存储器130和外围设备140。对图1中所示的从节点的选择是举例来说的,并且可以提供每种类型的从节点中的零个或更多个从节点。
82.在其他示例中,hn的功能可以由互连器100的hn电路112提供。为此,hn 110和hn电路112两者均以虚线示出;一般来讲,为特定存储区域提供单个hn以监视各种节点之间的一致性,但是无论是否在互连器或其他地方实现该hn功能都是设计选择问题。可以在多个hn之间划分存储器空间。
83.图1还示出了根据chi(一致性集线器接口)协议操作的多个所谓的请求节点或主控节点(rn)160、170、180,但是可以使用任何一致性协议。这些节点可以由例如处理器或处理元件实现。
84.节点可以是完全一致性的或输入/输出(i/o)一致性的。完全一致性hn或rn(分别为hn-f、rn-f)包括一致性高速缓存存储装置)。完全一致性sn(sn-f)与hn-f配对。hn-f可以为存储区域管理一致性。在本示例中,rn 160-180是完全一致性rn(rn-f),其各自具有相关联的高速缓存存储器162、172、182作为该节点处的存储电路的示例以保持数据。
85.在示例性布置中,一个或多个从节点中的每个从节点可以被配置为独立于定向到该从节点的任何其他数据传输而接受定向到该从节点的每个数据传输。
86.因此,图1的布置提供了电路的示例,其包括:一组两个或更多个数据处理节点160、170、180,这些数据处理节点各自具有保持数据的相应存储电路162、172、182;以及主节点110/112,该主节点用于对数据访问操作进行序列化并控制由一个或多个数据处理节
点保持的数据之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致。
87.可以通过所谓的事务在图1的布置之内处理数据。就任何特定事务而言,发起事务(例如通过发出请求消息)的节点被称为针对该事务的请求节点或主控节点。因此,尽管在图1中示出了多个rn,但是对于任何特定事务,这些节点中的一个节点将是与该事务有关的rn。hn从相关rn接收请求消息并处理该事务的执行,同时维持由各个节点保持的数据之间的一致性。
88.在事务的上下文中,“请求者”或“请求节点”是通过发出请求消息发起事务的部件。术语“请求者”可以用于独立地发起事务的部件,并且这种部件也被称为主控节点。术语“请求者”还可以用于互连部件,该互连部件发出下游请求消息作为系统中发生的其他事务的副作用。
89.因此,图1提供了电路的一个示例,该电路具有:一组数据处理节点(160、170、180、110、120、140、130),该一组数据处理节点包括:两个或更多个主控节点160、170、180,该两个或更多个主控节点各自具有保持来自主存储器130的数据项的副本的相应存储电路162、172、182,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;主节点110(112),该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及一个或多个从节点120、130、140,该一个或多个从节点包括主存储器。
90.主节点
91.图2示意性地示出了主节点110作为包括探听过滤器的高速缓存一致性控制器在其功能方面的操作的示例(主节点或hn另外地被称为一致性点或在以下讨论中被称为一致性网络的至少一部分)。
92.术语“探听过滤器”是一个历史过滤器,并且在此处用于指(例如)可以具有相关联的“目录”的控制设备,其中目录存储指示哪些数据存储在哪个高速缓存中的信息,并且探听过滤器本身至少有助于处理对经高速缓存的信息的数据访问以便提供高速缓存一致性功能。
93.高速缓存功能控制器包括本实施方案中的探听过滤器。探听过滤器可以提供与监视跨高速缓存一致性系统的数据访问的处理有关的一些或全部功能。
94.在图2中,具有如上所述的目录210的探听过滤器200与控制器205和事务路由器220相关联。事务路由器220与具有高速缓存存储器的一个或多个rn数据通信。每个rn可以具有负责相对于该高速缓存存储器的数据读取和写入操作的本地处理的相关联代理(图2中未示出)。hn本身可以具有在hn的监视(出于一致性目的)下的高速缓存存储器230。
95.探听过滤器200处理进程的至少一部分,在该进程下,当图1的rn中的任何rn期望访问或修改作为高速缓存行存储在任何高速缓存存储器中的数据时,该节点获得执行该动作的权限。作为该进程的一部分,探听过滤器200检查任何其他高速缓存存储器是否具有要修改的行的副本。如果在其他缓存存储器处存在任何其他副本,则需要将这些副本清除和无效化。如果这些副本本身含有对该行中的所存储数据的修改,则在至少一些情况下,控制
器205(或探听过滤器200)指示高速缓存存储器将该行写回到主存储器或至少写回到一致性点。
96.在由节点相对于存储在高速缓存存储器中的数据进行读取访问的情况下,重要的是请求读取的rn具有对最新正确版本的经高速缓存的数据的访问权限。控制器205监视该进程,使得如果另一高速缓存具有最近修改版本的所需数据,则该其他高速缓存写回修改版本和/或转发修改版本的副本以高速缓存在当前请求节点处。
97.探听操作或查询也可以由图2的电路发起。这可以涉及:向由目录指示以高速缓存正由另一高速缓存存储器访问的存储器地址的高速缓存存储器发送消息;以及从接收到消息的高速缓存存储器接收响应,该响应指示是否该高速缓存存储器实际上正高速缓存该存储器地址。以下将进一步讨论示例性探听操作。
98.在图1所示类型的数据处理系统的许多实际示例中,可能预期遗漏由探听过滤器200执行的几乎所有的检查,即,它们不会发现多个高速缓存之间的数据复制。但是,由探听过滤器200执行的检查对于维持高速缓存一致性是必不可少的。为了提高进程的效率并使探听过滤器200避免进行确定将遗漏的检查,探听过滤器200保持向探听过滤器200指示哪些数据存储在哪个高速缓存处的目录210。在一些示例中,这可以使探听过滤器200减少探听操作的数量(通过避免执行特定行未保持在任何高速缓存中或者仅保持在与当前访问该数据的节点相对应的高速缓存处的此类操作)。在示例中,其还可以允许与探听操作有关的数据通信更好地被靶向(例如,作为单播通信或多播通信)到适当的高速缓存,而非作为探听操作被广播到所有的高速缓存。
99.因此,当发起潜在的探听操作时,探听过滤器200可以查询目录210以检测所考虑的信息是否保持在高速缓存中的一个或多个高速缓存中。如果确实需要探听操作关于一个或多个高速缓存处的数据的当前状态进行查询,则探听过滤器200可以根据需要将该查询作为单播通信或多播通信(而非广播通信)执行。
100.在一些示例性实施方案中,主节点160(例如)具有指定以下的能力:数据缓冲器(其可以是高速缓存行)实际上相对于存储器系统是排他性的(即,其表示唯一的副本)并且从该缓冲器执行的存储以原子方式呈现给系统的其余部分。
101.高速缓存存储器
102.图3示意性地示出了高速缓存存储器的各方面,例如作为在hn处的本地高速缓存存储器230或在如上文所论述的rn处的高速缓存存储器中的一个高速缓存存储器。
103.控制器300(用作如上所述的代理)控制写入到存储器存储装置310、从其读取和从其剔除。与存储在存储装置310中的每个高速缓存行305相关联的是状态指示(仅出于示意性目的水平地绘制到相关高速缓存行的右侧)。控制器300可以视情况根据本地进行的操作和/或响应于从hn接收的指令而改变和/或报告高速缓存行的状态。需注意,特定的高速缓存存储器结构(例如组相联结构)与本讨论不相关。
104.示例性状态包括:无效(i);唯一且干净(uc),其指示这是当前不需要写回到主存储器的唯一保持的副本;唯一且脏(ud),其指示这是不同于保持在主存储器中的副本,并且因此将在某个时间点需要写回到主存储器的唯一保持的副本;共享且干净(sc),其指示干净的共享副本(保持在多个高速缓存存储器中);以及共享且脏(sd),其指示将在某个时间点写回到主存储器的共享副本。需注意,“脏”指示不一定指示副本不同于主存储器,而是指
示在其处保持该副本的rn有责任将该副本写回到存储器。还需注意,在共享副本的情况下,在至少一些示例性协议中,这些副本中仅一个副本曾被标记为“脏”。其他共享副本可以与sd副本共存,但处于sc状态。
105.如在“唯一”状态与“共享”状态之间,指示标识信息被配置为指示相应副本在一组数据处理节点当中是否是唯一副本。
106.在其处存储数据项的每个节点例如以指示标识数据的形式保留其自身的该数据项状态的实例。这样,在图3的示例中,每个数据处理节点被配置为保持与由该数据处理节点保持的数据项的副本相关联的指示标识数据。
107.排他性事务
108.现在将描述所谓的排他性存储器事务和排他性序列。
109.由排他性存储器事务形成的排他性序列不会阻止对所考虑的存储器地址或高速缓存行的其他访问,但会允许检测干预访问是否已经发生,在这种情况下,排他性事务中止。
110.在图4a中示意性地示出了排他性序列的概述。针对arm64位架构,该进程例如以排他性加载(有时缩写为ldrex)405开始。
111.然后,一些处理415相对于相关行发生。这种处理所花费的时间量未定义并且可以是可变的。换句话讲,排他性加载405与后续排他性存储425之间没有预定义间隔。
112.如果在步骤405与步骤425之间的rn处行被无效化,则序列会失败,并且将需要由程序获取校正动作,例如以重试排他性加载和存储的形式。
113.如图4b中示意性地示出的,排他性存储器访问可以由所谓的排他性监测控制。排他性监测可以被认为是仅具有以下两种可能状态的简单状态机:“开放性的”和“排他性的”。
114.通过设定排他性监测并随后检查其状态,存储器事务能够检测任何其他干预动作是否具有对存储器地址或由排他性监测覆盖的地址的访问权限。在诸如图1所示的分布式系统中,每个rn 400可以具有与相应rn相关联的(或者实际上与rn内的处理核心相关联的)相应“本地排他性监测”(lem)410。在一些示例性布置中,lem可以与相关核心的加载存储单元集成。在一些示例中,lem可以提供允许监测一组一个以上的加载和存储的向量。
115.全局排他性监测或gem 420可以与多个节点相关联,并且可以例如在主节点430处提供,以便针对来自多个潜在处理元件跟踪的多个潜在地址跟踪排他性。在其他示例中,可能不使用gem,而是可以由探听过滤器和/或目录提供该功能。
116.一些示例性布置采用本地排他性监测和全局排他性监测。
117.在操作中,如上文所提及,排他性监测可以充当两态状态机,其能够在上述一对状态之间移动。
118.另一另选具体实施可以避免对排他性监测检查的需要,并且仅使数据分组在其中被构建的行有效地非一致性。
119.图5和图6提供了示出可以使用排他性监视(采用排他性监测)的示例性方式的示意性流程图。如所讨论,这只是一个示例,并且可以替代地采用用于获得排他性的其他机制。
120.参考图5,为了发起所谓的排他性加载操作,在步骤500设定与加载操作相关的一
个或多个排他性监测(无论是lem还是gem或是两者),即它们的状态被移动到或保留在“排他性”状态。然后,在步骤510,执行排他性加载。
121.参考图6,为了执行对应的排他性存储操作,在步骤600检查与该排他性存储相关的一个或多个排他性监测。如果它们仍在“排他性”状态中(如在步骤610检测到的),则控制转到执行存储的步骤620,并且在步骤630,该进程成功结束。
122.如果在步骤610答案为否,则在步骤640进程中止。
123.因此,使用排他性监测允许进行关于是否已经将干预进程写回到一个或多个相关地址的检测,在这种情况下,排他性存储本身被中止。
124.这种类型的排他性访问的基本操作原理是:当多个代理竞争排他性访问时,“先存储”成功。该特征来源于以下观察:排他性存储之前的排他性加载不一定是原子级操作,并且实际上被允许在加载部分与存储部分之间具有任何数量的指令。
125.如果多个代理要以交错方式启动排他性序列,则可能发生潜在问题,并且每次启动一个序列时,其阻止完成另一个排他性序列。在此类情况下,可能发生所谓的“活锁”,使得没有序列曾达到完成,并且所有的代理都以必须重复其相应序列结束。在一些示例中,排他性代理可以经由“信用”对这种情况进行仲裁,使得可以给予多个代理执行到终点或目的地的排他性原子级写入的令牌。
126.因此,概括地说,排他性监测可以被认为是简单的状态机,其具有可能的状态:开放性的和排他性的。为了支持处理器之间的同步,系统将实现两组监测:本地的和全局的。排他性加载操作将监测更新到排他性状态。排他性存储操作访问监测,以确定其是否可以成功完成。只有当所有访问的排他性监测处于排他性状态时,排他性存储才可以成功。本地排他性监测可以被认为是与单个专用核心相关联的监测。
127.在此类布置中,例如在多处理元件系统中,由多个处理元件访问的存储器被认为是共享的。本地排他性监测不足以为可以在本地处理器元件外部使用的存储器提供排他性保证。因此,大多数架构实现了全局排他性监测或提供类似的总体功能的其他布置,在排他性存储被认为已经成功之前,除了本地监测之外还必需咨询该总体功能。一般来讲,在咨询本地监测和全局监测(在使用的情况下)之前,存储不会从核心停用。
128.有条件操作
129.图7示意性地示出了具有事务处理电路710、控制电路720和条件执行电路730的数据处理节点700。
130.图7的电路背后的基本原理是:事务处理电路710能够以与先前提议的事务处理操作兼容的方式处理一致性系统之内的事务,不同的是事务的执行和结果取决于与节点700接收的请求相关联地或实际上作为该请求的一部分传送到节点700的执行条件的结果。
131.当执行条件的结果(如由条件执行电路730所执行或测试)为成功时,控制电路700控制事务处理电路710以执行所请求的事务并且将完成成功指示标识传送到请求节点。当执行条件的结果为失败时,控制电路720控制事务处理电路710将完成失败指示标识传送到请求节点。
132.以下将论述与本实施方案相关的不同类型的有条件操作的各种示例。
133.执行条件的示例
134.执行条件可以例如由请求节点所做出的请求的指令格式内的保留位指定。
135.在一些示例中,如由条件执行电路730执行或测试的执行条件可以包括指示以下的条件:目标节点和/或目的节点当前是否能够执行由请求节点做出的请求。
136.在其他示例中,执行条件可以是与条件寄存器(包括例如与继续操作的算术结果有关的条件寄存器)的主导状态有关的任何条件。
137.不需要指定单个条件。实际上,在一些示例中,在电路730的控制下,执行条件可以包括多个条件与相应目标结果的逻辑比较。在一些示例中,逻辑比较是要求多个条件中的所有条件具有其相应的目标结果的比较(例如由电路730实现的多个条件结果的逻辑与组合)。
138.实施方案的进一步背景
139.在计算机系统中,一个或多个处理元件(诸如以下结合图8讨论的那些)通过数据传输协议通信,该数据传输协议被称为通信、同步以及笼统的数据传输。这些数据传输协议从软件机制到硬件机制各不相同,如以下示例中所描述。
140.背景示例1

环形缓冲器
141.作为第一示例,在通用处理核心(pe1)与加速器(pe2)之间,先前所提议的布置是使用软件环形缓冲器队列(rbq)作为工作队列,其中pe1将工作项插入到rbq中,然后致动存储器映射寄存器(mmr)以发信号通知工作项可拾取。类似地,在完成后,使用另一rbq来存储完成信息(例如,其中受操作的数据被存储),之后从pe2到pe1对信号完成进行中断,并且数据可以在完成rbq中拾取。
142.处理元件可以是如上所述的rn。
143.信用或令牌是用于描述在队列之内预分配条目的实践的术语。在先前所提议的具体实施中,pe1实际上会接收多个信用以减少到mmr的整体写入的数量,从而提高效率。在一些示例中,具体实施可以是:请求节点高速缓存启用其的多个此类令牌,以确保对应数量的操作可能成功。这是从网络应用程序(包括片上互连器)中已知的,其中发送器保持对可用写入令牌的计数器。在该上下文中,具体实施可以相同操作以使发送器能够发送多个快速文件存储。
144.请求节点诸如pe1(写入到pe3)会首先询问其可以写入多少数据项(诸如高速缓存行)并且知悉写入将成功。接收节点pe3然后发出信用。pe1检索信用并生成写入。然后,保持信用等效于知悉接受节点处的条件会成功。换句话将,这允许接收节点处的条件方面被导出(在逐信用的基础上)到发送节点或高速缓存在系统中的其他地方。
145.需要说明的是,rbq通常位于主存储器(通常是一些形式的动态随机存取存储器(dram))内。
146.图8中示出了这种类型的布置的示意性示例,涉及连续步骤1到8的表示。pe1将“要传输的数据”写入到间接缓冲器805中,并且(在步骤1)将至少包括数据的指针的描述符写入到rbq 810中。这表示将由pe1进行以由pe2(设备800)执行的工作项入队到rbq 810中。pe2经由存储器映射寄存器(步骤2)指示工作项在队列中。pe2在步骤3获取工作项,并且在步骤4进行所要求的工作。在步骤5,pe2将结果入队到另一rbq 820中,并且还(在步骤6)生成中断以向pe1指示结果准备就绪。pe2在步骤7检索结果,并在步骤8经由到存储器映射寄存器的另一写入来指示完成。
147.背景示例2
148.作为第二示例,在通用处理核心(pe1)和第二通用处理核心(pe2)之间,根据期望的编程模态是共享队列(在多个生产者和/或多个消费者之间)还是在单个生产者(pe1)与单个消费者(pe2)之间,情况有所不同。该实例覆盖后者而非前者。以下示例3更具一般性,即,示例3可以覆盖单个生产者/单个消费者情况,其中可能具有比示例2更低的效率,但具有更大的灵活性。
149.在pe1和pe2之间,用户可以实施简单的环形缓冲器,其可实现pe1与pe2之间的同步数据传输(通信)。在这种场景中,具有头部/尾部指针的控制区域被实现为带有用作缓冲器的存储区域的存储器中结构。被分配为缓冲器的存储区域被划分为数字索引的分箱,例如,大小为16字节的阵列可以被分配为四个4字节区域并且被编入索引零至三。头部指针和尾部指针将条目索引到缓冲器存储区域中。当指向末端时,通常,环形缓冲器指针索引可将取模运算符应用到指针,从而一旦该索引分别可用于读取或写入,就有效地使该指针“绕”回到初始索引零。整个rbq位于主存储器(通常是dram)中。当促进双向通信(在pe1与pe2之间)时,两个这样的rbq可以组合以使双向通信成为可能。在这种场景中,机制在概念上与示例1基本相同。这里也可以使用如示例1中所提及的信用。
150.背景示例3
151.在第三示例中,p个处理元件充当生产者(pe-p),并且n个处理元件充当消费者(pe-n)。这与示例2的不同之处在于:其通常被实现为现有技术具体实施中的双链接表(dll)。虽然在被供应同步锁的情况下,示例2中所述的机制可以用作p:n队列,但是典型的dll队列机制不需要锁。
152.先前所提议的布置由所谓的ladam-mozes和shavit队列的变体限定,该队列报道于(“an optimistic approach to lock-free fifo queues”,ladam-mozes等人,guerraoui r.(eds)distributed computing,disc 2004,lecture notes in computer science,第3274卷,springer,柏林,海德堡),其继而建立在所谓的michael-scott队列(“simple,fast,and practical non-blocking and blocking concurrent queue algorithms”,michael等人,podc'96:proceedings of the fifteenth annual acm symposium on principles of distributed computing,1996年五月,第267至275页)之上,该队列添加反向链以形成双链接表。简而言之,该队列允许使用单个cas(比较和切换)操作以及一个顺序一致性存储操作。
153.这些引用各自以引用的方式并入本说明书中。
154.例如,现有链接表配置可以与“下一”(连接表中的下一项)和“前一”(链接表中的前一项)指针一起使用,该指针诸如在本实例中的:
[0155][0156]
node*tail_ptr;//initialized to the tail
[0157]
然后,为了在当前指向节点b的尾部指针处添加新元素:
[0158]
·
构建新节点(出于本说明书的目的,其被称为a);
[0159]
·
将a之上的前一指针设定到当前尾部节点;
[0160]
·
cas将尾部指针(tail_ptr)切换到新构建的节点a;
[0161]
·
存储尾部节点b下一指针,例如以释放一致性(指示基于同步的一致性模型的术语),并且将其设定到新构建的节点a,其完成入队操作。
[0162]
该机制不需要锁;然而,其确实需要至少一个顺序一致性存储以及比较和切换。除了这些之外,与其他机制类似,数据结构完全位于主存储器(通常为dram)中。比较和切换以及存储操作要求进行多个存储器访问。
[0163]
背景示例的比较
[0164][0165][0166]
所有以上先前所提议的机制在脱离机制的详细信息(其在以下讨论中将被称为列表1)时尝试进行几种非常常见但非常特定的事情:
[0167][0168]
提供以上列表1中的1至3的先前所提议的机制很大程度上是特别的,即,它们是设
备和系统特定的,针对要添加的每个新pe或功能需要新软件和硬件。尽管存在若干通信标准(诸如标准化一些低级数据传输协议的pcie)以及其他标准(诸如axi、cxl、ccix,其提供针对如上所述的数据一致性的标准),但是仍然需要来自程序员和硬件设计师两者的很多标准。考虑到这一点,本公开的实施方案可以提供技术,以编写和实现一种实现列表1中的项一到项三的机制。即,一种防止较新的消息覆盖较旧的消息的机制。根据方向性和存储器类型,提议了多个一致性命令及一些变型形式,在接下来的几个段落中对其进行详细说明。
[0169]
与列表1有关的例示性示例
[0170]
图9至图11示意性地示出了列表1中的项1至项3中提及的问题中的至少一些问题。
[0171]
图9示意性地示出了构建消息920或数据传输的多个写入器(另外称为主控节点、请求节点)(在该示例中为pe1、900和pe2、910)。当由多个写入器中的给定一个写入器构建消息或数据传输时,有益的是防止多个写入器中的任何其它写入器在将消息或数据传输释放到相关消费者或从节点930(在该示例中为pe3)之前覆盖和/或以其他方式损坏该消息或数据传输。需注意,取决于事务的性质和初始化,pe可以充当主控节点或从节点用于不同事务。
[0172]
在图10中,确保仅一个pe(在该示例中绘制为pe1、1000)被启用以对写入下令。这是一种排他性属性,其确保完整和最新的消息或数据传输1010被发送到端点或消费者(在这种情况下其为pe3、1020)。换句话讲,消息1010对写入器具有排他性,以便确保最新的完整消息分组对写入器可用。在该示例中,仅pe1和pe2中的一者可以负责将实际数据传输发送到pe3。
[0173]
图11是指相对于消费者pe3 1100的写入的原子性。在该示例中,pe1、1110具有相关联的高速缓存存储器1115,并且pe2、1120具有相关联的高速缓存存储器1125。通过一致性网络1130来管理一致性。
[0174]
pe1将消息1140发送到pe3。pe3需要拒绝其他写入器同时写入到pe3,以便多个消息不会彼此覆盖。因此,如果pe2 1120写入消息1150,则其要么将返回确认失败,要么在已经由pe3进行的消息1140之后进行序列化。因此,端点pe3提供对到pe3的写入的原子性的保证,或者换句话将,保证如果从(例如)pe1接收到消息,则其由pe3同时接收和观察。
[0175]
示例性实施方案
[0176]
现在参考图12,其解决上述列表1的流控制问题。在此,pe1、1200(具有高速缓存存储器1205并且与一致性网络1210相关联)将消息1220发送到端点pe3、1230。
[0177]
在该示例中,pe3能够拒绝其他写入器同时写入到pe3,使得多个消息不会彼此覆盖。pe3还提供对到pe3的写入的原子性的保证,使得由pe3接收的消息作为整体接收。
[0178]
在接收到存储(操作1240)时,pe3传送以下确认1250:(a)其已经能够接收和处理消息;或者(b)pe3处存在错误诸如缺乏存储装置,使得pe3无法接受消息并且必须进行重试。
[0179]
以下要讨论的布置和操作能够实现这些特征。
[0180]
相对于pe3,可以将数据从一个地址空间注入到另一个地址空间,该操作通常被称为推送或注入(或在一些示例中称为写入推送),其中数据从地址a写入到地址b。
[0181]
一般来讲,重要的问题是pe3能够接受和(在至少一些示例中)作用于从请求者或发送者以原子方式接收的数据。如果其可以这样做,则进行传输,并且如果否,则传输失败。
与这种条件有关的测试可以是在pe3处和/或由其执行的测试。
[0182]
以下将描述促进这种操作的一些示例。其他示例包括准备就绪布置,由此pe3允许写入存储器地址或高速缓存行。
[0183]
排他性
[0184]
假设两个示例性传送代理pe1和pe3,提供排他性的机制可能因目标目的pe3的地址映射而不同(假设pe1在本示例中为生产者)。经可高速缓存的存储器将消息从pe1发送到pe3要求在将消息发送到pe3之前将消息组装并使其对pe1具有排他性。
[0185]
在一个提议的机制中,pe1可以发起排他性加载以获取要发送(例如,高速缓存行)到pe1的专用高速缓存中的消息。该排他性加载操作还将设定监测,其将确保pe1会知悉任何其他核心是否尝试访问消息。然后可以将排他性存储用于存储到设备,检查排他性监测以确保在发出存储之前维持了排他性。在本具体实施中,还增强了标准排他性以使设备、pe3能够在实际上写入将不成功的情况下去激活排他性监测。先前已经提及“信用”是使较少总线事务被完成的一种机制。在本具体实施中,排他性加载操作本身充当信用。如果另一核心、pex尝试写入到pe3的存储器地址(mmr的形式),排他性监测是未设定的,并且排他性存储失败。可以增强排他性监测以维持多个信用,表示排他性的预先高速缓存以及到同一地址的多个后续存储的成功。该机制适用于可高速缓存的存储器。
[0186]
该机制可以使用例如在以下段落中描述的“有条件写入”和“有条件干净写入”操作变体。在此,条件可以与排他性监测的主导状态有关。
[0187]
在另一个提议的机制中,如果设备mmr被映射到被称为“设备”的存储器,则传统上该地址不可高速缓存。在这种情况下,可以在可高速缓存存储器地址上使用所谓的准备就绪命令(其是待发送的消息),该命令将该要存储到的可高速缓存存储器地址靶向到另一设备存储器地址。在这种情况下,准备就绪等同于确保pe1(准备就绪命令的发起者)具有对目标高速缓存行的排他性访问权限。在示例性具体实施中,因为该行实际上是设备存储器地址并且可以占用与原始区域分离的数据缓冲器区域,因此其是非一致性的(即,其不是可探听的)。上下文切换将使该高速缓存行无效。随后的存储操作(等同于有条件存储操作,尽管对于存储到设备存储器的这种特定情况)将该行存储到目标mmr或地址。
[0188]
该机制也可以用于可高速缓存的存储器。这种情况下的存储可以利用信用监测或排他性监测来在本地校验在请求退出核心之前存储是否会成功,其也可以在条件确认返回到pe1之前一致地存储到端点(pe3)。在有条件原子存储(其启动有条件写入操作变体)时,通过准备就绪设定的队列缓冲器存储器被释放,以执行对后续准备就绪调用的重试。
[0189]
因此,该机制使用有条件写入推送机制(到可高速缓存存储器)或到设备存储器的有条件写入变体中的任一者。再次,条件可以例如与排他性监测的主导状态和/或信用有关。因此,该具体实施可以针对可高速缓存存储器和不可高速缓存存储器。
[0190]
在以下论述的示例中,通信事务的目标可以是另一pe(例如充当主控节点或从节点),或者可以是主存储器,或者可以是主节点。目的地可以是主控节点或主节点。
[0191]
有条件写入
[0192]
现在将参考图13描述被称为有条件写入操作的示例性机制。该操作允许“条件下发送”操作通过向目标节点提供事务请求来将高速缓存行或一致性单元从一个rn(称为“请求节点”)转移到目的节点。此处的条件可以是目标节点能够控制数据项向目的节点的写
入。
[0193]
参考图13(其中时间同样向下沿该图运行),请求节点1300向目标节点1320发出有条件写入请求1310。在条件成功1325的情况下,目标节点将条件成功指示标识1330传送回请求节点。目标节点还发起写入操作1340诸如所谓的写入非探听操作,以便将该行写入到目的节点1350。完成1355消息和确认1360消息在目标节点与目的节点之间正常传递。
[0194]
另一方面,如果条件结果为失败1370,则目标节点1320向请求节点发出失败指示标识1375。
[0195]
因此,根据一些条件代码的结果,有条件地执行总线事务或写入操作。
[0196]
此处的概念是没有以下描述的有条件干净写入操作中的“干净”操作的有条件写入的概念。该有条件写入相对于观察者是原子级的,并且可以到可高速缓存存储器或可高速缓存存储器。可以通过“排他性”监测或通过如上所述的其他机制来促进这种写入。高速缓存中作为源操作数的数据可以是一致性可高速缓存存储器,可以通过使用暂时锁定行的所谓的“进行缓冲”命令或者通过使用排他性监测来维持排他性。在任一情况下,这是两部分操作,进行缓冲将是一个操作,然后存储区必须是另一个操作(现在其是排他性存储还是设备存储器存储取决于实施者)。例如,目的可以是利用有条件存储来存储(到可高速缓存地址a)工作队列。该地址a可以是进行缓冲命令的目标,该进行缓冲命令使a非一致性并锁定,直到发生存储或者发生上下文切换。一旦a发生这种情况,然后就可以将a存储到单独的地址b。地址b可以是可高速缓存存储器或不可高速缓存设备存储器。
[0197]
有条件干净写入
[0198]
现在将参考图14描述被称为有条件干净写入操作的另外的示例性机制。该操作允许“条件下发送”操作通过向目标节点提供事务请求来将高速缓存行从一个rn(称为“请求节点”)转移到目的节点。此处的条件可以是目标节点能够控制数据项向目的节点的写入。
[0199]
参考图14(其中时间同样向下沿该图运行),请求节点1400从唯一且脏(ud)状态下的高速缓存行1405开始,并且向目标节点1420发出有条件干净写入请求1410。在条件成功1425的情况下,目标节点将条件成功指示标识1430传送回请求节点,该请求节点通过将该行设定为唯一且干净(uc)状态1435来进行响应。目标节点还发起写入操作1440诸如所谓的写入非探听操作,以便将该行写入到目的节点1450。完成1455消息和确认1460消息在目标节点与目的节点之间正常传递。
[0200]
在此,执行条件可以表示目标节点当前是否能够控制数据项到目的节点的写入。
[0201]
另一方面,如果条件结果为失败1470,则目标节点1420向请求节点发出失败指示标识1475,该请求节点将相关行保持在ud状态1480下。
[0202]
因此,在成功时,该进程包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间不比由主存储器保持的数据项新;以及在失败时,该进程包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新。
[0203]
在成功完成时,请求节点被配置为:响应于接收到完成成功指示标识,将与给定数据项的副本相关联的指示标识信息设定为指示主存储器保持最新版本的给定数据项。
[0204]
同样,根据一些条件代码的结果,有条件地执行总线事务或写入操作。当条件执行结果为成功时,请求节点处的行从ud移到uc中,或者在失败时,将其置于ud中。
[0205]
需注意,该操作序列要求其所引用的高速缓存行必须处于唯一状态(uc或ud),使得其是一致性网络中唯一的副本。还需注意,最初处于uc状态的行将保持在uc状态,从而有效地产生非操作(nop),在这种情况下,当与给定数据项的副本相关联的指示标识信息指示主存储器保持最新版本的给定数据项时,目标节点被配置成不控制对指示标识信息的任何改变。换句话讲,在以下情况下,目标节点被配置为不控制对指示标识信息的任何改变:在将条件请求传送到目标节点时,与给定数据项的副本相关联的指示标识信息指示主存储器保持最新版本的给定数据项(935)。类似地,请求节点被配置为:当与给定数据项的副本相关联的指示标识信息指示相应副本在一组数据处理节点当中是唯一副本时,关于该副本传送条件请求。
[0206]
有条件写入推送
[0207]
图15是示出如在完全一致性请求节点1500与可以是主节点或另一rn的另一节点1510之间的操作的示意性时序图。在本说明书的上下文中,节点1500将被称为“请求节点”,并且节点1510将被称为“目标节点”,其为条件请求的接收者或目标。执行条件可以表示目的节点当前是否能够接收数据项。
[0208]
在图15中,时间大体上向下沿图运行。
[0209]
图15中所示的进程的总体目的为:一致性系统中的一个节点或“行动者”将由存储器地址指定的数据范围(例如,高速缓存行或64个字节)发送到另一节点(可能处于与其原始地址不同的地址),从而将行从一个物理地址推送到另一个物理地址以便传输数据。该事务可以在有条件基础上进行,使得如果条件失败,则推送高速缓存行的节点可以将其保持在脏状态下,而不会如先前所提议的高速缓存将其丢弃。
[0210]
在先前提议的布置中,如果请求节点1500要将高速缓存行发送到目标节点1510,并且该行在其新物理地址处被目标节点拒绝,则数据将被丢失或写回到主存储器,而没有对发送者(例如节点1510处的请求的发起者)通知是这种情况。相反,通过允许实现条件执行,如果条件失败(例如,如果目标节点不能处理在其新地址处的数据范围,例如高速缓存行),则向请求节点1510通知失败,并且可以采取适当的动作。适当动作的示例包括高速缓存行被保持在处于脏状态的请求节点处以在未来时间被重试,或者另一动作可以是数据范围(例如,高速缓存行)被写回到存储器(如在标准情况下),然而,向请求者(例如,节点1510)通知失败,使得其可以适当地限制未来的有条件推送请求。
[0211]
在图15中,从在唯一且脏(ud)状态下的请求节点1500处的高速缓存行1520开始,发起有条件写入推送操作1530,其中条件是目标节点1510能够接收和处理高速缓存行(可能在新物理地址处)。条件由目标节点1510处的条件执行电路730执行。如果条件执行的结果为成功1540,则高速缓存行被转移到目标节点1510(在这种情况下其也是针对事务的目的节点),并且成功指示标识1550被传送回请求节点,该请求节点作为响应使其该高速缓存行的副本无效1560。另一方面,如果条件执行结果为失败1570,则目标节点将失败指示标识1580传送到请求节点,该请求节点作为响应将相关高速缓存行保持在ud状态1590下。
[0212]
在这种布置中,在成功时,该进程可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示在请求节点处的给定数据项的副本无效;以及在失败时,该进程可以包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新。
[0213]
有条件写入推送操作可以与所谓的高速缓存储藏结合使用,其中高速缓存行从一个节点传送到另一节点,在指定或不指定其中应该以所谓的储藏提示的形式分配数据的高速缓存的情况下。先前提议的储藏机制允许储藏者通过节点标识或目标高速缓存来指定目的地。储藏物(接收储藏的节点)可以选择接纳数据或将其丢弃。在先前提议的机制中,储藏物被允许接收空白事务,使得储藏物然后根据在储藏时指示的一致性条件,使用标准的read_unique或read_shared操作来从存储器请求相关字段。
[0214]
有条件写入推送操作不会改变这种行为,但只在现有行为的顶部添加新行为。只要对应的条件代码返回到储藏者,储藏物即可被允许忽略储藏。如在当前具体实施中,储藏者可以使数据字段空白,该数据字段将要求储藏物在成功时发出read_unique或read_shared,然而,数据字段可以与目标地址一起包含在内,在这种情况下,对储藏者的唯一响应将是成功或失败确认。有条件写入推送仍然允许使数据字段空白的可能性,使得储藏物能够拉入优选位置处的地址,而不是被靶向到特定高速缓存。有条件写入推送可以使用直接模式(其指示确切的节点或目标高速缓存)或者依赖于目标的物理地址来指示放置的寻址模式中的任一者。如果目标地址不处于一致性网络中,即不在高速缓存中,则在寻址模式是物理地址与节点或目标缓存标识的情况下,对有条件写入推送的响应是失败代码。应当注意,使用节点或目标高速缓存标识执行行分配,使得行通常是始终安装的,而不管对应的高速缓存行先前是否位于一致性网络中。使用物理寻址模式要求高速缓存行已经存在,例如从对靶向该高速缓存行的数据地址的先前加载或尝试使用。
[0215]
上述有条件写入推送布置还可以用于促进所谓的懒上下文切换或迁移的操作,诸如由dunham等人描述的美国专利申请15/361,819(us2018/0150321a1)中描述的布置,该专利申请的内容以引用的方式并入本说明书。该机制可以允许在降低了丢失数据的风险的情况下进行上下文数据(例如,可能影响当前在系统上运行的进程和线程的系统寄存器状态数据)的懒传输。
[0216]
图14和图15均提供了其中一组数据处理节点中的请求节点1500、1400被配置为关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点1510、1420的示例,该条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点1510、1450的请求;以及
[0217]
目标节点1510、1420被配置为:响应于条件请求,
[0218]
(i)当执行条件的结果为成功时,将数据项写入到目的节点并将完成成功指示标识1550、1430传送到请求节点;以及
[0219]
(ii)当执行条件的结果为失败时,将完成失败指示标识1580、1475传送到请求节点。
[0220]
目标节点1510、1420可以是主节点。在图15中,目标节点可以与目的节点相同,该目的节点可以是主节点或主控节点。在图14中,目的节点可以是从节点,例如主存储器。
[0221]
在图15中,步骤(i)包括:控制与给定数据项的副本相关联的指示标识信息,以指示在请求节点处的给定数据项的副本无效(i、1560);并且步骤(ii)包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新(ud、1590)。特别地,请求节点被配置为:响应于接收到完成失败指示标识1580,将与给定数据项的副本相关联的指示标识信息设定为指示给定数据项的副本的更新时间
比由主存储器保持的数据项新。
[0222]
在图14中,步骤(i)包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间不比由主存储器保持的所述数据项新(uc、1435);并且步骤(ii)包括:控制与给定数据项的副本相关联的指示标识信息,以指示给定数据项的副本的更新时间比由主存储器保持的数据项新(ud、1480)。特别地,请求节点被配置为:响应于接收到完成成功指示标识1430,将与给定数据项的副本相关联的指示标识信息设定为指示主存储器保持最新版本的给定数据项。
[0223]
在图14和图15中,请求节点被配置为:响应于接收到完成失败指示标识,将与给定数据项的副本相关联的指示标识信息设定为指示给定数据项的副本的更新时间比由主存储器保持的数据项新。
[0224]
有条件加载链接/存储
[0225]
一些架构示例(诸如与由arm ltd开发的处理系统有关的一些架构)利用所谓的有条件加载链接/存储(ll-sc)布置,其被称为被指定为成对利用的排他性加载加排他性存储。
[0226]
许多现有架构和学术作品示例指定有条件加载链接和存储,使得排他性为调节;该假设至少接近无所不在。本公开开发并允许对该假设的概括。
[0227]
加载链接操作提供存储器位置的当前值。仅当在执行加载链接以来没有更新应用于相同存储器位置时,结合该存储器位置的后续有条件存储操作才将新值存储到该存储器位置。这些操作可以共同提供原子级读取修改写入操作。
[0228]
先前提议的ll-sc机制可以相对于排他性为单个存储器位置(高速缓存颗粒)提供原子性。一致性机制的趋势是经开放性框架诸如ccix(上文所述)延伸该机制。协议诸如ccix指定了在系统内发现和枚举加速器的技术。然而,实际上将某物发送到加速器设备可能需要比当前提供的更多的协调。
[0229]
当写入到加速器的工作队列中时,预期写入器具有将数据写入到特定地址的排他性(即,多个线程不尝试写入到同一加速器队列条目)。
[0230]
为了提供排他性,存在多种软件技术。然而,至少与以下要论述的示例性实施方案相比,这些技术可能相对较慢。需注意,速度至关重要或至少是显著的,以便增加可用并行性的量,同时减少解析的时间)。
[0231]
先前提议的ll-sc指令
[0232]
实现ll-sc功能的先前提议的指令集的示例如下所示:
[0233]
·
ldrex r1,[r0]:采取存储在r0中存储器地址的值,并将其存储在寄存器r1中。
[0234]
·
strex r2,r1,[r0]:采取存储在寄存器r1中的值,将其有条件地放置在存储在r0处的存储器地址中,并且设置r2以指示有条件的成功或失败。
[0235]
需注意,这些指令是处理器指令。这些指令继而可以至少部分地由发出事务请求的各种节点实现,该事务请求可以包括例如有条件干净写入请求。
[0236]
ll-sc的开发
[0237]
示例性实施方案涉及增强上述ll-sc布置。
[0238]
在一些示例性情况下,可能需要或至少期望一种布置,该布置提供“增强排他性”,以便使得此类请求的接收者(即,在这些示例中,ll-sc的发出者的目标)基于由有条件存储
指令指定的条件来拒绝请求,其中该拒绝在存在到请求者的确认的情况下呈原子级。
[0239]
先前提议的ll-sc通常被设计为与单个存储器位置排他性一起使用。举例来说,图16示意性地示出了使用先前提议的机制来尝试将条件执行应用到排他性访问。
[0240]
从步骤1600开始,在步骤1610执行排他性加载操作,并且在步骤1620设定监测(如上所述)。
[0241]
步骤1630涉及检查监测。如果在步骤1640,监测未通过检查,则执行排他性操作并且控制返回到步骤1610。另一方面,如果监测仍旧被正确设定,则控制转到步骤1650并且在所发出的每个指令之后,检查附加条件。如果在步骤1660,附加条件为成功,则控制转到发起排他性存储操作的步骤1670。这涉及在步骤1680重新检查监测。在该阶段的失败会中止进程并且控制返回到步骤1610,而成功允许完成排他性存储进程。
[0242]
返回到步骤1660,在失败的情况下,控制返回到步骤1610。
[0243]
如图16中示意性地示出的,在先前提议的架构机制的情况下,必须独立于第一排他性地址加载和检查附加条件,实质上尝试执行依赖于第一排他性访问的第二排他性访问。监测的失败可能导致所执行的指令数量的显著增加和一致性事务的数量的所得增加。使用先前提议的布置,可能无法在冒着所谓的活锁风险的情况(类似于死锁的情况,但其中涉及的进程的状态可以相对于彼此持续改变)下保证这种操作的成功。
[0244]
以下要讨论的示例性实施方案可以提供执行具有条件执行的ll-sc(称为“ll-sc-c”)的机制,该述机制是原子级的并且可以对广泛范围的应用用途情况有效:使加速器、智能nic(网络接口控制器)、使用ccix构建的富加速器系统排队。利用ll-sc-c实现工作队列可以使管理程序(主管代理)能够每地址空间发出工作队列,然后允许多个线程写入到该工作队列中。
[0245]
本示例与先前提议的布置之间的显著差异在于:接收者本身可能具有排他性(和值)之外的其他条件,这些条件使需要失败的排他性条件降级。当前,排他性条件的失败仅假设由一些其他行动者(诸如rn-f)经由一致性总线进行的值(状态)修改。然而,在示例性实施方案中,条件的失败可能在被访问的值之外。条件的失败可以在调用节点(或任何其他rn-f)的控制之外,并基于来自接收器本身(hn-f或rn-f中的任一者)的一致性结构中的中间节点的动态响应来进行判断。本公开的实施方案可以提供条件寄存器(监测),如果先验条件被满足(在指令/一致性操作问题处被指定),则该条件寄存器表示例如布尔(真/假)结果。
[0246]
若要实现ll-sc-c,可以将条件代码作为存储事务的一部分传递到一致性总线,例如通过使用指令格式的保留位。该条件代码将经由总线命令(诸如上面详细讨论的有条件干净写入操作)执行。在发出有条件干净写入之前,假设核心已发出排他性加载操作并且设定本地监测和全局监测两者。
[0247]
在一些示例中,ll-sc可以如下实现:
[0248]
make_q_buff r2[r1]
[0249]
str_q_buff[r3]r2
[0250]
在此,在第一操作中,r2指示失败(以有效的0x00),或者其中返回的值不为0x00,时隙标识示出哪个缓冲器由指令分配以及被间接分配(不是失败指示也指示成功)。r1表示可高速缓存存储器中的物理地址。在第二操作中,其将队列缓冲器存储在由r3表示的目的
设备或可高速缓存存储器地址以及由r2标识的时隙。
[0251]
在条件变体ll-sc-c中,提供以下:
[0252]
str_q_cond r4[r3]r2
[0253]
在此,在r4中返回失败;r3保持存储器地址;r2保持时隙标识;r4返回值值零(以指示失败)或大于0以指示时隙偏移的值。
[0254]
需注意,make_q_buff将目标高速缓存行设定为非一致性或排他性中的任一者,这取决于具体实施。
[0255]
关于非条件版本,忽略条件/排他性,并且不对其进行检查。
[0256]
但是关于条件版本,检查监测或将该行设定为非一致性的,因此确保了排他性。在写入之前,有条件写入用于写入到该端点。
[0257]
存在第三变体,该第三变体使用有条件干净写入来在写入之前清除数据缓冲器地址,这具有将在[va]处的给定时隙处的缓冲器归零的效果。例如:
[0258]
make_q_buff r2[r1]
[0259]
str_q_buff_cond_clean r4[r3]r2
[0260]
在执行成功之后,然后不接触地址[r1]处的数据,然而在时隙r2处的q缓冲器内容被归零。
[0261]
在这些示例中,请求节点可以被配置为发起要求对给定存储器地址处的数据进行排他性访问的操作序列,该操作序列包括到给定存储器地址的排他性存储操作。请求节点可以被配置为使用条件请求来实现排他性存储操作。排他性存储操作可以包括:将特定值设定到表示排他性监测的数据。
[0262]
示例

图17和图18
[0263]
图17示意性地示出了可以应用于本示例的图14的有条件干净写入操作的变体。需注意,图14的布置也应用于本示例。
[0264]
在图17中,与图14中所示的那些相同的特征带有相同的附图标号,并且实际上节点1409 20之间的交互与图14中关于条件成功1425结果和条件失败1470结果所示的交互相同。
[0265]
在节点1420处,在条件成功结果1425的情况下,代替发出写入非探听命令,如所发出的命令是到设备诸如fifo(先进先出寄存器)1710的写入1700以及从节点1420的内部缓冲存储区的缓冲高速缓存行的非缓冲。
[0266]
图18是示出与排他性存储操作结合使用的有条件干净写入操作的示意性流程图。从步骤1800开始,在步骤1805执行排他性加载,并且随后在步骤1810发起具有附加条件的排他性存储。
[0267]
作为响应,在步骤1815在一致性总线上发起有条件干净写入操作。步骤1820测试目标节点处是否满足条件(成功条件结果)。如果为“是”,则在步骤1825,将指示成功的确认(对应于图17的确认1430)返回;排他性存储已完成,因此在步骤1830,排他性存储操作返回指示成功的响应(在该示例中为“零”),并且在步骤1835,相关的高速缓存行现在处于uc状态1435。
[0268]
返回到步骤1820,如果未满足条件,则在步骤1840,返回失败确认1475,并且在步骤1845,目标节点1420丢弃数据。同样相对于步骤1840,在步骤1850,未设定排他性监测;在
步骤1855,高速缓存行保持在状态ud 1480中并且在步骤1860,排他性存储操作返回错误代码。
[0269]
因此,图18提供了一个示例,其中一组数据处理节点中的请求节点被配置为:发起要求对给定存储器地址处的数据进行排他性访问的操作序列,该操作序列包括到给定存储器地址的排他性存储操作。例如,请求节点可以被配置为使用条件请求来实现排他性存储操作。例如,排他性存储操作可以包括:将特定值设定到表示排他性监测的数据。
[0270]
组装代码的比较示例
[0271]
(a)使用先前提议的指令集架构
[0272][0273]
上述摘录中所示的组装代码的示意性示例提供了在包括目标存储区域和条件代码的关键区域周围的锁。该示例假设条件代码设定在存储在寄存器x9中的不同数据范围内,例如在设定为不可高速缓存的另一页面上。
[0274]
在单独的不可高速缓存页面上存在条件标记允许简化刷新等。
[0275]
示例性代码还假设工作队列在来自互斥体(相互排除对象,一种允许多个程序线程轮流共享相同资源的程序对象)的单独高速缓存行上具体体现。循环将三个非连续高速缓存行移动到高速缓存中,发出一个屏障,并且针对到设备队列中的写入将一个干净发出到一致性点。平均上,将执行12个指令,假设全部成功并且不存在循环。如果高速缓存中的这些命中中的每个命中以及到存储器的一个不可高速缓存加载(基于关于在每种情况下访问哪个高速缓存级的假设),则代码在最佳可能情况下需要63个循环。
[0276]
(b)使用ll-sc-c
[0277][0278]
使用ll-sc-c的机制将移动最多一个高速缓存行(经由存储分组)。假设所有指令已成功执行,则在先前示例中针对十二个执行仅四个指令。假设与(a)中相同的高速缓存和核心配置,并且假设如前所述的最佳情况,这可以在约31个循环中(利用有条件干净写入)写入到设备,这略微优于循环的两倍减少,其中总体数据移动的减少约三倍。该ll-sc-c变体假设加速器是一致性的而非设备存储器。对于设备存储器,make_ready和store_q_buff是优选的。
发明内容
[0279][0280]
图1(或实际上图8或图12)的装置(例如根据以上讨论的技术进行操作)提供了电路的一个示例,该电路具有一组数据处理节点,该一组数据处理节点包括:两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示该相应副本的一致性状态,该指示标识信息被配置为至少指示该副本的更新时间是否比由该主存储器保持的该数据项新;主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及一个或多个从节点,该一个或多个从节点包括主存储器;其中:一组数据处理节点中的请求节点被配置为关于给定存储器地址处的给定数据项的副本将条件请求传送到一组数据处理节点中的目标节点,该条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;并且目标节点被配置为:响应于条件请求,(i)当执行条件的结果为成功时,将数据项写入到目的节点并且将完成成功指示标识传送到请求节点;以及(ii)当执行条件的结果为失败时,将完成失败指示标识传送到请求节点。
[0281]
发明内容方法
[0282]
图19是示出示例性方法的示意性流程图,该方法包括:
[0283]
在一组数据处理节点之间传送(在步骤1900)数据,该一组数据处理节点包括:
[0284]
两个或更多个主控节点,该两个或更多个主控节点各自具有保持来自主存储器的数据项的副本的相应存储电路,数据项的每个副本与指示标识信息相关联以指示相应副本的一致性状态,指示标识信息被配置为至少指示该副本的更新时间是否比由主存储器保持的数据项新;
[0285]
主节点,该主节点用于对数据访问操作进行序列化并控制由一组数据处理节点保持的数据项之间的一致性,使得写入到存储器地址的数据与响应于后续访问请求从该存储器地址读取的数据一致;以及
[0286]
一个或多个从节点,该一个或多个从节点包括主存储器;
[0287]
一组数据处理节点中的请求节点关于给定存储器地址处的给定数据项的副本将条件请求传送(在步骤1910)到一组数据处理节点中的目标节点,条件请求与执行条件相关联并且是将给定数据项的副本写入到数据处理节点中的目的节点的请求;以及
[0288]
响应于条件请求(结果由步骤1920示意性地示出),目标节点:
[0289]
(i)当执行条件的结果为成功时,将数据项写入(在步骤1930)到目的节点并将完成成功指示标识传送到请求节点;以及
[0290]
(ii)当执行条件的结果为失败时,将完成失败指示标识传送(在步骤1940)到请求节点。
[0291]
例如,可以通过图1的电路系统来实现该示例性方法。
[0292]
在本技术中,字词“被配置为
…”
用于意指装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,该装置可具有提供所限定的操作的专用硬件,或者可对处理器或其他处理设备进行编程以执行该功能。“被配置为”并不意味着装置元件需要以任何方式改变以便提供所限定的操作。
[0293]
虽然本文已结合附图详细描述了本发明技术的示例性实施方案,但应当理解,本发明技术并不限于那些精确的实施方案,并且在不脱离所附权利要求书所限定的本发明技术的范围和实质的前提下,本领域的技术人员可在其中实现各种变化、增加和修改。例如,在不脱离本发明技术的范围的情况下,从属权利要求的特征可与独立权利要求的特征一起进行各种组合。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1