具体实施方式
下面结合附图提供的具体实施方式旨在作为本发明示例的描述,并不旨在表示可以构建或使用本发明示例的唯一形式。本描述阐述了本发明示例的功能,以及用于构建和操作本发明示例的步骤的序列。然而,可以通过不同的示例来实现相同或等效功能和序列。
虽然在本文中将本发明的示例描述并示出为在具有共享物理存储器而不具有高速缓存相干性的多核计算机系统中实现,但是所描述的系统只是作为示例而非限制来提供的。本领域的技术人员将理解,本发明的示例适于在各种不同类型的多核计算机系统(包括具有高速缓存相干性的那些)中应用。
图1是两个多核计算机101、104的示意图,其中一个多核计算机具有共享存储器而另一个没有。第一多核计算机101包括两个节点100、102,其各自具有核106以及高速缓存108。如图所示,每一节点具有其自己的存储器110,且这些节点使用网络接口112进行通信。作为对比,这里所描述的实施例使用具有共享物理存储器的、诸如图1中被示作计算机104的多核计算机。计算机104具有两个核114,其各自具有高速缓存116。这些核共享单个物理存储器118,该物理存储器118可以是随机存取存储器(RAM)或其他合适类型的存储器。这些核可以是不同的类型,例如,有些可以是为诸如图形处理等特定任务设计的,而有些可以是为通用计算设计的。
由于各种原因,将数据写入和写出物理存储器118是耗时的。例如,每个核114可作为与物理存储器118在物理上位置独立的芯片来提供。为了允许更快的数据访问,每个核可具有相关联的高速缓存116。尽管在图1中示出每一核仅一个高速缓存,但实际上可以存在采用分层结构的多个高速缓存,以便增加可用的高速缓存能力。使用高速缓存使得数据访问能被加速,但这也意味着在某些情况下,从高速缓存访问的数据可能不是最新的。为了使得最新近的数据能被使用,先前已经使用了高速缓存相干性机制。高速缓存相干性机制可能需要大量的互连资源。在某些情形中,高速缓存相干性机制可使用多达30%的多核计算机的功率和互连资源。
图2是多核计算机的示例核的示意图。为清楚起见,没有示出核的许多常规组件。核包括一个或多个寄存器202,寄存器202包括为允许实现如下文参考图11和12更详细地描述的通知进程而提供的多个通知控制寄存器204。核还包括扩展的转换后备缓冲器206(TLB),该扩展的转换后备缓冲器206被扩展以使得用于标识多个远程核中的哪一个将是发送进程的目的地核的进程能够实现。可选地,在通知被保护的情况下,提供通知白名单(NWL)208供在实现该通知进程时使用。这将在本文稍后更详细地描述。可选地,提供了线程转换缓冲器210(TTB),并且同样可选地,提供了通知处理单元212。图3是多核计算机的另一示例核300的示意图。为清楚起见,没有示出核的许多常规组件。该核包括寄存器302,该寄存器302按照与上述对图2的描述同样的方式包括通知控制寄存器304。提供了转换后备缓冲器306以及单独的通信转换缓冲器(CTB)308,该通信转换缓冲器(CTB)308被用于使得用于标识多个远程核中的哪一个将是发送进程的目的地核的进程能够实现。如上文参考图2所描述的,还可提供通知白名单310。可选地,提供了线程转换缓冲器312(TTB),并且同样可选地,提供了通知处理单元314。
图4是具有分层高速缓存和共享物理存储器的多核计算机的示意图。在这一示例中,存在四个核400、402、404、406(但这并不是必需的)以及分层高速缓存结构。可以提供两个或更多的核。每个核具有一级高速缓存。例如,核1400具有一级高速缓存408,核2具有一级高速缓存410,核3具有一级高速缓存412,以及核4具有一级高速缓存414。在这一示例中,提供了两个二级高速缓存416和418;每个二级高速缓存都由两个一级高速缓存所共享。还提供了由二级高速缓存416、418所共享的三级高速缓存420。三级高速缓存420与物理存储器422通信。图4中所示的分层高速缓存结构仅为示例,并且可以以每一级处不同数量的高速缓存以及高速缓存共享的不同安排来使用其他级的高速缓存结构。每个核在物理上最接近于它的一级高速缓存,并且由于芯片上的空间要求这限制了一级高速缓存的物理大小。更高级的高速缓存与核距离更远,因此在物理上可以更大。随着离核的距离增加,高速缓存与核之间的通信所花费的时间也增加。各核、高速缓存以及存储器通过互连来连接,且该互连被用于在它们之间移动数据。使用高速缓存相干性机制的多核计算机经由该互连在分层高速缓存结构的各分支之间发送数据和元数据,以便将最新数据提供给各核处的进程。跨分层高速缓存结构的互连发送数据和元数据是耗时、复杂且资源密集的。
在一实施例中,在多核计算机处不提供高速缓存相干性机制。例如,图4中的核4406可访问值存在于高速缓存414中的存储器位置,而核1可访问值也存在于高速缓存408中的相同存储器位置。如果核4对该存储器位置进行写,则在没有高速缓存相干性的情况下,核1就不能确信当它从其高速缓存408中读取时看到该新的值。通过使用如现在参考图5所描述的在各核之间发送存储器写请求的进程,确保了最新的数据,而无需高速缓存相干性。例如,图4中的箭头424以高层次示出了这一进程。如果核1 400处运行的进程从核4 406处运行的进程取得输入,则核4可被配置成向核1 400的一级高速缓存发送存储器写请求。这由箭头424示出。存储器写请求在高速缓存1 408处被接收,且可被解释为直接从核1 400所接收的存储器写。以此方式,来自核4处运行的进程的数据按简单且有效的方式被提供给核1。存储器写请求可用于在共享物理存储器处的数据结构中高效地构建消息通道。获得了性能优点。例如,提供了使用发送方核和目的地核之间的单个底层消息来操作的快速路径消息发送操作。这降低了个体通信上的开销。这也维护了该实现方式内的局部性,使得发送方核向目的地核的发送不涉及某一其他核。
在另一实施例中,在多核计算机处提供了高速缓存相干性机制,诸如图4所示。在该情况下,可使用与上述在各核之间发送存储器写请求相同的进程。在该情况下,发送存储器写请求的进程使得高速缓存相干性机制上的负担降低,且这给出了性能优点。
参考图4所描述的示例使用单个共享物理存储器。然而,在使用具有超过一个共享物理存储器的架构的情况下,在各核之间发送存储器写请求的进程以及本文描述的其他进程同样可适用。例如,每插槽一个存储器的非均匀存储器架构(NUMA)。
图5是在多核计算机中的各核之间发送存储器写请求、接收该指令并执行它的方法的流程图。该方法包括发送方核处的各步骤且还包括目的地核处的各步骤。
在由多核计算机中两个或更多的核所共享的物理存储器处配置一数据结构。该数据结构与发送方核以及目的地核(这两个核都在多核计算机中)相关联500。数据结构可以是软件用于在发送方核与目的地核之间建立消息通道的任何方便方法。关于这一配置过程的更多细节在下文参考图6给出。
使用互连将存储器写请求从发送方核发送504到目的地核。以此方式,对数据结构的更新可作为从发送方核到目的地核的存储器写请求来发送。在发送方核处执行的用于实现发送存储器写请求的各功能步骤的示例在下文参考图7描述。
在目的地核处接收506存储器写请求。可被执行以读取由存储器写请求在目的地核处先前更新的值的各功能步骤的示例在下文参考图9描述。
在目的地核处执行508存储器写请求,如同该存储器写请求源自目的地核那样。即,存储器写请求是从目的地核执行的。由于存储器写请求是从目的地核写入的,因此更新的可见性对于目的地核是相干的。在某些示例中,这是通过将值写入目的地核的本地高速缓存(一级高速缓存)来完成的,使得它对于目的地核处运行的各进程是可见的。其他示例在本文档中稍后参考图10来描述。
可选地,目的地核可指示它已完成了处理已发送给它的值。在该情况下,接收方核执行(510)“数据已完成”指令以指示不再需要该值。可将该值从接收方核的本地高速缓存中删除(512),而无需将该值写出至共享物理存储器。
图6给出配置消息通道的过程的更多细节。发送方核以及目的地核处的操作系统内核将物理存储器的公共区域映射到这些核上运行的各进程的地址空间。例如,当在两个进程之间要使用消息通道时,则物理存储器的公共区域被映射到这些进程的虚拟地址空间。物理存储器的公共区域包括作为图5的方法的一部分来形成的数据结构。数据结构可采取各种形式。例如,它可以是环形缓冲区、存储器块、向量、队列或堆、或其他数据结构。操作系统数据结构随后被更新以配置消息通道,例如以便指示在发送方核处写入数据结构的任何数据都要被发送到目的地核。操作系统还可配置:例如,在发送方核处数据结构可被写入但不被读取,而在目的地核处,数据结构可被读取但不被写入。用于使用通道来发送消息以及用于实现通知的各操作随后可使用无特权代码来执行,也被成为用户模式。以此方式,常见情况的操作可在用户模式中执行。例如,这允许消息从用户模式中被发送且被传递到目的地核,而无需目的地核上的内核模式中断。
许多消息通道可使用图6的过程来建立,且用于发送存储器写请求和通知(如以下描述的)。以此方式,该过程对于大量通信通道是有效的。例如,以允许系统进程与该系统中的其他进程进行通信。
现在描述伪代码操作,这些伪代码操作提供了如何可实现图5的发送和接收进程的各功能示例。在实践中,某一实现可改编现有指令以执行这些功能。例如,通过将前缀添加在现有指令之前、或通过标记虚拟或物理存储器的特定页来指示对它们的操作应按某一方式来执行以实现此处描述的功能。处理器状态标志也可用于指示要被执行以实现此处描述的功能的存储器操作。
某一实现可要求由这些伪代码操作所访问的存储器位置不被多核处理器处可能正在进行的其他进程的普通存储器读和写并发地访问。这样的并发访问可被认为是竞争条件的形式。
参考图7来描述伪代码数据_发送(data_send)操作700。这可用于实现将存储器写请求从发送方核发送到目的地核的进程(见图5的步骤504)。这一操作可以取两个自变量:v_addr和val。v_addr是在发送方核的虚拟存储器中表示数据结构的地址,而val是要由存储器写请求写入的值。
发送方核可按各种方式获取“val”。现在给出各示例:一个实现可从一组处理器寄存器的内容中取得“val”。一替换实现可从对于发送方核可访问的存储器的内容中取得“val”,存储器的内容诸如从发送方核的高速缓存的观点来看“v_addr”的当前内容。一实现可以对v_addr和val施加约束,诸如v_addr必需与高速缓存行的开始对齐,或val的大小必需是完整的高速缓存行,或val的大小以及v_addr的对齐使得在较大范围的地址上不需要读-修改-写来实现该写入。
在发送方核处,一进程可通过对v_addr执行702地址转换和保护检查来实现这样的数据_发送(data_send)操作,以获取数据结构在物理存储器中相关联的物理地址p_addr。这是使用转换后备缓冲器实现的。该发送方核进程查找704目的地核以寻找v_addr。关于这一查找的更多细节在下文参考图8给出。随后,在消息通道上将远程_写(p_addr,val)(remote_write(p_addr,val))消息发送到目的地核。
该发送方核进程查找704目的地核以寻找v_addr(见图8的框800)。该查找可以按多种方式来实现。在一个示例中,在每个核处使用802缓冲器以高速缓存控制元数据。该缓冲器可被称为通信转换缓冲器(CTB)。控制元数据可包括目的核或目的地高速缓存的标识符。或者,控制元数据可包括目的地软件线程的标识符以及用于将该软件线程标识符转换成目的地核或目的地高速缓存的标识符的单独机制(线程转换缓冲器TTB是执行该第二映射的一种方式)。CTB中的查找可与转换后备缓冲器查找并行进行806。如果在CTB中没找到808条目,则可生成810异常并且将执行切换到操作系统内核。随后操作系统内核能够使用软件管理的数据结构来找到适当的控制元数据并且将其安装在CTB中。随后可重新执行816失败的指令。在另一示例中,如果在CTB中没找到条目808,则CTB可由硬件812从软件维护的数据结构中填充。在另一示例中,使用扩展的转换后备缓冲器(扩展的TLB)804。例如,TLB被扩展以包括控制元数据。在该情况下,图7的步骤702和704被集成为TLB查找的一部分。
通过配置CTB和/或TLB,系统软件能够控制哪些进程可以进行通信。受保护的进程间通信被实现,这意味着可在不同进程之间发送消息,而不是仅在同一进程中操作的各线程之间发送消息。这使得各进程能够被用于实现各系统功能,如在多内核或微内核操作系统中一样。
参考图9来描述伪代码数据_接收(data_receive)操作900。这可用于实现读取由存储器写请求在目的地核处先前更新的数据的进程(见图5的步骤506和508)。数据接_收操作900取一个自变量v_addr,该自变量是在接收方核的虚拟地址空间中表示数据结构的地址。目的地核处的该进程对v_addr执行地址转换和保护检查902,以获取实现消息通道的数据结构在共享存储器中的物理地址p_addr。该进程或者从本地高速缓存中或者取回p_addr的内容并放入本地高速缓存,来返回904p_addr的内容。
参考图9来描述伪代码数据_已完成(data_done)操作906。这可用于实现用信号通知数据不再被某一进程需要的进程(见图5的步骤510和512)。数据_已完成取一个自变量v_addr。对v_addr执行地址和转换检查908,以获取物理地址p_addr。p_addr的内容在目的地核的本地高速缓存中被标记为干净的。p_addr的内容则不需要被写出到存储器。
参考图10来描述伪代码远程_写(remote_write)操作1000。这可用于实现在目的地核处执行存储器写请求的进程(见图5的步骤508)。远程_写取两个变量:p_addr以及要被接收到的存储器写请求写的值。如果在本地于目的地核的一高速缓存中存在p_addr,则被高速缓存的值被更新为val 1002。如果本地于目的地核的高速缓存中不存在p_addr 1004,则进行以下操作之一:将写转发1006到下一级的高速缓存存储器层级,作为对p_addr的写入;或者,可能通过收回(evict)某一其他行,在本地于目的地核的高速缓存中分配1008空间,由此将p_addr插入到本地于目的地核的该高速缓存。某一实现要求用于在这两个替换方案之间进行选择的策略;在它们之间进行选择涉及以下两者之间的折衷:在数据到达时在目的地核上消耗高速缓存空间(无需知道该数据是否在从高速缓存中被驱逐之前将被读取),(在数据不存储在高速缓存中,但数据随后被访问的情况下)在目的地核上招致高速缓存未命中。现在给出策略的两个示例。“默认转发”策略是:如果存在高速缓存条目则更新该高速缓存条目,否则,将该更新转发到存储器。如果期望一个或多个位置是远程_写请求的目标,则软件可使用常规的预取或读取指令来将该一个或多个位置带入高速缓存中。“默认缓冲”策略是:如果目的地线程正在运行,则在高速缓存中对更新进行缓冲,如果目的地线程不在运行,则将该更新转发到存储器。这需要(i)将目的地-线程-ID添加到远程_写请求的内容,以及(ii)将当前-线程-ID状态寄存器添加到该核。“默认缓冲”的变体是将由远程_写请求所使用的高速缓存空间限制为高速缓存的子集;例如,在4路组相联高速缓存中,远程_写请求可被约束为将未被缓冲的数据写入各路中的一路。
现在描述使用如图5中所建立的共享存储器中的数据结构的通知进程。该通知可用于各种不同的目的,例如,用于指示是时候执行垃圾收集、或是进出退出的时候、或给定的消息通道需要注意。在另一示例中,通知可用于唤醒休眠的核或使核断电来作为节能进程的一部分。该通知进程可与此处所描述的向远程核发送存储器写请求的进程结合使用,因此该通知进程可被称为“远程通知”进程。用于通知的存储器区域与普通存储器并且与消息传递存储器区域相区分。用于实现消息通道的相同技术被用于递送通知、发送“远程_通知(remote_notify)”请求而不是“远程_写”请求。
通知数据结构被配置在多核计算机的共享物理存储器处。向参与通知方案的每个核通知1100该通知数据结构。这在配置阶段按类似于以上参考图6所描述的方式来实现。在一示例中,通知数据结构保持的位比特向量,每一位用于指示不同的条件。高速缓存行大小的向量可能是足够的;如果需要更多位,则可使用多个向量来建立分层结构。还可使用其他类型的数据结构。专用通知高速缓存可用在每一核处,以保持通知数据结构的内容(而不是使用正常数据高速缓存条目)。可以这样做以避免对性能重要的数据高速缓存的修改,但这不是必需的。
在发送方核处,获取1102与事件集中的哪个事件已发生有关的信息。该信息被压缩成紧凑的低层表示。例如,该信息可包括消息已在其上被发送的消息通道的列表,以及该紧凑的底层表示可包括位向量,每一位与一组消息通道相关联。
可选地,通知白名单由发送方核检查1104。这使得受保护的通知方案能够被实现,稍后将更详细地描述该方案。在一个实现中,通知白名单包括一系列(addr,val)对,每一对指示:只要远程_通知请求中所携带的值仅包含“val”中所设置的位,则该核执行对地址“addr”的通知是有效的。
如参考图5所描述的,发送方核使用所建立的消息通道将存储器通知请求从发送方核发送1106到目的地核。存储器通知请求是写入表示事件集中的哪一个事件已发生的值。存储器通知请求在目的地核处被接收1108,且如同它是源自目的地核那样被执行1110,以便通过逻辑“或(OR)”操作来更新通知数据结构。逻辑“或”操作是在由存储器通知请求所指定的值与通知数据结构中的现有值之间进行的。这使用与哪些事件已发生有关的信息来更新通知数据结构。如果通知数据结构的地址在目的地核处被高速缓存,则更新1112发生在该高速缓存处。也可使用其他逻辑操作,包括但不限于,逻辑“与(AND)”、“异或(XOR)”。
如果通知数据结构的地址在目的地核处没有被高速缓存,则将更新1114转发到存储器。注意,存储器通知请求与存储器写请求不同地被对待。这是因为存储器通知请求要求请求中所携带的值(“val”)要使用逻辑或操作与存储器的现有内容组合,而不是简单地被转发到存储器而不处理。各种机制对于执行这一工作是可能的。给出两个示例。首先,核可使用所有位被设置为1的二进制值来代替“val”。该值可被转发到存储器以代替“val”。这可导致用信号发出伪通知,但不导致丢失真实通知。第二,核可包括负责将“val”与存储器的现有内容组合的通知处理单元。通知处理单元访问机器的存储器系统,从存储器中读取当前值,将其与“val”组合,并且写入所得值。
在这一示例中,发送方核能够向目的地核通知关于事件集中的哪个事件已经发生。这是通过更新目的地核能够监视的通知数据结构来实现的。如果目的地核正忙且没有监视通知数据结构,则它会错过事件。在另一实施例中,当通知被接收时,目的地核被轻推(nudge)或被积极地迫使以调用通知功能。
为了实现“轻推”通知方案,可在目的地核处使用通知寄存器。在一示例中,提供了四个通知寄存器。这些通知寄存器被配置1200成保持监视标志、掩码、受监视的区域、以及通知目标功能。掩码指示通知机制是否应执行“轻推”操作。掩码和受监视的区域指示哪些特定通知应导致“轻推”发生。通知目标功能是要被积极地调用以便在事件发生时轻推目的地核的任何功能。
参考图12,当通知从发送方核被接收1202时,目的地核检查其监视标志。如果设置了标志,且如果通知的目的地地址在受监视的区域中,且如果通知的值与掩码的逻辑“与”为非零,则执行轻推。为执行轻推,核清除监视标志1204,原子地读取并清除受监视的区域的内容,并且使用受监视的区域的先前内容作为参数来调用目标通知功能。监视标志随后被重置1206,且过程返回至等待通知1202。
目的地核处的线程可与许多不同的消息发送者进行交互,且通过使用远程通知进程就可能避免要求目的地核线程轮询大量消息通道。每一轮询操作将要么要求对主存储器的访问,要么要求保持消息通道的头部的本地高速缓存行。
通知进程也可在高速缓存相干的硬件上实现。在这一情况下,受监视的地址是一个或多个存储器位置,且相干性消息被用于触发通知。目的地核以共享或排他模式来保持包含受监视的区域的行。当目的地核丢失该行时,目的地核在补偿(back-off)延迟之后再次取回该行,并且评估是否需要递送通知。(这可通过扩展正常的高速缓存或作为单独特殊情况的单条目高速缓存来完成)。总之,高速缓存相干性机制在某些实施例中可用于互连多个核。在目的地核处,当通知数据结构的高速缓存相干性无效被注意到时,对于通知数据结构可从目的地核发送一取回。
如上所述,通知白名单可选地被用于实现具有保护的通知方案,借此发送者能够在特定位置内仅设置特定一组位。这可在以下情况下使用:发送者和目的地是分开的进程(而不是相同进程内的各线程),或多个不同的发送者进程被用于向相同的目的地进程发送通知。在这两种情况下,防止发送者能够任意地设置通知是可能的。例如,操作系统安排发送者映射通知地址(通知数据结构的地址)而无需用户模式访问。每个核保持新的“通知白名单”(NWL),该通知白名单包括与发送者相关联的软状态,该通知白名单列出准许该发送者发送到的(地址、掩码)对。白名单最初为空,且在线程转换时被清除。在通知_发送(notify_send)操作上,搜索NWL以寻找目标地址,且将通知值与可允许的掩码相比较。如果存在未命中,或如果被通知的值没有包含在可允许的掩码内,则发送者上出现异常。
与CTB一样,发送者上的操作系统确定通知是否被允许,且如果被允许,则将条目添加到NWL中。以此方式,使CTB和NWL保持分开,因为CTB处理诸如页等聚集区域,而NWL处理个体地址。可提供公共指令,以单个步骤来清除这两者。
在另一实施例中,NWL通过操作系统将经准许的通知位存储在对于通知发送者只读的存储器中来实现,并且CTB或扩展的TLB为该页存储通知存储器的目的地核以及物理地址(除了NWL存储器的物理地址以外)。当发送方核试图将通知写入该页时,对应的NWL高速缓存行首先被取回,逻辑“与”操作被执行,且所得通知位随后作为远程_通知_请求移动到目的地核。
可选地,某一实现可将虚拟地址连同物理地址或代替物理地址,放置在远程_写和远程_通知请求中。在“经接收者转换的”实现中,远程_写和远程_通知请求仅携带虚拟地址。转换和保护检查在远程写进程(1002)或远程_通知进程(1110)之前在目的地核处被执行。这样的实现可在数据_发送和通知_发送操作中省略地址转换和保护检查。这样的实现可将远程_写和远程_通知操作约束为仅在对共享数据结构具有相同虚拟存储器映射的各进程之间发生。
可选地,目的地核可向发送方核指示:它已经完成了处理诸如远程_写请求和远程_通知请求之类的请求。目的地核C1可向发送方核C2发送响应消息。在接收到响应消息时,核C2可以确信请求消息中所指定的存储器更新对于核C1处运行的进程是可见的。在一个实施例中,自动地将响应发送给所有请求。在另一实施例中,核C2指示是否需要响应。核C2可使用各响应通过在发出后续请求之前要求对早先请求的响应,来提供一系列远程_写和远程_通知请求之间的排序。核C2还可使用各响应经由远程_栅栏(remote_fence)操作来提供远程_写和远程_通知请求以及其他进程之间的排序(以下描述)。
本文所描述的远程写进程和远程通知进程可与机器内诸如线程的调度、线程的预清空、线程的迁移之类的操作系统功能集成。这在可随时间在若干进程之间对核进行复用的多程序机器中是有益的。现在给出关于此的更多细节。
发送者T1的预清空或迁移
在预清空T1之后,各进程在切换到不同保护域中的线程之前清除CTB和NWL。CTB和NWL保持软件状态,该软件状态可在下次T1运行时被重建。
在迁移之后,确保消息不被重新排序是可能的。例如,假设T1从核C-旧(C-Old)迁移至核C-新(C-New),且T1与核C2上的T2进行通信。该实现可规定在完成从C-旧上的T1接收到的消息之前,T2不处理从C-新上的T1接收到的消息。在一示例实现中,可能足以推迟重新调度不同核上的线程直到实现特定的延迟已经过去(例如,该实现内可缓冲的最大消息数与处理每一消息可能需要的最大时间的乘积)。该限度是可接受的,因为处理存储器_写_请求(memory_write_request)和存储器_通知_请求(memory_notify_request)消息不涉及软件处理程序的执行。该延迟可经由新的“远程_栅栏”操作来暴露给软件,该新的“远程_栅栏”操作或者(i)延迟直到将确保所有消息要被处理,或者(ii)与调用者的CTB中的每一远程核进行通信并且在远程核已经完成了处理来自发送者的所有消息时接收响应。在替换实现中,“远程_栅栏”操作使用响应消息来实现:“远程_栅栏”操作延迟直到已经从所有已发送的请求接收到响应。
接收者T2的预清空或迁移
注意到在预清空T2之后不要求特殊工作;远程_写和远程_通知消息可继续到达且由最后运行T2的核来处理(更新主存储器而不是高速缓存)。这在T2阻塞以等待来自T1的数据时尤其可能发生,因此可能期望允许该转发继续一段时间,预期着T2将在相同的核上被恢复(而不是向运行T1的核通知T2现在已被预清空)。
如果T2从C-旧迁移至C-新,则安排未丢失的消息是可能的。消息在从C-旧转发到主存储器的情况下可能被丢失,而C-新具有本地高速缓存中的相同位置的非相干副本。因此,接收者可安排任何发送者知晓接收者的新位置。现在描述取决于TTB(线程转换缓冲器)是否被使用的两个替换实现。
没有TTB的迁移:这一问题类似于改变虚拟-物理页转换(实际上,CTB按照同TLB高速缓存与物理存储器中的虚拟页位置有关的信息相同的方式来高速缓存与线程位置有关的信息)。可使用与TLB关闭(TLB shoot-down)类似的方法来支持线程迁移。在C-新上恢复接收者T2之前,操作系统执行以下过程:
标识可能正在运行对T2是发送者的线程的核的集合(例如,从被维持以供CTB未命中处理程序使用的信息中,或从当设置T1和T2之间的共享存储器时所维护的数据结构中)。
向这些核发送处理器间中断(IPI)。
IPI处理程序对与T2共享的页的CTB条目进行转储清除,并且执行“远程_栅栏”以确保刚好在IPI之前发送的消息在IPI之后所发送的任何消息之前被接收。
带有TTB的迁移:TTB提供各线程ID(例如,T2)与各核ID(例如,C-新)之间的间接层,因此迁移需要改变TTB中的映射而不是CTB条目中的映射。替换TTB实现可提供各TTB之间的硬件相干性。
在一替换实现中,发送方核处所需的TLB、CTB或TTB更新可通过以下操作来执行:将TLB、CTB或TTB与TLB、CTB或TTB是其高速缓存的存储器中的操作系统配置数据结构的地址相关联,以及将该配置数据结构的远程_写_请求从正执行迁移的核发送到发送方核。因此,TLB、CTB或TTB将按发送方核立即可见的方式被更新,而无需向发送方核发送中断。
对发送者T1处的存储器配置的改变
操作系统可重新配置发送者T1处的存储器,使得发送者不再具有对物理页的写访问权。例如,操作系统可移除T1对物理页面的写许可,或者操作系统可改变虚拟-物理地址转换,使得给定的虚拟页映射到一不同的物理页。在完成这样的重新配置之前,操作系统可使用“远程_栅栏”以确保发送者T1先前发出的写在该重新配置发生之前已经完成。
对线程的调度
在多程序系统中,在一个核上运行的操作系统知道分配给该核的给定线程何时变得可运行是有用的。通知机制的扩展可用于通过以下方式来提供该信息:允许向T2发送的通知隐式地用信号向操作系统表示T2已准备好运行。
使用该扩展,每个核除了上述用户模式机制以外还具有内核模式通知机制。另外,每一线程具有操作系统分配的线程ID,且该ID被包括在向该线程所发出的“远程_通知”消息中。如果某一“远程_通知”消息到达除当前正运行的线程以外的一线程,则发生内核模式通知。这如同在由目标线程ID索引的位位置上(相对于由目标核上的操作系统所提供的地址)那样发生。(例如,操作系统可指示内核模式通知应在地址0xf0000000处被递送,且向线程ID 256的通知将通过在地址0xf0000020处设置位来指示)。如用户模式通知一样,将所得值与掩码相比较;如果该值与掩码的逻辑“和”为非零,则递送通知。内核模式通知经由中断来递送,通常导致操作系统对被通知的线程进行重新调度(或是立即地、或是之后某一时间)。
注意,使用位图和掩码允许内核选择不接收给定线程的通知(例如,因为它已经被通知过),并且允许多个通知在硬件中累积(例如,在处理给定通知时其他通知到达的情况下)。
此处描述的过程还可被安排成允许消息传递与调度的高效集成。例如,通过允许内核模式调度器标识接收过程何时具有对其可用的消息,以及通过允许用户模式软件标识各消息通道中的哪一个具有可用的消息(或相反地具有可用于在其上发送新消息的空间)。
此处描述的远程写进程和远程通知进程可以提供以下各项中的全部或一个或多个:在用户模式下执行常见情况的操作、受保护的进程间通信、与操作系统功能集成、快速路径消息发送操作的能力、对大量通信信道的操作以及消息传递与调度的高效集成。然而,对于此处描述的过程,提供所有这些功能不是必需的。
此处描述的远程写过程和远程通知过程可提供受保护的进程间通信,这意味着可在不同进程之间发送消息,而不是仅在相同进程中操作的各线程之间发送消息。在例如各进程如在多内核或微内核操作系统中那样被用于实现系统功能的情况下,这是有益的。系统软件可控制哪些进程可通信。
此处描述的远程写进程和远程通知进程可提供与操作系统功能的集成。例如,通过允许将消息发送给已被清空的接收者,以及允许线程在机器中的各核之间迁移,或用于为了电源管理而挂起/恢复整个机器。这在其中可随时间在若干进程之间对核进行复用的多程序机器中可能是有益的。
此处描述的远程写过程和远程通知过程可为大量通信信道提供有效的功能性。例如,以允许系统进程与该系统中的其他进程进行通信。(消息信道通过机器中相对丰富的物理存储器中的存储来支持,而不是由可能稀少的专用消息传递缓冲器存储器内的空间来支持)。
图13示出了可以实现为任何形式的计算和/或电子设备、且其中可以实现此处所描述的远程写和远程通知进程的各实施例的示例性基于多核计算的设备1300的各种组件。
基于计算的设备1300还包括一个或多个处理核1302,处理核可以是用于处理通用计算的计算可执行指令并且还用于实现此处描述的远程写和远程通知进程的微处理器、控制器或任何其他合适类型的处理器。核1302可以是不同的类型的,诸如图形处理器和通用处理器的混合,或者可以是相同的类型。例如,核可以是如上参考图2或3所描述的。在某些示例中,例如使用片上系统架构的情况,处理器1302可包括用硬件(而非软件或固件)实现此处描述的方法的一部分的一个或多个固定功能块(也被称为专用核)。可以在基于计算的设备处提供包括操作系统1308的平台软件或任何其他合适的平台软件以使得能够在该设备上执行应用软件1310。
核1302与互连1304进行通信。核1302经由互连1304共享物理存储器1306。
可以使用可由基于计算的设备1300访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如诸如存储器1306等计算机存储介质和通信介质。诸如存储器1306等计算机存储介质包括以用于存储如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EPROM、EEPROM、闪存、相变存储器、忆阻器或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光存储、磁带盒、磁带、磁盘存储或其他磁存储设备,或者可用于存储信息以供计算设备访问的任何其他非传输介质。相反,通信介质可以以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或者其他数据。如本文所定义的,计算机存储介质不包括通信介质。虽然在基于计算的设备1300中示出了计算机存储介质(存储器1306),然而应当理解,该存储可以是分布式的或位于远程并经由网络或其他通信链路(例如,使用通信接口1320)来访问。
基于计算的设备1300还包括被安排成向可与基于计算的设备1300分开或集成在一起的显示设备1316输出显示信息的输入/输出控制器1314。该显示信息可以提供图形用户界面。输入/输出控制器1314还被安排成接收并处理来自一个或多个设备的输入,如用户输入设备1318(例如,鼠标或键盘)。该用户输入可用于设置配置参数,并且用于使用计算机以供通用计算。在一实施例中,如果显示设备1316是触敏显示设备,则它还可担当用户输入设备1318。输入/输出控制器1314还可向除显示设备之外的设备输出数据,例如,本地连接的打印设备。
此处所使用的术语“计算机”是指带有处理能力使得可以执行指令的任何设备。本领域的技术人员将认识到,这样的处理能力被集成到许多不同的设备中,因此,术语“计算机”包括PC、服务器、移动电话、个人数字助理和许多其他设备。
本文描述的方法可由有形存储介质上的机器可读形式的软件来执行,例如计算机程序的形式,该计算机程序包括在该程序在计算机上运行时适用于执行本文描述的任何方法的所有步骤的计算机程序代码装置并且其中该计算机程序可被包括在计算机可读介质上。有形(或非瞬态)存储介质的示例可包括盘(disk)、拇指型驱动器、存储器等,而不包括所传播的信号。软件可以适合于在并行处理器或串行处理器上执行,使得各方法步骤可以以任何适当的顺序实现,或同时实现。
这确认了软件可以是有价值的、可单独交易的商品。它旨在包含运行于或者控制“哑”或标准硬件以实现所需功能的软件。它还旨在包含例如用于设计硅芯片,或者用于配置通用可编程芯片的HDL(硬件描述语言)软件等“描述”或者定义硬件配置以实现期望功能的软件。
本领域的技术人员将认识到,用来存储程序指令的存储设备可以分布在网络上。例如,远程计算机可以存储被描述为软件的进程的示例。本地或终端计算机可以访问远程计算机并下载软件的一部分或全部以运行程序。可另选地,本地计算机可以根据需要下载软件的片段,或在本地终端上执行一些软件指令,并在远程计算机(或计算机网络)上执行另一些软件指令。本领域的技术人员还将认识到,通过利用本领域的技术人员已知的传统技术,软件指令的全部,或一部分可以通过诸如DSP、可编程逻辑阵列等等之类的专用电路来实现。
如本领域技术人员将清楚的,此处给出的任何范围或者设备值都可以被扩展或者改变而不失去所寻求的效果。
尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。
可以理解,上文所描述的优点可以涉及一个实施例或可以涉及多个实施例。各实施例不限于解决所述问题中的任一个或全部的实施例或具有所述好处和优点中的任一个或全部的实施例。进一步可以理解,对“一个”项目的引用是指那些项目中的一个或多个。
此处所描述的方法的步骤可以在适当的情况下以任何合适的顺序,或同时实现。另外,在不偏离此处所描述的主题的精神和范围的情况下,可以从任何一个方法中删除各单独的框。上文所描述的任何示例的各方面可以与所描述的其他示例中的任何示例的各方面相结合,以构成进一步的示例,而不会丢失寻求的效果。
此处使用了术语“包括”旨在包括已标识的方法的框或元素,但是这样的框或元素不构成排它性的列表,方法或设备可以包含额外的框或元素。
可以理解,上面对一较佳实施例的描述只是作为示例给出并且本领域的技术人员可以做出各种修改。以上说明、示例和数据提供了对本发明的各示例性实施例的结构和使用的全面描述。虽然上文以一定的详细度或参考一个或多个单个实施例描述了本发明的各实施例,但是,在不偏离本发明的精神或范围的情况下,本领域的技术人员可以对所公开的实施例作出很多更改。