CN110209610B - 存储器接口 - Google Patents

存储器接口 Download PDF

Info

Publication number
CN110209610B
CN110209610B CN201910146821.9A CN201910146821A CN110209610B CN 110209610 B CN110209610 B CN 110209610B CN 201910146821 A CN201910146821 A CN 201910146821A CN 110209610 B CN110209610 B CN 110209610B
Authority
CN
China
Prior art keywords
cache
memory
snoop
interface
bus
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910146821.9A
Other languages
English (en)
Other versions
CN110209610A (zh
Inventor
马丁·约翰·罗宾逊
马克·兰德斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN110209610A publication Critical patent/CN110209610A/zh
Application granted granted Critical
Publication of CN110209610B publication Critical patent/CN110209610B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/126Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine and has means for transferring I/O instructions and statuses between control unit and main processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0846Cache with multiple tag or data arrays being simultaneously accessible
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1647Handling requests for interconnection or transfer for access to memory bus based on arbitration with interleaved bank access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/18Handling requests for interconnection or transfer for access to memory bus based on priority control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • G06F12/1018Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一种用于在存储器总线与高速缓存存储器之间接口连接的存储器接口,包括:多个总线接口,所述多个总线接口被配置为在所述存储器总线与所述高速缓存存储器之间传送数据;以及多个窥探处理器,所述多个窥探处理器被配置为从所述存储器总线接收窥探请求;其中,每个窥探处理器与相应的总线接口相关联并且每个窥探处理器在接收到窥探请求时,被配置为确定所述窥探请求是否涉及与该窥探处理器相关联的所述总线接口并且依赖于该确定来处理所述窥探请求。

Description

存储器接口
技术领域
本发明涉及存储器接口,具体地涉及用于在存储器总线与高速缓存存储器之间进行接口连接的存储器接口,所述存储器接口包括多个总线接口。
背景技术
常规的计算系统包括耦合到高速缓存存储器的存储器总线。一些系统包括耦合到多于一个高速缓存存储器或者耦合到高速缓存存储器处的多于一个高速缓存存储体的总线。每个存储器可以具有到总线的单独访问路径,例如以允许并行处理。存在在不同的路径之间出现数据冲突的可能性。可以沿着包括相同的目的地地址的不同的数据路径中的多于一个接收多个请求。这可在处理多个请求以避免冲突、处理延迟和/或对请求发送不准确的响应时引起问题。这在一致系统中可能特别重要。
因此需要解决此类问题。
发明内容
本发明内容被提供来以简化形式引入在下面在具体实施方式中进一步描述的一系列概念。本发明内容不旨在识别所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
根据本公开的一个方面,提供了一种用于在存储器总线与高速缓存存储器之间进行接口连接的存储器接口,包括:
多个总线接口,所述多个总线接口被配置为在所述存储器总线与所述高速缓存存储器之间传送数据;以及
多个窥探处理器,所述多个窥探处理器被配置为从所述存储器总线接收窥探请求;
其中,每个窥探处理器与相应的总线接口相关联,并且每个窥探处理器被配置为在接收到窥探请求时确定所述窥探请求是否涉及与该窥探处理器相关联的所述总线接口并且依赖于该确定来处理所述窥探请求。
适当地,每个窥探处理器被配置为依赖于由所述窥探请求寻址的存储器来确定所述窥探请求是否涉及与该窥探处理器相关联的所述总线接口,并且依赖于该确定来生成对所述窥探请求的响应。
适当地,所述存储器接口包括被配置为维持所述多个总线接口中的每一个与相应的存储器地址集之间的映射的数据结构。
适当地,所述相应的存储器地址集中的每一个包括存储器地址的列表和存储器地址的范围中的至少一个。
适当地,所述高速缓存存储器包括多个高速缓存存储体,并且每个总线接口被配置为向与该总线接口相关联的一个或多个高速缓存存储体传送数据。适当地,每个窥探处理器被配置为:在第一映射中将由所述窥探请求寻址的存储器映射到所述多个高速缓存存储体中的高速缓存存储体,并且在第二映射中将所述高速缓存存储体映射到所述多个总线接口中的一个。适当地,每个窥探处理器被配置为通过使用散列函数来执行所述第一映射和所述第二映射中的至少一个。
适当地,所述第一映射是由所述窥探请求寻址的存储器与所述高速缓存存储体之间的一对一映射和允许由所述窥探请求寻址的存储器映射到多于一个高速缓存存储体的映射中的一个。
适当地,每个窥探处理器被配置为在由所述窥探请求寻址的存储器未映射到与该窥探处理器相关联的总线接口的情况下确定所述窥探请求不涉及与该窥探处理器相关联的总线接口。适当地,每个窥探处理器被配置为在所述映射不包括由所述窥探请求寻址的存储器的情况下确定所述窥探请求不涉及与该窥探处理器相关联的总线接口。
适当地,所述存储器接口包括被配置为存储与所述高速缓存存储器处的高速缓存行有关的状态信息的高速缓存行状态数据结构,每个窥探处理器被配置为在所述窥探请求涉及与该窥探处理器相关联的总线接口的情况下依赖于存储在所述高速缓存行状态数据结构中的状态信息来生成对所述窥探请求的响应。
适当地,在所述状态信息指示所述高速缓存行是以下各项中的至少一个的情况下:
处于无效状态,
正在经历溢出,以及
正在经历写回或驱逐过程,
所关联的窥探处理器被配置为确定所述窥探请求导致高速缓存未命中并且使得在所述总线上发送对所述窥探请求的对应响应。
适当地,所述窥探处理器中的至少一个被配置为通过访问所述高速缓存来处理所述窥探请求。
适当地,所述窥探处理器中的至少一个被配置为:在确定所述窥探请求不涉及与该窥探处理器相关联的总线接口时,使得在不访问所述高速缓存存储器的情况下在所述总线上发送响应。
适当地,每个窥探处理器包括用于计算所述窥探请求所涉及的总线接口的总线计算模块。
适当地,所述总线计算模块被配置为依赖于在所述数据结构处维持的映射来计算所述窥探请求所涉及的所述总线接口。
适当地,所述总线计算模块被配置为执行所述第一映射和所述第二映射中的至少一个。
适当地,每个窥探处理器包括用于存储所接收到的窥探请求的缓冲器。适当地,所述缓冲器包括先进先出缓冲器。适当地,每个窥探处理器被配置为以与所述窥探请求被接收的顺序不同的顺序处理所述缓冲器上的窥探请求。适当地,每个窥探处理器被配置为使用所述缓冲器来以与所述窥探请求被接收的顺序相对应的顺序输出对窥探请求的响应。
适当地,每个窥探处理器包括用于控制对所述高速缓存行状态数据结构的访问、访问所述高速缓存、向所述高速缓存发送命令以及发出对窥探请求的响应中的至少一个的控制逻辑。
适当地,由所述窥探请求寻址的存储器是物理地址空间中的物理地址,并且所述高速缓存存储器使用虚拟地址空间,所述存储器接口包括被配置为维持从所述物理地址空间到所述虚拟地址空间的映射的反向转换模块,所述反向转换模块被配置为将所述窥探请求转换为在所述虚拟地址空间中寻址的经转换的窥探请求。适当地,所述反向转换模块包括基于所述物理地址空间与所述虚拟地址空间之间的已知关系来计算依赖于所述物理地址的所述虚拟地址的逻辑。适当地,所述反向转换模块包括被配置为维持从所述物理地址空间到所述虚拟地址空间的映射的反向转换数据结构。适当地,所述反向转换数据结构包括将所述物理地址空间中的物理地址链接到所述虚拟地址空间中的对应虚拟地址的目录。
适当地,所述高速缓存存储器是连接到所述存储器总线的设备的高速缓存层级的最低级。
适当地,所述存储器接口被体现在集成电路上的硬件中。
根据本公开的另一方面,提供了一种用于在存储器接口处在存储器总线与高速缓存存储器之间进行接口连接的方法,所述存储器接口包括被配置为在所述存储器总线与所述高速缓存存储器之间传送数据的多个总线接口,以及被配置为从所述存储器总线接收窥探请求的多个窥探处理器,每个窥探处理器与相应的总线接口相关联,所述方法包括:
在所述存储器接口处接收窥探请求;
每个窥探处理器确定所述窥探请求是否涉及其相关联的相应的总线接口;以及
每个窥探处理器依赖于该确定来处理所述窥探请求。
适当地,所述确定包括依赖于由所述窥探请求寻址的存储器来确定所述窥探请求是否涉及与该窥探处理器相关联的所述总线接口,并且其中,所述处理包括依赖于该确定来生成对所述窥探请求的响应。
适当地,所述确定包括依赖于所述多个总线接口中的每一个与相应的存储器地址集之间的映射来确定所述窥探请求是否涉及与该窥探处理器相关联的总线接口。
适当地,所述高速缓存存储器包括多个高速缓存存储体,并且每个总线接口被配置为向与该总线接口相关联的一个或多个高速缓存存储体传送数据,并且其中,所述确定包括在第一映射中将由所述窥探请求寻址的存储器映射到所述多个高速缓存存储体中的高速缓存存储体,以及在第二映射中将所述高速缓存存储体映射到所述多个总线接口中的一个。适当地,所述第一映射和所述第二映射中的至少一个使用散列函数来执行。适当地,所述第一映射是由所述窥探请求寻址的存储器与所述高速缓存存储体之间的一对一映射和允许由所述窥探请求寻址的存储器映射到多于一个高速缓存存储体的映射中的一个。
适当地,所述存储器接口包括被配置为存储与所述高速缓存存储器处的高速缓存行有关的状态信息的高速缓存行状态数据结构,并且其中,所述处理包括依赖于存储在所述高速缓存行状态数据结构中的状态信息来生成对所述窥探请求的响应。
适当地,所述处理包括通过访问所述高速缓存来处理所述窥探请求。
适当地,所述处理包括,在确定所述窥探请求不涉及与该窥探处理器相关联的总线接口时,使得在不访问所述高速缓存存储器的情况下在所述总线上发送响应。
适当地,所述方法进一步包括在所述存储器接口处接收另外的窥探请求并且以与所述窥探请求被接收的顺序不同的顺序处理所述窥探请求。
适当地,所述方法进一步包括以与所述窥探请求被接收的所述顺序相对应的顺序输出对窥探请求的响应。
适当地,由所述窥探请求寻址的所述存储器是物理地址空间中的物理地址,并且所述高速缓存存储器使用虚拟地址空间,所述方法进一步包括维持从所述物理地址空间到所述虚拟地址空间的映射,以及根据所维持的映射,将所述窥探请求转换为在所述虚拟地址空间中寻址的经转换的窥探请求。
根据本公开的另一方面,提供了一种使用集成电路制造系统来制造如本文所描述的存储器接口的方法。
根据本公开的另一方面,提供了一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统中被处理时,将所述系统配置为制造如本文所描述的存储器接口。
根据本公开的另一方面,提供了一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质在其上存储有集成电路的计算机可读描述,所述计算机可读描述当在集成电路制造系统中被处理时,使所述集成电路制造系统制造如本文所描述的存储器接口。
根据本公开的另一方面,提供了一种集成电路制造系统,所述集成电路制造系统被配置为制造如本文所描述的存储器接口。
根据本公开的另一方面,提供了一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质在其上存储有描述如本文所描述的存储器接口的计算机可读集成电路描述;布局处理系统,所述布局处理系统被配置为处理所述集成电路描述以便生成体现所述存储器接口的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置为根据所述电路布局描述来制造所述存储器接口。
根据本公开的另一方面,提供了用于执行如本文所描述的方法的计算机程序代码。
根据本公开的另一方面,提供了一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质在其上存储有计算机可读指令,所述计算机可读指令当在计算机系统处被执行时,使所述计算机系统执行如本文所描述的方法。
以上任何方面的任何一个或多个特征可以与以上任何其他方面的任何一个或多个特征组合。可以将任何装置特征重写为方法特征,同时在措辞方面做出必要的变化。仅仅为了简洁起见,尚未在这里完全地全写出这些。
附图说明
现在将参考附图通过示例来描述本发明。在附图中:
图1A示意性地示出包括多个处理器和多个高速缓存的系统;
图1B示意性地示出主从系统;
图2图示用于接收存储器请求的过程;
图3示意性地示出包括多个处理器和多个高速缓存的另一系统;
图4示意性地示出包括多个处理器和多个高速缓存的另一系统;
图5示意性地示出图4的系统的一部分;
图6A示意性地示出窥探处理器;
图6B示意性地示出示例性窥探缓冲器状态;
图7示意性地示出反向转换数据结构和高速缓存行状态数据结构;
图8示意性地示出示例性高速缓存行状态;
图9示意性地示出存储器接口的组件;
图10示意性地示出高速缓存行状态模块架构;
图11示意性地示出高速缓存行状态的另一示例;
图12示意性地示出高速缓存存储体接口架构;
图13图示用于接收存储器事务请求的过程;以及
图14是集成电路制造系统的示意图。
具体实施方式
以下描述通过示例来呈现以使得本领域的技术人员能够做出并使用本发明。本发明不限于本文描述的实施例,并且对所公开的实施例的各种修改对于本领域的技术人员而言将是显而易见的。
现在将仅通过示例来描述实施例。
诸如计算系统100之类的计算系统包括第一处理器102、第一高速缓存存储器104和主存储器114。主存储器114适于比第一高速缓存存储器104更长期地存储数据。例如,主存储器114与第一高速缓存存储器104相比是低易失性的。主存储器114通常还具有比第一高速缓存存储器104大得多的存储容量。主存储器114可以远离第一处理器102。第一高速缓存存储器104一般地被设置在第一处理器102处,或者在数据路径中与第一处理器102相邻,以便位于第一处理器102与主存储器114之间。
可以例如通过第一处理器经由读取事务来访问第一高速缓存存储器处和/或主存储器处的数据。可以经由写入事务将数据写入到第一高速缓存存储器和/或主存储器。例如,数据可以由第一处理器写入到第一高速缓存存储器和/或主存储器。
高速缓存104被配置为存储数据,使得处理器102可以从高速缓存104中检索该数据(和/或将修改的数据写入到高速缓存104),而不是需要直接地从主存储器114中检索该数据(和/或将修改的数据写入到主存储器114)。对高速缓存的访问比对主存储器的对应访问更快,常常那么明显。这意味着高速缓存上的事务(例如读取或写入事务)可比主存储器上的对应事务完成快得多。这帮助减少系统中的延迟。
计算系统100可以在没有数据在第一高速缓存104中情况下初始化。所有相关数据可以替代地仅被存储在主存储器114中。在由处理器对于主存储器中的特定物理地址处的数据发出读取请求(或处理器处的指令)时,例如作为读取事务的一部分,确定了存在“高速缓存未命中”,即所需数据未被包含在高速缓存中(因为在高速缓存中尚没有数据)。在确定高速缓存未命中时,例如响应于读取请求,从主存储器中提取寻址的数据。通常,物理地址将指定存储器页面内的位置。适当地,整行数据(例如在一个示例中为64字节)而不是仅仅指定位置处的数据被提取。这是因为,由于主存储器中的数据局部性,在后续事务中也将需要与指定位置相邻的位置处的数据的机会增加。
所提取的数据将被存储在高速缓存中、在具有对应于从中读取数据的主存储器物理地址的高速缓存地址的位置中。这使得能够在对该数据做出后续请求时访问高速缓存中的数据。数据可被存储在高速缓存的被称作“高速缓存行”的一部分中。
高速缓存比主存储器访问更快。在处理器随后针对相同的地址(即对存储有数据的高速缓存地址)发出读取指令的情况下,高速缓存将返回“高速缓存命中”,即指示数据存在于高速缓存中,并且将数据(来自相关高速缓存行)从高速缓存返回到处理器,而无需访问主存储器。因此,由于高速缓存具有比主存储器更低的延迟,此读取事务可完成得快得多。
可以对与系统总线相邻的高速缓存进行物理寻址,意味着主存储器数据条目的物理地址也用于对高速缓存进行寻址。这降低系统复杂性,因为可使用相同的地址来对高速缓存进行寻址以便对主存储器进行寻址。
在来自处理器的要求写入到主存储器位置的事务中,可立即将写入应用于主存储器位置。由于主存储器的等待时间,这可能花费相对长的时间才能完成。替代地,在高速缓存中与该主存储器位置相关联的高速缓存行可发生写入。因此,在处理器发起写入事务的情况下,高速缓存中的物理寻址位置可发生写入。主存储器中的对应物理寻址位置未必立即发生写入。对高速缓存的写入可比对主存储器的写入快得多,从而减少完成写入事务所需的时间,减少系统中的等待时间。
写入事务可以不同的方式完成。在一种情形下,对主存储器的写入事务(与对高速缓存的已完成的写入事务相对应)可以排队,并且可以在某个稍后的时间发生。处理器不必等待这个发生,而是可以继续并行处理其他指令。在另一情形下,写入事务可以在高速缓存处停止,即在主存储器上将没有写入事务排队。这意味着高速缓存中的经修改的数据将不会被写入到主存储器。主存储器中的对应位置中的数据然后是旧的或过时的。在这种情况下,识别缓存数据是最新版本并且主存储器不包含此最新版本可能是有用的。例如,可以使用与缓存数据相关联的标志来完成这个,所述标志可以由位来表示。这个位可以是在高速缓存中。这个位可被称作“脏”位并且指示高速缓存行是“脏的”,即因为已经发生修改,所以高速缓存行中的数据尚未被写回到主存储器。
在随后将此高速缓存行数据写回到主存储器(这种事务可被称作“写回”事务)时,可以清除脏位或标志以指示该高速缓存行包含与主存储器中的对应地址处相同的数据,即它是“干净的”。这可能作为后续事务的一部分而发生,或者作为用于在给高速缓存断电并丢失高速缓存内容之前在主存储器中复制经更新的高速缓存内容的关机过程的一部分而发生。
在写回事务之后,该高速缓存行中的数据可以保留在最初写入它的高速缓存的部分(即高速缓存行)中,从而允许随后访问高速缓存中的该高速缓存行中的该数据,或者它可以被从高速缓存行中驱逐或刷新。当高速缓存行数据从高速缓存行中被驱逐时,它将释放空间以便将来的数据被存储在该高速缓存行中。
高速缓存行状态
在这个阶段引入不同的缓存行状态是有用的。在没有数据在高速缓存中情况下初始化系统的情况下,每个高速缓存行可以是空的。这些高速缓存行的状态可被认为是“无效的”,即在高速缓存行中没有有效数据。高速缓存行可处于它不包括来自主存储器的任何存储器行的副本(或者包含在高速缓存行中的任何数据被以适当的方式标记为无效)的“无效”状态。高速缓存行可处于它包括存储器行的唯一有效副本(即存储器行的任何其他副本)(例如在其他高速缓存处)无效的“唯一”状态。高速缓存行在该高速缓存行中的数据是脏的情况下可处于“脏”状态。关于高速缓存行的“脏”状态,耦合到包括该高速缓存行的高速缓存的相应的处理器(或更一般地主控—参见下文)可以负责将高速缓存行中的数据写回到存储器。高速缓存行在该高速缓存行中的数据是干净的情况下可处于“干净”状态。关于高速缓存行的“干净”状态,耦合到包括该高速缓存行的高速缓存的相应的处理器(或更一般地主控—参见下文)不负责写回高速缓存行中的数据。
在高速缓存行中的数据被从该高速缓存行中驱逐或者刷新的情况下,该高速缓存行可被标记为无效,和/或数据被重写和/或以其他方式删除,并且使得数据可能不可用于高速缓存中的后续访问。
通常系统将包括至少两级高速缓存:处理器处的第1级(L1)高速缓存(L1高速缓存可以是处理器的一部分),以及第2级(L2)高速缓存,通常在L1高速缓存与主存储器之间的数据路径中。通常,最低级高速缓存是物理寻址的。最低级高速缓存是在数据路径中最靠近耦合到主存储器的总线的高速缓存,例如具有仅两个高速缓存级的系统中的L2高速缓存,或具有三个高速缓存级的系统中的第3级高速缓存等。物理寻址的最低级高速缓存的提供可避免地址混叠的问题,并且还可允许高速缓存与主存储器之间的增强兼容性,因为将最低级高速缓存耦合到主存储器的总线上的指令通常是物理寻址的。因此,利用物理寻址的高速缓存,高速缓存和总线两者都将在相同的地址空间(即物理地址空间)中操作。
现代系统为了提高性能包括多个处理器。在此类系统中在多个处理器与主存储器之间可以有共享高速缓存,或者可以有多个高速缓存,例如每处理器一个高速缓存,如图1A中示意性地所示的。参考图1A,第一处理器P1 102具有与其相关联的第一高速缓存C1 104。第二处理器P2 106基于与其相关联的第二高速缓存C2 108。高速缓存C1、C2经由接口110、111连接到总线112。总线112耦合到主存储器114。接口110、111可以包括存储器管理单元(MMU)。MMU能够从在高速缓存存储器层级的较高级中使用的虚拟地址转换到在高速缓存存储器层级的较低级中并在主存储器中使用的物理地址。为了这样做,MMU可以包括或者能够访问存储从虚拟地址空间到物理地址空间的映射的表。通常MMU将整个虚拟地址空间映射到物理地址空间。
更一般地,如图1B中所示的,计算系统150可以包括可耦合到多个从控(或次级)设备的多个主控(或初级)设备。如图所示,三个主控设备(主控设备A 152、主控设备B 154和主控设备C 156)耦合到四个从控设备(从控设备A 160、从控设备B 162、从控设备C 164和从控设备D 166)。主控和从控的数量可以是相同的,或者它们可以是不同的。主控设备152、154、156经由总线、通信结构或片上网络(NoC)170耦合到从控设备160、162、164。在概念上,主控设备是可发起事务的设备;从控设备是对事务做出响应的设备。例如,主控设备可发出写入事务,所述写入事务可以在写入数据通道上,以执行数据从主控到从控的写入。主控设备可以发出读取事务,所述读取事务可以在读取数据通道上,以执行由主控对从控处的数据的读取。一个或多个主控设备可以是处理器。计算系统可以是多处理器系统。主控设备可以是中央处理单元(CPU)。主控设备可以是图形处理单元(GPU)。一个或多个主控设备可以是外围设备。一个或多个从控设备可以是存储器暂存器,例如高速缓存存储器或主存储器。可以关于每个处理器提供高速缓存存储器。
在诸如图1A和图1B中所示的系统中,应该考虑数据一致性,因为多于一个主控设备(例如处理器)可以试图访问主存储器中的相同的物理地址处的数据。例如,第一处理器P1 102可以在读取事务中访问主存储器114中的位置L1 116,并且可以将L1处的数据在其本地高速缓存C1 104中的副本存储在位置LC1 118处。第二处理器P2 106此后可以在写入事务中访问L1 116,并且可以修改存储在L1处的数据。第二处理器还可以修改存储在其本地高速缓存中的数据在位置LC2 120处的本地副本,而不是或者以及修改主存储器114中的位置L1处的数据。在任何一种情况下,存储在LC1处的数据将是过时的。由第一处理器进行的后续读取因此会读取存储在LC1处的不正确的数据。
系统因此适当地具有识别由不同的处理器进行的事务并且避免随后使用过时数据的方式。这样做的一个方式是通过监测总线上的所有事务来识别处理器何时在已经缓存在与不同的处理器相关联的高速缓存处的物理地址处发出事务,即另一高速缓存是否“拥有”存储在高速缓存行处的特定数据。对总线上的业务的这种监测可以被称作“窥探”。
窥探可以识别何时正在访问主存储器中的物理地址,其中该数据的本地副本已经被存储在高速缓存行中。因为最低级高速缓存照惯例是物理寻址的,所以窥探可以监测在另一高速缓存中使用的物理地址上的事务。
本发明人已经认识到,期望提供要虚拟寻址的最低级高速缓存,意味着最低级高速缓存在主存储器的虚拟地址空间而不是物理地址空间中被寻址。虚拟地址空间可以大于物理地址空间。虚拟地址空间的一个优点是处理器指令(例如在处理器上运行的程序)不必关心系统底层的物理地址空间,而是可以替代地完全在所期望的虚拟地址空间内操作。这可以提供当仍然在虚拟地址空间中操作时可由程序指令更容易地访问的附加高速缓存空间。当提供要虚拟寻址的最低级高速缓存时,还期望维持这种高速缓存与系统中的另一高速缓存之间的数据一致性。
经由总线(而不是从较高级高速缓存)在虚拟寻址的一致高速缓存处接收的事务(即在总线上被发送到高速缓存的窥探事务(或窥探请求))将与物理地址空间中的物理地址(例如在主存储器处使用的物理地址)相关联。可在MMU处在典型系统中执行的地址转换是从虚拟地址到物理地址。这使得在处理器处(在虚拟地址空间中)生成的读取和写入请求可适当地被寻址到主存储器(在物理地址空间中)。照惯例不在MMU处执行反向地址转换(即从物理地址空间到虚拟地址空间)。为了在MMU处获得反向地址转换,将有必要对与高速缓存中的高速缓存行相对应的所有物理地址执行详尽搜索以能够识别哪一个虚拟地址对应于接收到的物理地址。在一些实例中,可以将高速缓存作为集合关联高速缓存来提供;然后将需要跨越高速缓存中的每个集合详尽地执行搜索。如所提及的,通常MMU将整个虚拟地址空间映射到物理地址空间。搜遍所有物理地址将是非常费时的过程,并且将高度可能导致系统中的大等待时间增加。
反向转换
本发明人已经识别了在最低级高速缓存与总线之间的接口中提供附加功能性或与其相关联的附加功能性可以是有用的。此附加功能性包括用于将通过总线接收到的物理地址转换成在高速缓存中对应于所接收到的物理地址的虚拟地址的物理到虚拟地址转换(“反向转换”)。可以通过总线接收诸如窥探请求之类的存储器请求。可以在物理地址空间中对存储器请求进行寻址。存储器请求可以被转换成经转换的请求,其中该经转换的请求在虚拟地址空间中被寻址。
总线与高速缓存存储器之间的存储器接口可以实施一致性管理器,所述一致性管理器能够连续地跟踪在设备的最低级高速缓存内已被标记为一致的高速缓存行。可以将最低级高速缓存实施为虚拟索引和虚拟标记(VIVT)高速缓存。因此存储器接口可能能够执行反向地址转换,因为例如经由ACE协议的传入窥探请求将总是供应物理地址并且这些物理地址被转换为虚拟地址以允许它们与最低级高速缓存内的匹配高速缓存行相关联。
反向转换功能性可以由反向转换模块提供。反向转换模块被配置为基于物理地址空间与虚拟地址空间之间的已知关系来计算依赖于物理地址的虚拟地址。当与对于高速缓存中的物理地址执行详尽搜索相比较时,这可提供等待时间减少。反向转换模块可以用软件、硬件或软件和硬件的组合来实施。例如,可以将反向转换模块实施在固定功能硬件中。反向转换模块可以包括基于物理地址空间与虚拟地址空间之间的已知关系来计算依赖于物理地址的虚拟地址的逻辑。
可以附加地或替代地通过提供用于反向转换功能性的数据结构来获得反向转换功能性。数据结构可以是表或其他类似的结构,如将在下面更详细地讨论的。数据结构可以位于诸如存储器接口的接口处,所述存储器接口例如在逻辑上位于最低级高速缓存与总线之间。数据结构可包括将物理地址链接到对应的虚拟地址的目录。因此当诸如存储器请求的事务识别物理地址时,可以在反向转换数据结构中查找与该物理地址相对应的虚拟地址。这允许以比其他情况更低的等待时间访问高速缓存中的相关虚拟地址。
本方法允许接收在物理地址空间中寻址的存储器请求(图2的步骤202)。诸如窥探请求之类的存储器请求可以是来自总线的对高速缓存的请求。所接收到的存储器请求被转换成经转换的存储器请求(204)。该经转换的存储器请求在虚拟地址空间(例如最低级高速缓存的虚拟地址空间)中被寻址。因为经转换的请求在最低级高速缓存的地址空间中被寻址(即,其在虚拟地址空间内被虚拟寻址),所以经转换的请求然后将适当地对高速缓存中的虚拟寻址的存储器位置进行寻址,并且因此可在虚拟地址空间中被处理(206)。
现在将参考图3和图4描述示例性系统架构。图3示意性地示出包括以下两个设备或主控的系统300:设备1 302和设备2 304。如图所示,设备1是图形处理单元(GPU)并且设备2是中央处理单元(CPU)。然而,本文讨论的技术的应用不限于一个或多个CPU和一个或多个GPU,而是可被扩展到任何多处理器系统,或更一般地具有多个主控和从控设备的主从系统。设备1包括处理器306和高速缓存308。类似地,设备2包括处理器310和高速缓存312。设备1高速缓存308和设备2高速缓存312通过存储器总线316耦合到主存储器314。设备1302包括存储器接口318。接口318被示出为位于高速缓存308与总线316之间,但是在所有示例中情况不必是这样的。在一些示例中,接口318耦合到高速缓存308和总线316就足够了。接口318适当地直接地耦合到高速缓存308并且耦合到总线316(即没有用来转换在接口与高速缓存之间或者在接口与总线之间提供的地址的其他模块或处理单元)。
存储器接口318包括用于将虚拟地址转换为物理地址的MMU 320。存储器接口318包括一致性管理器322。将在下面更详细地说明一致性管理器的结构和操作。一致性管理器322被配置为维持由设备1和设备2使用的地址空间(例如包含设备1高速缓存308、设备2高速缓存312和主存储器314的地址空间)的一致性。一致性管理器被配置为执行反向转换,即将物理地址转换为虚拟地址。
图4示意性地示出包括两个设备或主控的另一系统400。图4中所示的系统400与图3中所示的系统300类似。相同的附图标记已用于指代相同的元件,并且省略对这些的描述的重复。下文将描述图3和图4的系统之间的差异。图4的设备1 402包括两个处理器核心:核心1 406和核心2 407。每个处理器核心406、407耦合到相应的高速缓存408、409。核心1高速缓存408可以向核心1 406提供本地高速缓存存储器。核心2高速缓存409可以向核心2 407提供本地高速缓存存储器。设备1402包括最低级高速缓存330,其位于(至少在逻辑上)核心1高速缓存408和核心2高速缓存409与存储器接口318之间。最低级高速缓存可以包括多个高速缓存存储体。如图所示,最低级高速缓存330包括高速缓存存储体1 331、高速缓存存储体2 332、高速缓存存储体3 333和高速缓存存储体4 334。可以提供其他数量的高速缓存存储体。
最低级高速缓存330内的高速缓存存储体331、332、333、334在高速缓存中提供单独的存储区域。每个高速缓存内的单独的高速缓存存储体是可单独地寻址的。高速缓存存储体另外可以是相同的。在图4中所示的示例中,设备1 402包括两个处理器核心和四个高速缓存存储体。在其他示例中,处理器和高速缓存存储体的数量可变化。
存储器总线316包括到存储器接口318的两个访问路径316a和316b。这示意性地表示可以有在存储器总线316与设备1 402之间经由存储器接口318的多个访问路径或通道。访问路径的数量可以与高速缓存存储体的数量相同或更少。例如,一个访问路径可以耦合到每个高速缓存存储体中,或者一个访问路径可以耦合到多个高速缓存存储体中。这将参考图5进一步说明。
图5用一些附加细节示意性地示出如图4中所示的系统400的一部分。图5示出了最低级高速缓存330、存储器接口318和存储器总线316。这里,最低级高速缓存330已被示出为包括两个高速缓存存储体:高速缓存存储体1 331和高速缓存存储体2 332。为了清楚未示出高速缓存存储体3 333和高速缓存存储体4 334。然而可以在图5中所示的系统中提供附加高速缓存存储体。
存储器接口318适当地是在层级内允许一个处理器(例如GPU)与另一处理器(例如CPU)一致地通信的模块。这可意味着GPU能够在一致总线互连内(例如在根据AXI-ACE协议的一致总线互连内)作为完全缓存/一致主控参与。
存储器接口318包括两个总线接口:总线接口1 502和总线接口2504。每个总线接口被配置为在存储器总线316与高速缓存存储器的一部分之间进行接口连接。如图所示,总线接口1在总线316与高速缓存存储体1 331之间进行接口连接;总线接口2在总线316与高速缓存存储体2 332之间进行接口连接。虽然在图5中未示出高速缓存存储体3 333和高速缓存存储体4 334,但是总线接口1 502能附加地在总线316与高速缓存存储体3之间进行接口连接,并且总线接口2 504能附加地在总线316与高速缓存存储体4之间进行接口连接。替代地,能提供两个另外的总线接口,每个被布置为接口连接到高速缓存存储体3和高速缓存存储体4中的一个中。适当地总线接口位于存储器接口中的一致性管理器旁边。和在总线与高速缓存存储体之间进行接口连接一样,总线接口还耦合到一致性管理器322并且耦合到MMU 320。
MMU 320像在530处示意性地图示的那样与总线接口502、504耦合。MMU能够将由高速缓存330使用的虚拟地址转换为在存储器总线316上使用的物理地址空间中的物理地址。总线接口被适当地配置为将虚拟地址发送到MMU并且从MMU接收所对应的物理地址。总线接口然后可使用那些对应的物理地址来对由总线接口通过存储器总线发送的事务进行寻址。
总线接口502、504可以是与最低级高速缓存330相关联的接口转换器,例如AXI转换器。可以在相应的高速缓存存储体331、332与总线接口502、504之间提供高速缓存存储体接口(在图5中未示出)。高速缓存存储体接口可以作为与高速缓存分离的模块和/或作为形成高速缓存的一部分的模块被提供。
在一个实施方式中,最低级高速缓存330被配置为通过AMBA 4.0兼容接口对存储器做出请求,所述AMBA 4.0兼容接口包括一致性扩展(通常称为AXI-ACE)。总线接口502、504可以帮助确保符合诸如AXI-ACE协议之类的协议。存储器接口318的一致性管理器322连接到在总线316上与窥探请求相关联的通道。通道可以包括窥探地址通道510、窥探响应通道512和确认通道514。在AXI协议规范中定义的通道的剩余部分的大多数将由与最低级高速缓存330相关联的总线接口502、504直接地驱动。总线接口502、504耦合到一致性管理器322(图示在516、518处),使得一致性管理器可以监测传出一致事务(例如在地址响应(AR)接口上,例如CleanUnique和ReadUnique事务)和传入响应(例如在读取(R)响应通道上,例如对CleanUnique和ReadUnique事务的响应),以能够更新正在被跟踪的一致高速缓存行的状态并且以驱动读取确认信号(‘RACK’)514。一致性管理器322还可监测地址写入(AW)接口上的传出一致事务(例如写回和驱逐事务)以及写入响应(B)通道上的传入响应(例如对写回和驱逐事务的响应),以能够更新高速缓存行状态并且驱动写入确认信号(‘WACK’)514。
窥探地址(‘AC’)通道510是给具有关联的高速缓存330的诸如设备1 402处的处理器406的主控设备的输入,所述输入提供已被发出到该处理器(例如GPU)的窥探请求的地址和控制信息。如本文所讨论的,存储器接口318可以能够接受并处理不同的窥探事务类型,例如如AXI-ACE协议中所定义的。
窥探响应(‘CR’)通道512是来自具有关联的高速缓存330的诸如设备1 402处的处理器406的主控设备的输出,所述输出提供对被发出到该处理器(例如GPU)的窥探请求的响应。窥探地址通道510上的每一窥探请求在窥探响应通道512上具有对应的响应。对窥探请求的响应可以包括以下各项中的一个或多个:
·指示在窥探请求被接收到之前所窥探的高速缓存行是否被保持在唯一状态下,
·指示所窥探的高速缓存正在保留高速缓存行的副本,
·指示高速缓存行是脏的并且用于将高速缓存行写回到存储器的责任正在被传送到主控,
·指示高速缓存行是否损坏,以及
·指示高速缓存行数据是否将被传送。
窥探响应可以包括高速缓存行不存在于高速缓存中、高速缓存行存在但是已经无效或者高速缓存行存在并且正在保留高速缓存行的副本的指示。
在高速缓存330处存在窥探的高速缓存行的场景中,最低级高速缓存可以将高速缓存行写回到存储器(如果它是脏的),或者简单地使它无效。因此,到响应被发送到窥探请求时,响应可以指示高速缓存行存在但是已经无效。例外可以是高速缓存行的副本在如果是脏的则将它写回到存储器之后被保留在高速缓存中,在此情况下响应可以指示高速缓存行存在并且正在保留高速缓存行的副本。
ACE扩展包括用于指示主控何时完成读取或写入事务的两个确认信号。这些可以被几乎立即断言而未延迟以等待任何其他事务。存储器接口318可以使用这些确认信号来确保在从主控到相同的地址(相同的高速缓存行)的任何在先事务已完成之前不发出在主控的窥探地址通道510上关于特定地址(或高速缓存行)的事务。存储器接口318可以驱动此信号以表示与读取或写入事务完成相关联的任何状态转换已被执行,并且因此通过发出确认,存储器接口318从而保证它将能够准确地对刚刚已更新的高速缓存行的窥探请求做出响应。可以按照与读取/写入响应被接收到的顺序发出确认。
为了使得存储器接口318能够正确地对传入窥探请求做出响应,存储器接口可以被配置为监测内部接口并且更新高速缓存行状态,例如通过与高速缓存存储体交互。存储器接口还可以被配置为指示高速缓存何时刷新和/或使高速缓存行无效,例如通过在一致性管理器322处生成的“刷新-无效”命令520。
存储器接口318被配置为监测的内部接口包括:
·允许关于特定高速缓存行地址发出刷新-无效命令的命令接口,
·允许设置和清除掩码中的位以使得能够控制刷新过程的flush_active掩码。例如,当向高速缓存存储体发出刷新时,可以通过刷新ID来识别要刷新的高速缓存行,并且可在flush_active掩码中将与刷新ID相对应的位设置为高;然而,在刷新被处理之前可清除此位,指示应该忽视针对此高速缓存行的刷新,
·当刷新被处理或者忽视时,可将与刷新ID相对应的flush_processed位设置为高持续一个周期,
·允许在相关事务已完成时更新高速缓存行状态(例如无论它是否一致)的更新接口,
·读取通道请求接口。存储器接口可以被配置为监测将例如通过总线接口502、504在地址读取(‘AR’)接口522上输出的一致事务。这允许存储器接口能够改变高速缓存行状态并且/或者响应于传出请求而创建新条目,
·用于指示反向转换数据结构的哪些条目正在溢出的溢出掩码(或驱逐掩码)。如果这个位被设置,则可以防止地址读取总线上的事务继续进行到存储器,即读取事务不应该在反向转换数据结构中正在溢出的条目上继续进行,
·地址写入(‘AW’)接口522。存储器接口可以被配置为监测将例如通过总线接口502、504在地址写入接口(“写回/驱逐”接口)上输出的一致事务。这允许存储器接口能够响应于传出请求而改变高速缓存行状态,
·多路复用器接口。一旦准备好输出写回和/或驱逐事务,就也可以输出正在被写回和/或驱逐的高速缓存行的对应的反向转换数据结构条目编号。这允许被存储在反向转换数据结构内部的适当的物理地址的组合多路复用器(多路复用器),因为这避免依赖于存储器接口的剩余部分来转换请求并且因此可避免存储器接口的剩余部分需要执行读取请求以便对窥探做出响应,
·声明通道响应接口。存储器接口可以被配置为监测声明通道响应接口以便使得高速缓存行状态能够被更新,和/或以能够驱动读取确认信号(‘RACK’)514,
·写回通道响应接口。存储器接口可以被配置为监测写回通道响应接口以便使得高速缓存行状态能够被更新,和/或以能够驱动写入确认信号(‘WACK’)514。
一致性管理器包括两个窥探处理器:窥探处理器1 541和窥探处理器2 542。一般而言,一致性管理器包括关于每个总线接口502、504的窥探处理器。每个窥探处理器与相应的总线接口相关联。窥探处理器被配置为处理在与它们相关联的总线接口处接收到的窥探请求,如在本文中别处更详细地描述的。
窥探处理器
参考图6A,窥探处理器541、542被配置为接收窥探请求(例如通过窥探地址通道510接收到的窥探请求)。窥探处理器包括总线计算单元602。总线计算单元被配置为计算接收到的窥探请求是否涉及与窥探处理器相关联的总线接口(参见下文)。总线计算单元602耦合到缓冲器(其可以被称作窥探缓冲器)604。缓冲器与控制逻辑606双向地耦合。控制逻辑控制高速缓存行状态查找请求和响应608并且将命令刷新到高速缓存520。控制逻辑被布置为向窥探响应通道512发出窥探响应。一个或多个指针可以允许包含在缓冲器内的窥探以流水线方式同时地经历不同的处理阶段。窥探缓冲器可以是先进先出缓冲器。缓冲器可以允许请求被乱序处理,但是允许对请求的响应被以那些请求被接收的相同顺序输出。将在本文中别处对此进行更详细的讨论。
当在窥探请求接口上即通过窥探地址通道(AC)510接收到窥探请求时,反向转换数据结构条目(例如,页面转换表(PTT)条目)(若有的话)被查找。可以通过比较物理页面和保护位来执行查找。条目编号、反向转换数据结构命中/未命中结果和虚拟地址被发送到窥探处理器。窥探处理器针对每个AC端口被实例化并且负责对在该端口上接收到的窥探请求做出处理和响应。其实施FIFO(先进先出)缓冲器。缓冲器可以包括寄存器。缓冲器可以包含当前正在被处理的窥探请求,以及那些窥探请求的处理的当前状态。如果缓冲器满了,则窥探处理器541可以使所对应的AC接口使能停止。
可以将所接收到的窥探请求的处理局限于它们被接收的顺序,但这可能是效率低的。替代地,可以乱序处理窥探请求。然而,可以以与窥探被接收的相同顺序在窥探响应(CR)通道512上发送响应(例如以满足操作协议(例如ACE协议)的要求)。因此如果接收到针对地址A的窥探,后面是针对地址B的窥探,并且窥探过程能够确定地址B是无效的,则可以立即用针对地址B的响应更新缓冲器,但是一旦已发送了针对地址A的响应,就将仅在窥探响应总线上输出它。
缓冲器604被配置为存储响应于所接收到的请求而生成的一个或多个中间响应。即在以上示例中,缓冲器可存储对针对地址B的窥探的响应。随后,在地址A上的窥探请求完成时,窥探处理器可将对该请求的响应存储在缓冲器中和/或直接地输出响应。窥探处理器可以被配置为依赖于所存储的一个或多个中间响应来响应于所接收到的请求而发送输出。例如,一旦窥探处理器确定已发送了对地址A上的请求的响应,就可发送对被存储在缓冲器中的地址B上的请求的响应。以这种方式,窥探处理器可维持响应的排序以与预期顺序(例如请求被接收的顺序)匹配。
现在将参考图6B描述窥探缓冲器的状态。
当接收到新窥探请求时,例如使用写入指针来在窥探缓冲器中写入条目。如果与所窥探的地址相对应的总线接口与接收窥探请求的窥探处理器相关联的总线接口不同,或者所窥探的地址在反向转换数据结构中没有匹配条目,则窥探结果是无效的并且状态(例如在当前写入指针处)被改变为不存在652。注意的是,不管请求被发出到错误的总线接口和/或重复窥探被发出到相同的地址,窥探缓冲器都被配置为使得响应将仍然被发送。此方法允许存储器接口以一致方式处理请求(甚至是错误请求)。
在图6B中图示的示例中,如果与窥探地址相对应的总线接口与和接收到窥探请求的窥探处理器相关联的总线接口匹配,并且所窥探的地址在反向转换数据结构中具有匹配条目,则状态被改变为RAM查找654并且对将随后返回所窥探的高速缓存行的状态的高速缓存行状态单元906做出请求。缓冲器写入指针可以与高速缓存行状态查找并排地流水线化并用于在高速缓存行状态读取数据被返回时更新正确的缓冲器条目。
当高速缓存行状态读取数据被返回时,高速缓存行的状态被评估。如果被窥探的高速缓存行是无效的,则可以将缓冲器条目中的状态从RAM查找654更新为不存在652。另一方面,如果高速缓存行状态不是无效的,即它是UniqueP0、UniqueP1或驱逐中的一种,则缓冲器条目状态被分别更新为EVICTP0 656、EVICTP1 658或等待驱逐660。然后可以例如通过旋转“发送刷新”指针来选择处于EVICTP0或EVICTP1状态的缓冲器条目,并且发出对应的刷新请求(例如到高速缓存存储体接口模块910)。一旦刷新请求(例如被高速缓存存储体接口模块910)已接受,状态就被更新为等待驱逐660。当在等待驱逐状态660下时,条目对传入写回/驱逐完成敏感并且匹配完成将使条目移动到被驱逐状态662。
此外,为了防止在高速缓存存储体已经驱逐高速缓存行时发出刷新请求,缓冲器条目也对写回/驱逐请求敏感。匹配请求将使处于EVICTP0656或EVICTP1 658状态的条目(例如,正在等待轮到它被发送到高速缓存存储体接口910的条目)或处于RAM查找状态654的条目在高速缓存行状态读取数据被返回的周期时被移动到等待驱逐状态660。
一旦缓冲器条目处于不存在652或被驱逐662状态,就可输出窥探响应。可以例如通过旋转读指针来选择这些缓冲器条目。可以按顺序选择缓冲器条目。在窥探响应(CR)接口512上发出窥探响应。在一些示例中,对于处于被驱逐状态662的条目来说响应将是0x10(WasUnique=1)或者对于处于不存在状态652的条目来说响应将是0x0(WasUnique=0)。可以针对所有类型的窥探请求以相同的方式驱动窥探响应。
窥探缓冲器条目可以包括状态、反向转换数据结构条目编号和高速缓存行偏移地址(例如4KB页面内的64字节地址偏移)。缓冲器的深度定义在停止之前可在总线上接收的未完成的窥探请求的数量。可以例如将窥探缓冲器深度设置为8。适当地,空缓冲器条目通过无效状态来暗示,所以不需要单独的有效位。
存储器接口可以支持具有单组窥探请求/窥探响应(AC/CR)端口的配置。存储器接口可以支持具有多组窥探请求/窥探响应(AC/CR)端口的配置,其中AC/CR端口的数量与其他存储器端口的数量相同。即,支持具有两个地址读取/地址写入(AR/AW)端口和一个或两个AC端口的配置。在存在多个AC端口的情况下,假定了多个存储器总线被互连视为单独的主控(例如ACE主控),并且因此在一个AC端口上发出的窥探对应于对应的总线接口上的请求。
在具有单个AC端口的配置中,其中单个AC端口与所有总线接口(无论是1、2、4等)耦合,单个窥探处理器实例对所有总线接口上的写回/驱逐请求和响应敏感。不需要使用于确定与窥探的地址相对应的正确的总线接口的逻辑实例化。
在具有多个AC端口的配置中,可以有与总线接口相同数量的AC端口,在此情况下每个AC端口耦合到相应的总线接口。在其他示例中,AC端口和总线接口的数量可以不同。例如,可以有四个总线接口和两个AC端口,同时两个总线接口耦合到每个AC端口。其他配置是可能的。可以有与每个AC端口相对应的窥探处理器实例。每个窥探处理器实例可以仅对来自所对应的一个或多个总线接口(即与该窥探处理器相对应的一个或多个总线接口)的写回/驱逐请求和响应敏感。可以使用于确定与窥探的地址相对应的正确的总线接口的逻辑实例化。逻辑可以被配置为确定在上面接收到请求(例如窥探请求)的总线接口。
反向转换模块
再次参考图5,一致性管理器322包括反向转换模块550。该反向转换模块被配置为将物理地址转换成虚拟地址。例如,该反向转换模块被配置为将通过总线316接收到的物理地址转换成设备1 402处的高速缓存330的虚拟地址空间中的对应的虚拟地址。
反向转换模块550可以包括反向转换数据结构552。反向转换数据结构552可以包括页面转换表(PTT)554。反向转换模块550适当地包括用于存储器接口端口和窥探地址(AC)端口的寄存器阵列和相关查找逻辑。在接收到请求(例如与物理地址相关联的存储器请求(例如在物理地址空间中寻址的存储器请求))时,反向转换模块允许物理地址被转换成虚拟地址(例如,存储器请求可被转换成在虚拟地址空间中寻址的经转换的存储器请求)。虚拟寻址的高速缓存然后可以处理该经转换的请求。为了维持与例如AXI协议的兼容性,对存储器请求的响应在被在物理寻址的总线上发送之前被转换回成物理地址空间(例如通过MMU)。
反向转换数据结构552的内容允许一致性管理器322使用物理地址来对窥探做出响应,同时使用对应的虚拟地址来与ACE转换器和最低级高速缓存存储体接口连接。除了虚拟和物理地址信息之外,每个反向转换数据结构条目还包含指示页面条目的整体状态的状态字段。状态字段可以指示:反向转换数据结构条目当前是在使用中还是可被分配、它是否正在溢出的过程中(参见本文别处)、在页面内使用的高速缓存行是否在允许溢出的状态下或者表内的任何高速缓存行是否在窥探请求将被响应为具有高速缓存行的所有权的状态下。可以在不必查找单独的高速缓存行状态或高速缓存行的情况下确定窥探响应,如将在本文中别处所说明的。
更详细地,参考图7,反向转换数据结构552包括PTT,所述PTT可以是包含高速缓存行正在由存储器接口跟踪的4KB页面的完全关联表。同时,这些页面可以表示当前包含在最低级高速缓存存储体中或者请求在ACE转换器内飞行的所有一致页面,除存储器接口(或者例如,存储器接口处的一致性管理器)仍然不知道的新高速缓存行分配外。换句话说,反向转换数据结构552仅存储当前保持在高速缓存存储器中的一致高速缓存行的反向转换信息。这是因为仅需要针对一致高速缓存行执行反向转换,而不是针对整个物理地址空间执行反向转换。这减少在反向转换数据结构552处保持的数据量。每个PTT条目(或更一般地,反向转换数据结构条目)包含物理和虚拟页面的物理地址704和虚拟地址706。这允许存储器接口318使用所对应的虚拟地址来在与系统的各部分接口连接的同时对使用物理地址的窥探请求做出响应,所述系统例如为主从系统(具有多个主控和从控设备),诸如最低级高速缓存330。可以通过使用相关页面内的偏移来更具体地对特定高速缓存行进行寻址。在虚拟和物理页面各自沿着相同的页面边界对齐的情况下,例如在虚拟页面和物理页面都是4KB对齐的情况下,针对给定高速缓存行的偏移可以在虚拟页面内与在物理页面内相同。这可简化反向转换。
每个反向转换数据结构条目还可以包括prot(“保护”;安全指示符)位和Context/PASID(或进程地址空间ID)。更一般地,可以为或者代替Context/PASID提供任何值。“Context”与独立地址空间相关,其在CPU术语中常常被称作PASID,其指代每个应用/进程通常被分配新的独立地址空间(这意味着它将拥有它自己的一组转换表,诸如MMU转换表)的处理器设计。Context/PASID值可以包括可与进程并且与诸如PTT的页面表或者与页面表内的虚拟地址相关联的标识符。
反向转换数据结构可以包括用于存储物理页面与虚拟页面之间的映射的状态的状态字段708。该状态字段可以包括用于断言物理地址704与所对应的虚拟地址706之间的映射有效的标志。在高速缓存中的虚拟页面包括与主存储器中的物理页面相关联的有效数据的情况下映射可以是有效的。状态字段中的标志的断言可以指示物理页面中的每个高速缓存行的映射被有效地映射到虚拟页面中的每个高速缓存行。状态字段中的标志的断言可以指示物理页面中的至少一个高速缓存行的映射被有效地映射到虚拟页面中的相应的高速缓存行。适当地,在物理页面中的高速缓存行当中谁都未有效地映射到虚拟页面中的高速缓存行的情况下状态字段标志未被断言。因此,在状态字段标志未被断言的情况下,一致性管理器可确定存储在高速缓存处的高速缓存行中的数据当中谁都不是有效的。无需访问高速缓存以做出这种确定。因此一致性管理器322在这种情况下可在无需访问高速缓存它本身的情况下确定高速缓存行不是有效的。在一些示例中,状态字段708可以包括附加信息或数据。
适当地,反向转换数据结构552与高速缓存行状态数据结构710相关联。高速缓存行状态数据结构可以是目录。反向转换数据结构可以包括高速缓存行状态数据结构。可以与反向转换数据结构分开地提供高速缓存行状态数据结构。高速缓存行状态数据结构可以与高速缓存330一起或者作为高速缓存330的一部分被提供。优选地,然而,在存储器接口318处(例如在一致性管理器322处)提供高速缓存行数据结构。一致性管理器被布置为访问高速缓存行状态数据结构。高速缓存行状态数据结构包括用于正在通过反向转换数据结构所映射的页面中跟踪的至少一个高速缓存行的状态指示符。高速缓存行状态数据结构可以指示高速缓存行的状态,如上所述,例如该高速缓存行是否是“有效的”、“无效的”、“干净的”、“脏的”,该高速缓存行处的数据是否正在被写回到主存储器(高速缓存行在此状态下可以被指示为无效的),该高速缓存行处的数据是否正在被从高速缓存中驱逐(高速缓存行在此状态下可以被指示为无效的)等。
适当地,一致性管理器(例如,一致性管理器处的窥探处理器)被配置为查询高速缓存行状态数据结构710。适当地查询高速缓存行状态数据结构包括根据高速缓存行状态数据结构(例如根据包含在高速缓存行状态数据结构处的数据字段内的条目)确定高速缓存存储器处的特定高速缓存行的状态。特定高速缓存行适当地是与在窥探请求中识别的物理存储器地址相关联或相对应的高速缓存行。即特定高速缓存行适当地是存储(例如在高速缓存存储器拥有相关高速缓存行的情况下)或者将存储(如果高速缓存存储器拥有相关高速缓存行)与在存储器中由物理存储器地址识别的位置相对应的数据的高速缓存行。
可以在单独的RAM中提供高速缓存行状态数据结构。适当地,高速缓存行状态数据结构(例如RAM)位于设备1 402处。例如,高速缓存行状态数据结构可以连接到设备1处的最低级高速缓存330,或者可以形成其一部分。适当地RAM耦合(或者连接)到最低级高速缓存,例如被提供在与最低级高速缓存相邻的数据路径上。适当地RAM耦合(或者连接)到相应的高速缓存存储体。RAM被配置为存储被存储在相应的高速缓存存储体中的高速缓存行的状态。将在下面对此进行更详细的讨论。
在一些实施方式中,当确定了所期望的数据存在于高速缓存处的高速缓存行中时,根据高速缓存行状态数据结构(例如存储在RAM中的高速缓存行状态数据结构)确定该高速缓存行的状态。可以在不需要访问存储该高速缓存行数据所在的高速缓存行和/或高速缓存(或高速缓存存储体)的情况下完成对高速缓存行的状态的确定。
可以缩放反向转换数据结构以在可在任何时间在最低级高速缓存内部跟踪的一致页面的最大并发数量方面获得面积与容量之间的权衡。
反向转换数据结构条目
反向转换数据结构可以用于按照以下方式跟踪一致高速缓存行。当虚拟地址和4KB对齐的物理地址(以及可选地Context/PASID)被呈现在一致性管理器的接口上时,例如在一致性管理器监测从处理器到主存储器的传出请求的情况下,一致性管理器在反向转换数据结构中(例如在PTT中)查找物理地址和prot位。如果传入地址/prot位与在反向转换数据结构内在使用中的现有条目不匹配,则一致性管理器在没有未完成的请求声明该条目情况下适当地分配当前无效的反向转换数据结构条目(诸如PTT条目)。如果此类无效条目当前不存在,则将在一致性管理器处停止请求直到条目变为空闲为止。在一致性管理器处的多个输入(例如来自多个总线接口502、504的输入)之间在循环基础上适当地分配条目。
对于在一致性管理器的接口上呈现的写入请求,将虚拟页面和Context/PASID比较以找到匹配条目并且再次在匹配准则中考虑仅在使用中(即在活动状态下或者在该条目上具有未完成的请求)的条目。按照反向转换数据结构命中准则针对使用中条目的检查防止在虚拟到物理地址映射可能已改变的陈旧条目上命中。
一致性管理器被配置为响应于虚拟页面和Context/PASID而在写回/驱逐通道上输出物理页面。因此,虚拟页面和Context/PASID适当地在反向转换数据结构寄存器以及物理地址中。在没有此要求的情况下,将仍然可以单独基于物理地址和保护(prot)位查找RAM条目。
反向转换数据结构552(或PTT 554)每条目可以包括以下字段。
·“状态”字段,指示条目的整体状态,
·“溢出”字段,指示条目是否正在经历溢出,
·“请求计数器”字段,指示在页面内的高速缓存行上未完成的ReadUnique和/或CleanUnique请求的数量,
·“有效计数器”字段,指示处于非无效状态的高速缓存行是数量,
·‘Vpage’字段,包含虚拟4KB页面,
·‘Context/PASID’字段,包含Context或PASID,
·‘Ppage’字段,包括物理4KB页面,以及
·‘prot’字段,包括保护位,指示用于物理页面的安全地址空间。
反向转换数据结构中的每个条目的状态字段可处于以下两种状态中的一种:‘无效’状态和‘活动’状态。这些状态指示在窥探时条目是否自由被指派给新页面映射、它是否是溢出的潜在候选和/或它是否值得从状态数据结构(例如从RAM)读取高速缓存行状态。
当在无效状态下时,条目仅包含无效高速缓存行,并且如果像在请求计数器字段中所指示的那样在这些高速缓存行中的任一个上没有未完成的声明或读取请求,则使物理页面与虚拟页面之间的新映射被指派给它是自由的。一旦条目被指派给新页面并且/或者对于当前指派的页面接收到ReadUnique或CleanUnique请求,就更新请求计数器字段(例如可递增计数器)以防止条目在移动到活动状态之前被重新指派。一旦对于该条目中的高速缓存行接收到ReadUnique或CleanUnique响应,条目就移动到活动状态。如果在其条目处于无效状态的高速缓存行上接收到窥探,则不需要从高速缓存行状态数据结构读取高速缓存行状态,因为它也处于无效状态。因此可在不必访问高速缓存行状态数据结构的情况下提供对窥探的响应。避免这个步骤可导致带宽和/或等待时间的减少。
处于活动状态的条目包含可能不是无效的高速缓存行。即高速缓存行可以处于唯一或驱逐状态。当在此状态下时如果请求计数器字段指示没有请求是未完成的,则可选择条目以供溢出。如果在读取高速缓存行状态数据结构时,确定了所有高速缓存行已返回到无效状态,则不需要发生溢出并且条目它本身移动到无效状态。一旦溢出完成,如果所有高速缓存行都被驱逐并返回到无效状态,则条目就将变成无效。如果溢出被及早中止使得并非所有高速缓存行都被驱逐并保持在唯一状态下,则条目保持在活动状态下。如果对于其条目处于活动状态的高速缓存行接收到窥探,则高速缓存行状态数据结构被按顺序读取以便找到高速缓存行的当前状态。可将此状态传递到存储器接口内的溢出控制单元和/或窥探处理器。存储器接口可以在高速缓存行的状态基础上处理传入请求。
注意的是,请求计数器字段和有效计数器字段均可以包括计数器。例如,请求计数器可对页面中的高速缓存行上的未完成的ReadUnique和CleanUnique请求进行计数。计数器当在请求接口上接收到读取请求时可递增,而当在接口上接收到响应时递减。当请求计数器不为零(即,存在至少一个未完成的请求)时,不能使反向转换数据结构条目溢出。与在状态数据结构中存储空闲/活动位相比较,以这种方式提供计数器可以改进功率效率并且/或者减少端口之间的竞争。例如,方法可允许减少高速缓存行状态数据结构中的状态转变的数量。有效计数器可对页面中的处于非无效状态的高速缓存行的数量进行计数。具有非零有效计数器的反向转换数据结构条目是要溢出的候选。当计数器的值减小到零时溢出可被认为完成。
在一个示例中,最低级高速缓存可以是256KB高速缓存,具有64字节高速缓存行,从而给出总共4096个高速缓存行。如果页面内的所有可能的高速缓存行在任何时候都存在,则这将仅要求64个条目,但是实际上,因为高速缓存行将不会完全填充每个4KB页面,所以更大数量的条目(例如92-128个条目)很可能需要避免不断溢出。条目的数量可以是96,这在所需要的存储空间(占用硅面积)与能够存储足够的条目以允许系统的平稳操作之间提供适当的平衡。
溢出
高速缓存330具有有限的大小。同样地反向转换数据结构552具有有限的大小。因此监测诸如高速缓存和/或反向转换数据结构的填充水平将是适当的,以确保系统的平稳操作。如果在系统内有足够的一致页面在使用中,则反向转换数据结构最终将变满。为了为新的一致页面腾出空间,数据结构因此可以能够驱逐现有条目:这被称作溢出。溢出可以涉及选择条目并指示高速缓存存储体刷新/使在那些条目内跟踪的高速缓存行无效,然后一旦所有包含的高速缓存行已被驱逐并且已接收到其对应的写回/驱逐响应,就将条目移回到无效状态。这允许数据结构中的那些条目被再用于新的高速缓存行。
不是在溢出开始之前等待直到数据结构全满为止(这将潜在地导致在条目被清除的同时停止的长时段),而是存储器接口可以被配置为一旦空闲条目的剩余数量达到阈值就抢先地开始使数据结构中的条目溢出。一旦达到此阈值,就将依次使指定数量的条目溢出。阈值以及一旦达到阈值就溢出的条目的指定数量两者都可通过配置寄存器配置。
存储器接口318可以被配置为确定填充水平阈值。填充水平阈值可以包括高速缓存填充水平阈值和/或反向转换数据结构填充水平阈值。可以预先确定填充水平阈值。可以响应于系统操作而改变填充水平阈值。填充水平阈值适当地小于最大填充水平(即,高速缓存的最大填充水平和/或反向转换数据结构的最大填充水平)。例如,填充水平阈值可以高达最大填充水平的90%,并且可以高达最大填充水平的80%。在一些示例中填充水平阈值是最大填充水平的75%。填充水平阈值可以由在处理器处运行的程序和/或由系统的用户选择(例如通过修改系统配置文件中的对应值)。
当高速缓存的填充水平和/或反向转换数据结构的填充水平达到填充水平阈值时,一致性管理器332可以被配置为开始溢出过程。在溢出过程中,高速缓存行数据被从高速缓存中驱逐或者刷新。此进行可以继续直到所确定的填充水平减小至填充水平阈值以下为止,直到特定数量的高速缓存行中的数据已被驱逐或者为止直到一致性管理器确定溢出过程应该停止为止。例如,可提供要驱逐(或者要设法驱逐)的高速缓存行的数量的值。这个值(“驱逐量”值)可以被存储在一致性管理器中或者与一致性管理器相关联。驱逐量值可以是可配置的,例如用户可配置的。因此,在达到使溢出或驱逐过程开始的阈值的情况下,一致性管理器可以被配置为驱逐与驱逐量值相对应的许多高速缓存行。在一些示例中,在溢出过程中可能存在滞后,使得溢出在达到填充水平阈值时开始,但是在达到低于填充水平阈值的第二阈值之前不会停止。例如,溢出可以在填充水平达到或者超过最大填充水平的75%的填充水平阈值时开始,并且将在填充水平降小至或者超过第二阈值(即,最大填充水平的60%)时停止。此滞后可以减少溢出过程在达到填充水平阈值时频繁地开始和停止。
随着高速缓存行数据在溢出过程中被从高速缓存中驱逐,并且反向转换数据结构中的对应条目被删除或者无效时,空间被释放用于高速缓存和反向转换数据结构中的新条目。可以在溢出过程中仍然写入新条目。
用于溢出的候选条目是当前没有溢出并且具有零请求计数器和非零有效计数器的那些条目。可以基于驱逐准则选择高速缓存和/或反向转换数据结构中的条目以供溢出。驱逐准则可以包括高速缓存行中的数据的年龄、高速缓存行的访问频率、高速缓存行的访问次数、高速缓存行的最后访问时间和高速缓存行随机选择中的一个或多个。选择最适当的高速缓存行数据以驱逐的其他方式对于技术人员而言将是清楚的。选择要驱逐的高速缓存行数据的特定方式可以取决于系统、在处理器上运行的程序等。
存储器接口或存储器接口处的一致性管理器可以被配置为确定在高速缓存行上是否有未完成的事务(诸如读取请求),并且仅当确定了在该高速缓存行上没有未完成的事务时才选择用于驱逐的高速缓存行数据。
一旦溢出已开始,就依次选择并从高速缓存行状态RAM中读取候选条目。如果条目仍然包含唯一高速缓存行,则针对该条目设置溢出状态位并且经由高速缓存存储体接口向高速缓存存储体发出刷新。一旦指定数量的条目(例如如通过寄存器所指定的)已经历此过程,或者通过高速缓存行驱逐达到了所需要的数据结构空间,当前溢出过程就结束,否则选择另一数据结构条目。一旦溢出条目中的所有高速缓存行都已被驱逐并且接收到其响应,溢出位就被清除并且可重新使用该条目。
因此,一旦在一致性管理器322处的反向转换数据结构552(例如PTT)中的可用条目的剩余数量达到预定义阈值,存储器接口318就被配置为开始指示高速缓存存储体331、332驱逐高速缓存行数据以便释放更多的可用条目。可以在一个或多个溢出控制寄存器中定义数据结构552中的剩余空间的阈值和一旦达到该阈值就将被释放的条目的数量,所述溢出控制寄存器可以被实施在如在下面更详细地讨论的溢出控制单元处。溢出控制寄存器可以包括定义填充水平阈值即存储器接口开始从反向转换数据结构中溢出条目的剩余空间阈值的spill_threshold寄存器。在一个示例中,spill_threshold寄存器包括8位值,但是其他大小值是可能的。在一个示例中,用于spill_threshold寄存器条目的默认值可以是16。溢出控制寄存器可以包括定义一旦已达到阈值就溢出的条目量的spill_amount寄存器。在一个示例中,spill_amount寄存器包括8位值,但是其他大小值是可能的。在一个示例中,用于spill_amount寄存器条目的默认值可以是4。
存储器接口318可以提供允许性能分析的一个或多个状态寄存器。一致性管理器322可以提供一个或多个状态寄存器。例如,状态寄存器可以包括status_spilling寄存器以指示溢出控制模块是否正在主动地使高速缓存行从存储器接口中溢出。
状态寄存器可以包括status_spill_entries寄存器以指示正在经历溢出的反向转换数据结构条目的数量。被指示为正在经历溢出的条目是存储器接口已发出刷新或者在针对每个活动高速缓存行发出刷新的过程中并且在等待所有此类高速缓存行在可用于重新分配之前被写回到存储器的状态下的条目。来自这些条目中的任一个上的反向转换数据结构(例如转换表)的地址读取(AR)事务将使存储器接口停止。
状态寄存器可以包括status_active_entries寄存器以指示处于活动状态(即其中一个或多个高速缓存行处于非无效状态)的数据结构(例如转换表)条目的数量。这给出数据结构的完整性的指示。
状态寄存器可以包括status_snoop_count寄存器以指示来自窥探地址(AC)通道510的正在存储器接口内处理的未完成的窥探的数量。
高速缓存行生命周期
存储器接口318被配置为跟踪在高速缓存330内一致的高速缓存行,使得它能够在另一主控设法在某个时间点访问这些相同的地址的情况下对由总线316发出的窥探请求做出响应。高速缓存行的典型生命周期被示意性地图示在图8中。
引入一些类型的事务是有用的。存储器行上的ReadUnique事务使其他高速缓存中的该存储器行的所有其他副本(即,与一致系统中的该存储器行有关的所有其他高速缓存行)无效并且从存储器中读取该存储器行。因此ReadUnique事务用于声明相关高速缓存行的所有权。CleanUnique事务与ReadUnique事务类似,但是可在不必要读取存储器行的情况下即在主控处的高速缓存已经在高速缓存行中具有存储器行的副本的情况下被使用。此事务确保如果主控处的高速缓存行是脏的,则高速缓存行数据的副本被写回到主存储器。此事务进一步确保高速缓存行的所有其他副本(即一致系统中的其他高速缓存中的存储器行的副本)无效。
参考图8,最初由存储器接口318跟踪的所有高速缓存行将在无效状态802下开始。一旦最低级高速缓存330发出ReadUnique事务804或CleanUnique事务806,则高速缓存行可以被认为已进入瞬态状态,由此事务在总线316上待决,所述总线316最终将高速缓存行声明进入它仅存在于该高速缓存内部的唯一状态。然而值得注意的是,在该请求完成之前,最低级别高速缓存330将继续对窥探做出响应,就像高速缓存行不存在一样,因为从系统观点来看,高速缓存不拥有高速缓存行直到其总线事务由互连处理和响应为止。因此在中间时间段中由最低级高速缓存接收的任何窥探请求可被认为在最低级高速缓存自己的请求之前被排序。
一旦对事务的响应由最低级高速缓存808、810接收到,这就用于更新存储器接口处的高速缓存行的状态,使得它现在被认为是由最低级高速缓存拥有。一旦这种状态变化已被记录,存储器接口被配置为在ACE接口514上发出相应的读取/写入确认信号以便向互连表示它现在安全以针对相同的物理地址向最低级别高速缓存发出窥探请求,因为最低级高速缓存现在将正确地响应它拥有该特定高速缓存行。
从CleanUnique 812或DirtyUnique 814状态中的一种,可以经由驱逐或写回过程或事务816驱逐高速缓存行。与其他事务类型一样,一旦相应的事务在总线上完成818高速缓存行就将仅返回到无效或空闲状态802。进一步地,虽然高速缓存驱逐由于内部高速缓存请求而能自然地发生,但是这也是用于一致性方案工作的高度所希望的行为,因为检测到处于CleanUnique或DirtyUnique状态的高速缓存行的传入窥探请求然后可以向所述最低级高速缓存存储体发出请求以便强行驱逐高速缓存行(其将包括在它当前是脏的情况下写回数据)。以这种方式,对窥探请求做出响应可以使高速缓存行被强迫进入驱逐高速缓存行状态820,并且在事务完成818并且高速缓存行返回到无效状态802之前不能返回窥探响应,否则互连可能尚未接受由高速缓存通过该阶段所刷新的任何脏数据。
如上面所讨论的,最低级高速缓存是虚拟索引和虚拟标记(VIVT)高速缓存,即在虚拟存储空间中寻址的高速缓存。然而来自ACE协议(例如在窥探地址通道510上)的传入窥探请求将总是被供应有物理地址,所以这些请求被转换到虚拟地址以允许针对特定高速缓存行向最低级高速缓存存储体发出刷新。为了这样做,存储器接口318被配置为维持从物理地址到虚拟地址的映射,例如物理到虚拟地址映射的表。适当地反向转换数据结构552包括物理到虚拟地址映射的表。可以以页面粒度或者以高速缓存行粒度做物理到虚拟地址映射。在一个示例中,存储器接口(或者例如,存储器接口处的MMU)具有4KB的最小粒度。预期在CPU与GPU之间一致的变量或数据将在同一缓冲器内。因此存在数据局部性的高可能性。使用4KB粒度因此允许数量少得多的反向转换数据结构条目覆盖大得多的地址空间。因此以4KB的粒度或者实际上比最小值大的任何其他粒度操作帮助使此方法变得实现起来代价小得多。
在一个实施方式中,存储器接口(例如存储器接口处的反向转换数据结构)包括4KB对齐的虚拟地址(Vpages)的完全关联表和与物理地址(Ppages)相对应的映射。可缩放表以包含可变数量的条目以在可由存储器接口在任何一个时间点在最低级高速缓存内部跟踪的一致4KB页面的最大并发数量方面对照容量权衡面积。扩增此地址映射表是在4KB页面内包含单独的高速缓存行的状态的一个或多个高速缓存行状态数据结构,例如RAM。一旦表已确认了是否正在跟踪特定4KB页面,这就可用于检查单独的高速缓存行地址。
在4KB页面内,经由单独的状态编码跟踪单独的64字节高速缓存行(但是也能跟踪其他长度高速缓存行)。状态编码可以包括有限状态机(FSM)或一个或多个状态位。状态编码可以被存储在RAM内部。这使得能够减少例如一致性管理器中所要求的每秒浮点运算次数(flops)的总数量。每当高速缓存行的状态改变时,可以更新在RAM内与给定高速缓存行相对应的字段以确保一致性管理器可正确地决定如何对相同地址的后续窥探请求做出响应。在一个实施方式中,可以将RAM分割若干实例,从而使得能够降低RAM访问能力并且增加并行访问多个条目的能力。可以通过在寄存器中实现最近使用的条目的L0高速缓存来提供进一步增强。
存储器接口架构
现在将参考图9描述存储器接口318和相关系统的架构的一部分的示例。
存储器接口318包括具有反向转换数据结构552的反向转换模块550,所述反向转换数据结构552在所示的示例中包括页面转换表(PTT)554。反向转换模块550耦合到溢出控制单元904、高速缓存行状态单元906(其可以包括或者能够访问高速缓存行状态数据结构)和窥探处理器单元908。溢出控制单元904耦合到高速缓存行状态单元906。高速缓存行状态单元906耦合到窥探处理器单元908。存储器接口318可选地还包括高速缓存存储体接口910(高速缓存存储体接口910可以与每个高速缓存存储体接口连接或者它可以包括多个高速缓存存储体接口模块,每个用于与至少一个高速缓存存储体接口连接)。高速缓存存储体接口910耦合到溢出控制单元904并且耦合到窥探处理器单元908。高速缓存存储体接口910还可耦合到高速缓存行状态单元906。在未在存储器中接口318处提供高速缓存存储体接口910(例如因为高速缓存包括用于与高速缓存存储体接口连接的一个或多个接口模块)的情况下,溢出控制单元904、高速缓存行状态单元906和窥探处理器单元908均可以直接地与高速缓存耦合。
溢出控制单元904被配置为发起并协调溢出操作。其被配置为监测传入写回/驱逐请求。高速缓存行状态单元906被配置为在每高速缓存行粒度上可选地在多个高速缓存行状态数据结构实例中存储高速缓存行状态,其中交叉开关和仲裁逻辑位于输入与高速缓存行状态数据结构实例之间。高速缓存行状态数据结构实例可以是RAM实例。窥探处理器单元908包括用于每个窥探地址(AC)通道的窥探处理器实例。例如,如图5中所图示的,存储器接口318处的一致性管理器322可以包括两个窥探处理器实例541、542,总线接口502、504中的每一个各有一个。每个窥探处理器被配置为处理窥探(窥探请求)并且在窥探响应(CR)接口512上发出响应。窥探处理器单元908被配置为监测传入写回/逐出请求和响应。一致性管理器322(可选地在高速缓存存储体接口910处)被配置为依赖于在溢出控制单元904和窥探处理器单元908处生成的信号来向高速缓存存储体331、332发出刷新命令520。当存在时,高速缓存存储体接口910被配置为从溢出控制单元904和窥探处理器单元908接收信号,并且代表溢出控制单元和窥探处理器发出刷新命令。在存在的情况下,高速缓存存储体接口910可以被配置为监测传入写回/驱逐请求。
高速缓存行状态单元
现在将更详细地讨论高速缓存行状态单元906。正在由反向转换模块(例如在反向转换数据结构处)跟踪的高速缓存行的高速缓存行状态可被存储在一个或多个高速缓存行状态数据结构实例中。在一个示例中存在四个高速缓存行状态数据结构或RAM实例。每个高速缓存行状态数据结构可以包括单个端口。在对于每个反向转换数据结构条目使用4KB页面并且使用64字节高速缓存行大小的系统的示例中,四个高速缓存行状态数据结构中的每一个均被配置为保持存在于4KB页面内的64个高速缓存行偏移地址中的16个的状态。在存在四个高速缓存行状态数据结构实例并且高速缓存行大小是128字节的使用4KB页面的系统的另一示例中,每个高速缓存行状态数据结构被配置为保持32个高速缓存行偏移地址中的8个的状态。每个反向转换数据结构条目可以直接指向高速缓存行状态数据结构实例中的对应地址。提供多个高速缓存行状态数据结构实例允许通过不同的输入同时访问任何反向转换数据结构条目中的多个高速缓存行的状态。
在此示例中,期望通过提供四个高速缓存行状态数据结构(例如四个RAM)来获得多达两组总线接口所需要的吞吐量。对于具有较高数量的总线接口的配置,提供附加并行RAM实例以便实现所需要的吞吐量,但是在所有情况下附加RAM将不是必要的。例如,使用四个总线接口的实施方式可包括四个或八个RAM实例。可按需选择其他数量的RAM实例。在实际的实施方式中,RAM实例的数量的选择可以尤其取决于性能测试的结果。
在图10中示出了高速缓存行状态单元906架构的示意图。交叉开关/解码逻辑1004接收输入1002(在下面讨论)。交叉开关/解码逻辑耦合到RAM初始化逻辑1006,所述RAM初始化逻辑1006耦合到四个RAM实例1008、1010、1012、1014:RAM 0、RAM 1、RAM 2和RAM 3。四个RAM实例耦合到被配置为接收溢出控制信号1018的溢出读取多路复用器1016。溢出读取多路复用器1016耦合到被配置为提供输出1022的读取数据解码逻辑1020。
给高速缓存行状态单元的输入1002可以包括:
·一致读取响应,其可导致特定高速缓存行的状态(例如高速缓存行处于CleanUnique状态)的写入;
·写回/驱逐请求,其可导致特定缓存行的状态(例如缓存行处于驱逐状态(即缓存行在被驱逐的过程中,但是驱逐仍然尚未完成))的写入;
·一致写回/驱逐响应,其可导致特定高速缓存行的状态(例如高速缓存行处于无效状态)的写入;
·窥探读取和/或窥探写入,允许每个窥探处理器(或窥探处理器模块)读取和/或写入特定高速缓存行的状态。
溢出控制单元904被配置为向高速缓存行状态单元906提供输入。输入1002包括来自溢出控制单元904的溢出控制写入。输入到溢出读取多路复用器1016的信号包括由溢出控制单元904所提供的溢出控制读取。溢出控制单元到高速缓存行状态单元的耦合允许溢出控制单元904能够读取特定反向转换数据结构条目内的所有高速缓存行的状态,并且能够写入特定高速缓存行的状态。
适当地,高速缓存行状态中的每一个均要求2个位。因此,四个RAM实例中的每一个均是32个位宽。RAM实例中的每一个的深度适当地对应于反向转换数据结构条目的数量。
交叉开关/解码逻辑1004被配置为对所有输入上的访问进行解码以确定要将访问导向的正确的RAM(或更一般地正确的高速缓存行状态数据结构)实例(访问所有RAM实例的溢出控制读取除外)。使用高速缓存行偏移的两个最低有效位(LSB)来将访问映射到四个RAM实例。可以假定很可能在同一时间附近(例如当跨越高速缓存存储体分割大突发时)接收到类似的高速缓存行地址。因此,第一RAM实例1008可以包含高速缓存行偏移0、4、8等(针对四种RAM配置)的状态,并且第二RAM实例1010包含高速缓存行偏移1、5、9等的状态。更一般地,可顺序地将高速缓存行偏移的状态包含在多个RAM实例中,其中用于许多高速缓存行偏移的状态大于循环通过可用RAM实例的RAM的数量。此配置允许并行访问相邻的高速缓存行地址。交叉开关解码逻辑1004针对每个RAM实例驱动仲裁器的输入。
在复位之后,可以将RAM实例中的所有位置初始化为无效状态。初始化逻辑1006在复位之后通过将零写入到RAM实例中的每个位置来执行这个操作。这些写入被复用到仲裁器输入中,并且所有其他输入在初始化期间保持关闭。针对每个RAM实例仲裁来自交叉开关/解码逻辑1004的输入访问。读取和写入使用例如对所有输入而言具有相等优先级的循环仲裁来单独地仲裁。写入可以优先于读取以确保如果在同一周期上发生对同一高速缓存行的读取和写入,则访问以正确的顺序发生,使得读取拾取通过写入所做的变化。仲裁器还负责根据所输入的高速缓存行偏移来为RAM访问创建完整写入掩码,使得仅需要写入特定高速缓存行的状态。
来自溢出控制单元904的读取读取反向转换数据结构条目中的所有高速缓存行的状态并且因此要求访问所有RAM实例。为了使所有四个RAM的读取同步并且确保来自所有四个RAM的返回数据可被同时返回到溢出控制单元同时避免需要通过RAM流水线返回到仲裁器的使能路径,当没有从仲裁器到任何RAM实例的请求时这些读取被复用在仲裁者之后。
可以为单端口RAM实例的RAM实例包含用来针对读取请求传递边带数据的注册流水线。此边带包括用于识别读取请求的来源的字段、高速缓存行偏移以及由窥探处理器使用来将它们接收的状态数据写入到其内部缓冲器中的正确位置中的指针。
在一个实施方式中,仅一个RAM实例可在每个时钟周期中针对特定来源输出读取数据。这可能是因为没有通过RAM和仲裁器返回的使能路径并且来自特定来源的访问被同步。读取数据解码逻辑1020使用通过RAM实例流水线所传递的ID字段来确定用可用RAM读取数据驱动的正确输出。流水线高速缓存行偏移用于针对所请求的状态从RAM读取数据中复用正确的位,并且将它返回给请求者。
可以将高速缓存行的每个状态编码为四状态状态机。状态可以包括‘无效’状态、‘tUniqueP0’状态、‘tUniqueP1’状态和‘驱逐’状态,如图11中所图示的。高速缓存行状态中的每一种均可能要求2个位来对四种状态进行编码。因此,四个RAM实例中的每一个均是32个位宽。RAM实例中的每一个的深度对应于反向转换数据结构条目的数量。
当GPU仍然尚未针对唯一所有权声明高速缓存行时发生无效状态1102。这可紧跟复位之后发生。当分别接收到ReadUnique或CleanUnique响应时,高速缓存行可以移动到UniqueP0状态1104或UniqueP1状态1106。
在UniqueP0状态1104下,高速缓存行由GPU唯一地保持并且是完全有效的(即,Partial=0:‘P0’)。可以在存储在该高速缓存行中的整个数据有效的情况下将高速缓存行说成是完全有效的。在UniqueP1状态1106下,高速缓存行由GPU唯一地保持并且是部分有效的(Partial=1:‘P1’)。可以说高速缓存行部分有效,可以在存储在该高速缓存行中的仅一部分数据有效的情况下将高速缓存行说成是部分有效的。在部分有效的高速缓存行上完成ReadUnique事务将导致高速缓存行变成完全有效的。高速缓存行的状态将因此从UniqueP1移动到UniqueP0。如果接收到驱逐或写回请求,则状态将从UniqueP0状态1104或UniqueP1状态1106移动到驱逐状态1108。在驱逐状态1108下,作为窥探的结果,或者因为条目被选择以供溢出,所以高速缓存行是在被驱逐的过程中。一旦驱逐完成,高速缓存行就移回到无效状态1102。
为了确保总线与一致主控之间的一致事务和状态变化的正确排序,主控通过在RACK和WACK接口上发出信号来确认对在R(读取响应)和B(写入响应)通道上发送的响应的接收。这确保总线可维持在诸如R、B和AC(窥探请求)通道之间的不同接口上发送的事务或响应的已知顺序。以这种方式,总线确保例如在读取响应在总线与主控之间飞行的同时不能接收窥探。
确认暗示已经发生作为响应被接收的结果所需要的任何高速缓存行状态变化。可以例如在每个窥探地址通道上以与在总线上接收响应的顺序相同的顺序发送确认。因此存储器接口将在与作为读取或写入响应的结果更新高速缓存行状态数据结构相同的时间发出确认信号(RACK和/或WACK)。还可以针对CPU不一致读取和写入响应发送确认信号(RACK和/或WACK)。为了从单个位置驱动这些输出,存储器接口还可以接收不一致响应并且随着一致响应以正确的顺序驱动确认信号输出。
高速缓存存储体接口模块
现在将参考图12描述高速缓存存储体接口模块910。高速缓存存储体接口模块可管理刷新命令从溢出控制和窥探处理器到最低级高速缓存存储体的发出。该模块每高速缓存存储体包含交叉开关和仲裁逻辑及刷新缓冲器实例。这允许同时地向每个高速缓存存储体发出刷新。高速缓存存储体接口还负责防止能导致数据危险的重复刷新。
图12图示提供了两个高速缓存存储体(高速缓存存储体1 331和高速缓存存储体2332)的高速缓存存储体接口的示例。交叉开关/解码逻辑1203被配置为接收来自窥探处理器908(例如来自窥探处理器处的窥探缓冲器)的信号1201和来自溢出控制模块904的信号1202。交叉开关/解码逻辑耦合到两个仲裁器:高速缓存存储体1仲裁器1204和高速缓存存储体2仲裁器1206。高速缓存存储体1仲裁器耦合到高速缓存存储体1刷新缓冲器1208,所述高速缓存存储体1刷新缓冲器1208耦合到高速缓存存储体1。高速缓存存储体2仲裁器耦合到高速缓存存储体2刷新缓冲器1210,所述高速缓存存储体2刷新缓冲器1210耦合到高速缓存存储体2。
在所图示的示例中,高速缓存存储体接口910具有来自溢出控制的单个输入1202和来自每个窥探处理器的一个输入(在图12中被图示为来自窥探缓冲器的单条线1201)。可以通过提供来自溢出控制单元的多个输入从而允许溢出控制单元在相同周期上发出多个刷新来减少发出多个刷新所花费的时间,只要多个刷新去往不同的高速缓存存储体即可。
交叉开关/解码逻辑1203被配置为使用由交叉开关/解码逻辑100所使用的相同的地址解码模式和散列函数来确定用于每个刷新输入的目的地高速缓存存储体。一个去往每个高速缓存存储体的刷新命令例如使用对所有请求源而言具有相等优先级的循环策略来仲裁。所选择的输入刷新被写入到与该高速缓存存储体相对应的刷新缓冲器实例1208、1210中。
刷新缓冲器包含用于飞往特定高速缓存存储体的所有刷新的条目。条目可以在刷新由交叉开关仲裁逻辑1203选择时被添加到刷新缓冲器1208、1210,并且一旦所对应的刷新处理位由高速缓存存储体设置就被从刷新缓冲器中移除。这个的例外是当检测到重复刷新危险时,其中刷新可以被从刷新缓冲器中移除,而不用被发出到高速缓存存储体,或者根本未添加到缓冲器。高速缓存存储体接口可以被配置为通过监测写入接口来检测此类重复刷新危险。可通过使在刷新缓冲器中具有与现有刷新相同的高速缓存行地址的任何条目变得不活动来防止重复刷新。可以在FIFO基础上将存储在刷新缓冲器1208、1210中的条目中的刷新发送到高速缓存存储体。每个刷新缓冲器条目可以存储虚拟高速缓存行地址、Context/PASID和反向转换数据结构条目编号中的一个或多个。还可以提供控制位,例如以指示刷新是否是活动的和/或刷新是否已被发送到相应的高速缓存存储体。刷新缓冲器深度可以是每高速缓存存储体4个条目。
总线映射
反向转换数据结构可以包括存储器地址的列表。附加地或可替代地,反向转换数据结构可以包括存储器地址的一个或多个范围的列表。例如,反向转换数据结构可以包括存储器地址的范围的起始地址和结束地址(或存储器地址的多个范围的多个起始地址和多个结束地址)。存储器地址的范围可以包括奇数地址或偶数地址。存储器地址组或集可以包括存储器地址的列表和/或存储器地址的一个或多个范围。可以提供多于一个存储器地址组或集。在一个实施方式中,可通过将所窥探的地址与存储器地址组或集相比较来确定所窥探的地址是否在反向转换数据结构中具有匹配条目。所窥探的地址可被确定为在反向转换数据结构中具有匹配条目,其中所窥探的地址被保持在反向转换数据结构内或者在反向转换数据结构内保持的地址的范围内。
参考图13,例如在反向转换数据结构中,存储器地址集可以与多个总线接口502、504中的每一个相关联(1302)。在一个总线接口处接收到诸如窥探请求的存储器请求(1304)时,确定在请求中识别的存储器地址。此确定可由存储器接口(例如由诸如一致性管理器处的窥探处理器的处理器)做出。然后在存储器接口处(例如在一致性管理器处)做出关于所识别的存储器地址是否与接收到请求所在的总线接口502、504相关联的确定(1306)。可参考反向转换数据结构做出此确定。例如,可以依赖于反向转换数据结构做出在存储器接口处(例如在一致性管理器处)所识别的存储器地址是否与接收到请求的总线接口相关联的确定。可以通过存储器接口来做出所识别的存储器地址与总线接口相关联的确定,其中所识别的存储器地址被包含在反向转换数据结构的列表中,并且/或者是与该总线接口相关联的反向转换数据结构中的存储器地址的一部分或者在与该总线接口相关联的反向转换数据结构中的存储器地址的一个或多个范围内。
由于以下原因确定在请求中识别的存储器地址是否与特定总线接口相关联是有用的。在存在多个总线接口并且可以通过这些总线接口中的任一个接收存储器请求的情况下,期望避免处理重复请求。可以广播存储器请求,使得它通过所有总线接口来接收。也就是说,可以分别在每个总线接口处接收相同的存储器请求。例如,在总线不能看到哪一个总线接口是用来发送请求的正确的总线接口并且因此通过所有总线接口发送请求以确保它被正确地处理的情况下可能做这个。在这种情况下,期望仅在通过正确的总线接口接收到请求的情况下处理它。这可避免访问相同数据的多次尝试,并且可减少浪费的处理。“正确的”总线接口适当地是例如在反向转换数据结构处与在存储器请求中识别的存储器地址相关联的总线接口。以这种方式,可例如在窥探处理器处确定是否应该处理存储器请求。
如果所识别的存储器地址不对应于与用来接收请求的总线接口相关联的存储器地址集,则适当地不处理请求。例如,请求不会导致一致性管理器查询页面映射的状态、查询高速缓存行状态数据结构或者访问高速缓存。在一些示例中,可能忽视请求。然而,这可以导致数据冲突和/或其他数据危险的发生。一般地优选的是对每个请求做出响应,甚至在不在处理请求的情况下也如此。因此,在存储器请求未被处理的情况下,仍然可以例如由窥探处理器发送响应。响应可以指示请求尚未被处理。在存储器请求未被处理的情况下,窥探处理器可以被配置为响应好像所请求的存储器地址是无效的高速缓存行。
如果所识别的存储器地址确实对应于与用来接收请求的总线接口相关联的存储器地址集,则处理请求(1308)。可在存储器接口处(例如在窥探处理器处)处理请求。处理请求可以涉及在反向转换模块处查询页面映射的状态、查询高速缓存行状态数据结构或者访问高速缓存中的一个或多个。
仅处理通过正确的总线接口接收到的请求的这种方法可减少处理开销,例如通过减少不必要地处理的请求的数量。可以减少传播到高速缓存的请求的数量,从而节约高速缓存处理开销。
在一些示例中,可以在所有AC端口上发出窥探请求并且每个窥探处理器被配置为确定是否将在与该窥探处理器相对应的总线接口上发出与所窥探的地址相对应的地址,并且将仅在实例编号(即端口的和/或窥探处理器的(端口和窥探处理器的实例编号可以是相同的))对应于所确定的总线接口情况下才查找高速缓存行的状态。否则窥探处理器被配置为将高速缓存行视为无效的。
在表1中给出了针对四个高速缓存存储体的总线接口编号的示例。
存储体0 存储体1 存储体2 存储体3
单总线 0 0 0 0
双总线 0 1 0 1
四总线 0 1 2 3
表1–用于每个存储体的总线接口遍号
在一些示例中请求包括地址部分。存储器接口可以被配置为在第一映射中将地址部分映射到高速缓存存储体。存储器接口可以被配置为在第二映射中将高速缓存存储体映射到总线接口。存储器接口可以被配置为通过使用散列函数(例如单个散列函数)来执行第一映射和第二映射中的至少一个。即在一个示例中单个散列函数可执行第一映射和第二映射两者。
第一映射可以是地址部分与高速缓存存储体之间的一对一映射。第一映射可允许单个地址部分映射到多于一个高速缓存存储体。第二映射可以是高速缓存存储体与总线接口之间的一对一映射。第二映射可允许一个或多个高速缓存存储体映射到相同的总线接口。此方法允许一个总线接口映射到一个高速缓存存储体,或者允许单个总线接口映射到多个高速缓存存储体。特定高速缓存存储体可以映射到单个总线接口。
存储器接口可以在反向转换模块处执行第一映射和/或第二映射。反向转换数据结构可以包括第一映射和/或第二映射。存储器接口处的处理器(诸如窥探处理器)可以被配置为执行第一映射和/或第二映射。
适当地存储器接口被配置为防止引起多个写回/驱逐请求的高速缓存行的重复刷新。因为高速缓存行状态可以对于接收到刷新请求的完全有效的高速缓存行保持有效,所以如果错误地发出了多个此类刷新,则它可以导致多个写回和/或驱逐请求错误地发出到存储器。因此应该避免重复刷新。
可能的是窥探处理器和溢出控制模块都旨在向相同的高速缓存行发出刷新,例如如果溢出开始于包含唯一高速缓存行的条目并且然后针对相同的高速缓存行接收到窥探,或者反之亦然。高速缓存存储体接口可以检测并移除与刷新缓冲器中的现有条目匹配的传入刷新,但是一旦条目已离开刷新缓冲器,高速缓存存储体接口就不再能够检测到这种危险。因此除了对传入写入事务敏感之外,窥探处理器和溢出缓冲器模块还可以被配置为能够检测另一个何时针对它们本身可以发出刷新的高速缓存行向高速缓存存储体接口发出刷新。此方法还维持不存在高速缓存存储体接口的功能性。
如果溢出控制和窥探处理器都试图在相同周期上向高速缓存存储体接口模块发出刷新,则一个将由高速缓存存储体接口仲裁器选择,并且当被启用时另一个将检测到这个并取消它自己的刷新。在窥探处理器和溢出缓冲器模块中的一个已发出刷新但是被高速缓存行状态模块停止的情况下,两个模块可以仅在与写入到高速缓存行状态模块相同的周期上或者在写入到高速缓存行状态模块之后将刷新发出到高速缓存存储区接口。这确保一个模块不可以在它正在读取高速缓存行状态RAM的同时错过来自另一个模块的刷新。
窥探请求的早期处理
在在特定高速缓存中具有多个高速缓存存储体的系统中,反向转换模块或反向转换模块处的反向转换数据结构提供不需要单独地搜索高速缓存存储体中的每一个以确定对应于与接收到的存储器请求相关联的物理地址的虚拟地址的优点。反向转换模块可根据与所接收到的存储器请求相关联的物理地址识别适当的高速缓存存储体。例如,反向转换模块可维持将物理地址或物理地址的范围映射到多个高速缓存存储体的表。以这种方式,当接收到存储器请求时,反向转换模块可访问该表以确定物理地址映射到多个高速缓存存储体中的哪一个。然后需要访问仅多个高速缓存存储体中的相关高速缓存存储体。这可通过避免不必要地访问它们来减少其他高速缓存存储体的负载,在其他高速缓存存储体被搜索以识别正确的高速缓存存储体的情况下可能发生所述负载。此方法因此可在接收到存储器请求时减少高速缓存的和/或高速缓存存储体的操作中的干扰。因此,可将访问局限于已知为或者更可能响应于存储器请求而返回高速缓存命中的高速缓存存储体。进一步地,反向转换模块可确定高速缓存不包括来自存储器请求的物理地址的映射(例如高速缓存存储体当中谁都不包括来自存储器请求的物理地址的映射,诸如当所请求的高速缓存行尚未被存储在高速缓存中时会发生)。在这种情形下存储器接口不必访问高速缓存(例如高速缓存处的高速缓存存储体中的任一个)。这可通过允许在无需访问高速缓存它本身的情况下做出在高速缓存中未映射存储器请求的物理地址的确定来改进性能。因此,可通过存储器接口来在不用访问高速缓存的情况下发送响应。这可减少发出响应所花费的时间,并且可减少高速缓存上的负载。
在反向转换模块的反向转换数据结构不包含特定物理地址的情况下,例如因为处理器尚未访问主存储器中的该物理地址,并且所以在高速缓存中仍然未提供缓存版本,不需要对高速缓存的任何尝试访问,这否则会导致缓存未命中。替代地,可省略高速缓存访问步骤,并且反向转换模块可确定存在(或者将存在)高速缓存未命中。响应于确定存在或者将存在高速缓存未命中,可访问在主存储器中的该特定物理地址处的数据。这可减少在将存在高速缓存未命中的情况下处理这种请求的等待时间。此方法还可减少高速缓存上不必要的处理负载。
目前的技术允许在一致性管理器处在一致存储器空间中处理存储器请求以便使得能实现对存储器请求的更高效处理。例如,一致性管理器适当地能够处理存储器请求,使得存储器请求不必全部都在高速缓存存储器处被处理或者由高速缓存存储器处理。一些存储器请求(例如,如果在高速缓存存储器处被处理则会导致高速缓存未命中的存储器请求)不必被传递到高速缓存存储器。相反,此类存储器请求被一致性管理器有利地滤出以便不占去高速缓存存储器处的处理时间和/或带宽。一致性管理器因此可以被视为可减少高速缓存存储器它本身上的处理负载的“预处理器”。适当地,一致性管理器可以与高速缓存存储器至少相同(若不比高速缓存存储器块的话)的速度操作。因此在一致性管理器处处理存储器请求而不是要求所有请求传递到高速缓存存储器总体上适当地提高系统的速度和/或效率。一致性管理器被适当地配置为确定所识别的存储器地址(即,在存储器请求中识别的存储器地址)是否是与高速缓存存储器处的高速缓存行相关联的存储器地址。一致性管理器被适当地配置为根据高速缓存存储器是否包括与所识别的存储器地址相关联的高速缓存行(和/或高速缓存行的状态,如将在下面进一步说明的)来处理存储器请求。
适当地,一致性管理器响应于确定在存储器请求中识别的存储器地址在反向转换数据结构中与高速缓存存储器不相关联而被配置为输出响应。适当地窥探处理器被配置为输出响应。适当地在总线上输出响应。适当地,一致性管理器被配置为直接地输出响应。例如,一致性管理器被适当地配置为在无需访问高速缓存存储器的情况下直接地对此类存储器请求做出响应。
此方法具有允许在不会引发访问高速缓存存储器的处理成本的情况下、在不会引发由于高速缓存存储器处的等待时间而导致的时间成本的情况下和/或在不会引发向高速缓存存储器发送信号并从高速缓存存储器接收信号的带宽成本的情况下处理存储器请求的优点。这帮助允许一致性管理器高效地处理存储器请求。
一致性管理器响应于在窥探处理器处确定在存储器请求中识别的存储器地址在反向转换数据结构中与高速缓存存储器相关联被适当地配置为处理存储器请求。处理存储器请求可以涉及查询反向转换数据结构中的与和存储器请求相关联的物理页面相对应的虚拟页面的状态。窥探处理器被配置为依赖于反向转换数据结构中的虚拟页面的状态来处理存储器请求。在虚拟页面的状态无效的情况下,窥探处理器被适当地配置为在无需访问高速缓存行状态数据结构或高速缓存的情况下对存储器请求做出响应。在虚拟页面的状态有效的情况下,窥探处理器适当地访问与所需要的高速缓存行相对应的相关高速缓存行状态数据结构条目。窥探处理器被配置为依赖于高速缓存行状态数据结构中的高速缓存行的状态来处理存储器请求。在高速缓存行的状态无效的情况下(例如在没有数据被存储在此高速缓存行处、存储在高速缓存行的数据损坏、存储在此高速缓存行处的数据正被驱逐等的情况下),窥探处理器被适当地配置为在无需访问高速缓存处的高速缓存行的情况下对存储器请求做出响应。在高速缓存行的状态有效的情况下,窥探处理器可以被配置为访问高速缓存处的高速缓存行,并且依赖于所访问的高速缓存行来对存储器请求做出响应。
上述方法可帮助减少由存储器请求所消耗的处理负载和带宽。进一步地,此方法可减少处理存储器请求所需要的时间,因为访问或者查询反向转换数据结构和/或高速缓存行状态数据结构并且由一致性管理器依赖于该访问或查询的结果来输出响应可以比访问高速缓存存储器它本身更快。
在一些示例中,可能不需要在高速缓存行的状态是等待驱逐的高速缓存存储器处处理存储器请求。在这种情况下,高速缓存行存在于高速缓存存储器中但是可能(在过程的某个阶段处)经历驱逐,并且如果适当的话也可能经历写回。在这种情况下可能期望响应于存储器请求而发送高速缓存未命中响应。不需要访问高速缓存存储器以便能够发送这种响应。对于上述的其他示例也是如此。可以确定会发生高速缓存未命中,并且使一致性管理器相应地输出响应。
一致性管理器可以依赖于对高速缓存行的状态的确定而使得关于高速缓存行执行写回过程和驱逐过程中的至少一个。在高速缓存行状态被确定为是干净的(即存储在高速缓存中的高速缓存行处的数据与存储在主存储器中的对应数据条目中的数据相同)并且存储在高速缓存行处的数据是另一高速缓存所需要的情况下,可从高速缓存中驱逐存储在高速缓存行处的数据,使得当它可能不再是最新的时将不在后续事务中无意地读取它。在高速缓存行是干净的情况下,不需要发生写回事务或写回过程。因此,这种布置允许快速且高效地识别相关高速缓存行并且随后从高速缓存中驱逐存储在该高速缓存行处的数据。在高速缓存行中的数据被驱逐(如果适当的话)之前避免对高速缓存行的不必要读取进一步有助于减少系统中的等待时间。
在高速缓存行状态被确定为是脏的(即高速缓存中的高速缓存行中的数据自从主存储器中读取以来已被修改,并且高速缓存中的版本是最新的)情况下,该数据高速缓存行中的数据可以在它被从高速缓存中驱逐之前被写回到主存储器。这使得任何后续事务(诸如与高速缓存行处的缓存数据相对应的存储器地址的读取事务)能够访问对应数据条目的最新版本。如果写回过程是适当的,则反向转换模块(例如反向转换数据结构)可允许确定虚拟地址,使得可访问高速缓存中的高速缓存行并且将该高速缓存行处的数据写回到主存储器。
在高速缓存行中的数据被从高速缓存中驱逐而没有写回到主存储器的情况下,可将高速缓存行指示为无效的。这提供该缓存行不再保持有效数据的指示。将高速缓存行指示为无效的意味着对该高速缓存行的后续读取请求将是高速缓存未命中。可通过使用高速缓存中的标志或其他状态指示符、状态数据结构中的标志或其他状态指示符或类似物等来完成指示高速缓存行是无效的。因此,在所有示例中不需要覆写高速缓存中的现有数据条目,但是可以例如为了增加数据安全做这个。存储了被驱逐数据的高速缓存行然后可变得立即可用于将新数据写入到高速缓存中。
这不一定是期望写回事务的情况。在这种情况下,将读取来自该高速缓存行的数据,使得它可被写回到主存储器。因此,高速缓存行可能不可用于存储新数据直到该读取事务已完成为止,并且可能不直到主存储器上的对应写回事务已完成为止。通常,数据将保持在高速缓存行中直到已经接收到写回确认从而指示写回事务确实已完成为止。此写回确认指示的接收指示因为写回事务已完成,所以不再需要将数据保留在高速缓存中的该高速缓存行中。然而,因为如上面所讨论的,主存储器通常比高速缓存慢得多,所以由于在高速缓存可继续完成驱逐高速缓存行中的数据的过程之前需要等待主存储器完成事务,等待时间将往往增加。
在一些实施方式中,可以重新分配高速缓存的一部分,例如高速缓存行,以用于在已经存在于该高速缓存行中的数据写回到存储器之前即在接收到写回确认之前存储新数据。
用于存储新数据(例如存储在主存储器中的新物理地址处的数据)的高速缓存行的分配可被排队以用于后面的动作。队列可形成在存储器接口处。与新分配有关的数据可被存储在反向转换模块处,例如在反向转换数据结构处。这允许来自层级中的最低级高速缓存上方或下面(例如来自与该高速缓存相关联的处理器或者来自经由存储器接口耦合到该高速缓存的处理器)的后续读取事务被处理。例如,即使在数据到高速缓存行的新分配完成之前,可以在反向转换模块处例如根据反向转换数据结构来针对排队的分配请求确定在用于此新数据的高速缓存上的后续读取事务是否将是高速缓存未命中还是高速缓存命中。
如果后续读取事务将是高速缓存未命中,则存储器接口可使得对请求的响应被发送以指示该请求导致高速缓存未命中。不必访问高速缓存它本身。
注意的是,不必立即发送这个响应;可能需要根据特定顺序(诸如以与传入存储器请求的顺序相对应的顺序)输出响应。例如,这可能需要满足特定数据协议,如在下面所讨论的。能够提前处理所接收到的请求允许节约时间。响应可被排队直到它将被以正确的顺序输出为止。
如果后续读取事务将是高速缓存命中,其在分配请求尚未被排队的情况下否则可能一直是高速缓存未命中,则高速缓存命中的结果可被排队以用于在适当的时候响应。注意的是,不管在对响应高速缓存命中的结果进行排队以便响应时的某种延迟,它仍然很可能减少系统等待时间,因为这个过程很可能比在事务的结果是高速缓存未命中的情况下更快,并且随后从较慢的主存储器中读取数据。
适当地,一致性管理器被配置为使存储器请求被发送到高速缓存存储器以便在高速缓存存储器处处理。例如,在高速缓存存储器中存在高速缓存行并且高速缓存行状态数据结构指示例如高速缓存行的状态是有效的情况下,存储器请求可继续进行到高速缓存存储器。高速缓存存储器可处理存储器请求。依赖于处理存储器请求或者作为处理存储器请求的一部分,高速缓存存储器被适当地配置为使得关于高速缓存行执行写回过程和驱逐过程中的至少一个。
高速缓存行状态数据结构在所有示例中不是必要的。例如,在高速缓存存储器中存在高速缓存行的情况下,一致性管理器可以被配置为允许存储器请求传递到高速缓存存储器,即继续进行到高速缓存存储器以便处理。不必确定高速缓存存储器处的高速缓存行的状态。然而,在存在高速缓存行状态数据结构的情况下,可有利地使用它来减少高速缓存存储器处理的存储器请求的数量,从而提高效率。
适当地,允许存储器请求继续进行到高速缓存存储器包括确定高速缓存存储器处的多个高速缓存存储体中的哪一个在反向转换数据结构中与所识别的存储器地址相关联,并且将存储器请求传递到相应的高速缓存存储体依赖于该确定。此方法允许一致性管理器减少继续进行到高速缓存存储体中的任一个的存储器请求的数量,并且/或者允许存储器请求被导向适当的高速缓存存储体。例如,在通过总线接收到诸如广播存储器请求的存储器请求的情况下,一致性管理器被适当地配置为确定哪一个高速缓存存储体(若有的话)保持与所识别的存储器地址相关联的高速缓存行。如果特定高速缓存存储体保持相关高速缓存行,则一致性管理器可以适当地将存储器请求导向该高速缓存存储体。在一致存储器系统中,共享存储器中的存储器位置一次由一个高速缓存适当地声明。因此,如果特定高速缓存存储体保持与所识别的存储器地址相关联的高速缓存行,则其他高速缓存存储体不会保持与相同识别的存储器地址相关联的高速缓存行。这意味着对那些其他高速缓存存储体的任何存储器请求将是冗余的。任何这种存储器请求会浪费资源,诸如处理时间和/或带宽。因此期望存储器请求被仅导向适当的高速缓存存储体。适当地,一致性管理器依赖于哪一个高速缓存存储体在反向转换数据结构中与所识别的存储器地址相关联的确定被配置为仅将存储器请求传递给所确定的高速缓存存储体。
一致性管理器可以被配置为监测总线(例如通过监测总线接口)是否有对存储器的读取请求,所述读取请求识别读取请求的读取存储器地址和响应目的地,并且在反向转换数据结构中使读取存储器地址与和响应目的地相对应的高速缓存存储器相关联。
适当地一致性管理器被配置为通过将读取存储器地址写入到反向转换数据结构来使读取存储器地址与和响应目的地相对应的高速缓存存储器相关联。以这种方式监测总线允许一致性管理器跟踪哪些高速缓存存储器(或高速缓存存储体)对哪些高速缓存行声明所有权。它允许一致性管理器自动地更新反向转换数据结构中的存储器地址与高速缓存存储器(或高速缓存存储体)之间的关联。以这种方式跟踪声明的高速缓存行的存储器地址允许一致性管理器能够高效地处理随后接收到的存储器请求,诸如窥探请求。响应目的地适当地指示发出了读取请求的设备的高速缓存存储器或高速缓存存储体。响应于此读取请求,一致性管理器可使读取存储器地址与所指示的高速缓存存储器或高速缓存存储体相关联。
图1-13被示出为包括许多功能块。这仅是示意性的,而不旨在定义图中所图示的实体的不同的逻辑元件之间的严格划分。可以以任何适合的方式提供每个功能块。应当理解的是,在本文中被描述为由存储器接口和/或一致性管理器形成的中间值不必由存储器接口和/或一致性管理器在任何点处以物理方式生成并且可以仅仅表示方便地描述由存储器接口和/或一致性管理器在它的(或它们的)输入和输出之间执行的处理的逻辑值。
本文描述的存储器接口和/或一致性管理器可以被具体实现在集成电路上的硬件中。本文描述的存储器接口和/或一致性管理器可以被配置为执行本文描述的方法中的任一种。一般地,上述的功能、方法、技术或组件中的任一个可用软件、固件、硬件(例如,固定逻辑电路)或其任何组合加以实现。可以在本文中使用术语“模块”、“功能性”、“组件”、“元件”、“单元”、“块”和“逻辑”来一般地表示软件、固件、硬件或其任何组合。在软件实施方式的情况下,模块、功能性、组件、元件、单元、块或逻辑表示当在处理器上执行时执行所指定的任务的程序代码。本文描述的算法和方法能由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪速存储器、硬盘存储器以及可以使用磁、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器器件。
如本文所使用的术语计算机程序代码和计算机可读指令指代用于处理器的任何种类的可执行代码,包括用机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网络表),以及用诸如C、Java或OpenCL的编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,这些当在虚拟机或其他软件环境处被适当地执行、处理、解释、编译、执行时,使支持该可执行代码的计算机系统的处理器执行通过该代码所指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路或其合集或部分,具有处理能力使得它可执行指令。处理器可以是任何种类的通用或专用处理器,诸如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
本发明还旨在包含定义如本文所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路或者用于配置可编程芯片,以执行期望的功能。也就是说,可以提供一种计算机可读存储介质,所述计算机可读存储介质在其上编码有形式为集成电路定义数据集的计算机可读程序代码,所述集成电路定义数据集当在集成电路制造系统中被处理时将该系统配置为制造被配置为执行本文描述的方法中的任一种的存储器接口和/或一致性管理器,或者制造包括本文描述的任何装置的存储器接口和/或一致性管理器。集成电路定义数据集可以是例如集成电路描述。
可以提供一种在集成电路制造系统处制造如本文所描述的存储器接口和/或一致性管理器的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集当在集成电路制造系统处被处理时,使制造存储器接口和/或一致性管理的方法被执行。
集成电路定义数据集可以形式为计算机代码,例如作为网络表、用于配置可编程芯片的代码、作为在任何级下定义集成电路的硬件描述语言,包括作为寄存器传送级(RTL)代码、作为诸如Verilog或VHDL的高级电路表示,并且作为诸如OASIS(RTM)和GDSII的低级电路表示。可以在被配置用于在软件环境的上下文中生成集成电路的制造定义的计算机系统处处理逻辑上定义集成电路的更高级表示(诸如RTL),所述软件环境包括电路元件的定义以及用于组合那些元件以便生成通过表示如此定义的集成电路的制造定义的规则。情况通常是软件在计算机系统处执行以便定义机器,可能需要一个或多个中间用户步骤(例如,提供命令、变量等)以便被配置用于生成集成电路的制造定义的计算机系统执行定义集成电路的代码以便生成该集成电路的制造定义。
现在将参考图14描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为制造存储器接口和/或一致性管理器的示例。
图14示出被配置为制造如本文的任何示例中所描述的存储器接口和/或一致性管理器的集成电路(IC)制造系统1402的示例。特别地,IC制造系统1402包括布局处理系统1404和集成电路生成系统1406。IC制造系统1402被配置为接收IC定义数据集(例如定义如本文的任何示例中所描述的存储器接口和/或一致性管理器),处理IC定义数据集,并且根据IC定义数据集(例如其具体实现如本文的任何示例中所描述的存储器接口和/或一致性管理器)来生成IC。IC定义数据集的处理将IC制造系统1402配置为制造具体实现如本文的任何示例中所描述的存储器接口和/或一致性管理器的集成电路。
布局处理系统1404被配置为接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以例如在逻辑组件(例如与非、或非、与、或、多路复用器和触发器组件)方面确定要生成的电路的门级表示。可通过确定逻辑组件的位置信息来根据电路的门级表示确定电路布局。可以自动地或者在用户参与情况下做这个以便优化电路布局。当布局处理系统1404已确定了电路布局时,它可以向IC生成系统1406输出电路布局定义。电路布局定义可以是例如电路布局描述。
如本领域中已知的,IC生成系统1406根据电路布局定义来生成IC。例如,IC生成系统1406可以实现用于生成IC非半导体器件制造工艺,其可以涉及光刻和化学处理步骤的多步骤序列,在所述光刻和化学处理步骤期间,在由半导体材料制成的晶片上逐渐创建电子电路。电路布局定义可以形式为掩模,所述掩模可在光刻工艺中被用于根据电路定义来生成IC。可替代地,提供给IC生成系统1406的电路布局定义可以形式为计算机可读代码,IC生成系统1406可使用所述计算机可读代码来形成在生成IC时使用的适合的掩模。
由IC制造系统1402所执行的不同的工艺可以例如由一方全部实现在一个位置。可替代地,IC制造系统1402可以是分布式系统,使得一些工艺可以在不同的位置处被执行,并且可以由不同方执行。例如,可以在不同的位置中并且/或者通过不同方来执行以下阶段中的一些:(i)合成表示IC定义数据集的RTL代码以形成要生成的电路的门级表示、(ii)基于门级表示生成电路布局、(iii)依照电路布局来形成掩模以及(iv)使用掩模来制作集成电路。
在其他示例中,在集成电路制造系统处处理集成电路定义数据集可以将该系统配置为在不用处理IC定义数据集以便确定电路布局的情况下制造存储器接口和/或一致性管理器。例如,集成电路定义数据集可以定义可重新配置处理器(诸如FPGA)的配置,并且对该数据集的处理可以将IC制造系统配置为生成具有该定义的配置的可重新配置处理器(例如通过将配置数据加载到FPGA)。
在一些实施例中,集成电路制造定义数据集当在集成电路制造系统中被处理时,可以使集成电路制造系统生成如本文所描述的器件。例如,通过集成电路制造定义数据集来以上面关于图14所描述的方式配置集成电路制造系统可以使如本文所描述的器件被制造。
在一些示例中,集成电路定义数据集能包括在该数据集处定义的硬件上或者与在该数据集处定义的硬件相结合地运行的软件。在图14中所示的示例中,可以进一步通过集成电路定义数据集来将IC生成系统配置为在制造集成电路时,依照在集成电路定义数据集处定义的程序代码将固件加载到该集成电路上或者以其他方式给集成电路提供程序代码以用于与集成电路一起使用。
当与已知实施方式相比较时,在本申请中在设备、装置、模块和/或系统在(以及在本文实现的方法中)阐述的构思的实施方式可以产生性能改进。性能改进可以包括增加的计算性能、减少的等待时间、增加的吞吐量和/或降低的功耗中的一个或多个。在(例如在集成电路中)制造此类设备、装置、模块和系统期间,可对照物理实施方式来权衡性能改进,从而改进制造方法。例如,可以对照布局面积来交换性能改进,从而与已知实施方式的性能匹配但是使用更少的硅。可以例如通过以串行化方式重用功能块或者在设备、装置、模块和/或系统的元件之间共享功能块来做这个。相反地,可以为了改进的性能而交换在本申请中阐述的在设备、装置、模块和系统的物理实施方式方面产生改进(诸如减少的硅面积)的构思。可以例如通过在预定义面积预算内制造模块的多个实例来做这个。
本申请人特此孤立地公开了本文描述的每个单独的特征以及两个或更多个此类特征的任何组合,只要此类特征或组合能够按照本领域的技术人员的一般常识总体上基于本说明书被执行即可,而不管此类特征或特征的组合是否解决本文公开的任何问题。鉴于前面的描述,对于本领域的技术人员而言将明显的是,可以在本发明的范围内做出各种修改。

