实现PCIe设备的缓存一致性的系统、方法和介质

文档序号:748840 发布日期:2021-04-23 浏览:12次 >En<

阅读说明:本技术 实现PCIe设备的缓存一致性的系统、方法和介质 (Systems, methods, and media for implementing cache coherency for PCIe devices ) 是由 缪露鹏 于 2020-12-07 设计创作,主要内容包括:提供实现PCIe设备的缓存一致性的系统、方法、介质,该系统包括:CPU缓存主控器,被配置为通过内部总线的缓存命令发送CPU对第一地址的第一读写请求到内存缓存从控器;内存缓存从控器,被配置为根据第一读写请求的第一地址的内存缓存行的状态,更新第一地址的内存缓存行的状态,通过内部总线的缓存命令向输入/输出桥控制器发送第一地址和要更新PCIe设备缓存行的状态为第一状态的命令;输入/输出桥控制器,被配置为:将第一地址和要更新PCIe设备缓存行的状态为第一状态的命令通过第一PCIe总线消息发送到PCIe设备,通过第二PCIe总线消息接收来自PCIe设备的第一地址的第一数据和更新完PCIe设备缓存行的状态为第一状态的响应,并通过内部总线的缓存命令发送到内存缓存从控器。(Systems, methods, and media for implementing cache coherency for PCIe devices are provided, the systems comprising: the CPU cache master controller is configured to send a first read-write request of the CPU to a first address to the memory cache slave controller through a cache command of the internal bus; the memory cache slave controller is configured to update the state of the memory cache line of the first address according to the state of the memory cache line of the first address of the first read-write request, and send the first address and a command for updating the state of the memory cache line of the PCIe device into the first state to the input/output bridge controller through a cache command of the internal bus; an input/output bridge controller configured to: and sending the first address and a command for updating the state of the PCIe device cache line into the first state to the PCIe device through a first PCIe bus message, receiving first data from the first address of the PCIe device and a response for updating the state of the PCIe device cache line into the first state through a second PCIe bus message, and sending the response to the memory cache slave through a cache command of the internal bus.)

实现PCIe设备的缓存一致性的系统、方法和介质

技术领域

本申请涉及集成电路领域,且更具体地,涉及实现PCIe设备的缓存一致性的系统、方法和介质。

背景技术

外设组件互联扩展(Peripheral Component Interconnect Express简称PCIe)总线是计算机总线外设部件互连标准(Peripheral Component Interconnect,PCI)的一种,它沿用现有的PCI编程概念及通信标准,但是基于更快的串行通信系统。PCIe总线仅应用于内部互连。由于PCIe系统是基于现有的PCI系统,只需修改物理层而无须修改软件就可将现有PCI系统转换为PCIe系统。 PCIe总线拥有更快的速率,以取代几乎全部现有的内部总线(包括加速图像接口(Accelerated Graphics Port,AGP)总线和PCI总线)。

PCIe总线链路使用端到端的数据传送方式,如图1所示,图1示出了传统技术中PCIe总线链路的连接方式。图1中根复合体102与CPU子系统101和系统内存103连接,用于管理两者,根复合体102也通过PCIe交换设备(Switch)104与PCIe端点(End Point,EP)设备105交互,以将CPU子系统101的命令与来自PCIe端点设备的命令进行交换和执行。其中,一条PCIe总线链路的一端只能连接一个发送设备或者接收设备,例如PCIe端点设备105。因此必须使用PCIe交换设备104扩展PCIe总线链路后,才能连接多个设备。

传统的PCIe协议并不支持PCIe端点(end-point,EP)设备维护跟内存与中央处理单元(CPU)之间的数据一致性。而,在EP设备、CPU拥有自己的缓存的情况下,可能会出现两者的缓存里都拥有相同数据的副本,然而在两者独自对各自缓存中存储的相同数据的副本进行修改的情况下,可能会导致不同的缓存之间相同数据的副本不一致的情况。

因此,需要实现PCIe设备的缓存一致性的技术。

发明内容

根据本发明的一个方面,提供一种实现PCIe设备的缓存一致性的系统,包括:CPU缓存主控器,通过内部总线与中央处理器单元CPU耦合,被配置为通过内部总线的缓存命令经由内部总线发送所述CPU对第一地址的第一读写请求到内存缓存从控器;内存缓存从控器,通过所述内部总线与内存耦合,被配置为根据所述第一读写请求的所述第一地址的内存缓存行的状态,更新所述第一地址的内存缓存行的状态,通过内部总线的缓存命令经由所述内部总线向输入/输出桥控制器发送所述第一地址和要更新PCIe设备缓存行的状态为第一状态的命令;输入/输出桥控制器,通过PCIe总线与PCIe设备耦合,被配置为:将所述第一地址和要更新PCIe设备缓存行的状态为第一状态的命令通过第一PCIe总线消息经由PCIe总线发送到所述PCIe设备,通过第二PCIe总线消息接收来自所述PCIe设备的所述第一地址的第一数据和更新完PCIe设备缓存行的状态为第一状态的响应,并通过内部总线的缓存命令经由所述内部总线发送到所述内存缓存从控器,其中,所述内存缓存从控器被配置为用所述第二PCIe总线消息中的所述第一数据和所述第一状态来更新所述第一地址的内存缓存行的数据和状态,并通过内部总线的缓存命令发送所述第一数据和已更新完状态的响应到所述CPU缓存主控器,其中,所述CPU缓存主控器被配置为用所述第一数据和已更新完状态的响应来更新所述CPU缓存行的数据和状态。

