在穿过串行接口总线时保持缓存一致性的系统和方法

文档序号:6585833阅读:308来源:国知局
专利名称:在穿过串行接口总线时保持缓存一致性的系统和方法
技术领域
本发明总体上涉及分布式计算领域,更特别地涉及在穿过诸如PCIE邓ress (PCIe) 的串行接口总线时保持缓存一致性的系统和方法。
背景技术
在常规的计算系统中,处理器从外部存储单元中读取数据并且为了以后使用而在 低延迟缓冲存储单元(缓存)中存储数据副本。然后,当使用数据执行操作时,处理器可以 从缓存中读取数据副本而不是从外部存储单元中读取数据。由于在处理器与外部存储单元 之间存取数据具有比在处理器与缓存之间存取数据更高的延迟,因此从缓存中取回数据允 许处理器更快地执行指令,最终增强处理器的性能。缓存通常被实现为静态随机存取存储 器(SRAM)或其他类型的低延迟存储单元。 典型的缓存被组织成在其中存储数据的多条线。每条线由说明存储在该条线中的 缓存数据的有效性的标签来标记。例如,当处理器将来自外部存储器中的数据复制到特定 的缓存线时,由于缓存的数据副本与存储在外部存储单元中的原始数据一致,那么该条缓 存线被标记为"有效"。作为替换,当处理器从缓存线中读取数据、修改数据并将修改后的数 据写回到缓存线时,由于相对于存储在外部存储单元中的原始数据,缓存的数据副本已被 修改,因此该条缓存线可以被标记为"修改"。修改后的数据可以被写回到外部存储单元以 便存储在外部存储单元中的数据与缓存数据相同。当存储在外部存储单元中的数据与存储 在缓存中的相应数据相同时,缓存被视为"一致"。如果数据与存储在主存储器中的数据不 同,只要缓存数据被标记为"修改",那么缓存还是一致的。如果缓存存储的数据与存储在主 存储器中的数据不同,但该数据未标记为修改,或者如果不同的缓存具有标记为修改的相 同的数据,那么该缓存数据应是"不一致"的。 可以在包括由PCI E邓ress(PCIe)总线互连的多个处理器的分布式计算系统中实 现缓存。每个处理器可以从一个或多个外部存储单元中读取数据,并将数据副本存储在与 该存储器相关联的缓存中。然后,处理器可以使用缓存的数据副本执行处理操作。如果处 理器修改了缓存的数据副本,那么处理器可以将修改后的数据写回到外部存储单元以便保 持缓存与外部存储单元的一致性,如上所述。但是,由于目前不存在穿过PCIe时能够保持 缓存一致性的方法,因此常规系统中的多CPU不能读取和缓存穿过PCIe的数据。
每个处理器还可以经由PCIe总线接收数据。当处理器通过PCIe总线接收数据时, 该数据典型地被标记为"不可缓存"(UC)或"写入合并"(WC)。由于计算系统的状态可以由 这些数据决定,因此被标记为不可缓存的数据不能存储在缓存中。在这种情况下,参照这种 数据可能具有由计算系统预期的和正常操作需要的负面影响。因此,数据必须对于计算系 统是可存取的以便计算系统知晓对数据所做的修改。这样,这种数据无法在没有计算系统 不可预知操作的风险的情况下存储在干预缓存中。标记为WC的数据被接收到缓冲器中作 为数据片段。然后组合那些片段以重新生成数据。然后,组合的数据作为一个大的写入而 不是多个较小的写入被传送。由于对标记为WC的位置的读取方式与对标记为UC的位置的读取方式采用同样的处理方式,因此也不能缓存标记为WC的数据。 上述配置存在的一个问题在于当处理器读取标记为UC或WC的数据时,该数据不 能通过处理器进行缓存。例如,如果处理器使用标记为UC或WC的相同的数据执行多处理 操作,那么处理器会被多次要求从外部(非缓存)存储单元中读取数据,这样会引入相当大 的延迟。另一个问题在于当处理器使用标记为UC的数据执行指令时,处理器会连续执行这 些指令从而降低处理器的效率。重要的是,通过PCIe总线接收的数据(例如,从多处理器 系统中的另一个处理器的缓存中备份的数据)被标记为UC或WC。因此,不能缓存这种引入 额外延迟的数据。该问题的一个解决方法是避免用PCIe总线连接处理器。但是,这种解决 方法在很大程度上限制了计算系统的可能的配置。
因此,本领域仍需要一种改进的缓存技术。