Claims (20)

1.一种用于在存储器总线与高速缓存存储器之间进行接口连接的存储器接口,所述高速缓存存储器与处理器相关联,所述存储器接口包括:
多个总线接口,每个总线接口被配置为在所述存储器总线与所述高速缓存存储器的相应非重叠部分之间传送数据;以及
多个窥探处理器,所述多个窥探处理器被配置为从所述存储器总线接收窥探请求;
其中,每个窥探处理器与相应的总线接口相关联,并且每个窥探处理器被配置为:在接收到窥探请求时,确定所述窥探请求是否涉及与该窥探处理器相关联的总线接口并且依赖于该确定来处理所述窥探请求。
2.根据权利要求1所述的存储器接口,其中,每个窥探处理器被配置为:依赖于由所述窥探请求寻址的存储器来确定所述窥探请求是否涉及与该窥探处理器相关联的总线接口,并且依赖于该确定来生成对所述窥探请求的响应。
3.根据权利要求1或2所述的存储器接口,其中,所述存储器接口包括如下数据结构,该数据结构被配置为维持所述多个总线接口中的每一个总线接口与相应的存储器地址集之间的映射。
4.根据权利要求3所述的存储器接口,其中,所述相应的存储器地址集中的每一个存储器地址集包括存储器地址的列表和存储器地址的范围中的至少一个。
5.根据权利要求1或2所述的存储器接口,其中,所述高速缓存存储器包括多个高速缓存存储体,并且每个总线接口被配置为向与该总线接口相关联的一个或多个高速缓存存储体传送数据。
6.根据权利要求5所述的存储器接口,其中,每个窥探处理器被配置为:在第一映射中将由所述窥探请求寻址的存储器映射到所述多个高速缓存存储体中的高速缓存存储体,并且在第二映射中将所述高速缓存存储体映射到所述多个总线接口中的一个总线接口。
7.根据权利要求6所述的存储器接口,其中,所述第一映射是如下项之一:由所述窥探请求寻址的存储器与所述高速缓存存储体之间的一对一映射;和允许由所述窥探请求寻址的存储器映射到多于一个高速缓存存储体的映射。
8.根据权利要求3所述的存储器接口,其中,每个窥探处理器被配置为在以下各项中的至少一种的情况下确定所述窥探请求不涉及与该窥探处理器相关联的总线接口:
由所述窥探请求寻址的存储器未映射到与该窥探处理器相关联的总线接口;以及
所述映射不包括由所述窥探请求寻址的存储器。
9.根据权利要求1或2所述的存储器接口,包括高速缓存行状态数据结构,该高速缓存行状态数据结构被配置为存储与所述高速缓存存储器处的高速缓存行有关的状态信息,每个窥探处理器被配置为:在所述窥探请求涉及与该窥探处理器相关联的总线接口的情况下,依赖于存储在所述高速缓存行状态数据结构中的状态信息来生成对所述窥探请求的响应。
10.根据权利要求9所述的存储器接口,其中,在所述状态信息指示所述高速缓存行是以下各项中的至少一个的情况下:
处于无效状态,
正在经历溢出,以及
正在经历写回或驱逐过程,
所关联的窥探处理器被配置为确定所述窥探请求导致高速缓存未命中并且使得对所述窥探请求的对应响应在所述总线上被发送。
11.根据权利要求1或2所述的存储器接口,其中,所述窥探处理器中的至少一个被配置为:在确定所述窥探请求不涉及与该窥探处理器相关联的总线接口时,使得在不用访问所述高速缓存存储器的情况下在所述总线上发送响应。
12.根据权利要求1或2所述的存储器接口,其中,每个窥探处理器包括用于计算所述窥探请求所涉及的总线接口的总线计算模块。
13.根据权利要求1或2所述的存储器接口,其中,每个窥探处理器包括用于存储所接收的窥探请求的缓冲器。
14.根据权利要求13所述的存储器接口,其中,每个窥探处理器被配置为以与所述窥探请求被接收的顺序不同的顺序处理所述缓冲器上的窥探请求。
15.根据权利要求1或2所述的存储器接口,其中,每个窥探处理器包括用于以下各项中的至少一个的控制逻辑:控制对所述高速缓存行状态数据结构的访问、访问所述高速缓存、向所述高速缓存发送命令以及发出对窥探请求的响应。
16.根据权利要求1或2所述的存储器接口,其中,由所述窥探请求寻址的存储器是物理地址空间中的物理地址,并且所述高速缓存存储器使用虚拟地址空间,所述存储器接口包括反向转换模块,所述反向转换模块被配置为维持从所述物理地址空间到所述虚拟地址空间的映射,并且所述反向转换模块被配置为将所述窥探请求转换为在所述虚拟地址空间中寻址的经转换的窥探请求。
17.根据权利要求16所述的存储器接口,其中,所述反向转换模块包括:基于所述物理地址空间与所述虚拟地址空间之间的已知关系来计算依赖于所述物理地址的所述虚拟地址的逻辑。
18.根据权利要求16所述的存储器接口,其中,所述反向转换模块包括:被配置为维持从所述物理地址空间到所述虚拟地址空间的映射的反向转换数据结构。
19.一种用于在存储器接口处在存储器总线与高速缓存存储器之间进行接口连接的方法,所述高速缓存存储器与处理器相关联,所述存储器接口包括多个总线接口和多个窥探处理器,每个总线接口被配置为在所述存储器总线与所述高速缓存存储器的相应非重叠部分之间传送数据,所述多个窥探处理器被配置为从所述存储器总线接收窥探请求,每个窥探处理器与相应的总线接口相关联,所述方法包括:
在所述存储器接口处接收窥探请求;
每个窥探处理器确定所述窥探请求是否涉及其相关联的相应的总线接口;以及
每个窥探处理器依赖于该确定来处理所述窥探请求。
20.一种计算机可读存储介质,其上存储有集成电路的计算机可读描述,所述计算机可读描述当在集成电路制造系统中被处理时,使所述集成电路制造系统制造用于在存储器总线与高速缓存存储器之间进行接口连接的存储器接口,所述高速缓存存储器与处理器相关联,所述存储器接口包括:
多个总线接口,每个总线接口被配置为在所述存储器总线与所述高速缓存存储器的相应非重叠部分之间传送数据;以及
多个窥探处理器,所述多个窥探处理器被配置为从所述存储器总线接收窥探请求;
其中,每个窥探处理器与相应的总线接口相关联,并且每个窥探处理器被配置为:在接收到窥探请求时,确定所述窥探请求是否涉及与该窥探处理器相关联的总线接口并且依赖于该确定来处理所述窥探请求。
CN201910146821.9A 2018-02-28 2019-02-27 存储器接口 Active CN110209610B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1803291.2 2018-02-28
GB1803291.2A GB2571538B (en) 2018-02-28 2018-02-28 Memory interface