根据本发明的另一方面,提供一种实现PCIe设备的缓存一致性的方法,包括:由通过内部总线与中央处理器单元CPU耦合的CPU缓存主控器,通过内部总线的缓存命令经由内部总线发送所述CPU对第一地址的第一读写请求到内存缓存从控器;由通过所述内部总线与内存耦合的内存缓存从控器,根据所述第一读写请求的所述第一地址的内存缓存行的状态,更新所述第一地址的内存缓存行的状态,通过内部总线的缓存命令经由所述内部总线向输入/输出桥控制器发送所述第一地址和要更新PCIe设备缓存行的状态为第一状态的命令;由通过PCIe总线与PCIe设备耦合的输入/输出桥控制器:将所述第一地址和要更新PCIe设备缓存行的状态为第一状态的命令通过第一PCIe总线消息经由PCIe总线发送到所述PCIe设备,通过第二PCIe总线消息接收来自所述PCIe设备的所述第一地址的第一数据和更新完PCIe设备缓存行的状态为第一状态的响应,并通过内部总线的缓存命令经由所述内部总线发送到所述内存缓存从控器,其中,由所述内存缓存从控器用所述第二PCIe总线消息中的所述第一数据和所述第一状态来更新所述第一地址的内存缓存行的数据和状态,并通过内部总线的缓存命令发送所述第一数据和已更新完状态的响应到所述CPU缓存主控器,其中,由所述CPU缓存主控器用所述第一数据和已更新完状态的响应来更新所述CPU缓存行的数据和状态。

根据本发明的另一方面,提供一种计算机存储介质,存储计算机程序指令,其中所述计算机程序指令在被处理器执行时进行本发明的各个实施例的方法。

根据本发明的另一方面,提供一种处理系统,包括处理器和计算机存储介质,其中上述计算机存储介质存储计算机程序指令,其中所述计算机程序指令在被处理器执行时进行本发明的各个实施例的方法。

附图说明

图1示出了传统技术中PCIe总线链路的连接方式。

图2示出了PCIe总线规范的对于设备的分层的结构。

图3示出了EP设备通过DMA引擎来读取或写入内存中的数据的示意图。

图4示出了根据本发明的实施例的实现PCIe设备的缓存一致性的系统。

图5示出了根据本发明的实施例的内存、输入/输出桥控制器、PCIe设备之间的数据流向。

图6A示出了4DW格式的消息报头的格式的示例。

图6B示出了厂商定义(Vendor‐Defined)消息报头的格式的示例。

图7A示出了厂商定义消息(Vendor Defined Message,VDM)的报头和正文字段。

图7B和图7C分别示出了根据本发明的实施例的VDM0封包格式和VDM1封包格式。

图8示出了根据本发明的实施例在CPU对内存中的一地址的读写请求来独占该地址的数据的情况下的操作的示例。

图9示出了根据本发明的实施例在PCIe设备对内存中的一地址的读写请求来独占该地址的数据的情况下的操作的示例。

图10示出了根据本发明的实施例的实现PCIe设备的缓存一致性的方法的流程图。

图11示出了适于用来实现本发明实施方式的示例性计算机系统/服务器的框图。

具体实施方式

现在将详细参照本发明的具体实施例,在附图中例示了本发明的例子。尽管将结合具体实施例描述本发明,但将理解,不是想要将本发明限于描述的实施例。相反,想要覆盖由所附权利要求限定的在本发明的精神和范围内包括的变更、修改和等价物。应注意,这里描述的方法步骤都可以由任何功能块或功能布置来实现,且任何功能块或功能布置可被实现为物理实体或逻辑实体、或者两者的组合。

PCIe总线规范对于设备的设计采用分层的结构,由事务层、数据链路层和物理层组成,各层又都分为发送和接收两个功能块。

图2示出了PCIe总线规范的对于设备的分层的结构。如图2所示,在发送器端,应用程序(设备A)在事务层形成事务层包(Transaction Layer Package,TLP),储存在发送缓冲器里,等待推向下层。在数据链路层,在TLP 包上再串接一些附加信息,这些信息是对方接收TLP 包时进行错误检查要用到的,形成数据链路层包(Data Link Layer Package,DLLP);在物理层,对DLLP 包进行编码,占用PCIe总线链路中的可用通道,从发送器端(TX)发送出去。

在接收器端,实际上是发送器端的“逆”过程。如果说发送器端是在不断组包,那么接收器端(RX)就是不断的拆包,最后提取出有用的数据信息供设备B的应用程序使用。

传统的PCIe协议并不支持EP设备维护跟内存与CPU之间的数据一致性。常见的方式是EP设备通过一个直接存储器访问(Direct Memory Access,DMA)引擎来读取或写入内存中的数据。

