用于缓存操作的方法、装置和系统的制作方法

文档序号:6553948阅读:152来源:国知局
专利名称:用于缓存操作的方法、装置和系统的制作方法
用于缓存操作的方法、装置和系统技术领域这里所提供的启示涉及数据处理,并且尤其涉及软件缓存操作(caching)。
技术背景分组处理的唯一挑战是保持稳定性,同时对于较差情况下的通信 量情形,令吞吐量最大化而令延迟(latency)最小化。另一方面,与网 络处理器内单个外部存储器访问相关的延迟通常大于较差情况下的 服务时间。因此,通常用具有多个处理器的高度并行的架构来实现现 代的网络处理器。每个处理器可以支持多个处理线程(应用)。此外,为了隐藏长的存储器访问延迟,网络应用也可以是高度并 行的,并且通常其是多线程的(multi-threaded)和/或多处理的 (multi-processed)。每当新分组到达网络处理器时,就通过该网络处理 器内的新线程,对该分组执行一系列任务(例如,分组接收、路由表 查找、消息入队等等)。然而,对于分组处理,与全局数据或者分组 相关的更新必须按照预定义的线程顺序并且按照原子的形式来执行, 以便确保在可以对该数据或分组进行更新的多个竞争线程之中保持 该分组处理的完整性。为了确保分组处理完整性,典型地在网络处理器内对于全局数据 或者分组实现有序的分段或更新处理。在该处理过程中,按照接收这 些分组的顺序将分组分配给一连串的线程。每个线程在进入其有序分 段更新处理之前,必须等待来自前一个线程的信号;在接收到该信号 之后,等待中的线程可以读取数据或者分组,对其进行修改,并将其 写回到存储器中,并且随后向下一个等待的线程发送完成信号。该处理对非易变(non-voktile)的操作造成延迟,例如与读操作相 关的延迟,即使利用多线程和/或多处理环境也不能隐藏该延迟。