Publications (2)

Publication Number Publication Date
CN110209610A CN110209610A (zh) 2019-09-06
CN110209610B true CN110209610B (zh) 2024-05-03

Family

ID=61903152

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910146821.9A Active CN110209610B (zh) 2018-02-28 2019-02-27 存储器接口

Country Status (4)

Country Link
US (3) US11132299B2 (zh)
EP (1) EP3534268B1 (zh)
CN (1) CN110209610B (zh)
GB (1) GB2571538B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190108001A (ko) * 2018-03-13 2019-09-23 한국전자통신연구원 네트워크온칩 및 이를 포함하는 컴퓨팅 장치
FR3094810B1 (fr) * 2019-04-03 2023-01-13 Thales Sa Système sur puce comprenant une pluralité de ressources maitre
CN111123792B (zh) * 2019-12-29 2021-07-02 苏州浪潮智能科技有限公司 一种多主系统交互通信与管理方法和装置
US11797673B2 (en) 2020-08-27 2023-10-24 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by expeditiously initiating flushing of instructions dependent upon a load instruction that causes a need for an architectural exception
US11907369B2 (en) * 2020-08-27 2024-02-20 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by preventing cache memory state from being affected by a missing load operation by inhibiting or canceling a fill request of the load operation if an older load generates a need for an architectural exception
US11868469B2 (en) 2020-08-27 2024-01-09 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by preventing all dependent instructions from consuming architectural register result produced by instruction that causes a need for an architectural exception
US11733972B2 (en) 2020-10-06 2023-08-22 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by providing random load data as a result of execution of a load operation that does not have permission to access a load address
US11803470B2 (en) 2020-09-25 2023-10-31 Advanced Micro Devices, Inc. Multi-level cache coherency protocol for cache line evictions
US11853424B2 (en) 2020-10-06 2023-12-26 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by refraining from allocating an entry in a data TLB for a missing load address when the load address misses both in a data cache memory and in the data TLB and the load address specifies a location without a valid address translation or without permission to read from the location
US11734426B2 (en) 2020-10-06 2023-08-22 Ventana Micro Systems Inc. Processor that mitigates side channel attacks by prevents cache line data implicated by a missing load address from being filled into a data cache memory when the load address specifies a location with no valid address translation or no permission to read from the location
US20220107897A1 (en) * 2021-12-15 2022-04-07 Intel Corporation Cache probe transaction filtering
US11847461B2 (en) * 2022-05-19 2023-12-19 Mellanox Technologies, Ltd. Out-of-order input / output write
CN117472793A (zh) * 2022-07-20 2024-01-30 摩尔线程智能科技(北京)有限责任公司 用于管理存储空间的装置及方法、计算设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0661641A2 (en) * 1993-12-30 1995-07-05 International Business Machines Corporation A computer system
US6138218A (en) * 1998-02-17 2000-10-24 International Business Machines Corporation Forward progress on retried snoop hits by altering the coherency state of a local cache
US6226695B1 (en) * 1995-09-29 2001-05-01 International Business Machines Corporation Information handling system including non-disruptive command and data movement between storage and one or more auxiliary processors
WO2006104747A2 (en) * 2005-03-29 2006-10-05 International Business Machines Corporation Method and apparatus for filtering snoop requests using stream registers
CN107038125A (zh) * 2017-04-25 2017-08-11 上海兆芯集成电路有限公司 具有加速预取请求的独立流水线的处理器高速缓存

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB253650A (en) 1925-04-08 1926-06-24 John Wesley Burleigh Improvements in dynamo electric machinery
US5555382A (en) * 1992-04-24 1996-09-10 Digital Equipment Corporation Intelligent snoopy bus arbiter
US6006029A (en) * 1993-09-28 1999-12-21 Bull Hn Information Systems Inc. Emulating disk drives of a first system on a second system
US5900017A (en) * 1997-05-14 1999-05-04 International Business Machines Corporation Snooping a variable number of cache addresses in a multiple processor system by a single snoop request
US5923898A (en) * 1997-05-14 1999-07-13 International Business Machines Corporation System for executing I/O request when an I/O request queue entry matches a snoop table entry or executing snoop when not matched
US6253291B1 (en) 1998-02-13 2001-06-26 Sun Microsystems, Inc. Method and apparatus for relaxing the FIFO ordering constraint for memory accesses in a multi-processor asynchronous cache system
US6480941B1 (en) * 1999-02-23 2002-11-12 International Business Machines Corporation Secure partitioning of shared memory based multiprocessor system
US6594734B1 (en) * 1999-12-20 2003-07-15 Intel Corporation Method and apparatus for self modifying code detection using a translation lookaside buffer
US6961796B2 (en) * 2001-07-26 2005-11-01 Hewlett-Packard Development Company, L.P. Extendable bus interface
US20030167379A1 (en) * 2002-03-01 2003-09-04 Soltis Donald Charles Apparatus and methods for interfacing with cache memory
US6959364B2 (en) * 2002-06-28 2005-10-25 Intel Corporation Partially inclusive snoop filter
US20040025581A1 (en) * 2002-08-08 2004-02-12 Miller Laurence Dean Method and apparatus for monitoring tire pressure with a color indicator
US7032079B1 (en) * 2002-12-13 2006-04-18 Unisys Corporation System and method for accelerating read requests within a multiprocessor system
US7421545B1 (en) * 2002-12-27 2008-09-02 Unisys Corporation Method and apparatus for multiple sequence access to single entry queue
US6970962B2 (en) * 2003-05-19 2005-11-29 International Business Machines Corporation Transfer request pipeline throttling
US7685354B1 (en) * 2004-06-30 2010-03-23 Sun Microsystems, Inc. Multiple-core processor with flexible mapping of processor cores to cache banks
US7451248B2 (en) * 2005-02-09 2008-11-11 International Business Machines Corporation Method and apparatus for invalidating cache lines during direct memory access (DMA) write operations
US20070073979A1 (en) * 2005-09-29 2007-03-29 Benjamin Tsien Snoop processing for multi-processor computing system
US7356652B1 (en) * 2006-03-28 2008-04-08 Unisys Corporation System and method for selectively storing bus information associated with memory coherency operations
US8990505B1 (en) * 2007-09-21 2015-03-24 Marvell International Ltd. Cache memory bank selection
JP2009223759A (ja) * 2008-03-18 2009-10-01 Fujitsu Ltd 情報処理装置,メモリ制御方法およびメモリ制御装置
US8615637B2 (en) 2009-09-10 2013-12-24 Advanced Micro Devices, Inc. Systems and methods for processing memory requests in a multi-processor system using a probe engine
US8918591B2 (en) * 2010-10-29 2014-12-23 Freescale Semiconductor, Inc. Data processing system having selective invalidation of snoop requests and method therefor
US8825933B2 (en) * 2011-11-30 2014-09-02 Andes Technology Corporation Bus apparatus with default speculative transactions and non-speculative extension
US20140095806A1 (en) 2012-09-29 2014-04-03 Carlos A. Flores Fajardo Configurable snoop filter architecture
US9189399B2 (en) * 2012-11-21 2015-11-17 Advanced Micro Devices, Inc. Stack cache management and coherence techniques
GB2533650B (en) * 2014-12-23 2021-07-21 Advanced Risc Mach Ltd Debugging data processing transactions
US10372358B2 (en) * 2015-11-16 2019-08-06 International Business Machines Corporation Access processor
US20170185516A1 (en) 2015-12-28 2017-06-29 Arm Limited Snoop optimization for multi-ported nodes of a data processing system
US10649684B2 (en) * 2017-03-16 2020-05-12 Arm Limited Memory access monitoring

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0661641A2 (en) * 1993-12-30 1995-07-05 International Business Machines Corporation A computer system
US6226695B1 (en) * 1995-09-29 2001-05-01 International Business Machines Corporation Information handling system including non-disruptive command and data movement between storage and one or more auxiliary processors
US6138218A (en) * 1998-02-17 2000-10-24 International Business Machines Corporation Forward progress on retried snoop hits by altering the coherency state of a local cache
WO2006104747A2 (en) * 2005-03-29 2006-10-05 International Business Machines Corporation Method and apparatus for filtering snoop requests using stream registers
CN107038125A (zh) * 2017-04-25 2017-08-11 上海兆芯集成电路有限公司 具有加速预取请求的独立流水线的处理器高速缓存

Also Published As

Publication number Publication date
EP3534268B1 (en) 2023-08-23
CN110209610A (zh) 2019-09-06
GB2571538B (en) 2020-08-19
US20230393983A1 (en) 2023-12-07
EP3534268A1 (en) 2019-09-04
GB2571538A (en) 2019-09-04
US11132299B2 (en) 2021-09-28
US20190266091A1 (en) 2019-08-29
GB201803291D0 (en) 2018-04-11
US11734177B2 (en) 2023-08-22
US20210390052A1 (en) 2021-12-16

Similar Documents

Publication Publication Date Title
US11372777B2 (en) Memory interface between physical and virtual address spaces
CN110209610B (zh) 存储器接口
CN110209599B (zh) 相干性管理器
US8180981B2 (en) Cache coherent support for flash in a memory hierarchy
US7917699B2 (en) Apparatus and method for controlling the exclusivity mode of a level-two cache
JP2000250813A (ja) I/oキャッシュ・メモリにおけるデータ管理方法
US11106583B2 (en) Shadow caches for level 2 cache controller
GB2601900A (en) Coherency manager
GB2589022A (en) Coherency manager
GB2579921A (en) Coherency manager

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant