CN107430567B - 共享缓冲存储器路由 - Google Patents
共享缓冲存储器路由 Download PDFInfo
- Publication number
- CN107430567B CN107430567B CN201680018790.3A CN201680018790A CN107430567B CN 107430567 B CN107430567 B CN 107430567B CN 201680018790 A CN201680018790 A CN 201680018790A CN 107430567 B CN107430567 B CN 107430567B
- Authority
- CN
- China
- Prior art keywords
- shared memory
- flit
- memory controller
- memory
- node
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0808—Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0635—Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Networks & Wireless Communication (AREA)
- Information Transfer Systems (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Communication Control (AREA)
Abstract
共享存储器控制器通过共享存储器链路从另一第一共享存储器控制器接收微片,其中该微片包括节点标识符(ID)字段和共享存储器的特定行的地址。节点ID字段标识第一共享存储器控制器对应于该微片的源。此外,至少根据该微片的地址字段确定第二共享存储器控制器,其中第二共享存储器控制器连接到与所述特定行对应的存储器元件。根据路由路径使用共享存储器链路将该微片转发至第二共享存储器控制器。
Description
相关申请的交叉引用
本申请要求对2015年3月27日提交的题为“SHARE BUFFERED MEMORY ROUTING(共享缓冲存储器路由)”的美国非临时专利申请号14/670,578的权益和优先权,其全部内容通过引用并入本文。
技术领域
本公开涉及计算系统,并具体(但非排它地)涉及计算系统中的组件之间的存储器访问。
背景技术
半导体处理和逻辑设计的进步已允许可存在于集成电路设备上的逻辑的数量上的增加。作为必然结果,计算机系统配置已从系统中的单个或多个集成电路演进为存在于各个集成电路上的多个核、多个硬件线程和多个逻辑处理器以及集成在此类处理器内的其它接口。处理器或集成电路通常包括单个物理处理器管芯,其中处理器管芯可包括任何数量的核、硬件线程、逻辑处理器、接口、存储器、控制器中枢等。
由于具有更强的能力以在更小的封装中装配更多的处理功率,更小的计算设备的普及度增加。智能电话、平板、超薄笔记本以及其它用户设备已经呈指数级增长。然而,这些更小的设备依赖于用于超出形状因子的复杂处理和数据存储二者的服务器。因此,高性能计算市场(即,服务器空间)方面的需求也已经增加。例如,在现代服务器中,通常不仅存在具有多个核的单个处理器,还存在多个物理处理器(也称为多个插槽)以增加计算能力。但随着处理能力与计算系统中的设备数量一同增长,插槽和其它设备之间的通信变得更加关键。
实际上,互连已从原来处理电通信的更传统的多点分支总线成长为促进快速通信的充分发展的互连架构。不幸的是,随着未来处理器以甚至更高速率消耗的需求,对于现存互连架构的能力寄托了对应的需求。
附图说明
图1图示出包括互连架构的计算系统的实施例。
图2图示出包括分层栈的互连架构的实施例。
图3图示出要在互连架构内生成或接收的请求或分组的实施例。
图4图示出用于互连架构的发射器和接收器对的实施例。
图5图示出与高性能通用输入/输出(GPIO)互连相关联的分层协议栈的实施例。
图6图示出示例多槽微片的表示。
图7图示出利用缓冲存储器访问的示例系统。
图8A图示出示例节点的实施例的简化框图。
图8B图示出包括多个节点的示例系统的实施例的简化框图。
图8C图示出包括多个节点的示例系统的实施例的另一简化框图。
图9是根据示例共享存储器链路传输的数据的表示。
图10A是根据共享存储器链路的另一示例传输的数据的表示。
图10B是数据框架化(framing)令牌的示例开始的表示。
图11是根据共享存储器链路的另一示例传输的数据的表示。
图12图示出被修改以用于在共享存储器架构内路由的示例多槽微片的表示。
图13A-13B是图示出用于在共享存储器架构内路由事务的示例技术的流程图。
图14图示出用于包括多核处理器的计算系统的框图的实施例。
各图中类似的参考标号和标示指示类似的元件。
具体实施方式
在以下描述中,阐述了众多具体细节,诸如以下示例:具体的处理器类型和系统配置、具体硬件结构、具体架构和微架构细节、具体寄存器配置、具体指令类型、具体系统组件、具体测量结果/高度、具体处理器流水线级以及操作等,以便提供对本发明的透彻理解。然而,对本领域技术人员来说将显而易见的是,不需要采用这些具体细节来实践本发明。在其它实例中,没有详细地描述众所周知的组件或方法(诸如具体的和替代的处理器架构、用于所描述的算法的具体逻辑电路/代码、具体固件代码、具体互连操作、具体逻辑配置、具体制造技术和材料、具体编译器实现方式、代码中算法的具体表达、具体掉电和选通技术/逻辑、以及计算机系统的其它具体操作细节),以便避免不必要地模糊本发明。
尽管可参考具体集成电路中(诸如在计算平台或微处理器中)的节能和能效来描述以下实施例,但其它实施例可应用于其它类型的集成电路和逻辑设备。本文描述的实施例的相似的技术和教导可被应用于同样可受益于更好的能效和节能的其它类型的电路或半导体设备。例如,公开的实施例不限于桌面计算机系统或UltrabookTM(超级本)。而是也可用于诸如手持设备、平板、其它薄笔记本、片上系统(SOC)设备、和嵌入式应用之类的其它设备中。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字相机、个人数字助理(PDA)和手持PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或可以执行以下所教导的功能和操作的任何其它系统。此外,本文描述的装置、方法和系统不限于物理计算设备,而是也可涉及用于节能和能效的软件优化。如在以下描述中将变得容易地显而易见的,本文(无论是否参考硬件、固件、软件或其组合)描述的方法、装置和系统的实施例对与性能考虑相权衡的“绿色技术”未来是至关重要的。
随着计算系统一直进步,其中的组件正变得更加复杂。结果,耦合组件并在组件之间通信的互连架构也在复杂度上一直增加,以保证带宽要求被满足用于最佳组件操作。此外,不同的市场区段需要不同方面的互连架构以适应市场需求。例如,服务器需要更高性能,而移动生态系统有时能够牺牲总体性能以省电。但是,大多数构造的唯一目的是在最大省电的情况下提供最高可能的性能。下面讨论多种互连,其将会潜在地受益于本文描述的发明的各方面。
一种互连构造架构包括快速外围组件互连(PCI)(PCIe)架构。PCIe的首要目标是要使来自不同供应商的组件和设备能够在开放的架构中相互操作,跨越多个市场区段;客户端(桌面和移动)、服务器(标准和企业)、以及嵌入式和通信设备。快速PCI是高性能、通用I/O互连,其被定义用于各种各样的未来计算和通信平台。一些PCI属性,诸如其使用模型、负载存储架构和软件接口,已通过其修订来维护,而先前的并行总线实现方式已被高度可缩放的、全串行接口所替代。快速PCI的较近版本利用点对点互连、基于交换机的技术、以及分组化协议中的进步,来传递新的性能水平和特征。功率管理、服务质量(QoS)、热插拔/热切换支持、数据完整性、以及错误处理在由快速PCI所支持的高级特征中的一些当中。
参考图1,图示出由互连了一组组件的点对点链路组成的构造的实施例。系统100包括耦合于控制器中枢115的处理器105和系统存储器110。处理器105包括任何处理元件,诸如微处理器、主处理器、嵌入处理器、协处理器或其它处理器。处理器105通过前侧总线(FSB)106耦合于控制器中枢115。在一个实施例中,FSB 106为如下所述的串行点对点互连。在另一实施例中,链路106包括串行的、差分互连架构,其顺从于不同的互连标准。
系统存储器110包括任何存储器设备,诸如随机存取存储器(RAM)、非易失性(NV)存储器、或可由系统100中的设备访问的其它存储器。系统存储器110通过存储器接口116耦合于控制器中枢115。存储器接口的示例包括双数据速率(DDR)存储器接口、双通道DDR存储器接口、和动态RAM(DRAM)存储器接口。
在一个实施例中,控制器中枢115是快速外围组件互连(PCIe或PCIE)互连层级中的根中枢、根联合体、或根控制器。控制器中枢115的示例包括芯片组、存储器控制器中枢(MCH)、北桥、互连控制器中枢(ICH)、南桥和根控制器/中枢。术语芯片组常常指代两个物理分离的控制器中枢,即,耦合于互连控制器中枢(ICH)的存储器控制器中枢(MCH)。注意,当前系统常常包括与处理器105相集成的MCH,而控制器115将与I/O设备以如下描述的类似方式进行通信。在一些实施例中,通过根联合体115可选地支持对等路由。
这里,控制器中枢115通过串行链路119耦合于开关/桥120。输入/输出模块117和121,其还可称为接口/端口117和121,包括/实现分层协议栈,以提供控制器中枢115和开关120之间的通信。在一个实施例中,多个设备能够耦合于开关120。
开关/桥120将分组/消息从设备125上游(即层级的上方)朝根联合体路由至控制器中枢115和下游(即远离根控制器的层级下方),从处理器105或系统存储器110路由至设备125。在一个实施例中,开关120称为多个虚拟PCI至PCI桥设备的逻辑组装件。设备125包括要被耦合于电子系统的任何内部或外部设备或组件,诸如I/O设备、网络接口控制器(NIC)、扩充卡、音频处理器、网络处理器、硬驱动器、存储设备、CD/DVD ROM、监视器、打印机、鼠标、键盘、路由器、便携式存储设备、火线设备、通用串行总线(USB)设备、扫描仪和其它输入/输出设备。通常在PCIe专门语中,诸如设备,被称为端点。尽管没有具体地示出,但设备125可包括PCIe至PCI/PCI-X的桥,以支持旧有或其它版本的PCI设备。PCIe中的端点设备常常被分类为旧有端点、PCIe端点、或集成有根联合体的端点。
图形加速器130也通过串行链路132耦合于控制器中枢115。在一个实施例中,图形加速器130耦合于MCH,该MCH耦合于ICH。开关120,以及相应地I/O设备125于是耦合于ICH。I/O模块131和118也将实现分层协议栈,以在图形加速器130和控制器中枢115之间通信。类似于上述的MCH讨论,图形控制器或图形加速器130本身可被集成于处理器105中。
转到图2,图示出分层协议栈的实施例。分层协议栈200包括任何形式的分层通信栈,诸如快速路径互连(QPI)栈、PCIe栈、下一代高性能计算互连栈或其它分层栈。尽管紧接在下面的参考图1-4的讨论与PCIe栈相关,但相同的构思可应用于其它互连栈。在一个实施例中,协议栈200是PCIe协议栈,其包括事务层205、链路层210和物理层220。诸如图1中的接口117、118、121、122、126和131之类的接口可被表示为通信协议栈200。作为通信协议栈的表示还可称为实现/包括协议栈的模块或接口。
快速PCI使用分组来在组件之间传送信息。分组可形成于事务层205和数据链路层210中,以将信息从传输组件输送至接收组件。随着所传输的分组流经其它层,它们被扩展有在那些层处理分组所必需的附加信息。在接收侧发生逆过程并且将分组从其物理层220表示变换为数据链路层210表示,并最终(针对事务层分组)变换为可由接收设备的事务层205处理的形式。
事务层
在一个实施例中,事务层205用于提供设备的处理核和互连架构(诸如数据链路层210和物理层220)之间的接口。在此方面,事务层205的主要职责是分组(即,事务层分组或TLP)的组装和拆分。事务层205通常管理用于TLP的基于信用的流控制。PCIe实现分割事务,即具有按时间划分的请求和响应的事务,从而允许链路携带其它通信量,同时目标设备收集用于响应的数据。
此外,PCIe利用基于信用的流控制。在该场景中,设备通告针对事务层205中的每个接收缓冲器的初始信用量。在链路的相对端处的外部设备,诸如图1中的控制器中枢115,对由每个TLP消耗的信用的数量进行计数。如果事务未超过信用限度,则事务可被传输。在接收到响应时,信用量被恢复。信用方案的优点在于,假如信用限度未被计数,则信用返回的等待时间不影响性能。
在一个实施例中,四个事务地址空间包括配置地址空间、存储器地址空间、输入/输出地址空间和消息地址空间。存储器空间事务包括读取请求和写入请求中的一个或多个,以传输数据至存储器映射位置或从存储器映射位置传输数据。在一个实施例中,存储器空间事务能够使用两个不同的地址格式,例如,短地址格式(诸如32位地址)或长地址格式(诸如64位地址)。配置空间事务用于访问PCIe设备的配置空间。对于配置空间的事务包括读取请求和写入请求。消息空间事务(或简单地,消息)被定义以支持PCIe代理之间的带内通信。
因此,在一个实施例中,事务层205组装分组报头/有效载荷206。当前分组报头/有效载荷的格式可以在PCIe规范网站处的PCIe规范中找到。
快速参考图3,图示出PCIe事务描述符的实施例。在一个实施例中,事务描述符300是用于承载事务信息的机制。在此方面,事务描述符300支持系统中事务的识别。其它潜在的用途包括跟踪默认事务排序的修改和事务与信道的关联。
事务描述符300包括全局标识符字段302、属性字段304和信道标识符字段306。在图示出的示例中,全局标识符字段302被描绘为包括本地事务标识符字段308和源标识符字段310。在一个实施例中,全局事务标识符302对于所有未完成请求是独有的。
根据一个实现方式,本地事务标识符字段308是由请求代理所生成的字段,并对于要求针对该请求代理的完成的所有未完成请求是独有的。此外,在该示例中,源标识符310在PCIe层级内独有地识别请求方代理。由此,连同源ID 310,本地事务标识符308字段提供了在层级域内的事务的全局识别。
属性字段304指定事务的特性和关系。在此方面,属性字段304潜在地被用于提供附加的信息,其允许对事务的默认处理的修改。在一个实施例中,属性字段304包括优先级字段312、保留字段314、排序字段316和无监听(no-snoop)字段318。这里,优先级子字段312可由启动器修改,以对事务分配优先级。保留属性字段314被保留用于将来使用或供应商定义的使用。使用优先级或安全属性的可能使用模型可使用保留属性字段来实现。
在该示例中,排序属性字段316用于提供可选的信息,其传递可修改默认排序规则的排序的类型。根据一个示例实现方式,排序属性“0”表示应用默认排序规则,其中排序属性“1”表示不严格的排序,其中写入可在同一方向上传递写入,并且读取完成可在同一方向上传递写入。监听属性字段318被用于确定事务是否被监听。如图所示,信道ID字段306识别事务与之相关联的信道。
链路层
链路层210(也称为数据链路层210)充当事务层205和物理层220之间的中间级。在一个实施例中,数据链路层210的职责是提供可靠机构以用于在链路上的两个组件之间交换事务层分组(TLP)。数据链路层210的一侧接受由事务层205组装的TLP,应用分组序列标识符211(即识别号或分组号),计算并应用错误检测代码(即CRC 212),以及将已修改TLP呈递至物理层220以用于跨越物理至外部设备的传输。
物理层
在一个实施例中,物理层220包括逻辑子块221和电气子块222,以将分组物理地传输至外部设备。这里,逻辑子块221负责物理层221的“数字”功能。在此方面,逻辑子块包括用以准备传出信息以便由物理子块222进行传输的传输区段,以及用以在将所接收的信息递送至链路层210之前对其进行识别和准备的接收器区段。
物理电气子块222包括发射器和接收器。发射器由逻辑子块221利用符号来提供,发射器串行化所述符号并将其传输至外部设备。接收器被提供有来自外部设备的串行化符号,并将接收到的信号变换成位流。该位流被去串行化并提供至逻辑子块221。在一个实施例中,采用了8b/10b传输代码,其中10位符号被传输/接收。这里,使用特殊符号来利用帧223来构建分组。此外,在一个示例中,接收器还提供从传入串行流恢复的符号时钟。
如上所述,尽管参考PCIe协议栈的具体实施例讨论了事务层205、链路层210和物理层220,但分层协议栈不限于此。实际上,可以包括/实现任何分层协议。作为示例,表示为分层协议的端口/接口包括:(1)用以组装分组的第一层,即事务层;用以排序分组的第二层,即链路层;以及用以传输分组的第三层,即物理层。作为具体示例,利用常见标准接口(CSI)分层协议。
接下来参考图4,图示出PCIe串行点对点构造的实施例。尽管图示出PCIe串行点对点链路的实施例,但是串行点对点链路不限于此,因为它包括用于传输串行数据的任何传输路径。在示出的实施例中,基础的PCIe链路包括两个低电压的差分驱动的信号对:传输对406/411和接收对412/407。由此,设备405包括传输逻辑406,其用以传输数据至设备410,以及接收逻辑407,其用以从设备410接收数据。换言之,在PCIe链路中包括两个传输路径,即路径416和417,以及两个接收路径,即路径418和419。
传输路径指代用于传输数据的任何路径,诸如传输线、铜线、光学线、无线通信信道、红外通信链路或其它通信路径。两个设备之间的连接,诸如设备405和设备410之间的连接,被称为链路,诸如链路415。链路可支持一个通道——每个通道表示一组差分信号对(一对用于传输,一对用于接收)。为了缩放带宽,链路可聚集多个通道,表示为xN,其中N为任何所支持的链路宽度,诸如1、2、4、8、12、16、20、24、32、64或更宽。
差分对指代两个传输路径,诸如线路416和417,以传输差分信号。作为示例,当线路416从低电压电平拨动(toggle)到高电压电平(即上升沿)时,线路417从高逻辑电平驱动至低逻辑电平(即下降沿)。差分信号潜在地表现出更好的电特性,诸如更好的信号完整性(即交叉耦合)、电压过冲/下冲、振铃等等。这允许更好的定时窗口,其能够实现更快的传输频率。
在一个实现方式中,如图5中所示,物理层505a、b可负责在物理介质(电的或光的,等等)上快速传输信息。物理链路可以是两个链路层实体(诸如层505a和505b)之间的点对点。链路层510a、b可从上层抽取物理层505a、b并提供能力来可靠地传输数据(以及请求)并管理两个直接连接的实体之间的流控制。链路层还可负责将物理信道虚拟化成多个虚拟信道和消息类。协议层520a、b依赖于链路层510a、b来在将协议消息处理至物理层505a、b以用于跨越物理链路进行传输之前将协议消息映射至合适的消息类和虚拟信道中。链路层510a、b可支持多个消息,诸如请求、监听、响应、写回、非一致数据,以及其它示例。
物理层505a、b(或PHY)可被实现在电气层(即,连接两个组件的电导体)之上和链路层510a、b之下,如图5中图示出的那样。物理层和对应逻辑可驻留于每个代理上并连接相互分离的两个代理或节点(A和B)上(例如在链路任一侧上的设备上)的链路层。本地电气层和远程电气层通过物理介质连接(例如导线、导体、光学等)。在一个实施例中,物理层505a、b具有两个主要阶段,初始化和操作。在初始化期间,连接对链路层不透明,并且信令可涉及定时状态和握手事件的组合。在操作期间,连接对链路层透明并且信令是在一定速度下,其中所有通道一起操作为单个链路。在操作阶段期间,物理层将微片535从代理A传输至代理B并从代理B传输至代理A。连接也称为链路,并从链路层抽取一些物理方面,包括介质、宽度和速度,同时与链路层交换微片和当前配置的控制/状态(例如宽度)。初始化阶段包括次要阶段,例如轮询、配置。操作阶段也包括次要阶段(例如链路功率管理状态)。
在一个实施例中,可实现链路层510a、b,以便在两个协议或路由实体之间提供可靠的数据传输。链路层可从协议层520a、b抽取物理层505a、b,并可负责两个协议代理(A、B)之间的流控制,并提供虚拟信道服务给协议层(消息类)和路由层(虚拟网络)。协议层520a、b和链路层510a、b之间的接口可通常处于分组级。在一个实施例中,在链路层处的最小传输单元称为微片(flit),其是指定数量的位,诸如192位或某其它额度。链路层510a、b依赖于物理层505a、b来将物理层的505a、b传输单元(物理微片540)构建为链路层的510a、b传输单元(微片)。此外,链路层510a、b可被逻辑上分为两个部分,即发送器和接收器。一个实体上的发送器/接收器对可被连接于另一实体上的接收器/发送器对。流控制通常以微片和分组两者为基础来执行。错误检测和校正也潜在地以微片级为基础来执行。
在一个实施例中,路由层515a、b可提供灵活和分布式的方法,以将事务从源路由至目的地。该方案是灵活的,因为用于多个拓扑结构的路由算法可通过在每个路由器处的可编程路由表来指定(在一个实施例中,编程由固件、软件或其组合来执行)。路由功能性可以是分布式的;路由可通过一系列路由步骤来完成,其中每个路由步骤通过对源、中间或目的地路由器中任一处的表的查找来定义。在源处的查找可被用于将分组注入至构造。在中间路由器处的查找可被用于将分组从输入端口路由至输出端口。在目的地端口处的查找可被用于将目的地协议代理作为目标。注意,在一些实现方式中,路由层可能较薄,因为路由表以及因此的路由算法并未按规范被具体定义。这允许灵活性和各种使用模型,包括要由系统实现方式来定义的灵活的平台架构的拓扑结构。路由层515a、b依赖于链路层510a、b,以便提供多达三个(或更多个)虚拟网络(VN)的使用——在一个示例中,两个免死锁VN,即VN0和VN1,具有在每个虚拟网络中定义的若干消息类。共享的自适应虚拟网络(VNA)可被定义于链路层中,但该自适应网络可能不直接暴露在路由概念中,因为每个消息类和虚拟网络可具有专用的资源和有保证的前向进展,以及其它特征和示例。
在一个实施例中,协议层520a、b可以提供一致性协议以支持从存储器缓存数据行的代理。希望缓存存储器数据的代理可以使用一致性协议来读取数据行以加载到其缓存中。希望在其缓存中修改数据行的代理可以在修改数据之前使用一致性协议获取行的所有权。在修改了行之后,代理可以遵循以下协议要求:将其保持在其缓存中,直到将行写回存储器或者将行包含在对外部请求的响应中。最后,代理可以满足外部请求以使其缓存中的行无效。协议通过规定所有缓存代理可遵循的规则来确保数据的一致性。它也为没有缓存的代理提供一致地读写存储器数据的手段。
现存互连和通信架构(包括PCIe)的物理层可被利用以在系统内提供共享存储器和I/O服务。在传统上,无法在使用传统的加载/存储(LD/ST)存储器语义的独立系统之间共享可缓存的存储器。独立系统或“节点”在以下意义上来说可以是独立的:它用作单个逻辑实体,由单个操作系统(和/或单个BIOS或虚拟机监视器(VMM))进行控制,和/或具有独立故障域。单个节点可以包括一个或多个处理器设备,可以在单个板或多个板上实现,并且可以包括本地存储器,所述本地存储器包括可以由同一节点上的设备使用LD/ST语义访问的可缓存存储器。在节点内,共享存储器可以包括可由节点内的若干不同处理器(例如,中央处理单元(CPU))访问的一个或多个存储器块(诸如随机存取存储器(RAM))。共享存储器也可以包括节点中的处理器或其它设备的本地存储器。具有共享存储器的节点内的多个设备可以共享共享存储器内的单个数据视图。涉及到共享存储器的I/O通信可以具有非常低的等待时间,并允许多个处理器对存储器的快速访问。
在传统上,在不同节点之间共享的存储器并未允许根据加载/存储范式的存储器共享。例如,在一些系统中,已经通过分布式存储器架构促进了不同节点之间的存储器共享。在传统的解决方案中,计算任务对本地数据进行操作,并且如果期望另一节点的数据,则(例如,由另一CPU节点执行的)计算任务(例如,通过利用诸如以太网、无限带宽或另一分层协议之类的通信协议栈的通信信道)与该另一节点通信。在传统的多节点系统中,不同节点的处理器不必知道数据驻留在哪里。使用传统方法(诸如通过协议栈)共享数据可以具有比使用加载/存储范式的节点内的存储器共享显著更高的等待时间。与对共享存储器中的数据进行直接寻址和操作相反,一个节点可以使用诸如以太网(或无限带宽)之类的现有协议握手来从另一节点请求数据,并且源节点可以提供数据,以使得可以由请求节点存储数据并对数据进行操作,以及其它示例。
在一些实现方式中,可以提供允许使用加载/存储(LD/ST)存储器语义在独立节点之间共享存储器以进行独占或共享访问的共享存储器架构。在一个示例中,存储器语义(和目录信息(如果适用的话))以及I/O语义(用于诸如PCIe之类的协议)可以在公共引脚组或单独的引脚组上导出。在这样的系统中,改进的共享存储器架构可以使系统中的多个节点中的每个节点维持其自己的独立故障域(和本地存储器),同时使得共享存储器池能够被节点访问并且使得低等待时间消息能够在使用根据LD/ST语义的存储器的节点之间传递。在一些实现方式中,这样的共享存储器池可以在不同节点之间动态地(或静态地)分配。因此,也可以将系统的各种节点配置到动态变化的节点组中,以例如在产生需要时在利用共享存储器基础设施的各种任务上协同且灵活地工作。
在一些实现方式中,共享存储器架构可以是基于缓冲存储器接口。缓冲存储器接口本身可以是基于通用输入/输出(GPIO)互连接口和协议。例如,GPIO互连的物理层和链路层定义也可以实现在缓冲存储器协议中。实际上,用于支持GPIO协议的物理层和链路层的逻辑可以在支持缓冲存储器协议的接口处重复使用。缓冲存储器协议也可以共享消息类,诸如请求、响应和写回消息类,以及其它示例。虽然缓冲存储器协议消息内的操作码值可以以不同于GPIO协议中的那样来解释,但是在缓冲存储器协议和它被构建于其上的GPIO互连中都可以利用相同的通用分组和微片格式。
在一个示例中,可以为在GPIO协议中的代理之间发送的微片定义微片格式。图6图示出用于8通道链路宽度的一般化微片的表示600。表示600的每一列可以象征链路通道,并且每行可以象征相应的UI。在一些实现方式中,单个微片可以被细分到两个或更多个槽中。每个槽中可以包含不同的消息或链路层报头,以允许在单个微片中发送与潜在不同的事务对应的多个不同的(并且在一些情况下独立的)消息。此外,除了其它示例之外,包括在单个微片的槽中的多个消息也可以去往不同的目的地节点。例如,图6的示例图示出具有三个槽的微片格式。阴影部分可以表示微片的被包括在相应槽中的部分。
在图6的示例中,提供三个槽,槽0、1和2。槽0可以被提供有72位的微片空间,其中22位专用于消息报头字段并且50位用于消息有效载荷空间。槽1可以被提供有70位的微片空间,其中20位专用于消息报头字段并且50位用于消息有效载荷空间。消息报头字段空间之间的差异可被优化成提供某些消息类型将被指定为包括在槽0中(例如,其中利用更多消息报头编码)。可以提供第三槽(槽2),其占用比槽0和1小得多的空间,在该情况中利用18位的微片空间。槽2可以被优化成处理那些不采用较大消息有效载荷的消息,诸如应答、信用返回等。此外,可以提供浮动的有效载荷字段,其允许替代地应用附加的11位来补充槽0或槽1的有效载荷字段。
继续图6的具体示例,其它字段对于微片可以是全局的,(即,跨微片应用而不是应用于特定槽)。例如,报头位可以与可用于指定诸如微片的虚拟网络之类的信息、识别微片要如何进行编码以及其它示例的4位微片控制字段一起被提供。此外,可以诸如通过16位循环CRC字段以及其它潜在示例来提供错误控制功能性。
可以定义微片格式以便优化链路层上的消息的吞吐量。一些传统协议已经使用了无槽的较小的微片。例如,在QPI中,使用了80位微片。虽然较大(例如,192位微片)的微片吞吐量可能较低,但可以通过优化微片数据的使用来增加消息或分组吞吐量。例如,一些协议中,无论消息大小或类型如何,都利用整个微片空间(例如,80位)。通过将较大的微片细分成预定长度和字段的槽,即使在有时不使用可用槽中的一个或多个的情况下,也可以优化192微片长度,从而实现更高的效率。实际上,可以假设链路层通信量包括许多不同类型的消息和通信量,包括具有变化的报头长度和字段的消息和分组。可以定义在微片中定义的槽的相应长度和组织,以便与各种消息的统计或预期频率以及这些消息的需求相对应。例如,可以为每个小槽定义两个较大的槽,以适应使用这些较大消息类型和报头长度的消息传递的预期统计频率以及其它示例。此外,还可以诸如通过浮动的有效载荷字段提供灵活性,以进一步适应变化的通信量,如图6的示例中那样。在一些实例中,微片格式可以是固定的(包括专用于微片中的特定槽的位)。
在图6的示例中,一般可以为微片提供“Hdr”字段,并且该字段表示微片的报头指示。在一些实例中,Hdr字段可以指示微片是报头微片还是数据微片。在数据微片中,微片仍然可以保持被分槽,但省略某些字段的使用或用有效载荷数据来替换某些字段的使用。在一些情况下,数据字段可以包括操作码和有效载荷数据。在报头微片的情况下,可以提供各种报头字段。在图6的示例中,可以为每个槽提供“Oc”字段,Oc字段表示操作码。类似地,一个或多个槽可以具有对应的“msg”字段,其表示要包括在槽中的对应分组的消息类型(在该槽被设计为处理这种分组类型等的情况下)。“DNID”字段可以表示目的地节点ID,“TID”字段可以表示事务或跟踪器ID,“RHTID”字段可以表示请求器节点ID或归属跟踪器ID,以及其它潜在字段。此外,一个或多个槽可以被提供有有效载荷字段。此外,除了其它示例之外,可以在微片中包括CRC字段以提供微片的CRC值。
GPIO协议的被分多个槽的微片可以由缓冲存储器协议重复使用。图7示出了简化框图700,其图示出包括通过GPIO互连链路互连的CPU设备705、710的计算系统的示例拓扑结构。每个CPU 705、710可以使用对应的缓冲存储器协议链路(“MemLink”)同样地连接到一个或多个相应的缓冲器设备715a-1。每个缓冲器设备可以实现用于系统的系统存储器的存储器控制器。如上所述,在一些实现方式中,缓冲存储器协议互连可以是基于GPIO协议,因为缓冲存储器协议的物理层和链路层是基于GPIO协议的相同物理和链路层定义。尽管图7中未示出,但是CPU 705、710可以进一步使用GPIO协议连接到一个或多个下游设备。
如图7的示例中进一步示出的,缓冲器设备715a-1可以连接到诸如双列直插存储器模块(DIMM)设备之类的存储器设备。对应于每个缓冲器设备的存储器可以被视为对该缓冲器设备连接到的CPU(例如,705、701)来说是本地的。然而,其它设备(包括其它CPU)可以使用顺从GPIO协议的链路通过其它插槽访问存储器。在一些实现方式中,运行缓冲存储器协议的端口可以仅支持用于与存储器通信的命令,并且仅支持缓冲存储器协议(即,并非GPIO协议和缓冲存储器协议)。另外,在一些实现方式中,GPIO互连协议可以支持路由并且指示诸如请求节点标识符和目的地节点标识符这样的信息(例如,在其分组中)。另一方面,缓冲存储器协议可以是不利用路由的点对点接口。因此,在使用缓冲存储器接口发送的分组中,GPIO协议中使用的一些字段可能会被省略。替代地,可以指定供将地址解码信息主机携带到缓冲器使用的字段,以及其它示例。
在其它实现方式中,缓冲器设备715a-1可以支持两级存储器拓扑结构,其中一定量的快速存储器(例如,DRAM)用作针对更大、更慢的存储器(例如,非易失性存储器)的缓存。在一个这样的实现方式中,除了其它示例之外,缓冲器设备715a-1中的一个或多个可以将DDR用作近的、快速存储器并且将事务DDR DIMM用作较大的“远”存储器。事务DIMM可以使用协议(例如,DDR-事务(DDR-T))来使用事务性命令向易失性存储器单列直插存储器模块(SIMM)通信。
缓冲存储器协议和利用缓冲存储器协议(诸如上面所示的那些)的系统可以被扩展以使得能够实现允许在独立节点之间共享存储器以用于使用加载/存储(LD/ST)存储器语义进行独占或共享访问的共享存储器架构。转到图8A,示出了图示出包括能够由多个独立节点810a-810n中的每一个使用加载/存储技术来访问的共享存储器805的示例系统的简化框图800a。例如,可以提供可以接受系统上各种节点810a-810n的加载/存储访问请求的共享存储器控制器815。共享存储器805可以利用同步动态随机存取存储器(SDRAM)、双列直插式存储器模块(DIMM)和其它非易失性存储器(或易失性存储器)来实现。
每个节点本身可以具有一个或多个CPU插槽,并且也可以包括与系统中的其它节点进行的LD/ST访问保持隔离的本地存储器。节点可以使用一个或多个协议(包括PCIe、QPI、以太网以及其它示例)来与系统上的其它设备(例如,共享存储器控制器815、联网控制器820、其它节点等)通信。在一些实现方式中,可以提供共享存储器链路(SML)协议,通过该SML协议可以支持低等待时间LD/ST存储器语义。例如,SML可以用于通信由系统的各种节点810a-810n(通过共享存储器控制器815)对共享存储器805的读取和写入。
在一个示例中,SML可以是基于存储器访问协议,诸如可扩缩存储器互连(SMI)第三代(SMI3)。可以替代地使用其它存储器访问协议,诸如事务性存储器访问协议(诸如全缓冲DIMM(FB-DIMM)、DDR事务(DDR-T)以及其它示例)。在其它实例中,SML可以是基于具有附加目录扩展的原生PCIe存储器读/写语义。SML的基于存储器协议的实现可以提供带宽效率优点,因为它被定制用于缓存行存储器访问。虽然存在诸如PCIe之类的高性能设备间通信协议,但这样的协议的上层(例如,事务层和链路层)可能引入等待时间,该等待时间使得供LD/ST存储器事务(包括涉及到共享存储器805的事务)使用的完整协议的应用降级。诸如SMI3之类的存储器协议可以允许提供较低等待时间访问的潜在附加优点,因为它可以绕过另一协议栈(诸如PCIe)的大部分。因此,SML的实现可以利用在另一协议的逻辑和物理PHY上运行的SMI3或另一存储器协议,诸如PCIe上的SMI3。
如上所述,在一些实现方式中,可以提供共享存储器控制器(SMC)815,其包括用于处理系统中的节点810a-810n的加载/存储请求的逻辑。SMC 815可以通过利用SML并将节点810a-810n连接到SMC 815的链路来接收加载/存储请求。在一些实现方式中,SMC 815可以被实现为包括用于针对共享存储器资源服务于节点810a-810n的访问请求的逻辑的设备,诸如专用集成电路(ASIC)之类。在其它实例中,SMC 815(以及共享存储器805)可以驻留在与节点810a-810n中的一个或多个(或甚至全部)节点分离的设备、芯片或板上。SMC 815还可以包括协调涉及到共享存储器805的各种节点的事务的逻辑。此外,SMC可以维护对共享存储器805中包括的各种数据资源(诸如每个缓存行)的目录跟踪访问。例如,数据资源可以处于共享访问状态(例如,能够同时由节点内的多个处理和/或I/O设备访问(例如,加载或读取))、独占访问状态(例如,如果不是临时的,由节点内的单个处理和/或I/O设备独占地保留(例如,用于存储或写入操作))、非缓存状态、以及其它潜在示例。此外,虽然每个节点可以能够直接访问共享存储器805的一个或多个部分,但是各种节点(例如,810a-810n)可以采用不同的寻址方案和值,导致了相同的共享存储器数据由第一节点根据第一地址值进行引用(例如,在第一指令中),并且第二节点通过第二地址值来引用相同的数据。SMC 815可以包括逻辑,其包括将节点的地址映射到共享存储器资源的数据结构,以允许SMC 815解释各种节点的各种访问请求。
此外,在一些情况下,共享存储器的一些部分(例如,某些分区、存储器块、记录、文件等)可受到某些许可、规则和分配的支配,以使得仅节点810a-810n中的一部分被(例如,SMC 815)允许访问对应的数据。实际上,每个共享存储器资源可以被分配给系统的节点810a-810n中的相应(并且在一些情况下,不同的)子集。这些分配可以是动态的,并且SMC815可以(例如,按需地、动态地等)修改这样的规则和许可以适应可应用于共享存储器805的给定部分的新的或改变的规则、许可、节点分配和所有权。
示例SMC 815还可以跟踪涉及到系统中的节点(例如,810a-810n)访问一个或多个共享存储器资源的各种事务。例如,SMC 815可跟踪每个共享存储器805事务的信息,包括事务中涉及到的(一个或多个)节点的标识、事务的进展(例如,是否已经完成)、以及其它事务信息。这可以准许将传统分布式存储器架构的面向事务的方面中的一些应用于本文所描述的改进的多节点共享存储器架构。此外,可以使用(例如,由SMC进行的)事务跟踪来辅助维护或施行每个相应节点的不同且独立的故障域。例如,SMC可以在其内部数据结构中(包括在存储器中)维护用于每个正在进行的事务的对应节点ID,并使用该信息来针对每个节点施行访问权限并维护单独的故障域。因此,当节点之一(例如,由于关键错误、触发的恢复序列、或其它故障或事件)而失灵时,只有该节点及其涉及到共享存储器805的事务被中断(例如,被SMC扔弃)——剩余节点的涉及到共享存储器805的事务独立于另一节点中的故障而继续进行。
系统可以包括多个节点。此外,一些示例系统可以包括多个SMC。在一些情况下,节点可以能够在其未直接附接到的远程SMC(即,节点的本地SMC通过一个或多个SML链路跳跃连接到远程SMC)之外地访问共享存储器。远程SMC可位于同一个板上,也可位于不同的板上。在一些情况下,一些节点可在系统外(例如,在板外或芯片外),但是仍然可访问共享存储器805。例如,除了其它示例之外,一个或多个系统外节点可以使用顺从SML的链路直接连接到SMC。此外,包括其自己的SMC和共享存储器的其它系统也可以与SMC 810连接,以将存储器805的共享扩展到(例如,与通过SML链路连接到SMC的另一SMC对接的另一个板上)包括的节点。此外,网络连接可以被隧穿以进一步扩展到其它板外或片外节点的访问。例如,SML可以隧道通过通信地耦合图8A的示例系统与也可包括一个或多个其它节点的另一系统的以太网连接(例如,通过网络控制器820提供)并且允许这些节点也获得对SMC 815以及因此的共享存储器805的访问,以及其它示例。
作为另一示例,如图8b的简化框图800b所示,准许由多个独立节点根据LD/ST存储器语义进行共享访问的改进的共享存储器架构可以灵活地允许提供各种不同的多节点系统设计。可以分配多个节点的各种组合以共享在示例系统中提供的一个或多个共享存储器块的各部分。例如,图8B的示例中所示的另一示例系统可以包括实现为例如分离的管芯、板、芯片等的多个设备850a-850d,每个设备包括一个或多个独立CPU节点(例如,810a-810h)。每个节点可以包括它自己的本地存储器。多个设备850a-850d中的一个或多个还可以包括可以由系统的节点810a-810h中的两个或更多个访问的共享存储器。
图8B图示出的系统是被提供以图示通过诸如本文所示和描述的改进的共享存储器架构可以实现的可变性中的一些的示例。例如,设备A 850a和设备C 850c中的每一个可以包括相应的共享存储器元件(例如,805a、805b)。因此,在一些实现方式中,不同设备上的每个共享存储器元件还可以包括相应的共享存储器控制器(SMC)815a、815b。节点810a-810h的各种组合可以通信地耦合到每个SMC(例如,815a、815b)以允许节点访问对应的共享存储器(例如,805a、805b)。作为示例,设备A 850a的SMC 815a可以使用支持SML的直接数据链路连接到设备A上的节点810a、810b。此外,另一设备(例如,设备C 850c)上的另一节点810c也可以借助于从节点810c(和/或其设备850c)到SMC 815a的(支持SML的)直接硬接线连接来访问共享存储器805a。间接地,基于网络的连接或其它这样的连接也可以用于允许远程或板外设备(例如,设备D 850d)的节点(例如,810f-810h)利用常规协议栈与SMC 815a对接,从而也可访问共享存储器805a。例如,可以通过以太网、无限带宽、或耦合设备A和设备D的其它连接来建立SML隧道855。虽然与在其它较少软件管理的物理连接上运行的SML相比建立和维护隧道可能引入一定的附加开销和等待时间,但SML隧道855当被建立时可以用作其它SML信道并且允许节点810f-810h通过SML与SMC 815a对接并访问共享存储器805a,如通过SML链路与SMC通信的任何其它节点能够的那样。例如,SML通道中的分组的可靠性和排序可以由系统中的联网组件来施行,或者它可以在SMC之间端到端地施行。
在仍另外的示例中,与托管共享存储器(例如,805a)的特定部分的设备不同的设备上的节点(例如,815d、815e)可以通过直接连接到另一SMC(例如,815b)而间接连接到对应的SMC(例如,SMC 815a),该另一SMC自身(例如,使用SML链路)耦合到所述对应的SMC(例如,815a)。链接两个或更多个SMC(例如,815a、815b)可以有效地扩充系统上的节点810a-810h可用的共享存储器的数量。例如,借助于图8b的示例中的SMC 815a、815b之间的链路,在一些实现方式中,能够通过SMC 815a访问共享存储器805a的节点(例如,810a-810c,810f-810h)中的任何节点也可潜在地借助于SMC 815a和SMC 815b之间的连接访问可共享的存储器805b。类似地,在一些实现方式中,直接访问SMC 815b的每个节点也可以借助于SMC 815a、815b之间的连接来访问可共享的存储器805a,以及其它潜在示例。
如上所述,独立节点可以各自访问共享存储器(包括未连接到该节点直接连接到的SMC的存储器中包括的共享存储器)。共享存储器被有效地池化(pool)。虽然传统的缓冲存储器协议可以采取点对点通信,但共享存储器的池化以及多个SMC对此存储器的联合管理可以涉及到与此存储器相关的分组和微片在它们到达它们意图的目的地之前横穿多个跳跃和SMC。在这方面,多个SMC可以形成SMC的网络,并且每个SMC可以包括用于确定如何将特定微片从其直接连接的节点路由到通过微片寻址的存储器所连接的SMC的逻辑。例如,在图8C中,示出了多个SMC 815a-c通过一个或多个SML链路与每个其它SMC互连的示例800c。每个SMC可以连接到系统中的处理器节点的子集。此外,每个SMC可以直接连接到构成共享存储器池的存储器元件的相应子集并提供对该相应子集的访问。作为示例,SMC 815a可以连接到节点810a、810b和共享存储器元件(例如,805a)。另一节点810i可以通过发送请求给SMC 815c(其可以将请求通过SML链路路由至SMC 815a)来访问存储在共享存储器部分805a中的存储器行。SMC 815a可以管理与请求有关的存储器动作,并且在一些情况下由通过将响应通过SML链路路由至SMC 815c而向节点810i提供读取数据、应答或其它信息来进行响应。作为在SMC 815a和815c之间直接路由SML通信的替代,在其它实例中,可以另外通过其它SMC(例如,815b)来路由通信。因此,共享存储器架构中的每个SMC可以包括以硬件和/或软件实现的路由逻辑以促进在网络内的SMC之间路由通信。
如上所述,改进的共享存储器架构可以包括基于诸如SMI3之类的存储器访问协议的低等待时间链路协议(即,SML),并且被提供以促进涉及到共享存储器的加载/存储请求。然而传统的SMI3和其它存储器访问协议可以被配置成供单个节点内的存储器共享使用,SML可以将存储器访问语义扩展到多个节点,以允许多个节点之间的存储器共享。此外,SML可以潜在地用于任何物理通信链路。SML可以利用支持LD/ST存储器语义的存储器访问协议,其覆盖在被适配成互连不同设备(和节点)的物理层(和对应的物理层逻辑)上。此外,SML的物理层逻辑可以提供无分组丢失和错误重试功能性以及其它特征。
在一些实现方式中,SML可以通过将SMI3覆盖在PCIe PHY上来实现。可以提供SML链路层(例如,代替传统的PCIe链路层)来抛弃流量控制和其它特征,并且促进如将在传统CPU存储器访问架构中典型的较低等待时间的存储器访问。在一个示例中,SML链路层逻辑可以在共享存储器事务和其它事务之间进行复用。例如,SML链路层逻辑可以在SMI3和PCIe事务之间进行复用。例如,SMI3(或另一存储器协议)可以覆盖在PCIe(或另一互连协议)的顶部,以使得链路可以在SMI3和PCIe事务之间动态切换。这在一些实例中可以允许传统的PCIe通信量在与SML通信量相同的链路上有效共存。
转到图9,示出了图示出SML的第一实现的表示900。例如,SML可以通过将SMI3覆盖在PCIe PHY上来实现。物理层可以使用标准PCIe 128b/130b编码来用于所有物理层活动(包括链路训练)以及PCIe数据块。SML可以提供链路的通道(例如,通道0-通道7)上的通信量在PCIe分组和SMI3微片之间复用。例如,在图9所示的实现中,可以修改PCIe 128b/130b编码的同步报头,并使用它来指示要在链路的通道而不是PCIe分组上发送SMI3微片。在传统的PCIe 128b/130b编码中,有效的同步报头(例如,910)可以包括10b模式在链路的所有通道上的发送(指示该块的有效载荷类型应为PCIe数据块)或01b模式在链路的所有通道上的发送(指示块的有效载荷类型应为PCIe有序集块)。在SML的一个示例中,可以定义替代的同步报头,以将SMI3微片通信量与PCIe数据块和有序集相区分。在图9中图示出的一个示例中,PCIe 128b/130b同步报头(例如,905a、905b)可以在奇数/偶数通道上编码有交替的01b、10b模式以标识要发送SMI3微片。在另一替代实现方式中,用于SMI3通信量的128b/130b同步报头编码可以通过在奇数/偶数通道上交替10b、01b模式以及其它示例编码来定义。在一些情况下,可以在每个字节的基础上,在SMI3同步报头之后立即传输SMI3微片,其中PCIe和SMI3协议之间的转换发生在块边界处。
在一些实现方式中,诸如图9的示例中所示的那些实现方式,协议之间的转换可以被定义为在块边界处发生,而不管它是否对应于SMI3微片或PCIe分组边界。例如,可以将块定义为包括预定义量的数据(例如,16个符号、128个字节等)。在这种实现方式中,当块边界不对应于SMI3微片或PCIe分组边界时,整个SMI3微片的传输可被中断。可以在由针对SMI3编码的另一同步报头的发送指示的下一SMI3块中恢复中断的SMI3微片。
转到图10A,示出了图示出SML的另一示例实现的表示1000。在图10A的示例中,可以使用物理层框架化令牌,而不是使用专门的同步报头编码来发信号通知存储器访问和互连协议通信量之间的转换。框架化令牌(或“令牌”)可以是物理层数据封装,其指定或暗示要包括在与令牌相关联的数据流中的符号数量。因此,框架化令牌可以标识流正在开始,并且暗示它将在哪里结束,因此可以用于也标识下一个框架化令牌的位置。数据流的框架化令牌可以位于数据流的第一数据块的第一通道(例如,通道0)的第一符号(符号0)中。在PCI的示例中,可以定义五个框架化令牌,包括TLP通信量开始(STP)令牌、数据流结束(EDS)令牌、结束坏(EDB)令牌、DLLP开始(SDP)令牌和逻辑空闲(IDL)令牌。
在图10A的示例中,可以通过在PCIe上覆盖(或“隧道化”)SMI3或另一数据访问协议来实现SML,并且可以修改标准PCIe STP令牌以定义标识SMI3(而不是TLP通信量)要在链路的通道上启动的新STP令牌。在一些示例中,可以修改标准PCIe STP令牌的保留位的值,以定义SML中的SMI3 STP令牌。此外,如图10B所示,STP令牌1005可以包括若干字段,包括1010字段,其标识所要跟随的是SMI3有效载荷的长度(按照微片的数量)。在一些实现方式中,可以为TLP数据定义一个或多个标准有效载荷长度。在一些实现方式中,SMI3数据可以被定义为包括固定数量的微片,或者在其它情况下可以具有可变数量的微片(在此情况下,用于SMI3微片的数量的长度字段变成可被忽略的字段)。此外,SMI3 STP的长度字段可以被定义为不同于所定义的TLP有效载荷长度中的一个的长度。因此,作为一个示例,可以基于存在于STP长度字段中的非TLP长度值来标识SMI3 STP。例如,在一个实现方式中,11位STP长度字段中的高3位可以被设置为111b以指示SMI3分组(例如,基于没有顺从规范的PCIeTLP可以足够长到具有长度字段的高3位将为l的长度的假设)。其它实现可以更改或编码STP令牌的其它字段,以将标识传统PCIe TLP数据有效载荷的PCIe STP令牌与标识SMI3数据被封装在TLP数据中的SMI3 STP令牌区分开来。
回到图10A的示例,同步报头数据可以遵循针对传统PCIe 128b/130b编码指定的编码。例如,在1015a-c处,接收到值为10b的同步报头,其指示数据块即将到来。当接收到PCIe STP(例如,1020)时,PCIe TLP有效载荷被预期,并相应地处理数据流。与PCIe STP1020中标识的有效载荷长度一致地,PCIe TLP有效载荷可以利用所分配的全部有效载荷长度。跟随在TLP有效载荷结束之后,基本上可以在数据块内的任何时间接收另一STP令牌。例如,在1025处,可以接收到发信号通知从PCIe TLP数据到SMI3微片数据的转换的SMI3 STP。例如,一旦识别出PCIe分组数据的结束,就可以发送SMI3 STP。
继续图10A的示例,与PCIe TLP数据一样,SMI3 STP 1025可以定义所要跟随的SMI3微片有效载荷的长度。例如,SMI3数据的有效载荷长度可以对应于按照所要跟随的DW的SMI3的数量。由此,可以在通道上定义与有效载荷长度相对应的窗口(例如,在通道3的符号15处结束),其中在窗口期间仅要发送SMI3数据。当窗口完结时,可以发送其它数据,诸如另一PCIe STP以重新启动TLP数据或其它数据(诸如有序集数据)的发送。例如,如图10A的示例所示,跟随在由SMI3 STP令牌1025定义的SMI3数据窗口的结束之后发送EDS令牌。EDS令牌可以发信号通知数据流的结束,并且暗示将要跟随着有序集块,如图10A的示例中的情况。发送编码有01b的同步报头1040以指示要发送有序集块。在这种情况下,发送PCIe SKP有序集。可以周期性地或根据设置的间隔或窗口来发送这样的有序集,以使得可以执行各种PHY级任务和协调,这包括初始化位对齐、初始化符号对齐、交换PHY参数、补偿两个通信端口的不同位率、以及其它示例。在一些情况下,可以发送强制执行的有序集,以中断由对应的SMI3 STP令牌为SMI3微片数据指定的数据块或所定义的窗口。
虽然在图10A的示例中未明确示出,但STP令牌也可以用于从链路上的SMI3微片数据到PCIe TLP数据的转换。例如,跟随在定义的SMI3窗口的结束之后,可以发送PCIe STP令牌(例如,类似于令牌1020)以指示下一个窗口用于发送指定量的PCIe TLP数据。
在一些实施例中,存储器访问微片(例如,SMI3微片)可以在大小上变化,这使得难以事先预测在对应的STP令牌(例如,SMI3 STP令牌)中要保留多少数据用于存储器访问有效载荷。作为示例,如图10所示,SMI3 STP 1025可以具有指示跟随在SMI3 STP 1025之后要预期244个字节的SMI3数据的长度字段。然而,在此示例中,在窗口期间仅准备发送10个微片(例如,SMI3 微片0-9),并且这10个SMI3微片仅利用244个字节中的240个字节。因此,剩下四(4)个字节的空带宽,并且这些字节被填充有IDL令牌。当PCIe TLP数据排队并等待SMI3窗口关闭时,这会是特别次优的。在其它情况下,为发送SMI3微片而提供的窗口可能不足以发送准备好用于通道的SMI3数据的量。可以采用仲裁技术来确定如何在链路上共存的SMI3和PCIe TLP数据之间进行仲裁。此外,在一些实现方式中,可以动态地修改SMI3窗口的长度以帮助更有效地使用链路。例如,仲裁或其它逻辑可以监视所定义的SMI3窗口被利用的良好程度以确定所定义的窗口长度是否可以被更好地优化为针对该通道所预期的SMI3(以及竞争的PCIe TLP通信量)的量。因此,在这样的实现中,可以取决于SMI3微片数据应被分配的链路带宽的量(例如,相对于其它PCIe数据(包括TLP、DLLP和有序集数据))以及其它示例来动态地(例如,在不同的值之间)调整SMI3 STP令牌的长度字段值。
转到图11,图示出SML的另一示例实现方式的表示1100。在此替代实施例中,SML可以通过修改的PCIe框架化令牌提供交织的SMI3和PCIe协议。如上所述,可以在PCIe中使用EDS令牌来指示数据流的结束,并指示下一个块将是有序集块。在图11的示例中,SML可以定义指示TLP数据流的结束以及到SMI3微片传输的转换的SMI3 EDS令牌(例如,1105)。可以通过对传统EDS令牌的保留位的一部分进行编码来定义SMI3 EDS(例如,1105),以指示在PCIeEDS之后将跟随SMI3数据而不是将跟随PCIe有序集或其它数据。与传统EDS令牌不同,SMI3EDS可以在PCIe数据块内的基本上任何地方发送。这可以准许发送SMI3数据和适应对应的低等待时间共享存储器事务的附加的灵活性。例如,从PCIe到SMI3的转换可以用单个双字(DW)的开销来实现。此外,与传统EDS令牌一样,示例SMI3 EDS可以不指定与要跟随令牌之后的SMI3数据相关联的长度。在SMI3 EDS之后,PCIe TLP数据可以结束,并且SMI3微片在链路上行进。SMI3通信量可以行进,直到SMI3逻辑将控制传回给PCIe逻辑。在一些实现方式中,SMI3 EDS的发送导致控制从PCIe逻辑传递到例如在链路上连接的设备上提供的SMI3逻辑。
在一个示例中,SMI3(或另一协议)可以定义其自己的链路控制信令以供执行链路层控制使用。例如,在一个实现方式中,SML可以定义指示从SMI3转换回PCIe协议的SMI3链路层控制(LLCTRL)微片(例如,1110)的专门版本。与SMI3 EDS一样,所定义的LLCTRL微片(例如,1110)可以导致控制从SMI3逻辑传回到PCIe逻辑。在一些情况下,如图11的示例所示,在完成到PCIe的转换之前,可以用预定义数量的LLCTRL空闲(LLCTRL-IDLE)微片(例如,1115)来填装所定义的LLCTRL微片(例如,1110)。例如,要发送以填装SMI3 LLCTRL微片1110的LLCTRL-IDLE微片1115的数量可以取决于用来对所定义的发信号通知转换的SMI3LLCTRL微片1110进行解码的等待时间。在完成转换回PCIe后,可以发送STP分组,并且可以在PCIe的控制下重新启动链路上的TLP分组数据。
如结合图8A-8C的示例所述的那样,共享缓冲存储器架构中的共享存储器控制器可以包括以硬件和/或软件实现的路由逻辑,以通过SMC之间的SML链路路由通信,来促进涉及到节点和共享存储器的数据事务。为了促进微片在SMC网络之中的路由,可以在SML微片中提供附加字段,以帮助将请求和对那些请求的响应路由到它们适当的目的地。表1描述了可以被提供在微片中以适应多SMC共享存储器架构中的路由的示例字段。
表1:SML 微片的替代字段
PLM分组字段增量(δ) | 描述 |
源SMC链路ID[8:0] | 编码针对请求的源SMC和内部SMC代理 |
地址[59:52] | 全局系统地址的高位 |
槽2模式位 | 当被设置时,指示所定义的多槽微片格式中的特定槽已经改变意图为载送高地址位中的一些。当被清除时,该特定槽根据缓冲存储器链路协议载送信息。 |
所请求的替代路由(ARR) | 指定请求应当采取替代路由通过构造至其目的地 |
如表1所介绍的,在一些实现方式中,微片可以被提供有用于指示给定事务的源(以及在一些情况下,还有目的地)节点标识符的字段。链路ID字段可以编码有标识对应SMC的身份的位,以及用于标识SMC在其上发送/接收请求的特定链路(或SMC代理)的一些附加位。SMC标识符可以是系统内的独有值。在链路ID值是基于SMC的ID和特定链路的ID的联结、组合、或其它方式的实例中,可以预期到链路ID字段的值在系统内是全局独有的。在以下实现方式中,可以提供类似的字段来指示请求的目的地SMC(尽管在其它实现方式中,目的地SMC可以可从作为事务主体的存储器地址来标识)。此外,特定SMC针对诸如存储器迁移,与可靠性、可访问性、可服务性(RAS)相关的存储器读/写/清除等事件内部生成的事务可以具有一个或多个独有的“链路号”,即使它们未驻存于外部链路之外。链路ID字段可以由接收SMC处理并解释,以确定要如何将微片本地地(在直接连接的节点和SMC之间)或者通过一个或多个附加的SMC和一个或多个SML“跳跃”来路由到其目的地/从其目的地路由。
通过将由多个不同SMC管理的多个存储器元件的存储器池化,地址空间的大小可以显著地大于节点和单个对应的存储器控制器之间的点对点事务会预期的大小。对于池化的存储器架构,可以使得更大的地址空间可用以支持(例如,在机架或服务器塔中的)所有节点的需求,这将是针对池中每个节点的存储器的合计量。在一些情况下,每个节点的私有存储器可能居于直接附接的SMC外,这不是一个要求,并且节点的专用存储器以及共享存储器的部分可位于远程SMC外。在一些实现方式中,可以重复使用和扩增现有协议的微片格式以支持共享存储器基础设施。实际上,系统可以针对点对点缓冲存储器链路和共享存储器链路利用相同的基础微片格式。
在一个示例中,为了容纳共享存储器架构中涉及的较大的地址空间,可以提供超过并高于在为GPIO和/或标准缓冲存储器访问事务提供的定义的微片报头格式中提供的位的附加位。例如,多槽微片的槽可用于对附加地址位进行编码,并扩展由微片格式支持的存储器地址方案(即,在SML事务中)。例如,图12图示出示出了示例高性能GPIO互连协议的微片报头格式(诸如,结合图6图示出和描述的示例格式)的扩增版本的表示1200。对于标准缓冲存储器链路接口,槽0和1的有效载荷可以用于编码在事务中要访问的存储器中的行的地址(例如,64字节的缓存行地址)。在一个实现方式中,附加地址位可以作为池化的存储器空间的附加位或高地址位被编码在槽2的位中(即,在UI 6、7和8中)。这可以将地址空间扩展八位。
继续图12的示例,图6中介绍的GPIO协议的三槽微片格式可以被扩增为具有共享存储器架构的事务所特定的字段(包括用于帮助此架构中的多个SMC之间的路由的字段)。在一些实现方式中,扩展的存储器地址的高地址位也可以用于代替“源链路ID”字段的SMC号,诸如在存在扁平系统地址空间时,在高物理地址位表示SMC号时,以及其它示例。
作为附加示例,可以扩增GPIO协议或缓冲存储器链路协议的微片格式以容纳附加位来可选地指示在源-目的地对之间存在多个路径的情况下要采取的(一个或多个)替代路由。例如,在图12的示例中,在GPIO协议的报头微片格式中提供的保留字段或浮动的字段可以针对(在槽0和1中的)两个事务中的每一个编码有ARR值,来指示要在共享存储器架构的SMC之间采取的特定路径。例如,ARR值可用于在系统内提供高可用性。例如,SMC或其连接的节点可以检测事务的超时状况。这可以提示使用可用的替代路径在SMC和目的地SMC之间路由事务来进行重试(例如,在使用原始路由路径的一次或多次失败的重试之后)。为了促进这一点,SMC可以将事务的ARR字段的位编码有指示替代路径的值。这可以允许沿着(一个或多个)替代路径重试事务以从错误中恢复,而不会将错误升级为不可恢复(诸如,超时或中毒)。
如上所述,SML协议的微片可以基于具有由另一互连协议(例如,系统中使用的另一协议)定义的基本格式的微片或作为所述微片的扩增版本。在一些实例中,可以选择对基本格式的修改:在一些情况下可以保留(另一个协议的)原始的基本的微片/分组布局,并且扩增的版本可以应用于其它。例如,微片可以利用一个或多个位来指示微片是根据基本的微片格式还是修改的微片格式。接收SMC(或节点)可以解码微片,以确定哪种格式被应用于微片。在一个示例中,诸如图12所示,可以提供位以指示基本微片格式的槽2是否被改变用途以提供扩展的存储器地址位和/或源节点ID位,以及其它示例。在一个示例中,在仅要使用单个虚拟网络(例如,VN0)的情况下,该位可以占用定义的虚拟网络位。实际上,用于指示要如何使用槽2的位本身可以表示对基本微片格式的修改,以及其它示例。在一个示例中,可以重复使用模式位(例如,在图12的示例的行UI0中),以指定槽2要用于扩展地址或者是基本微片格式,以及其它示例。
如上所述,在一些实现方式中,可以提供指示源SMC和目的SMC的标识符两者的微片格式。在一些替代实施例中,可以仅提供源SMC标识符(或“节点ID”),并且可以从提供以指示事务中涉及的对应的存储器的行的地址位中隐含地标识出目的地SMC。换句话说,SMC可以确定微片的地址字段中引用的特定存储器行对应于通过共享存储器架构中的多个SMC中的特定SMC访问的存储器。例如,可以在每个SMC处维护记录,该记录标示哪些地址对应于直接连接到哪个SMC的哪些存储器元件。在其它实现方式中,高阶地址位(例如,在微片地址字段的扩展中添加的位)可以对应于共享存储器架构内的特定SMC。因此,(连接到目标存储器地址的)目的地SMC可以由另一SMC从微片的扩展的存储器地址字段中识别出来。微片可以由请求微片到其目的地的路由的每个“跳跃”处的每个SMC进行解码。因此,每个SMC可以从地址位中识别目的地SMC,并且确定允许请求朝向目的地SMC前进的下一跳跃。
采用多个不同的SMC(每个SMC管理池化的和/或共享的系统存储器的子集)的共享存储器架构中的处理器节点可能不知道用于从其直接连接的(或“本地”)SMC访问请求的存储器行的架构。例如,处理器节点可看不到其本地SMC,该本地SMC确定另一SMC管理所请求的存储器部分并转发节点的请求以由另一SMC进行处理。所有节点都看到它向本地SMC发送请求并收到对应的响应。节点也可能不知道所请求的存储器行在池化的存储器中的事实。因此,在一些情况下,节点可以发送与涉及特定存储器行的请求对应的微片,并且根据单节点缓冲存储器链路协议发送微片(例如,没有被提供用于SMC之间遵循的共享存储器链路协议的扩增字段)。在此类实例中,在本地SMC的入口端口处,可以在SMC内将微片(或分组)发送出去之前将附加的增强字段(诸如表1或图12的示例中所示的字段)附接到微片(或分组)。在(例如,到处理器节点的)出口处,这些增强字段可以被剥离。
在一些情况下,鉴于涉及共享存储器架构中的SMC之间的多个跳跃可对处理器节点隐藏的潜在复杂性,处理器节点可未被配备有正确地跟踪它们的事务。因此,本地SMC可以代表其相应的(一个或多个)处理器节点跟踪事务。节点的本地SMC可以保存包括在请求的原始微片中的所有路由相关字段(例如,根据节点的缓冲存储器链路协议(可与SML协议不同)格式化的微片中所包括的字段)。随着SMC然后可以负责潜在的大量事务,可以分配SMC本身的存储器以适应对事务信息的跟踪。在一些实例中,SMC可以通过将原始请求的字段分配或转换为比具有原始位更少的位的值来优化针对每个事务所跟踪的位数。例如,SMC可以在SMC级别分配一RHTID字段值,其具有假定比原来的位更少的位。事务信息可以被存储在具有CAM查找能力的片上(即,SMC上)存储中以检索出口处的原始位。片上存储器可以被补充以本地存储器(例如,由SMC管理的缓冲存储器)(或者替代地被本地存储器替换)以作为片上存储器可用的之上和之外的存储,以及其它示例。
应当理解,本文所述的实现方式被提供为示例以例证在本说明书中公开的某些原理和特征。应当理解,替代的配置、协议和架构(不同于在示例中具体讨论的那些)可以利用和应用这样的原理和特征。作为一个替代方案的示例,可以使用增强有目录信息的PCIe存储器读/写(例如,而不是SMI3协议)。目录信息可以通过PCIe分组的保留位来实现。在另一示例中,CPU节点可以利用缓存控制器(例如,作为共享存储器控制器的替代)在PCIe链路上发送存储器读/写事务,例如,基于远程地址范围检查以及其它潜在示例和替代。
转到图13A-13B,示出了流程图1300a-b,其图示出了使用共享存储器链路互连进行通信的示例技术。例如,在图13A中,可以在多个共享存储器控制器(SMC)中的一个SMC处(例如,通过SML链路)从处理器节点接收1305加载/存储存储器访问消息,该消息请求共享存储器的特定地址的数据。消息可以体现在一个或多个微片(包括用于标识特定地址的报头微片)中。共享存储器控制器可以从特定地址(或标识SMC中的特定一个的目的地节点标识符)中确定1310消息(或“请求”)要由特定SMC处理,因为特定SMC管理系统中的共享存储器元件中托管该特定地址的特定共享存储器元件。在一些情况下,直接连接到处理器节点的SMC是特定SMC。在其它情况下,该特定SMC是多个SMC中的另一个。SMC可以确定是它还是另一个SMC要来处理该请求(例如,在1315处)。在SMC确定另一个SMC是用于处理请求的特定SMC的情况下,SMC可以确定1320要如何将请求路由到特定SMC。在一些情况下,这可涉及将请求发送到多个SMC中的中间SMC。在其它情况下,SMC可以确定路由涉及将请求直接(例如,通过单个SML链路)发送到特定的其它SMC。SMC然后将请求(例如,通过SML链路)发送1325到另一个SMC(特定SMC或中间SMC)。在一些实现方式中,处理器节点在其请求中使用的微片的格式可以由SMC扩增,以促进微片在SMC网络内的路由。例如,SMC可以利用多个槽中的一个来扩展由处理器节点指示的地址,添加源节点标识符或目的地节点标识符以指示事务中的源SMC或目的地SMC,对位进行编码以指示特定微片槽正被用于这些目的,以及其它修改。
一旦特定SMC访问对应于特定地址的共享存储器的特定行,特定SMC就可以将响应发送回连接到特定节点的SMC。响应可以包括用于帮助将响应路由回源SMC(例如,源节点ID)的增强字段(诸如,包括在请求微片中的那些)。在沿SMC网络内的相同或不同路径路由返回之后,连接到特定节点的SMC可以接收1330由特定SMC生成的响应,并且可以向处理器节点提供1335响应。在SMC之间使用的微片格式表示由处理器节点消费的微片扩增版本的情况下,SMC可以在将响应提供1335给处理器节点之前从响应微片中剥离“额外的”或增强字段。对于处理器节点,响应可显现为是完全由其连接到的SMC处理的。换句话说,节点可不知道存储器行由另一个SMC管理并且请求被路由通过共享存储器架构中的SMC网络中的一个或多个其它SMC的事实。
在SMC确定(例如,在1315处)它管理托管所请求的存储器行的存储器元件的情况下,SMC可以从存储器元件访问1340特定的存储器行,生成响应1345,并提供1335响应到处理器节点。
在图13B的示例中,SMC可以从与微片在源SMC和目的SMC之间的路由关联的另一个SMC接收1350微片。源SMC连接到负责生成涉及特定地址处的共享存储器的特定行的存储器(例如,加载/存储)请求的处理器节点。目的地SMC连接到托管共享存储器的特定行的存储器元件。目的地SMC在访问共享存储器的特定行时生成对该请求的响应。微片可以包括字段,诸如扩展地址字段、用于标识源SMC的源节点ID、用于标识目的地SMC的目的地节点ID、用于指示SMC网络中的多个可用路由路径中的特定路由路径的替代路由路径字段、以及其它字段。这些字段可以被包括在请求微片和响应微片中。此外,可以添加这些字段以扩增基本微片格式,诸如根据单个节点缓冲存储器访问协议、GPIO协议、或另一协议定义的微片格式。路由路径中的每个SMC都可以解码1355微片,以确定1360路由中的下一跳跃。例如,在微片表示请求的情况下,可以解码微片以识别特定存储器行的扩展地址。SMC可以从扩展地址中确定目的地SMC,并确定要如何(例如,直接地或通过哪个中间SMC)将请求转发到目的地SMC。在其它实例中,SMC可以替代地(或附加地)咨询微片的目的地节点ID字段。在微片体现(由目的地SMC生成的)对请求的响应的至少一部分的情况下,SMC可以解码1355微片,以识别与源SMC相对应的源节点ID,并确定对应路由路径中的下一个步骤以将响应微片路由到源SMC以递送到发起事务的处理器节点。在一些情况下,此返回路由路径可以是用于将请求从源SMC发送到目的SMC的相同(但是反向)的路径。在其它情况下,可以使用替代路径将响应从源SMC发送到目标SMC。
应当注意,虽然上述原理和示例中的许多是在PCIe和PCIe规范的特定修订的上下文内进行描述的,但是本文所描述的原理、解决方案和特征可以同样适用于其它协议和系统。例如,可以通过使用基于类似的符号、数据流和令牌以及针对通过其它链路传输的数据内的此类结构的使用、安置和格式化所指定的规则的其它协议,可以在这些其它链路中检测到类似的通道错误。此外,替代的机制和结构(例如,除了PCIe LES寄存器或SKP OS之外)可用于在系统内提供通道错误检测和报告功能。此外,上述解决方案的组合可以应用于系统内,包括对链路的逻辑和物理增强与如本文所述的其对应逻辑的组合,以及其它示例。
注意,上述装置、方法、和系统可以在前述的任何电子设备或系统中实现。作为具体例证,下面的附图提供了用于利用本文所述的本发明的示例性系统。随着下面的系统被更详细地描述,根据上面的讨论的许多不同互连被公开、描述和重访。并且如容易地显而易见的是,上述进步可以应用于这些互连、构造或架构中的任何。
参考图14,描绘了包括多核处理器的计算系统的框图的实施例。处理器1400包括任何处理器或处理设备,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持处理器、应用处理器、协处理器、片上系统(SOC)或用以执行代码的其它设备。在一个实施例中,处理器1400包括至少两个核——核1401和核1402,它们可包括不对称核或对称核(所图示的实施例)。然而,处理器1400可包括任何数量的处理元件,它们可以是对称的或不对称的。
在一个实施例中,处理元件指的是支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、核和/或任何其它元件,其能够保存处理器的状态,诸如执行状态或架构状态。换言之,处理元件在一个实施例中指的是能够与代码(诸如软件线程、操作系统、应用或其它代码)独立关联的任何硬件。物理处理器(或处理器插槽)通常指的是集成电路,其潜在地包括任何数量的其它处理元件,诸如核或硬件线程。
核经常指的是位于集成电路上能够维持独立架构状态的逻辑,其中每个独立维持的架构状态都与至少一些专用执行资源关联。与核相比,硬件线程通常指的是位于集成电路上能够维持独立架构状态的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如可看到的,当某些资源被共享并且其它资源专用于架构状态时,核与硬件线程的命名之间的线路交叠。不过,核和硬件线程被操作系统视为单独逻辑处理器,其中操作系统能够在每个逻辑处理器上单独调度操作。
如图14所图示的物理处理器1400包括两个核——核1401和1402。在此,核1401和1402被视为对称核,即,具有相同配置、功能单元和/或逻辑的核。在另一实施例中,核1401包括无序处理器核,而核1402包括有序处理器核。然而,核1401和1402可单独选自任何类型核,诸如原生核、软件管理核、适合于执行原生指令集架构(ISA)的核、适合于执行转换的指令集架构(ISA)的核、协同设计的核或其它已知核。在异构核环境(即不对称核)中,可利用某个形式的转换,诸如二进制转换,在一个核或两个核上调度或执行代码。然而为了推进论述,下面更详细描述在核1401中图示的功能单元,因为核1402中的单元在描绘的实施例中以类似方式操作。
如所描绘的,核1401包括两个硬件线程1401a和1401b,它们可被称为硬件线程槽1401a和1401b。因此,软件实体(诸如操作系统)在一个实施例中潜在地将处理器1400视为四个单独处理器,即,能够同时执行四个软件线程的四个逻辑处理器或处理元件。如上面所提及的,第一线程与架构状态寄存器1401a关联,第二线程与架构状态寄存器1401b关联,第三线程与架构状态寄存器1402a关联,并且第四线程与架构状态寄存器1402b关联。在此,每一个架构状态寄存器(1401a、1401b、1402a和1402b)可被称为处理元件、线程槽或线程单元,如上面所描述的。如所图示的,在架构状态寄存器1401b中复制架构状态寄存器1401a,因此各个架构状态/上下文能够被存储用于逻辑处理器1401a和逻辑处理器1401b。在核1401中,对于线程1401a和1401b,也可复制其它较小资源,诸如分配器和重命名块1430中的重命名逻辑和指令指针。可通过分区共享一些资源,诸如重新排序器/引退单元1435中的重新排序缓冲器、ITLB 1420、加载/存储缓冲器和队列。其它资源,诸如通用内部寄存器、页表基础寄存器、低级数据缓存和数据TLB 1415、执行单元1440和部分无序单元1435,潜在地完全共享。
处理器1400经常包括其它资源,它们可被完全共享、通过分区共享或者由处理元件专用/专用于处理元件。在图14中,图示了具有处理器的例证性逻辑单元/资源的纯示例示例性处理器的实施例。要指出,处理器可包括或省略这些功能单元中的任何单元,以及包括未描绘的任何其它已知功能单元、逻辑或固件。如所图示的,核1401包括简化的代表性无序(OOO)处理器核。但是在不同实施例中可利用有序处理器。OOO核包括用于预测要执行/采取的分支的分支目标缓冲器1420以及用于存储用于指令的地址转换条目的指令转换缓冲器(I-TLB)1420。
核1401进一步包括耦合到提取单元1420以解码所提取的元素的解码模块1425。提取逻辑在一个实施例中包括分别与线程槽1401a、1401b关联的各个定序器。通常,核1401与第一ISA关联,第一ISA定义/规定在处理器1400上可执行的指令。是第一ISA一部分的机器码指令经常包括一部分指令(称为操作码),其参考/规定要执行的指令或操作。解码逻辑1425包括从它们的操作码中识别这些指令并在流水线中传递解码指令以便如第一ISA所定义的进行处理的电路。例如,如下面更详细描述的,解码器1425在一个实施例中包括设计成或适合于识别特定指令诸如事务性指令的逻辑。作为解码器1425识别的结果,架构或核1401采取特定的预先定义的动作执行与适当指令关联的任务。重要的是要指出,本文描述的任务、块、操作和方法中的任一个都可响应于单个或多个指令而执行;其中一些可以是新指令或老指令。要指出,解码器1426在一个实施例中识别相同ISA(或者其子集)。替代地,在异构核环境中,解码器1426识别第二ISA(或者第一ISA子集或者截然不同的ISA)。
在一个示例中,分配器和重命名块1430包括预留资源的分配器,诸如存储指令处理结果的寄存器文件。然而,线程1401a和1401b潜在地能够无序执行,其中分配器和重命名器块1430还预留其它资源,诸如重排序缓冲器,以跟踪指令结果。单元1430还可包括寄存器重命名器以将程序/指令参考寄存器重命名成处理器1400内部的其它寄存器。重排序/引退单元1435包括部件诸如上面提到的重排序缓冲器、负载缓冲器和存储缓冲器以支持无序执行以及后来的无序执行的指令的有序引退。
在一个实施例中,调度器和执行单元块1440包括调度器单元以调度执行单元上的指令/操作。例如,在具有可用浮点执行单元的执行单元端口上调度浮点指令。还包括与执行单元相关联的寄存器文件以存储信息指令处理结果。示例执行单元包括浮点执行单元、整数执行单元、跳执行单元、负载执行单元、存储执行单元和其它已知执行单元。
较低级数据缓存和数据转换缓冲器(D-TLB)1450耦合到执行单元1440。数据缓存要存储近来使用/操作的单元,诸如数据操作数,它们潜在地保持在存储器一致性状态。D-TLB要存储近来对物理地址转换的虚拟/线性。作为特定示例,处理器可包括页表结构以将物理存储器分成多个虚拟页。
在此,核1401和1402共享对较高级或更高级缓存(诸如与片上接口1410关联的第二级缓存)的访问。要指出,较高级或更高级指的是增大或从执行单元得到进一步方式的缓存级。在一个实施例中,较高级缓存是末级数据缓存——处理器1400上的存储器层级中的最后一个缓存——诸如第二级或第三级数据缓存。然而,较高级缓存不如此限制,因为它可与指令缓存关联或包括指令缓存。痕迹缓存——一种类型的指令缓存——相反可耦合在解码器1425后面以存储最近解码的痕迹。在此,指令潜在地指的是宏指令(即,由解码器识别的通用指令),其可被解码成若干微指令(微操作)。
在描绘的配置中,处理器1400还包括片上接口模块14140。历史上,在下面更详细描述的存储器控制器已经被包括在处理器1400外部的计算系统中。在此情形下,片上接口1410要与处理器1400外部的设备(诸如系统存储器1475、芯片组(在一些情况下包括连接到存储器1475的存储器控制器中枢或共享存储器控制器以及连接外围设备的I/O控制器中枢)、存储器控制器中枢、北桥或其它集成电路)通信。并且在此情形下,链路1405可包括任何已知互连,诸如多点分支总线、点对点互连、串行互连、并行总线、一致(例如缓存一致)总线、分层协议架构、差分总线、GTL总线或SML链路。
存储器1475可专用于处理器1400,或与系统中的其它设备共享。存储器1475的类型的常见示例包括DRAM、SRAM、非易失性存储器(NV存储器)以及其它已知存储设备。要指出,设备1480可包括图形加速器、耦合到存储器控制器中枢的卡或处理器、耦合到I/O控制器中枢的数据存储、无线收发器、闪存设备、音频控制器、网络控制器或其它已知设备。
然而,近来,当更多的逻辑和设备被集成在单个管芯(诸如SOC)上时,这些设备中的每个都可结合在处理器1400上。例如,在一个实施例中,存储器控制器中枢在与处理器1400相同的封装和/或管芯上。在此,核的部分(核上部分)1400包括用于与诸如存储器1475或图形设备1480的其它设备接口的一个或多个控制器。包括用于与此类设备对接的控制器和互连的配置经常被称为核上(或非核)配置。作为示例,片上接口1410包括用于片上通信的环形互连以及用于片下通信的高速串行点对点链路1405。然而,在SOC环境中,甚至更多的设备,诸如网络接口、协处理器、存储器1475、图形处理器1480以及任何其它已知的计算机设备/接口可被集成在单个管芯或集成电路上,以提供具有高功能性和低功耗的小形状因子。
在一个实施例中,处理器1400能够执行编译器、优化和/或转换器代码1477以编译、转换和/或优化应用代码1476以支持本文描述的设备和方法,或与之对接。编译器经常包括将源文本/代码转换成目标文本/代码的程序或一组程序。通常,用编译器编译程序/应用代码在多阶段和多遍进行,以将高级编程语言代码变换成低级机器或汇编语言代码。然而,对于简单编译,仍可利用单遍编译器。编译器可利用任何已知编译技术,并执行任何已知编译器操作,诸如词法分析、预先处理、解析、语义分析、代码生成、代码变换和代码优化。
较大编译器经常包括多阶段,但最经常的是,这些阶段被包括在两个一般阶段内:(1)前端,即,一般在句法处理、语义处理和一些变换/优化可发生的情况下,以及(2)后端,即,一般在分析、变换、优化和代码生成发生的情况下。一些编译器指的是中间的,其图示了编译器的前端与后端之间的刻画的模糊。结果,对插入、关联、生成或编译器的其它操作的提及可发生在任何上面提到的阶段或遍,以及编译器的任何其它已知阶段或遍。作为说明性示例,编译器潜在地将操作、调用、函数等插入在编译的一个或多个阶段中,诸如将调用/操作插入在编译的前端中,并且然后在变换阶段期间将调用/操作变换成较低级代码。要指出,在动态编译期间,编译器代码或动态优化代码可插入此类操作/调用,以及优化用于在运行时间期间执行的代码。作为特定说明性示例,二进制代码(已经是编译代码)可在运行时间期间动态优化。在此,程序代码可包括动态优化代码、二进制代码或其组合。
类似于编译器,转换器(诸如二进制转换器)静态或动态转换代码,以优化和/或转换代码。因此,对执行代码、应用代码、程序代码或其它软件环境的提及可指的是:(1)动态或者静态地执行编译器程序、优化代码优化器或转换器,以编译程序代码,维持软件结构,执行其它操作,优化代码,或者转换代码;(2)执行包括操作/调用的主程序代码,诸如已经被优化/编译的应用代码;(3)执行其它程序代码,诸如与维持软件结构的主程序代码关联的库,以执行其它软件相关应用,或优化代码;或者(4)其组合。
虽然已经相对于有限数量的实施例描述了本发明,但是本领域技术人员将认识到源自于其的许多修改和变化。所附权利要求旨在涵盖落入本发明的真实精神和范围内的所有这些修改和变化。
设计可以经历从创建到模拟到制造的各个阶段。代表设计的数据可以以多种方式表示设计。首先,如在仿真中有用的,硬件可以使用硬件描述语言或另一功能性描述语言来表示。此外,可以在设计过程的某一阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某一阶段达到表示硬件模型中各种设备的物理放置的数据级别。在使用常规半导体制造技术的情况下,表示硬件模型的数据可以是指定用于产生集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可被存储于任何形式的机器可读介质中。存储器或磁存储或光存储,诸如磁盘,可以是机器可读介质,以存储经由光或电波传输的信息,所述光或电波被调制或以其它方式生成为传输这种信息。当指示或携带代码或设计的电载波被传输时,在电信号的复制、缓冲或重传输被执行的程度上做出新的副本。因此,通信供应商或网络供应商可在有形的、机器可读介质上至少暂时存储诸如编码到载波中的信息的制品,从而实施本发明的实施例的技术。
如本文所使用的模块指代硬件、软件和/或固件的任何组合。例如,模块包括硬件,诸如微控制器,其关联于非暂时性介质,以存储被适配成由微控制器执行的代码,因此,在一个实施例中,对模块的引用指代硬件,其特别地被配置为识别和/或执行将保持在非暂时性介质上的代码。此外,在另一实施例中,模块的使用指代包括代码的非暂时性介质,其特别地被适配成由微控制器执行,以实行预定操作。并且如可以推断的,在又一实施例中,术语模块(在该示例中)可指代微控制器和非暂时性介质的组合。通常,说明为分离的模块边界通常发生变化并且潜在地重叠。例如,第一和第二模块可共享硬件、软件、固件或其组合,同时潜在地保留一些独立硬件、软件或固件。在一个实施例中,术语逻辑的使用包括硬件,诸如晶体管、寄存器或其它硬件,诸如可编程逻辑器件。
在一个实施例中,短语“配置为”的使用指代布置、放一起、制造,许诺销售、进口和/或设计装置、硬件、逻辑或元件,以执行指定的或确定的任务。在该示例中,如果被设计、耦合和/或互连以执行所述指定的任务,则没有正在操作的装置或其元件仍“配置为”执行指定的任务。仅作为说明性的示例,逻辑门可在操作期间提供0或1。但逻辑门“配置为”提供启用信号至时钟,不包括可提供1或0的每个潜在的逻辑门。相反,逻辑门是以在操作期间1或0输出是用于启用时钟的某种方式耦合的逻辑门。再次注意,术语“配置为”的使用不需要操作,但相反集中于装置、硬件和/或元件的潜在状态,其中装置、硬件和/或元件的潜在状态被设计为当装置、硬件和/或元件正操作时执行特定任务。
此外,在一个实施例中,短语“用以”、“能够”和/或“可操作以”的使用指代以使能以指定方式使用装置、逻辑、硬件和/或元件的这种方式设计的一些装置、逻辑、硬件和/或元件。如以上注意的,在一个实施例中,用以、能够、或可操作以的使用,指代装置、逻辑、硬件和/或元件的潜在状态,其中装置、逻辑、硬件和/或元件没有正在操作但以使能以指定方式使用装置的这种方式来被设计。
如本文所使用的值,包括数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,逻辑电平、逻辑值或逻辑上的值的使用也称为1和0,其仅表示二进制逻辑状态。例如,1指代高逻辑电平而0指代低逻辑电平。在一个实施例中,存储单元,诸如晶体管或闪存单元,可以能够保持单个逻辑值或多个逻辑值。然而,使用了计算机系统中的值的其它表示。例如十进制数10还可被表示为1410的二进制值和十六进制的字母A。因此,值包括能够被保持在计算机系统中的信息的任何表示。
此外,状态可由值或值的部分来表示。例如,第一值,诸如逻辑1,可表示默认或初始状态,而第二值,诸如逻辑0,可表示非默认状态。此外,在一个实施例中,术语重置和设置,分别指代默认和更新的值或状态。例如,默认值潜在地包括高逻辑值,即重置,而更新值潜在地包括低逻辑值,即设置。注意,值的任何组合可被用于表示任何数量的状态。
上文阐述的方法、硬件、软件、固件或代码的实施例可经由可由处理元件执行的存储于机器可访问的、机器可读的、计算机可访问的或计算机可读的介质上的指令或代码来实现。非暂时性机器可访问/可读介质包括提供(即,存储和/或传输)以诸如计算机或电子系统的机器可读的形式的信息的任何机构。例如,非暂时性机器可访问介质包括随机存取存储器(RAM),诸如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存设备;电存储设备;光存储设备;声学存储设备;用于保持接收自暂时性(传播)信号(例如,载波、红外信号、数字信号)的信息的其它形式的存储设备;等等,其将区别于可从其中接收信息的非暂时性介质。
用于将逻辑编程以执行本发明的实施例的指令可存储于系统的存储器内,存储器诸如是DRAM、缓存、闪存或其它存储装置。此外,指令可经由网络或借助于其它计算机可读介质来分发。因此机器可读介质可包括用于以由机器(例如,计算机)可读的形式存储或传输信息的任何机构,但不限于,软磁盘、光盘、紧凑盘只读存储器(CD-ROM)、以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁卡或光学卡、闪存、或用于经由电、光、声学或其它形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传输信息的有形的、机器可读存储装置。因此,计算机可读介质包括任何类型的有形的机器可读介质,其适用于以由机器(例如,计算机)可读的形式存储或传输电子指令或信息。
以下示例属于根据本说明书的实施例。一个或多个实施例可以提供用于以下各项的装置、系统、机器可读存储、机器可读介质、方法以及(例如,以共享存储器控制器的形式实现的)基于硬件和/或基于软件的逻辑:第一接口,用于接收与存储器事务相关联的微片。特定共享存储器控制器用于控制对共享存储器资源的一部分的访问,所述共享存储器资源具有多个存储器元件。所述微片可以包括节点标识符字段,其用于标识多个处理器节点中作为所述事务的源的特定节点。
在一个示例中,所述微片包括至少三个槽。
在一个示例中,所述槽中的至少两个槽用于标识两个不同事务的地址,并且所述至少三个槽中的第三槽用于提供用于对所述槽中的所述至少两个槽中标识的地址进行扩展的位。
在一个示例中,所述微片还要包括用于指示所述第三槽是否用于扩展在所述槽中的所述至少两个槽中标识的地址的字段。
在一个示例中,当所述字段指示所述第三槽不用于扩展在所述槽中的所述至少两个槽中标识的地址的范围时,所述微片具有单节点缓冲存储器链路协议的格式。
在一个示例中,所述特定共享存储器控制器还用于解码所述微片,并基于解码来确定用于所述微片的路由。
在一个示例中,所述特定共享存储器控制器还包括第二接口,其用于基于所述解码将所述微片路由至所述多个共享存储器控制器中的另一共享存储器控制器。
在一个示例中,所述另一共享存储器控制器是根据所述微片的地址字段而隐含地确定的。
在一个示例中,所述另一共享存储器控制器是根据在所述微片的目的地节点字段中编码的共享存储器控制器号而确定的。
在一个示例中,所述特定共享存储器控制器直接连接到所述多个存储器元件中与所述共享存储器资源的该部分对应的特定子集并且管理对所述特定子集的访问。
在一个示例中,所述第一接口包括分层协议栈。
在一个示例中,所述第一接口利用共享存储器链路协议,并且所述共享存储器链路协议利用不同的互连协议的物理层逻辑。
在一个示例中,所述不同的互连协议包括基于快速外围组件互连(PCIe)的协议。
一个或多个实施例可以提供用于以下各项的装置、系统、机器可读存储、机器可读介质、方法以及(例如,以共享存储器控制器的形式实现的)基于硬件和/或基于软件的逻辑:其用于通过共享存储器链路从另一第一共享存储器控制器接收微片,其中所述微片包括节点标识符(ID)字段和共享存储器的特定行的地址,并且所述节点ID字段标识所述第一共享存储器控制器对应于所述微片的源。此外,至少根据所述微片的地址字段确定第二共享存储器控制器,其中所述第二共享存储器控制器连接到与所述特定行对应的存储器元件。可以根据路由路径使用共享存储器链路将所述微片转发至所述第二共享存储器控制器。
在一个示例中,要确定到所述第二共享存储器控制器的路由路径。
在一个示例中,所述路由路径是到所述第二共享存储器控制器的多个替代路由路径中的一个,并且所述共享存储器控制器用于根据所述微片中的字段来确定所述多个替代路由路径中的特定的一个。
在一个示例中,生成用于与要涉及到所述共享存储器的另一行的另一事务相对应的另一微片,所述另一微片用于包括节点ID字段和所述共享存储器的所述另一行的地址,并且所述另一微片的节点ID字段用于标识所述共享存储器控制器对应于所述另一事务的源。
一个或多个实施例可以提供一种系统,包括:共享存储器,包括多个存储器元件;共享存储器控制器,用于管理对所述多个存储器元件的子集的访问;以及至少一个处理器节点,通过共享存储器链路连接到所述共享存储器控制器。所述处理器节点用于生成用于与要涉及到所述共享存储器的特定地址的事务相对应的微片并将所述微片发送到所述共享存储器控制器。所述共享存储器控制器还可以识别多个共享存储器控制器中与所述特定地址对应的特定共享存储器控制器,并且确定用于向所述特定共享存储器提供所述微片的路由路径。
在一个示例中,所述共享存储器控制器用于将所述事务的结果递送到所述处理器节点。
在一个示例中,所述共享存储器控制器包括第一共享存储器控制器,所述多个存储器元件的子集包括所述存储器元件的第一子集。所述处理器节点包括第一处理器节点,并且所述系统还包括:第一设备,该第一设备包括所述第一共享存储器控制器、所述存储器元件的所述第一子集以及所述一个或多个节点;以及第二设备,该第二设备通过共享存储器链路连接到所述第一设备,其中所述第二设备包括第二共享存储器控制器、所述存储器元件的第二子集以及第二处理器节点。
遍及本说明书对“一个实施例”或“实施例”的引用意指结合所述实施例描述的特定特征、结构或特性被包括于本发明的至少一个实施例中。因此,遍及本说明书在各个地方出现短语“在一个实施例中”或“在实施例中”不一定全部指代相同的实施例。此外,特定特征、结构或特性可以在一个或多个实施例中以任何合适的方式被组合。
在前述说明书中,已参考特定示例性实施例给出详细描述。然而,将显而易见的是,可对其进行各种修改和改变而不脱离如所附权利要求中阐述的本发明的更广泛的精神和范围。因此,应以例证性意义而非限制性意义来看待说明书和附图。此外,实施例的前述用途和其它示例性语言不一定指代相同实施例或相同示例,而是可指代不同的和有区别的实施例以及潜在地指代相同的实施例。
Claims (19)
1.一种用于访问计算机存储器的装置,该装置包括:
特定共享存储器控制器,包括:
第一接口,用于接收与存储器事务相关联的微片,其中所述特定共享存储器控制器用于控制对共享存储器资源的一部分的访问,所述共享存储器资源包括多个存储器元件,并且所述微片包括:
节点标识符字段,用于标识多个处理器节点中作为所述事务的源的特定节点;
其中,所述第一接口利用共享存储器链路协议,并且所述共享存储器链路协议利用不同互连协议的物理层逻辑。
2.根据权利要求1所述的装置,其中,所述微片包括至少三个槽。
3.根据权利要求2所述的装置,其中,所述槽中的至少两个槽用于标识两个不同事务的地址,并且所述至少三个槽中的第三槽用于提供用于对所述槽中的所述至少两个槽中标识的所述地址进行扩展的位。
4.根据权利要求3所述的装置,其中,所述微片还要包括用于指示所述第三槽是否用于扩展在所述槽中的所述至少两个槽中标识的所述地址的字段。
5.根据权利要求4所述的装置,其中,当所述字段指示所述第三槽不用于扩展在所述槽中的所述至少两个槽中标识的所述地址的范围时,所述微片具有单节点缓冲存储器链路协议的格式。
6.根据权利要求1所述的装置,其中,所述特定共享存储器控制器还用于解码所述微片,并基于所述解码来确定用于所述微片的路由。
7.根据权利要求6所述的装置,其中,所述特定共享存储器控制器还包括第二接口,其用于基于所述解码将所述微片路由至所述多个共享存储器控制器中的另一共享存储器控制器。
8.根据权利要求7所述的装置,其中,所述另一共享存储器控制器是根据所述微片的地址字段而隐含地确定的。
9.根据权利要求7所述的装置,其中,所述另一共享存储器控制器是根据在所述微片的目的地节点字段中编码的共享存储器控制器号而确定的。
10.根据权利要求1所述的装置,其中,所述特定共享存储器控制器直接连接到所述多个存储器元件中与所述共享存储器资源的所述一部分对应的特定子集并且管理对所述特定子集的访问。
11.根据权利要求1所述的装置,其中,所述第一接口包括分层协议栈。
12.根据权利要求1所述的装置,其中,所述不同的互连协议包括基于快速外围组件互连(PCIe)的协议。
13.一种用于访问计算机存储器的装置,该装置包括:
共享存储器控制器,用于:
通过共享存储器链路从另一第一共享存储器控制器接收微片,其中所述微片包括节点标识符(ID)字段和共享存储器的特定行的地址,其中所述节点ID字段标识所述另一第一共享存储器控制器对应于所述微片的源;
至少根据所述微片的地址字段确定第二共享存储器控制器,其中所述第二共享存储器控制器连接到与所述特定行对应的存储器元件;以及
根据路由路径使用共享存储器链路将所述微片转发至所述第二共享存储器控制器。
14.根据权利要求13所述的装置,其中,所述共享存储器控制器还用于确定到所述第二共享存储器控制器的所述路由路径。
15.根据权利要求14所述的装置,其中,所述路由路径是到所述第二共享存储器控制器的多个替代路由路径中的一个,并且所述共享存储器控制器用于根据所述微片中的字段来确定所述多个替代路由路径中的特定的一个。
16.根据权利要求13所述的装置,其中,所述存储器控制器还用于生成用于与要涉及到所述共享存储器的另一行的另一事务相对应的另一微片,所述另一微片用于包括节点ID字段和所述共享存储器的所述另一行的地址,并且所述另一微片的所述节点ID字段用于标识所述共享存储器控制器对应于所述另一事务的源。
17.一种用于访问计算机存储器的系统,该系统包括:
共享存储器,包括多个存储器元件;
共享存储器控制器,用于管理对所述多个存储器元件的子集的访问;
至少一个处理器节点,通过共享存储器链路连接到所述共享存储器控制器,其中,所述处理器节点用于:
生成用于与要涉及到所述共享存储器的特定地址的事务相对应的微片;以及
将所述微片发送到所述共享存储器控制器;
其中,所述共享存储器控制器还用于:
标识多个共享存储器控制器中与所述特定地址对应的特定共享存储器控制器;以及
确定用于向所述特定共享存储器提供所述微片的路由路径。
18.根据权利要求17所述的系统,其中,所述共享存储器控制器用于将所述事务的结果递送到所述处理器节点。
19.根据权利要求17所述的系统,其中,所述共享存储器控制器包括第一共享存储器控制器,所述多个存储器元件的所述子集包括所述存储器元件的第一子集,所述处理器节点包括第一处理器节点,并且所述系统还包括:
第一设备,该第一设备包括所述第一共享存储器控制器、所述存储器元件的所述第一子集以及所述一个或多个节点;以及
第二设备,该第二设备通过共享存储器链路连接到所述第一设备,其中,所述第二设备包括第二共享存储器控制器、所述存储器元件的第二子集以及第二处理器节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110075063.3A CN112699068A (zh) | 2015-03-27 | 2016-02-26 | 共享缓冲存储器路由 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/670,578 US9720838B2 (en) | 2015-03-27 | 2015-03-27 | Shared buffered memory routing |
US14/670578 | 2015-03-27 | ||
PCT/US2016/019673 WO2016160197A1 (en) | 2015-03-27 | 2016-02-26 | Shared buffered memory routing |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110075063.3A Division CN112699068A (zh) | 2015-03-27 | 2016-02-26 | 共享缓冲存储器路由 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107430567A CN107430567A (zh) | 2017-12-01 |
CN107430567B true CN107430567B (zh) | 2021-02-09 |
Family
ID=56976555
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110075063.3A Pending CN112699068A (zh) | 2015-03-27 | 2016-02-26 | 共享缓冲存储器路由 |
CN201680018790.3A Active CN107430567B (zh) | 2015-03-27 | 2016-02-26 | 共享缓冲存储器路由 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110075063.3A Pending CN112699068A (zh) | 2015-03-27 | 2016-02-26 | 共享缓冲存储器路由 |
Country Status (4)
Country | Link |
---|---|
US (5) | US9720838B2 (zh) |
CN (2) | CN112699068A (zh) |
TW (1) | TWI610174B (zh) |
WO (1) | WO2016160197A1 (zh) |
Families Citing this family (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9940287B2 (en) | 2015-03-27 | 2018-04-10 | Intel Corporation | Pooled memory address translation |
US9900260B2 (en) * | 2015-12-10 | 2018-02-20 | Arm Limited | Efficient support for variable width data channels in an interconnect network |
US10157133B2 (en) | 2015-12-10 | 2018-12-18 | Arm Limited | Snoop filter for cache coherency in a data processing system |
US9990292B2 (en) | 2016-06-29 | 2018-06-05 | Arm Limited | Progressive fine to coarse grain snoop filter |
US10515032B2 (en) * | 2016-07-01 | 2019-12-24 | Intel Corporation | Asymmetric transmission (TX) and receive (RX) lanes in a point-to-point interconnect using a peripheral component interconnect express (PCIE) resources in a computer system |
US10095629B2 (en) * | 2016-09-28 | 2018-10-09 | Intel Corporation | Local and remote dual address decoding using caching agent and switch |
US10042766B1 (en) | 2017-02-02 | 2018-08-07 | Arm Limited | Data processing apparatus with snoop request address alignment and snoop response time alignment |
US10784986B2 (en) * | 2017-02-28 | 2020-09-22 | Intel Corporation | Forward error correction mechanism for peripheral component interconnect-express (PCI-e) |
US10601425B2 (en) * | 2018-05-30 | 2020-03-24 | Intel Corporation | Width and frequency conversion with PHY layer devices in PCI-express |
US11467999B2 (en) | 2018-06-29 | 2022-10-11 | Intel Corporation | Negotiating asymmetric link widths dynamically in a multi-lane link |
US11061733B2 (en) | 2018-08-30 | 2021-07-13 | International Business Machines Corporation | Shared and exclusive accelerator access |
US10771189B2 (en) * | 2018-12-18 | 2020-09-08 | Intel Corporation | Forward error correction mechanism for data transmission across multi-lane links |
US11637657B2 (en) | 2019-02-15 | 2023-04-25 | Intel Corporation | Low-latency forward error correction for high-speed serial links |
US11249837B2 (en) | 2019-03-01 | 2022-02-15 | Intel Corporation | Flit-based parallel-forward error correction and parity |
US10846247B2 (en) | 2019-03-05 | 2020-11-24 | Intel Corporation | Controlling partial link width states for multilane links |
GB2582362B (en) | 2019-03-21 | 2021-08-04 | Advanced Risc Mach Ltd | Page table structure |
US10860512B2 (en) * | 2019-04-26 | 2020-12-08 | Dell Products L.P. | Processor interconnect link training system |
US11296994B2 (en) | 2019-05-13 | 2022-04-05 | Intel Corporation | Ordered sets for high-speed interconnects |
KR20210046348A (ko) * | 2019-10-18 | 2021-04-28 | 삼성전자주식회사 | 복수의 프로세서들에 유연하게 메모리를 할당하기 위한 메모리 시스템 및 그것의 동작 방법 |
US11836101B2 (en) | 2019-11-27 | 2023-12-05 | Intel Corporation | Partial link width states for bidirectional multilane links |
US11740958B2 (en) | 2019-11-27 | 2023-08-29 | Intel Corporation | Multi-protocol support on common physical layer |
US11762802B2 (en) * | 2019-12-05 | 2023-09-19 | Intel Corporation | Streaming fabric interface |
US11360701B1 (en) * | 2020-05-04 | 2022-06-14 | Meta Platforms, Inc. | Memory and storage controller with integrated memory coherency interconnect |
TWI778363B (zh) * | 2020-05-29 | 2022-09-21 | 慧榮科技股份有限公司 | 採多級架構控制器的資料儲存裝置 |
US11580044B2 (en) * | 2020-08-31 | 2023-02-14 | Micron Technology, Inc. | Network credit return mechanisms |
US11362939B2 (en) | 2020-08-31 | 2022-06-14 | Micron Technology, Inc. | Flow control for a multiple flow control unit interface |
US11588745B2 (en) | 2020-08-31 | 2023-02-21 | Micron Technology, Inc. | Early credit return for credit-based flow control |
CN116324743A (zh) * | 2020-11-05 | 2023-06-23 | 谷歌有限责任公司 | 存储器请求优先级升级 |
US11842083B2 (en) | 2021-02-03 | 2023-12-12 | Infortrend Technology, Inc. | Storage system architecture with dual storage virtualization controllers and the data access method thereof |
US20220405223A1 (en) * | 2021-06-16 | 2022-12-22 | Ampere Computing Llc | Method and system for data transactions on a communications interface |
TWI773395B (zh) * | 2021-06-22 | 2022-08-01 | 慧榮科技股份有限公司 | 記憶體控制器與連結識別方法 |
CN114546495B (zh) * | 2021-09-03 | 2022-12-20 | 北京睿芯众核科技有限公司 | 适用于risc-v架构处理器的地址属性检查的方法及系统 |
CN114116533B (zh) * | 2021-11-29 | 2023-03-10 | 海光信息技术股份有限公司 | 利用共享存储器存储数据的方法 |
Family Cites Families (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6751698B1 (en) * | 1999-09-29 | 2004-06-15 | Silicon Graphics, Inc. | Multiprocessor node controller circuit and method |
US6904477B2 (en) * | 2001-04-13 | 2005-06-07 | Sun Microsystems, Inc. | Virtual host controller interface with multipath input/output |
US7058653B2 (en) * | 2001-09-17 | 2006-06-06 | Ricoh Company, Ltd. | Tree system diagram output method, computer program and recording medium |
US7716409B2 (en) | 2004-04-27 | 2010-05-11 | Intel Corporation | Globally unique transaction identifiers |
US9582449B2 (en) * | 2005-04-21 | 2017-02-28 | Violin Memory, Inc. | Interconnection system |
US20060288130A1 (en) * | 2005-06-21 | 2006-12-21 | Rajesh Madukkarumukumana | Address window support for direct memory access translation |
CN103744790B (zh) * | 2005-08-25 | 2017-05-10 | 美国莱迪思半导体公司 | 智能可缩放存储切换架构 |
JP4546380B2 (ja) * | 2005-10-04 | 2010-09-15 | エヌイーシーコンピュータテクノ株式会社 | クロスバースイッチ、情報処理装置および転送方法 |
US7924708B2 (en) * | 2005-12-13 | 2011-04-12 | Intel Corporation | Method and apparatus for flow control initialization |
US7949794B2 (en) * | 2006-11-02 | 2011-05-24 | Intel Corporation | PCI express enhancements and extensions |
US7975109B2 (en) * | 2007-05-30 | 2011-07-05 | Schooner Information Technology, Inc. | System including a fine-grained memory and a less-fine-grained memory |
US8108631B2 (en) | 2008-07-18 | 2012-01-31 | Oracle America, Inc. | Transactional memory support for non-coherent shared memory systems using selective write through caches |
CN101673255B (zh) * | 2009-10-21 | 2012-07-11 | 威盛电子股份有限公司 | 通用串行总线主机控制器和通用串行总线主机控制方法 |
US8751714B2 (en) * | 2010-09-24 | 2014-06-10 | Intel Corporation | Implementing quickpath interconnect protocol over a PCIe interface |
JP2012155650A (ja) | 2011-01-28 | 2012-08-16 | Toshiba Corp | ルータ及びメニーコアシステム |
WO2013085501A1 (en) | 2011-12-07 | 2013-06-13 | Intel Corporation | Multiple transaction data flow control unit for high-speed interconnect |
CN106776364B (zh) | 2012-10-22 | 2020-07-17 | 英特尔公司 | 用于高性能互连物理层的装置、方法和系统 |
US10452580B2 (en) * | 2013-03-26 | 2019-10-22 | Vmware, Inc. | Method and system for providing remote direct memory access to virtual machines |
US10353631B2 (en) * | 2013-07-23 | 2019-07-16 | Intel Corporation | Techniques for moving data between a network input/output device and a storage device |
-
2015
- 2015-03-27 US US14/670,578 patent/US9720838B2/en active Active
-
2016
- 2016-02-24 TW TW105105506A patent/TWI610174B/zh active
- 2016-02-26 WO PCT/US2016/019673 patent/WO2016160197A1/en active Application Filing
- 2016-02-26 CN CN202110075063.3A patent/CN112699068A/zh active Pending
- 2016-02-26 CN CN201680018790.3A patent/CN107430567B/zh active Active
-
2017
- 2017-08-01 US US15/665,541 patent/US20180067855A1/en not_active Abandoned
-
2018
- 2018-09-24 US US16/140,482 patent/US11113196B2/en active Active
-
2021
- 2021-04-21 US US17/236,692 patent/US11755486B2/en active Active
-
2023
- 2023-09-07 US US18/462,561 patent/US20240012759A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US9720838B2 (en) | 2017-08-01 |
TW201702882A (zh) | 2017-01-16 |
TWI610174B (zh) | 2018-01-01 |
CN112699068A (zh) | 2021-04-23 |
US11113196B2 (en) | 2021-09-07 |
WO2016160197A1 (en) | 2016-10-06 |
US20190108124A1 (en) | 2019-04-11 |
US20240012759A1 (en) | 2024-01-11 |
US20160283375A1 (en) | 2016-09-29 |
CN107430567A (zh) | 2017-12-01 |
US11755486B2 (en) | 2023-09-12 |
US20210240623A1 (en) | 2021-08-05 |
US20180067855A1 (en) | 2018-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107430567B (zh) | 共享缓冲存储器路由 | |
US11507528B2 (en) | Pooled memory address translation | |
US20220012189A1 (en) | Sharing memory and i/o services between nodes | |
JP6225154B2 (ja) | 共有メモリリンクの低電力エントリ | |
EP3274861B1 (en) | Reliability, availability, and serviceability in multi-node systems with disaggregated memory | |
US12099458B2 (en) | Pooled memory address translation |
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 |