图1A和IB是根据一个示例性实施例,关于在多线程和多处理 环境中的数据处理的图。图2是根据一个示例性实施例,在多线程和多处理环境中的数据 处理过程中所使用的缓存系统的图。图3A和3B是一个根据示例性实施例,关于在多线程和多处理 环境中使用不同和相同的内容可寻址存储单元来进行数据处理的图。图4A和4B是一个根据示例性实施例,关于在多线程和多处理 环境中进行数据处理时发生的死锁的图。图5示出了根据一个示例性实施例的软件控制的缓存操作,其用 于对正在多线程和多处理环境中处理的数据进行更新。图6示出了根据一个示例性实施例的一种在多个线程之间自动实 现软件控制的缓存操作的方法,其中所述多个线程在多线程和多处理 环境中对数据进行处理。图7示出了根据一个示例性实施例的在多个线程之间确定合格性 (eligibility)和干扰状况的方法,其中所述多个线程在多线程和多处理 环境中对数据进行处理。图8示出了根据一个示例性实施例的用于在多线程和多处理环境 中针对正进行处理的数据,使用多个高速缓存插入软件缓存操作代码 的方法。图9示出了根据一个示例性实施例的用于在多线程和多处理环境 中对数据进行缓存和处理的方法。图10示出了根据一个示例性实施例的用于修改高速缓存服务以 按照图9中所述的方式来处理数据的方法。图11示出了根据一个示例性实施例的缓存装置。图12示出了根据一个示例性实施例的缓存系统。
具体实施方式
图1A和1B是根据一个示例性实施例,关于在多线程和多处理
环境中的全局数据处理的图。图1A和IB图描述了多个处理器内的 多个线程的处理,从线程0和处理器0开始。在图1A和IB的右侧 显示了这两个图合在一起的图例。该处理与正在多线程和多处理环境中处理的全局数据或分组相 关,在该环境中,每个线程都希望访问该数据或分组,并且每个线程 都有可能修改或更新该数据或分组。该处理(此后称为"对于共享数 据的更新处理")被实现为图IB中的软件控制的缓存操作指令,存在 于机器可访问的和可读的介质内,并且是可通过网络来访问的。该网 络可以是有线的、无线的或者有线和无线的组合。在图1A中,每^^线程最开始等待一个信号,该信号指示能够从 高速缓存中读取希望的全局数据或分组。从图1A可以看出,直到在 先的线程完成了对该数据所希望做出的任意改变并且将该数据写回 到高速缓存,下一个线程才获得对该数据的读访问权。对于对该数据 没有更新权限的每个线程来说,这造成了存储器访问延迟。通过图1B中所描述的处理来隐藏与图1A的处理相关的延迟。 更具体地说,图1B中的对于共享高速缓存的更新处理允许给定处理 器中的每个线程在任意特定线程获得对该高速缓存内的数据的更新 (易变的(volatile))访问权之前,出于读取的目的而获得该数据。例如, 处理器0的线程0-3中的每一个连续地或者实质上并行地彼此传递信 号,直到线程0-3中的每一个都有对高速缓存内的该数据的引用为止。 然而,在线程O对高速缓存内的该数据进行其易变操作之前,该线程 一直等待,直到它从最后一个线程3接收到信号为止。处理器1内从线程3到线程0的信号通知线程0:现在处理器0 中的所有线程0-3都对该数据进行了读访问,并且现在可以允许线程 O对高速缓存内的该数据执行易变(写)操作。在此时,线程0对高速 缓存内的该数据具有排它的写访问权。在线程0对于高速缓存内的该 数据具有排它的写访问权的同时,剩余的线程对于高速缓存内的相同数据具有读访问权。一旦线程0修改了该数据并且将对该数据的改变写回到高速缓 存,线程O就向下一个线程(线程l)发送信号,该信号给予下一个线
程对于高速缓存内的该数据的排它的写访问权。继续这个处理,直到最后一个线程(线程3)对高速缓存内的该数据执行了其更新,并且将 一个信号发送给下一个处理器(处理器l)及其初始线程(线程0)。可以 对N-1个处理器连续进行这种处理,这些处理器中的每一个具有Y-1 个线程,其中N和Y是从O开始的整数。图1B的对于共享高速缓存的更新处理得以实现,是因为读操作 是非易变的、并且典型地是在发生高速缓存缺失(cache miss)时由处理 器所发出的。因此,如果多个线程希望访问相同的全局数据或分组, 那么当每个线程最初请求访问该数据时,并未发生高速缓存缺失,并 且实质上可以向给定处理器内的每个线程并行地提供对于高速缓存 内的该数据的引用。另一方面,如果发生高速缓存缺失,那么多个线 程希望访问不同的数据或分组,并且可以实质上并行地将数据加载到 高速缓存中。这为在多线程环境下最初获得对于数据的访问减少了延 迟。可以将图1B的对于共享高速缓存的更新处理以网络处理器中的 软件控制的缓存操作实现为具有两个阶段的处理过程读取阶段和更 新阶段。图2示出了根据一个示例性实施例的在多线程和多处理环境中 的数据处理过程中所使用的缓存系统200。在处理器(例如,网络处理 器)环境下,缓存系统200被实现在机器可访问的和可读的介质中。缓存系统200包括内容可寻址存储器(CAM) 210和局部存储器 220。对CAM 220和局部存储器220进行编程,以提供图1B中所描 述的软件控制的缓存操作。CAM 210包括最近最少使用(LRU)逻辑211以及多个条目(entry) 212。条目212存储特定的被缓存的数据条目行的状态和标签部分。 LRU逻辑211维护在CAM 210中所用条目的按时间排序的列表。局部存储器220可以是索引的寄存器文件221,其中可以存储高 速缓存行的数据部分222。每个相关的高速缓存操作(例如,査找标签 230、加载数据、写回数据等等)都受软件的控制。在一个实施例中,可以将CAM210划分成多个逻辑CAM210。
这使得可以在一个线程中进行多个不对等的缓存操作。用指令来对软件控制的缓存系统200进行编程,以执行图IB所 图示的对于对共享高速缓存的更新处理。可以将该更新处理形象化为 两阶段的处理过程,读取阶段和更新阶段。每个线程在更新阶段开始 之前完成读取阶段。此外,可以将读取阶段并行地或者实质上并行地 提供给每个线程。即,对于读取阶段的完成,关于最初获得对高速缓 存中的数据的读访问权,每个线程经历很少延迟甚至没有经历延迟。图3A和3B是根据一个示例性实施例,关于在多线程和多处理 环境中,使用不同和相同的内容可寻址存储单元(CAM)来对数据进行 处理的图。在机器可访问的和可读的介质中实现该处理。图3A描述了使用不同的逻辑CAM的可扩充的缓存操作。在图 3A中,使用不同CAM的两个更新过程被在图3A中垂直地彼此分开。 这两个更新过程彼此独立地执行,并且不必从彼此接收信号以便继续 进行。用类似于针对图1B所论述的方式, 一旦单个更新处理过程中 处理器0的最后一个线程3具有了读引用,它就向初始线程0发送信 号,从而线程O就可以对该逻辑CAM内的该数据执行易变操作。一 旦最后一个线程3完成了它对该数据的易变操作,就从处理器0的线 程3发送信号到处理器1的线程0。图3B描述了使用多个相同的逻辑CAM的可扩充的缓存操作。 利用图3B, 一旦处理器0的线程3在第一更新过程中完成了它对数 据的易变处理,就将一个信号从线程3发送到处理器1的线程0,而 将另一个信号发送到处理器0的线程0以用于第二更新过程。也就是 说,如果不同的缓存操作使用相同的逻辑CAM,则应该将不同的缓 存操作协调为在处理器中的任意线程可以执行第二缓存操作之前, 该处理器中的所有线程都完成了第一缓存操作。图4A和4B是根据一个示例性实施例,关于在多线程和多处理 环境中进行数据处理时发生的死锁的图。利用软件控制的缓存操作,处理器中的第一个线程可以等待来自 该处理器中的最后一个线程的信号。图1B中表明了这种等待,其中 线程O在进入针对高速缓存中的数据的更新阶段之前,等待来自线程
3的信号。作为另一个实例,考虑到如果如图4A所示来实现更新处 理,则线程的执行将永远不会超出图4B所示的情况。因此,在确定 了与应用的线程相关的更新处理不存在死锁之后,应当实现软件控制 的缓存操作。图5示出了根据一个示例性实施例的软件控制的缓存操作方法 500,该方法用于在多线程和多处理环境中对正在处理的数据进行更 新。该软件控制的缓存操作被实现在机器可访问的和可读的介质中。不用软件控制的缓存操作过程的话,在对全局数据或分组进行更 新的任意线程路径中,对于更新阶段,有一个AWAIT操作(等待)和 一个ADVANCE操作(前进)。此外,全局状态的任意更新都包括在该 处理的更新阶段中。因此,在最终得到的软件控制的处理过程中,在 任意给定执行路径中的每个更新操作之前和之后,分别执行一次高速 缓存查找和写回操作。此外,如果在给定执行路径中没有执行访问以 便更新高速缓存数据,那么使用针对相应读取阶段的空更新阶段。这 可以用图5中所述的逻辑来说明。在510, 一个处理线程在进行更新处理之前等待信号"s", 一旦 更新处理完成,就将"s"信号传输到下一个等待的线程。如果对于 给定线程,不发生更新处理,那么,在520,处理线程等待信号"s", 然后通过将信号"s"传输到下一个线程来推进"s"。530和540中描述了组合的读出和更新处理阶段。这里,在530, 特定线程在请求其数据之前等待信号"t",如果检测到了高速缓存缺 失,那么这指示以前的线程并没有请求该数据;否则,不会发生高速 缓存缺失,并且该数据通过引用已经在高速缓存中。 一旦一个线程对 希望的数据进行了读访问,该线程立即将信号"t"传递到下一个线 程,然后等待"t"回来。当"t"回来时,这指示该线程现在可以更 新高速缓存中的该数据并且具有排它的控制。当更新完成时,将"t" 推进到正在等待对高速缓存中的该数据进行易变访问的下一个线程。 如果任意给定线程不想对该高速缓存数据执行易变操作,那么,在 540,该线程对于读取阶段和空更新阶段都仅仅等待并转发一次信号
可以将图1A中描述的单个更新处理阶段转换成如图IB中所描 述的读取阶段和更新阶段的双阶段。为此,在准许给定线程进行易变 访问之前,插入高速缓存查找和缺失时读(read-at-miss),并且将原始 的更新阶段修改为包括另一个AWAIT和ADVANCE。将所有对数据 的全局状态的访问改变为对被缓存的数据的引用,并且在ADVANCE 之前执行写回操作。图6示出了根据一个示例性实施例的方法600,该方法用于在多 线程和多处理环境下在处理数据的多个线程之间自动实现软件控制 的缓存操作。方法600(此后称为"缓存服务")被实现在机器可访问 的和机器可读的介质中,并且可以作为电磁信号而在网络上访问。该 网络可以是有线的、无线的或者有线和无线的组合。该缓存服务首先检测可能由上述软件控制的缓存操作引入的死 锁状况。当初始的或者第一个线程等待来自最后一个线程的信号,并 且一个不同的线程正在等待来自第一个线程的信号时,出现循环等 待。特定处理器中的第一个线程在两种状况下等待来自最后一个线程 的信号。在第一种状况中,当第一个线程到达第二阶段的AWAIT,而最 后一个线程还没有到达第一阶段的ADVANCE时,第一个线程等待 来自最后一个线程的信号。通过在图1B中处理器0的线程0等待来 自处理器0的线程3的信号,对此进行了说明。在这种情况下,直到 最后一个线程通过了第一阶段的ADVANCE之后,其它线程才能在 其执行中通过第二阶段(更新阶段)的AWAIT。如果没有其它线程等待 来自第一个线程的信号,则在该软件控制的缓存操作过程中不存在死 锁。由于在处理流程中,第一阶段(读取阶段)的ADVANCE是在第二 阶段(更新阶段)的AWAIT之前,所以如果存在从AWAIT "s"(线程 之间传递的信号)到第二阶段的AWAIT的路径,则程序在第一状况下 不存在死锁,其中从源到第二阶段的AWAIT的每一个路径都包括 ADVANCE "s";否则,该特定更新并不适合于软件控制的缓存操作。死锁的第二种状况发生在使用相同的局部CAM并且正按照预定
义的顺序执行的两个单独的软件控制的缓存操作过程中。例如,当第一个线程到达第二缓存操作过程的第一阶段的AWAIT、而最后一个 线程还未到达第一缓存操作过程的第二阶段的ADVANCE时,第一 个线程等待来自最后一个线程的信号。图3B中示出了这个状况。在这种情况下,其它线程在其执行中不能通过第二缓存操作过程 的第一阶段的AWAIT,直到最后一个线程通过了第一缓存操作过程 的第二阶段的ADVANCE。如果剩余线程中没有一个等待来自第一个 线程的信号,则在该处理过程中不存在死锁。如果存在从AWAIT "s"到第二缓存操作过程的第一阶段的 AWAIT的路径、或者存在从AWAIT "s"到第一缓存操作过程的第 二阶段的ADVANCE的路径,则程序在第二种状况下没有死锁,其 中从源到第二缓存操作过程的第一阶段的AWAIT的每一个路径都包 括ADVANCE "s";否则,无法用相同的逻辑CAM来对两个更新进 行缓存,并且它们被认为彼此干扰。在该软件控制的缓存操作过程期间,可以尝试对与特定数据片段 相关的全局状态的多个合格的更新进行缓存。可以用不同的逻辑 CAM来对两个更新进行缓存;然而,如果更新会互相干扰,则无法 用相同的逻辑CAM来对其进行缓存。因此,可以将高速缓存中的数 据的转变表示为干扰图,以检测合格的更新,并且可以进行着色算法, 以将合适的逻辑CAM分配给每个合格的更新。缓存服务提供了转变处理,以检测使用多个CAM的数据上的干 扰状况。在610,根据操纵数据的线程的执行路径,计算与该数据的 全局状态相关的更新的合格性以及合格的更新之间的干扰关系。在 620,使用可用的逻辑CAM来进行着色算法。接下来,在630,为执 行路径插入适当的高速缓存代码。现在将通过图7和8来更详细地论 述该处理的细节。图7示出了根据一个示例性实施例的另一个方法700,该方法用 于在多线程和多处理环境下在处理数据的多个线程之间确定合格性 和干扰关系。方法700(此后称为"干扰关系检测服务")被实现在机 器可访问的和机器可读的介质中,并且可以通过网络来访问。该千扰
关系检测服务扩展了图6的610的处理,以进一步示出如何计算或确定更新的合格性和干扰关系。在710,对于每个信号"s",执行计算以检查AWAIT—REQUIRED(s) 的集合(其中信号"t"具有从AWAIT(t)到AWAIT(s)的路径)、以及 ADVANCE一REQUIRED(s)的集合(其中信号"t"具有从AWAIT(t)到 ADVANCE(s)的路径)。可以用前向析取数据流分析(forward disjunctive dataflow analysis)来计算集合AWAIT—REQUIRED(s)和 ADVANCE—REQUIRED(s)。因此,对于每个指令"n",数据流公式 可以如下GEN[n]叫信号"t" I指令"n"是AWAIT(t));以及 KILL[n] = {}。最后,AWAIT_REQUIRED(s)=并集IN[n],其中"n"是AWAIT(s), 并且ADVANCE_REQUIRED(s)=并集IN[m],其中"m"是 ADVANCE(s)。在720,对于每个信号"s",执行计算以检査集合 AWAIT—AVAILABLE(s),其中信号"t"使得从源到AWAIT(s)的任意 路径包括ADVANCE(t)。可以用前向析取数据流分析来计算集合 AWAIT一AVAILABLE(s)。因此,对于每个指令"n",数据流公式可以变为GEN[n]^M信号"t" I指令"n"是ADVANCE (t)};以及 KIIX[n〗={ }。最后,AWAIT—AVAILABLE(s)=交集IN[n],其中"n"是AWAIT(s)。 在730,使用在以上710和720所计算的集合,来计算全局状态 的每个更新的合格性。在将一个更新进行缓存之后,其更新部分的原 始AWAIT被用第二阶段(更新阶段)的AWAIT来替换。因此,在730,对于原来由更新阶段保护的并且用信号"s"实现的全局状态的更新, 如果AWAH!REQUIRED(s)是AWAIT—AVAILABLE(s)的子集,则该 更新对于缓存操作是合格的。对于原来由更新阶段保护的并且分别用信号"s"和"t"实现的 两个合格的更新;或者"s"是在AWAIT一REQUIRED(t)中,或者"t"
是在AWAIT—REQUIRED(s)中。在740,可以如下计算干扰关系(1) 如果"s "在AWAIT—REQUIRED(t)中并且"t "在 AWAIT一REQUIRED(s)中,那么它们互相干扰。在这种情况下, 这两个更新被在不同的控制流路径中按照不同的顺序来执行,并 且无法被使用相同的逻辑CAM按照预定义的顺序进行缓存。(2) 如果"s "在AWAIT一REQUIRED(t)中而"t "不在 AWAIT—REQUIRED(s)中,那么如果AWAIT—REQUIRED(t)是 AWAIT—AVAILABLE(t)的子集并且ADVANCE—REQUIRED(s)是 AWAIT—AVAILABLE(t)的子集,那么这两个合格的更新并不会互 相干扰。在这种情况下,在任意控制流路径中在与信号"t"相 关的更新之前执行与信号"s"相关的更新。此外,由于这两个 更新都是合格的,确保了 AWAIT一REQUIRED(t)是 AWAn^AVAILABLE(t)的子集,因此仅需要检查第二种状况。(3) 如果"s "不在AWAIT_REQUIRED(t)中而"t "在 AWAIT—REQUIRED(s)中,那么如果AWAIT—REQUIRED(s)是 AWAIT—AVAILABLE(s)的子集并且ADVANCE—REQUIRED(t)是 AWAIT一AVAILABLE(s)的子集,则这两个更新并不会互相干扰。 图7中所给出的干扰关系检测服务的处理详细描述了图6的610的处理。620的处理为通过干扰关系检测服务计算和确定的合格的更 新建立了干扰图。此外,620的处理尝试用可用的逻辑CAM来对该 图进行着色。如果不能对特定更新着色,则不能将其进行缓存。如果 可以对特定更新着色,那么用对其进行着色的逻辑CAM来将其进行 缓存。图8中更完整地描述了图6的630的处理。图8示出了根据一个示例性实施例的一种方法,该方法用于在多 线程和多处理环境下针对正在处理的数据,使用多个高速缓存来插入 软件缓存操作代码。方法800(此后称为"高速缓存编码插入服务") 被实现在机器可访问的和机器可读的介质中,并且可以通过网络来访 问。该高速缓存编码插入服务的处理更详细地描述了图6中所示的 630的处理。该高速缓存编码插入服务向软件控制的缓存操作中所使用的线
程引入了一个不同的信号;为每个逻辑CAM引入了该不同的信号。 该软件控制的缓存操作还对用特定逻辑CAM着色的每个合格的更新 实现了软件控制的缓存操作。因此,通过图8中所描述的高速缓存编 码插入服务,对每个全局状态的更新进行处理,其中所述更新原来是 由用信号"s"实现的更新阶段来保护的,所述信号"s"是要用与信 号"t"相关的逻辑CAM来进行缓存的。在810,进行计算,以检查闭集AW-"n",其中n是AWAIT(s), 并且可以得到对全局状态的访问,或者"n"可以得到集合AD中的 ADVANCE(s)。集合AD-"m",其中可以通过访问全局状态来得到 "m",或者可以通过集合AW中的AWAIT(s)来得到"m"。可以使用 两个析取数据流分析, 一个前向一个后向,来计算集合AW和AD。 两个集合AW和AD实质上是希望进行被缓存读(cached-read)和写回 操作的部分。在820,把被缓存读操作插入到软件控制的缓存操作过程中的适 当的位置。因此,对于集合AW中的每个AWAIT(s),软件控制的缓 存操作的第一阶段(读取阶段)(带有高速缓存査找操作和缺失时读操 作)被自动插入到紧接在AWAIT(s)之前。在830,检测一个线程的处理流程,其中该线程并未在对被缓存 的数据执行易变的或者非易变的操作。对于这个情形,造成了空的高 速缓存读取阶段,如以上图5所述。因此,对于不在集合AW中的每 个AWAIT(s);将空体插入第一阶段(高速缓存读取部分或阶段)。换句 话说,在830,无条件地传递信号,并且高速缓存读取部分或阶段为 空的。在840,将写回操作插入到一个线程的处理流程中,其中该线程 正在对被缓存的数据执行易变操作。相应地,对于集合AD中的每个 ADVANCE(s),将写回操作插入到紧接在ADVANCE(s)之前,以确保 在ADVANCE发生之前将该数据写回到高速缓存。850和860的处理改变了软件控制的缓存操作流程中的信号传 递,以按照图1B所展示的方式来实现更新阶段或部分。最后,在870,将这些线程对于数据所做出的原始访问改变为引
用被缓存的数据的访问。在870之后,可以可选地实现其它优化,例 如部分冗余消除和复制转发(copy-forwarding),以便优化所生成的、 由高速缓存编码插入服务插入的被缓存的代码。该高速缓存编码插入服务的处理描述了如何将用于实现这里所 给出的软件控制的缓存操作的处理逻辑实现在现有的与访问相同数 据的线程相关的处理流程中。最终得到的软件控制的缓存操作通过实 质上为第一阶段中的所有线程并行地提供了对于高速缓存中的数据 的读访问,改善了线程处理的效率。然后对第二阶段或者更新阶段进 行排序和检查,以确保不存在死锁或者干扰状况,并确保更新以原子 的形式发生。图9示出了根据一个示例性实施例的方法900,该方法用于在多 线程和多处理环境下对数据进行缓存和处理。方法卯0 (此后称为"软 件控制的缓存服务")被实现在机器可访问的和机器可读的介质中, 并且可以通过网络来访问。该软件控制的缓存服务表示在多线程和 (可选的)多处理环境下对正在被多个线程引用的数据进行的处理。也 就是,可以在单个处理器上加载和处理该软件控制的缓存服务,或者 通过多个处理器来对其进行处理,如911所述。在910,将对于高速缓存中所保存的数据的引用传递到初始线程。 响应于初始线程从存储器或存储装置读取该数据的尝试,该数据被读 入高速缓存中由该引用所标识的位置上。这生成了缺失时读指令,该 指令命令软件控制的缓存服务最初从本地存储器或存储位置获得希 望的数据、并且将其放入高速缓存中的引用位置上。在一个实施例中,通过修改与多个线程相关的缓存操作过程来完 成910所描述的处理,从而,在912,计算多个线程之间的更新的合 格性。在913,对这些更新的干扰图进行着色,并且在914,将高速 缓存代码自动地插入到这些线程的缓存操作过程中,以提供双阶段处 理; 一个用于非易变读取而一个用于易变操作。因此,可以将软件控 制的缓存服务视为两个不同的处理过程, 一个用于自动地建立双阶段 缓存操作过程(如912-914所示), 一个用于在线程执行期间实现该双 阶段(如910和920至941所示)。上面已经参照图6-8详细论述了用 于计算更新合格性、对干扰图进行着色以及插入高速缓存代码的技 术。在920,将对于该数据的引用迭代地传递给零个或更多中间线程, 直到最后一个线程。在初始线程的环境中对中间线程和最后一个线程 中的每一个进行处理,并且每个都正在请求访问该数据。可以并行地或者实质上并行地将对由引用位置所标识的、位于高速缓存内的该数 据的引用传递到中间线程和最后一个线程,使得这些线程在由软件控 制的缓存服务来提供对于该数据的引用之前不会经历任何显著的延 迟。一旦最后一个线程获得对高速缓存内的该数据的引用,在930, 最后一个线程发送信号到初始线程,通知初始线程现在可以对高速缓 存内该引用位置上的数据执行易变操作。在初始线程对该数据进行了 修改、并且将改变写回到高速缓存中该引用位置上之后,在931,初 始线程将信号传递到下一个线程。下一个线程是中间线程中之一或者 是最后一个线程。如果在932,下一个线程不是最后一个线程,那么特定线程为了 执行易变操作而获得对于该数据的排它的且原子的访问的处理过程 可以顺序地迭代,直到最后一个线程获得了对于该数据的易变访问并 且对高速缓存中的该数据做出了其希望的改变。因此,下一个线程担 任初始线程在单次迭代期间的角色,并且当下一个线程将改变写回到 高速缓存内的引用位置时,它向新的下一个线程发信号。这个过程一 直持续,直到每个线程对高速缓存内的该数据执行了它想要的改变 (如果有的话)为止。因此,在940,在单次迭代期间,可以对该数据进行修改并且将 其写回到高速缓存中的引用位置上。在一个实施例中,在941,可以 对该高速缓存以及对于同样保存该数据的其它高速缓存执行更新。以 上给出了用于协调多个相同或者不同的高速缓存(例如CAM)上的更 新的技术。图IO示出了一个根据示例性实施例的方法IOOO,该方法用于修 改高速缓存服务,以按照图9中所述的方式来处理数据。方法1000
被实现在机器可访问的和机器可读的介质中。当通过机器来进行处理时,这些指令执行图10中所描述的处理。这些指令可以存在于可移动的介质上并且连接到机器,在此它们 被上传并通过该机器来处理。可替换地,可以将这些指令预制在机器 的存储器或存储装置中,并且通过机器来执行。在另外的实施例中, 可以通过网络从一个机器下载这些指令,并且安装在另一个用于处理 这些指令的机器上。在另外的实施例中,可以在另一个机器的指导下, 经过网络在一个机器上远程地执行这些指令。此外,这些指令对多个 线程进行处理,并且在一些可选择的实施例中,这些指令可以在与一个或者多个机器相关的多个处理器上进行处理,如1011所示。在010,如果线程的处理是不受干扰的并且是有资格进行更新,则所述指令对缓存服务的易变或更新阶段进行修改,以创建一个两阶 段处理过程。用于生成该两阶段处理过程的初始的和自动的过程发生在1012。也就是,在1013,所述指令计算这些线程的更新的合格性, 对更新的干扰图着色,并且将高速缓存代码插入到这些线程的缓存操 作过程中,以产生该两阶段处理过程。第一阶段是关于将多个线程所请求的数据读入到高速缓存中,并 且将对于该数据的高速缓存引用提供给每个线程。第二阶段通过维持 何时给予特定线程对于该数据的排它控制权以便执行写入操作(易变 操作)的顺序,来控制对于高速缓存内的该数据的易变或更新访问。在1020,在第一阶段(读取阶段)期间,将对于高速缓存中的数据 的引用传递到每个线程。对于初始线程,发生缺失时读操作,其控制 所述指令最初从其本地存储器或存储位置获得该数据。随后在1021, 以实质上并行的方式,连续地将对于高速缓存内的该数据的引用传递 到剩余的每个线程,包括零个或更多的中间线程以及最后一个线程。在1030, 一旦最后一个线程具有对于高速缓存内的该数据的引 用,其向初始线程发出信号。这将缓存操作从读取阶段转变为更新阶 段(第二阶段)。在第二阶段期间,在1040, 一旦特定线程对高速缓存内的该数 据完成了更新或者执行了易变操作,每个线程串行地向下一个线程发
信号。在一个实施例中,在1041,可以响应于何时线程请求访问该 数据,确定这些线程的优先级顺序。因此,由于初始线程做出对于该 数据的第一个请求并且生成了由指令所执行的缺失时读操作,所以初 始线程是第一个线程。在一个实施例中,在1042,特定线程对于该数据的每个更新可 以针对该高速缓存发生、以及同时针对不同的高速缓存发生。因此, 可以在多个高速缓存上同步对该数据的更新。如上所述,高速缓存可 以是相同的逻辑CAM或者不同的CAM。图11示出了根据一个示例性实施例的缓存装置1100。缓存装置 1100被实现在机器可访问的和机器可读的介质中,并且可选地,可 以经过网络作为电磁信号来访问。缓存装置1100包括高速缓存控制器1101和处理器1102。处理器 1102将高速缓存控制器1101执行为软件指令,并且高速缓存控制器 1101对正由多个线程1103A-1103B请求的数据访问进行处理。处理 器1102还执行多个线程1103-1103B。高速缓存控制器1101分别执行上述关于图9和10的方法900和 1000的处理。也就是说,对于多个线程1103A-U03B所请求的数据, 高速缓存控制器1101向多个线程1103A-1103B提供双阶段缓存操作 技术。在第一阶段中,当遇到缺失时读操作时或者当初始线程1103A 正在初始请求该数据时,将该数据读入高速缓存中的引用位置。当将 数据读入高速缓存之后,将对于该数据的引用实质上并行地传输到所 有剩余线程1103B。 一旦最后一个线程1103B具有了对于高速缓存中 的该数据的读取引用或访问引用,那么最后一个线程1103B发送信号 到第一个线程1103A。高速缓存控制器1101管理信号传递和流程。 初始线程1103A随后获得对于高速缓存内的该数据的排它的且原子 的易变访问,并且做出改变,并将改变写回到高速缓存。接下来,初 始线程1103A向下一个线程1103B发送信号,以向下一个线程1103B 指示下一个线程1103B对于高速缓存内的该数据具有排它的易变访 问。这以串行的方式持续,直到最后一个线程1103B完成了其对于高
速缓存内的该数据的更新。这时,可选地可以将信号发送到在不同的 处理器上的不同的线程处理。在一个实施例中,高速缓存控制器1101可以将对该高速缓存中的该数据的所做的改变与多个另外的高速缓存进行同步。此外,在一些情况下,另外的高速缓存可以存在于与处理器1102不同的处理器 上。在另一个实施例中,高速缓存控制器1101可以检查线程 1103A-1103B的处理流程,并且判定两个或多个线程互相干扰,从而 可能存在死锁状况。在这些实施例中,高速缓存控制器1101可以从 高速缓存中移除该数据,并且命令线程1103A-1103B通过不同的或者 合适的访问机制,从与该数据相关的存储器或者存储装置获得该数 据。图12示出了根据一个示例性实施例的缓存系统1200。缓存系统 1200被实现在机器可访问的和机器可读的介质中。缓存系统1200包 括图11的缓存装置1100,并且包括额外的组件。更具体地说,缓存系统1200包括高速缓存控制器1201、处理器 1202以及显示器1203。处理器1202执行高速缓存控制器1201和希 望访问数据的多个线程1203A-1203B。缓存系统1200还可以包括打 印机1204和日志1205。将依次对这些组件中的每一个进行说明。高速缓存控制器1201执行以上所示的关于图11的高速缓存控制 器1101的技术。类似地,处理器1202执行以上所示的关于图11的 处理器1102的处理。线程1203A-1203B对数据进行操作,并且按照 以上所示的关于图11的线程1103A-1103B的方式,经由高速缓存从 高速缓存控制器1201获得数据。显示器1203展现与高速缓存控制器1201相关或者与正由高速缓 存控制器1201管理的一个或'多个高速缓存相关的状态或结果。在一个实施例中,缓存系统1200还包括打印机1204。打印机1204 打印与高速缓存控制器1201相关或者与正由高速缓存控制器1201管 理的一个或多个高速缓存相关的状态或结果。在另一个实施例中,缓存系统1200包括日志1205。日志1205
在存储器或者存储装置中记录或保存与高速缓存控制器1201的操作 相关或者与正由高速缓存控制器1201管理的一个或多个高速缓存相 关的状态或结果。上述说明是示例性的而不是限制性的。当阅读了上述说明时,对 于本领域技术人员来说,许多其它的实施例将是显而易见的。因此本 发明的实施例的范围应当是根据所附权利要求、连同这些权利要求拥 有权利的等价物的完整范围来确定的。遵照37.(^凡§ 1.72(b),提供了摘要,以便令读者能够迅速地确 定本技术公开的性质和要点。要理解的是,尽管提交了该摘要,但是 它并不会被用于解释或限制权利要求的范围和含义。在对实施例的上述说明中,为了简化公开内容,而将各种特征集 合到了单个实施例中。不应将该公开方法解释为反映出本发明所要求 保护的实施例要具有比每项权利要求中明确记载的特征还多的特征。 而是,如以下权利要求所反映的,发明主题可以在于少于单个公开的 实施例的所有特征。因此,以下权利要求被并入具体实施方式
部分中, 其中每个权利要求自己代表一个单独的示例性实施例。
权利要求
1、一种方法,包括将对高速缓存中的数据的引用传递到初始线程;将所述引用迭代地传递到下一个线程,直到到达最后一个线程为止,其中所述下一个线程包括中间线程和所述最后一个线程中的一个;从所述最后一个线程向所述初始线程发送信号,告知所述初始线程可以对所述高速缓存中的所述数据执行初始易变操作;以及在所述初始易变操作在所述高速缓存内完成更新之后,从所述初始线程向所述下一个线程发送信号,告知所述下一个线程有资格针对所述数据执行下一个易变操作。
2、 如权利要求1所述的方法,进一步包括在针对所述数据发 生了对所述高速缓存的更新之后,迭代地从所述下一个线程向新的下 一个线程发送信号,直到到达所述最后一个线程为止。
3、 如权利要求l所述的方法,进一步包括计算用于进行更新的所述初始线程、零个或更多中间线程、以及所述最后一个线程的更新的合格性;对所述初始线程、所述零个或更多中间线程、以及所述最后一个 线程的更新干扰图进行着色,其中,所述干扰图包括所述初始线程、 所述零个或更多中间线程、以及所述最后一个线程的干扰关系;以及如果合格性存在的话,则插入高速缓存代码,其中,所述高速缓 存代码自动允许进行所述方法的处理。
4、 如权利要求3所述的方法,其中,所述着色进一步包括使 用与所述初始线程、所述零个或更多中间线程、以及所述最后一个线 程相关的可用的逻辑内容可寻址存储器(CAM)单元。
5、 如权利要求l所述的方法,其中,发送信号进一步包括-通过所述初始线程来修改所述数据;以及 将所述数据作为已修改的数据写回到所述高速缓存中所述引用的位置。
6、 如权利要求1所述的方法,进一步包括在多个处理器上执 行所述方法。
7、 如权利要求1所述的方法,进一步包括针对所述高速缓存和一个或多个额外的高速缓存执行所述更新,其中所述额外的高速缓 存是由零个或更多中间线程或所述最后一个线程所使用的。
8、 一种具有相关指令的机器可访问的介质,所述指令当被执行时,使得机器执行如果与多个线程相关的处理不会受到干扰并且有资格进行修改,则自动地修改缓存服务的易变阶段,以包括第一阶段和第二阶段;在第一阶段期间,将对于高速缓存中的数据的引用传递到所述多个线程,包括初始线程、零个或更多中间线程、以及最后一个线程; 一旦所述最后一个线程具有了所述引用,就从所述最后一个线程向第一个线程发送信号;以及在所述第二阶段期间, 一旦当前的处理线程已在所述高速缓存中更新了对所述数据的修改,就串行地从始于所述初始线程的每一个线程发送信号。
9、 如权利要求8所述的介质,进一步包括用于执行以下操作的 指令在多个处理器上执行所述指令,其中,每个处理器包括不同的 高速缓存。
10、 如权利要求9所述的介质,进一步包括用于执行以下操作的指令在所述高速缓存和所述不同的高速缓存中对针对所述数据发生 的更新进行同步。
11、 如权利要求8所述的介质,进一步包括用于执行以下操作的指令计算所述多个线程的全局状态更新的合格性以及所述更新之间 的干扰关系;使用可用的逻辑内容可寻址存储器单元来对所述多个线程的干 扰图进行着色,其中,所述干扰图包括所述多个线程的干扰关系;以 及将高速缓存代码插入到与所述多个线程相关的处理中,以执行所 述介质的指令。
12、 如权利要求11所述的介质,进一步包括用于执行以下操作 的指令对于所述线程中的每一个,实质上并行地执行所述第一阶段。
13、 如权利要求11所述的介质,进一步包括用于执行以下操作的指令确定所述线程执行所述第二阶段的优先级顺序。
14、 一种装置,包括高速缓存控制器,以及处理器,用于对所述高速缓存控制器进行处理,其中,所述高速 缓存控制器用于通过一个或多个高速缓存来管理多个线程的数据访 问,并且其中,所述高速缓存控制器用于执行第一阶段和第二阶段, 所述第一阶段用于将对所述- -个或多个高速缓存中的数据的引用提 供给所述多个线程中的每一个,所述第二阶段用于一旦特定线程对所 述一个或多个高速缓存中的所述数据进行了更新,就串行地向所述多 个线程中的每一个发送信号。
15、 如权利要求14所述的装置,其中,所述高速缓存控制器用 于判定所述多个线程中的两个或多个是否互相干扰,并且如果是,则 将所述数据从所述一个或多个高速缓存中移除。
16、 如权利要求14所述的装置,其中,高速缓存控制器用于在 所述一个或多个高速缓存内对针对所述数据的修改进行同步。
17、 如权利要求14所述的装置,其中,所述一个或多个高速缓 存中的若干个存在于一个或多个不同的处理器上。
18、 如权利要求14所述的装置,其中,所述第一阶段与针对所 述数据的非易变操作相关。
19、 如权利要求14所述的装置,其中,所述第二阶段与针对所 述数据的易变操作相关。
20、 如权利要求14所述的装置,其中,所述高速缓存控制器用 于将高速缓存代码插入到与所述多个线程相关的单阶段缓存操作过 程中,以自动地完成具有所述第一阶段和所述第二阶段的双阶段软件 控制的缓存操作过程。
全文摘要
提供了用于缓存操作的方法、装置和系统。响应于多个线程的更新合格性和干扰关系,自动地修改缓存操作过程。将数据读入高速缓存中,并且将对该数据的引用提供给多个线程。一旦最后一个线程具有了对该数据的引用,初始线程从最后一个线程接收信号。初始线程响应于该信号而修改该数据,并且在高速缓存内对该数据的变化进行更新,然后向下一个线程发送另一个信号,以指示下一个线程现在可以对高速缓存内的该数据执行易变操作。
文档编号G06F13/00GK101213527SQ200580050919
公开日2008年7月2日 申请日期2005年6月29日 优先权日2005年6月29日
发明者J·戴, L·李 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1