CN116472523A - 器件互连中的源排序 - Google Patents

器件互连中的源排序 Download PDF

Info

Publication number
CN116472523A
CN116472523A CN202180070230.3A CN202180070230A CN116472523A CN 116472523 A CN116472523 A CN 116472523A CN 202180070230 A CN202180070230 A CN 202180070230A CN 116472523 A CN116472523 A CN 116472523A
Authority
CN
China
Prior art keywords
tlp
memory write
completion
memory
transaction
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.)
Pending
Application number
CN202180070230.3A
Other languages
English (en)
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN116472523A publication Critical patent/CN116472523A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • 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
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • 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
    • 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/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • G06F13/4295Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus using an embedded synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Information Transfer Systems (AREA)
  • Bus Control (AREA)
  • Multi Processors (AREA)

Abstract

在一个实施例中,一种装置包括:端口,用于在链路上发送和接收数据;以及协议栈电路,用于跨链路实施基于加载‑存储输入/输出(I/O)的协议(例如,PCIe或CXL)的一个或多个层。协议栈电路为存储器写入事务构建存储器写入请求事务层分组(TLP),其中存储器写入请求TLP的字段指示除VC0以外的虚拟信道(VC)、响应于存储器写入事务需要完成、以及与存储器写入事务相关联的流标识符。存储器写入请求TLP在链路上被发送,并且作为响应完成TLP在链路上被接收,完成TLP指示存储器写入请求TLP的完成。

Description