发明内容
本发明的一个实施例提出了一种使用存储在数据缓存中的数据执行处理操作的 方法。该方法包括生成窥伺请求,该窥伺请求配置为确定存储在与第一处理器耦合的本地 存储器中的第一数据是否相对于存储在与第二处理器耦合的数据缓存中的第二数据相一 致,窥伺请求包括目的信息用以在串行接口总线上识别数据缓存,缓存线地址识别第二数 据位于数据缓存中的何处;基于识别数据缓存的目的信息使窥伺请求通过串行接口总线传 送至第二处理器;从窥伺请求中提取缓存线地址;确定存储在缓存线地址处的数据缓存中 的第二数据是否相对于存储在本地存储器中的第一数据相一致;生成包括目的信息的完成 (CPU消息用以在串行接口总线上识别本地存储器,完成消息指示第一数据相对于第二数 据相一致;基于识别本地存储器的目的信息使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中。本地存储器iio可以是配置为加速执行由 处理器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包括与图l所示的相同的组件。另外,将顺序处理段
(legs)进行划界以表明当缓存120中的缓存线被标记为"专有"或"共享"时发生的处理步
骤。当处理器112沿着处理段301将SNP请求传送至处理器118时,可以启动第一 SNP事
务。处理器118接收SNP请求并分析SNP请求。处理器118从SNP请求中提取缓存线地址
204(此处未示出)。处理器118沿着处理段303访问缓存120中特定的缓存线,并检查与
特定的缓存线相关联的标签。 如果数据被标记为"专有"或"共享",那么处理器118使CPL消息沿着处理段305 传送至处理器112。另外,缓存线的状态被变成"无效"(即,从缓存中将缓存线移除)。移 除缓存线确保了在处理器112已经修改缓存线之后,处理器118不会使用来自缓存120的 缓存线的"过时"副本。CPL消息指示处理器112SNP事务已经完成,存储在本地存储器110 中的数据是正确的版本。因此,处理器112可以使用存储在本地存储器110中的数据执行 处理操作。当处理器112接收CPL消息时,处理器112从本地存储器110中读取数据。
图3B示出了根据本发明一个实施例的配置为实现第二 SNP事务的计算机系统 300B。如图所示,计算机系统300B包括与图l所示的相同的组件。另外,将顺序处理段进 行划界以表明当缓存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包括与图l所示的相同的组件。另外,将顺序处理段进 行划界以表明当缓存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请求(S卩,避 免可能的活锁),并且处理器112可以在接收与SNP请求相关联的CPL消息之前返回与读 取请求相关联的数据(即,避免可能的死锁)。SNP请求的CPL消息仍然通过处理器112返 回,但在一个实施例中,由于基于接收到来自处理器118的读取请求,处理器112已经确定 了存储在本地存储器110中的数据是正确的,那么处理器112不理会该CPL消息。
图4是根据本发明一个实施例的在PCIe总线上实现SNP事务的方法步骤的流程 图。本领域的技术人员应该理解的是,虽然结合图l-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。 V匿标题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请求被定义为V匿时,SNP请 求包括V匿标题和要被检查的缓存线的地址。还定义了第二 V匿以包括数据有效载荷中的 "完成"通知。 一旦SNP事务完成就传送第二 VDM。 有利的是,当数据通过PCIe总线接收并通过第二处理器缓存时,第一处理器可以 在本地存储单元中存储数据。第一处理器使用SNP请求以确保数据与通过第二处理器缓存 的数据是一致的。进一步的优点在于穿过PCIe总线传送的数据可以被标记为"可缓存的", 这就不需要接收该数据的处理器以连续执行程序指令。因此,当用在PCIe总线上接收的数 据执行操作时,可以显著改进处理器的速度。 虽然前面所述的是本发明的实施例,但可以在不背离其基本范围的前提下对本发 明的其他和进一步实施例进行修改。例如,本发明的某些方面可以由硬件或软件来实现,或 者由硬件与软件结合在一起来实现。本发明的一个实施例可以实现为计算机系统中所使用 的程序产品。程序产品的程序对实施例的功能(包括本文所说明的方法)进行定义,并且可 以被包含在多种计算机可读存储介质上。示例性的计算机可读存储介质包括但不仅限于 (i)信息可以永久存储在其上的非可写存储介质(例如,计算机中的只读存储设备,诸如通 过CD-ROM驱动器可读的CD-ROM盘、闪存、R0M芯片或任意类型的固态非易失性半导体存储 器);以及(ii)其上存储有可变信息的可读存储介质(例如,磁盘驱动器中的软盘或硬盘 驱动器或任意类型的固态随机存取半导体存储器)。当携带有引导本发明的功能的计算机 可读指令时,这样的计算机可读存储介质就是本发明的实施例。因此,本发明的范围由以下 权利要求界定。
权利要求
一种用于确定存储在存储器中的数据是否有效的计算机系统,包括第一处理器;本地存储器,该本地存储器与该第一处理器相关联;第二处理器;数据缓存,该数据缓存与该第二处理器相关联;和串行接口总线,该串行接口总线配置为在该第一处理器与该第二处理器之间的路由传送消息;其中该第一处理器配置为生成窥伺请求,该窥伺请求,该窥伺请求配置为确定存储在该本地存储器中的第一数据是否相对于存储在该数据缓存中的第二数据是一致的,该窥伺请求包括目的信息,该目的信息用于识别该串行接口总线上的该数据缓存,以及缓存线地址,该缓存线地址识别该第二数据定位在该数据缓存中的何处,基于该识别数据缓存的目的信息,使得该窥伺请求通过该串行接口总线传送至该第二处理器,和使用存储在该本地存储器中的该第一数据执行处理操作;和其中该第二处理器被配置为从该窥伺请求中提取该缓存线地址,确定存储在该缓存线地址处的该数据缓存中的该第二数据是否相对于该第一数据是一致的,生成完成(CPL)消息,该完成消息包括目的信息,该目的信息用于识别该串行接口总线上的该本地存储器,和完成信息,该完成信息表明该第一数据相对于该第二数据是一致的,和基于识别该本地存储器的该目的信息,使得该CPL消息通过该串行接口总线传送至该第一处理器。
2. 根据权利要求1所述的计算机系统,其中该窥伺请求是非投递式事务,其中该第一 处理器期望接收响应该窥伺请求的来自该第二处理器的消息。
3. 根据权利要求1所述的计算机系统,其中该窥伺请求是具有供应方定义标题的供应 方定义消息,其包括用于识别该数据缓存的该目的信息。
4. 根据权利要求1所述的计算机系统,其中确定存储在该缓存线地址处的该数据缓存 中的该第二数据是否是一致包括检查与该缓存线地址相关联的缓存线标签,以确定该第二 数据相对于该第一数据的状态。
5. 根据权利要求4所述的计算机系统,其中该第二处理器进一步被配置为 确定已经对存储在该缓存线地址处的该数据缓存中的该第二数据进行了修改; 使该第二数据传送至该本地存储器; 使该第二数据写入至该本地存储器;以及 改变与该缓存相关联的缓存线标签以表明该缓存线是无效的。
6. 根据权利要求4所述的计算机系统,其中该第二处理器进一步被配置为使读取请求 通过该串行接口从该第二处理器传送至该第一处理器,其中,该读取请求包括读取存储在 该本地存储器中的该第一数据的请求;禾口其中该第一处理器进一步被配置为 不理会从该第二处理器接收到的CPL消息,以及在执行处理操作后,通过将该第一数据通过该串行接口传送至该第二处理器以服务于 该读取请求,其中通过所执行的该处理操作修改该第一数据。
7. —种使用存储在存储器中的数据执行处理操作的方法,该方法包括生成窥伺请求,该窥伺请求配置为确定存储在与第一处理器耦合的本地存储器中的第 一数据相对于存储在与第二处理器耦合的数据缓存中的第二数据是否是一致的,该窥伺请求包括目的信息,该目的信息用于识别串行接口总线上的数据缓存,禾口 缓存线地址,该缓存线地址识别第二数据定位在数据缓存中的何处;基于识别数据缓存的该目的信息,使得该窥伺请求通过该串行接口总线传送至该第二 处理器,从该窥伺请求中提取该缓存线地址,确定存储在缓存线地址处的数据缓存中的该第二数据是否相对于存储在该本地存储 器中的该第一数据是一致的;生成完成(CPL)消息,该完成消息包括目的信息,该目的信息用于识别串行接口总线上的本地存储器,和 完成信息,该完成信息表明该第一数据相对于该第二数据是一致的; 基于识别该本地存储器的该目的信息,使得CPL消息通过串行接口总线传送至第一处 理器;和使用存储在该本地存储器中的该第一数据使得在该第一处理器上执行该处理操作。
8. 根据权利要求7所述的方法,其中确定步骤包括检查与缓存线地址相关联的缓存线 标签,以确定该第二数据相对于该第一数据的状态。
9. 根据权利要求8所述的方法,进一步包括步骤确定已经对存储在该缓存线地址处的该数据缓存中的该第二数据进行了修改; 使该第二数据传送至该本地存储器; 使该第二数据写入至该本地存储器;以及改变与该缓存相关联的缓存线标签以表明该缓存线是无效的。
10. 根据权利要求8所述的方法,进一步包括步骤使读取请求通过该串行接口从该第二处理器传送至该第一处理器,其中,该读取请求包括读取存储在该本地存储器中的该第一数据的请求;在该第一处理器处不理会从该第二处理器接收到的该CPL消息;禾口 在该第一处理器上执行处理操作后,通过将该第一数据通过该串行接口传送至该第二处理器以服务于该读取请求,其中通过所执行的该处理操作修改该第一数据。
全文摘要
一种使用存储在存储器中的数据执行处理操作的方法。该方法包括生成窥伺请求,该窥伺请求配置为确定存储在本地存储器中的第一数据是否相对于存储在数据缓存中的第二数据是一致的,该窥伺请求包括用于识别总线上数据缓存的目的消息,和识别第二数据定位在数据缓存中的位置的缓存线地址。该方法进一步包括引起在总线上传送至第二处理器的窥伺请求,提取来自窥伺请求的缓存线地址,确定第二数据是否是一致的,生成包括表明第一数据与第二数据相一致的完成信息的完成消息,和引起在总线上传送至第一处理器的完成消息。
文档编号G06F13/42GK101751370SQ20091025072
公开日2010年6月23日 申请日期2009年12月9日 优先权日2008年12月9日
发明者乔纳·M.·阿尔本, 布赖恩·基思·朗根多夫, 戴维·B.·格拉斯科, 迈克尔·布赖恩·考克斯 申请人:辉达公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1