一种简单的方案是在内存中申请一段非缓存(non- cache)的内存,专门用来给EP设备访问用。但是缺点也比较明显,数据读写的性能会因为非缓存的缘故而下降。

而利用缓存(cache)带来的性能提升,则需要软件来维护数据一致性的问题。图3示出了EP设备301通过DMA引擎机制来读取或写入内存303中的数据的示意图。如图3所示,如果是从EP设备301搬数据到内存303中(即,DMA读),那么在数据传输前,DMA控制器302需要无效(invalid)缓存304中的这段地址范围内的缓存,在数据传输结束之后,软件程序不会因为缓存命中(cache hit)而读取旧的数据;如果是从内存303搬数据到EP设备301去(DMA写),在数据传输之前,CPU 305需要先清除(clean)CPU的缓存306中的这段地址范围内的缓存,确保缓存306中的数据已经写回到内存303中去了,这样EP设备301的数据传输就不会把内存303中旧的数据搬到EP设备301。CPU和内存以及EP设备的交互经由系统总线来实现。以上这两个方向的操作都要求在EP设备传输没有完成时,软件不能访问EP设备的这段地址空间。

由于内存中的同一个数据会有多个副本同时存在不同的缓存存储器中,如果CPU或者EP设备修改了其本地的副本,会造成数据的不一致,为了解决这种不一致问题,通常需要一致性协议,例如修改独占共享或无效(Modified Exclusive Shared Or Invalid,MESI)协议等。

MESI协议是基于无效化的高速缓存一致性协议,并且是支持回写高速缓存的最常用协议之一。其定义了缓存行的四种状态,即修改(M)、独占(E)、共享(S)、无效(I)。

修改(M):高速缓存行仅存在于当前高速缓存中,并且是脏的。它已从主存储器中的值修改(M状态)。在允许对(不再有效)主存储器状态的任何其他读取之前,需要高速缓存在将来的某个时间将数据写回主存储器。回写将该行更改为共享状态(S)。当块标记为M(已修改)时,其他高速缓存中块的副本将标记为I(无效)。

独占(E):缓存行仅存在于当前缓存中,但是干净。它与主内存匹配。它可以随时更改为共享状态,以响应读取请求。或者,可以在写入时将其改变为修改状态。

共享(S):表示此高速缓存行可能存储在计算机的其他高速缓存中并且是干净的。它与主存储器匹配。可以随时丢弃该行(更改为无效状态)。

无效(I):表示此缓存行无效(未使用)。

EP设备可以是计算密集型设备(比如PCIe设备的加速卡),其主要用来改善平台的性能,在比如关键数据计算、内容加密处理等方面。通常情况下,处理器是按照顺序进行处理和执行指令的。相比而言硬件加速器最大的区别在于硬件可以并行处理,这让硬件处理的效率会远远高于软件处理,因此会将需要大量计算的软件代码转移到硬件加速器上去实现,来提高系统整体的性能。计算密集型PCIe设备都有高性能,低延迟的要求。

本公开的技术可以:通过利用缓存来提升计算密集型设备的性能,当EP设备想要读取数据时,不用每次都从内存中取数据,如果该地址在缓存中命中了,就可以直接从缓存中获取,避免了去主内存中获取数据,可以有效地提高数据处理的速度;以及可以由硬件层面去维护缓存一致性,对软件而言整个过程是透明的,而从减少软件编程的复杂度。

为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明作进一步详细说明。

注意,接下来要介绍的示例仅是一个具体的例子,而不作为限制本发明的实施例必须为示出和描述的具体的外形、硬件、连接关系、步骤、数值、条件、数据、顺序等等。本领域技术人员可以通过阅读本说明书来运用本发明的构思来构造本说明书中未提到的更多实施例。

图4示出了根据本发明的实施例的实现PCIe设备的缓存一致性的系统400。

