用于使用多个子锁来控制对具有读取器-写入器锁的共享数据结构的访问的系统和方法

文档序号:6498751阅读:89来源:国知局
用于使用多个子锁来控制对具有读取器-写入器锁的共享数据结构的访问的系统和方法
【专利摘要】一种用于控制对共享数据结构的访问的计算机系统,包括被耦合到第一和第二处理单元的共享存储器,其存储多锁以控制对共享数据结构的访问。该多锁包括与第一处理单元相关联的第一子锁和与第二处理单元相关联的第二子锁。该系统还包括数据访问控制引擎,其用以从第一处理单元接收用以从数据结构进行读取的请求,并且作为结果,确定在专用于第一处理单元的第一高速缓存器中是否存在第一子锁的私人可修改拷贝,如果在第一高速缓存器中存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分且不跨相干性总线传送该获取,并且如果在第一高速缓存器不存在第一子锁的私人可修改拷贝,则将第一子锁从共享存储器加载到第一高速缓存器中,选中第一子锁的其他拷贝,并获取第一子锁的读部分。
【专利说明】用于使用多个子锁来控制对具有读取器-写入器锁的共享数据结构的访问的系统和方法

【背景技术】
[0001]现代计算机通过使用多处理器管芯和(在某些情况下)单个管芯上的多个处理器核来实现增加的性能。为了利用这些改善的硬件布置,创建软件以在单个处理器核上同时地运行多个线程。

【专利附图】

【附图说明】
[0002]针对本发明的示例性实施方式的详细描述,现在将对附图进行参考,在所述附图中:
图1a和Ib示出了根据本公开的各种示例的用于控制对共享数据结构的访问的系统的替换框图;
图2a_2i示出了根据本公开的各种示例的示例性存储器图;
图3示出了根据本公开的各种示例的数据访问控制系统;
图4示出了根据本公开的各种示例的用于控制对共享数据结构的访问的方法的流程图;以及
图5示出了根据本公开的某些示例的示例性子锁打包方案。
[0003]表不法和命名法
遍及以下描述和权利要求使用某些术语来指示特定系统部件。本领域的技术人员将认识到计算机公司可用不同的名称来指示部件。本文并不意图区别在名称而非功能方面不同的部件。在以下讨论中和权利要求中,以开放末端方式使用术语“包括”和“包含”,并且因此应解释成意指“包括但不限于...”。并且,术语“耦合”意图指间接、直接、光学或无线电连接。因此,如果第一器件耦合到第二器件,则该连接可通过直接电连接、通过经由其他设备和连接的间接电连接、通过光学电连接或者通过无线电连接。
[0004]本文所使用的术语“处理单元”指的是执行计算任务的物理或逻辑资源。逻辑资源的示例包括线程和进程。物理资源的示例包括虚拟CPU核、物理CPU核、共享一个或多个高速缓存器层级的分组CPU核、公共管芯上的CPU核、公共多芯片模块上的CPU核、公共插座上的CPU核、链接CPU核以及公共底架中的CPU核。
[0005]本文所使用的术语“锁”在被用作名词时指的是用以提供对数据、特别是数据结构的同时访问的控制的机制。
[0006]本文所使用的术语“锁”在被用作动词时指的是其中处理单元告知其他处理单元其对与锁相关联的数据具有独有访问的动作。这也可称为“获取”锁。
[0007]本文所使用的术语“MESI”或“MESI协议”指的是其中高速缓存线被标记为已修改、独有、共享或无效的高速缓存相干性协议的一般使用系列。
[0008]本文所使用的术语“选中”指的是通知其他高速缓存器单元其保持的高速缓存线的拷贝可能不再被认为是最新的,并且如果其希望满足对所述线路的访问,则其必须首先更新其本身。例如,在MESI协议中,选中包括“广播无效”和“读取意图修改”消息。