器件互连中的源排序
相关申请的交叉引用
本申请要求于2021年4月22日递交的题为“SOURCE ORDERING IN DEVICEINTERCONNECTS(器件互连中的源排序)”的美国专利申请序列号17/238,156的优先权,该美国专利申请要求于2020年11月16日递交的题为“SOURCE ORDERING IN PCIE OR CXL.IO(PCIE或CXL.IO中的源排序)”的美国临时专利申请No.63/114,440的权益和优先权。这些在先申请的公开内容均通过参考引用结合于此。
技术领域
本公开内容涉及计算***,特别是(但不限于)设备互连中的源排序,如基于***组件互连快速(Peripheral Component Interconnect Express,PCIe)和/或计算快速链路(Compute Express Link,CXL)的互连。
背景技术
半导体处理和逻辑设计的进步已经允许增加可存在于集成电路设备上的逻辑量。作为必然结果,计算机***配置已经从***中的单个或多个集成电路发展到存在于各个集成电路上的多个核心、多个硬件线程和多个逻辑处理器,以及集成在此类处理器内的其他接口。处理器或集成电路通常包括单个物理处理器管芯,其中处理器管芯可以包括任何数量的核心、硬件线程、逻辑处理器、接口、存储器、控制器集线器等。随着处理能力与计算***中的设备数量一起增长,插槽(socket)和其他设备之间的通信变得更加关键。因此,互连已经从主要处理电气通信的更传统的多分叉总线发展到促进快速通信的全面互连架构。令人遗憾的是,由于未来处理器需要以更高的速度来使用,对现有的互连架构的能力提出了相应的要求。互联架构可以基于各种技术,包括***组件互连快速(PCIe)、计算快速链路(CXL)、通用串行总线(Universal Serial Bus)等。
附图说明
图1示出了包括互连架构的计算***的实施例。
图2示出了包括分层栈的互连架构的实施例。
图3A-图3D示出了用于互连架构内的示例事务层分组(TLP)格式。
图4示出了用于互连架构的发射器和接收器对的实施例。
图5示出了包括由链路耦合的主机处理器和加速器的计算***的示例实施方式。
图6示出了包括两个或多个互连的处理器设备的计算***的示例实施方式。
图7示出了包括分层栈的设备的示例端口的表示。
图8示出了设备之间具有PCIe链路的示例***。
图9示出了包括非树状设备结构的示例***。
图10示出了包括通过CXL交换机耦合到CPU的设备的示例***。
图11示出了根据本公开实施例的实施源排序规则的示例***。
图12示出了根据本公开实施例的构建存储器写入请求TLP的示例过程的流程图。
图13示出了包括多核处理器的计算***的框图的实施例。
图14示出了包括多个处理器的计算***的框图的实施例。
具体实施方式
在以下说明书中阐述了许多具体细节,例如,特定类型的处理器和***配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定***组件、特定测量值/高度、特定处理器管线阶段和操作等的示例,以便提供对本公开的透彻理解。然而,对于本领域普通技术人员显而易见的是,不一定要采用这些具体细节来实施本公开的实施例。在其他情况下,未具体描述公知的组件或方法,例如,特定的和替代的处理器架构、针对所描述的算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实施方式、代码中的算法的特定表达、特定断电和门控技术/逻辑、以及计算机***的其他特定操作细节,以便避免不必要地模糊本公开的实施例。
尽管以下实施例可以参照特定集成电路中(例如,计算平台或微处理器中)的节能和能效进行描述,但其他实施例适用于其他类型的集成电路和逻辑器件。本文描述的实施例的类似技术和教导可以应用于其他类型的电路或半导体器件,它们也可以受益于更好的节能和能效。例如,所公开的实施例不限于台式计算机***或UltrabookTM。此外,可以用于其他设备,例如,手持设备、平板电脑、其他薄型笔记本电脑、片上***(SOC)设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)和手持PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、片上***、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机,或任何其他可以执行下文教导的功能和操作的***。此外,本文所述的装置、方法和***并不局限于实体计算设备,还可涉及用于节能和能效的软件优化。如将在下面的描述中会变得很明显的,本文所述的方法、装置和***的实施例(无论是参考硬件、固件、软件,还是其组合)对于兼顾性能考虑的“绿色技术”未来至关重要。
随着计算***的发展,其中的组件也变得更加复杂。因此,在组件之间进行耦合和通信的互连架构也越来越复杂,以确保满足带宽要求来进行最佳组件操作。此外,不同的细分市场对互连架构有不同方面的要求,以适应市场的需求。例如,服务器需要更高的性能,而移动生态***有时可以牺牲整体性能来节能。然而,提供尽可能高的性能和最大限度的节能是大多数结构的突出目的。下面讨论了多个互联,它们将可能受益于本公开的各方面。
一种互连结构架构包括***组件互连(PCI)快速(PCIe)架构。PCIe的主要目标是使得来自不同供应商的组件和设备能够在开放架构中交互操作,跨多个细分市场;客户端(台式和移动)、服务器(标准、机架规模、云、雾(Fog)、企业等)以及嵌入式和通信设备。PCI快速是一种为各种未来的计算和通信平台而定义的高性能、通用I/O互连。一些PCI属性(如其使用模型、负载存储架构和软件接口)在其各种修订版本中被保持,而以前的并行总线实施方式已被高度可扩展的完全串行接口所取代。PCI快速的最近版本利用了点对点互连、基于交换机的技术和分组协议中的进步,来提供新层级的性能和特征。电源管理(PowerManagement)、服务质量(Quality Of Service,QoS)、热插拔/热调换(Hot-Plug/Hot-Swap)支持、数据完整性(Data Integrity)和错误处理(Error Handling)是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)互连层级中的根集线器、根复合体(root complex)或根控制器。控制器集线器115的示例包括芯片组、存储器控制器集线器(MCH)、北桥(northbridge)、互连控制器集线器(ICH)、南桥(southbridge)和根控制器/集线器。通常,术语芯片组指代两个物理上独立的控制器集线器,即耦合到互连控制器集线器(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设备、网络接口控制器(Network Interface Controller,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中。此外,***的一个或多个链路(例如,123)可以包括一个或多个扩展设备(如150),例如,重定时器、中继器等。
转到图2,示出了分层协议栈的实施例。分层协议栈200包括任何形式的分层通信栈,例如,快速路径互连(Quick Path Interconnect,QPI)栈、PCIe栈、下一代高性能计算互连栈、或其他分层栈。尽管下面紧接着参照图1-4的讨论与PCIe栈相关,但相同的概念可以应用于其他互连栈。在一个实施例中,协议栈200是PCIe协议栈,包括事务层205、链路层210和物理层220。接口(例如,图1中的接口117、118、121、122、126和131)可以被表示为通信协议栈200。作为通信协议栈的表示也可以被称为实施/包括协议栈的模块或接口。
PCI快速使用分组在组件之间传送信息。分组在事务层(Transaction Layer)205和数据链路层(Data Link Layer)210中形成,以将信息从发送组件运载至接收组件。当传输的分组流经其他层时,它们被扩展有在这些层处理分组所需的额外信息。在接收端发生相反的过程,分组从它们的物理层(Physical Layer)220表示转换为数据链路层210表示,并最终(对于事务层分组)转换为可由接收设备的事务层205处理的形式。
事务层
在一个实施例中,事务层205用于提供设备的处理核心和互连架构(例如,数据链路层210和物理层220)之间的接口。在这方面,事务层205的主要责任是对分组(即事务层分组,或TLP)的组装和拆卸。事务层205通常管理针对TLP的基于信用的流控制。PCIe实施分割事务,即请求和响应按时间分开的事务,允许链路在目标设备为响应收集数据时运载其他流量。
此外,PCIe利用基于信用的流控制。在该方案中,设备为事务层205中的每个接收缓冲器公告初始信用(credit)量。位于链路的相对端的外部设备(例如,图1中的控制器集线器115)对每个TLP所消耗的信用的数量进行计数。如果事务没有超过信用限制,则可以传输事务。在接收到响应时,恢复信用量。信用方案的优点是只要不遇到信用限制,信用返回的延迟不会影响性能。
在一个实施例中,四个事务地址空间包括配置地址空间、存储器地址空间、输入/输出地址空间和消息地址空间。存储器空间事务包括读取请求和写入请求中的一个或多个,用于将数据传输到存储器映射位置/从存储器映射位置传输数据。在一个实施例中,存储器空间事务能够使用两种不同的地址格式,例如,短地址格式(如32位地址)或长地址格式(如64位地址)。配置空间事务被用来访问PCIe设备的配置空间。对配置空间的事务包括读取请求和写入请求。消息空间事务(或者简单地称为消息)被定义以支持PCIe代理之间的带内通信。
因此,在一个实施例中,事务层205组装分组头部/有效载荷206。当前的分组头部/有效负载的格式可以在PCIe规范网站的PCIe规范中找到。
图3A-图3D示出了用于互连架构(例如,基于PCIe的互连架构)内的示例事务层分组(TLP)格式。参照图3A,示出了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标识与事务相关联的信道。
参照图3B,示出了示例存储器写入请求TLP格式320。示例存储器写入请求TLP格式320包括贯穿的多个保留(Reserved,R)位。此外,包括格式(Format,Fmt)字段和类型(Type)字段,这些字段一起可以指示TLP是存储器写入请求(Memory Write Request)。包括流量类别(Traffic Class,TC)字段,以指示请求的某个流量类别或虚拟信道(VC)。包括TLP摘要(TLP Digest,TD)位,其可以指示TLP数据上是否有额外的CRC。长度(Length)字段指示TLP包括多少数据(在该示例中,存在一个双字(即32位)的数据)。包括请求者(Requester)ID字段,以指示TLP的发送者。还包括针对发送者的标签(Tag)字段,以指示发送者的选择的某些数据。包括第一字节启用(Byte Enable,BE)字段,并且可以允许选择第一数据DW中的四个字节中的哪一些是有效的,并且应该被写入。此外,包括最后BE(Last BE)字段,并且可以允许选择最后数据DW中的四个字节中的哪一些是有效的(在该示例中,只有一个DW的数据,并且这将是零)。包括地址(Address)字段,以指示数据将被写入的地址,以及最后,数据(Data)字段包括响应存储器写入请求将被写入的数据。在一些情况下,存储器写入请求TLP可以是不需要相应的完成指示(例如,完成TLP)的“通告(posted)”事务。
参照图3C,示出了示例存储器读取请求TLP格式330。示例格式330与图3B的格式320相同,但删除了数据字段。然而,在示例格式330中,格式和类型字段现在指示分组是存储器读取请求,而长度字段指示响应于TLP将读取多少DW的数据。此外,两个BE字段指示的内容与格式320相同,不同在于它们选择要读取的字节而不是要写入的字节。在一些情况下,存储器读取请求TLP可以是确实需要相应的完成指示(例如,完成TLP)的“非通告(non-posted)”事务。
参照图3D,示出了示例完成TLP格式340。完成TLP可以由完成者响应于非通告类型的事务(例如,存储器读取请求)而发送。在示例格式340中,格式和类型字段指示TLP是完成类型。长度字段指示TLP中的数据的DW数目。完成者(Completer)ID字段指示完成请求(例如,响应于读取请求而进行读取,例如,格式类似于330的读取请求TLP)的设备,并且请求者ID指示发起请求的设备(例如,发送格式类似于330的读取请求TLP的设备)。字节计数(ByteCount)字段可以指示TLP中的有效的有效载荷字节的数量。标签可以指示任何值。较低地址(Lower Address)字段指示相关联的请求分组中的地址(例如,存储器读取请求TLP中的地址字段)的7个最低有效位。状态(Status)字段可以指示完成的状态,例如,成功/不成功。BCM字段可用于PCI-X实施方式,否则可为零。
链路层
链路层210(也被称为数据链路层210)作为事务层205和物理层220之间的中间阶段。在一个实施例中,数据链路层210的责任是提供用于在链路的两个组件之间交换事务层分组(TLPs)的可靠机制。数据链路层210的一侧接受由事务层205组装的TLP,应用分组序列标识符211(即标识号或分组号),计算并应用错误检测码(即CRC 212),并将修改后的TLPs提交给物理层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/412和接收对411/407。相应地,设备405包括传输逻辑406以将数据发送到设备410,以及接收逻辑407以从设备410接收数据。换句话说,在PCIe链路中包括两个发送路径(即路径416和417)以及两个接收路径(即路径418和419)。
传输路径是指任何用于发送数据的路径,例如,传输线、铜线、光线、无线通信信道、红外通信链路或其他通信路径。两个设备(例如,设备405和设备410)之间的连接被称为链路,例如,链路415。链路可以支持一个通道-每个通道代表一组差分信号对(一对用于发送,一对用于接收)。为了扩大带宽,链路可以聚集多个通道,由xN表示,其中N是任何支持的链路宽度,例如,1、2、4、8、12、16、32、64或更宽。在一些实施方式中,每个对称通道包含一个发送差分对和一个接收差分对。非对称通道可以包含不等比例的发送和接收对。一些技术可以利用对称通道(例如,PCIe),而其他技术(例如,显示端口(Displayport))可能不利用对称通道并且甚至可能只包括发送对或只包括接收对,等等。
差分对是指发送差分信号的两个传输路径,例如,线416和417。作为示例,当线416从低电压水平切换到高电压水平时(即上升沿),线417从高逻辑水平驱动到低逻辑水平(即下降沿)。差分信号可能表现出更好的电气特性,如更好的信号完整性,即交叉耦合、电压过冲/欠冲、振铃等。这允许更好的时序窗口,实现了更快的传输频率。
各种互连架构和协议可以利用本文讨论的概念。随着计算***和性能要求的进步,对互连结构和链路实施方式的改进持续被开发,包括基于或利用PCIe或其他传统互连平台的元素的互连。在一个示例中,计算快速链路(CXL)已被开发,提供了改进的高速CPU到设备和CPU到存储器互连,旨在加速下一代数据中心性能,以及其他应用。CXL维持CPU存储器空间和附接设备上的存储器之间的存储器一致性,这允许资源共享以获得更高的性能,减少软件栈的复杂性,并降低整体***成本,以及其他示例优势。CXL使得主机处理器(例如,CPU)和一组工作负载加速器(例如,图形处理单元(GPU)、现场可编程门阵列(FPGA)设备、张量和矢量处理器单元、机器学习加速器、专用加速器解决方案等)之间能够进行通信。实际上,CXL被设计为提供用于高速通信的标准接口,因为加速器越来越多地被用来补充CPU以支持新兴的计算应用,例如,人工智能、机器学习和其他应用。
CXL链路可以是低延迟、高带宽的离散或封装链路(on-package link),其支持对一致性、存储器访问和输入/输出(I/O)协议的动态协议复用。除了其他应用外,CXL链路还可以使得加速器能够作为缓存代理和/或主机***存储器来访问***存储器,等等。CXL是动态多协议技术,旨在支持广泛的加速器。CXL提供了离散或封装链路之上的丰富协议集,包括类似于PCIe的I/O语义(CXL.io)、缓存协议语义(CXL.cache)以及存储器访问语义(CXL.mem)。基于特定的加速器使用模型,所有CXL协议或仅协议的子集可以被启用。在一些实施方式中,CXL可以建立在完善的、广泛采用的PCIe基础设施(例如,PCIe 5.0)上,利用PCIe物理和电气接口来提供各方面的高级协议,包括I/O、存储器协议(例如,允许主机处理器与加速器设备共享存储器)和一致性接口。
转到图5,示出了简化框图500,图示了利用CXL链路550的示例***。例如,链路550可以将主机处理器505(例如,CPU)互连到加速器设备510。在该示例中,主机处理器505包括一个或多个处理器核心(例如,515a-b)和一个或多个I/O设备(例如,518)。主机存储器(例如,560)可以与主机处理器一起提供(例如,在同一封装或管芯上)。加速器设备510可以包括加速器逻辑520,并且在一些实施方式中,可以包括它自己的存储器(例如,加速器存储器565)。在该示例中,主机处理器505可以包括实施一致性/缓存逻辑525和互连逻辑(例如,PCIe逻辑530)的电路。还可以提供CXL复用逻辑(例如,555a-b)以实现对CXL协议(例如,I/O协议535a-b(例如,CXL.io)、缓存协议540a-b(例如、CXL.cache)和存储器访问协议545a-b(CXL.mem))的复用,从而使得所支持的协议(例如,535a-b、540a-b、545a-b)中的任一个的数据能够以复用方式通过主机处理器505和加速器设备510之间的链路550被发送。
在一些实施方式中,灵活总线(Flex BusTM)端口可以与符合CXL的链路协同利用,以灵活地将设备适配为与各种各样的其他设备(例如,其他处理器设备、加速器、交换机、存储器设备等)互连。灵活总线(Flex Bus)端口是灵活的高速端口,它被静态地配置为支持PCIe或CXL链路(以及可能的其他协议和架构的链路)。灵活总线端口允许设计在提供本地PCIe协议或者高带宽、非封装链路(off-package link)之上的CXL之间进行选择。在端口处应用的对协议的选择可以在启动时通过自动协商而发生,并基于***插槽的设备。灵活总线使用PCIe电气设备,使其与PCIe重定时器兼容,并遵守附加卡的标准PCIe形状因子。
转到图6,示出了***的示例(在简化框图600中),该***利用灵活总线端口(例如,635-640)来实施CXL(例如,615a-b、650a-b)并利用PCIe链路(例如,630a-b)来将各种设备(例如,510、610、620、625、645等)耦合到主机处理器(例如,CPU 505、605)。在该示例中,***可以包括通过处理器间链路670互连(例如,利用超路径互连(UltraPathInterconnect,UPI)、无限结构(Infinity FabricTM)、或其他互连协议)的两个CPU主机处理器设备(例如,505,605)。每个主机处理器设备505、605可以耦合到本地***存储器块560、660(例如,双数据速率(DDR)存储器设备),该本地***存储器块560、660经由存储器接口(例如,存储器总线或其他互连)耦合到相应的主机处理器505、605。
如上所述,CXL链路(例如,615a、650b)可用于互连各种加速器设备(例如,510、610)。因此,相应的端口(例如,灵活总线端口635、640)可以被配置(例如,选择CXL模式)为使得CXL链路被建立并将相应的主机处理器设备(例如,505、605)互连到加速器设备(例如,510、610)。如该示例所示,灵活总线端口(例如,636、639)或其他可类似配置的端口可被配置为实施通用I/O链路(例如,PCIe链路)630a-b而不是CXL链路,以将主机处理器(例如,505、605)互连到I/O设备(例如,智能I/O设备620、625等)。在一些实施方式中,主机处理器505的存储器可以被扩展,例如,通过所连接的加速器设备(例如,510、610)的存储器(例如,565、665)、或经由在灵活总线端口(637、638)上实施的相应CXL链路(例如,650a-b)连接到(一个或多个)主机处理器505、605的存储器扩展器设备(例如,645),以及其他示例实施方式和架构。
图7是示出用于实施CXL链路的示例端口架构700(例如,灵活总线)的简化框图。例如,灵活总线架构可被组织为多个层以实施端口所支持的多种协议。例如,端口可以包括事务层逻辑(例如,705)、链路层逻辑(例如,710)和物理层逻辑(例如,715)(例如,全部或部分在电路中实施)。例如,事务(或协议)层(例如,705)可以被细分为实施PCIe事务层755和基本PCIe事务层755的CXL事务层增强760(用于CXL.io)的事务层逻辑725,以及实施用于CXL链路的缓存(例如,CXL.cache)和存储器(例如,CXL.mem)协议的逻辑730。类似地,可以提供链路层逻辑735以实施基本PCIe数据链路层765和代表PCIe数据链路层765的增强版本的CXL链路层(用于CXL.io)。CXL链路层710还可以包括缓存和存储器链路层增强逻辑740(例如,用于CXL.cache和CXL.mem)。
继续图7的示例,CXL链路层逻辑710可以与CXL仲裁/复用(ARB/MUX)逻辑720相接口,该CXL仲裁/复用逻辑720将来自两个逻辑流(例如,PCIe/CXL.io和CXL.cache/CXL.mem)的流量进行交织,以及其他示例实施方式。在链路训练期间,事务层和链路层被配置为在PCIe模式或CXL模式下运行。在一些情况下,主机CPU可以支持对PCIe或CXL模式的实施,而其他设备(例如,加速器)可能只支持CXL模式,以及其他示例。在一些实施方式中,端口(例如,灵活总线端口)可以利用基于PCIe物理层(例如,PCIe电气PHY 750)的物理层715。例如,灵活总线物理层可被实施为融合的逻辑物理层745,其可以基于链路训练过程中的交替模式协商的结果来在PCIe模式或CXL模式下运行。在一些实施方式中,物理层可以支持多个信令速率(例如,8GT/s、16GT/s、32GT/s等)和多个链路宽度(例如,x16、x8、x4、x2、x1等)。在PCIe模式下,由端口700实施的链路可以完全符合本地PCIe特性(例如,在PCIe规范中定义的),而在CXL模式下,链路支持为CXL定义的所有特性。因此,灵活总线端口可以提供点对点互连,该点对点互连可以通过PCIe电气设备来发送本地PCIe协议数据或动态多协议CXL数据以提供I/O、一致性和存储器协议,以及其他示例。
CXL I/O协议(CXL.io)为I/O设备提供非相干加载/存储接口。CXL.io中的事务类型、事务分组格式化、基于信用的流控制、虚拟信道管理和事务排序规则可以遵循PCIe定义的全部或一部分。CXL缓存一致性协议(CXL.cache)将设备和主机之间的交互定义为多个请求,每个请求具有至少一个相关联的响应消息并且有时还具有数据传输。接口由每个方向上的三个信道组成:请求、响应和数据。
CXL存储器协议(CXL.mem)是处理器和存储器之间的事务性接口,并且在跨管芯通信时使用CXL的物理层和链路层。CXL.mem可用于多种不同的存储器附接选项,包括当存储器控制器位于主机CPU中时、当存储器控制器位于加速器设备内时、或者当存储器控制器被移至存储器缓冲芯片时,以及其他示例。CXL.mem可应用于涉及不同存储器类型(例如,易失性、持久性等)和配置(例如,扁平、分层等)的事务,以及其他示例特征。在一些实施方式中,主机处理器的一致性引擎可以使用CXL.mem请求和响应来与存储器相接口。在该配置中,CPU一致性引擎被视为CXL.mem上级(Master),并且Mem设备被视为CXL.mem下级(Subordinate)。CXL.mem上级是负责发出CXL.mem请求(例如,读取、写入等)的代理,并且CXL.mem下级是负责响应于CXL.mem请求(例如,数据、完成等)的代理。当下级是加速器时,CXL.mem协议假定存在设备一致性引擎(DCOH)。该代理被假定为负责实施一致性相关功能,例如,基于CXL.mem命令的设备缓存窥探以及对元数据字段的更新。在实施方式中,在元数据被设备附接的存储器支持的情况下,它可以被主机用来实施CPU插槽的粗略窥探过滤器,以及其他示例使用。
流控制和源排序
PCIe定义了三个流控制类(Flow-Control classes,FC)以及一组排序规则,其规定了后续事务可以、必须、还是不得绕过先前事务(如果有的话),这取决于这些事务中的每个事务的FC以及它们的属性。这三个FC是:通告(Posted,P-例如,存储器写入),不需要得到完成;非通告(Non-Posted,NP-例如,存储器读取),需要(一个或多个)完成;以及完成(Completion,Cpl),其是与NP事务相对应的(一个或多个)完成。
图8示出了在设备810、820之间具有PCIe链路830的示例***800。在所示示例中,链路830具有下行链路侧和上行链路侧,每一侧包括用于上/下行链路侧的每个虚拟信道(Virtual Channel,VC)的上述FC。虚拟信道(VC)通常可以指设备互连(例如,基于PCIe或CXL的互连)中的机制,该机制允许通过互连结构使用TLP中的标签或指示来区分流量。例如,TLP可以包括TLP的流量类别(TC)字段中的指示,并且软件可以提供TC到VC的映射。通过将具有特定TC标签的TLP映射到相应的VC(例如,在1:1的基础上),流量可以与VC相关联。当一个或多个TC与物理VC资源指定(缓冲器)相关联时,可以建立VC。在许多情况下,设备互连可以利用默认TC或VC(例如,PCIe或CXL.io协议中的VC0)。
在某些情况下,每个VC中的流量可以使用具有单独的流控制信用和计数器的一组单独的数据缓冲器来跟踪。相应地,不同VC的TLP可以受制于独立的流控制***,防止属于一个信道的TLP阻塞属于另一信道的TLP的流量。例如,在所示示例中,对于每个VC,针对以下缓冲器维持单独的计账:(1)通告请求TLP(Posted Requests TLP)的头部,(2)通告请求TLP的数据,(3)非通告请求TLP(Non-Posted Requests TLP)的头部,(4)非通告请求TLP的数据,(5)完成TLP(Completion TLP)的头部,以及(6)完成TLP的数据。
在一些情况下,TLP到达的顺序可以与它们在链路上被发送的顺序不同。PCIe相应地定义了一组排序规则,其中的一些在下面的表1中示出。
表1:当前基于PCIe的排序规则
在表1中,存储器写入(Memory Write)代表通告事务(Posted Transactions,P),分割读取请求(Split Read Request)和分割写入请求(Split Write Request)代表非通告事务(Non-Posted Transactions,NP),并且完成(Completion)代表完成(Completion,Cpl或C)。表1中的条目指示条目的对应行的事务是否可以绕过条目的对应列的事务。例如,存储器写入事务(行A)通常不能绕过另一存储器写入事务(列2;但见下文),并且可以绕过分割读取/写入请求(列3/4)。类似地,完成事务(行A)通常不能绕过存储器写入事务(列2),并且可以绕过分割读取/写入请求(列3/4)。
表1中的“No(否)”条目旨在执行生产者-消费者排序范式。在该范式中,生产者写入数据,然后写入标志。在看到标志的修改值时,消费者可以读取数据。因此,例如,表1的条目A2指示没有写入应绕过先前的写入(A2a),除非在以下条件下:后续写入具有“放松排序”(Relaxed Ordering,RO)位设置(在TLP分组的属性(Attribute)字段中),或者当基于标识符的排序(IDO)潜在地与进程地址空间标识符(PASID)相结合地被采用时,两个写入属于两个不同的源。类似地,在生产者向存储器进行数据写入并向其本地存储器进行标志写入的情况下,不允许完成绕过先前的写入(D2a)。消费者将读取作为完成传出的标志,该完成不得穿过数据写入,以执行排序。当写入是RO或者事务属于具有基于ID的排序(IDO)的两个不同的源(用于写入)和完成者(完成)时,异常(D2b)可能发生。表中的“Yes(是)”条目是为了确保向前推进(例如,避免死锁)。例如,通告写入(例如,存储器写入)必须能够绕过先前的读取或完成。由于完成不能绕过先前的通告写入(见D2a),所以通告写入不应卡在由于Cpl已满而不能消耗的NP后面。
然而,现有的PCIe排序规则或模型可能具有多个缺点。例如,当前的规则可能无法在非树状结构中使用。
图9示出了包括非树状设备结构的示例***900。具体地,示例***900包括通过处理器互连903(例如,UPI)而彼此耦合的CPU 902。每个CPU 902耦合到***存储器908。此外,每个CPU 902通过设备互连耦合到多个***设备904和交换机906,在所示示例中,该设备互连是基于PCIe的。在所示示例中,***900包括传统树状结构中的多个链路(PCIe)(在图9中用实线链路线表示),以及不符合传统树状结构的多个链路(PCIe+)(在图9中用虚线表示)。树状结构链路可以被当前的基于PCIe的协议支持,而非树状结构链路当前不被基于PCIe的协议支持。然而,非树状结构是越来越重要的使用模型,并且本公开的实施例能够在设备互连中实施这样的非树状结构。
作为另一示例,对于点对点(p2p)应用,CXL交换机下的PCIe和CXL设备必须通过CPU才能对该交换机下的CXL设备所托管的存储器进行任何访问。
图10示出了示例***1000,其包括通过CXL交换机1006耦合到CPU 1002的设备(例如,1004、1010)。CPU 1002通过处理器互连1003(例如,UPI)彼此耦合。每个CPU 1002耦合到***存储器1008。CPU 1002a经由基于CXL的链路连接到CXL交换机1006,而CXL交换机1006经由基于PCIe的链路连接到PCIe设备1004并经由基于CXL的链路连接到加速器1010。在PCIe设备1004想要访问由加速器1010b托管的存储器(例如,在缓存1012b或高带宽存储器(HBM)1014a、1014b中)的情况下,在当前***中,PCIe设备1004将首先需要经过CPU 1002a(经由CXL交换机1006),如虚线路径1所示。CPU 1002a然后经由虚线路径2和3访问CXL设备上的存储器,以执行I/O访问。对此的原因是到CXL存储器的事务是无序的,并且使用设备1004和加速器1010b之间的CXL.io路径1005发送设备写入可导致生产者-消费者排序违规。例如,PCIe设备1004可以将数据写入加速器(Accelerator)1010b,然后将标志发布到***存储器,并且CPU可以读取标志并使用CXL.mem语义访问数据,即使数据可能仍然在CXL.io路径1005中飞行。因此,当前CXL***中的所有事务都将通过根端口(例如,在处理器中)进行路由。然而,本公开内容的各个方面可以允许PCIe设备1004直接访问附接到加速器1010b(或另一CXL设备)的存储器,而不需要首先经过根端口。
此外,现有的排序模型可能导致PCIe层级中的存储效率低下(因为写入和读取/完成是序列化进行的),和/或根端口(Root Port)中的一致性结构(例如,在CPU内部以及在缓存相干链路(例如,连接CPU插槽1002的互连1003)中)中的存储效率低下。根端口通常具有写入缓存(有时可被称为“Wr$”),以输送通过写入-通告FIFO(WPF-通告)而来的写入。如果地址是到相干空间的,则根端口可以在完成任何IOTLB转换之后,一进入WPF就预提取(RFO)条目,以隐藏先写再写排序要求。这样,假设获得了所有权,则WPF的头部处的条目可被立即写入到写入缓存。如果地址在另一个插槽上,则这可能涉及一致性结构内部的两个事务以及外部链路(例如,互连1003)。例如,RFO(T1)之后可能是所有权转移(T2)。这可以由图10中的虚线路径4示出。在存储器写入到达WPF的顶部之后,写入缓存执行回写(T3),并且仅在得到WB的确认(ack)之后才放弃缓存线(T4)。这由图10中的虚线路径5示出。如果写入缓存中的任何条目被窥探出,则整个WPF停滞,因为与被窥探出的条目相对应的写入到达WPF的头部,并且写入缓存在它可以处理下一条目之前执行RFO、T1和T2。类似地,如果写入是对非相干空间的,例如,点对点(P2P)访问,则在写入处于WPF的顶部时发生停滞。WPF的顶部处的停滞导致PCIe接口中的写入带宽下降。另一个挑战可能是由于数据速率每一代都持续翻倍,写入缓存大小和相干结构带宽需求(以及因此,功耗)随着PCIe中的更高带宽而上升。
一些上述的低效率先前已经通过诸如RO和IDO之类的属性被解决。然而,虽然RO和IDO可能有助于在一些情况下提高效率,但是它们仍然没有解决关于图9-图10描述的使用模型(例如,非树状互连和CXL p2p)及其性能和/或存储的不足。
本公开的各方面可以通过允许在设备互连(例如,基于PCIe或CXL的设备互连)中的非默认(例如,非VC0)流量信道上进行源排序来克服这些或其他限制。现有的生产者-消费者排序模型可以仍然普遍保留。然而,在某些实施例中,源可能需要在写入标志之前实施数据写入的全局可见性。VC0信道可以继续具有传统的PCIe排序规则(例如,表1中的那些),但除了基于IDO的排序之外,还可以通过基于流的排序来进一步增强。例如,在一些实施例中,一个或多个源排序的虚拟信道可以包括请求和响应流控制类,其中事务不按顺序完成,以针对诸如CXL之类的协议实现替代路径和/或优化。此外,在一些实施例中,可以添加基于流标识符(Stream ID(流ID))的路由,以增强基于IDO的排序和完成合并属性,以便与流ID一起使用。还可以包括对上述两者的额外排序,以实施一些风格(flavor)的生产者-消费者排序。通过这种方式,本公开的实施例可以实现高带宽设备互连,并具有低存储和低功耗。
具体地,本公开的某些实施例可以实施以下规则中的一个或多个。首先,可以通过软件来启用非默认VC(例如,“非0VC”,如VC1......VCn),以按照本文所述的源排序模型来运载事务的流量。因此,设备必须支持多个VC以使该特征可行。其次,运载流量的非0VC可以实施事务的两个流控制类:(1)“请求”,其将映射到NP FC类,以及(2)“完成”,其将映射到Cpl FC类。一组新的写入事务(当前PCIe规范下的“通告”(P)事务)可以被映射到“请求”类,从而映射到“NP”FC类,或者映射到“P”FC类但需要完成。例如,该新的VC中的传统通告事务(包括例如存储器写入事务)可以使“要求通告完成”属性设置为1b,或者可以利用新TLP编码以用于要求完成的新类别的“流式写入(Streamed Write)”。该新类型的TLP还可以包括“允许合并完成”属性值,当其被设置为1b时,允许完成者或任何交换实体将具有同一流ID(下文进一步定义)、请求者ID(源)和PASID(如果存在)的多个完成进行组合,以与数字递增相结合。为了简单性和易于验证,在一些实施例中,可以仅映射流式写入事务以在此处使用。如果使用现有的存储器写入TLP类型(而不是新的流式写入TLP类型),则标签字段的两个较高位、两个保留位、或1个标签字段位和1个保留位的组合可被用于指示新的源排序的事务类型。在其他情况下,可以创建不同的TLP,其值(例如,格式和/或类型值)指示与已知存储器写入TLP不同的TLP类型(例如,0101_1100b用于具有完成但没有完成合并的流式写入TLP,0101_1101b用于具有完成但启用完成合并的流式写入TLP,例如,在PCIe 6.0规范中,代替用于PCIe存储器写入TLP的0100_0000b)。在该方法中,属性字段(RO、IDO、NS)可被保留以供未来使用。读取事务可以遵循与以前相同的格式,并相应地被置于NP FC类中。
用于到达NP FC类的传统通告事务(例如,存储器写入事务或流式写入事务)的完成在完成(Cpl)FC类中被从完成者发送到请求者。在一些情况下,可以使用相同的3DW格式来创建单独的完成事务流式写入完成(Streamed Write Completion),其保留类型不是已知完成值的保留类型(例如,针对Cpl和CplD PCIe TLP,是0000_1100b而不是0000_1010b或0100_1010b),但使用“字节计数”来指示归因于合并的完成的数量(无合并意味着计数为1),并使用标签字段来指示正在完成的流ID。不成功的完成使用与常规完成相同的格式(例如,OHC字段),并且不允许合并。对于成功的完成,较低地址(LA)字段可被保留(Reserved),而不成功的完成将使字段填充有较低地址位。在某些实施例中,可以要求请求者无条件地响应于其请求而排出(drain)完成。类似地,可以要求完成者消耗流式写入事务(如果映射到“P”(或NP写入(NP Write),如果写入被映射到NP)),并且如果需要则为其生成相关联的完成,只要在其出站完成队列中有空间。这确保***向前推进,因为只有NP(或P)->Cpl的依赖关系,并且Cpl无条件地排出。
在一些实施例中,在NP和Cpl FC类之间不实施排序,并且在每个FC类中的事务之间没有排序。因此,NP类中的每个事务将有效地被视为“RO”=1。
流ID可以在每个通告事务的标签字段中指示。属于传输的数据部分的多个写入可以具有相同的非0标签。源设备被允许将完成合并属性设置为1b,并跟踪流中的未完成事务的数量。当那些事务完成时,它可以更新标志。生产者-消费者排序被执行的方式是源通过接收针对属于流的所有数据的完成来确保数据是全局可观察的。
每个设备/组件可以具有公告对上述特征的支持的能力结构。此外,基于PCIe的层级中的位于任何源-目的地对之间的每个设备必须能够支持本文所述的排序规则,然后软件才能开启。例如,参考图9的示例***900,如果PCIe设备904b想要将本文描述的排序规则应用于通过交换机906或替代直接链路905(例如,PCIe+)的从PCIe设备904b到***存储器的DMA写入、或对PCIe设备904d的P2P,则PCIe交换机906、PCIe设备904b、PCIe设备904d和CPU 902都必须支持该特征。然而,仍参考图9的示例***900,如果PCIe设备904b想要执行对PCIe设备904c的P2P写入并且设备904c不支持该特征,则它必须通过遵循传统PCIe排序规则(例如,表1所示的那些)的VC(例如,VC0)来进行P2P。
可以在每个设备中定义控制和状态配置寄存器组,其报告针对任何给定目的地(或所有目的地)的所有未完成的事务。控制寄存器可以指示暂停(quiesce)去往给定目的地(或所有目的地)的新的未完成NP/P事务,并且当所有已经未完成的NP/P事务接收到完成时,设置“暂停状态”位。暂停要求可以放宽,以完成与任何正在进行的预定流ID相关联的当前传输。
具有到目的地的多条路径的设备(例如,图9中的通过CPU 902去往***存储器的上游方向中的示例交换机906)可以使用基于<目的地ID(Dest ID),PASID,流ID(StreamID)>的路由算法。它可以是基于流ID的低阶位的简单方法(例如,偶数流ID去往CPU0并且奇数流ID去往CPU1),或者更复杂的方法,例如,n位的使能寄存器来涵盖<目的地ID,PASID,流ID>,其中相应的使能位位置中的1b意味着该位对路由决策有贡献,并然后将所有有贡献的位利用取模运算来相加以决定发送事务的链路号。例如,如果选择目的地ID的[0,5,8]位和流ID的0、5位,则5位实体{目的地ID[8],目的地ID[5],目的地ID[0],流ID[5],流ID[0]}将被用来确定链路号。如果存在两个链路,则这些位的XOR确定在其上发送事务的链路。如果存在3个链路,则可以通过(目的地ID[8]+目的地ID[5]+目的地ID[0]+流ID[5]+流ID[0])对3取模(mod)来确定路由。
表2a-2b示出了根据本公开实施例的排序和绕过表。如所示出的,本文所述的非VC0 NP事务可以绕过其他NP事务以及Cpl事务,并且本文所述的非VC0 Cpl事务可以绕过其他Cpl事务以及NP事务。在表2a中,存储器读取(Memory Read)和新类型的存储器写入(流式写入)都被映射到NP FC中。在表2b中,现有的三个FC类被保留,并且读取和写入被分开。
行穿过列? NP FC Cpl FC
NP FC 允许 允许
Cpl FC Yes 允许
表2a:示例基于PCIe的排序规则(如果新的写入被映射到NP)
表2b:示例基于PCIe的排序规则,如果新的写入被映射到P
上述源排序的信道可被一定程度增强,以使得源不需要在通告标志(“部分源排序(Partially Source-Ordered)”)之前等待所有数据的完成。在该机制中,即使对于新定义的存储器写入事务,{RO,IDO}属性也有相同的含义。表2的排序规则将被一定程度收紧,如下表3所示。除此以外,较早描绘的一组规则也适用。
表3:其他示例基于PCIe的排序规则
表3中的注释如下:(1)RO=0b的存储器写入不能绕过具有同一<请求者ID,PASID(如果存在),流ID>的先前存储器写入。标志(Flag)写入可以具有RO=0b并且数据可以具有RO=1b;(2)存储器读取不能绕过来自同一<请求者ID,PASID(如果存在)>的具有重叠地址的先前存储器写入。这确保读取获得最后的写入;以及(3)RO=0b的存储器写入不能绕过具有同一<请求者ID,PASID(如果存在),流ID>的先前存储器读取。这确保超越生产者-消费者的更强排序。
表3的排序规则可以允许设备向***存储器写入数据/标志,以及任何存储器映射的I/O访问,这些访问发生为作为同一流ID的一部分的根端口上的点对点(P2P)。由于根端口通过访问其本地缓存来处理全局可观察性,因此所有相干的存储器实际上是同一目的地。任何P2P访问也由根端口处理-一旦它被放置在出口PCIe链路中的出站NP FC中,排序就被提交。因此,第一设备可以在***存储器和/或第二设备的存储器中写入数据来作为RO写入,并然后发送RO=0b的标志。根端口将确保从同一<请求者ID,PASID,流ID>到***存储器的所有先前写入都是全局可见的,并且任何P2P写入获得完成。该场景的示例在下面关于图11进一步描述。
如果来自设备的数据/标志组合是通过根端口的一些访问(如上所述)以及通过不经过CPU的P2P(例如,图9中的PCIe设备904b到PCIe设备904d或图10中的CXL.io路径1005)的一些访问的混合,则请求者仍然可以利用根端口侧的优化以及任何其他实体(例如,单独地提供上面的优化的交换机),并等待来自两者的最终完成,然后提交标志。
传统PCIe不支持、但是由于上述表3中的注释/限制3而从计算的角度来看非常重要的新型排序如下表4-6所示。
在下面表4所示的示例场景中,在所示指令被执行之前,存储器位置A和B初始地具有存储在其中的值a和b。位置A的值可以代表“数据”,而位置B的值可以代表“标志”,其指示对A的数据写入完成。在该场景下,读取的合法结果是(a,b)、(a’,b)和(a’,b’),而(a,b’)将不是合法的结果,因为写入请求通常不能绕过其他写入请求。因此,如果设备2读取b’(即更新的标志),则它被保证读取a’(即更新的数据)。该场景可以代表典型的用于传递数据的生产者-消费者模型。
表4
在下面表5所示的示例场景中,在所示指令被执行之前,存储器位置A和B初始地具有存储在其中的值a和b。在该场景下,读取的合法结果是(a,b’)、(a’,b)和(a’,b’),而(a,b)将不是合法的结果,因为读取请求通常不能绕过写入请求。在该场景下,两个进程可以使用A和B作为完成的指示,并且可以暂停它们自己,以便在后进程可以唤醒在前进程以进行会合。因此,(a,b)将意味着这两个进程将等待对方并且永远不会出现。虽然这可能不代表典型的用于数据传递的生产者-消费者模式,但这可以通过某些PCIe排序规则得到支持。
表5
在下面表6所示的示例场景中,在所示指令被执行之前,存储器位置A和B初始地具有存储在其中的值a和b。在该场景下,读取的合法结果是(a,b),(a’,b)和(a,b’),而(a’,b’)将不是合法的结果。该场景可以代表传统信号量(semaphore)进入临界区域,并且PCIe实施方式不会通过当前的排序规则来执行这一点。然而,本公开的各个方面可以允许该场景,例如,在设备使用同一流ID的情况下(如上所述)。
表6
在许多情况下,本公开的实施例可有助于减少基于PCIe的互连的根端口(例如,CPU内的内部结构)中以及CPU-CPU链路上的带宽消耗,同时提供额外的性能。
图11示出了根据本公开实施例的实施源排序规则的示例***1100。示例***1100包括经由UPI 1101耦合的两个处理器插槽1102、1122。每个插槽包括存储器控制器(例如,1104、1126)、归属代理(例如,1106、1126)、缓存代理商代理(例如,1108、1128)、写入缓存(例如,1110、1130)和流控制缓冲器(例如,1112(下行链路)、1114(上行链路)、1132(下行链路)和1134(上行链路))。插槽1102通过基于加载-存储输入/输出(I/O)协议或存储器映射I/O协议(例如,PCIe协议、CXL.io协议或另一类型的负载-存储I/O协议)的链路连接到设备1140,并且插槽1122通过另一基于加载-存储I/O或存储器映射I/O的链路连接到设备1150。图11的左侧示出了应用于来自设备1140的事务的当前的基于PCIe的排序规则的示例,而图11的右侧示出了应用于来自设备1150的事务的根据本公开的基于PCIe的排序规则。
在当前的基于PCIe的排序规则下,数据缓存线D0至D60以及标志(Flag)中的每一个具有写入缓存1110中的条目。每个写入具有从写入缓存1110到本地缓存代理商代理1108/归属代理1106(并且可能在UPI 1101上)的所有权请求(RFO),其得到所有权(Ownership)响应。在写入缓存1110中的写入之后,写入缓存1110对本地缓存代理商代理1108/归属代理1106(并且可能在UPI 1101上)执行回写(WB),然后得到WB的完成(Cmpl)。然后从写入缓存1110释放缓存线。因此,在当前的排序规则下,假设没有窥探或冲突,每个触及缓存线的写入都产生四个事务。
相比之下,利用本公开的实施例,只有标志(Flag)和不同数据(例如,可以在传统排序规则下发送的D0”’)需要写入缓存1130中的条目。标志和不同数据可以遵循上述的4事务流,因为它们的RO=0。所有具有D0’、D1’、...D60’、在特殊非0VC中具有RO=1的数据,将被直接递送到目的地归属代理(Home Agent)(例如,本地归属代理1126,但也可以是远程归属代理,例如,插槽1102的归属代理1106)或P2P目的地,需要后跟完成的写入。因此,在该场景下,利用所提出的排序规则只需要两个事务。完成可以被组合,摊销(amortize)具有同一流ID的完成。所有这些事务可以在单独结构中被进行跟踪,例如,标志和通告***(Flagand Posted Tracker)1135。标志写入将在写入去往缓冲器1134的WPF的头部时已被预提取。如果所有的具有同一流ID(例如,请求者ID、PASID)的先前写入事务尚未完成,则可以将写入移到一旁的***1135,以便后续的通告事务不被阻挡。一旦标志写入完成,则所有62个事务的完成可以作为一个完成被发送到请求者(即字节计数字段=62)。
再次参照图10,如果PCIe设备1004是传统PCIe设备,并且CXL交换机1006需要将来自PCIe设备1004的流量转换为CXL.io流量,该CXL.io流量的目的地为CXL设备、或者在本文所述的新的无序非0VC中被发送至PCIe设备或另一具有新的非0VC的交换机,直至目的地PCIe/CXL设备,则可能存在两组替代规则,它们可用于确保传统的生产者-消费者排序模型仍然可被执行,即使数据和标志在不同的目的地。应注意,这两组规则可被同时实施,只要一组被应用于流。
第一组规则包括以下内容。如果通告事务是RO(=1b)事务或基于IDO的排序,则使用非通告语义在新的非0VC上(或CXL.io上)发送该事务。如果使用IDO,则交换机(例如,1006)在每个请求者ID/PASID(如果使用的话)的基础上跟踪未完成事务的数量,或者如果使用RO,则只跟踪未完成事务的数量。如果出现RO=0b并且IDO=0b的通告事务,则交换机可以确保它具有的来自非0VC的所有先前未完成的通告事务已经完成。如果PCIe排序规则(例如,上面表1中的那些)允许,则可以允许交换机将该事务移至旁边队列(例如,类似于图11的标志和通告***1135)以允许后续事务绕过。如果出现RO=0b并且IDO=1b的通告事务,则交换机可以确保非0VC中的来自同一源的所有先前未完成的通告事务已经完成。如果PCIe排序规则(例如,上面表1中的那些)允许,则可以允许交换机将该事务移至旁边队列以允许后续事务绕过。任何非通告或完成事务必须确保非0VC中的所有适用的未完成事务已经完成,与表1的规则一致。
虽然上述规则扩展良好,但由于交换机在转发之前必须等待所有先前的写入完成,会导致性能下降。例如,再次参照图10,如果PCIe设备1004在RO=0并且IDO=0的情况下发出写入,则每个写入将被停滞,直到接收到完成之后再转到下一写入。
相应地,在某些情况下可以采用以下机制。如果交换机和所有设备(包括主机处理器)可以转发传统的PCIe/CXL.io写入以支持该机制,则软件可以启用该机制。首先,任何具有传统的生产者-消费者语义的写入可以利用生产者-消费者语义而被原样转发到目的地(例如,在图10中,来自PCIe设备1004的VC0存储器写入将使用非0VC中的CXL.io被转发到加速器1010b)。写入将具有非0标签,交换机入口端口将跟踪该非0标签。目标设备(例如,加速器1010b)可以使用VC1中的Cpl_Posted命令为写入发送回完成,该命令具有交换机需要拦截和终止的原始TC(例如,TC0),标志着未完成写入的完成。在一些情况下,可以使用RO=1的属性字段,因为具有完成的存储器写入具有保留的属性字段。
去往不同目的地的、需要相对于先前的通告事务(来自不同目的地的仍未完成的)进行排序的任何写入、或完成、或非通告事务可以利用非0标签被转发到其新目的地,该非0标签指示它在提交到全局可观察性之前必须等待新的非0VC中的后续写入。这确保接收端口(例如,根端口)可以进行其他处理(例如,IOTLB转换、RFO、等待先前写入被提交),直到提交到达为止。
交换机可以在接收到所有先前的完成之后,使用上述通告写入的标签在新的非0VC中发送具有完成的存储器写入。这向写入的目的地指示它可以被提交用于全局可见性。写入目的地必须无条件地消耗该具有完成的存储器写入,并且不阻止该信道的后续写入。这避免了产生与不同信道中的通告(P)FC的依赖关系。
每个设备可以公告它可以无条件地消耗多少个这样的具有完成的存储器写入(例如,每个条目可被实现为2位向量:一位用于跟踪标签是否已经进入新的非0VC,并且另一位用于调度完成返回,如上所述)。交换机可被编程为对于每个目的地保持在该限制内。如果相应的具有完成的存储器写入已经到达,则传统的通告(P)FC中的存储器写入可以变为全局可观察的。在此之后,设备使用与上述相同的事务向交换机调度完成返回。去往不同目的地的、需要相对于先前的通告事务进行排序的任何完成或非通告必须等待,直到完成到达为止。
图12示出了根据本公开实施例的构建存储器写入请求TLP的示例过程1200的流程图。示例过程中的操作可以由在链路上发送或接收分组(例如,PCIe TLP或其他类型的数据分组)的设备的硬件组件(例如,协议栈电路)来执行。在一些实施例中,计算机可读介质可被编码有指令(例如,计算机程序),该指令实施示例过程中的一个或多个操作。示例过程可以包括额外的或不同的操作,并且这些操作可以按所示顺序或按另一顺序执行。在一些情况下,图12所示的一个或多个操作被实现为包括多个操作、子过程、或其他类型的例程的过程。在一些情况下,操作可以被组合、以另一顺序执行、并行执行、迭代、或以其他方式重复或以另一种方式执行。
在1202,接收到在设备互连链路上发起一个或多个存储器写入事务的请求。如本文所使用的,存储器写入事务可以指加载-存储输入/输出(I/O)协议或存储器映射I/O协议(例如,PCIe协议、CXL.io协议或另一类型的加载-存储I/O协议)中的写入事务。例如,存储器写入事务可以是基于PCIe的存储器写入事务或流式写入事务,如上所述。
在1204,基于(一个或多个)存储器写入事务构建(一个或多个)存储器写入请求TLP。该(一个或多个)存储器写入请求TLP在(一个或多个)TLP的字段中指示除VC0以外的虚拟通道(VC)(非0VC)、响应于存储器写入事务需要完成、以及与(一个或多个)存储器写入事务相关联的流标识符(流ID)。流ID可以指示两个设备之间的特定数据流,即多个存储器写入请求TLP可以指示同一流ID。例如,存储器写入请求TLP可被格式化为存储器写入TLP类型或流式写入TLP类型。
在一些实施例中,关于响应于存储器写入事务需要完成的指示被包括在存储器写入请求TLP的标签字段的两个较高位、存储器写入请求TLP的两个保留位、或存储器写入请求TLP的1个标签字段位和1个保留位的组合中。在一些实施例中,关于响应于存储器写入事务需要完成的指示被包括在存储器写入请求TLP的一个或多个字段(例如,格式和/或类型字段)中(例如,对于具有完成但没有完成合并的存储器写入具有值0101_1100b,并且对于具有完成但启用完成合并的存储器写入具有值0101_1101b)。在一些实施例中,流标识符在存储器写入请求TLP的标签字段中被指示。在一些实施例中,存储器写入请求TLP进一步包括指示完成合并被允许的字段(例如,完成者可以针对与同一流ID相关联的多个存储器写入请求TLP发送一个完成)。
在1206,(一个或多个)存储器写入请求TLP在基于PCIe的链路上被发送。(一个或多个)存储器写入请求TLP可以由链路上的发送和接收设备使用非通告事务类型缓冲器(例如,图8所示并且上文描述的“NP”缓冲器)来跟踪,而不是通常跟踪存储器写入请求所用的通告事务类型缓冲器。
在1208,基于/响应于在1206处发送的(一个或多个)存储器写入请求TLP而接收完成TLP。完成TLP的一个或多个字段指示该完成TLP与存储器写入请求相关联。例如,完成TLP的格式和/或类型字段可以指示值0000_1100b,表示这是针对典型地为“通告”事务(例如,PCIe或CXL互连环境中的存储器写入事务)的事务的完成。在一些实施例中,完成TLP指示针对第一和第二存储器写入请求TLP的完成。例如,完成TLP的标签字段可以指示与多个存储器写入请求TLP(例如,具有同一流ID的那些)相关联的流标识符,和/或完成TLP的字节计数字段可以指示该完成TLP所指示的完成的数量。
上述公开内容已经介绍了用于在基于PCIe的互连中实现高效源排序的多个示例技术。应理解,此类技术可以应用于其他互连协议。例如,虽然本文所讨论的一些技术是参照基于PCIe或CXL的协议来描述的,但应理解,这些技术可以适用于其他互连协议,例如,OpenCAPITM、Gen-ZTM、UPI、通用串行总线(USB)、用于加速器的缓存相干互连(CacheCoherent Interconnect for Accelerators,CCIXTM)、高级微器件(Advanced MicroDeviceTM,AMDTM)的InfinityTM、公共通信接口(Common Communication Interface,CCI)或QualcommTM的CentriqTM互连等,或者其他类型的基于分组的协议。
注意,上述装置、方法和***可以在上述的任何电子设备或***中实现。作为具体说明,以下附图提供了用于利用如本文所述的实施例的示例性***。随着下面的***被更详细地描述,一些不同的互连被公开、描述,并从上面的讨论中重新审视。此外明显地,上述的进展可以应用于任何这些互连、结构或架构。
参照图13,描绘了包括多核心处理器的计算***的框图的实施例。处理器1300包括任何处理器或处理设备,例如,微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持处理器、应用处理器、协处理器、片上***(SOC)、或用于执行代码的其他设备。在一个实施例中,处理器1300包括至少两个核心(核心1301和1302),这些核心可以包括不对称核心或对称核心(所示实施例)。然而,处理器1300可以包括任何数量的可以是对称的或非对称的处理元件。
在一个实施例中,处理元件指的是硬件或支持软件线程的逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、核心、和/或能够保持处理器的状态(例如,执行状态或架构状态)的任何其他元件。换言之,在一个实施例中,处理元件指的是任何能够与代码(例如,软件线程、操作***、应用、或其他代码)独立地相关联的硬件。物理处理器(或处理器插槽)通常指的是集成电路,该集成电路可能包括任何数量的其他处理元件,例如,核心、或硬件线程。
核心通常指的是位于能够维持独立架构状态的集成电路上的逻辑,其中每个独立维持的架构状态与至少一些专用执行资源相关联。相比于核心,硬件线程通常指的是位于能够维持独立架构状态的集成电路上的任何逻辑,其中独立维持的架构状态共享对执行资源的访问。如图所示,当某些资源被共享并且其他资源专用于架构状态时,硬件线程的命名法与核心之间的界线重叠。然而通常,核心和硬件线程***作***视为单独的逻辑处理器,其中操作***能够单独地调度每个逻辑处理器上的操作。
如图13所示,物理处理器1300包括两个核心,核心1301和1302。这里,核心1301和1302被认为是对称核心,即具有相同的配置、功能单元和/或逻辑的核心。在另一实施例中,核心1301包括乱序处理器核心,而核心1302包括有序处理器核心。然而,可以从任何类型的核心(例如,原生核心、软件管理核心、适于执行原生指令集架构(ISA)的核心、适于执行经转换指令集架构(ISA)的核心、协同设计的核心、或其他已知核心)中单独选择核心1301和1302。在异构核心环境(即非对称核心)中,一些形式的转换(例如,二进制转换)可以被用于调度或执行在一个或两个核心上的代码。然而,为了进行进一步的讨论,以下还详细描述了核心1301中所示的功能单元,因为核心1302中的单元在所描述的实施例中以相似的方式进行操作。
如所描绘的,核心1301包括两个硬件线程1301a和1301b,它们也可以被称为硬件线程插槽1301a和1301b。因此,在一个实施例中,软件实体(例如,操作***)可以将处理器1300视为四个单独的处理器,即能够并发地执行四个软件线程的四个逻辑处理器或处理元件。如以上所提及的,第一线程与架构状态寄存器1301a相关联,第二线程与架构状态寄存器1301b相关联,第三线程可以与架构状态寄存器1302a相关联,并且第四线程可以与架构状态寄存器1302b相关联。这里,每个架构状态寄存器(1301a、1301b、1302a和1302b)都可以称为处理元件、线程槽或线程单元,如上所述。如图所示,架构状态寄存器1301a被复制到架构状态寄存器1301b中,因此能够为逻辑处理器1301a和逻辑处理器1301b存储单独的架构状态/上下文。在核心1301中,还可以为线程1301a和1301b复制其他较小的资源,例如,分配器和重命名器块1330中的指令指针和重命名逻辑。一些资源(例如,重排序/引退单元1335中的重排序缓冲器、ILTB 1320、加载/存储缓冲器、以及队列)可以通过分区来共享。其他资源(例如,通用内部寄存器、(一个或多个)页表基址寄存器、低级数据缓存和数据TLB 1350、(一个或多个)执行单元1340、以及乱序单元1335的部分)可被充分地共享。
处理器1300通常包括其他资源,这些资源可以被充分地共享,通过分区来共享、或者由处理元件专用/专用于处理元件。在图13中,示出了具有处理器的说明性逻辑单元/资源的纯示例性的处理器的实施例。注意,处理器可以包括或省略这些功能单元中的任何功能单元,并且可以包括未描述的任何其他已知的功能单元、逻辑或固件。如图所示,核心1301包括经简化的、代表性的乱序(Out-of-Order,OOO)处理器核心。但在不同实施例中可以利用有序处理器。OOO核心包括分支目标缓冲器1320以预测要被执行/采用的分支,以及指令转换缓冲器(I-TLB)1320以存储指令的地址转换条目。
核心1301还包括解码模块1325,其耦合到提取单元1320以对提取的元素进行解码。在一个实施例中,提取逻辑包括分别与线程槽1301a、1301b相关联的单独的定序器。通常,核心1301与第一ISA相关联,该第一ISA定义/指定在处理器1300上可执行的指令。通常,作为第一ISA的一部分的机器代码指令包括指令的一部分(被称为操作码),该指令的一部分引用/指定将被执行的指令或操作。解码逻辑1325包括从指令的操作码中识别这些指令,并且将经解码的指令传递到管线中以用于如第一ISA所定义的处理的电路。例如,如以下更详细地讨论的,在一个实施例中,解码器1325包括被设计为或者适于识别特定指令(例如,事务指令)的逻辑。作为由解码器1325的识别的结果,架构或核心1301采取特定的、预先定义的动作来执行与合适的指令相关联的任务。重要的是注意,本文中所描述的任何任务、块、操作和方法都可以响应于单个或多个指令来执行;其中一些指令可以是新的或旧的指令。注意,在一个实施例中,解码器1326识别同一ISA(或者其子集)。替代地,在异构核心环境中,解码器1326识别第二ISA(第一ISA的子集或不同的ISA)。
在一个示例中,分配器和重命名器块1330包括用于保持资源的分配器,例如,用于存储指令处理结果的寄存器堆。然而,线程1301a和1301b潜在地能够乱序执行,其中,分配器和重命名器块1330还保持其他资源,例如,用于追踪指令结果的重排序缓冲器。单元1330还可以包括寄存器重命名器,用于将程序/指令参考寄存器重命名为处理器1300内部的其他寄存器。重排序/引退单元1335包括诸如上文所提到的重排序缓冲器、加载缓冲器、以及存储缓冲器之类的组件,以支持乱序执行以及之后的乱序执行的指令的有序引退。
在一个实施例中,调度器和(一个或多个)执行单元块1340包括用于调度执行单元上的指令/操作的调度器单元。例如,浮点指令在具有可用的浮点执行单元的执行单元的端口上被调度。与执行单元相关联的寄存器堆也被包括以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元和其他已知的执行单元。
较低级数据缓存和数据转换缓冲器(D-TLB)1350耦合到(一个或多个)执行单元1340。数据缓存用于存储最近使用/操作的元素,例如,数据操作数,其可能被保持在存储器一致性状态中。D-TLB用于存储最近的虚拟/线性的到物理地址的转换。作为特定示例,处理器可以包括用于将物理存储器分成多个虚拟页的页表结构。
这里,核心1301和1302共享对较高级或较远离缓存(例如,与片上接口1310相关联的第二级缓存)的访问。注意,较高级或较远离指的是从(一个或多个)执行单元增加或远离(一个或多个)执行单元的缓存等级。在一个实施例中,较高级缓存是最后一级数据缓存(处理器1300上的存储器层级中的最后一级缓存),例如,第二级或第三级数据缓存。然而,较高级缓存并不如此限制,因为其可以与指令缓存相关联或者包括指令缓存。相反,可以在解码器1325之后耦合跟踪缓存(一类指令缓存)来存储最近解码的跟踪。这里,指令可能指的是宏指令(即由解码器识别的一般指令),该宏指令可以被解码成多个微指令(微操作)。
在所描绘的配置中,处理器1300还包括片上接口模块1310。以往,以下更详细地描述的存储器控制器已经被包括在处理器1300外部的计算***中。在这种场景中,片上接口1310用于与处理器1300外部的设备进行通信,例如,***存储器1375、芯片组(通常包括连接至存储器1375的存储器控制器集线器、以及连接***设备的I/O控制器集线器)、存储器控制器集线器、北桥、或其他集成电路。此外,在这种场景中,总线1305可以包括任何已知的互连,例如,多点分支总线(multi-drop bus)、点对点互连、串行互连、并行总线、相干(例如,缓存相干)总线、分层协议架构、差分总线、以及GTL总线。
存储器1375可以专用于处理器1300或者与***中的其他设备共享。存储器1375的类型的常见示例包括DRAM、SRAM、非易失性存储器(NV存储器)、以及其他已知的存储设备。注意,设备1380可以包括图形加速器、耦合到存储器控制器集线器的处理器或卡、耦合到I/O控制器集线器的数据存储装置、无线收发器、闪存设备、音频控制器、网络控制器或其他已知设备。
然而最近,随着更多逻辑和设备被集成在单个管芯(例如,SOC)上,这些设备中的每一者可以被并入在处理器1300上。例如,在一个实施例中,存储器控制器集线器与处理器1300位于同一封装和/或管芯上。这里,核心1301的一部分(核心上部分)包括一个或多个控制器,用于与诸如存储器1375或图形设备1380之类的其他设备相接口。包括用于与这样的设备相接口的互连和控制器的配置通常被称为核心上(或非核心配置)。作为示例,片上接口1310包括用于片上通信的环形互连、以及用于片外通信的高速串行点对点链路1305。然而,在SOC环境中,甚至更多设备(例如,网络接口、协处理器、存储器1375、图形处理器1380和任何其他已知的计算机设备/接口)可被集成在单个管芯或集成电路上,以提供具有高功能性和低功耗的小形状因子。
在一个实施例中,处理器1300能够执行编译器、优化、和/或转换器代码1377来对应用代码1376进行编译、转换和/或优化,以支持本文所述的装置和方法或者与其相接口。编译器通常包括用于将源文本/代码转换成目标文本/代码的程序或程序集合。通常,使用编译器来编译程序/应用代码在多个阶段和多次中完成,以将高级编程语言代码转换成低级机器或汇编语言代码。然而,单次编译器仍可以用于简单的编译。编译器可以利用任意已知的编译技术并且执行任意已知的编译器操作,例如,词汇分析、预处理、解析、语义分析、代码生成、代码转换和代码优化。
较大的编译器通常包括多个阶段,但这些阶段通常被包括在两个一般阶段中:(1)前端,即通常可以发生句法处理、语义处理和一些转换/优化的阶段,以及(2)后端,即通常发生分析、转换、优化和代码生成的阶段。一些编译器引用中间阶段,其说明了对编译器的前端与后端之间的划定的模糊。结果,对编译器的***、关联、生成或其他操作的引用可以发生在编译器的任意前面提及的阶段或次数、以及编译器的任何其他已知的阶段或次数中。作为说明性示例,编译器可能在编译的一个或多个阶段中进行***操作、调用、功能等,例如,在编译的前端阶段中***调用/操作,并且然后在转换阶段期间将调用/操作转换成较低级代码。注意,在动态编译期间,编译器代码或动态优化代码可以***这样的操作/调用,以及优化代码以供在运行时期间执行。作为特定的说明性示例,可以在运行时间期间动态地优化二进制代码(已经编译的代码)。这里,程序代码可以包括动态优化代码、二进制代码、或其组合。
类似于编译器,转换器(例如,二进制转换器)静态或动态地对代码进行转换以优化和/或转换代码。因此,对代码、应用代码、程序代码或其他软件环境的执行的引用可以指:(1)动态或静态地执行(一个或多个)编译器程序、优化代码优化器、或转换器,以编译程序代码、维护软件结构、执行其他操作、优化代码或转换代码;(2)执行包括操作/调用的主程序代码,例如,已经优化/编译的应用代码;(3)执行与主程序代码相关联的其他程序代码(例如,库),以维护软件结构、执行其他软件相关操作、或优化代码;或者(4)它们的组合。
现在参考图14,示出了根据本公开实施例的另一***1400的框图。如图14所示,多处理器***1400是点对点互连***,并且包括经由点对点互连1450耦合的第一处理器1470和第二处理器1480。处理器1470和1480中的每一者可以是某一版本的处理器。在一个实施例中,1452和1454是串行点对点相干互连结构(例如,高性能架构)的一部分。因此,本公开的各方面可以在QPI架构内实现。
虽然仅示出了两个处理器1470、1480,但将理解,本公开的范围不限于此。在其他实施例中,一个或多个附加的处理器可以存在于给定处理器中。
处理器1470和1480被示为分别包括集成存储器控制器单元1472和1482。处理器1470还包括作为其总线控制器单元的一部分的点对点(P-P)接口1476和1478;类似地,第二处理器1480包括P-P接口1486和1488。处理器1470、1480可以使用点对点(P-P)接口电路1478、1488经由P-P接口1450来交换信息。如图14所示,IMC 1472和1482将处理器耦合到相应的存储器,即存储器1432和存储器1434,该存储器1432和存储器1434可以是本地附接到相应的处理器的主存储器的一些部分。
处理器1470、1480各自使用点对点接口电路1476、1494、1486、1498经由各个P-P接口1452、1454与芯片组1490交换信息。芯片组1490还经由接口电路1492、沿着高性能图形互连1439来与高性能图形电路1438交换信息。
共享缓存(未示出)可以被包括在任一个处理器中或者在两个处理器之外;还经由P-P互连与处理器连接,使得如果处理器被置于低功率模式下,则可以将任一个或两个处理器的本地缓存信息存储在共享缓存中。
芯片组1490可以经由接口1496耦合到第一总线1416。在一个实施例中,第一总线1416可以是***组件互连(PCI)总线,或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但本公开的范围不限于此。
如图14所示,各种I/O设备1414与总线桥1418一起耦合到第一总线1416,该总线桥1418将第一总线1416耦合到第二总线1420。在一个实施例中,第二总线1420包括低引脚数(LPC)总线。在一个实施例中,各种设备耦合到第二总线1420,这些设备包括例如键盘和/或鼠标1422、通信设备1427、以及存储单元1428,例如,磁盘驱动器或通常包括指令/代码和数据1430的其他大容量存储设备。此外,音频I/O 1424被示为耦合到第二总线1420。注意,其他架构是可能的,其中所包括的组件和互连架构不同。例如,代替图14的点对点架构,***可以实现多点分支总线或其他这样的架构。
尽管已经参考有限数量的实施例描述了本公开的各方面,但本领域技术人员将理解许多修改和变型。所附权利要求旨在覆盖落入本公开的真实精神和范围内的所有这些修改和变型。
设计可以经历从创造到模拟到制造的各种阶段。代表设计的数据可以以多种方式代表设计。首先,在模拟中有用的,硬件可以使用硬件描述语言或其他功能描述语言来表示。此外,在设计过程的一些阶段,可以产生具有逻辑和/或晶体管门的电路级模型。此外,在一些阶段,大部分设计达到代表各种器件在硬件模型中的物理放置的数据水平。在使用传统半导体制造技术的情况下,代表硬件模型的数据可以是指定在用于生产集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁性或光学存储装置(例如,光盘)可以是机器可读介质,以存储经由光波或电波调制传输的信息或以其他方式产生的信息,以传输这些信息。当指示或运载代码或设计的电载波被传输时,在对电信号进行复制、缓冲或重新传输的方面,产生新的副本。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储体现本公开的实施例的技术的物品,例如,编码成载波的信息。
本文所用的模块是指硬件、软件和/或固件的任何组合。作为示例,模块包括与非暂态介质相关联的硬件(例如,微控制器),以存储被适配为由微控制器执行的代码。因此,在一个实施例中,对模块的引用是指硬件,其被具体配置为识别和/或执行将被保存在非暂态介质上的代码。此外,在另一实施例中,对模块的使用是指包括代码的非暂态介质,其被具体配置为由微控制器执行以执行预定的操作。此外,可以推断,在又一实施例中,术语模块(在该示例中)可以指微控制器和非暂态介质的组合。通常,被独立图示的模块边界通常不同并且有可能重叠。例如,第一和第二模块可以共享硬件、软件、固件或其组合,同时可能保留一些独立的硬件、软件或固件。在一个实施例中,对术语逻辑的使用包括硬件,如晶体管、寄存器,或其他硬件,如可编程逻辑器件。
在一个实施例中,对短语“被配置为”的使用是指布置、组合、制造、销售、进口和/或设计装置、硬件、逻辑或元件以执行指定或确定的任务。在该示例中,未在运行的装置或其元件仍“被配置为”执行指定任务,只要它被设计、耦合和/或互连以执行所述指定任务。作为纯说明性示例,逻辑门在运行期间可以提供0或1。但“被配置为”向时钟提供使能信号的逻辑门不包括每一个可能的可提供1或0的逻辑门。相反,该逻辑门是以以下方式耦合的逻辑门:在运行期间,1或0输出用于使能时钟。再次注意,对术语“被配置为”的使用不要求操作,而是关注装置、硬件和/或元件的潜在状态,其中在潜在状态下,该装置、硬件和/或元件被设计为在该装置、硬件和/或元件操作时执行特定任务。
此外,在一个实施例中,对短语“以”、“能够/以”和/或“可操作以”的使用是指一些装置、逻辑、硬件和/或元件被设计成能够以特定方式使用该装置、逻辑、硬件和/或元件。如上所述注意,在一个实施例中,对以、能够、或可操作以的使用是指装置、逻辑、硬件和/或元件的潜在状态,其中装置、逻辑、硬件和/或元件未在运行,但被设计成能够以特定方式使用装置。
本文使用的值包括对数字、状态、逻辑状态或二进制逻辑状态的任何已知表示。通常,对逻辑电平、逻辑值或逻辑状态的使用也称为1和0,其简单地表示二进制逻辑状态。例如,1指的是高逻辑电平,0指的是低逻辑电平。在一个实施例中,存储单元(例如,晶体管或闪存单元)能够容纳单个逻辑值或多个逻辑值。然而,也使用了对计算机***中的值的其他表示。例如,十进制数十也可表示为二进制值1010和十六进制字母A。因此,值包括对能够保持在计算机***中的信息的任何表示。
此外,状态可以由值或值的部分来表示。作为示例,第一值(例如,逻辑一)可以代表默认或初始状态,而第二值(例如,逻辑零)可以代表非默认状态。此外,在一个实施例中,术语重置和设置分别指的是默认的和更新的值或状态。例如,默认值可能包括高逻辑值,即重置,而更新值可能包括低逻辑值,即设置。注意,可以利用值的任何组合来代表任何数量的状态。
上述的方法、硬件、软件、固件或代码的实施例可以通过存储在机器可访问、机器可读、计算机可访问或计算机可读的介质上的指令或代码来实现,这些指令或代码可由处理元件执行。非暂态机器可访问/可读介质包括任何以机器(例如,计算机或电子***)可读的形式提供(即存储和/或传输)信息的机制。例如,非暂态机器可读介质包括:随机存取存储器(RAM),如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存设备;电存储设备;光存储设备;声学存储设备;用于保存从暂态(传播)信号(例如,载波、红外信号、数字信号)接收的信息的其他形式的存储设备;等,它们与可从其接收信息的非暂态介质区分开来。
用于对逻辑进行编程以执行本公开的实施例的指令可以存储在***中的存储器内,例如,DRAM、缓存、闪存或其他存储装置。此外,指令可以经由网络或通过其他计算机可读介质进行分发。因此,机器可读介质可以包括任何用于以机器(例如,计算机)可读的形式存储或传输信息的机制,但不限于软盘、光盘、光盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存,或用于经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传输信息的有形机器可读存储装置。相应地,计算机可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。
以下示例与根据本说明书的实施例相关。尽管下面描述的每个实施例是关于基于计算快速链路(CXL)的协议来描述的,但任何以下示例可用于基于PCIe的协议、基于通用串行总线(USB)的协议、用于加速器的缓存相干互连(CCIX)协议或传输控制协议/互联网协议(TCP/IP)。
示例A1是一种装置,包括:端口,用于在链路上发送和接收数据;以及协议栈电路,用于跨链路实施基于加载-存储输入/输出(I/O)的协议的一个或多个层,其中,协议栈电路执行以下操作:接收在链路上发起存储器写入事务的请求;为存储器写入事务构建存储器写入请求事务层分组(TLP),其中,存储器写入请求TLP的字段指示TLP的非默认流量类(例如,除VC0以外的虚拟信道(VC))、响应于存储器写入事务需要完成、以及与存储器写入事务相关联的流标识符;使得存储器写入请求TLP在链路上被发送;以及处理在链路上接收的完成TLP,完成TLP指示存储器写入请求TLP的完成。
示例A2包括示例A1的主题,其中存储器写入请求TLP是存储器写入TLP,并且关于响应于存储器写入事务需要完成的指示被包括在存储器写入TLP的标签字段的两个较高位、存储器写入TLP的两个保留位、或存储器写入TLP的1个标签字段位和1个保留位的组合中。
示例A3包括示例A1的主题,其中存储器写入请求TLP是流式写入TLP,并且关于响应于存储器写入事务需要完成的指示被包括在流式写入TLP的一个或多个字段中。
示例A4包括示例A3的主题,其中流式写入TLP被利用除0100_0000b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例A5包括示例A4的主题,其中流式写入TLP被利用值0101_1100b或0101_1101b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例A6包括示例A3的主题,其中协议栈电路构建与同一流标识符相关联的多个流式写入TLP,完成TLP是流式写入完成TLP,流式写入完成TLP指示多个流式写入TLP中的每一者的完成。
示例A7包括示例A6的主题,其中流式写入完成TLP被利用除0000_1010b或0100_1010b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例A8包括示例A7的主题,其中流式写入完成TLP被利用值0000_1100b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例A9包括示例A6的主题,其中完成TLP的标签字段指示与多个流式写入TLP相关联的流标识符。
示例A10包括示例A6的主题,其中完成TLP的字节计数字段指示完成TLP所指示的完成的数量。
示例A11包括示例A1-A10中任一项的主题,其中流标识符在存储器写入请求TLP的标签字段中被指示。
示例A12包括示例A1-A11中任一项的主题,其中存储器写入请求TLP还包括指示完成合并被允许的字段。
示例A13包括示例A1-A12中任一项的主题,其中存储器写入请求TLP被使用非通告事务类型缓冲器进行跟踪。
示例A14包括示例A1-A13中任一项的主题,其中协议栈电路跨链路实施基于PCIe或基于CXL的协议,并且非默认流量类指示除VC0以外的虚拟信道(VC)。
示例M1包括一种方法,包括:接收在链路上发起存储器写入事务的请求,链路实施基于加载-存储输入/输出(I/O)的协议;为存储器写入事务构建存储器写入请求事务层分组(TLP),其中,存储器写入请求TLP的字段指示TLP的非默认流量类(例如,除VC0以外的虚拟信道(VC))、响应于存储器写入事务需要完成、以及与存储器写入事务相关联的流标识符;在链路上发送存储器写入请求TLP;以及在链路上接收完成TLP,完成TLP指示存储器写入请求TLP的完成。
示例M2包括示例M1的主题,其中存储器写入请求TLP是存储器写入TLP,并且关于响应于存储器写入事务需要完成的指示被包括在存储器写入TLP的标签字段的两个较高位、存储器写入TLP的两个保留位、或存储器写入TLP的1个标签字段位和1个保留位的组合中。
示例M3包括示例M1的主题,其中存储器写入请求TLP是流式写入TLP,并且关于响应于存储器写入事务需要完成的指示被包括在流式写入TLP的一个或多个字段中。
示例M4包括示例M3的主题,其中流式写入TLP利用除0100_0000b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例M5包括示例M4的主题,其中流式写入TLP利用值0101_1100b或0101_1101b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例M6包括示例M3的主题,还包括构建与同一流标识符相关联的多个流式写入TLP,完成TLP是流式写入完成TLP,流式写入完成TLP指示多个流式写入TLP中的每一者的完成。
示例M7包括示例M6的主题,其中流式写入完成TLP利用除0000_1010b或0100_1010b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例M8包括示例M7的主题,其中流式写入完成TLP利用值0000_1100b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例M9包括示例M6的主题,其中完成TLP的标签字段指示与多个流式写入TLP相关联的所述流标识符。
示例M10包括示例M6的主题,其中完成TLP的字节计数字段指示完成TLP所指示的完成的数量。
示例M11包括示例M1-M10中任一项的主题,其中流标识符在存储器写入请求TLP的标签字段中被指示。
示例M12包括示例M1-M11中任一项的主题,其中存储器写入请求TLP还包括指示完成合并被允许的字段。
示例M13包括示例M1-M12中任一项的主题,其中存储器写入请求TLP使用非通告事务类型缓冲器进行跟踪。
示例M14包括示例M1-M13中任一项的主题,其中基于加载-存储输入/输出(I/O)的协议是基于PCIe或基于CXL的协议,并且非默认流量类指示除VC0以外的虚拟信道(VC)。
示例S1包括一种***,包括:处理器;第一设备;以及第二设备;其中,处理器、第一设备和第二设备经由基于加载-存储输入/输出(I/O)协议的互连彼此耦合,并且每一者包括协议电路,协议电路执行以下操作:为将在互连上执行的存储器写入事务构建存储器写入请求事务层分组(TLP),其中,存储器写入请求TLP的字段指示TLP的非默认流量类(例如,除VC0以外的虚拟信道(VC))、响应于存储器写入事务需要完成、以及与存储器写入事务相关联的流标识符;以及处理在互连上接收的完成TLP,完成TLP指示存储器写入请求TLP的完成。
示例S2包括示例S1的主题,其中存储器写入请求TLP是存储器写入TLP,并且响应于存储器写入事务需要完成的指示被包括在存储器写入TLP的标签字段的两个较高位、存储器写入TLP的两个保留位、或存储器写入TLP的1个标签字段位和1个保留位的组合中。
示例S3包括示例S1的主题,其中存储器写入请求TLP是流式写入TLP,并且响应于存储器写入事务需要完成的指示被包括在流式写入TLP的一个或多个字段中。
示例S4包括示例S3的主题,其中流式写入TLP利用除0100_0000b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例S5包括示例S4的主题,其中流式写入TLP利用值0101_1100b或0101_1101b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例S6包括示例S3的主题,其中协议电路构建与同一流标识符相关联的多个流式写入TLP,完成TLP是流式写入完成TLP,流式写入完成TLP指示多个流式写入TLP中的每一者的完成。
示例S7包括示例S6的主题,其中流式写入完成TLP利用除0000_1010b或0100_1010b以外的值、或已经与TLP类型相关联的另一值进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例S8包括示例S7的主题,其中流式写入完成TLP利用值0000_1100b进行指示(例如,在TLP的格式和类型字段中的一个或多个中)。
示例S9包括示例S6的主题,其中完成TLP的标签字段指示与多个流式写入TLP相关联的所述流标识符。
示例S10包括示例S6的主题,其中完成TLP的字节计数字段指示完成TLP所指示的完成的数量。
示例S11包括示例S1-S10中任一项的主题,其中流标识符在存储器写入请求TLP的标签字段中被指示。
示例S12包括示例S1-S11中任一项的主题,其中存储器写入请求TLP还包括指示完成合并被允许的字段。
示例S13包括示例S1-S12中任一项的主题,其中存储器写入请求TLP使用非通告事务类型缓冲器进行跟踪。
示例S14包括示例S1-S13中任一项的主题,其中协议电路跨链路实施基于PCIe或基于CXL的协议,并且非默认流量类指示除VC0以外的虚拟信道(VC)。
示例S15包括示例S1-S14中任一项的主题,其中处理器是基于PCIe的互连的根端口,并且***还包括交换机,交换机在互连中位于处理器、第一设备和第二设备之间,其中,交换机用于在不涉及处理器的情况下,将存储器写入请求TLP从第一设备发送到第二设备。
示例S16包括示例S1-S14中任一项的主题,还包括:基于CXL的交换机,该交换机在互连中位于处理器、第一设备和第二设备之间,其中,交换机使用CXL.io协议将存储器写入请求TLP从第一设备发送到第二设备。
示例MF1包括一种设备,包括:用于为存储器写入事务构建存储器写入请求事务层分组(TLP)的装置,其中,存储器写入请求TLP的字段指示除VC0以外的虚拟信道(VC)、响应于存储器写入事务需要完成、以及与存储器写入事务相关联的流标识符;用于基于加载-存储I/O协议在链路上发送存储器写入请求TLP的装置;以及用于在链路上接收完成TLP的装置,完成TLP指示存储器写入请求TLP的完成。
示例MF2包括示例MF1的主题,其中用于构建TLP的装置包括用于跨链路实施基于PCIe或基于CXL的协议的协议栈电路。
示例X1包括一种设备,包括用于执行上述示例M1-M14中的任一项所描述的或与之相关的方法、或本文描述的任何其他方法或过程的一个或多个元素的装置。
示例X2包括一种设备,包括用于执行上述示例M1-M14中的任一项所描述的或与之相关的方法、或本文描述的任何其他方法或过程的一个或多个元素的逻辑、模块或电路。
示例X3包括一种***,包括:一个或多个处理器和一个或多个计算机可读介质,该一个或多个计算机可读介质包括指令,该指令当由一个或多个处理器执行时,使得该一个或多个处理器执行上述示例M1-M14中的任一项所描述的或与之相关的方法、技术或过程,或其部分。
在整个说明书中提及“一个实施例”或“实施例”意指结合该实施例描述的特定特征、结构或特性被包括在本公开的至少一个实施例中。因此,在整个说明书中的各个地方出现的短语“在一个实施例中”或“在实施例中”不一定都指代同一实施例。此外,可以以任何合适的方式将特定特征、结构或特性组合在一个或多个实施例中。
在上述内容中,已经参考特定示例性实施例给出了具体的描述。然而,将明显的是,可以在不脱离如在所附权利要求中所阐述的更广泛精神和范围的情况下对其作出各种修改和改变。相应地,说明书和附图将被视为说明性意义而非限制性意义。此外,前述的对实施例以及其他示例性语言的使用不一定指代同一实施例或同一示例,而是可以指代不同的和有区别的实施例,并且潜在地可以指代同一实施例。

Claims (25)

1.一种装置,包括:
端口,用于在链路上发送和接收数据;以及
协议栈电路,用于跨所述链路实施基于加载-存储输入/输出(I/O)的协议的一个或多个层,其中,所述协议栈电路用于执行以下操作:
接收在所述链路上发起存储器写入事务的请求;
为所述存储器写入事务构建存储器写入请求事务层分组(TLP),其中,所述存储器写入请求TLP的字段指示所述TLP的非默认流量类、响应于所述存储器写入事务需要完成、以及与所述存储器写入事务相关联的流标识符;
使得所述存储器写入请求TLP在所述链路上被发送;以及
处理在所述链路上接收的完成TLP,所述完成TLP指示所述存储器写入请求TLP的完成。
2.根据权利要求1所述的装置,其中,所述存储器写入请求TLP是存储器写入TLP,并且关于响应于所述存储器写入事务需要完成的所述指示被包括在所述存储器写入TLP的标签字段的两个较高位、所述存储器写入TLP的两个保留位、或所述存储器写入TLP的1个标签字段位和1个保留位的组合中。
3.根据权利要求1所述的装置,其中,所述存储器写入请求TLP是流式写入TLP,并且关于响应于所述存储器写入事务需要完成的所述指示被包括在所述流式写入TLP的一个或多个字段中。
4.根据权利要求3所述的装置,其中,所述流式写入TLP被利用除0100_0000b以外的值进行指示。
5.根据权利要求4所述的装置,其中,所述流式写入TLP被利用值0101_1100b或0101_1101b进行指示。
6.根据权利要求3所述的装置,其中,所述协议栈电路用于构建与同一流标识符相关联的多个流式写入TLP,所述完成TLP是流式写入完成TLP,该流式写入完成TLP指示所述多个流式写入TLP中的每一者的完成。
7.根据权利要求6所述的装置,其中,所述流式写入完成TLP被利用除0000_1010b或0100_1010b以外的值进行指示。
8.根据权利要求7所述的装置,其中,所述流式写入完成TLP被利用值0000_1100b进行指示。
9.根据权利要求6所述的装置,其中,所述完成TLP的标签字段指示与所述多个流式写入TLP相关联的所述流标识符。
10.根据权利要求6所述的装置,其中,所述完成TLP的字节计数字段指示所述完成TLP所指示的完成的数量。
11.根据权利要求1所述的装置,其中,所述流标识符在所述存储器写入请求TLP的标签字段中被指示。
12.根据权利要求1所述的装置,其中,所述存储器写入请求TLP还包括指示完成合并被允许的字段。
13.根据权利要求1所述的装置,其中,所述存储器写入请求TLP被使用非通告事务类型缓冲器进行跟踪。
14.根据权利要求1-13中任一项所述的装置,其中,所述协议栈电路跨所述链路实施基于PCIe或基于CXL的协议,并且所述非默认流量类指示除VC0以外的虚拟信道(VC)。
15.一种方法,包括:
接收在链路上发起存储器写入事务的请求,所述链路实施基于加载-存储输入/输出(I/O)的协议;
为所述存储器写入事务构建存储器写入请求事务层分组(TLP),其中,所述存储器写入请求TLP的字段指示所述TLP的非默认流量类、响应于所述存储器写入事务需要完成、以及与所述存储器写入事务相关联的流标识符;
在所述链路上发送所述存储器写入请求TLP;以及
在所述链路上接收完成TLP,所述完成TLP指示所述存储器写入请求TLP的完成。
16.根据权利要求15所述的方法,其中,所述存储器写入请求TLP是存储器写入TLP,并且关于响应于所述存储器写入事务需要完成的所述指示被包括在所述存储器写入TLP的标签字段的两个较高位、所述存储器写入TLP的两个保留位、或所述存储器写入TLP的1个标签字段位和1个保留位的组合中。
17.根据权利要求15所述的方法,其中,所述存储器写入请求TLP是流式写入TLP,并且关于响应于所述存储器写入事务需要完成的所述指示被包括在所述流式写入TLP的一个或多个字段中。
18.根据权利要求17所述的方法,还包括构建与同一流标识符相关联的多个流式写入TLP,其中,所述完成TLP是流式写入完成TLP,该流式写入完成TLP指示所述多个流式写入TLP中的每一者的完成。
19.根据权利要求18所述的方法,其中,所述完成TLP的标签字段指示与所述多个流式写入TLP相关联的所述流标识符。
20.根据权利要求18所述的方法,其中,所述完成TLP的字节计数字段指示所述完成TLP所指示的完成的数量。
21.根据权利要求15所述的方法,其中,所述流标识符在所述存储器写入请求TLP的标签字段中被指示。
22.根据权利要求15-21中任一项所述的方法,其中,所述基于加载-存储输入/输出(I/O)的协议是基于PCIe或基于CXL的协议,并且所述非默认流量类指示除VC0以外的虚拟信道(VC)。
23.一种***,包括:
处理器;
第一设备;以及
第二设备;
其中,所述处理器、所述第一设备和所述第二设备经由基于加载-存储输入/输出(I/O)协议的互连彼此耦合,并且每一者包括协议电路,所述协议电路用于执行以下操作:
为将在所述互连上执行的存储器写入事务构建存储器写入请求事务层分组(TLP),其中,所述存储器写入请求TLP的字段指示所述TLP的非默认流量类、响应于所述存储器写入事务需要完成、以及与所述存储器写入事务相关联的流标识符;以及
处理在所述互连上接收的完成TLP,所述完成TLP指示所述存储器写入请求TLP的完成。
24.根据权利要求23所述的***,其中,所述处理器是基于PCIe的互连的根端口,所述非默认流量类指示除VC0以外的虚拟信道(VC),并且所述***还包括交换机,所述交换机在所述互连中位于所述处理器、所述第一设备和所述第二设备之间,其中,所述交换机用于在不涉及所述处理器的情况下,将存储器写入请求TLP从所述第一设备发送到所述第二设备。
25.根据权利要求23所述的***,还包括:基于CXL的交换机,该交换机在所述互连中位于所述处理器、所述第一设备和所述第二设备之间,其中,所述交换机用于使用CXL.io协议将存储器写入请求TLP从所述第一设备发送到所述第二设备。
CN202180070230.3A 2020-11-16 2021-09-17 器件互连中的源排序 Pending CN116472523A (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063114440P 2020-11-16 2020-11-16
US63/114,440 2020-11-16
US17/238,156 2021-04-22
US17/238,156 US20210240655A1 (en) 2020-11-16 2021-04-22 Source ordering in device interconnects
PCT/US2021/050987 WO2022103485A1 (en) 2020-11-16 2021-09-17 Source ordering in device interconnects

Publications (1)

Publication Number Publication Date
CN116472523A true CN116472523A (zh) 2023-07-21

Family

ID=77061411

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180070230.3A Pending CN116472523A (zh) 2020-11-16 2021-09-17 器件互连中的源排序

Country Status (4)

Country Link
US (1) US20210240655A1 (zh)
CN (1) CN116472523A (zh)
NL (1) NL2029511B1 (zh)
WO (1) WO2022103485A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117033267A (zh) * 2023-10-07 2023-11-10 深圳大普微电子股份有限公司 混合存储主控制器及混合存储器

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10761939B1 (en) * 2018-12-13 2020-09-01 Amazon Technologies, Inc. Powering-down or rebooting a device in a system fabric
US11972292B1 (en) 2020-03-30 2024-04-30 XConn Technologies Holdings, Inc. Interconnect switch using multi-bank scheduling
US20210240655A1 (en) * 2020-11-16 2021-08-05 Intel Corporation Source ordering in device interconnects
US11934334B2 (en) * 2021-04-29 2024-03-19 Arm Limited CCIX port management for PCI express traffic
US11947472B2 (en) 2021-07-18 2024-04-02 Avago Technologies International Sales Pte. Limited Composable infrastructure enabled by heterogeneous architecture, delivered by CXL based cached switch SoC
US11966335B2 (en) * 2021-08-10 2024-04-23 Google Llc Hardware interconnect with memory coherence
US11989142B2 (en) 2021-12-10 2024-05-21 Samsung Electronics Co., Ltd. Efficient and concurrent model execution
US20230214346A1 (en) * 2021-12-30 2023-07-06 Ati Technologies Ulc Allocating peripheral component interface express (pcie) streams in a configurable multiport pcie controller
US11934318B2 (en) * 2022-06-07 2024-03-19 XConn Technologies Holdings, Inc. Multi-host memory sharing
US11947483B2 (en) 2022-06-17 2024-04-02 XConn Technologies Holdings, Inc. Data flow management
US11914472B2 (en) * 2022-07-13 2024-02-27 Dell Products L.P. Use of CXL expansion memory for metadata offload

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7536495B2 (en) * 2001-09-28 2009-05-19 Dot Hill Systems Corporation Certified memory-to-memory data transfer between active-active raid controllers
US7340555B2 (en) * 2001-09-28 2008-03-04 Dot Hill Systems Corporation RAID system for performing efficient mirrored posted-write operations
US7543096B2 (en) * 2005-01-20 2009-06-02 Dot Hill Systems Corporation Safe message transfers on PCI-Express link from RAID controller to receiver-programmable window of partner RAID controller CPU memory
US9037770B2 (en) * 2011-05-05 2015-05-19 International Business Machines Corporation Accelerator engine emulation over an interconnect link
US9563260B2 (en) * 2013-03-15 2017-02-07 Intel Corporation Systems, apparatuses, and methods for synchronizing port entry into a low power state
US20150007189A1 (en) * 2013-06-29 2015-01-01 Robert de Gruijl Service rate redistribution for credit-based arbitration
RU2645288C2 (ru) * 2013-12-26 2018-02-19 Интел Корпорейшн Усовершенствование интерфейса pci express
US9561469B2 (en) * 2014-03-24 2017-02-07 Johnson Matthey Public Limited Company Catalyst for treating exhaust gas
US9921768B2 (en) * 2014-12-18 2018-03-20 Intel Corporation Low power entry in a shared memory link
DE112015006953T5 (de) * 2015-09-26 2018-06-14 Intel Corporation Training einer gültigen lane
US10846258B2 (en) * 2016-09-30 2020-11-24 Intel Corporation Voltage modulated control lane
EP3563235B1 (en) * 2016-12-31 2022-10-05 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10664184B1 (en) * 2017-09-02 2020-05-26 Seagate Technology Llc Inter-drive data transfer
US10452593B1 (en) * 2018-05-03 2019-10-22 Arm Limited High-performance streaming of ordered write stashes to enable optimized data sharing between I/O masters and CPUs
US11070527B2 (en) * 2018-12-07 2021-07-20 Intel Corporation Securing platform link with encryption
WO2020165659A2 (en) * 2019-02-12 2020-08-20 Samsung Electronics Co., Ltd. Systems and methods for streaming storage device content
US10970238B2 (en) * 2019-04-19 2021-04-06 Intel Corporation Non-posted write transactions for a computer bus
US20200151362A1 (en) * 2019-08-21 2020-05-14 Intel Corporation Integrity and data encryption (ide) over computer buses
US11775470B2 (en) * 2019-11-20 2023-10-03 Intel Corporation Transaction layer packet format
US11765037B2 (en) * 2020-08-19 2023-09-19 Hewlett Packard Enterprise Development Lp Method and system for facilitating high availability in a multi-fabric system
US11750418B2 (en) * 2020-09-07 2023-09-05 Mellanox Technologies, Ltd. Cross network bridging
US20210240655A1 (en) * 2020-11-16 2021-08-05 Intel Corporation Source ordering in device interconnects

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117033267A (zh) * 2023-10-07 2023-11-10 深圳大普微电子股份有限公司 混合存储主控制器及混合存储器
CN117033267B (zh) * 2023-10-07 2024-01-26 深圳大普微电子股份有限公司 混合存储主控制器及混合存储器

Also Published As

Publication number Publication date
US20210240655A1 (en) 2021-08-05
NL2029511B1 (en) 2023-06-13
NL2029511A (en) 2022-06-28
WO2022103485A1 (en) 2022-05-19

Similar Documents

Publication Publication Date Title
NL2029511B1 (en) Source ordering in device interconnects
US20210165756A1 (en) Multiple uplink port devices
US11238203B2 (en) Systems and methods for accessing storage-as-memory
CN110036380B (zh) 用于高速互连中低延迟的双模phy
CN107077521B (zh) 片上***配置元数据
CN108614783B (zh) 一致性协议表
CN108701023B (zh) 用于带内重定时器寄存器访问的装置和***
CN105793830B (zh) 一种在节点之间共享存储器和i/o服务的装置、方法、***
JP6147840B2 (ja) ルートポート及びRPIE(RootPortIntegratedEndpoint)のレジューム時間を向上させるための方法、装置及びシステム
CN113868173B (zh) 扁平化端口桥
EP3719660A1 (en) Virtualized link states of multiple protocol layer package interconnects
CN108292267B (zh) 用于配置装置的方法、***和设备
US10437616B2 (en) Method, apparatus, system for optimized work submission to an accelerator work queue
CN112825066A (zh) 事务层分组格式
US10754808B2 (en) Bus-device-function address space mapping
JP2021090188A (ja) ストリーミングファブリックインタフェース
CN112131148A (zh) 预测性分组头部压缩
US10817454B2 (en) Dynamic lane access switching between PCIe root spaces
JP2024526012A (ja) 部分幅リンク状態におけるレイテンシ最適化
US20230013023A1 (en) ARCHITECTURAL INTERFACES FOR GUEST SOFTWARE TO SUBMIT COMMANDS TO AN ADDRESS TRANSLATION CACHE IN XPUs
CN111831594B (zh) 用于高速互连中低延迟的双模phy

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