CN101751370B - 在穿过串行接口总线时保持缓存一致性的系统和方法 - Google Patents
在穿过串行接口总线时保持缓存一致性的系统和方法 Download PDFInfo
- Publication number
- CN101751370B CN101751370B CN2009102507255A CN200910250725A CN101751370B CN 101751370 B CN101751370 B CN 101751370B CN 2009102507255 A CN2009102507255 A CN 2009102507255A CN 200910250725 A CN200910250725 A CN 200910250725A CN 101751370 B CN101751370 B CN 101751370B
- Authority
- CN
- China
- Prior art keywords
- data
- processor
- stored
- request
- local storage
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Transfer Systems (AREA)
- Multi Processors (AREA)
Abstract
一种使用存储在存储器中的数据执行处理操作的方法。该方法包括生成窥伺请求,该窥伺请求配置为确定存储在本地存储器中的第一数据是否相对于存储在数据缓存中的第二数据是一致的,该窥伺请求包括用于识别总线上数据缓存的目的消息,和识别第二数据定位在数据缓存中的位置的缓存线地址。该方法进一步包括引起在总线上传送至第二处理器的窥伺请求,提取来自窥伺请求的缓存线地址,确定第二数据是否是一致的,生成包括表明第一数据与第二数据相一致的完成信息的完成消息,和引起在总线上传送至第一处理器的完成消息。
Description
技术领域
本发明总体上涉及分布式计算领域,更特别地涉及在穿过诸如PCIExpress(PCIe)的串行接口总线时保持缓存一致性的系统和方法。
背景技术
在常规的计算系统中,处理器从外部存储单元中读取数据并且为了以后使用而在低延迟缓冲存储单元(缓存)中存储数据副本。然后,当使用数据执行操作时,处理器可以从缓存中读取数据副本而不是从外部存储单元中读取数据。由于在处理器与外部存储单元之间存取数据具有比在处理器与缓存之间存取数据更高的延迟,因此从缓存中取回数据允许处理器更快地执行指令,最终增强处理器的性能。缓存通常被实现为静态随机存取存储器(SRAM)或其他类型的低延迟存储单元。
典型的缓存被组织成在其中存储数据的多条线。每条线由说明存储在该条线中的缓存数据的有效性的标签来标记。例如,当处理器将来自外部存储器中的数据复制到特定的缓存线时,由于缓存的数据副本与存储在外部存储单元中的原始数据一致,那么该条缓存线被标记为“有效”。作为替换,当处理器从缓存线中读取数据、修改数据并将修改后的数据写回到缓存线时,由于相对于存储在外部存储单元中的原始数据,缓存的数据副本已被修改,因此该条缓存线可以被标记为“修改”。修改后的数据可以被写回到外部存储单元以便存储在外部存储单元中的数据与缓存数据相同。当存储在外部存储单元中的数据与存储在缓存中的相应数据相同时,缓存被视为“一致”。如果数据与存储在主存储器中的数据不同,只要缓存数据被标记为“修改”,那么缓存还是一致的。如果缓存存储的数据与存储在主存储器中的数据不同,但该数据未标记为修改,或者如果不同的缓存具有标记为修改的相同的数据,那么该缓存数据应是“不一致”的。
可以在包括由PCI Express(PCIe)总线互连的多个处理器的分布式计算系统中实现缓存。每个处理器可以从一个或多个外部存储单元中读取数据,并将数据副本存储在与该存储器相关联的缓存中。然后,处理器可以使用缓存的数据副本执行处理操作。如果处理器修改了缓存的数据副本,那么处理器可以将修改后的数据写回到外部存储单元以便保持缓存与外部存储单元的一致性,如上所述。但是,由于目前不存在穿过PCIe时能够保持缓存一致性的方法,因此常规系统中的多CPU不能读取和缓存穿过PCIe的数据。
每个处理器还可以经由PCIe总线接收数据。当处理器通过PCIe总线接收数据时,该数据典型地被标记为“不可缓存”(UC)或“写入合并”(WC)。由于计算系统的状态可以由这些数据决定,因此被标记为不可缓存的数据不能存储在缓存中。在这种情况下,参照这种数据可能具有由计算系统预期的和正常操作需要的负面影响。因此,数据必须对于计算系统是可存取的以便计算系统知晓对数据所做的修改。这样,这种数据无法在没有计算系统不可预知操作的风险的情况下存储在干预缓存中。标记为WC的数据被接收到缓冲器中作为数据片段。然后组合那些片段以重新生成数据。然后,组合的数据作为一个大的写入而不是多个较小的写入被传送。由于对标记为WC的位置的读取方式与对标记为UC的位置的读取方式采用同样的处理方式,因此也不能缓存标记为WC的数据。
上述配置存在的一个问题在于当处理器读取标记为UC或WC的数据时,该数据不能通过处理器进行缓存。例如,如果处理器使用标记为UC或WC的相同的数据执行多处理操作,那么处理器会被多次要求从外部(非缓存)存储单元中读取数据,这样会引入相当大的延迟。另一个问题在于当处理器使用标记为UC的数据执行指令时,处理器会连续执行这些指令从而降低处理器的效率。重要的是,通过PCIe总线接收的数据(例如,从多处理器系统中的另一个处理器的缓存中备份的数据)被标记为UC或WC。因此,不能缓存这种引入额外延迟的数据。该问题的一个解决方法是避免用PCIe总线连接处理器。但是,这种解决方法在很大程度上限制了计算系统的可能的配置。
因此,本领域仍需要一种改进的缓存技术。
发明内容
本发明的一个实施例提出了一种使用存储在数据缓存中的数据执行处理操作的方法。该方法包括生成窥伺请求,该窥伺请求配置为确定存储在与第一处理器耦合的本地存储器中的第一数据是否相对于存储在与第二处理器耦合的数据缓存中的第二数据相一致,窥伺请求包括目的信息用以在串行接口总线上识别数据缓存,缓存线地址识别第二数据位于数据缓存中的何处;基于识别数据缓存的目的信息使窥伺请求通过串行接口总线传送至第二处理器;从窥伺请求中提取缓存线地址;确定存储在缓存线地址处的数据缓存中的第二数据是否相对于存储在本地存储器中的第一数据相一致;生成包括目的信息的完成(CPL)消息用以在串行接口总线上识别本地存储器,完成消息指示第一数据相对于第二数据相一致;基于识别本地存储器的目的信息使CPL消息通过串行接口总线要传送至第一处理器;并且使用存储在本地存储器中的第一数据使该处理操作在第一处理器上执行。
有利地,穿过PCIe总线传送的数据可以标记为“可缓存的”,这样就去掉了对于接收该数据以连续执行程序指令的处理器的需要。因此,当对从PCIe总线上接收的数据执行操作时,相对于现有技术的方法来说,处理器的速度得到了改进。
附图说明
为了可以详细的理解本发明的上述特征,可以参考实施例对以上简要概括的发明进行更具体的说明,其中一些实施例在附图中示出。由于本发明允许其他具有等同效果的实施例,因此附图仅示出了本发明的典型实施例,并且不能视为对其范围的限制。
图1是配置为实现本发明一个或多个方面的计算系统的框图;
图2A-2B是示出了与“窥伺”(SNP)事务相关联的数据包的第一和第二实施例的概念图;
图3A-3C分别示出了根据本发明一个实施例的第一、第二和第三SNP事务;
图4是根据本发明一个实施例的在PCIe总线上实现SNP事务的方法步骤的流程图;
图5是根据本发明一个实施例的为了生成在PCIe总线上传送的SNP请求的方法步骤的流程图;和
图6是根据本发明一个实施例的为了生成在PCIe总线上传送的CPL消息的方法步骤的流程图。
具体实施方式
在以下说明中,将提出大量具体的细节以更全面的理解本发明。但是,对于本领域的技术人员来讲显而易见的是,可以在没有一个或多个这些具体细节的情况下实施本发明。在其他实例中,为了避免混淆本发明不再对公知的特征进行说明。
图1是配置为实现本发明一个或多个方面的计算系统100的框图。如图所示,计算机系统100包括高速外围组件接口(PCIe)总线102、本地存储器110、存储器控制器111、处理器112、系统存储器114、存储器控制器116、处理器118和缓存120。PCIe总线102包括事务层104,链路层106,和物理层108。PCIe总线102与处理器112和处理器118互连并在这些组件之间提供通信路径。
处理器112和处理器118可以是中央处理单元(CPU)、图形处理单元(GPU)、并行处理单元(PPU),专用集成电路(ASIC),或其他类型的处理单元。处理器112和处理器118可以是相同类型的处理单元或者可以是不同类型的处理单元。例如,处理器112可以是GPU以执行图形处理操作,而处理器118可以是CPU以执行存储在系统存储器114中的操作系统(OS)。
处理器118与存储器控制器116耦合并可以通过存储器控制器116从系统存储器114中读取数据。在一个实施例中,处理器112和/或处理器118通过PCIe总线102的事务层104与存储器控制器116耦合。因此,处理器112和/或处理器118都可以经由PCIe总线102访问系统存储器114。处理器112和处理器118可以从系统存储器114中读取数据,该数据包括程序指令和/或需要执行程序指令的数据。例如,当处理器112是GPU时,处理器112可以读取程序指令,该程序指令将包括在处理器112中的图形处理流水线的部件配置为执行具体的图形处理操作。处理器112还可以从系统存储器114和/或本地存储器110中读取图形数据并使用图形处理流水线处理该图形数据。
系统存储器114包括作为一组配置为协调处理器112、118操作的程序指令来实现的软件驱动器115。例如,构成驱动器115的程序指令可以通过处理器118执行以实现驱动器115的下述功能。
处理器112通过存储器控制器111与本地存储器110耦合,并因此控制本地存储器110的操作。当处理器112从PCIe总线102中接收数据时,处理器112可以为了以后使用而将接收到的数据存储在本地存储器110中。本地存储器110可以是配置为加速执行由处理器112完成的程序指令的低延迟存储单元。当由处理器112执行时,本地存储器110还可以存储程序指令和/或驱动器以实现计算机系统100的各种功能。
处理器118直接与缓存120耦合并控制缓存120的操作。当处理器118从系统存储器114或从PCIe总线102中接收数据时,处理器118可以为了以后使用而将接收到的数据的临时副本存储在缓存120中。缓存120是诸如静态随机存取存储(SRAM)模块的低延迟存储单元。对缓存120的读取请求具有比对系统存储器114的读取请求更低的延迟。因此,当从缓存120中取回需要的数据时,由于可以避免向系统存储器114读取产生的高延迟,缓存120可以加速执行由处理器118完成的程序指令。
“窥伺”(SNP)事务允许处理器112核对存储在缓存120中的原始数据的状态。通过使用经由PCIe总线102的事务层104在处理器112与处理器118之间传输的不同消息来执行该SNP事务。这些消息包括SNP请求和“完成”的CPL消息。处理器112沿着窥伺路径130传送SNP请求以启动SNP事务。SNP请求包括缓存数据的地址。为了响应SNP请求,处理器118检查存储在缓存120中的数据并执行依赖于该数据状态的特定的任务,如以下图2A-2B和图3A-3B中所详细说明的。当处理器118完成了这些任务时,处理器118可以传送CPL消息以表明SNP事务完成了。
PCIe总线102包括根联合体(未示出)。该根联合体是控制器,用以在接附于PCIe总线102的诸如处理器112和处理器118的端点之间管理事务。因此,该根联合体可以配置为将与SNP事务相关联的消息进行路由发送。在一个实施例中,根联合体将从一个端点处接收到的SNP请求广播到位于根联合体上而非PCIe 102上的所有其他的端点,或者端点的同级。
图2A是示出了根据本发明一个实施例的,与“窥伺”(SNP)事务相关联的数据包的第一实施例的概念图。如图所示,图2A示出了通过事务层104传播的SNP请求202A和CPL消息208A。在一个实施例中,SNP 202A和CPL消息208A不会同时通过事务层传播,如本文详细描述的。SNP请求202A包括缓存线地址204和事务层数据包(TPL)标题206。缓存线地址204指定要被检查的缓存线的地址。TPL标题206识别作为提供给消息接收方的SNP请求202A的消息。
SNP请求202A可以作为“非投递式事务”被添加到PCIe标准协议中。当第一PCIe端点将非投递式事务传送到第二PCIe端点时,第一PCIe端点期望CPL消息作为响应。这样,当处理器112将SNP请求202A传送至处理器118时,处理器112期望来自处理器118的CPL消息208A作为响应。因此,当SNP事务是完成的时,处理器118将CPL消息208A传送至处理器112。
为了确定存储在本地存储器110中的数据是否与存储在缓存120中的数据相一致,处理器112可以生成SNP请求202A并将SNP请求202A传送至处理器118。当处理器112生成SNP请求202A时,处理器112包括缓存120中的缓存线地址,其中,数据按照该缓存线地址204存储在缓存120中。消息还包括TLP标题206,该标题206识别该消息作为发送至处理器118的SNP请求202A。当处理器118接收SNP请求202A时,处理器118分析SNP请求202A并提取缓存线地址204。然后,处理器118检查与缓存120中特定的缓存线相关联的标签,并执行一系列操作,如以下图3A-3C所详细说明的。因为SNP请求202A是非投递式写入,因此处理器112期望CPL消息208A要由处理器118返回以响应SNP请求202A。因此,处理器118被配置为传送CPL 208A以响应SNP请求202A。
图2B是示出了根据本发明一个实施例的,与“窥伺”(SNP)事务相关联的数据包的第二实施例的概念图。如图所示,图2B示出了通过事务层104传播的SNP请求202B和CPL消息208B。在一个实施例中,SNP请求202B和CPL消息208B不会同时通过事务层104传播。SNP请求202B包括缓存线地址204和供应方定义的消息(VDM)标题210。CPL消息208B包括VDM标题210和SNP CPL 214。SNP请求202B和CPL消息208B都是VDM且不包括在PCIe标准协议中。处理器112以相似的方式使用SNP请求202A和SNP请求208B以启动SNP事务。处理器118以相似的方式使用CPL 208A消息和CPL 208B消息以表明SNP事务是完成的。
当处理器112将SNP请求202B传送至处理器118时,处理器118可以取决于存储在缓存120中的原始数据的状态,将CPL消息208B返回到处理器112。当处理器112接收CPL消息208B时,处理器112分析CPL消息208B并提取SNP CPL 214以确定缓存数据是否有效。然后,如果数据被确定为有效,那么存储器112可以读取存储在本地存储器110中需要的数据。
图3A、3B和3C分别示出了根据本发明一个实施例的第一、第二和第三SNP事务。当由处理器112执行的指令(例如,驱动器)使得处理器112生成作为执行那些指令的一部分的SNP请求以便获得正确的结果时,第一、第二和第三事务中的每个可以发生。作为响应,处理器118检查在以SNP请求中编址的缓存线地址中存储的数据,处理器118使得CPL消息被返回。如图3A所示,当缓存线被标记为“专有”或“共享”时,第一SNP事务发生。如图3B所示,当缓存线被标记为“修改”时,第二SNP事务发生。如图3C所示,当缓存线被标记为“无效”时,第三SNP事务发生。如此处使用的,当缓存线以任意状态出现于缓存中时,缓存线被视为“有效”。典型地实现的缓存状态是“无效”,意味着缓存线未出现在缓存中,“专有”意味着缓存线出现在缓存中并具有与存储器中的副本相同的值,而且其他缓存中不具有副本,“共享”意味着缓存线出现在缓存中并具有与存储器中的副本相同的值,而且其他缓存中也具有副本,“修改”意味着缓存线出现且具有不同于存储器中的值。
当处理器112将SNP请求传送至处理器118时,启动每个SNP事务。在一个实施例中,SNP请求是SNP请求202A。在替换的实施例中,SNP请求是SNP请求202B。
图3A示出了根据本发明一个实施例的配置为实现第一SNP事务的计算机系统300A。如图所示,计算机系统300A包括与图1所示的相同的组件。另外,将顺序处理段(legs)进行划界以表明当缓存120中的缓存线被标记为“专有”或“共享”时发生的处理步骤。当处理器112沿着处理段301将SNP请求传送至处理器118时,可以启动第一SNP事务。处理器118接收SNP请求并分析SNP请求。处理器118从SNP请求中提取缓存线地址204(此处未示出)。处理器118沿着处理段303访问缓存120中特定的缓存线,并检查与特定的缓存线相关联的标签。
如果数据被标记为“专有”或“共享”,那么处理器118使CPL消息沿着处理段305传送至处理器112。另外,缓存线的状态被变成“无效”(即,从缓存中将缓存线移除)。移除缓存线确保了在处理器112已经修改缓存线之后,处理器118不会使用来自缓存120的缓存线的“过时”副本。CPL消息指示处理器112 SNP事务已经完成,存储在本地存储器110中的数据是正确的版本。因此,处理器112可以使用存储在本地存储器110中的数据执行处理操作。当处理器112接收CPL消息时,处理器112从本地存储器110中读取数据。
图3B示出了根据本发明一个实施例的配置为实现第二SNP事务的计算机系统300B。如图所示,计算机系统300B包括与图1所示的相同的组件。另外,将顺序处理段进行划界以表明当缓存120中的缓存线被标记为“修改”时发生的处理步骤。第二SNP事务包括一些与图3A所示的那些大体相似的步骤。但是,当对于特定缓存线的检查确定出数据被标记为“修改”时,第二SNP事务以不同的方式进行。
如果数据被标记为“修改”,那么处理器118沿着处理段309将存储在缓存120的特定存储线处的数据传送至处理器112。然后,处理器112通过对存储在本地存储器110中的数据的相应的副本进行改写操作而将接收到的数据写入本地存储器110,这样对本地存储器110进行更新以反映数据的最新版本。当处理器118完成写入数据时,处理器118接收来自处理器112(未示出)的写入完成。在一个实施例中,该写入完成是用以表明数据已被成功地写入本地存储器110的CPL消息。然后,处理器118沿着处理段305将CPL消息传送至处理器112。CPL消息指示处理器112SNP事务已经完成以及存储在本地存储器110中的数据是正确的。因此,处理器112使用存储在本地存储器110中的数据执行处理操作。当处理器112接收CPL消息时,处理器112可以从本地存储器110中读取数据。
图3C示出了根据本发明一个实施例的配置为实现第三SNP事务的计算机系统300C。如图所示,计算机系统300C包括与图1所示的相同的组件。另外,将顺序处理段进行划界以表明当缓存120中的缓存线被标记为“无效”时发生的处理步骤。第三SNP事务包括一些与图3A和图3B所示的那些大体相似的步骤。但是,当对于特定缓存线的检查确定数据被标记为“无效”时,第三SNP事务以不同的方式进行。
当处理器112沿着处理段301将SNP请求传送至处理器118时,可以启动第三SNP事务。处理器118检查特定的缓存线并确定数据被标记为无效(未示出)。然后,处理器118使CPL消息传送至处理器112,表明存储在本地存储器110中的数据是最近存储的和/或修改的数据版本。
另外,处理器112需要存储在本地存储器110中的数据,并因此向处理器118发出SNP请求,同时处理器118针对本地存储器110中的相同数据发出读取请求。在处理器112发出SNP请求后,但在SNP请求到达处理器118之前,由处理器112接收由处理器118发出的读取请求。在这种情况下,使用传统系统,处理器112等待CPL消息响应于SNP请求而返回,并且直到读取请求完成为止处理器118才发出CPL消息。在这些常规系统中,处理器112在服务于该读取请求之前要等待CPL消息,并且处理器118在发出CPL消息之前要等待该读取请求数据。这种有问题的情况被称为“死锁”。
当使用传统系统时,由于标准PCIe序列规则允许读取请求传递CPL消息,就可能产生另一种有问题的情况。如果处理器118在发出读取请求之前发出CPL消息,那么读取请求可以在CPL消息之前到达处理器112。当处理器112为读取请求返回数据时,处理器118会再一次具有来自缓冲120中的本地存储器110的数据副本。然后,处理器112会需要发出另一个SNP请求,且该周期可能会无限期地自我重复。这种情况被称为“活锁”。
通过注意到如果处理器118具有缓存120中的数据副本,那么读取请求已经由缓存120所服务且读取请求不会再被发送到处理器112,这样本发明的实施例避免可能的死锁和活锁问题。结果,如果处理器112为具有重要SNP请求的存储位置接收读取请求(即,没有CPL消息被接收以响应SNP请求),则不管处理器118发出的事务的顺序如何(例如,读取请求然后SNP请求,或SNP请求然后读取请求),处理器112都会如同处理器118表明未在缓存120中发现数据副本那样而进行响应。这样,处理器112可以很安全地使用和/或修改本地存储器位置,然后返回该数据以服务于该读取请求。因此,处理器112已做出了“向前移动(forward progress)”而且不需要为当前参考的数据再次发出SNP请求(即,避免可能的活锁),并且处理器112可以在接收与SNP请求相关联的CPL消息之前返回与读取请求相关联的数据(即,避免可能的死锁)。SNP请求的CPL消息仍然通过处理器112返回,但在一个实施例中,由于基于接收到来自处理器118的读取请求,处理器112已经确定了存储在本地存储器110中的数据是正确的,那么处理器112不理会该CPL消息。
图4是根据本发明一个实施例的在PCIe总线上实现SNP事务的方法步骤的流程图。本领域的技术人员应该理解的是,虽然结合图1-3C的系统说明方法400,但是以任意顺序配置为执行该方法步骤的任意系统都在本发明的范围内。
如图所示,方法400开始于步骤402,其中处理器112生成SNP请求。在一个实施例中,由处理器112执行的驱动器命令处理器112使用数据,该数据反过来使得处理器112生成SNP请求以确保一致性。例如,处理器112可以尝试使用存储在本地存储器110中的数据以执行处理操作,其中数据的缓存副本存储在与处理器118相关联的缓存120中。发出SNP请求以启动SNP事务使得允许处理器112在本地存储器110与缓存120中保持一致性。当处理器112生成SNP请求时,处理器112包括了地址,该地址指示了其中存储了所需数据的缓存中的缓存线,如图5所详细说明的。SNP请求可以是SNP请求202A或SNP请求202B,如图2A和2B分别说明的。
在步骤404处,处理器112使得SNP请求在PCIe总线102上传送至处理器118。SNP请求经PCIe总线102的事务层104传播。在步骤406处,处理器118接收SNP请求并从SNP请求中提取缓存线地址204。处理器118检查由缓存线地址204识别的缓存线,并提取与缓存线相关联的标签。该标签表明存储在缓存线处的数据的状态。
在步骤408处,处理器118确定缓存线是否标记为“专有”或“共享”。如果缓存线被标记为“专有”或“共享”,那么由于存储在缓存120中的数据与存储在本地存储器110中的数据是相同的,所以不需要任何动作来在缓存120与本地存储器110之间建立缓存一致性。方法400进行到步骤410处,此处处理器118将缓存线标记为“无效”。这样,缓存线的状态变为“无效”(即,从缓存中移除缓存线)。移除缓存线确保了在处理器112修改了缓存线之后处理器118不使用来自缓存120的缓存线的过时副本。
然后,方法400进行到步骤410,此处处理器118生成CPL消息。CPL消息可以是CPL消息202A或可以是CPL消息202B,如图2A和2B所分别描述的。
在步骤414处,处理器118使得CPL消息传送至处理器112以表明存储在本地存储器110中的数据与存储在缓存120中的原始数据是一致的和/或正确的。在步骤416处,处理器112从本地存储器110中读取数据然后方法结束。
回过来参考步骤408,如果处理器118确定缓存线未被标记为“专有”或“共享”,那么该方法进行到步骤418,此处处理器118确定缓存线是否被标记为“修改”。当处理器118已执行了处理操作使得相对于存储在本地存储器110中的数据改变了存储在缓存120中的数据的值时,缓存线可以被标记为修改。如果在步骤418处,处理器118确定缓存线被标记为“修改”,那么该方法进行到步骤420,此处处理器118将修改后的数据写入本地存储器110。然后该方法进行到步骤410,该步骤在本文前面已说明。
如果在步骤418处,缓存线未被标记为“修改”,那么该方法400进行到步骤412,该步骤在本文前面已说明。如果缓存线不是“专有”或“共享”的(步骤408)且缓存线不是“修改”的,那么由于不需要任何动作来在缓存120与本地存储器110之间建立缓存一致性,因此缓存线是“无效”的并且处理器118生成CPL消息。
另外,如图3C所描述的,处理器118可以对与SNP请求相关联的存储器位置相对应的本地存储器110中的存储器位置发出读取请求。在这种情况下,处理器112接收读取请求,不理会从处理器118中接收到的响应SNP请求的CPL消息,使用存储在本地存储器中的数据执行操作(可能修改了数据),然后将该读取请求服务于处理器118。因此,处理器112已做出了“向前移动”且不需要为当前参考再次发出SNP请求(即,避免可能的活锁),并且处理器112可以在为SNP请求而接收CPL消息之前返回读取请求的数据(即,避免可能的死锁)。对于SNP请求的CPL消息仍通过处理器112返回,但在一个实施例中,由于基于接收了来自处理器118的读取请求,处理器112已经确定了存储在本地存储器110中的数据是正确的,那么处理器112不理会CPL消息。
图5是根据本发明一个实施例的为了生成在PCIe总线上传送的SNP请求的方法步骤的流程图。本领域的技术人员应该理解的是,虽然结合图1-4的系统和方法对方法500进行说明,但是以任意顺序配置为执行该方法步骤的任意系统都在本发明的范围内。
如图所示,方法500开始于步骤502,此处处理器112生成SNP请求标题。在步骤504处,处理器112向空白数据包中添加SNP请求标题。在一个实施例中,SNP请求是SNP请求202A,SNP请求标题是TLP标题206。TLP标题206将该消息识别作为发送到处理器118的SNP请求202A。在替换的实施例中,SNP请求是SNP请求202B,SNP请求标题是VDM标题210。VDM标题210将该消息识别作为发送到处理器118的SNP请求202B。
在步骤506处,处理器112向数据包中添加目的信息。目的信息将处理器118识别为SNP请求的意向接收方。PCIe总线包括根据目的信息将SNP请求路由发送至处理器118的逻辑。在步骤508处,处理器112向SNP请求中添加要被“窥伺”的缓存120的缓存线地址。缓存线地址表明缓存120中原始数据的位置。
图6是根据本发明一个实施例的为了生成在PCIe总线上传送的CPL消息的方法步骤的流程图。本领域的技术人员应该理解的是,虽然结合图1-4的系统和方法对方法600进行说明,但是以任意顺序配置为执行该方法步骤的任意系统都在本发明的范围内。
如图所示,方法600开始于步骤602,此处处理器118生成CPL消息标题。处理器118可能已经接收了SNP请求并且可能已经执行了以上图3A-3C所述的动作从而对本地存储器110或缓存120进行更新。一旦这些动作完成,那么本地存储器110就存储数据的最新版本,然后处理器118可能需要生成当由处理器112接收时用以完成SNP事务的CPL消息。
在步骤604处,处理器118向空白数据包中添加CPL消息标题。在一个实施例中,CPL消息是CPL消息208A。在替换的实施例中,CPL消息是CPL消息208B且CPL消息标题是VDM标题212。VDM标题212识别发送到处理器112的CPL消息208B。
在步骤506处,处理器118向CPL消息中添加完成状态。在一个实施例中,完成状态是读取完成通知。在替换的实施例中,完成状态表明不需要进行任何动作。在第三实施例中,完成状态是空白的。在步骤608处,处理器118向数据包中添加目的信息。目的信息将处理器112识别为CPL消息的意向接收方。PCIe总线包括根据目的信息将CPL消息路由发送至处理器112的逻辑。当处理器112接收CPL消息时,SNP事务是完成的,并且本地存储器110与缓存120是一致的。
总之,本发明的实施例提供了一种在PCIe总线上执行“窥伺”(SNP)事务的技术。使用SNP请求和“完成”CPL消息实现SNP事务。当第一处理器在本地存储单元中存储通过PCIe总线接收的数据时,第一处理器使用SNP请求对数据来源进行核对以确定数据是否是一致的,如果数据不是一致的,那么获得更新的版本。当原始的数据来源是与第二处理器相关联的缓存时,第一处理器生成将缓存线地址包括在缓存中的SNP请求。缓存线地址表明存储原始数据的缓存的缓存线。第一处理器使得SNP请求传送至第二处理器。当第二处理器接收SNP请求时,第二处理器分析缓存线地址并取回与该缓存线相关联的标签。
当标签表明缓存线是“专有”或“共享”的时,第二处理器使得“完成”(CPL)消息在PCIe总线上传送至第一处理器。CPL消息通知第一处理器存储在本地存储单元中的数据是有效的,并且当执行处理操作时这些数据是可以被使用的。然后第一处理器从本地存储单元中取回数据。
当标签表明缓存线是“修改”的时,第二处理器从缓存中取回修改后的数据并将该数据写入本地存储单元。第二处理器将CPL消息传送至第一处理器,然后第一处理器可以从第一缓存中取回需要的数据。
当标签表明缓存线是“无效”的时,第二处理器发出CPL消息,通知第一处理器以使第一处理器可以安全地从本地存储单元中取回需要的数据。
本发明的更多实施例提供了一种技术,该技术通过当从第二处理器中接收干预读取请求以访问相同的存储器位置时,使第一处理器不理会接收到的响应SNP请求的CPL消息,以避免可能的死锁和活锁情况。
另外,SNP请求可以定义到PCIe标准协议中作为事务层数据包(TLP)或供应方定义消息(VDM)。当SNP请求被定义为TLP时,SNP请求包括TLP标题和要被检查的缓存线的地址。然后,传送CPL消息以表明SNP事务是完成的。当SNP请求被定义为VDM时,SNP请求包括VDM标题和要被检查的缓存线的地址。还定义了第二VDM以包括数据有效载荷中的“完成”通知。一旦SNP事务完成就传送第二VDM。
有利的是,当数据通过PCIe总线接收并通过第二处理器缓存时,第一处理器可以在本地存储单元中存储数据。第一处理器使用SNP请求以确保数据与通过第二处理器缓存的数据是一致的。进一步的优点在于穿过PCIe总线传送的数据可以被标记为“可缓存的”,这就不需要接收该数据的处理器以连续执行程序指令。因此,当用在PCIe总线上接收的数据执行操作时,可以显著改进处理器的速度。
虽然前面所述的是本发明的实施例,但可以在不背离其基本范围的前提下对本发明的其他和进一步实施例进行修改。例如,本发明的某些方面可以由硬件或软件来实现,或者由硬件与软件结合在一起来实现。本发明的一个实施例可以实现为计算机系统中所使用的程序产品。程序产品的程序对实施例的功能(包括本文所说明的方法)进行定义,并且可以被包含在多种计算机可读存储介质上。示例性的计算机可读存储介质包括但不仅限于:(i)信息可以永久存储在其上的非可写存储介质(例如,计算机中的只读存储设备,诸如通过CD-ROM驱动器可读的CD-ROM盘、闪存、ROM芯片或任意类型的固态非易失性半导体存储器);以及(ii)其上存储有可变信息的可读存储介质(例如,磁盘驱动器中的软盘或硬盘驱动器或任意类型的固态随机存取半导体存储器)。当携带有引导本发明的功能的计算机可读指令时,这样的计算机可读存储介质就是本发明的实施例。因此,本发明的范围由以下权利要求界定。
Claims (10)
1.一种使用存储在存储器中的数据执行处理操作的系统,包括:
生成窥伺请求的装置,该窥伺请求配置为确定存储在与第一处理器相关联的本地存储器中的第一数据相对于存储在与第二处理器相关联的数据缓存中的第二数据是否是一致的,该窥伺请求包括:
目的信息,该目的信息用于识别串行接口总线上的该数据缓存,以及
缓存线地址,该缓存线地址识别该第二数据定位在该数据缓存中的何处;
基于识别数据缓存的该目的信息,使得该窥伺请求通过该串行接口总线传送至该第二处理器的装置;
从该窥伺请求中提取该缓存线地址的装置;
确定存储在该缓存线地址处的该数据缓存中的该第二数据是否相对于存储在该本地存储器中的该第一数据是一致的,是则改变与该缓存线地址相关联的缓存线标签以表明缓存线是无效的的装置;
生成完成消息的装置,该完成消息包括:
目的信息,该目的信息用于识别该串行接口总线上的该本地存储器,和
完成信息,该完成信息表明该第一数据相对于该第二数据是一致的;
基于识别该本地存储器的该目的信息,使得该完成消息通过该串行接口总线传送至该第一处理器的装置;和
使用存储在该本地存储器中的该第一数据使得在该第一处理器上执行处理操作的装置。
2.根据权利要求1所述的系统,其中该窥伺请求是非投递式事务,其中该第一处理器期望接收响应该窥伺请求的来自该第二处理器的消息。
3.根据权利要求1所述的系统,其中该窥伺请求是具有供应方定义标题的供应方定义消息,其包括用于识别该数据缓存的该目的信息。
4.根据权利要求1所述的系统,其中确定存储在该缓存线地址处的该数据缓存中的该第二数据是否相对于存储在该本地存储器中的该第一数据是一致的,是则改变与该缓存线地址相关联的缓存线标签以表明缓存线是无效的的装置包括检查与该缓存线地址相关联的缓存线标签,以确定该第二数据相对于该第一数据的状态的装置。
5.根据权利要求4所述的系统,还包括当确定该第二数据相对于该第一数据不一致时,在生成完成消息之前执行以下操作的装置:
确定已经对存储在该缓存线地址处的该数据缓存中的该第二数据进行了修改;
使该第二数据传送至该本地存储器;
使该第二数据写入至该本地存储器;以及
改变与该缓存线地址相关联的缓存线标签以表明缓存线是无效的。
6.根据权利要求4所述的系统,还包括:
使读取请求通过该串行接口总线从该第二处理器传送至该第一处理器的装置,其中,该读取请求包括读取存储在该本地存储器中的该第一数据的请求;
在该第一处理器处不理会从该第二处理器接收到的该完成消息的装置;和
在该第一处理器上在执行处理操作后,通过将该第一数据通过该串行接口总线传送至该第二处理器以服务于该读取请求的装置,其中通过所执行的该处理操作修改该第一数据。
7.一种使用存储在存储器中的数据执行处理操作的方法,该方法包括:
生成窥伺请求,该窥伺请求配置为确定存储在与第一处理器相关联的本地存储器中的第一数据相对于存储在与第二处理器相关联的数据缓存中的第二数据是否是一致的,该窥伺请求包括:
目的信息,该目的信息用于识别串行接口总线上的数据缓存,和
缓存线地址,该缓存线地址识别该第二数据定位在该数据缓存中的何处;
基于识别数据缓存的该目的信息,使得该窥伺请求通过该串行接口总线传送至该第二处理器;
从该窥伺请求中提取该缓存线地址;
确定存储在该缓存线地址处的该数据缓存中的该第二数据是否相对于存储在该本地存储器中的该第一数据是一致的,是则改变与该缓存线地址相关联的缓存线标签以表明缓存线是无效的;生成完成消息,该完成消息包括:
目的信息,该目的信息用于识别该串行接口总线上的该本地存储器,和
完成信息,该完成信息表明该第一数据相对于该第二数据是一致的;
基于识别该本地存储器的该目的信息,使得该完成消息通过该串行接口总线传送至该第一处理器;和
使用存储在该本地存储器中的该第一数据使得在该第一处理器上执行处理操作。
8.根据权利要求7所述的方法,其中确定步骤包括检查与缓存线地址相关联的缓存线标签,以确定该第二数据相对于该第一数据的状态。
9.根据权利要求8所述的方法,进一步包括当确定该第二数据相对于该第一数据不一致时,在生成完成消息之前的步骤:
确定已经对存储在该缓存线地址处的该数据缓存中的该第二数据进行了修改;
使该第二数据传送至该本地存储器;
使该第二数据写入至该本地存储器;以及
改变与该缓存线地址相关联的缓存线标签以表明缓存线是无效的。
10.根据权利要求8所述的方法,进一步包括步骤:
使读取请求通过该串行接口总线从该第二处理器传送至该第一处理器,其中,该读取请求包括读取存储在该本地存储器中的该第一数据的请求;
在该第一处理器处不理会从该第二处理器接收到的该完成消息;和
在该第一处理器上执行处理操作后,通过将该第一数据通过该串行接口总线传送至该第二处理器以服务于该读取请求,其中通过所执行的该处理操作修改该第一数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/331,302 | 2008-12-09 | ||
US12/331,302 US8234458B2 (en) | 2008-12-09 | 2008-12-09 | System and method for maintaining cache coherency across a serial interface bus using a snoop request and complete message |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101751370A CN101751370A (zh) | 2010-06-23 |
CN101751370B true CN101751370B (zh) | 2013-11-20 |
Family
ID=42232360
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102507255A Active CN101751370B (zh) | 2008-12-09 | 2009-12-09 | 在穿过串行接口总线时保持缓存一致性的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US8234458B2 (zh) |
JP (1) | JP5146844B2 (zh) |
KR (1) | KR101107391B1 (zh) |
CN (1) | CN101751370B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8751714B2 (en) * | 2010-09-24 | 2014-06-10 | Intel Corporation | Implementing quickpath interconnect protocol over a PCIe interface |
JPWO2012124431A1 (ja) * | 2011-03-17 | 2014-07-17 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
US11144580B1 (en) * | 2013-06-16 | 2021-10-12 | Imperva, Inc. | Columnar storage and processing of unstructured data |
US10846223B2 (en) * | 2017-10-19 | 2020-11-24 | Lenovo Enterprise Solutions (Singapore) Pte. Ltd | Cache coherency between a device and a processor |
US11477049B2 (en) * | 2018-08-02 | 2022-10-18 | Xilinx, Inc. | Logical transport over a fixed PCIE physical transport network |
US11210246B2 (en) * | 2018-08-24 | 2021-12-28 | Advanced Micro Devices, Inc. | Probe interrupt delivery |
US10769071B2 (en) * | 2018-10-10 | 2020-09-08 | Micron Technology, Inc. | Coherent memory access |
CN109617832B (zh) * | 2019-01-31 | 2022-07-08 | 新华三技术有限公司合肥分公司 | 报文缓存方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101131674A (zh) * | 2006-08-24 | 2008-02-27 | 国际商业机器公司 | 使高速缓存线暂时无效和重新有效的方法和数据处理系统 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09223115A (ja) * | 1996-02-19 | 1997-08-26 | Canon Inc | 情報処理装置及びシステム及びその制御方法 |
JP3849951B2 (ja) * | 1997-02-27 | 2006-11-22 | 株式会社日立製作所 | 主記憶共有型マルチプロセッサ |
US6292872B1 (en) | 1998-02-17 | 2001-09-18 | International Business Machines Corporation | Cache coherency protocol having hovering (H) and recent (R) states |
US20020053004A1 (en) * | 1999-11-19 | 2002-05-02 | Fong Pong | Asynchronous cache coherence architecture in a shared memory multiprocessor with point-to-point links |
US7644237B1 (en) * | 2003-06-23 | 2010-01-05 | Mips Technologies, Inc. | Method and apparatus for global ordering to insure latency independent coherence |
US7698509B1 (en) * | 2004-07-13 | 2010-04-13 | Oracle America, Inc. | Snooping-based cache-coherence filter for a point-to-point connected multiprocessing node |
US7360027B2 (en) | 2004-10-15 | 2008-04-15 | Intel Corporation | Method and apparatus for initiating CPU data prefetches by an external agent |
US7543115B1 (en) * | 2006-01-11 | 2009-06-02 | Intel Corporation | Two-hop source snoop based cache coherence protocol |
US7836144B2 (en) * | 2006-12-29 | 2010-11-16 | Intel Corporation | System and method for a 3-hop cache coherency protocol |
US7861024B2 (en) * | 2008-09-30 | 2010-12-28 | Intel Corporation | Providing a set aside mechanism for posted interrupt transactions |
-
2008
- 2008-12-09 US US12/331,302 patent/US8234458B2/en active Active
-
2009
- 2009-12-09 KR KR1020090121685A patent/KR101107391B1/ko active IP Right Grant
- 2009-12-09 CN CN2009102507255A patent/CN101751370B/zh active Active
- 2009-12-09 JP JP2009279506A patent/JP5146844B2/ja active Active
-
2012
- 2012-07-25 US US13/557,980 patent/US8782349B2/en active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101131674A (zh) * | 2006-08-24 | 2008-02-27 | 国际商业机器公司 | 使高速缓存线暂时无效和重新有效的方法和数据处理系统 |
Also Published As
Publication number | Publication date |
---|---|
US8234458B2 (en) | 2012-07-31 |
KR101107391B1 (ko) | 2012-01-19 |
KR20100066410A (ko) | 2010-06-17 |
US20100146218A1 (en) | 2010-06-10 |
US8782349B2 (en) | 2014-07-15 |
JP5146844B2 (ja) | 2013-02-20 |
CN101751370A (zh) | 2010-06-23 |
JP2010140485A (ja) | 2010-06-24 |
US20120290796A1 (en) | 2012-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101751370B (zh) | 在穿过串行接口总线时保持缓存一致性的系统和方法 | |
US20200012604A1 (en) | System, Apparatus And Method For Processing Remote Direct Memory Access Operations With A Device-Attached Memory | |
CN101097545B (zh) | 独占所有权探听过滤器 | |
Stuecheli et al. | CAPI: A coherent accelerator processor interface | |
JP4589384B2 (ja) | 高速メモリモジュール | |
US8037253B2 (en) | Method and apparatus for global ordering to insure latency independent coherence | |
US8904045B2 (en) | Opportunistic improvement of MMIO request handling based on target reporting of space requirements | |
US9542316B1 (en) | System and method for adaptation of coherence models between agents | |
TWI620064B (zh) | 處理器 | |
CN105339908A (zh) | 用于支持持久存储器的方法和装置 | |
US20190303295A1 (en) | Coordination of cache memory operations | |
US7685373B2 (en) | Selective snooping by snoop masters to locate updated data | |
CN108536473B (zh) | 读取数据的方法和装置 | |
US7519780B2 (en) | System and method for reducing store latency in symmetrical multiprocessor systems | |
US20070073977A1 (en) | Early global observation point for a uniprocessor system | |
US6035376A (en) | System and method for changing the states of directory-based caches and memories from read/write to read-only | |
US8327081B2 (en) | Information processing device and method for controlling the same | |
EP4124963A1 (en) | System, apparatus and methods for handling consistent memory transactions according to a cxl protocol | |
US11360906B2 (en) | Inter-device processing system with cache coherency | |
JP2008176612A (ja) | マルチプロセッサシステム | |
JP2007241601A (ja) | マルチプロセッサシステム | |
US8726283B1 (en) | Deadlock avoidance skid buffer | |
CN114846455A (zh) | 系统直接存储器访问引擎卸载 | |
JPH08106417A (ja) | メモリアクセス方法及びメモリ共有システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |