CN112131148A - 预测性分组头部压缩 - Google Patents
预测性分组头部压缩 Download PDFInfo
- Publication number
- CN112131148A CN112131148A CN202010224433.0A CN202010224433A CN112131148A CN 112131148 A CN112131148 A CN 112131148A CN 202010224433 A CN202010224433 A CN 202010224433A CN 112131148 A CN112131148 A CN 112131148A
- Authority
- CN
- China
- Prior art keywords
- packet
- header field
- value
- header
- field
- 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
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
-
- 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/40—Bus structure
- G06F13/4004—Coupling between buses
- G06F13/4009—Coupling between buses with data restructuring
-
- 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
-
- 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/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus 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
-
- 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
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/04—Inference or reasoning models
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/04—Protocols for data compression, e.g. ROHC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/40—Bus coupling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Security & Cryptography (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Communication Control (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
可以基于预测性分析来压缩分组。例如,在一个实施例中,确定可以由接收方代理推断出用于特定头部字段的显式值,分组头部被构造为要么省略头部字段,要么包括用于头部字段的差分值来代替用于头部字段的显式值。通过导出用于特定头部字段的显式值,可以在接收时对分组头部进行解压缩。
Description
相关申请的交叉引用
本申请要求享有于2019年6月25日提交的标题为“Predictive Packet HeaderCompression”的美国临时专利申请No.62/866,396的权益和优先权,通过引用将其全部公开内容并入本文。
技术领域
本公开内容涉及计算系统,并且具体(但不排他地)涉及用于分组的预测性头部压缩。
背景技术
半导体处理和逻辑单元设计的进步已经允许集成电路设备上可能存在的逻辑单元数量的增加。作为必然结果,计算机系统配置已从系统中的单个或多个集成电路演变为各个集成电路上存在的多个核心、多个硬件线程和多个逻辑处理器,以及集成在这样的处理器中的其他接口。处理器或集成电路通常包括单个物理处理器管芯,其中,处理器管芯可以包括任意数量的核心、硬件线程、逻辑处理器、接口、存储器、控制器集线器等。
由于在较小的封装中容纳更多处理能力的更大能力,较小的计算设备越来越受欢迎。智能手机、平板电脑、超薄笔记本电脑和其他用户设备呈指数增长。然而,这些较小的设备依赖于服务器来进行数据存储和超出形状因数的复杂处理。因此,高性能计算市场(即服务器空间)的需求也有所增加。例如,在现代服务器中,通常不仅存在具有多个核心的单个处理器,而且还存在多个物理处理器(也称为多个插槽)以提高计算能力。服务器还可以使用分布式计算、以机架规模的架构来实现,以及以其他的可替代实施方式来实现。由于处理能力随着计算系统中的设备数量增长而增长,插槽与其他设备之间的通信变得更重要。
实际上,互连已经从主要处理电气通信的更传统的多点分支总线发展到便于快速通信的全面互连架构。不幸的是,由于对未来处理器以更高速率消费的需求,相应的需求被置于现有互连架构的功能之上。
附图说明
图1示出了包括互连架构的计算系统的实施例。
图2示出了包括分层堆栈的互连架构的实施例。
图3示出了在互连架构内要生成或接收的请求或分组的实施例。
图4示出了用于互连架构的发送方和接收方对的实施例。
图5是示出示例性分组压缩技术的示图。
图6A-6D是示出用于图5所示的分组压缩技术的示例性过程的流程图。
图7是示出另一示例性分组压缩技术的示图。
图8A-8D是示出用于图7中所示的分组压缩技术的示例性过程的流程图。
图9是示出示例性的基于PCIe的存储器请求分组头部格式的示图。
图10是示出示例性的基于PCIe的完成分组头部格式的示图。
图11是示出另一示例性的基于PCIe的存储器请求分组头部格式的示图。
图12是示出另一示例性的基于PCIe的完成分组头部格式的示图。
图13是示出已被压缩的示例性的基于PCIe的分组头部格式的示图。
图14是示出已被压缩的示例性的基于PCIe的分组头部格式的示图。
图15是示出已被压缩的示例性的基于PCIe的分组头部格式的示图。
图16是压缩分组的示例性过程的流程图。
图17是解压缩分组的示例性过程的流程图。
图18示出了包括多核处理器的计算系统的框图的实施例。
图19示出了包括多个处理器的计算系统的框的实施例。
具体实施方式
在以下描述中,为了提供对本发明的透彻理解,阐述了许多特定细节,例如以下各项的示例:特定类型的处理器和系统配置、特定硬件结构、特定架构和微架构细节、特定寄存器配置、特定指令类型、特定系统组件、特定测量结果/高度、特定处理器流水线阶段和操作等。然而,对于本领域技术人员将显而易见的是,不需要采用这些特定细节来实践本发明。在其他实例中,没有详细描述公知的组件或方法,例如特定和可替代的处理器架构、用于所描述算法的特定逻辑电路/代码、特定固件代码、特定互连操作、特定逻辑配置、特定制造技术和材料、特定编译器实现、代码中算法的特定表示、特定的掉电和门控技术/逻辑以及计算机系统的其他特定操作细节,以避免不必要地模糊本发明。
尽管可以参考在诸如计算平台或微处理器之类的特定集成电路中的节能和能效来描述以下实施例,但其他实施例也适用于其他类型的集成电路和逻辑设备。本文描述的实施例的类似技术和教导可以应用于也可以受益于更好的能效和节能的其他类型的电路或半导体设备。例如,公开的实施例不限于台式计算机系统或超极本(Ultrabooks)TM,而还可以用在其他设备中,例如手持设备、平板电脑、其他轻薄笔记本电脑、片上系统(SOC)设备和嵌入式应用。手持设备的一些示例包括:蜂窝电话、互联网协议设备、数码相机、个人数字助理(PDA)和手持PC。嵌入式应用通常包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或可以执行下面教导的功能和操作的任意其他系统。此外,本文所述的装置、方法和系统不限于物理计算设备、而是还可以涉及用于节能和能效的软件优化。如在下面的描述中将显而易见的,本文描述的方法、装置和系统的实施例(无论是参考硬件、固件、软件还是其组合)对于与性能考量相平衡的“绿色技术”未来至关重要。
随着计算系统的发展,其中的组件变得越来越复杂。作为结果,用于在组件之间耦合和通信的互连架构的复杂度也在增加,以确保满足用于最佳的组件操作的带宽要求。此外,不同的细分市场需要不同方面的互连架构,以满足市场的需求。例如,服务器需要更高的性能,而移动生态系统有时能够牺牲整体性能来节省功耗。但是,大多数结构的唯一目的是提供最大可能的性能并最大地节省功率。以下讨论了数种互连,其将潜在地从本文描述的本发明的方面受益。
一种互连结构架构包括高速外围组件互连(PCI)(PCIe)架构。PCIe的主要目标是使来自不同供应商的组件和设备能够在跨越多个细分市场、客户端(台式机和移动设备)、服务器(标准、机架规模、云、雾(Fog)、企业等)以及嵌入式设备和通信设备的开放式架构中互操作。高速PCI(PCI Express)是被定义用于各种各样的未来计算和通信平台的高性能的通用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、监视器、打印机、鼠标、键盘、路由器、便携存储设备、火线(Firewire)设备、通用串行总线(USB)设备、扫描仪和其他输入/输出设备。在PCIe的常用语言(vernacular)中,例如设备,通常被称为端点。尽管未具体示出,但是设备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包括任何形式的分层通信栈,例如快速路径互连栈、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层级中的请求方代理。因此,本地事务标识符308字段与源ID 310一起提供层级域内的事务的全局标识。
属性字段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传输码,其中,发送/接收十位符号。此处,特殊符号用于利用帧223对分组进行成帧。另外,在一个示例中,接收方还提供从传入串行流中恢复的符号时钟。
如上所述,尽管参考PCIe协议栈的特定实施例讨论了事务层205、链路层210和物理层220,但是分层协议栈并不局限于此。实际上,可以包括/实现任何分层协议。作为示例,表示为分层协议的端口/接口包括:(1)组装分组的第一层,即事务层;对分组进行排序的第二层,即链路层;和发送分组的第三层,即物理层。作为特定示例,使用了通用标准接口(CSI)分层协议。
接下来参考图4,其示出了PCIe串行点对点结构的实施例。尽管示出了PCIe串行点对点链路的实施例,但是串行点对点链路不受限于此,因为其包括用于发送串行数据的任何发送路径。在所示的实施例中,基本PCIe链路包括两个低压差分驱动信号对:发送对406/411和接收对412/407。因此,设备405包括用于向设备410发送数据的发送逻辑单元406和用于从设备410接收数据的接收逻辑单元407。换句话说,PCIe链路中包括两条发送路径,即路径416和417,以及两条接收路径,即路径418和419。
发送路径是指用于发送数据的任何路径,例如传输线、铜线、光线、无线通信信道、红外通信链路或其他通信路径。两个设备(例如设备405和设备410)之间的连接称为链路,例如链路415。链路可以支持一个通道(lane)——每个通道代表一组差分信号对(一对用于发送,一对用于接收)。为了缩放带宽,链路可以聚合由xN表示的多个通道,其中,N是任何所支持的链路宽度,例如1、2、4、8、12、16、32、64或更宽。
差分对是指发送差分信号的两条发送路径,例如线路416和417。作为示例,当线路416从低电压电平切换到高电压电平时,即上升沿,线路417从高逻辑电平驱动到低逻辑电平,即下降沿。差分信号潜在地表现出更好的电气特性,例如更好的信号完整性,即交叉耦合、电压过冲/下冲、振铃等。这允许更好的定时窗口,从而能够实现更快的发送频率。
在一些实施方式中,可以提供能够以诸如25GT/s和/或32GT/s之类的高速来操作的高性能互连和相应的互连协议(例如下一代基于PCIe的互连)。在一个示例中,基于为信道确定的特性(例如在链路训练期间),可以为高性能互连定义两种速度,一种速度为25GT/s和32GT/s。在一种实施方式中,互连可以与现有的PCIe代以及为这些代提供的速度(例如8GT/s、16GT/s等)向后兼容。
在一些实例中,压缩在通信链路上在代理之间发送的分组(例如TLP)可能是有益的。然而,用于压缩分组的当前解决方案被设计为压缩具有相当大字段(每字段32+位)的分组头部,并且没有提供压缩较短字段(例如1-16位,例如PCIe TLP中发现的字段)的有效方式。在压缩以可预测方式在分组之间改变的字段时,它们也可能是较低效的。另外,现有技术可以提供协议级压缩和带宽降低,但是不能提供链路级压缩/带宽降低。
因此,本公开内容的各方面提供了分组压缩技术,其可以用于有效地压缩分组头部(例如用于PCIe TLP分组或用于其他协议的其他类型的数据分组),从而减少每个分组头部中发送的数据量。通过提供有效的方法来压缩较短的头部字段,以及通过提供更有效的方法来压缩以可预测方式在分组之间改变的字段,本技术可以改进现有的分组头部压缩机制或技术。
作为示例,在一些实施例中,可以使用差分值来代替用于头部字段的显式值。例如,接收方代理可以存储先前发送的分组的头部,并且发送方代理可以发送指示先前的分组与当前分组之间的差的差分值。然后,接收方可以将差分值与存储的值组合起来以解压缩该头部并确定其字段的值。作为另一示例,在一些实施例中,可以通过移除/省略跨越连接/序列中的多个头部具有相同值的字段来压缩分组头部。另外,在一些实施例中,可以通过从分组中移除/省略跨越连接或序列中的多个头部以可预测的方式改变的字段来压缩分组头部。
本文公开的技术可以例如通过缩短分组头部的大小来减少开销并提高系统总线的吞吐量。减少的开销意味着总线上的更多数据吞吐量(即“有效吞吐量”)、潜在的更低延时以及提高的能效(例如以pJ/位为单位)。可以将这些技术应用于例如PCIe TLP,以减少在PCIe存储器事务头部或完成头部(Completion Header)中发送的位数,因为这样的头部可以包括通常可预测的字段(例如通常长度(Length)为2的幂并且“字节使能(Byte Enable)”保持不变,而“地址(Address)”字段和“字节使能”可能以可预测的方式改变)。另外,本文描述的技术也可以应用于压缩其他类型的分组,例如用于基于通用串行总线(USB)的协议的USB分组、用于基于计算高速链路(CXL)的协议的CXL分组、用于基于针对加速器的高速缓存一致性互连(CCIX)的协议的CCIX分组或用于基于传输控制协议/互联网协议(TCP/IP)的TCP/IP分组。
转到图5的示图500,示出了示例性分组压缩技术。特别地,图5示出了分组的示例性序列(502-514)及其各自的数据字段,并且示出了在一些实例中可以省略或减小大小的各种分组头部字段。图5所示的示例性分组每个皆包括包含长度字段和序列字段的头部。长度字段的值可以指示分组的长度(例如以位或字节为单位),而序列字段的值可以指示分组在分组序列内的相对位置。在一些情况下,序列字段的值可以基于“长度”字段的值。在所示示例中,用于分组502-514的序列字段的值指示分组序列中起始位的位置。将理解的是,用于图5中所示的长度字段和序列字段的值表示用于那些字段的显式值,并且可能不是分组中实际包括的值。而是,如下所述,用于长度字段和序列字段的值可以被省略,或者可以作为差分值而不是所示的显式值发送。还应理解,相比于所示出的那些字段,分组可以包括额外的头部字段或更少的头部字段,并且以下描述的构思在适用或适当的情况下可以应用于其他类型的头部字段。
当发送长度恒定的多个分组的序列时,长度字段可能仅需要出现在序列的第一分组中。基于第一分组的长度字段中包括的值,接收方代理可以隐式导出后续分组中的长度值。因此,在序列的后续分组中,不需要由发送方代理发送用于长度字段的显式值。例如,参照图5中所示的示例,分组502最初在长度字段中包括值“10”。由于用于分组504、506的长度值也是“10”,在这些分组中不必包括长度值,因此发送方可从分组中完全省略长度字段。通过检测到从分组504、506中省略了长度字段,接收方代理可以得出结论:用于该分组的长度值与先前分组的长度值(在接收到分组502时,其可能已经由接收方代理高速缓存)相比没有改变,并且接收方代理可以如分组502中那样,使用长度值“10”来相应地处理分组504、506。
当用于分组508的长度值改变为“5”时,如图所示,发送方代理可以在向接收方代理发送的分组中包括长度字段(指示长度值为5)。由于用于分组510的长度值也是“5”,因此分组510中不必包括长度值,并且发送方可以再次从分组510中省略长度字段。接收方代理可以在接收到分组510时得出结论:相比于分组508中的先前值(在接收到分组508时,其可能已由接收方代理高速缓存),用于分组510的长度值没有改变,并且接收方代理可以如分组508中那样,相应地使用长度值“5”来处理分组510。
当用于分组512的长度值改变回到“10”时,如图所示,发送方代理可以在向接收方代理发送的分组中包括长度字段(指示长度值10)。由于用于分组512的长度值也是“10”,因此分组512中不必包括长度值,并且发送方可以再次省略长度字段。接收方代理可以在接收到分组512时得出结论:相比于分组510中的先前值(在接收到分组510时,其可能已经由接收方代理高速缓存),用于分组512的长度值没有改变,并且接收方代理可以如分组510中那样,相应地使用长度值“10”来处理分组512。
与上述长度值相反,序列值可以在序列的后续分组中总是改变。为了减少每个分组中需要发送的位数,发送方代理可以向接收方代理发送较短的差分值来代替完整的显式序列值。差分值可以指示先前分组的序列号和当前分组的序列号之间的差。例如,参考图5中所示的示例,分组502最初在序列字段中包括值“0”。在该示例中,因为用于分组502的长度值是10,所以用于下一个分组504的序列值将是10。由于接收方代理可以基于先前分组502的序列值(基于分组502的长度值和序列值)来导出用于分组504的序列值,因此发送方代理可以能够发送指示与先前序列值相差10的差分值来代替发送显式值10。尽管在该示例中这些值是相同的,但是在许多实例中,差分值可能比显式序列值小得多,并因此,发送差分值可以减少分组504头部中序列字段的大小。例如,由于用于分组504的长度值是10,因此用于下一个分组506的序列值将是20(基于先前分组504的长度值和序列值)。因此,发送方代理可以能够发送指示与先前序列值相差10的差分值来代替发送显式序列值20,这可以减小分组506的头部中的序列字段的大小(例如相比于在二进制“10”,需要一个额外的位来表示二进制“20”)。使用相同的技术,还可以为分组508、510、512、514中的各个序列字段发送差分值来代替用于该字段的显式序列值。从图5所示的例子中将注意到,在许多情况下,在发送了序列中的第一分组之后,此后可以将序列号作为差分值发送。此外,对于示例性序列中的大多数分组,可以完全省略长度字段。
在一些实施例中,例如在所示的示例中,分组头部还可以包括指示在一个或多个其他头部字段中是否发生了改变的改变标志。例如,在所示的示例中,改变标志“L”用于指示用于分组的长度字段的新长度值(与先前分组相比),并且改变标志“S”用于指示用于分组的序列字段的新序列值(与先前分组相比)。接收方代理可以基于这些改变标志来确定已经发生值改变,并且可以相应地处理分组。例如,接收方代理可以高速缓存包括在包括“L”改变标志的分组中的长度值,因为这样的标志将指示与用于先前分组的长度值不同的、用于当前分组的长度值。
图6A-6D是示出用于图5中所示且以上描述的分组压缩技术的示例性过程的流程图。在向接收方代理发送分组之前,图6A-6B所示的示例性过程可以由发送方代理或者其一个或多个组件执行。图6A示出了确定在分组的长度字段中是否包括显式长度值的过程600,并且图6B示出了确定在分组的序列字段中是包括显式序列值还是差分值的过程610。在从发送方代理接收到分组之后,可以由接收方代理或者其一个或多个组件来执行图6C-6D中所示的过程。图6C示出了确定用于接收的分组的长度值的过程620,并且图6D示出了确定用于接收的分组的序列值的过程630。所示出的过程可以包括比所示过程更少或更多的操作。
在图6的示例性过程600中,发送方代理开始处理序列的下一个分组以向接收方代理发送,并且在602处确定与发送的先前分组相比长度值是否存在改变。如果长度值存在改变,则在604处发送方代理将用于分组的显式长度值包括在该分组的长度字段中。如果与先前分组相比长度值没有改变,则在606处发送方代理将显式长度值从该分组中省略。这可以包括完全省略该分组的长度字段,或者在长度字段中包括指示无改变的值(例如0)。
在图6B的示例性过程610中,发送方代理开始处理序列的下一个分组以向接收方代理发送,并且在612处确定用于分组的序列值与先前发送的分组相比是否存在大改变。序列值的大改变可以指的是大于特定阈值的改变。例如,在一些情况下,差分值可以能够处理相对小的序列号改变(例如最大为255),但是大于此的改变可能需要在分组中发送显式值。因此,如果确定序列值的改变足够大(例如差分在阈值之上),则在614处发送方代理在分组的序列字段中包括显式序列值。另一方面,如果确定序列值的改变相对小(例如差分在阈值以下),则在616处发送方代理在分组的序列字段中发送差分值来代替显式序列值。
在图6C的示例性过程620中,接收方代理从发送方代理接收序列的下一个分组,并且在622处确定在该分组中是否包括长度值(例如在分组头部的长度字段中)。如果分组中包括长度值,则在624处接收方代理在其对分组的处理中使用该分组中包括的长度值,并在626处高速缓存接收到的长度值。如果分组中不包括长度值,则在628处接收方代理在其对分组的处理中使用先前高速缓存的长度值。
在图6D的示例性过程630中,接收方代理从发送方代理接收序列的下一个分组,并且在632处确定分组中是否包括显式序列值(例如在分组的头部的序列字段中)或者替代地包括差分值。如果分组中包括显式序列值,则在634处接收方代理在其对分组的处理中使用该分组中包括的序列值,并在636处高速缓存该序列值以供以后使用(例如如果稍后在下一个分组中发送差分值)。如果分组中包括差分值,则在638处接收方代理通过将差分值与高速缓存的序列值相加来确定用于该分组的推断的序列值,并且在其对分组的处理中使用该推断的序列值。然后,在640处,接收方代理高速缓存该推断的序列值,以供以后使用(例如如果在下一个分组中发送了另一个差分值)。
图5、图6A-6D的构思也可以扩展,从而允许完全省略某些字段(如序列字段)。例如,由于用于分组的长度值和序列值之间可能存在可预测的关系,因此接收方代理可以使用这种关系来隐式跟踪序列号,而无需在链路上发送该序列号(或差分值),进一步减小了分组的大小。
转到图7的示图700,其示出了另一示例性分组压缩技术。特别地,图7示出了分组的示例性序列(702-714),并突出显示了在一些实例中可以省略的各个字段。图7所示的示例性分组包括包含长度字段和序列字段的头部,其可以分别表示与以上关于图5所述的长度字段和序列字段所描述的相同的信息。在图7所示的示例中,可以使用与以上关于图5所描述的相同的技术来省略用于长度字段的显式值。然而,代替如图5所示在后续分组中发送指示在分组之间改变的序列值的差分值,可以使用下面描述的技术来完全省略序列值(并因此,省略序列字段)。
例如,在所示示例中,分组702最初在序列字段中包括序列值“0”。由于用于分组702的长度值为10,因此用于下一个分组704的序列值为10。由于接收方代理可以基于先前分组702的长度值和序列值来导出用于分组704的该值(即用于分组704的序列值“10”是基于将分组702的长度值(10)与分组702的序列值(0)相加),因此发送方代理可以从分组704完全省略该序列值,这减小了分组704的头部的大小。此外,接收方代理可以基于先前分组704的长度值和序列值来导出用于分组706的序列值,即使分组704中不包括那些值。这是因为接收方代理可能先前已高速缓存与分组702一起发送的长度值和用于分组704的序列值(如上所述,其是从分组702中包括的序列值导出的,并且也可能已被高速缓存)。因此,接收方代理可以基于用于分组702的高速缓存的长度值(10)(因为其对于分组704来说没有改变)和用于分组704的高速缓存的序列值(10)(如上所述导出的)的相加来确定用于分组706的序列值是“20”。类似地,接收方代理可以基于先前发送的分组的长度值和序列值来导出用于分组708、710、712中的每一个分组的序列值,并因此,也可从那些分组中省略序列值。从图7所示的示例中将注意到,在许多情况下,在发送了序列中的第一分组之后,此后可以省略序列号。此外,对于所示示例中的大多数分组,也可以省略长度字段。
在一些实施例中,例如在所示示例中,可以在头部中包括改变标志以指示在一个或多个头部字段中是否已经发生了改变。例如,在所示的示例中,改变标志“L”指示用于分组的长度字段的新长度值,并且改变标志“S”指示无法从先前分组推断出用于序列字段的序列值。接收方代理可以基于这些改变标志来确定已经发生的值改变并且可以相应地处理分组。例如,在检测到“S”改变标志时,接收方代理可以使用分组中包括的序列值来处理该分组,而不是确定用于该分组的推断的序列值。
图8A-8D是示出图7所示且以上所述的分组压缩技术的示例性过程的流程图。在向接收方代理发送分组之前,图8A-8B所示的示例性过程可以由发送方代理或其一个或多个组件执行。图8A示出了确定是否在分组的长度字段中包括显式长度值的过程800,并且图8B示出了确定是否在分组的序列字段中包括显式序列值的过程810。在从发送方代理接收到分组之后,可以由接收方代理或其一个或多个组件来执行图8C-8D所示的过程。图8C示出了确定用于接收的分组的长度值的过程820,并且图8D示出了确定用于接收的分组的序列值的过程830。所示出的过程可以包括比所示过程更少或更多的操作。
在图8A的示例性过程800中,发送方代理开始处理序列的下一个分组以向接收方代理发送,并且在802处确定与发送的先前分组相比长度值是否存在改变。如果长度值存在改变,则在804处发送方代理将用于分组的显式长度值包括在分组的长度字段中。如果与先前分组相比长度值没有改变,则在806处发送方代理从分组中省略显式长度值。这可以包括完全省略分组的长度字段,或者在长度字段中包括指示无改变的值(例如0)。
在图8B的示例性过程810中,发送方代理开始处理序列的下一个分组以向接收方代理发送,并且在812处确定用于该分组的序列值中是否存在意外改变。特别地,在所示示例中,接收方代理确定用于该分组的显式序列值是否等于用于先前发送的分组的高速缓存的序列值与用于先前发送的分组的高速缓存的长度值之和。如果序列值的改变是意外的,并且可能无法由接收方代理推断(例如用于该分组的显式序列值不等于用于先前发送的分组的高速缓存的序列值和用于先前发送的分组的高速缓存的长度值之和),则在814处在分组中(例如在分组的头部的序列字段中)发送显式序列值,并且在815处高速缓存该显式值(例如以供以后在处理要发送的下一个分组时使用)。如果序列值的改变是预期的并且可以由接收方代理推断(例如用于分组的显式序列值等于用于先前发送的分组的高速缓存的序列值和用于先前发送的分组的高速缓存的长度值之和),则在816处发送方代理从该分组中省略该显式序列值,并在818处高速缓存用于该分组的序列值(例如新的高速缓存的序列值=旧的高速缓存的序列值+高速缓存长度值)(例如以供以后在处理要发送的下一个分组时使用)。
在图8C的示例性过程820中,接收方代理从发送方代理接收序列的下一个分组,并且在822处确定该分组中(例如在分组的头部的长度字段中)是否包括长度值。如果分组中包括长度值,则在824处接收方代理在其对分组的处理中使用分组中包括的长度值,并且在826处高速缓存接收的长度值。如果分组中不包括长度值,则在828处接收器代理在其对分组的处理中使用先前高速缓存的长度值。
在图8D的示例性过程830中,接收方代理从发送方代理接收序列的下一个分组,并且在832处确定分组中(例如在分组的头部的序列字段中)是否包括序列值。如果在分组中包括序列值,则在834处接收方代理在其对分组的处理中使用分组中包括的序列值,并在835处高速缓存该序列值(例如以供以后在处理接收的下一个分组时使用)。如果分组中不包括序列值,则在836处接收方代理确定推断的序列值,并在其对分组的处理中使用该推断的序列值。在所示示例中,接收方代理通过将高速缓存序列值与高速缓存长度值相加来确定推断的序列值。然后,接收方代理高速缓存该推断的序列值(例如以供以后如果在下一个分组中发送了另一个差分值时使用)。
可以针对分组头部内的多个字段实现上述技术。作为示例,这些技术可以用于PCIe TLP头部中的字段,并且可以用于压缩存储器读取、存储器写入和完成TLP头部(Completion TLP Header)。这些PCIe TLP头部包含以可预测的方式在分组之间改变的若干字段,并因此可以从这些压缩技术极大地受益。下面的表1列出了可以使用本文描述的技术压缩的某些TLP头部字段,以及相关联的推断的值:
表1:可压缩的PCIe TLP头部字段
转到图9-12,其示出了示例性的基于PCIe的分组头部格式。特别地,图9是示出用于基于PCIe的存储器请求分组的示例性头部格式900的示图,图10是示出用于基于PCIe的完成分组的示例性头部格式1000的示图,图11是示出用于基于PCIe的存储器请求分组的另一示例性头部格式1100的示图,以及图12是示出用于基于PCIe的完成分组的另一示例性头部格式1200的示图。
在图9-12中示出的示例中,用于没有阴影的字段的显式值可以与每个分组一起发送,这是例如由于需要其用于PCIe路由目的。例如,源和目标之间的组件(其不跟踪先前的分组)需要该信息以将分组放置在正确的位置。可以根据本公开内容来压缩图9-12中用于具有阴影的字段的值(例如可以从传输中省略用于那些字段的显式值,或者可以使用差分值来代替显式值)。特别地,具有点状阴影的字段(例如图9的可选特征字段904、长度字段906、导引(steering)标签字段912和字节使能字段914)是不经常改变的字段,而具有对角线状阴影的字段(例如图9的标签字段910、高位地址字段916和地址字段918)则在分组之间改变,但是是以可预测的方式改变。在一些实例中,具有点状阴影的字段可以像图5、图7所示的长度字段那样被压缩。也就是说,只有当相比于先前发送的分组检测到改变时,才可以发送用于这些字段的显式值。在一些实例中,具有对角线状阴影的字段可以像图5、图7所示的序列字段那样被压缩。也就是说,只有当相比于先前发送的分组检测到意外改变时,才可以发送用于这些字段的显式值。因此,在一些情况下,可以使用差分值代替用于这些字段的显式值,而在其他情况下,可以从分组中完全省略这些字段。在一些实例中,分组的源和目的地之间的互连的一个或多个中间组件可能需要图12中交叉阴影的字段(图12的请求方区段字段1222和请求方ID字段1224)。因此,它们可以被包括在每个分组中,而不是根据本文描述的技术被压缩。
图9-10中所示的分组头部格式是用于根据示例性的基于PCIe的协议的TLP分组的示例性头部格式。特别地,图9的头部格式900是存储器请求TLP头部格式(使用64位地址路由),并且图10的头部格式1000是完成TLP头部格式。
图9的头部格式900包括分组类型头部字段902、一组可选特征头部字段904、长度头部字段906、请求方ID头部字段908、标签头部字段910或导引标签头部字段912、字节使能头部字段914、高位地址头部字段916和地址头部字段918。因为需要分组类型字段902和请求方ID字段908用于路由目的,所以根据本文描述的技术,可以不考虑将这些头部字段用于压缩。因此,如图9所示,将总是在头部中发送这些字段。然而,由于图9中所示的其他头部字段可以以预期的方式改变,因此可以根据本文描述的技术对其进行压缩。例如,在一些实例中,用于可选特征字段904、长度字段906、导引标签字段912和字节使能字段914的值在分组之间可以是恒定的,并且可以仅偶尔改变。由于该原因,可能仅在新分组中检测到所述值改变时,才需要发送所述值。因此,可以以与上文关于图5、图7的长度字段所描述的类似的方式来压缩(例如省略)这些字段。然而,标签字段910、高位地址字段916和地址字段918的值可以在分组之间改变,但是是以可预测的方式改变(例如基于其他头部字段的值)。由于该原因,仅当在其中检测到针对新分组的意外改变时,才需要发送这些字段的值。因此,可以以与以上关于图5、图7的序列字段所描述的类似的方式来压缩这些字段(例如可以省略,或可以发送差分值来代替显式值)。
图10的头部格式1000包括分组类型头部字段1002、可选特征头部字段1004、长度头部字段1006、完成方ID头部字段1008、完成状态头部字段1010、字节计数/BCM头部字段1012、请求方ID头部字段1014、标签头部字段1016、预留头部字段和低位地址头部字段。与图9的头部格式900的分组类型字段902和请求方ID字段908一样,需要分组1000的分组类型字段1002和完成方ID字段1008用于路由目的,并因此,可以不考虑根据本文描述的技术来压缩这些头部字段。类似地,在每个分组中也需要完成状态字段1010(因为该值可能不会由分组的接收方推断出),因此可以不考虑根据本文所述的技术将其用于压缩。在一些实例中,可选特征字段1004、长度字段1006和请求方ID字段1014的值在分组之间可以是恒定的,并且可能只会如此频繁地改变。由于该原因,仅当在新分组中检测到其值改变时才需要发送其值。因此,可以以与上文关于图5、图7的长度字段所描述的类似的方式来压缩(例如省略)这些字段。然而,标签字段1016、字节计数/BCM字段1012和低位地址字段1020的值可以在分组之间改变,但是是以可预测的方式改变(例如基于其他头部字段的值)。由于该原因,仅当在其中检测到针对新分组的意外改变时,才需要发送这些字段的值。因此,可以以与以上关于图5、图7的序列字段所描述的类似的方式来压缩这些字段(例如可以省略,或者可以发送差分值来代替显式值)。
在一些实例中,图9、图10的分组类型字段902、1002可以包括指示TLP的格式的多个位(例如3位)和指示TLP的类型的多个位(例如5位)。格式位可以指示一个或多个TLP前缀的存在,而类型位可以指示相关联的TLP前缀类型。分组类型字段902、1002的格式位和类型位可以提供确定TLP头部剩余部分的大小所需的信息,以及指示在头部之后该分组是否包含数据有效载荷的信息。
在一些实例中,图9、图10的可选特征字段904、1004可以包括指示分组的业务类别的位(例如3位)、分组的某些属性(例如3位)、轻量级通知(LN)(例如1位,其指示存储器请求是LN读取或LN写入,或完成是LN完成)、TLP提示(TPH)(例如1位,其指示TLP头部中存在TLP处理提示和可选的TLP处理提示前缀)、TLP摘要(例如1位,其指示在TLP末尾存在单个双字(Double Word)形式的TLP摘要)、错误中毒(Error Poisoned)指示(例如1位,其指示TLP是否中毒)、或地址类型指示(例如2位)。
在一些实例中,图9、图10的请求方ID字段908、1014可以包括指示在层次结构内唯一地标识请求方的请求方总线号、设备号和功能号的组合的值。在一些实例中,图9、图10的标签字段910、1016可以包括被指派给给定的非发布请求的数字以将该请求的完成与其他请求区分开的值。在一些实例中,图9的导引标签字段912可以包括系统特定的值,该系统特定的值用于标识请求方明确指向的处理资源。系统软件可以发现并标识TPH能力,以确定支持TPH的每个功能的导引标签分配。基于分组类型,分组可以包括标签字段或导引标签字段。在一些实例中,图9的高位地址字段916和地址字段918可以指示存储器请求分组900所指向的存储器地址。在一些实例中,可以使用图9的字节使能字段914的值来计算字节计数。
在一些实例中,图10的完成方ID字段1008可以包括指示在层级内唯一地标识请求的完成方的完成方总线号、设备号和功能号的组合的值。在一些实例中,完成状态字段可以指示完成的状态。在一些实例中,图10的字节计数/BCM字段1012可以包括用于字节计数已修改(Byte Count Modified,BCM)指示的位,其余的位指示用于请求的字节计数。在一些实例中,图10的低位地址字段1020可以指示用于完成的起始字节的低位字节地址。
图11-12所示的分组头部格式是用于TLP分组的额外的示例性头部格式。图11-12中所示的示例性头部格式包括与图9-10中的字段相同的一些字段(例如分组类型字段1102、1202,请求方ID字段1106,完成方ID字段1206,长度字段1108、1208,可选特征字段1114、1214,标签字段1116、1218,导引标签字段1118,字节使能字段1120,高位地址字段1122、1124,低位地址字段1126、1128、1220,以及完成状态字段1216),这些字段与图9-10中的相应字段相类似地被实现,并且还包括与图9-10中相比的额外的字段。可以包括这些额外的字段至少部分是因为具有多个PCIe区段的系统变得越来越普遍,并且当前的PCIe规范无法处理多个区段或如何在它们之间通信。另外,尽管PCIe带宽随时间增加,但延时实际上保持不变(至少部分是因为重定时器增加了额外的延时)。此外,设备现在可能在任意给定时间都有更多未完成的请求要跟踪,并且可能需要更多标签来跟踪这些请求。另外,现在虚拟化很普遍。尽管PCIe允许诸如PASID(过程地址空间ID)和地址转换之类的用于处理I/O虚拟化的额外机制,但是当前机制要求使用TLP前缀,在一些情况下这可能是不利的。例如,它们要求传输更多的位(额外的开销),并且一些PCIe派生的总线不支持TLP前缀。将用于这些特征的字段放置在TLP头部中可以使虚拟化更高效且易于实现。
因此,在图11-12所示的示例中,由于可分别通过请求方ID字段1106和完成方ID字段1206来路由用于图11-12中所示的头部格式的分组,因此包括8位区段ID字段——具体而言,图11、图12的请求方区段字段1104、1222或图12的完成方区段字段1204。此外,当以这种方式路由时,需要指定分组去向。在一些情况下,如果没有区段ID字段,则TLP可能会停留在区段内。基于请求方或完成方ID的路由可以提供比按地址进行路由(32或64位的头部使用)更短的路由机制(16-24位的头部使用)。可以仅需要图11、图12的分组类型字段1102、1202中的一位(以指示上游路由)来路由到根联合体。另外,包含这些字段使根联合体免于必须跟踪区段。
此外,在图11-12所示的示例中,使用了16位标签字段(例如1116、1218),这向已知的标签字段添加了额外6位(允许64x的额外标签)。另外,在图11-12所示的示例中,PASID字段(例如1110、1112,1210、1212)已经从TLP前缀部分移动到头部部分,这可以简化内部结构上的路由。此外,在图11-12所示的示例中,已移除“字节计数”字段,并且长度字段已从12位扩展到16位(从4K MPL扩展到64K MPL),从而允许扩展低位地址和配置空间(Configspace)位。根据一些实施例,下面的表2指示可以被包括在不同的TLP类型中的某些字段。
分组类型 | PASID | 请求方区段 | 16位标签 | 完成方区段 |
MWr | X | X | ||
MRd | X | X | X | |
Cpl | X | X | X | X |
表2:额外的PCIe TLP头部字段
在图11-12所示的示例中,可能存在每区段更多总线(16位相比于8位),以及每设备更多功能(10位相比于5位),这可以指示新的CfgRd和CfgWr定义。此外,在一些实例中,可以利用Fmt/类型字段的完整8位解码,从而提高字段的可扩展性。在一些实例中,图11的导引标签字段1118可以用于读取。尽管以上关于图11-12讨论了特定的额外字段,但是在PCIeTLP分组中也可以使用其他类型的额外字段,并且可以根据本文描述的技术来压缩这样的字段。
转到图13-15,示出了示例性的压缩的基于PCIe的头部格式。示例性头部格式包括差分值(例如1310、1312、1314、1412、1414、1416、1514、1516、1518)来代替某些显式头部字段值。图13-15的每个示例性格式包括分组类型字段(例如1302、1402、1502)、源区段字段(例如1304、1404、1504)和源ID字段(例如1306、1406、1506),这是因为可能需要这些字段用于对分组进行路由(并因此,可能无法根据本文描述的技术来压缩)。为了指示头部格式中哪些字段已经改变,在每个示例性头部格式中包括改变位掩码(Change Bitmask)字段(例如1308、1408、1508)。接收方可以使用该字段中的数据来确定相比于先前分组哪些字段已改变。图14-15均包括额外的目的地ID字段(例如1410、1510),并且图15还包括目的地区段字段1512。图13-15中示出的头部格式可以包括与所示出的那些相比更多或更少的字段(例如其中包括显式值而不是所示出的差分值中的一个或多个差分值)。
转到图16-17,分别示出了用于压缩和解压缩分组的过程的流程图。示例性过程中的操作可以由发送或接收数据分组(例如PCIe TLP或其他类型的数据分组)的设备的组件来执行。在一些实施例中,可以利用实现示例性过程中的一个或多个操作的指令(例如计算机程序)来编码计算机可读介质。示例性过程可以包括额外的或不同的操作,并且可以以所示的顺序或以另一顺序来执行操作。在一些情况下,图16-17中所示的一个或多个操作被实现为包括多个操作、子进程或其他类型的例程的过程。在一些情况下,操作可以被组合、以另一顺序执行、并行执行、迭代或重复、或以另一方式执行。
图16是压缩分组的示例性过程1600的流程图。因此,示例性过程1600可以在向接收方代理发送分组之前由发送方代理执行。在1602处,发送方代理获得要经由分组格式向接收方代理发送的数据。在1604处,发送方代理确定接收方代理可以推断出用于特定头部字段的显式值,并且在1606处,发送方代理构造要么省略头部字段要么包括用于头部字段的差分值来代替用于特定头部字段的显式值的分组。在1608处,发送方代理向接收方代理发送所构造的分组。在执行过程1600时,发送方代理可以实现以下各项的一个或多个操作:图6A的过程600、图6B的过程610、图8A的过程800或图8B的过程810。
图17是解压缩分组的示例性过程1700的流程图。相应地,示例性过程1700可以在从发送方代理接收到分组之后由接收方代理执行。在1702处,接收方代理从发送方代理接收分组。在1704处,接收方代理检测到要么(1)已经省略了特定头部字段,要么(2)已经包括了用于该特定头部字段的差分值来代替用于该特定头部字段的显式值。在1706处,接收方代理确定用于特定头部字段的显式值(例如使用如上所述的差分值或高速缓存的值)。在1708处,接收方代理使用在1706处确定的值来处理分组。在执行过程1700时,接收方代理可以实现以下各项的一个或多个操作:图6C的过程620、图6D的过程630、图8C的过程820或图8D的过程830。
前述公开内容提出了用于压缩分组的数种示例性技术,所述分组例如在互连协议中定义的分组头部格式。应当领会的是,可以使用类似的技术来压缩其他头部格式。例如,尽管本文讨论的一些技术是参照PCIe或基于PCIe协议的头部格式进行描述的,但是应当领会,这些技术也可以应用于其他互连协议,例如OpenCAPITM、Gen-ZTM、UPI、通用串行总线(USB)、针对加速器的高速缓存一致性互连(CCIXTM)、高级微设备TM的(AMDTM)InfinityTM、通用通信接口(CCI)或高通TM的CentriqTM互连等,或其他类型的基于分组的协议。
注意,可以在前述任意电子设备或系统中实现如上所述的装置、方法和系统。作为具体的说明,以下附图提供了用于利用本文所述的本发明的示例性系统。随着下文更详细地描述该系统,相比于上面的讨论,公开、描述和重新讨论了数种不同的互连。并且显而易见的是,上述进展可以应用于那些互连、结构或架构中的任意一个。
参照图18,描绘了包括多核处理器的计算系统的框图的实施例。处理器1800包括任意处理器或处理设备,例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持式处理器、应用处理器、协处理器、片上系统(SOC)或执行代码的其他设备。在一个实施例中,处理器1800包括至少两个核心——核心1801和核心1802,其可以包括非对称核心或对称核心(示出的实施例)。然而,处理器1800可以包括可以对称或不对称的任意数量的处理元件。
在一个实施例中,处理元件是指支持软件线程的硬件或逻辑单元。硬件处理元件的示例包括:线程单元、线程插槽、线程、处理单元、上下文、上下文单元、逻辑处理器、硬件线程、核心和/或能够保存处理器的状态(例如执行状态或架构状态)的任意其他元件。换句话说,在一个实施例中,处理元件是指能够独立地与诸如软件线程、操作系统、应用或其他代码之类的代码相关联的任意硬件。物理处理器(或处理器插槽)通常是指集成电路,该集成电路潜在地包括任意数量的其他处理元件,例如核心或硬件线程。
核心通常是指位于集成电路上的能够维持独立的架构状态的逻辑单元,其中,每个独立维持的架构状态与至少一些专用执行资源相关联。与核心相反,硬件线程通常是指位于集成电路上的能够维持独立的架构状态的任意逻辑单元,其中,独立维持的架构状态共享对执行资源的访问。可以看出,当某些资源被共享而其他资源专用于架构状态时,硬件线程与核心的命名法之间的界线重叠了。但是,操作系统经常将核心和硬件线程视为单独的逻辑处理器,其中,操作系统能够单独调度每个逻辑处理器上的操作。
如图18所示,物理处理器1800包括两个核心——核心1801和核心1802。此处,核心1801和核心1802被认为是对称核心,即具有相同配置、功能单元和/或逻辑的核心。在另一实施例中,核心1801包括无序处理器核心,而核心1802包括有序处理器核心。然而,可以从任意类型的核心中单独选择核心1801和核心1802,所述任意类型的核心例如本机核心、软件管理的核心、适于执行本机指令集架构(ISA)的核心、适于执行经翻译的指令集架构(ISA)的核心、共同设计的核心或其他已知的核心。在异构核心环境(即非对称核心)中,某种形式的翻译,例如二进制翻译,可以用于在一个或两个核心上调度或执行代码。为了进一步讨论,在核心1801中示出的功能单元会在下面进一步详细描述,因为核心1802中的单元在所描绘的实施例中以相似的方式操作。
如所描绘的,核心1801包括两个硬件线程1801a和1801b,它们也可以被称为硬件线程槽(slot)1801a和1801b。因此,在一个实施例中,诸如操作系统之类的软件实体潜在地将处理器1800视为四个单独的处理器,即能够同时执行四个软件线程的四个逻辑处理器或处理元件。如上所述,第一线程与架构状态寄存器1801a相关联,第二线程与架构状态寄存器1801b相关联,第三线程可以与架构状态寄存器1802a相关联,并且第四线程可以与架构状态寄存器1802b相关联。此处,如上所述,架构状态寄存器(1801a、1801b、1802a和1802b)中的每一项都可以被称为处理元件、线程槽或线程单元。如图所示,在架构状态寄存器1801b中复制架构状态寄存器1801a,因此能够为逻辑处理器1801a和逻辑处理器1801b存储各个架构状态/上下文。在核心1801中,还可以为线程1801a和1801b复制其他较小的资源,例如分配器和重命名器块1830中的指令指针和重命名逻辑。可以通过分区来共享一些资源,例如重排序/回退(retirement)单元1835中的重排序缓冲区、ILTB 1820、加载/存储缓冲区、以及队列。潜在地完全共享其他资源,例如无序单元1835的一部分、通用内部寄存器、页表基址寄存器、低级数据高速缓存和数据TLB 1815、以及执行单元1840。
处理器1800通常包括其他资源,这些资源可以被完全共享、通过分区共享、或者由处理元件专用/专用于处理元件。在图18中,示出了具有处理器的说明性逻辑单元/资源的纯示例性处理器的实施例。注意,处理器可以包括或省略这些功能单元中的任意一项,以及包括任意其他未示出的已知功能单元、逻辑单元或固件(未描绘)。如图所示,核心1801包括简化的代表性的无序(OOO)处理器核心。但是在不同的实施例中可以使用有序处理器。OOO核心包括:分支目标缓冲区1820,用于预测要执行/采用的分支;以及指令翻译缓冲区(I-TLB)1820,用于存储用于指令的地址翻译条目。
核心1801还包括解码模块1825,其耦合到提取单元1820以对提取的元素进行解码。在一个实施例中,提取逻辑单元包括分别与线程槽1801a、1801b相关联的各个定序器。通常,核心1801与第一ISA关联,该第一ISA定义/指定可以在处理器1800上执行的指令。通常,作为第一ISA的一部分的机器代码指令包括指令的一部分(被称为操作码),其引用/指定要执行的指令或操作。解码逻辑单元1825包括从指令的操作码中识别这些指令并将解码的指令继续传递到流水线以用于由第一ISA定义的处理的电路。例如,如下面更详细地讨论的,在一个实施例中,解码器1825包括设计为或适于识别诸如事务指令之类的特定指令的逻辑单元。作为解码器1825的识别的结果,架构或核心1801采取特定的预定义动作来执行与适当指令相关联的任务。重要的是,注意,本文描述的任务、块、操作和方法中的任意一项可以响应于单个或多个指令来执行;其中一些指令可能是新的或旧的指令。注意,在一个实施例中,解码器1826识别相同的ISA(或其子集)。替代地,在异构核心环境中,解码器1826识别第二ISA(第一ISA的子集或不同的ISA)。
在一个示例中,分配器和重命名器块1830包括用于保留资源的分配器,所述资源例如用于存储指令处理结果的寄存器文件。然而,在分配器和重命名器块1830还保留其他资源,例如用于跟踪指令结果的重排序缓冲区的情况下,线程1801a和1801b潜在地能够乱序执行。单元1830还可以包括寄存器重命名器,用于将程序/指令参考寄存器重命名为处理器1800内部的其他寄存器。重排序/回退单元1835包括诸如上述的重排序缓冲区、加载缓冲区和存储缓冲区之类的组件,用于支持无序执行以及稍后对乱序执行的指令的有序回退。
在一个实施例中,调度器和执行单元块1840包括调度器单元,用于调度执行单元上的指令/操作。例如,在具有可用浮点执行单元的执行单元的端口上调度浮点指令。还包括与执行单元关联的寄存器文件,以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整型执行单元、跳转执行单元、加载执行单元、存储执行单元和其他已知的执行单元。
低级数据高速缓存和数据翻译缓冲区(D-TLB)1850耦合到执行单元1840。数据高速缓存将存储最近使用/操作的元素(例如数据操作数),所述元素潜在地保存在存储器一致性状态中。D-TLB将存储最近的虚拟/线性至物理地址的转换。作为特定示例,处理器可以包括页表结构,以将物理存储器分成多个虚拟页。
此处,核心1801和1802共享对更高级或更外部(further-out)的高速缓存的访问,例如与片上接口1810相关联的第二级高速缓存。注意,更高级或更外部是指高速缓存的级别增加或者是更加远离执行单元。在一个实施例中,更高级高速缓存是最后一级数据高速缓存——处理器1800上的存储器层级中的最后一级高速缓存——例如第二或第三级数据高速缓存。然而,更高级高速缓存不会如此受限,因为其可以与指令高速缓存相关联或包括指令高速缓存。替代地,踪迹高速缓存(一种指令高速缓存)可以在解码器1825之后耦合以存储最近解码的踪迹。此处,指令潜在地指代宏指令(即,由解码器识别的通用指令),其可以被解码为多个微指令(微操作)。
在所描绘的配置中,处理器1800还包括片上接口模块1810。从历史上看,下面将更详细描述的存储器控制器已经被包括在处理器1800外部的计算系统中。在这种场景中,片上接口1810将与处理器1800外部的设备通信,所述外部的设备例如系统存储器1875、芯片集(通常包括连接到存储器1875的存储器控制器集线器和连接外围设备的I/O控制器集线器)、存储器控制器集线器、北桥或其他集成电路。并且在该场景中,总线1805可以包括任意已知的互连,例如多点分支总线、点对点互连、串行互连、并行总线、相干(例如高速缓存相干)总线、分层协议架构、差分总线和GTL总线。
存储器1875可以专用于处理器1800或与系统中的其他设备共享。存储器1875的类型的常见示例包括DRAM、SRAM、非易失性存储器(NV存储器)和其他已知的存储设备。注意,设备1880可以包括:耦合到存储器控制器集线器的图形加速器、处理器或卡,耦合到I/O控制器集线器的数据存储装置,无线收发器,闪存设备,音频控制器,网络控制器或其他已知的设备。
然而最近,随着更多的逻辑单元和设备集成在诸如SOC之类的单个管芯上,这些设备中的每一个设备都可以并入处理器1800中。例如,在一个实施例中,存储器控制器集线器与处理器1800在同一封装和/或管芯上。此处,核心的一部分(核心上部分)1810包括用于与诸如存储器1875或图形设备1880之类的其他设备对接的一个或多个控制器。包括用于与此类设备对接的互连和控制器的配置通常被称为核心上(on-core)(或非核心(un-core)配置)。作为示例,片上接口1810包括用于片上通信的环形互连以及用于片外通信的高速串行点对点链路1805。但是,在SOC环境中,更多设备可以被集成在单个管芯或集成电路上以提供小尺寸、高功能和低功耗,所述更多设备例如网络接口、协处理器、存储器1875、图形处理器1880以及任意其他已知的计算机设备/接口。
在一个实施例中,处理器1800能够执行编译器、优化和/或翻译器代码1877,以编译、翻译和/或优化应用代码1876,从而支持本文所述的装置和方法,或者与其对接。编译器通常包括程序或程序集,以将源文本/代码翻译为目标文本/代码。通常,利用编译器对程序/应用代码进行编译是分多个阶段(phase)进行的,并且将高级编程语言代码转换为低级机器或汇编语言代码。但是,单遍编译器仍可以用于简单编译。编译器可以利用任意已知的编译技术并执行任意已知的编译器操作,例如词法分析、预处理、解析、语义分析、代码生成、代码转换和代码优化。
较大的编译器通常包括多个阶段,但是最常见的是,这些阶段被包括在两个通用阶段内:(1)前端,即通常在其处可以发生句法处理、语义处理以及某些转换/优化,以及(2)后端,即通常在其处发生分析、转换、优化和代码生成。一些编译器指的是中间,这说明了编译器的前端和后端之间轮廓模糊。作为结果,对编译器的插入、关联、生成或其他操作的引用可以发生在编译器的上述阶段或遍(pass)中的任何一项中,以及任意其他已知阶段或遍中。作为说明性示例,编译器潜在地在编译的一个或多个阶段插入操作、调用、函数等,例如在编译的前端阶段插入调用/操作,并然后在转换阶段期间将调用/操作转换为较低级的代码。注意,在动态编译期间,编译器代码或动态优化代码可以插入此类操作/调用,以及优化该代码以在运行时执行。作为特定的说明性示例,可以在运行时期间动态地优化二进制代码(已编译的代码)。此处,程序代码可以包括动态优化代码、二进制代码或其组合。
与编译器类似,诸如二进制翻译器之类的翻译器静态地或动态地翻译代码以优化和/或翻译代码。因此,对代码、应用代码、程序代码或其他软件环境的执行的引用可以指的是:(1)动态地或静态地执行一个或多个编译器程序、优化代码优化器或者翻译器,以编译程序代码、维护软件结构、执行其他操作、优化代码或翻译代码;(2)执行包括操作/调用的主程序代码,例如已优化/编译的应用代码;(3)执行与主程序代码相关联的其他程序代码,例如库,以维护软件结构、执行其他软件相关的操作或优化代码;或是(4)其组合。
现在参考图19,示出了根据本发明的实施例的另一系统1900的框图。如图19所示,多处理器系统1900是点对点互连系统,并且包括经由点对点互连1950耦合的第一处理器1970和第二处理器1980。处理器1970和1980中的每一个处理器可以是处理器的某种版本。在一个实施例中,1952和1954是诸如高性能架构之类的串行、点对点相干互连结构的一部分。因此,本发明可以在QPI架构内实现。
尽管仅示出了两个处理器1970、1980,但是应当理解,本发明的范围不限于此。在其他实施例中,在给定处理器中可以存在一个或多个额外的处理器。
处理器1970和1980被示出为分别包括集成存储器控制器单元1972和1982。处理器1970还包括点对点(P-P)接口1976和1978作为其总线控制器单元的一部分;类似地,第二处理器1980包括P-P接口1986和1988。处理器1970、1980可以使用P-P接口电路1978、1988经由点对点(P-P)接口1950交换信息。如图19所示,IMC 1972和1982将处理器耦合到相应的存储器,即存储器1932和存储器1934,其可以是主存储器中的本地附接到相应处理器的部分。
处理器1970、1980各自使用点对点接口电路1976、1994、1986、1998经由个体的P-P接口1952、1954与芯片集1990交换信息。芯片集1990还经由接口电路1992沿着高性能图形互连1939与高性能图形电路1938交换信息。
共享高速缓存(未示出)可以被包括在任一处理器中或者在两个处理器之外;还可以经由P-P互连与处理器连接,使得如果处理器被置于低功耗模式,则可以将任一处理器或两个处理器的本地高速缓存信息存储在共享高速缓存中。
芯片集1990可经由接口1996耦合到第一总线1916。在一个实施例中,第一总线1916可以是外围组件互连(PCI)总线,或诸如高速PCI总线或另一第三代I/O互连总线之类的总线,但本发明的范围不限于此。
如图19所示,各种I/O设备1914耦合到第一总线1916以及总线桥接器1918,该总线桥接器1918将第一总线1916耦合到第二总线1920。在一个实施例中,第二总线1920包括低引脚数(LPC)总线。各种设备耦合到第二总线1920,所述各种设备例如包括:键盘和/或鼠标1922、通信设备1927和诸如磁盘驱动器或其他大容量存储设备之类的存储单元1928,在一个实施例中,其通常包括指令/代码和数据1930。此外,音频I/O 1924被示出为耦合到第二总线1920。注意,在所包括的组件和互连架构变化的情况下,其他架构是可能的。例如,代替于图19的点对点架构,系统可以实现多点分支总线或其他这样的架构。
尽管已经针对有限数量的实施例描述了本发明,但是本领域技术人员将领会由此做出的许多修改和变型。所附权利要求旨在覆盖落入本发明的真实精神和范围内的所有这样的修改和变型。
设计可以经历从创建到模拟到制造的各个阶段。表示设计的数据可以以多种方式表示设计。首先,如在模拟中有用的,可以使用硬件描述语言或另一种功能描述语言来表示硬件。另外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某个阶段达到表示硬件模型中各种设备的物理位置的数据级别。在使用传统半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于生产集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。诸如盘之类的存储器或磁或光存储装置可以是机器可读介质,用于存储经由调制或以其他方式生成以发送这样的信息的光波或电波发送的信息。当发送指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传的程度上,制作新的副本。因此,通信提供商或网络提供商可以将体现本公开的实施例的技术的诸如编码到载波中的信息之类的制品至少临时存储在有形的机器可读介质上。
本文所使用的模块是指硬件、软件和/或固件的任意组合。作为示例,模块包括与用于存储适于由微控制器执行的代码的非暂时性介质相关联的硬件,例如微控制器。因此,在一种实施例中,对模块的引用是指特别配置为识别和/或执行要保存在非暂时性介质上的代码的硬件。此外,在另一种实施例中,模块的使用是指包括特别适于由微控制器执行以实施预定操作的代码的非暂时性介质。并且,如可推断的,在又一种实施例中,术语模块(在该示例中)可以是指微控制器和非暂时性介质的组合。通常,图示为单独的模块界限通常变化并且可能重叠。例如,第一模块和第二模块可以共用硬件、软件、固件或其组合,同时可能保留一些独立的硬件、软件或固件。在一种实施例中,术语逻辑单元的使用包括硬件,例如晶体管、寄存器或其他硬件,如可编程逻辑器件。
在一个实施例中,短语‘被配置为’的使用是指布置、放在一起、制造,提供以售卖、进口和/或设计执行指定或确定的任务的装置、硬件、逻辑单元或元件。在该示例中,没有进行操作的装置或其元件仍‘被配置为’执行指定任务,前提是其被设计、耦合和/或互连来执行所述指定任务。纯粹作为说明性的示例,逻辑门可以在操作期间提供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)、磁卡或光卡、闪存或用于经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)通过互联网传输信息的有形的机器可读存储装置。因此,计算机可读介质包括适合于存储或发送具有机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
以下示例涉及根据本说明书的实施例。尽管下面描述的每个示例都在基于PCIe的协议中实现了分组的压缩或解压缩,但以下示例中的任意一个示例都可以用于压缩或解压缩基于通用串行总线(USB)的分组、计算高速链接(CXL)分组、针对加速器的高速缓存一致性互连(CCIX)分组或传输控制协议/互联网协议(TCP/IP)。
示例1是一种装置,其包括:端口,其包括用于实现基于高速外围组件互连(PCIe)的协议的一层或多层的电路,其中,所述端口包括将进行以下操作的代理:获得要经由分组通过基于所述基于PCIe的协议的链路向另一设备发送的数据,其中,所述分组将包括头部;确定用于所述分组的特定头部字段的值能够由所述另一设备基于用于先前发送的分组的一个或多个头部字段值来推断出;以及使得针对所述分组来构造头部,其中,基于确定用于所述特定头部字段的所述值能够由所述另一设备推断出,所述头部将被构造为从所述分组头部中省略所述特定头部字段;其中,所述端口将使用所述电路向所述另一设备发送具有所述头部的所述分组。
示例2可以包括示例1的主题,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段相同。
示例3可以包括示例1的主题,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段不同。
示例4可以包括示例1-3中任一项的主题,其中,所述代理还将进行以下操作:访问用于所述特定头部字段的高速缓存的值;基于所述高速缓存的值来确定用于所述特定头部字段的推断的值;以及将所述推断的值与用于所述分组的所述特定头部字段的所述值进行比较。
示例5可以包括示例1-4中任一项的主题,其中,所述代理还将高速缓存用于所述特定头部字段的所述推断的值。
示例6可以包括示例1-5中任一项的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
示例7可以包括示例1-6中任一项的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例8可以包括示例7的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例9是一种方法,其包括:在发送方代理处获得要经由与基于高速外围组件互连(PCIe)的协议兼容的分组向接收方代理发送的数据;确定用于所述分组的特定头部字段的值能够由所述接收方代理基于用于先前发送的分组的一个或多个头部字段值推断出;构造所述数据的分组头部,其中,构造所述分组头部包括基于确定用于所述特定头部字段的所述值能够由所述接收方代理推断出来从所述分组头部中省略所述特定头部字段;以及向所述接收方代理发送具有所述分组头部的所述分组。
示例10可以包括示例9的主题,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段相同。
示例11可以包括示例9的主题,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段不同。
示例12可以包括示例9-11中任一项的主题,其中,所述方法还包括:访问用于所述特定头部字段的高速缓存的值;基于所述高速缓存的值来确定用于所述特定头部字段的推断的值;以及将所述推断的值与用于所述分组的所述特定头部字段的所述值进行比较。
示例13可以包括示例9-12中任一项的主题,其中,所述方法还包括:在所述发送方代理处高速缓存用于所述特定头部字段的所述推断的值。
示例14可以包括示例9-13中任一项的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
示例15可以包括示例9-14中任一项的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例16可以包括示例15的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例17是一种装置,其被配置为执行示例9-16的方法中的一项或多项。
示例18是一种系统,其包括用于执行示例9-16的方法中的一项或多项的单元。
示例19是一种包括指令的计算机可读介质,所述指令当被执行时使得一个或多个处理器执行示例9-16的方法中的一项或多项。
示例20是一种装置,其包括:端口,其包括用于实现基于高速外围组件互连(PCIe)的协议的一层或多层的电路,其中:所述电路将通过链路从另一设备接收特定分组,其中,所述特定分组与所述基于PCIe的协议兼容,并且所述链路基于所述基于PCIe的协议;并且所述代理将进行以下操作:检测从所述特定分组的头部中省略了特定头部字段;至少部分地基于来自先前在所述链路上接收的另一分组的用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及将所确定的值用于所述特定分组的所述特定头部字段。
示例21包括示例20的主题,其中,所述代理将还基于用于来自所述先前接收的分组的另一头部字段的值来确定用于所述特定头部字段的所述值。
示例22包括示例21的主题,其中,所述代理将通过将用于所述特定头部字段的所述高速缓存的值与用于来自先前接收的分组的所述头部字段的所述值相加来确定用于所述特定头部字段的所述值。
示例23包括示例20的主题,其中,所述代理将通过将用于所述特定头部字段的所述高速缓存的值增加预定量来确定用于所述特定头部字段的所述值。
示例24包括示例20的主题,其中,用于所述特定头部字段的所确定的值与用于所述特定头部字段的所述高速缓存的值相同。
示例25包括示例20-24中任一项的主题,其中,所述代理还将高速缓存用于所述特定头部字段的所确定的值。
示例26包括示例20-25中任一项的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
示例27包括示例20-26中任一项的主题,其中,所述特定分组是基于PCIe的事务层分组(TLP)。
示例28包括示例27的主题,其中,所述特定分组是存储器请求TLP或完成TLP。
示例29是一种方法,其包括:在链路上接收与基于高速外围组件互连(PCIe)的协议兼容的分组;检测从所述分组的头部中省略了特定头部字段;至少部分地基于来自所述链路上的先前接收的分组的用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及使用用于所述特定头部字段的所确定的值来处理所述分组。
示例30包括示例29的主题,其中,确定用于所述特定头部字段的所述值还基于用于先前接收的分组的头部字段值。
示例31包括示例30的主题,其中,确定用于所述特定头部字段的所述值包括将用于所述特定头部字段的所述高速缓存的值与用于所述先前接收的分组的所述头部字段值相加。
示例32包括示例29的主题,其中,确定用于所述特定头部字段的所述值包括将用于所述特定头部字段的所述高速缓存的值增加预定量。
示例33包括示例29的主题,其中,用于所述特定头部字段的所确定的值与用于所述特定头部字段的所述高速缓存的值相同。
示例34包括示例29-33中任一项的主题,其中,所述方法还包括高速缓存用于所述特定头部字段的所确定的值。
示例35包括示例29-34中任一项的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
示例36包括示例29-35中任一项的主题,其中,所述分组是基于PCIe的事务层分组(TLP)。
示例37包括示例36的主题,其中,所述分组是存储器请求TLP或完成TLP。
示例38是一种装置,其被配置为执行示例29-37的方法中的一项或多项。
示例39是一种系统,其包括用于执行示例29-37的方法中的一项或多项的单元。
示例40是一种包括指令的计算机可读介质,所述指令当被执行时使得一个或多个处理器执行示例29-37的方法中的一项或多项。
示例41是一种系统,其包括:第一设备;以及第二设备,其通过根据基于高速外围组件互连(PCIe)的协议的链路耦合到所述第一设备。所述第一设备包括端口,所述端口包括用于实现所述基于PCIe协议的一层或多层的电路,所述端口包括将进行以下操作的代理:获得要经由分组通过所述链路向所述第二设备发送的数据,其中,所述分组将包括头部;确定用于所述分组的特定头部字段的值能够由所述第二设备基于用于先前发送的分组的一个或多个头部字段值来推断出;以及使得针对所述分组来构造头部,其中,基于确定用于所述特定头部字段的所述值能够由所述另一设备推断出,所述头部将被构造为从所述分组头部中省略所述特定头部字段;其中,所述端口将使用所述电路向所述第二设备发送具有所述头部的所述分组。
示例42包括示例41的主题,其中,所述第二设备包括:端口,其包括用于实现所述基于PCIe的协议的一层或多层的电路,其中,所述电路将通过所述链路从所述第一设备接收所述分组,并且所述代理将进行以下操作:检测从所述分组的所述头部中省略了特定头部字段;至少部分地基于来自先前在所述链路上接收的另一分组的用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及将所确定的值用于所述特定分组的所述特定头部字段。
示例43是一种装置,其包括:端口,其包括用于实现基于高速外围组件互连(PCIe)的协议的一层或多层的电路,其中,所述端口包括将进行以下操作的代理:获得要经由分组通过基于所述基于PCIe的协议的链路向另一设备发送的数据,其中,所述分组将包括头部;确定用于所述分组的特定头部字段的值能够由所述另一设备基于用于先前发送的分组的特定头部字段的先前值来推断出;以及使得针对所述分组来构造头部,其中,所述头部包括指示用于所述特定头部字段的所述值与用于先前发送的分组中的所述特定头部字段的所述先前值之间的差的差分值;其中,所述端口将使用所述电路向所述另一设备发送具有所述头部的所述分组。
示例44包括示例43的主题,其中,所述分组还包括指示所述分组中包括所述差分值来代替用于所述特定头部字段的显式值的字段。
示例45包括示例43或44的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、字节计数头部字段或低位地址头部字段。
示例46包括示例43-45中任一项的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例47包括示例43-46中任一项的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例48是一种方法,其包括:在发送方代理处,获得要经由与基于高速外围组件互连(PCIe)的协议兼容的分组向接收方代理发送的数据;确定用于所述分组的特定头部字段的值能够由所述接收方代理基于用于先前发送的分组中的所述特定头部字段的先前值推断出;针对所述数据来构造分组,其中,所述分组包括指示用于所述特定头部字段的所述值与用于先前发送的分组中的所述特定头部字段的所述先前值之间的差的差分值;以及向接收方代理发送所构造的分组。
示例49包括示例48的主题,其中,所述分组还包括指示所述分组中包括所述差分值来代替用于所述特定头部字段的显式值的字段。
示例50包括示例48或49的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、字节计数头部字段或低位地址头部字段。
示例51包括示例48-50中任一项的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例52包括示例51的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例53是一种装置,其被配置为执行示例48-52的方法中的一项或多项。
示例54是一种系统,其包括用于执行示例48-52的方法中的一项或多项的单元。
示例55是一种包括指令的计算机可读介质,所述指令当被执行时使一个或多个处理器执行示例48-52的方法中的一项或多项。
示例56是一种设备,其包括:端口,其包括用于实现基于高速外围组件互连(PCIe)的协议的一层或多层的电路,其中:所述电路将通过链路从另一设备接收特定分组,其中,所述特定分组与所述基于PCIe的协议兼容,并且所述链路基于所述基于PCIe的协议;并且所述代理将进行以下操作:检测所述特定分组包括用于特定头部字段的差分值;基于所述差分值和用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及将所确定的值用于所述特定分组的所述特定头部字段。
示例57包括示例56的主题,其中,所述代理还将检测所述分组包括指示所述分组中包括用于所述特定头部字段的所述差分值而不是用于所述特定头部字段的实际值的字段。
示例58包括示例56或57的主题,其中,所述代理还高速缓存用于所述特定头部字段的所确定的值。
示例59包括示例56-58的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、字节计数头部字段或低位地址头部字段。
示例60包括示例56-59的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例61包括示例60的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例62是一种方法,其包括:接收与基于高速外围组件互连(PCIe)的协议兼容的分组;检测所述分组包括用于特定头部字段的差分值;基于所述差分值和用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及使用用于所述特定头部字段的所确定的值来处理所述分组。
示例63包括示例62的主题,其中,检测所述分组包括用于所述特定头部字段的差分值是基于检测到所述分组包括指示所述分组中包括用于所述特定头部字段的差分值而不是用于所述特定头部字段的实际值的字段。
示例64包括示例62或63的主题,其中,所述方法还包括高速缓存用于所述特定头部字段的所确定的值。
示例65包括示例62-64中任一项的主题,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、字节计数头部字段或低位地址头部字段。
示例66包括示例62-65中任一项的主题,其中,所构造的分组是基于PCIe的事务层分组(TLP)。
示例67包括示例66的主题,其中,所构造的分组是存储器请求TLP或完成TLP。
示例68是一种装置,其被配置为执行示例62-67的方法中的一项或多项。
示例69是一种系统,其包括用于执行示例62-67的方法中的一项或多项的单元。
示例70是一种包括指令的计算机可读介质,其中,所述指令当被执行时使一个或多个处理器执行示例62-67的方法中的一项或多项。
示例71是一种系统,其包括:第一设备;以及第二设备,其通过根据基于高速外围组件互连(PCIe)的协议的链路可通信的耦合到所述第一设备。所述第一设备包括端口,所述端口包括用于实现所述基于PCIe协议的一层或多层的电路,并且所述端口包括将进行以下操作的代理:获得要经由分组通过链路向所述第二设备发送的数据,其中,所述分组将包括头部;确定用于所述分组的特定头部字段的值能够由所述第二设备基于用于先前发送的分组中的所述特定头部字段的先前值来推断出;以及使得针对所述分组来构造头部,其中,所述头部包括差分值,所述差分值指示用于所述特定头部字段的所述值与用于先前发送的分组中的所述特定头部字段的所述先前值之间的差;其中,所述端口将使用电路向第二设备发送具有所述头部的所述分组。
示例72包括示例71的主题,其中,所述第二设备包括:端口,其包括用于实现基于PCIe协议的一层或多层的电路,其中,所述电路将通过所述链路从第一设备从接收所述分组,并且所述代理将进行以下操作:检测所述分组包括用于所述特定头部字段的所述差分值;以及基于所述差分值和用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及将所确定的值用于所述特定分组的所述特定头部字段。
在整个说明书中对“一个实施例”或“一种实施例”的引用是指结合该实施例描述的特定特征、结构或特性被包括在本发明的至少一个实施例中。因此,贯穿本说明书在各处出现的短语“一个实施例”或“一种实施例”不一定都指代相同实施例。此外,在一个或多个实施例中,可以以任何合适的方式来组合特定特征、结构或特性。
在前述说明书中,已经参考特定示例性实施例给出了详细描述。然而,将显而易见的是,在不脱离如所附权利要求书中阐述的本发明的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。因此,说明书和附图应被认为是说明性的而不是限制性的。此外,实施例和其他示例性语言的前述使用不一定指代相同的实施例或相同的示例,而是可以指代不同且有区别的实施例以及潜在地相同的实施例。
Claims (20)
1.一种装置,包括:
端口,其包括用于实现互连协议的一层或多层的电路,其中,所述端口包括将进行以下操作的代理:
获得要经由分组通过基于所述互连协议的链路向另一设备发送的数据,其中,所述分组将包括头部;
确定用于所述分组的特定头部字段的值能够由所述另一设备基于用于先前发送的分组的一个或多个头部字段值来推断出;以及
使得针对所述分组来构造头部,其中,基于确定用于所述特定头部字段的所述值能够由所述另一设备推断出,所述头部将被构造为从所述分组头部中省略所述特定头部字段;
其中,所述端口将使用所述电路向所述另一设备发送具有所述头部的所述分组。
2.根据权利要求1所述的装置,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段相同。
3.根据权利要求1所述的装置,其中,所述特定头部字段与关联于用于所述先前发送的分组的所述头部字段值的头部字段不同。
4.根据权利要求1-3中任一项所述的装置,其中,所述代理还将进行以下操作:
访问用于所述特定头部字段的高速缓存的值;
基于所述高速缓存的值来确定用于所述特定头部字段的推断的值;以及
将所述推断的值与用于所述分组的所述特定头部字段的所述值进行比较。
5.根据权利要求1-3中任一项所述的装置,其中,所述代理还将高速缓存用于所述特定头部字段的所述推断的值。
6.根据权利要求1-3中任一项所述的装置,其中,所述特定头部字段是以下各项中的一项:标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
7.根据权利要求1-3中任一项所述的装置,其中,所述互连协议是以下各项中的一项:基于高速外围组件互连(PCIe)的协议、基于通用串行总线(USB)的协议、基于计算高速链接(CXL)的协议、基于针对加速器的高速缓存一致性互连(CCIX)的协议和基于传输控制协议/互联网协议(TCP/IP)的协议。
8.根据权利要求7所述的装置,其中,所述互连协议是基于PCIe的协议,并且所述分组是基于PCIe的事务层分组(TLP)。
9.根据权利要求8所述的装置,其中,所述分组是存储器请求TLP或完成TLP。
10.一种方法,包括:
在发送方代理处获得要经由与基于高速外围组件互连(PCIe)的协议兼容的分组向接收方代理发送的数据;
确定用于所述分组的特定头部字段的值能够由所述接收方代理基于用于先前发送的分组的一个或多个头部字段值推断出;
构造所述数据的分组头部,其中,构造所述分组头部包括:基于确定用于所述特定头部字段的所述值能够由所述接收方代理推断出,从所述分组头部中省略所述特定头部字段;以及
向所述接收方代理发送具有所述分组头部的所述分组。
11.一种装置,包括:
端口,其包括用于实现基于高速外围组件互连(PCIe)的协议的一层或多层的电路,其中:
所述电路将通过链路从另一设备接收特定分组,其中,所述特定分组与所述基于PCIe的协议兼容,并且所述链路基于所述基于PCIe的协议;并且
所述代理将进行以下操作:
检测从所述特定分组的头部中省略了特定头部字段;
至少部分地基于来自先前在所述链路上接收的另一分组的用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及
将所确定的值用于所述特定分组的所述特定头部字段。
12.根据权利要求11所述的装置,其中,所述代理将还基于用于来自所述先前接收的分组的另一头部字段的值来确定用于所述特定头部字段的所述值。
13.根据权利要求11所述的装置,其中,所述代理将通过将用于所述特定头部字段的所述高速缓存的值与用于来自先前接收的分组的所述头部字段的所述值相加来确定用于所述特定头部字段的所述值。
14.根据权利要求11所述的装置,其中,所述代理将通过将用于所述特定头部字段的所述高速缓存的值增加预定量来确定用于所述特定头部字段的所述值。
15.根据权利要求11所述的装置,其中,用于所述特定头部字段的所确定的值与用于所述特定头部字段的所述高速缓存的值相同。
16.根据权利要求11所述的装置,其中,所述代理还将高速缓存用于所述特定头部字段的所确定的值。
17.根据权利要求11-16中任一项所述的装置,其中,所述特定头部字段是标签头部字段、高位地址头部字段、地址头部字段、长度头部字段、导引标签头部字段、字节使能头部字段、字节计数头部字段、请求方标识头部字段、低位地址头部字段或可选的特征头部字段。
18.根据权利要求11-16中任一项所述的装置,其中,所述特定分组是基于PCIe的事务层分组(TLP)。
19.一种系统,包括:
第一设备;以及
第二设备,其通过根据基于高速外围组件互连(PCIe)的协议的链路耦合到所述第一设备;
其中,所述第一设备包括端口,所述端口包括用于实现所述基于PCIe协议的一层或多层的电路,所述端口包括将进行以下操作的代理:
获得要经由分组通过所述链路向所述第二设备发送的数据,其中,所述分组将包括头部;
确定用于所述分组的特定头部字段的值能够由所述第二设备基于用于先前发送的分组的一个或多个头部字段值来推断出;以及
使得针对所述分组来构造头部,其中,基于确定用于所述特定头部字段的所述值能够由所述另一设备推断出,所述头部将被构造为从所述分组头部中省略所述特定头部字段;
其中,所述端口将使用所述电路向所述第二设备发送具有所述头部的所述分组。
20.根据权利要求19所述的系统,其中,所述第二设备包括:
端口,其包括用于实现所述基于PCIe的协议的一层或多层的电路,其中,所述电路将通过所述链路从所述第一设备接收所述分组,并且所述代理将进行以下操作:
检测从所述分组的所述头部中省略了特定头部字段;
至少部分地基于来自先前在所述链路上接收的另一分组的用于所述特定头部字段的高速缓存的值来确定用于所述特定头部字段的值;以及
将所确定的值用于所述特定分组的所述特定头部字段。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962866396P | 2019-06-25 | 2019-06-25 | |
US62/866,396 | 2019-06-25 | ||
US16/564,834 | 2019-09-09 | ||
US16/564,834 US11593280B2 (en) | 2019-06-25 | 2019-09-09 | Predictive packet header compression |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112131148A true CN112131148A (zh) | 2020-12-25 |
Family
ID=68981883
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010224433.0A Pending CN112131148A (zh) | 2019-06-25 | 2020-03-25 | 预测性分组头部压缩 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11593280B2 (zh) |
EP (1) | EP3757811B1 (zh) |
CN (1) | CN112131148A (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113498595B (zh) * | 2020-01-22 | 2022-10-11 | 华为技术有限公司 | 一种基于PCIe的数据传输方法及装置 |
US11416431B2 (en) | 2020-04-06 | 2022-08-16 | Samsung Electronics Co., Ltd. | System with cache-coherent memory and server-linking switch |
KR20220060326A (ko) | 2020-11-04 | 2022-05-11 | 삼성전자주식회사 | 확장 패킷을 제공하는 인터페이스 회로 및 이를 포함하는 프로세서 |
KR20220067992A (ko) * | 2020-11-18 | 2022-05-25 | 삼성전자주식회사 | 선택적 및 병렬적 에러 정정을 수행하는 메모리 컨트롤러, 이를 포함하는 시스템 및 메모리 장치의 동작 방법 |
KR102668564B1 (ko) | 2021-06-01 | 2024-05-24 | 에스케이하이닉스 주식회사 | PCIe 인터페이스 장치 및 그 동작 방법 |
KR102518317B1 (ko) | 2021-04-13 | 2023-04-06 | 에스케이하이닉스 주식회사 | PCIe 인터페이스 장치 및 그 동작 방법 |
KR102509491B1 (ko) * | 2021-04-13 | 2023-03-14 | 에스케이하이닉스 주식회사 | PCIe 인터페이스 시스템 및 그 동작 방법 |
US11789658B2 (en) | 2021-04-13 | 2023-10-17 | SK Hynix Inc. | Peripheral component interconnect express (PCIe) interface system and method of operating the same |
CN113485950A (zh) * | 2021-06-22 | 2021-10-08 | 上海天数智芯半导体有限公司 | 一种合并发送PCIe存储器写请求的系统及方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6999429B1 (en) * | 2000-03-03 | 2006-02-14 | Telefonaktiebolaget Lm Ericsson | Access technology integrated header compression |
US7602778B2 (en) * | 2005-06-29 | 2009-10-13 | Cisco Technology, Inc. | System and methods for compressing message headers |
US7916750B2 (en) | 2005-12-28 | 2011-03-29 | Intel Corporation | Transaction layer packet compression |
US8111704B2 (en) | 2009-06-26 | 2012-02-07 | Intel Corporation | Multiple compression techniques for packetized information |
US8463934B2 (en) * | 2009-11-05 | 2013-06-11 | Rj Intellectual Properties, Llc | Unified system area network and switch |
US8799550B2 (en) | 2010-07-16 | 2014-08-05 | Advanced Micro Devices, Inc. | System and method for increased efficiency PCI express transaction |
-
2019
- 2019-09-09 US US16/564,834 patent/US11593280B2/en active Active
-
2020
- 2020-03-24 EP EP20165142.9A patent/EP3757811B1/en active Active
- 2020-03-25 CN CN202010224433.0A patent/CN112131148A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US11593280B2 (en) | 2023-02-28 |
US20190391936A1 (en) | 2019-12-26 |
EP3757811A1 (en) | 2020-12-30 |
EP3757811B1 (en) | 2024-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11238203B2 (en) | Systems and methods for accessing storage-as-memory | |
US11561910B2 (en) | In-band retimer register access | |
US11593280B2 (en) | Predictive packet header compression | |
US10139889B2 (en) | Method, apparatus, and system for improving resume times for root ports and root port integrated endpoints | |
NL2029511B1 (en) | Source ordering in device interconnects | |
JP6251806B2 (ja) | 装置、方法、プログラム、システム、およびコンピュータ可読ストレージ媒体 | |
US11550746B2 (en) | Multi-uplink device enumeration and management | |
CN105793830B (zh) | 一种在节点之间共享存储器和i/o服务的装置、方法、系统 | |
US20220414046A1 (en) | Systems, methods, and devices for dynamic high speed lane direction switching for asymmetrical interfaces | |
CN114528241A (zh) | 事务层分组格式 | |
US10817454B2 (en) | Dynamic lane access switching between PCIe root spaces | |
JP2024526012A (ja) | 部分幅リンク状態におけるレイテンシ最適化 | |
US8958471B2 (en) | Method, apparatus, and system for sliding matrix scoreboard utilized in auto feedback closed loops | |
JP7163554B2 (ja) | 装置、方法、プログラム、システム、およびコンピュータ可読ストレージ媒体 | |
JP2018049658A (ja) | 装置、方法、およびシステム |
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 |