【具体实施方式】
[0009]以下讨论针对本发明的各种示例。虽然这些示例中的一个或多个可以是优选的,但不应将公开的示例解释为或以其他方式被使用作为限制本公开的范围,包括权利要求。另外,本领域的技术人员将理解的是以下描述具有广泛的应用,并且任何实施例的讨论仅仅意图是该实施例的示例,并且并不意图宣布公开(包括权利要求)的范围局限于该实施例。
[0010]多个线程可对共享数据结构进行操作(例如,从其读取或向其写入)。在这种情况下,线程应相互协调,使得不会有超过一个线程同时地尝试向数据结构进行写入。锁是用于限制对共享数据结构的访问的同步机制,其使得处理单元(例如,线程、进程、硬件SMT上下文、CMP核、CPU)能够相互协调以避免其中超过一个处理单元同时地尝试向数据结构进行写入的情况。以简单形式,锁可具有读部分和写部分两者。写部分表示另一处理单元是否正在向与锁相关联的数据结构进行写入,并且可以是二进制的(例如,锁的低位表示处理单元正在向数据结构进行写入或者没有处理单元正在向数据结构进行写入)。读部分可采取计数器的形式,其在处理单元请求读取数据结构时递增并在处理单元停止读取数据结构时递减。在本示例中,一次可有多个处理单元读取数据结构。
[0011]在许多情况下,处理单元主要从该数据结构进行读取;然而,处理单元执行写(即,增加锁的读部分的值)以获取锁的读部分。例如,当处理单元获取(例如,增加)锁的读部分时,这通常被传送至其他处理单元,因为其他处理单元中的一个可能期望执行写,其直到锁的读部分被释放(例如,计数器值是零)之前不能发生。换言之,获取锁的读部分迫使写到其他处理单元以保持相干性。可以是从一个处理核到另一个的此通信称为“相干性业务”。相干性业务可导致性能瓶颈,即使在其中处理单元大部分正在从共享数据结构进行读取的情况下。结果,性能的差异在确保数据结构为只读时可以是大的,其与在即使小部分的时间中向数据结构写入相比并不要求锁,该写入要求其中从数据结构的读取和向其写入两者都产生相干性业务的锁定机制。
[0012]如上文所解释的,在许多情况下,读操作在数量上超过写操作一个数量级或以上。因此,在读操作期间获得性能(例如,在处理单元从共享数据结构进行读取的情况下减少相干性业务)是有益的。根据本公开的各种示例,针对数据结构定义“多锁”。多锁包括用于每个处理单元的子锁。类似于上文所解释的锁,子锁每个具有读部分和写部分。在一个实施方式中,子锁可以是“Pthread rwlock t”(例如,根据可移植操作系统接口(POSIX)规范)或其他类似机制(例如,Windows中的SRW锁)。然而,当处理单元获取子锁的读部分时,其仅对其自己的子锁这样做,并且这不一定被传送至其他处理单元。另外,当处理单元期望向共享数据结构进行写入时,处理单元获取包括在用于该数据结构的多锁中的所有子锁的写部分。因此,处理单元检查每个子锁以确保不存在读取器(例如,处理单元检查每个子锁的读部分是零,指示不存在读取器)。
[0013]如下面将更详细地解释的,获取多锁中的每个子锁的写部分导致相干性业务,因为要求获取写部分的处理单元将其获取传送至其他处理单元,使得其可使其子锁的其拷贝无效。在某些情况下,例如,当处理单元在任何其他处理单元尝试获取该锁(读或写)之前获取写锁、将其释放和再次获取写锁时,写锁的重新获取可能未被传送至其他处理单元。然而,在任一种情况下,都不产生其中处理单元获取其子锁的读部分的相干性业务。在许多情况下,读操作大大地在数量上超过写操作,并且因此通过减少读操作期间的相干性业务来实现性能益处。
[0014]现在转到图la,根据本公开的各种示例示出了系统100。系统100包括第一处理单元102和第二处理单元104。每个处理单元102、104包括各数据访问控制引擎106、108和各专用高速缓存器110、112。高速缓存器110、112经由相干性总线114被耦合,其可以是点到点相干性链路,诸如,例如HyperTransport (HT)或QuickPath互连(QPI)。相干性总线114使得能够实现高速缓存器110、112之间的相干性业务,例如以实现高速缓存器相干性方案,诸如MESI协议。在相干性总线114上发射的相干性信息或业务可包括例如MESI状态信息或与实现另一高速缓存相干性协议有关的信息。每个处理单元102、104还被耦合到共享存储器116,其包括与被处理单元102、104共享的数据结构相关联的存储多锁118。多锁118包括与第一处理单元102相关联的第一子锁120和与第二处理单元104相关联的第二子锁122。
[0015]应认识到的是系统100是一个示例,并且处理单元和硬件的其他布置在本公开的范围内。例如,图1b示出了替换系统150。系统150是双插座系统,插座152包含两个处理单元(例如,处理核)156、158且插座154同样地包含两个处理单元160、162。每个处理单元156、158、160、162与专用LI高速缓存器164、166、168、170相关联,并且每对处理单元(SP,156、158和160、162)与L2高速缓存器172、174相关联。每个插座152、154还包括与共享存储器(未示出)对接的存储器控制器176、178。在本示例中,经由相干性总线180在LI高速缓存器164、166、168、170之间实现诸如MESI协议之类的高速缓存相干性协议。
[0016]现在转到图2a_2i,并且参考图1a和Ib的元件,更详细地解释使用包括用于访问数据结构的每个处理单元的子锁的多锁来控制对共享数据结构的访问。图2a_2i参考四个处理单元,如图1b中所示,然而,这是示例性的,并且本公开的范围意图解决其中数据结构被仅仅两个处理单元或者远远超过四个处理单元共享的情况。
[0017]图2a_2i示出了图1b的LI高速缓存器164、166、168、170的内容以及如图1a中所示的示例性多锁118的逻辑内容。图2a-2i的示例中的特定多锁118包括四个子锁,图1b中所示的每个处理单元156、158、160、162 —个。每个子锁包括示为Y或N的数目和布尔值。在一个示例中可以是计数器的数目对应于目前获取子锁的读部分的读取器的数目,并且布尔值指示任何处理单元156、158、160、162是否已获取子锁的写部分。
[0018]高速缓存器164、166、168、170每个线路具有三个字段:标签、高速缓存器内容以及高速缓存器协议状态(例如,MESI协议状态)。虽然仅被示为具有五个线路,但将显而易见的是实际高速缓存器可具有更多线路。在本示例中,多锁118被存储在存储器位置10、20、30和40中,其存在于不同的高速缓存器线路上。在图2a中,这些线路中的某些存在于高速缓存器164、166、168、170中的某些中,具有各种MESI状态。例如,存储器位置10在高速缓存器164和166两者中都处于共享(或‘S’)状态,存储器位置20在高速缓存器166中处于无效(或‘I’)状态,存储器位置30在高速缓存器168中处于独有(或‘E’)状态,并且存储器位置40在高速缓存器170中处于已修改(或‘M’ )状态。虽然本示例中的标记字段可意指全关联高速缓存器,但在这里这是为了描述的简化起见而提出的;其他类型的高速缓存器(例如,组关联)在本公开的范围内。
[0019]示出了高速缓存器位置的示例性内容,诸如“小狗(puppy)”或数字pi,各种存储器位置处于不同的MESI状态。这些内容是示例性的,并且在图2b-2i中,将为了简单起见而省略与本讨论无关的高速缓存线的细节。无效状态下的高速缓存线被示为哈希值,因为虽然那些高速缓存线确实包含数据,但数据并不是根据MESI协议而相关的。在图2a中,多锁118表示处理单元156、158、160、162中没有一个正在从与多锁118相关联的数据结构进行读取或向其写入(即,所有子锁的写部分包含‘N’且读部分计数器为零)。下面将更详细地解释附加附图标记。
[0020]在图2b中所示的示例中,处理单元156期望获取多锁118的写部分以向与多锁118相关联的数据结构进行写入。处理单元156首先测试其子锁的读部分以确保计数器处于零(即,不存在读取器)并将写部分设置成‘Y’以获取子锁的写部分。存储子锁的高速缓存线202被设置成已修改状态,因为子锁已被修改且未被写回到共享存储器(例如,存储器116)。另外,处理单元156向高速缓存器166产生相干性业务以使存储器位置10的其先前共享拷贝无效。然而,处理单元156可另外获取所有其他处理单元子锁的写部分,使得那些处理单元158、160、162不能向与多锁118相关联的数据结构进行写入。
[0021]在图2c之前,处理单元156不包含在其高速缓存器164中存储在存储器位置20处的子锁。因此,在图2c中,处理单元156用存储在存储器位置20处的子锁来填充高速缓存线204,并且由于未获取读部分而将写部分设置成‘V以获取该子锁的写部分。类似于上文,高速缓存线204被设置成已修改状态。另外,处理单元156在其高速缓存器164中不包含存储在存储器位置30处的子锁。
[0022]在图2d中,处理单元156用存储在存储器位置30处的子锁来填充高速缓存线206,并且由于未获取读部分而将写部分设置成‘V以获取该子锁的写部分。另外,处理单元156向高速缓存器168产生相干性业务以使存储器位置30的其拷贝无效。图2e同样地进行,除关于存储在存储器位置40处的子锁被加载到高速缓存线208之外。处理单元156向高速缓存器170产生相干性业务以使存储器位置40的其拷贝无效。因此,在这里,处理单元156已发布四个相干性业务动作:其已选中存储器位置10、30和40的拷贝,并且其必须执行用于存储器位置20的填充(即,从共享存储器116带来存储器位置20)。结果,处理单元156已获取多锁118的写部分,并可向关联数据结构进行写入,而其他处理单元158、160、162不能向关联数据结构进行写入,因为每个子锁的写部分被处理单元156保持。
[0023]在图2f中,处理单元156通过将高速缓存器164中的子锁的所有写部分设置成‘N’来释放多锁118的写部分。在某些情况下,其他处理单元可能正在“等待”获取读取或写入锁,在这种情况下将在处理单元156释放多锁118的写部分之后获取那些锁。然而,在图2f的示例性情况下,不存在其他处理单元的竞争或等待。
[0024]现在转到图2g,假设处理单元156期望获取存储在存储器位置10处的子锁的读部分。这可例如由于线程在需要从与多锁118相关联的共享数据结构进行读取的处理单元156上执行而发生。处理单元156确定其子锁被存储在存储器位置10处。此线路在高速缓存器164中已处于已修改状态,并且因此处理单元156将高速缓存线202加上2 (B卩,将计数器增加1,因为在本示例中,使用低位作为子锁的写部分)。不产生选中(例如,通知其他高速缓存器单元不能再认为其所保持的高速缓存线的拷贝是最新的)或其他相干性业务,因为高速缓存线202处于已修改状态。
[0025]在图2h中,处理单元158期望获取存储在存储器位置20处的子锁的读部分。如上所述,这可由于线程在需要从与多锁118相关联的共享数据结构进行读取的处理单元158上执行而发生。处理单元158确定其子锁被存储在存储器位置20处。如图2f中所示,高速缓存器166包含存储器位置20的拷贝,但是该特定高速缓存线210先前处于无效状态,其促使处理单元158从共享存储器116填充高速缓存线。因此,处理单元158产生相干性业务以选中高速缓存器164中的存储器位置20的拷贝。在某些情况下,此高速缓存线的拷贝可处于共享状态达到瞬态时间段,因为高速缓存器164、166两者在高速缓存器164中的拷贝被选中之前包含拷贝。如果高速缓存器164、166、168、170采用MERSI协议而不是所述的MESI协议,则高速缓存线可瞬态地处于最新状态。在高速缓存器164中的存储器位置20的拷贝被选中之后,高速缓存器166中的拷贝处于已修改状态,如图2h中所示。处理单元158已成功地获取读锁,因为其子锁的读部分被增加且其子锁的写部分为‘N’。
[0026]最后,图2i示出了处理单元156释放其读锁的结果。在这里,作为将高速缓存线202上的存储器位置10的拷贝增加2的替代,处理单元156减去2。处理单元156不执行选中或其他相干性操作,因为高速缓存线202处于已修改状态。
[0027]因此,根据本公开的各种示例,在不存在中间写锁的情况下,获取读锁不要求附加相干性业务。在不要求写锁的情况下,例如,处理单元156将不会产生相干性业务,因为高速缓存器164在已修改状态下包含对应于处理单元156的子锁的存储器位置10,并且读锁定程序不影响任何其他处理单元158、160、162的关联子锁。虽然写锁通常使其他高速缓存器无效,但读锁仅使先前写入器的高速缓存器无效,并且仅需要这样做一次,减少了与相干性业务相关联的带宽成本。
[0028]在其中将MESI协议用于高速缓存相干性的情况下,如果存储子锁的高速缓存线处于已修改或独有状态(即,高速缓存器中的拷贝是可私人修改的),则子锁的读部分的获取未被传送到其他处理单元。如果与高速缓存器相关联的处理单元可以在不需要将修改传送至其他处理单元(例如,以选中的方式)的情况下修改拷贝,则该高速缓存器中的拷贝是私人可修改的。然而,如上文所解释的,如果高速缓存线处于共享状态(即,在这种情况下,高速缓存器中的拷贝不是私人可修改的,因为除了与在所述高速缓存线存储的子锁相关联之外的处理单元可修改所述子锁),则向其他高速缓存器发布包含存储器位置的拷贝的选中,并将高速缓存线更新成已修改状态。在选中发生之后,读锁的附加获取不引起相干性业务,因为高速缓存线现在处于已修改状态。
[0029]如果高速缓存线处于无效状态,则从存储器116加载子锁并置于已修改状态,并向任何其他单元的高速缓存器发布存储该子锁的拷贝的选中,引起相干性业务。与上述类似,附加读操作不引起相干性业务,因为包含子锁的高速缓存线处于已修改状态。处理单元尝试获取其中包含其子锁的高速缓存线处于已修改或独有状态(其中,不产生相干性业务)的读锁的次数通常在数量上大大地超过了其中包含其子锁的高速缓存线处于共享或无效状态的实例。情况常常如此,因为处理单元可从同一数据结构读取许多次而没有由它或另一处理单元进行的中间写入。此外,由获取写锁引起的相干性业务的适度增加(例如,因为必须获取所有子锁的写部分)也被获取读锁时的相干性业务的缺乏超过,其中,包含子锁的高速缓存线处于已修改或独有状态。
[0030]返回参考图la,数据访问控制引擎106、108是编程和用以执行编程的硬件的组合。虽然被示为单件的软件编程,但数据访问控制引擎106、108可包括以合作方式执行的多件软件编程。例如,参考数据访问控制引擎106,数据访问控制引擎106确定其处理单元102的关联子锁的私人可修改拷贝是否存在于关联高速缓存器110中。例如,在已修改或独有状态下可将子锁的私人可修改拷贝存储在高速缓存线上。如果存在子锁的私人可修改拷贝,数据访问控制引擎106获取子锁的读部分且不跨相干性总线114传送该获取,因为读锁的获取不影响任何其他处理单元的关联子锁。因此,不产生相干性业务。然而,如果子锁的私人可修改拷贝不存在,则数据访问控制引擎将适当的子锁从共享存储器116加载到高速缓存器110中并获取该子锁的读部分。
[0031]现在参考图3,根据本公开的各种示例示出了数据访问控制系统300。数据访问控制系统300包括被耦合到处理资源304的存储器资源302。处理资源304是一个或多个本地或分布式处理器。存储器资源302包括一个或多个本地或分布式存储器设备且包括数据访问控制模块306。因此,存储器资源302和处理资源304是系统300的硬件部件。
[0032]数据访问控制模块306表示在被处理资源304执行时实现关联引擎的指令。例如,当由处理资源304来执行数据访问控制模块306时,实现上述数据访问控制引擎106功能。还可将数据访问控制模块306实现为安装包或存储在存储器资源302上的包,所述存储器资源302可以是CD/DVD或可从其下载安装包的服务器。
[0033]图4示出了根据本公开的各种示例的用于控制对共享数据结构的访问的方法400。方法400在方框402中从存储多锁以控制对共享数据结构的访问开始。多锁包括与第一处理单元102相关联的第一子锁120和与第二处理单元104相关联的第二子锁122。子锁120、122中的每一个具有读部分和写部分。方法400在方框404中以从第一处理单元102接收从数据结构进行读取的请求继续。方法400然后在方框406中以确定在专用于第一处理单元102的第一高速缓存器110中是否存在第一子锁120的私人可修改拷贝继续。如上文所解释的,可存在私人可修改拷贝,其中,存储第一子锁120的拷贝的高速缓存线处于已修改或独有状态。
[0034]该方法在方框408中以如果在第一高速缓存器110中存在第一子锁120的私人可修改拷贝,则获取第一子锁120的读部分(例如,通过将对应于读部分的计数器递增)且不跨第一高速缓存器110与专用于第二处理单元104的第二高速缓存器112之间的相干性总线114传送该获取继续。因此,跨相干性总线114不产生相干性业务,其中,处理单元获取存储在私人可修改高速缓存线(例如,处于已修改或独有状态的高速缓存线)上的子锁的读部分。方法400进一步在方框410中以如果在第一高速缓存器110中没有拷贝,则将第一子锁120加载到第一高速缓存器110中且如果在第一高速缓存器110中不存在第一子锁120的私人可修改拷贝,则获取子锁120的读部分继续(例如,如果存储第一子锁120的拷贝的高速缓存器处于共享或无效状态或者不存在存储第一子锁120的拷贝的高速缓存线的话)。在其中第一子锁120处于共享状态的情况下,则可不必将第一子锁120的拷贝加载到第一高速缓存器110,而在其中第一子锁120处于无效状态的其他情况下,可从共享存储器116加载第一子锁120的拷贝。在某些情况下,可涉及到相干性业务,例如以向存储所获取子锁120的私人可修改拷贝的另一处理单元的高速缓存器发布选中。
[0035]如上文所解释的,处理单元尝试获取其中包含其子锁的高速缓存线处于已修改或独有状态(其中,不产生相干性业务)的读锁的次数通常大于其中包含其子锁的高速缓存线处于共享或无效状态的实例。情况常常如此,因为处理单元可从同一数据结构读取许多次而没有由它或另一处理单元进行的中间写入。此外,由获取写锁引起的相干性业务的适度增加(例如,因为必须获取所有子锁的写部分)也被在获取读锁时的相干性业务的减少超过,其中,包含子锁的高速缓存线处于已修改或独有状态。
[0036]在本公开的某些示例中,特别是在采用MESI高速缓存相干性协议的情况下,应将每个处理单元的子锁存储在不同的高速缓存线上。这是因为MESI相干性方案是基于高速缓存线的,并且因此将用于多个处理单元的子锁存储在单个高速缓存线上将导致关于单个子锁的状态(例如,Μ、E、S或I)的混乱。可采用不同的打包方法来将一个处理单元的子锁存储在单个高速缓存线上,其可基于子锁的尺寸而改变。另外,在采用不同高速缓存相干性协议的情况下,可不需要使高速缓存线仅限于包含属于一个处理单元的子锁。
[0037]图5示出了根据本公开的某些示例的示例性子锁打包方案。如上文所解释的,确保不超过一个处理单元在单个高速缓存线上存储子锁可能是有利的。顶部示例502示出了两个高速缓存线,每个存储用于一个处理单元的读/写锁且具有未使用空间的一部分。这是其中读/写锁的尺寸小于高速缓存线的尺寸的简单示例。接下来的示例504示出了连续高速缓存线,其中每个其他高速缓存线存储用于两个处理单元中的一个的多个锁。第一高速缓存线存储用于核I的两个不同锁,第二高速缓存线存储用于核2的两个不同锁,第三高速缓存线存储用于核I的两个不同锁等等。底部示例506示出了示例504的变化,但是其中,每个第二高速缓存线存储用于两个处理单元中的一个的两个不同锁。第一和第二高速缓存线存储用于核I的不同锁,第三和第四高速缓存线存储用于核2的不同锁等等。以上仅仅是示例性的,并且许多不同的子锁打包方案在本公开的范围内。
[0038]以上讨论意图说明本发明的原理和各种示例。在全面地认识到以上公开时,许多变更和修改将变得对于本领域的技术人员而言显而易见。例如,虽然一般地相对于MESI高速缓存相干性协议(也称为“Illinois协议”)来描述,但以上公开可适合于许多其他高速缓存相干性协议。某些示例可采用更简单的“MSI”协议或相关MOS1、MOES1、MERSI以及MESIF协议(作为其他相关协议的示例)。在某些情况下,“M或E”状态可指的是其中高速缓存相干性协议可在不通知其他协议参与者的情况下修改高速缓存线的那些状态;在一个示例中,可以认为MERSI协议的“R”状态类似于已修改或E。同样地,可以认为MESIF协议的F状态类似于共享状态,因为其要求通知其他参与者,其全部是出于以下讨论的目的。
[0039]作为另一示例,已一般地将获取读锁描述为递增计数器,然而,可以许多方式来实现获取读锁(例如,使用操作,诸如获取和相加、比较并交换、测试和设定、比较和“0P”、获取和0P、原子谓词和op、futex运算;使用数据结构,诸如轮流和票计数器、位组、等待线程列表)以用信号通知其他处理单元特定处理单元当前正在从共享数据结构进行读取。此外,已将读/写锁描述为分别地使用计数器和单个位来体现同一存储器字内的读和写子部分,但可以有替换实施方式(例如,两个计数器、位运算、多个字、列表)。意图在于将以下权利要求解释为包括所有此类变更和修改。
【权利要求】
1.一种用于控制对共享数据结构的访问的计算机系统,包括: 第一处理单元,被耦合到专用于第一处理单元的第一高速缓存器; 第二处理单元,被耦合到专用于第二处理单元的第二高速缓存器; 共享存储器,被耦合到第一和第二处理单元,存储多锁以控制对被第一和第二处理单元共享的数据结构的访问,多锁包括与第一处理单元相关联的第一子锁和与第二处理单元相关联的第二子锁,子锁包括读部分和写部分; 相干性总线,将第一和第二高速缓存器耦合并在第一和第二高速缓存器之间载送相干性信息;以及 数据访问控制引擎,用以从第一处理单元接收用以从数据结构进行读取的请求,并且作为结果: 确定在第一高速缓存器中是否存在第一子锁的私人可修改拷贝; 如果在第一高速缓存器中存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分且不跨相干性总线传送该获取;以及 如果在第一高速缓存器中不存在第一子锁的私人可修改拷贝,则在第一高速缓存器中没有拷贝的情况下将第一子锁加载到第一高速缓存器中,选中第一子锁的其他拷贝,并获取第一子锁的读部分。
2.权利要求1所述的计算机系统,其中,所述相干性总线载送实现MESI高速缓存相干性协议的相干性信息。
3.权利要求2所述的计算机系统,其中,如果将第一子锁存储在第一高速缓存器中的高速缓存线处于已修改或独有状态,则第一子锁的拷贝是私人可修改的。
4.权利要求2所述的计算机系统,其中,如果将第一子锁存储在第一高速缓存器中的高速缓存线处于共享或无效状态或者不存在将第一子锁存储在第一高速缓存器中的高速缓存线,则第一子锁的拷贝不是私人可修改的,并且其中,如果将第一子锁存储在第一高速缓存器中的高速缓存线处于共享状态,则在相干性总线上向第二高速缓存器发布选中并获取第一子锁的读部分。
5.权利要求2所述的计算机系统,其中,所述数据访问控制引擎还被配置成从第一处理单元接收用以向共享数据结构进行写入的请求,并且作为结果,针对多锁的每个子锁: 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于已修改或独有状态,则获取子锁的写部分; 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于共享状态,则获取子锁的写部分并向除第一高速缓存器之外的高速缓存器发布选中;以及 如果在第一高速缓存器中不存在子锁的私人可修改拷贝,则在第一高速缓存器中没有拷贝的情况下将子锁加载到第一高速缓存器中,获取子锁的写部分,并且如果读部分指示不存在已获取子锁的读部分的处理单元、则向除第一高速缓存器之外的高速缓存器发布选中。
6.权利要求1所述的计算机系统,其中,当从共享存储器将第一子锁加载到第一高速缓存器中时,在相干性总线上向第二高速缓存器发布选中。
7.一种用于控制对共享数据结构的访问的方法,包括: 存储多锁以控制对数据结构的访问,多锁包括与第一处理单元相关联的第一子锁和与第二处理单元相关联的第二子锁,每个子锁包括读部分和写部分; 从第一处理单元接收用以从数据结构进行读取的请求; 确定在专用于第一处理单元的第一高速缓存器中是否存在第一子锁的私人可修改拷贝; 如果在第一高速缓存器中存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分且不跨第一高速缓存器与专用于第二处理单元的第二高速缓存器之间的相干性总线传送该获取;以及 如果在第一高速缓存器中没有拷贝,则将第一子锁加载到第一高速缓存器中,并且如果在第一高速缓存器中不存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分。
8.权利要求7所述的方法,其中,所述相干性总线载送实现MESI高速缓存相干性协议的相干性信息。
9.权利要求8所述的方法,其中,如果将第一子锁存储在第一高速缓存器中的高速缓存线处于已修改或独有状态,则第一子锁的拷贝是私人可修改的。
10.权利要求8所述的方法,其中,如果将第一子锁存储在第一高速缓存器中的高速缓存线处于共享或无效状态或者不存在将第一子锁存储在第一高速缓存器中的高速缓存线,则第一子锁的拷贝不是私人可修改的,并且其中,如果将第一子锁存储在第一高速缓存器中的高速缓存器处于共享状态,则所述方法还包括在相干性总线上向第二高速缓存器发布选中并获取第一子锁的读部分。
11.权利要求8所述的方法,还包括从第一处理单元接收用以向数据结构进行写入的请求,并且作为结果,针对多锁的每个子锁: 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于已修改或独有状态,则获取子锁的写部分; 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于共享状态,则获取子锁的写部分并向除第一高速缓存器之外的高速缓存器发布选中;以及 如果在第一高速缓存器中不存在子锁的私人可修改拷贝,则在第一高速缓存器中没有拷贝的情况下将子锁加载到第一高速缓存器中,获取子锁的写部分,并且如果读部分指示不存在已获取子锁的读部分的处理单元、则向除第一高速缓存器之外的高速缓存器发布选中。
12.权利要求7所述的方法,还包括当从共享存储器将第一子锁加载到第一高速缓存器中时,在相干性总线上向第二高速缓存器发布选中。
13.一种存储软件的非临时计算机可读存储设备,该软件在被包括相干性总线的处理器执行时促使处理器: 存储多锁以控制对数据结构的访问,多锁包括与第一处理单元相关联的第一子锁和与第二处理单元相关联的第二子锁,每个子锁包括读部分和写部分; 从第一处理单元接收用以从数据结构进行读取的请求; 确定在专用于第一处理单元的第一高速缓存器中是否存在第一子锁的私人可修改拷贝; 如果在第一高速缓存器中存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分并且不将该获取传送至专用于第二处理单元的第二高速缓存器;以及 如果在第一高速缓存器中没有拷贝,则将第一子锁加载到第一高速缓存器中,并且如果在第一高速缓存器中不存在第一子锁的私人可修改拷贝,则获取第一子锁的读部分。
14.权利要求13所述的非临时计算机可读存储设备,其中,所述相干性总线载送实现MESI高速缓存相干性协议的相干性信息。
15.权利要求14所述的非临时计算机可读存储设备,其中,所述处理器从第一处理单元接收用以向数据结构进行写入的请求,并且作为结果,针对多锁的每个子锁: 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于已修改或独有状态,则获取子锁的写部分; 如果读部分指示不存在已获取子锁的读部分的处理单元且将子锁存储在第一高速缓存器中的高速缓存线处于共享状态,则获取子锁的写部分并向除第一高速缓存器之外的高速缓存器发布选中;以及 如果在第一高速缓存器中不存在子锁的私人可修改拷贝,则在第一高速缓存器中没有拷贝的情况下将子锁加载到第一高速缓存器中,获取子锁的写部分,并且如果读部分指示不存在已获取子锁的读部分的处理单元、则向除第一高速缓存器之外的高速缓存器发布选中。
【文档编号】G06F13/14GK104508645SQ201280075064
【公开日】2015年4月8日 申请日期:2012年7月31日 优先权日:2012年7月31日
【发明者】A. 图塞克 J. 申请人:惠普发展公司,有限责任合伙企业
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1