实现PCIe设备的缓存一致性的系统(或称根复合体(Root Complex,RC)400包括:CPU缓存主控器401,通过内部总线与中央处理器单元CPU (子系统)404耦合,被配置为通过内部总线的缓存命令经由内部总线发送CPU 404对第一地址的第一读写请求到内存缓存从控器402;内存缓存从控器402,通过内部总线与内存405耦合,被配置为根据第一读写请求的第一地址的内存缓存行的状态,更新第一地址的内存缓存行的状态,通过内部总线的缓存命令经由内部总线向输入/输出桥控制器403发送第一地址和要更新PCIe设备缓存行的状态为第一状态的命令;输入/输出桥控制器403,通过PCIe总线与PCIe设备407耦合,被配置为:将第一地址和要更新PCIe设备缓存行的状态为第一状态的命令通过第一PCIe总线消息经由PCIe总线发送到PCIe设备407,通过第二PCIe总线消息接收来自PCIe设备407的第一地址的第一数据和更新完PCIe设备缓存行的状态为第一状态的响应,并通过内部总线的缓存命令经由内部总线发送到内存缓存从控器402。内存缓存从控器402被配置为用第二PCIe总线消息中的第一数据和第一状态来更新第一地址的内存缓存行的数据和状态,并通过内部总线的缓存命令发送第一数据和已更新完状态的响应到CPU缓存主控器401。

在一个实施例中,CPU缓存主控器401被配置为用第一数据和已更新完状态的响应来更新CPU缓存行的数据和状态。

在一个实施例中,CPU缓存主控器401被配置为从CPU 404接收第一读写请求、并根据第一读写请求和CPU缓存行的状态判断第一地址在CPU缓存行中是否命中,如果未命中,则向内存缓存从控器402发送第一读写请求。

在一个实施例中,第一读写请求包括修改或独占或共享第一地址的数据,第一读写请求的第一地址的内存缓存行的状态包括已经被PCIe设备独占,第一状态为无效态,其中,内存缓存从控器402被配置为用第二PCIe总线消息中的第一数据和第一状态来更新第一地址的内存缓存行的数据和更新状态为被CPU修改、独占或共享,CPU缓存主控器401被配置为用第一数据和第一状态来更新CPU缓存行的数据和更新状态为被CPU修改、独占或共享。

如此,通过设置CPU缓存主控器401、内存缓存从控器402、输入/输出桥控制器403三个硬件,在CPU对内存中的一地址的读写请求来修改、独占、共享该地址的数据的情况下,通过各种消息的交互来维护CPU 404、内存406、PCIe设备407三者的缓存一致性。

在如图4所示的一个多PCIe设备连接的系统中,根复合体(Root Complex,RC)400通过内部总线连接CPU 404、系统内存(SYSTEM MEMORY)405、以及通过PCIe交换设备(SWTICH)406经由PCIe总线链路扩展连接各种PCIe外部设备407。其中,输入/输出桥控制器403可以通过PCIe交换设备406向PCIe设备407发送第一PCIe总线消息。PCIe设备407可以包括PCIe设备缓存控制器409,来处理来自PCIe交换设备406经由PCIe总线链路的消息,并通过PCIe交换设备406向输入/输出桥控制器403发送第二PCIe总线消息。根复合体中的内部总线用来互联各个缓存主控器401和缓存从控器402和输入/输出桥控制器403。

其中CPU子系统404包括其自己的缓存存储器(Cache)(未示出),缓存存储器可以由静态随机存取存储器(Static Random-Access Memory,SRAM)组成,每一行缓存行包括标志字段和数据字段,标志字段用来指示数据的一致性状态。CPU子系统404的CPU缓存主控器(Coherent Master)401用于接收来自CPU 404的读写请求和监听RC 400内部总线上的嗅探请求(snoop),并对自己的缓存存储器做出相应处理。

系统内存405的内存缓存从控器(Coherent Slave)402用来管理所有缓存中缓存行的数据和状态,并接受来自各个CPU的CPU缓存主控器401对内存406的读写请求,并根据读写请求地址向相关的CPU缓存主控器401发送嗅探请求,以维护缓存一致性。

输入/输出桥控制器(IO Bridge Controller)403的主要作用是将来自PCIe总线链路上的请求转换为内部总线上的请求,或者将内部总线上访问PCIe外设的请求转换为PCIe请求,其包括一个输入/输出桥缓存主控器(Coherent Master)408,用来接收来自PCIe设备407的可缓存(cacheable)的读写请求,并监听来自根复合体400内部从内存缓存从控器(Coherent Slave)402发过来的嗅探请求。

PCIe设备407的加速卡系统包括加速卡自身的功能逻辑以及PCIe设备缓存控制器(Cache Controller)409,其PCIe设备缓存控制器409的作用是接收来自PCIe设备的加速卡的读写请求和来自PCIe总线链路上传过来的嗅探请求。

图5示出了根据本发明的实施例的内存405、输入/输出桥控制器403、PCIe设备407之间的数据流向。如图5的数据流向所示,如果发现来自PCIe设备407的读写请求地址没有在内部缓存中命中的话,PCIe设备407就会产生相应的可缓存的读写命令(缓存请求),以厂商定义消息 0(Vendor Defined Message 0,VDM0)的形式通过PCIe总线,经过PCIe交换设备(SWITCH)路由到输入/输出桥控制器403上的输入/输出桥缓存主控器408上,由输入/输出桥缓存主控器408解析该消息,并转换为相应的缓存请求发送至内存缓存从控器402上,然后内存缓存从控器402将缓存响应发送回输入/输出桥缓存主控器408,且输入/输出桥缓存主控器408将其转换为以厂商定义消息 1(Vendor Defined Message 1,VDM1)消息的形式的缓存响应发送到PCIe设备缓存控制器409。同理,对于收到来自内存缓存从控器402上面的嗅探请求,由输入/输出桥缓存主控器408转换为VDM0消息的形式的嗅探请求通过PCIe总线经过PCIe交换设备路由到PCIe设备407的PCIe设备缓存控制器409上,而所有返回的响应(嗅探响应)均按照VDM1消息的形式在输入/输出桥缓存主控器408和PCIe设备407的PCIe设备缓存控制器409之间传递,输入/输出桥缓存主控器408将嗅探响应发送回内存缓存从控器402。

VDM0和VMD1消息是VDM消息格式。VDM消息是自定义的消息格式。该消息是TLP的一种。在PCIe协议中,用PCIe总线消息(Message)来取代传统PCI中的中断、错误、功耗管理的这些带外的信号,所有的消息报头(message header)都是4双字(Double Word,DW)的格式,如图6A所示,图6A示出了4DW格式的消息报头的格式的示例。其中的消息字段(messagecode)确定了该消息是何种类型。

在本方案中主要用到了PCIe总线消息中的厂商定义(Vendor‐Defined)消息。这种消息类型,是PCIe协议上给设计者做自定义功能扩展的一种消息,其格式如图6B,图6B示出了厂商定义消息报头的格式的示例。其中消息字段(message code)为0111111x。

该消息包括了两种类型:厂商定义消息 0(Vendor Defined Message 0,VDM0)和厂商定义消息 1(Vendor Defined Message 1,VDM1),本申请用到该两种类型的消息。

两种类型的区别在于如果接受方不支持这种类型的消息的话,行为会不一样:

如果是VDM1,那么是直接丢弃处理。

如果是VDM0,那么会当作一个不支持的请求,被设备记录。

由于VDM消息从第12B开始就作为设计自定义的字段,因此可以将缓存相关的命令和响应封装到VDM的正文字段中,然后放在PCIe总线上传输,如图7A所示,图7A示出了VDM的报头和正文字段。

VDM封包格式的实现比较灵活,本方案采用了如下的方式来将缓存相关的命令和响应封装到VDM的正文字段中:

针对缓存/嗅探请求,采用如图7B所示的VDM0封包格式。而针对缓存/嗅探响应,采用如图7C所示的VDM1封包格式。图7B和图7C分别示出了根据本发明的实施例的VDM0封包格式和VDM1封包格式。当然,本申请不限于这两种封包格式的消息,还可以利用其它格式的消息,在此不一一举例。

图8示出了根据本发明的实施例在CPU对内存中的一地址的读写请求来独占该地址的数据的情况下的操作的示例。

在步骤801,如果此时CPU 想独占地址A的数据,根据该独占地址A读写请求和地址A的CPU缓存行的状态判断地址A在CPU缓存行中是否命中,如果地址A没有在CPU的缓存行中命中,CPU的CPU缓存主控器401就会经由内部总线向内存缓存从控器402发起独占地址A的数据的请求,例如内部总线的缓存命令 RdBlkE。

在步骤802,内存缓存从控器402收到命令RdBlkE后会查找地址A的对应缓存行的状态,这时发现该缓存行已经被PCIe设备给独占了,内存缓存从控器402更新地址A的缓存行的状态为无效态,并通过发送内部总线的缓存命令、例如嗅探命令SnpBlkE经由内部来向输入/输出桥控制器403的输入/输出桥缓存主控器408发送地址A和要更新PCIe设备缓存行的状态为被CPU独占的命令,以通知PCIe设备该缓存行的状态后续要发生切换,先切换为无效态,然后切换为被CPU独占。

在步骤803,输入/输出桥缓存主控器408收到命令SnpBlkE后,提取地址A和命令信息(例如要更新PCIe设备缓存行的状态为被CPU独占和其他信息)并封装成VDM0的消息(嗅探消息),发到PCIe总线上去,以便被PCIe设备的PCIe设备缓存控制器409嗅探。

在步骤804,PCIe设备缓存控制器409嗅探到该VDM0的消息后,检查自己内部缓存中地址A的对应的缓存行的状态,发现该缓存行的数据已经被修改(状态M),因此先修改该缓存行的状态为无效态(状态I),并将修改的数据和状态信息(切换已成功)封装在VDM1消息中,放到PCIe总线上去。如果发现该缓存行的数据没有修改,就不用传数据,只传输状态信息(切换已成功)。当然,该VDM1消息中还包括能确认是针对步骤803中收到的SnpBlkE的命令的响应的标签号。

在步骤805,输入/输出桥缓存主控器408收到该VDM1消息后,解析各字段,通过标签号确定是对应步骤803中收到的SnpBlkE的嗅探命令的响应后,向经由内部总线内存缓存从控器402发送内部总线的缓存命令SnpRspStatus,并携带已被修改的数据和状态信息(切换已成功),以便被内存缓存从控器402嗅探。

在步骤806中,内存缓存从控器402嗅探到该SnpRspStatus命令后,根据状态信息,确定缓存行的状态切换已经完成,将携带的数据更新到内存中,修改缓存行的状态为被CPU所独占,并将数据和状态以内部总线的缓存命令RspStatus返回给CPU的CPU缓存主控器401。

在步骤807中,CPU缓存主控器401根据返回的数据和状态,将自己内部的缓存行的状态改成被CPU独占态(E),并用返回的数据更新该缓存行。

当然,上述例子仅采用CPU发起独占的读写请求作为示例,但是修改、共享等读写请求的情况也可以参考上述例子。

如此,通过设置CPU缓存主控器401、内存缓存从控器402、包括输入/输出桥缓存主控器408的输入/输出桥控制器403三个硬件,在CPU对内存中的一地址的读写请求来修改、独占、共享该地址的数据的情况下,通过各种消息的交互来维护CPU、内存、PCIe设备三者的缓存一致性。

下面介绍PCIe设备发起读写请求的实施例。

在一个实施例中,输入/输出桥控制器403被配置为:响应于通过第一PCIe总线消息接收PCIe设备对第二地址的第二读写请求,并通过内部总线的缓存命令经由内部总线发送到内存缓存从控器402。

内存缓存从控器402被配置为根据第二地址的CPU缓存行的第二状态,通过内部总线的缓存命令经由内部总线将第二地址的第二数据和第二状态发输入/输出桥控制器403的输入/输出桥缓存主控器408。

输入/输出桥缓存主控器408被配置为将第二数据和第二状态转换通过第二PCIe总线消息经由PCIe总线发送到PCIe设备,以便PCIe设备用第二数据和第二状态来更新第二地址的PCIe设备缓存行的数据和状态。

在一个实施例中,PCIe设备被配置为响应于需要第二地址的数据,根据第二地址在PCIe设备缓存行中是否命中,如果未命中,则向输入/输出桥缓存主控器408发送第二读写请求,并将第二地址的PCIe设备缓存行的状态记录为无效态。

在一个实施例中,第二读写请求是独占或共享第二地址的数据,其中第二状态为无效态,PCIe设备用第二数据和第二状态来更新第二地址的PCIe设备缓存行的数据和更新状态为被PCIe设备修改、独占或共享。

如此,通过设置CPU缓存主控器401、内存缓存从控器402、包括输入/输出桥缓存主控器408的输入/输出桥控制器403三个硬件,在PCIe设备对内存中的一地址的读写请求来修改、独占、共享该地址的数据的情况下,通过各种消息的交互来维护CPU、内存、PCIe设备三者的缓存一致性。

图9示出了根据本发明的实施例在PCIe设备对内存中的一地址的读写请求来独占该地址的数据的情况下的操作的示例。

在步骤901,PCIe设备需要用到某一地址B对应的数据,首先会在自己的缓存中搜索是否有匹配的地址,即是否命中,当PCIe设备缓存控制器409通过在缓存行的查找表(TLB)中发现地址B未命中后,则PCIe设备缓存控制器409用VDM0消息经由PCIe总线向输入/输出桥控制器403的输入/输出桥缓存主控器408发起从内存的地址B读取该数据的一次独占读操作,期望能够独占该地址B的数据,此时PCIe设备缓存控制器409中记录的该缓存行的状态为I,即无效缓存行。

在步骤902,输入/输出桥缓存主控器408接收并解析该VDM0消息,根据地址B和请求的命令,将其转换为根复合体内部总线的内部总线的缓存命令、例如RdBlkE命令,携带地址B和其他信息发给内存缓存从控器402。

在步骤903,内存缓存从控器402检查该地址,发现内存自己保持的一个TLB查找表中查找该地址B的缓存行的状态为空,即I,表示可以被其他设备所独占,因此产生内部总线的缓存命令,例如RspStatus,携带对应数据和状态信息,返回给输入/输出桥缓存主控器408。而如果查找该地址B的缓存行的状态已经被独占,表示不可以被其他设备所独占,则状态信息为不成功。该RspStatus还携带标签号,来指示是哪个RdBlkE命令的响应信息。

在步骤904,输入/输出桥缓存主控器408从该RspStatus所携带的标签号确定是对应之前的RdBlkE命令的响应信息,将相应数据和状态信息封装成VDM1消息,发到PCIe总线上去,以便PCIe设备嗅探。该VDM1消息还包含表示这是步骤901所发出的读请求已经成功完成的ID信息。

在步骤905,当PCIe设备嗅探到该VDM1消息时,通过比对其中的ID信息表示,这是对应步骤901中所发出的读请求已经成功完成,则更新数据到相应缓存行并更改缓存行的状态从I(无效)改变为被PCIe设备独占(E)。

如此,通过设置CPU缓存主控器401、内存缓存从控器402、包括输入/输出桥缓存主控器408的输入/输出桥控制器403三个硬件,在PCIe设备对内存中的一地址的读写请求来修改、独占、共享该地址的数据的情况下,通过各种消息的交互来维护CPU、内存、PCIe设备三者的缓存一致性。

当然,上述例子仅采用PCIe设备发起独占的读写请求作为示例,但是修改、共享等读写请求的情况也可以参考上述例子。

图10示出了根据本发明的实施例的实现PCIe设备的缓存一致性的方法的流程图。

实现PCIe设备的缓存一致性的方法1000包括:步骤1001,由通过内部总线与中央处理器单元CPU耦合的CPU缓存主控器401,通过内部总线的缓存命令经由内部总线发送CPU对第一地址的第一读写请求到内存缓存从控器402;步骤1002,由通过内部总线与内存耦合的内存缓存从控器402,根据第一读写请求的第一地址的内存缓存行的状态,更新第一地址的内存缓存行的状态,通过内部总线的缓存命令经由内部总线向输入/输出桥控制器403发送第一地址和要更新PCIe设备缓存行的状态为第一状态的命令;步骤1003,由通过PCIe总线与PCIe设备耦合的输入/输出桥控制器403:将第一地址和要更新PCIe设备缓存行的状态为第一状态的命令通过第一PCIe总线消息经由PCIe总线发送到PCIe设备,通过第二PCIe总线消息接收来自PCIe设备的第一地址的第一数据和更新完PCIe设备缓存行的状态为第一状态的响应,并通过内部总线的缓存命令经由内部总线发送到内存缓存从控器402,其中,由内存缓存从控器402用第二PCIe总线消息中的第一数据和第一状态来更新第一地址的内存缓存行的数据和状态,并通过内部总线的缓存命令发送第一数据和已更新完状态的响应到CPU缓存主控器401,其中,由CPU缓存主控器401用第一数据和已更新完状态的响应来更新CPU缓存行的数据和状态。

在一个实施例中,由CPU缓存主控器401从CPU接收第一读写请求、并根据第一读写请求和CPU缓存行的状态判断第一地址在CPU缓存行中是否命中,如果未命中,则向内存缓存从控器402发送第一读写请求。

在一个实施例中,第一读写请求包括修改或独占或共享第一地址的数据,第一读写请求的第一地址的内存缓存行的状态包括已经被PCIe设备独占,第一状态为无效态,其中,由内存缓存从控器402用第二PCIe总线消息中的第一数据和第一状态来更新第一地址的内存缓存行的数据和更新状态为被CPU修改、独占或共享,由CPU缓存主控器401用第一数据和第一状态来更新CPU缓存行的数据和更新状态为被CPU修改、独占或共享。

在一个实施例中,由输入/输出桥控制器403,响应于通过第一PCIe总线消息接收PCIe设备对第二地址的第二读写请求,并通过内部总线的缓存命令经由内部总线发送到内存缓存从控器402,由内存缓存从控器402,根据第二地址的CPU缓存行的第二状态,通过内部总线的缓存命令经由内部总线将第二地址的第二数据和第二状态发送到输入/输出桥控制器403,由输入/输出桥控制器403,将第二数据和第二状态转换通过第二PCIe总线消息经由PCIe总线发送到PCIe设备,以便PCIe设备用第二数据和第二状态来更新第二地址的PCIe设备缓存行的数据和状态。

在一个实施例中,由PCIe设备,响应于需要第二地址的数据,根据第二地址在PCIe设备缓存行中是否命中,如果未命中,则向输入/输出桥控制器403发送第二读写请求,并将第二地址的PCIe设备缓存行的状态记录为无效态。

在一个实施例中,第二读写请求是独占或共享第二地址的数据,其中第二状态为无效态,由PCIe设备用第二数据和第二状态来更新第二地址的PCIe设备缓存行的数据和更新状态为被PCIe设备修改、独占或共享。

如此,通过设置CPU缓存主控器401、内存缓存从控器402、输入/输出桥控制器403三个硬件,在CPU或PCIe对内存中的一地址的读写请求来修改、独占、共享该地址的数据的情况下,通过各种消息的交互来维护CPU、内存、PCIe设备三者的缓存一致性。

图11示出了适于用来实现本发明实施方式的示例性计算机系统的框图。

计算机系统可以包括处理器(H1);存储器(H2),耦合于处理器(H1),且在其中存储计算机可执行指令,用于在由处理器执行时进行本发明的实施例的各个方法的步骤。

处理器(H1)可以包括但不限于例如一个或者多个处理器或者或微处理器等。

存储器(H2)可以包括但不限于例如,随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、软碟、固态硬盘、可移动碟、CD-ROM、DVD-ROM、蓝光盘等。

除此之外,该计算机系统还可以包括数据总线(H3)、输入/输出(I/O)总线(H4),显示器(H5)以及输入/输出设备(H6)(例如,键盘、鼠标、扬声器等)等。

处理器(H1)可以通过I/O总线(H4)经由有线或无线网络(未示出)与外部设备(H5、H6等)通信。

存储器(H2)还可以存储至少一个计算机可执行指令,用于在由处理器(H1)执行时本技术所描述的实施例中的各个功能和/或方法的步骤。

当然,上述的具体实施例仅是例子而非限制,且本领域技术人员可以根据本发明的构思从上述分开描述的各个实施例中合并和组合一些步骤和装置来实现本发明的效果,这种合并和组合而成的实施例也被包括在本发明中,在此不一一描述这种合并和组合。

注意,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本发明的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本发明为必须采用上述具体的细节来实现。

本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。

本公开中的步骤流程图以及以上方法描述仅作为例示性的例子并且不意图要求或暗示必须按照给出的顺序进行各个实施例的步骤。如本领域技术人员将认识到的,可以按任意顺序进行以上实施例中的步骤的顺序。诸如“其后”、“然后”、“接下来”等等的词语不意图限制步骤的顺序;这些词语仅用于引导读者通读这些方法的描述。此外,例如使用冠词“一个”、“一”或者“该”对于单数的要素的任何引用不被解释为将该要素限制为单数。

另外,本文中的各个实施例中的步骤和装置并非仅限定于某个实施例中实行,事实上,可以根据本发明的概念来结合本文中的各个实施例中相关的部分步骤和部分装置以构思新的实施例,而这些新的实施例也包括在本发明的范围内。

以上描述的方法的各个操作可以通过能够进行相应的功能的任何适当的手段而进行。该手段可以包括各种硬件和/或软件组件和/或模块,包括但不限于硬件的电路、专用集成电路(ASIC)或处理器。

可以利用被设计用于进行在此描述的功能的通用处理器、数字信号处理器(DSP)、ASIC、场可编程门阵列信号(FPGA)或其他可编程逻辑器件(PLD)、离散门或晶体管逻辑、离散的硬件组件或者其任意组合而实现或进行描述的各个例示的逻辑块、模块和电路。通用处理器可以是微处理器,但是作为替换,该处理器可以是任何商业上可获得的处理器、控制器、微控制器或状态机。处理器还可以实现为计算设备的组合,例如DSP和微处理器的组合,多个微处理器、与DSP核协作的微处理器或任何其他这样的配置。

结合本公开描述的方法或算法的步骤可以直接嵌入在硬件中、处理器执行的软件模块中或者这两种的组合中。软件模块可以存在于任何形式的有形存储介质中。可以使用的存储介质的一些例子包括随机存取存储器(RAM)、只读存储器(ROM)、快闪存储器、EPROM存储器、EEPROM存储器、寄存器、硬碟、可移动碟、CD-ROM等。存储介质可以耦接到处理器以便该处理器可以从该存储介质读取信息以及向该存储介质写信息。在替换方式中,存储介质可以与处理器是整体的。软件模块可以是单个指令或者许多指令,并且可以分布在几个不同的代码段上、不同的程序之间以及跨过多个存储介质。

在此公开的方法包括用于实现描述的方法的动作。方法和/或动作可以彼此互换而不脱离权利要求的范围。换句话说,除非指定了动作的具体顺序,否则可以修改具体动作的顺序和/或使用而不脱离权利要求的范围。

上述功能可以按硬件、软件、固件或其任意组合而实现。如果以软件实现,功能可以作为指令存储在切实的计算机可读介质上。存储介质可以是可以由计算机访问的任何可用的切实介质。通过例子而不是限制,这样的计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光碟存储、磁碟存储或其他磁存储器件或者可以用于携带或存储指令或数据结构形式的期望的程序代码并且可以由计算机访问的任何其他切实介质。如在此使用的,碟(disk)和盘(disc)包括紧凑盘(CD)、激光盘、光盘、数字通用盘(DVD)、软碟和蓝光盘,其中碟通常磁地再现数据,而盘利用激光光学地再现数据。

因此,计算机程序产品可以进行在此给出的操作。例如,这样的计算机程序产品可以是具有有形存储(和/或编码)在其上的指令的计算机可读的有形介质,该指令可由处理器执行以进行在此描述的操作。计算机程序产品可以包括包装的材料。

软件或指令也可以通过传输介质而传输。例如,可以使用诸如同轴电缆、光纤光缆、双绞线、数字订户线(DSL)或诸如红外、无线电或微波的无线技术的传输介质从网站、服务器或者其他远程源传输软件。

此外,用于进行在此描述的方法和技术的模块和/或其他适当的手段可以在适当时由用户终端和/或基站下载和/或其他方式获得。例如,这样的设备可以耦接到服务器以促进用于进行在此描述的方法的手段的传送。或者,在此描述的各种方法可以经由存储部件(例如RAM、ROM、诸如CD或软碟等的物理存储介质)提供,以便用户终端和/或基站可以在耦接到该设备或者向该设备提供存储部件时获得各种方法。此外,可以利用用于将在此描述的方法和技术提供给设备的任何其他适当的技术。

其他例子和实现方式在本公开和所附权利要求的范围和精神内。例如,由于软件的本质,以上描述的功能可以使用由处理器、硬件、固件、硬连线或这些的任意的组合执行的软件实现。实现功能的特征也可以物理地位于各个位置,包括被分发以便功能的部分在不同的物理位置处实现。而且,如在此使用的,包括在权利要求中使用的,在以“至少一个”开始的项的列举中使用的“或”指示分离的列举,以便例如“A、B或C的至少一个”的列举意味着A或B或C,或AB或AC或BC,或ABC(即A和B和C)。此外,措辞“示例的”不意味着描述的例子是优选的或者比其他例子更好。

可以不脱离由所附权利要求定义的教导的技术而进行对在此描述的技术的各种改变、替换和更改。此外,本公开的权利要求的范围不限于以上描述的处理、机器、制造、事件的组成、手段、方法和动作的具体方面。可以利用与在此描述的相应方面进行基本相同的功能或者实现基本相同的结果的当前存在的或者稍后要开发的处理、机器、制造、事件的组成、手段、方法或动作。因而,所附权利要求包括在其范围内的这样的处理、机器、制造、事件的组成、手段、方法或动作。

提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本发明。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本发明的范围。因此,本发明不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。

为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本发明的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

24页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:数据高速存储系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类