CN105612502A - 虚拟重试队列 - Google Patents

虚拟重试队列 Download PDF

Info

Publication number
CN105612502A
CN105612502A CN201380080097.5A CN201380080097A CN105612502A CN 105612502 A CN105612502 A CN 105612502A CN 201380080097 A CN201380080097 A CN 201380080097A CN 105612502 A CN105612502 A CN 105612502A
Authority
CN
China
Prior art keywords
request
retry
logic
dependence
queue
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.)
Granted
Application number
CN201380080097.5A
Other languages
English (en)
Other versions
CN105612502B (zh
Inventor
B·法西姆
Y-C·刘
J·D·张伯伦
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 CN105612502A publication Critical patent/CN105612502A/zh
Application granted granted Critical
Publication of CN105612502B publication Critical patent/CN105612502B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Hardware Redundancy (AREA)
  • Steering Control In Accordance With Driving Conditions (AREA)
  • Apparatus For Radiation Diagnosis (AREA)

Abstract

进入饥饿模式,并且标识重试队列中的第一请求的特定的依赖关系。确定获取到此特定的依赖关系,并且基于此特定的依赖关系的获取来重试第一请求。

Description

虚拟重试队列
本公开涉及计算系统,并且特定地(但不排他地)涉及计算系统中的一致性控制。
背景技术
处理器芯片已经在近几十年中显著地演进。多核芯片的出现已经实现并行计算以及计算设备(包括个人计算机和服务器)内的其他功能。处理器原始地开发为仅具有一个核。每一个核可以是能够读取执行程序指令的独立的中央处理单元(CPU)。已经为个人计算设备开发了双核、四核以及甚至六核处理器,并且高性能服务器芯片已经开发为具有高达十个、二十个以及更多核。利用有线导体或其他传输介质的片上互连可将核与其他片上组件互连。按比例缩放芯片上的核数量可能对寻求促进核的高速互连的芯片设计者提出挑战。已经开发了各种互连架构,包括环形总线互连架构,等等此类示例。
计算设备可利用诸如外围组件互连(PCI)快速(PCIe)之类的互连架构来促进设备上的组件之间的互通信。互连架构可使用基于信用的流控制和其他流控制规则来管理设备的各种组件对设备资源的“公平的”访问和使用。当多个组件竞争资源时,由于此竞争或其他因素,一个组件对资源的访问会受到阻碍。例如,死锁或活锁条件可能发生,从而导致贫乏的组件的资源饥饿。相同的设备还能够及时地发布对针对此设备的事务的响应。已经为处置计算设备的组件的请求或响应无法取得向前进展(forwardprogress)的实例开发了内部饥饿机制。此上下文中的向前进展涉及组件发布事务请求(或完成响应)并且及时地使它们完成(或者成功地传送)的能力。向前进展会出于各种原因而停滞,诸如,当设备不具有成功地将分组(packet)发布到链路上的流控制信用时,等等此类示例。
附图说明
图1示出包括多核处理器的计算系统的框图的实施例。
图2示出包括互连的多核系统的框图。
图3示出包括实现至少一个虚拟重试队列的特征的逻辑的示例系统块的框图。
图4示出表示示例系统块的示例请求虚拟重试队列和响应虚拟重试队列的框图。
图5示出表示示例请求虚拟重试队列的框图。
图6示出表示示例响应虚拟重试队列的框图。
图7示出表示用于使用虚拟重试队列的示例技术的流程图。
图8示出计算系统的框图的另一实施例。
各个附图中的相同的参考号和指定指示相同的元件。
具体实施方式
在以下描述中,陈述了许多特定细节(诸如,特定类型的处理器和系统配置、特定的硬件结构、特定的架构和微架构细节、特定的寄存器配置、特定的指令类型、特定的系统组件、特定的测量/高度、特定的处理器流水线级和操作等的示例)以提供对本发明的透彻理解。然而,对本领域技术人员将显而易见的是,无需采用这些特定的细节来实践本发明。在其他实例中,未详细地描述公知的组件或方法(诸如,特定的和替代的处理器架构、用于所描述的算法的特定逻辑电路/代码、特定的固件代码、特定的互连操作、特定的逻辑配置、特定的制造技术和材料、特定的编译器实现、特定的算法代码表达、特定的断电和门控技术/逻辑以及计算机系统的其他特定的操作细节)以避免不必要地使本发明含糊。
尽管可参考特定的集成电路中(诸如,在计算平台或多处理器中)的能量节约和能效来描述以下实施例,但是其他实施例可适用于其他类型的集成电路和逻辑器件。本文中描述的实施例的类似的技术和教导可应用于也可受益于更好的能效和能量节约的其他类型的电路或半导体器件。例如,所公开的实施例不限于台式计算机系统或超极本TM,并且还可用在其他设备(诸如,手持式设备、平板计算机、其他薄笔记本计算机、片上系统(SOC)设备以及嵌入式应用)中。手持式设备的一些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)以及手持式PC。嵌入式应用通常包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或能够执行以下教导的功能和操作的任何其他系统。此外,本文中所述的装置、方法和系统不限于物理计算设备,而是还可涉及用于能量节约和效率的软件优化。如将从以下描述变得非常明显的是,本文中描述的方法、装置和系统的实施例(无论参照硬件、固件、软件还是它们的组合)对于以性能考量来平衡的“绿色科技”未来而言是至关重要的。
随着计算系统正在进展,其中的组件正变得越来越复杂。作为结果,用于在这些组件之间进行耦合和通信的互连架构也日益复杂以确保满足最佳组件操作的带宽要求。此外,不同的市场部分要求互连架构的不同方面来适合市场需要。例如,服务器要求更高性能,而移动生态系统有时能够为功率节省而牺牲整体性能。然而,大多数结构的唯一目的是在最大的功率节省的情况下提供最高的可能性能。在下文中,讨论了多个互连,这将潜在地从本文中描述的本发明的多个方面受益的许多互连。
参照图1,描绘了包括多核处理器的计算系统的框图的实施例。处理器100包括任何处理器或处理设备,诸如,微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、手持式处理器、应用处理器、协处理器、片上系统(SoC)或用于执行代码的其他设备。在一个实施例中,处理器100包括至少两个核——核101和102,这可包括非对称核或对称核(所示实施例)。然而,处理器100可包括可以是对称的或非对称的任何数量的处理元件。
在一个实施例中,处理元件是指用于支持软件线程的硬件或逻辑。硬件处理元件的示例包括:线程单元、线程槽、线程、进程单元、上下文、上下文单元、逻辑处理器、硬件线程、核和/或能够保持处理器的状态(诸如,执行状态或架构状态)的任何其他元件。换言之,在一个实施例中,处理元件是指能够独立地与代码(诸如,软件线程、操作系统、应用或其他代码)相关联的任何硬件。物理处理器(或处理器插槽)通常是指集成电路,此集成电路潜在地包括任何数量的其他处理元件(诸如,核或硬件线程)。
核通常是指位于集成电路上的、能够维持独立的架构状态的逻辑,其中,每一个被独立地维护的架构状态与至少一些专用执行资源相关联。与核相对照,硬件线程通常是指位于集成电路上的、能够维护独立的架构状态的任何逻辑,其中,被独立地维护的架构状态共享对执行资源的访问。如所见,当一些资源被共享并且其他资源专用于架构状态时,硬件线程与核的命名之间的界线重叠。但是经常而言,由操作系统将核和硬件线程视为单独的逻辑处理器,其中,操作系统能够单独地调度在每一个逻辑处理器上的操作。
如图1中所示,物理处理器100包括两个核——核101和102。在此,核101和102可以被认为是对称核,即,具有相同的配置、功能单元和/或逻辑的核。在另一个实施例中,核101包括无序处理器核,而核102包括有序处理器核。然而,核101和102可单独地选自任何类型的核,诸如,原生核、软件管理的核、被适配为执行原生指令集架构(ISA)的核、被适配为执行经转换的指令集架构(ISA)的核、共同设计的核或其他已知的核。在异构核环境(即,非对称核)中,可利用某种形式的转换(诸如,二进制转换)以在一个或两个核上调度或执行代码。但是为了进一步进行讨论,下文中进一步详细地描述核101中示出的功能单元,因为在所描绘的实施例中,核102中的单元以类似的方式操作。
如图所描绘,核101包括两个硬件线程101a和101b,它们还可被称为硬件线程槽101a和101b。因此,在一个实施例中,软件实体(诸如,操作系统)潜在地将处理器100视为四个分开的处理器,即,能够并发地执行四个软件线程的四个逻辑处理器或处理元件。如上文所暗指,第一线程与架构状态寄存器101a相关联,第二线程与架构状态寄存器101b相关联,第三线程可与架构状态寄存器102a相关联,并且第四线程可与架构状态寄存器102b相关联。在此,这些架构状态寄存器(101a、101b、102a和102b)中的每一个都可被称为如上所述的处理元件、线程槽或线程单元。如图所示,在架构状态寄存器101b中复制架构状态寄存器101a,因此能够为逻辑处理器101a和逻辑处理器101b存储单独的架构状态/上下文。在核101、102中,也可分别为线程101a和101b以及102a和102b复制其他较小的资源(诸如,分配器和重命名器块130、131中的指令指针和重命名逻辑)。可通过分区操作来共享一些资源(诸如,重排序/引退单元135、136中的重排序缓冲器、ILTB120、121、加载/存储缓冲器和队列)。潜在地可完全共享其他资源,诸如,通用内部寄存器、(多个)页表基址寄存器、较低层级的数据高速缓存和数据TLB150、151、执行单元140、141以及无序单元的多个部分。
处理器110经常包括其他资源,这些资源可完全被共享、通过分区操作被共享,或可由处理元件专用/专用于处理元件。在图1中,示出具有处理器的说明性逻辑单元/资源的纯示例性处理器的实施例。注意,处理器可包括或省略这些功能单元中的任何一个,并且可包括未描绘的任何其他已知功能单元、逻辑或固件。如图所示,核101包括简化的表示性的无序(OOO)处理器核。但是可在不同的实施例中利用有序处理器。OOO核包括用于预测待执行/采取的分支的分值目标缓冲器120以及用于存储用于指令的地址转换条目的指令转换缓冲器(I-TLB)120。
核101进一步包括解码模块125,此解码模块耦合到取出单元以对所取出的元素进行解码。在一个实施例中,取出逻辑包括分别与线程槽101a、101b相关联的单独的定序器。通常,核101与第一ISA相关联,此第一ISA定义/指定在处理器100上可执行的指令。经常,作为第一ISA的部分的机器代码指令包括指令中引用/指定待执行的指令或操作的部分(被称为操作码(opcode))。解码逻辑125包括电路,此电路从指令的操作码中识别这些指令,并且在流水线中继续传递经解码的指令,以便如由第一ISA定义的那样来处理。例如,如下文中更详细地所讨论,在一个实施例中,解码器125包括设计成或适配成识别特定的指令(诸如,事务指令)的逻辑。作为由解码器125识别的结果,架构或核101采取特定的预定义的动作来执行与适当的指令相关联的任务。重要的是要注意到,可响应于单条或多条指令来执行本文中描述的任务、块、操作和方法中的任一者;这些指令中的一些可以是新指令或旧指令。注意,在一个实施例中,解码器125识别相同的ISA(或其子集)。或者,在异构核环境中,解码器126识别第二ISA(第一ISA的子集或不同的ISA)。
在一个示例中,分配器和重命名器块130包括用于预留资源(诸如,用于存储指令处理结果的寄存器组)的分配器。然而,线程101a和101b潜在地能够无序地执行,其中,分配器和重命名器块130还预留其他资源(诸如,用于跟踪指令结果的重排序缓冲器)。单元130还可包括寄存器重命名器以便将程序/指令引用寄存器重命名到处理器100内部的其他寄存器。重排序/引退单元135包括组件(诸如,上述重排序缓冲器、加载缓冲器和存储缓冲器)以支持无序的执行以及稍后对经无序执行的指令的有序的引退。
在一个实施例中,调度器和执行单元块140包括用于在执行单元上调度指令/操作的调度器单元。例如,在具有可用的浮点执行单元的执行单元的端口上调度浮点指令。与执行单元相关联的寄存器组也被包括以存储信息指令处理结果。示例性执行单元包括浮点执行单元、整数执行单元、跳转执行单元、加载执行单元、存储执行单元和其他已知的执行单元。
较低层级的数据高速缓存和数据转换缓冲器(D-TLB)150耦合到执行单元140。数据高速缓存用于存储潜在地以存储器一致性状态保持的最近使用/操作的元素(诸如,数据操作数)。D-TLB用于存储最近的虚拟/线性到物理地址的转换。作为特定示例,处理器可包括用于将物理存储器分解为多个虚拟页的页表结构。
在此,核101和102共享对较高层级的或进一步远离的高速缓存(诸如,与片上接口110相关联的二级高速缓存)的访问。注意,较高层级的或进一步远离的是指从执行单元增加或进一步远离的高速缓存层级。在一个实施例中,较高层级的高速缓存是末级数据高速缓存(处理器100上的存储器层次结构中的末级高速缓存),诸如,二级或三级数据高速缓存。然而,较高层级的高速缓存不限于此,因为其可与指令高速缓存相关联或包括指令高速缓存。跟踪高速缓存(指令高速缓存的类型)替代地可耦合在解码器125之后以存储最近经解码的踪迹。在此,指令潜在地是指宏指令(即,由解码器识别的通用指令),所述宏指令可被解码为多条微指令(微操作)。
在所描绘的配置中,处理器100还包括片上接口模块110。历史上,下文中更详细地描述的存储器控制器已经被包括在位于处理器100外部的计算系统中。在此场景中,片上接口11用于与位于处理器100外部的设备(诸如,系统存储器175、芯片组(经常包括连接到存储器175的存储器控制器中枢和用于连接外围设备的I/O控制器中枢)、存储器控制器中枢、北桥或其他集成电路)通信。在此场景中,总线105可包括任何已知的互连,诸如,多分支总线、点对点互连、串行互连、并行总线、一致性(例如,高速缓存一致性)总线、分层式协议架构、差分总线和GTL总线。
存储器175可专用于处理器100,或可由系统中的其他设备共享。存储器175的示例的常见类型包括DRAM、SRAM、非易失性存储器(NV存储器)和其他已知的存储设备。注意,设备180可包括耦合到存储器控制器中枢的图形加速器、处理器或卡、耦合到I/O控制器中枢的数据存储设备、无线收发机、闪存设备、音频控制器、网络控制器或其他已知的设备。
然而,随着最近更多的逻辑和设备被集成在单个管芯上(诸如,SoC),这些设备中的每一个都可合并在处理器100上。例如,在一个实施例中,存储器控制器中枢在与处理器100相同的封装和/或管芯上。在此,核的部分(核上部分)110包括一个或多个控制器以便与其他设备(诸如,存储器175或图形设备180)对接。包括用于与此类设备对接的互连和控制器的配置经常被称为核上(或非核配置)。作为示例,片上接口10包括用于片上通信的环形互连以及用于片外通信的高速串行点对点链路105。但是,在SOC环境中,甚至更多的设备(诸如,网络接口、协处理器、存储器175、图形处理器180和任何其他已知的计算机设备/接口)可集成在单个管芯或集成电路上以提供具有高功能性和低功耗的小形状因子。
在一个实施例中,处理器100能够执行编译器、优化和/或转换器代码178以编译、转换和/或优化应用代码176,从而支持本文中描述的装置和方法或与本文中描述的装置和方法对接。编译器经常包括用于将源文本/代码转换为目标文本/代码的程序或程序集。通常,在多个阶段或多遍中完成用编译器进行的对程序/应用代码的编译,以便将高级编程语言代码变换为低级的机器或汇编语言代码。而且,单遍的编译器仍可用于简单的编译。编译器可利用任何已知的编译技术并执行任何已知的编译器操作,诸如,词汇分析、预处理、解析、语义分析、代码生成、代码变换和代码优化。
较大的编译器经常包括多个阶段,但是更经常地,这些阶段被包括在两个总体的阶段中:(1)前端,即,通常句法处理、语义处理和某种变换/优化可能发生之处,以及(2)后端,即,通常分析、变换、优化和代码生成发生之处。一些编译器是指中间端,此中间端示出编译器的前端与后端之间的轮廓勾画的模糊。作为结果,对编译器的插入、关联、生成或其他操作的引用可在前述阶段中的任一阶段或多遍中的任一遍中以及在编译器的任何其他已知的阶段或遍中发生。作为说明性示例,编译器潜在地在编译的一个或多个阶段中插入操作、调用、函数等(诸如,在编译的前端阶段中插入调用/操作),并且随后在变换阶段中将调用/操作变换为更低级的代码。注意,在动态编译期间,编译器代码或动态优化代码可插入此类操作/调用,并且优化这些代码以供在运行时期间执行。作为特定的说明性示例,二进制代码(已经被编译的代码)可在运行时期间动态地优化。在此,程序代码可包括动态优化代码、二进制代码或它们的组合。
与编译器类似,转换器(诸如,二进制转换器)静态地或动态地转换代码以优化和/或转换代码。因此,对代码、应用代码、程序代码或其他软件环境的执行的引用可以是指:(1)静态地或动态地执行编译器程序、优化代码优化器或转换器以编译程序代码、维护软件结构、执行其他操作、优化代码或转换代码;(2)执行包括操作/调用的主程序代码,诸如,已经被优化/编译的应用代码;(3)执行与主程序代码相关联的其他程序代码(诸如,库)以执行其他软件相关的操作或优化代码;或(4)上述各项的组合。
示例互连结构和协议可包括如下示例:外围组件互连(PCI)快速(PCIe)架构、英特尔快速路径互连(QPI)架构、移动工业处理器接口(MIPI),等等。可通过使用节点控制器之间的多个域或其他互连来实现一系列受支持处理器。
互连结构架构可包括分层式协议架构的定义。在一个实施例中,可提供协议层(一致的、非一致的以及任选地其他基于存储器的协议)、路由层、链路层以及物理层。此外,互连可包括与功率管理器、测试和调试设计(DFT)、故障处置、寄存器、安全等有关的增强。
在一个实施例中,互连结构的物理层可负责信息在物理介质(电气的或光学的,等等)上的快速传送。物理链路在两个链路层实体之间是点对点的。链路层可以从上层中抽象出物理层,并且提供在两个直接连接的实体之间可靠地传送数据(以及请求)并且管理流控制的能力。它还负责将物理通道虚拟化为多个虚拟信道和消息类。协议层可依赖于链路层,以便在将协议消息转移至物理层以便跨物理链路来传送之前将这些协议消息映射至适当的消息类和虚拟信道。链路层可支持多个消息,诸如,请求、监听、响应、写回、非一致数据,等等。
在一些实现方式中,链路层可将信用方案用于流控制。还可支持非信用式流。对于信用式流,在初始化期间,发送机被给予设定数量的信用以将分组或微片(flit)发送至接收机。无论分组或微片何时被发送至接收机,发送机使其信用计数器递减一个信用,取决于正在使用的虚拟网络的类型,一个信用表示分组或微片。无论何时在接收机处释放缓冲器,针对那个缓冲器类型的信用被往回返回至发送机。在一个实施例中,当已耗尽发送机针对给定信道的信用时,此发送机停止在此通道中发送任何微片。基本上,在接收机已经消耗了信息并释放了适当的缓冲器之后,信用被返回。
在一个实施例中,路由层可提供将分组从源路由至目的地的灵活的分布式方式。在一些平台类型(例如,单处理器和双处理器系统)中,这个层可能不是显式的,但可以是链路层的部分;在这种情况下,这个层是任选的。它依赖于由链路层作为功能的部分而提供的虚拟网络和消息类抽象来确定如何路由分组。在一个实现方式中,通过实现方式特定的路由表来定义路由功能。此类定义允许各种使用模型。
在一个实施例中,协议层可实现通信协议、排序规则以及一致性维护、I/O、中断和其他较高层级的通信。注意,在一个实现方式中,协议层可提供用于协商组件和系统的功率状态的消息。作为潜在的附加,物理层还可独立地或者组合地来设定单独链路的功率状态。
多个代理设备(agent)可连接到互连架构,诸如,归属(home)代理设备(对于对存储器的请求进行排序)、高速缓存操作(发布对一致存储器的请求并且对监听作出响应)、配置(处置配置事务)、中断(处理中断)、旧式的(处置旧式事务)、非一致的(处理非一致的事务),等等。
传统的高速缓存盒(“c盒”)设计已经采用易于导致各种活锁死锁条件的基于重试的微架构。此类传统的基于重试的设计典型地既提供对监听过滤器/末级高速缓存(“LLC”)的低等待时间访问,又提供从请求进入TOR流水线起对信用/资源的高效使用,而无需对于当前的请求存在哪些信用或依赖关系(dependency)的先验知识。然而,此类设计会引入众多访问公平性问题。例如,当饥饿的请求正在被重试时,等待信用的一个请求可能连续地将它正在等待的信用丢失给进入流水线的一个或多个其他请求。一些传统的抗饥饿方案尝试通过内部饥饿和外部饥饿机制来解决这个问题。此类内部饥饿机制可提供解决由相同的流控制类内的使彼此饥饿的不同的请求导致的饥饿问题的能力。例如,可推测性地将请求分派给流水线(例如,请求表(TOR)、监听过滤器、LLC流水线)而无需等待ACK/NACK(确收/否定确收)决策。ACK/NACK决策可采取许多时钟(由于对LLC/SF查找结果的依赖关系以及流水线/信用条件,等等),并且等待ACK/NACK会减少流水线和TOR的可用带宽。在一些情况下,这会导致较年轻的请求取得进展,而较老的请求不取得进展。
外部饥饿机制可提供解决由于来自不同的入口队列的请求竞争相同的资源而导致的向前进展问题的功能。在传统的外部饥饿机制解决方案中,饥饿的队列可能使可能正在竞争相同资源的所有其他队列被阻塞。然而,在一些情况下,这会导致进一步的问题,因为可能需要这些竞争的队列中的一些队列以允许被等待的信用变得可用,从而使得阻塞这些竞争的队列对于解决饥饿的队列是适得其反的。依赖关系规则可指示哪些队列将阻塞哪些其他队列,以及在哪些条件下阻塞。这些依赖关系规则中的一些可强束缚于互连以及其他协议依赖关系规则和微架构。在一些情况下,此类规则对于在硅前证实地证明或验证是极其困难的。
在历史上,硅前验证已经受到挑战而在硅前模拟中暴露死锁/活锁程序错误(bug),例如,由于在创建死锁/活锁场景时的测试时间限制。例如,在一些示例中,传统的外部饥饿机制对于对每一个请求可接受的重试数量不具有特定的上限,使得在一些实例中,检测死锁/活锁如果不是不可能的,也是困难的。
可以将知识产权(IP)块(或“块”)提供给系统,这些块采用能够解决上述问题中的至少一些问题(包括死锁/活锁困难)的c盒和/或归属(home)代理设备逻辑,等等此类示例优点。例如,可提供组合式c盒-归属(home)代理设备(“CHA”)逻辑,以便为取得进展有困难的请求、响应或其他实体创建依赖关系链,并且基于优先级将信用分配给没有取得进展的实体。这可以在不使一个队列(即,正在被重试的请求)阻塞另一队列的情况下进一步被实现。还可将重试数量的上限提供给改善的重试队列解决方案。另外,可为多个流控制类和条目中的每一个维护虚拟重试队列。在一些实现方式中,可按先进先出(FIFO)顺序来处理这些虚拟队列中的每一个虚拟队列内的条目,并且可保持虚拟队列内的条目的重试,直到已解析出或获取到条目的依赖关系(本文中被统称为“获取到”依赖关系)为止。在队列之间,除非存在依赖关系冲突,否则不阻塞条目。此类解决方案(等等此类示例优点)可以改善向前进展性能的硅前验证,并且通过以下措施来改善功效:当条目在重试队列中等待时以及获取信用时减小活动因子,而不会通过无差别的重试来连续地燃耗功率。另外,此类解决方案可以容易地可扩展到未来设计,并且可适配于多种不同的微架构或一致性协议。
可以提供合并了诸如以上介绍的那些原理之类的原理的系统,诸如,与在以下示例中示出并描述的那些系统的类似的系统。转向例如在图2的简化的框图中示出的示例,系统200示出为包括多个IP块或块,每一个块都包括多个处理器核(例如,202、204、206、208、210、212、214、216、218、220)中的一个以及对应的高速缓存区块(bank)(例如,末级高速缓存(LLC)的区块)(例如,222、224、226、228、230、232、234、236、238、240)。每一个分片(tile)可进一步包括用于管理这些核(例如,202、204、206、208、210、212、214、216、218、220)与这些高速缓存区块(例如,222、224、226、228、230、232、234、236、238、240)中的一个或多个区块的交互的逻辑。例如,每一个分片可以包括高速缓存盒逻辑、核盒逻辑、归属代理设备逻辑或上述各项的组合(本文中统称为“CHA逻辑”)(例如,242、244、246、248、250、252、252、254、256、258、260)以便将核与系统高速缓存(例如,LLC)对接,并且提供用于结合来自涉及高速缓存记录和其他资源的核(或其他组件)的请求和响应来使用的功能。此类功能可以包括用于以下操作的逻辑:确定对应于所请求的高速缓存记录的高速缓存区块,将请求发送到(例如,在对应的高速缓存盒上的)高速缓存代理设备,确定用于发送此请求的路径,执行高速缓存一致性,等等此类示例功能。每一个分片或单元可以进一步包括将此单元(以及组件核、高速缓存区块,等等)与互连265对接的相应的互连接口(例如,264、266)。CHA逻辑可以与对应的互连接口(例如,264、266)对接,或者在一些情况下,CHA逻辑可合并对应的互连接口(例如,264、266)。
可以通过采用潜在地无限的各种系统布局、架构或平面图中的任一种来提供互连(例如,265),从而潜在地连接可以被包括在例如片上系统(SOC)、微型服务器或其他系统中的组件的任何组合。图2的示例应当被视为此类系统的一个简化的示例。除核-高速缓存分片或类似的组件(例如,271、272、274)之外的组件(诸如,存储器控制器和外部接口组件(诸如,PCIe、QPI))或其他互连组件可以通过互连(例如,265)对接,并且可进一步提供对系统的其他信道(例如,274、276、278、280、282、284、286、288、290、292)和资源的访问。
转向图3的示例,示出简化的框图300,此简化的框图300示出示例系统块305的示例子组件,诸如,包括处理器核210和LLC区块230并支持CHA逻辑310的块。在图3的特定示例中,CHA逻辑310可以包括仲裁逻辑、响应逻辑、内部饥饿逻辑、请求队列逻辑、响应队列逻辑、流水线逻辑,等等此类包括支持请求虚拟重试队列和响应虚拟重试队列的逻辑的可执行的基于软件和/或硬件的逻辑。可提供CHA逻辑310来处置请求、响应(例如,请求或响应于接收到的请求的完成)。可从系统中通过互连265传递请求的相同块或另一块或从另一组件接收请求,所述另一组件包括寻求例如来自高速缓存的记录的外部组件。响应逻辑320可以处置并处理传入请求。在一些情况下,响应逻辑320可以生成附加的请求(诸如,对高速缓存230或其他资源的请求),以便获取信息来恰当地对所接收的请求作出响应。流水线逻辑340可以包括用于处理接收到的请求和其他消息的附加的逻辑,所述消息包括指示特定的传出请求未取得向前进展的消息。此类消息还可以包括依赖关系指示或请求未在系统中取得向前进展的理由。在一些实例中,流水线逻辑340可以进一步包括系统地址解码器(SAD)以便解释对传入请求的定址并判断在请求中所请求的记录是否存在于块305的高速缓存区块230中。SAD逻辑可以确定所请求的记录实际上不存在于特定的高速缓存区块230中,并且作为响应可以用于提示响应请求尝试标识此记录的替代位置(诸如,在另一高速缓存区块中或在系统存储器中,等等此类示例)。在一些实例中,流水线逻辑340可以进一步提供涉及高速缓存区块230的高速缓存一致性管理。响应逻辑320可以与流水线逻辑340对接以生成对接收到的请求的响应。在一些情况下,响应可以包括响应于传入请求而生成的消息,并且包括:从高速缓存区块230返回的数据(例如,在所请求的记录存在于高速缓存区块上的情况下)、一致性消息、指示“未命中”的消息(即,当所请求的记录不存在于高速缓存区块上时)、指向高速缓存或存储器中可发现记录的的另一个位置的消息、ACK/NACK消息,等等此类示例。
可准备好使用CHA逻辑310生成的响应,以便通过使用CHA的出口逻辑,在互连265上发送。出口逻辑可以标识响应的目的地,并且确定在互连265上确定用于将此响应发送到目的地的路径。查找表或其他数据和逻辑可以用于确定最适合此响应的路径。可提供仲裁逻辑315,用于仲裁对在互连265上对数据的发送。在一些实例中(例如,当互连265上存在其他较高优先级的通信量,或者具有将注入到互连265上的其他较高优先级的通信量时),可对将由高速缓存盒逻辑或核盒逻辑发送的消息排队列。相应地,可以使用仲裁逻辑315维护并管理多个队列(例如,330、335)以支配将竞争的请求和响应注入到互连265的流水线上所遵循的顺序。在一些情况下,可为在系统内定义的多个不同的流控制类中的每一个提供分开的的队列(例如,330、335)和支持逻辑,等等此类示例。另外,排队和仲裁逻辑可以进一步支持未取得向前进展的请求和响应的重试。内部饥饿逻辑325可以监测涉及一个或多个队列的重试以防范涉及这些队列的请求和响应的死锁和/或活锁条件,内部饥饿逻辑325可以是可配置的以将块305的全部或部分置于饥饿模式状态。在饥饿模式状态期间,可利用虚拟重试队列345、350来对利用传统的重试技术通过多次、重复的重试对未能取得向前进展并且正在花费流水线带宽的一个或多个请求或响应进行定址。虚拟重试队列345、350可以获得并且跟踪未取得向前进展的请求/响应的依赖关系,并且可以利用对导致被停止的向前进展的一个或多个依赖关系来对后续的重试定时。
转向图4,示出了简化的框图400,框图400示出涉及特定的IP块(例如,305)的请求虚拟重试队列345和响应虚拟重试队列350的示例消息收发。在一些实现方式中,可以为此块所支持的每一个相应的流控制类维护分开的请求虚拟重试队列345和响应虚拟重试队列350。作为示例,请求的流控制类可以包括对应于以下各项的类:核请求(IRQ)、PCIe请求(PRQ)、远程探测/监听(IPQ)、远程请求(RRQ)、远程写回(EWB),等等此类示例。当处于饥饿模式时,虚拟队列(例如,345、350)可以用于对将重试的请求(或响应)排队列。在一些实现方式中,可以为每一个流控制类维护分开的虚拟重试队列,并且可以专门针对那个流控制类而进入饥饿模式。在饥饿模式期间,例如可停止对应的流控制类的所有其他的重试,并且可使用对应的虚拟队列对这些重试排队列。可确定虚拟队列中的请求中的一个或多个请求的依赖关系,并且在获取到此依赖关系(诸如,对特定资源的信用)后,可以重试在虚拟队列顶部的请求。如果恢复了向前进展,则将被重试的其他请求可以在重试这些请求之前使它们对应的依赖关系被获取,直到为虚拟队列中的所有请求恢复了向前进展为止。当虚拟队列被清空时,系统可以从饥饿模式退出。
队列被实现为指向实际队列(例如,330、335)中的请求/响应的指针的表,在这个意义上而言,队列可以是虚拟的。虚拟队列可实现为当系统处于饥饿模式时覆写实际队列的顺序。例如,虚拟重试队列可以指向实际的FIFO队列条目。提供虚拟重试队列可以显著地降低复杂性、面积开销,等等此类示例,等等此类示例优点。
在图4的示例中,依赖关系更新405、410形式的依赖关系信息可以从流水线获得,并且可由请求虚拟重试队列345和响应虚拟重试队列350跟踪。当获取到依赖关系时,可以重试虚拟队列中的队列请求。在一些实例中,重试仍会导致停滞的进展。在此类实例中,可更新请求的依赖关系以将取得向前进展的最新失败考虑在内。当获取到经更新的依赖关系时,可以再次重试请求,并且如此一直进行,直到取得了向前进展。在一些情况下,获取请求的依赖关系可以包括:标识依赖关系,并随后尝试获得此依赖关系。例如,在依赖关系为特定资源的信用的形式的情况下,虚拟重试队列逻辑可致使进行对应的信用请求以尝试获取依赖关系。其他依赖关系可以包括例如对其他未解决的请求的完成的依赖关系,并且重试队列可以用于监测未解决的请求和重试,并且当那个未解决的请求已经完成时重试未决的请求,等等此类示例依赖关系。
在一些情况下,多个虚拟队列可以竞争相同的依赖关系。换言之,分开的虚拟队列内的两个或更多个不同的请求(和/或响应)可能正在等待相同的依赖关系。当获取到依赖关系时,可立即为多个虚拟队列有效地获取到它。信用仲裁器或其他仲裁逻辑可以调解此类依赖关系冲突,使得竞争的虚拟队列中的一个中的重试被指定为从属请求并且等待这些竞争的虚拟队列中的另一队列中的重试。等待具有相同的依赖关系的另一请求(或响应)自身可以是依赖关系。在一些情况下,可更新竞争的从属请求的依赖关系,使得对竞争的请求的重试或向前进展的标识触发从属请求的重试。
如图4中所示,请求和响应虚拟重试队列(例如,345、350)两者可以生成并且发送附加的消息。例如,虚拟重试队列可以导入(ING)消息,诸如,指示对应的重试队列为空的空(Empty)消息以及指示重试队列正在竞标流水线访问以重试未决的请求的竞标(Bid)消息,等等此类示例。还可接收确收(ACK/NACK)消息,或者以其他方式利用指示消息或其重试是否成功的确收来监测此确收(ACK/NACK)消息。可以获得来自此类确收消息的消息的对应的依赖关系信息。
转向图5,示出简化的框图500,此简化的框图示500出请求虚拟重试队列的示例实现方式的细节。在一些实现方式中,当系统不处于饥饿模式时,可以为由对应的系统块发送到流水线上的请求监测向前进展。当(例如,使用R位逻辑505)生成请求时,可以在请求队列330中对它们排队列。可由内部饥饿逻辑325监测对应于这些请求的ACK和NACK以判定这些请求是否正取得向前进展。在正常操作期间(例如,当不处于饥饿模式时),失败的请求可以被重试,并且可以继续被重试多次以尝试实现此请求的向前进展。在一些实现方式中,内部饥饿逻辑325可以为被阻止的且未实现向前进展的每一个请求维护重试次数的计数器。当被重试的请求中的第一请求满足某个重试阈值而不取得向前进展时,内部饥饿逻辑325可以使此队列进入饥饿模式,并且可使用请求虚拟重试队列来修复涉及(多个)被重试的请求的潜在的死锁、活锁或其他条件。此类重试阈值基于以下各项可以是可配置的:系统的容限(例如,反映进入饥饿模式将多困难)、请求的类型、流控制信道或IP块,等等此类配置。
在一个示例中,进入饥饿模式可能使任何新请求的生成停止。在由内部饥饿逻辑325触发的饥饿模式之前生成的请求(例如,“旧条目”)可以保持在系统中排队。可在虚拟队列中对处于重试模式(即,基于未能取得向前进展而已重试或将重试)的所有请求排队列。在一些实现方式中,可以按照先进先出(FIFO)顺序对请求排队列,其中,队列的头部最初是其重试触发了饥饿模式的请求。可以在虚拟重试队列中维护请求的状态信息。在一些实现方式中,在虚拟队列中仅维护头部或顶部请求的状态信息。状态信息可以包括例如,请求的流水线标识符或TOR标识符(TORID)、是否已重试头部请求的标识(例如,“一次重试”)(例如,二进制值)、为请求确定的依赖关系的标识(例如,“Dep信息”(“DepInfo”))(例如,由对应于一组依赖关系中的一个依赖关系的代码标识)、为请求确定的依赖关系是已知的还是未知的依赖关系的标识(例如,“Dep已知”(“DepKnown”))、是否已经获取到依赖关系的标识(例如,“具有信息”(“HasInfo”))、虚拟队列与另一虚拟队列之间是否存在冲突的标识(例如,“具有冲突”(“HasConflict”))(例如,基于等待相同的依赖关系的这两个虚拟队列)、经排队列的请求依赖于的另一请求的标识(当在虚拟队列之间存在冲突的情况下(例如,当“具有冲突”=真)),等等此类潜在的信息和示例。
可从各种源获得虚拟重试队列510中的请求的状态信息。流水线逻辑可以提供失败的请求的原因的指示。可以从通过流水线提供的信息中标识请求的特定的依赖关系。依赖关系信息可以响应于虚拟重试队列510中的头部请求的第一个失败的重试而被首先记录在状态信息中。可以响应于此失败的重试而获得此依赖关系信息。在第一次重试之后,“一次重试”值可以被置位为“真”,并且如果此重试未能促进向前进展,则DepInfo(Dep信息)可以被置位为对应于从失败的重试中标识的依赖关系的依赖关系代码值。可以在获得任何依赖关系信息之前发起对此头部请求的这个初始重试。在一些实例中,对虚拟重试队列中的头部请求的初始重试可有效地出于尝试获得此头部请求的依赖关系信息的目的。一旦请求到达重试虚拟队列的头部位置,或者在到达头部位置之后首先重试此请求还可以自动地将TORID分配给此请求。这可以有助于将TORID的缺少抢占为阻止向前进展的依赖关系。在一些实现方式中,获得头部位置的每一个请求可以被分配相同的TORID。在此类实例中,可重新使用TORID,并且此TORID可以是在相应的虚拟重试队列内的头部位置中的请求的预定义的TORID,等等此类示例。
仲裁或其他CHA逻辑可以用于获得并检测在状态信息515中被标识为头部请求所等待的依赖关系的特定的依赖关系的获取。例如,可获得特定资源的信用,并且重试逻辑可以确定已获取到在状态信息515中标识的、对应的请求的依赖关系(例如,在同步状态信息表的DepInfo字段中)。在获取到所寻求的依赖关系后,随后,重试队列逻辑可以允许重试头部请求。在一些情况下,初始的重试可导致向前进展。在其他情况下,在获取到针对头部请求所标识的依赖关系之后的第一次尝试(例如,当请求获得虚拟重试队列的头部位置时从请求的初始尝试中标识的依赖关系)可导致向前进展。在另一些实例中,仅递增的进展可从获取到头部请求的所标识的依赖关系之后的重试中实现。例如,多个依赖关系可能妨碍请求取得向前进展,并且当在释放依赖关系中的一个之后重试此请求后,此请求可能再次失败,并且可以标识第二依赖关系。如状态信息表515中所标识,可更新请求的依赖关系以标识此第二依赖关系。当获取到这个不同的第二依赖关系后,可再次重试此请求,一直进行到取得向前进展为止。
在一些实现方式中,一旦虚拟重试队列的头部请求取得向前进展,虚拟队列中的下一个请求(例如,按照FIFO顺序)就可以假定虚拟队列的头部位置。可以对这个新头部请求执行初始尝试以获得此新头部请求的依赖关系。可以获取依赖关系,并且可以重试此新头部请求,并且一直进行,直到虚拟重试队列中的每一个请求已经被对应地重试并取得向前进展为止。当已清空虚拟重试队列时,可以生成致使从饥饿模式退出的信号。可中止虚拟重试队列逻辑,并且可恢复正常操作(例如,伴随传统的重试模式)以促进向前进展。
如上所述,在一些实例中,(例如,多个流控制类和/或IP块的)多个队列可以竞争相同的依赖关系。当获得此依赖关系时,仲裁逻辑可以(例如,使用轮循、基于规则的方案或其他方案)确定竞争的虚拟重试队列(例如,在520中)中的哪些应当首先被允许重试它们相应的头部请求。被授权重试它们相应的头部请求的虚拟重试队列可以这样做,而所有其他竞争的头部请求(或响应)更新它们的依赖关系以标识此当前的头部请求的重试(例如,通过基于冲突的依赖关系来对“具有冲突”值置位,并且将ReqDepInfoTorId字段置位为正在被重试的头部请求的TORID)。当正在被重试的虚拟重试队列的头部取得向前进展时,可允许竞争的虚拟重试队列中的另一个重试它们相应的头部,并且一直进行,直到等待所获取的依赖关系的虚拟重试队列的所有头部取得向前进展为止。
可将TORID或其他标识符分配给已经被向外发送到流水线上的每一个请求。在一些实现方式中,可由目的地CHA在接受到传入请求时分配此类标识符。在一些实例中,TORID(或其他标识符)的分配可指示,请求已经取得向前进展。当请求在系统中时,此类标识符对于此请求可以是唯一的。在一些实现方式中,一旦已将TORID分配给请求,就可以维护将被发送的、与此请求有关的其他消息的状态信息。例如,可以由接收此请求的CHA来请求高速缓存或存储器的记录,从而尝试对此请求的发送机作出响应。类似地,可以维护响应于此请求的响应消息(例如,完成)的状态信息。响应于所接收的请求或在事务的“响应阶段”中发送的此类消息在本文中被称为“响应”消息,或被简单地称为“响应”。另一方面,“请求”消息或“请求”对应于涉及事务中的初始请求的、当还未将跟踪符(例如,TORID)分配给消息和事务时的消息。像请求一样,响应自身可能经受向前进展问题和重试。相应地,诸如图6的示例中所示和所述,可以维护响应虚拟重试队列。
如图所示,例如,在结合图6的简化的框图600示出的示例中,响应虚拟重试队列能以与请求虚拟重试队列(例如,图5的示例的请求虚拟重试)不同方式被结构化并进行操作。在一些实现方式中,如同对请求那样,对于已相继被重试超过预定的阈值的给定的响应,可触发饥饿模式。当已经基于阈值触发了饥饿模式时(诸如,对于响应的特定的流控制类),可激活对应的虚拟重试队列。在一些实现方式中,甚至可在触发饥饿模式之前收集并维护响应的状态信息。此外,与维持虚拟重试队列的仅头部的状态信息不同,可以获得具有TORID的每一个响应的状态信息,等等此类示例。
在一个示例实现方式中,可以为已经被分配了TORID的事务(以及它们的复合请求(即,响应))生成、收集并维护至少一些状态信息。甚至可在进入饥饿模式之前收集此状态信息。例如,当在例如由内部饥饿模块610触发饥饿模式之前重试响应时,可维护响应的依赖关系信息表605。响应的依赖关系信息可以与为请求虚拟重试队列的请求收集的依赖关系信息类似。例如,对于每一个TORID,依赖关系信息(例如,605)可以包括是否已经为特定TORID的一个或多个响应(例如,当前的响应请求)执行了重试的标识。依赖关系信息还可以包括当前依赖关系的标识(例如,为TORID所标识的,例如,从响应的最近的重试中标识的一组已知依赖关系中的一个的代码)。
如同请求虚拟重试队列那样,可例如由内部饥饿逻辑跟踪响应的重试以标识何时已重试一个或多个响应超出可接受的阈值。当满足这个阈值时,可以进入饥饿模式,并且可激活响应虚拟重试队列615。在一些实现方式中,可以按轮循或其他基础而不是根据FIFO方案来完成对响应的排队。例如,在一个示例中,在饥饿模式中对响应进行排队可以根据依赖关系类型。可对依赖关系排定优先级,并且可以根据响应依赖于的资源来重试响应。例如,当获取到依赖关系时,可以重试在具有那个依赖关系的虚拟重试队列中排队的所有响应。可以基于轮循、响应类型、FIFO或其他方案来仲裁具有相同的依赖关系的两个或更多个响应中的哪个将重试。响应依赖关系可以包括例如涉及各种一致性链路流控制类和实体的所等待的信用的依赖关系,诸如,请求流控制信道、响应流控制信道、非一致性旁路信道、写回信道、非一致性标准信道、监听广播信道、本地归属代理设备信用,等等此类示例。
可以维护供在饥饿模式期间使用的附加的依赖关系信息。例如,与在请求虚拟重试队列中维护的那些类似,依赖关系信息602可以包括“具有信息”、“具有冲突”以及RespInfoTorID值。还可维护将被重试的响应的其他值,诸如,(例如,与响应重试队列中的对应条目相关联的)RespInfoOrig(响应信息原始)值,等等此类示例。在一些实例中,无论是否触发了饥饿模式,可以为所有的TORID维护此信息602。在其他实例中,可以一直为被分配有TORID的活动的响应维护一些依赖关系信息(例如,605),而当触发饥饿模式时首先收集其他信息(例如,615),等等此类潜在的示例。
如同请求虚拟重试队列那样,响应虚拟重试队列可以在饥饿模式期间停止,直到获取到对应的依赖关系。虚拟重试队列逻辑还可以尝试获取为队列中的响应标识的依赖关系(例如,如依赖关系信息605中所标识的)。当获取到依赖关系时,可以重试等待那个特定的依赖关系的所有经排队的响应。在一些情况下,重试将导致响应的向前进展,在其他情况下,递增的进展将导致标识妨碍响应的向前进展的附加的依赖关系。当获取了TORID的新的或经更新的依赖关系信息时,可以执行依赖关系更新。另外,如同请求虚拟重试队列那样,也可由系统标识并仲裁响应虚拟重试队列(例如,615)与其他虚拟重试队列(例如,520)之间的冲突。此外,可以维护饥饿模式,直到清空了虚拟重试队列为止,在清空虚拟重试队列的时刻,控制被返回到响应队列625。在一些示例中,响应队列625可以根据轮循或其他方案来排队。
现在转向图7的简化的流程图,结合虚拟重试队列示出根据一些示例实现方式的示例技术。例如,对于IP块的特定的CHA的队列,可进入705饥饿模式。此队列可以对应于多个不同的流控制类中的特定的一类。可以基于特定的请求(或响应)的重试的检测到的数量满足或超过阈值而进入705饥饿模式。可为请求标识710特定的依赖关系。在一些情况下,可为队列中的响应标识710依赖关系。在一些实例中,为队列中的先导部或头部、请求、且仅在进入饥饿模式之后标识依赖关系。随着请求上升到队列的顶部,可以一次一个地为请求标识依赖关系。在其他实例中(诸如,对于响应重试队列),可以在进入705饥饿模式之前和之后,为所有的依赖关系标识并跟踪依赖关系。
在为重试队列中的一个或多个请求标识710的依赖关系的情况下,可以尝试获取这些依赖关系。例如,可以为请求依赖于的资源来请求信用。可以接收标识已经获取到或解析了依赖关系的数据。例如,可以接收标识了以下内容的数据:已经授予信用,已经重试另一请求,访问资源的另一块已经释放此资源,等等。可以监测715依赖关系的获取。当获取到请求的依赖关系时,可以重试720此请求。在一些情况下,可以基于依赖关系的获取来重试等待相同的依赖关系的多个请求(例如,响应)。
在请求的重试720之后,可以评估此请求是否取得向前进展(在725处)。在一些情况下,当解析到先前妨碍向前进展的依赖关系时,重试将导致成功地完成或提交此请求。在其他情况下,向前进展可能仍因附加的依赖关系而停滞。如果对于请求,不由重试导致向前进展,则在一些情况下,可以从自重试中获得的信息来标识710另一依赖关系。可以获取(在715处)这个第二依赖关系,并且可以再次重试720此请求,其中重复此序列直到取得向前进展。如果取得了向前进展,则可将成功地重试的请求从重试队列中丢弃。如果在成功的重试之后,重试队列为空,则可以退出735饥饿模式,并且可将控制从重试队列传递到标准队列。如果附加的请求保留,则可以标识710(到尚未标识的程度)那些请求的依赖关系,并且可以获取715这些依赖关系。一旦已经获取715这些依赖关系,就可以重试720(多个)未解决的请求,直到已经为重试队列中的所有请求建立了向前进展为止。
注意,可在前述任何电子设备或系统中实现上述装置、方法和系统。作为特定的说明,以下示例提供用于利用本文中描述的本发明的示例性系统。由于以下系统是更详细地描述的,因此通过以上的讨论公开、描述并回顾多个不同的互连。显而易见的是,上述进步可应用于那些互连、结构或架构中的任一种。
现在参考图8,是示出的是根据本发明的实施例的第二系统800的框图。如图8中所示,多处理器系统800是点对点互连系统,并包括经由点对点互连850耦合的第一处理器870和第二处理器880。处理器870和880中的每一个都可以是处理器的某一版本。在一个实施例中,852和854是串行点对点一致互连结构(诸如,英特尔快速路径互连(QPI)架构)的部分。作为结果,可在QPI架构内实现本发明。
尽管仅以两个处理器870、880示出,当时应当理解的是,本发明的范围不限于此。在其他实施例中,一个或多个附加的处理器可存在于给定的处理器中。
处理器870和880示出为分别包括集成存储器控制器(IMC)单元872和882。处理器870还包括作为其总线控制器单元的部分的点对点(P-P)接口876和878;类似地,第二处理器880包括P-P接口886和888。处理器870、880可以使用点对点(P-P)电路878、888,经由P-P接口850来交换信息。如图8中所示,IMC872和882将处理器耦合至相应的存储器(即,存储器832和存储器834),这些存储器可以是本地附连至相应的处理器的主存储器的多个部分。
处理器870、880各自都经由使用点对点接口电路876、894、886、898的单独的P-P接口852、854来与芯片组890交换信息。芯片组890还可经由接口电路892、沿高性能图形互连839来与高性能图形电路838交换信息。
共享高速缓存(未示出)可以被包括在任一处理器之内,或被包括在两个处理器外部;但仍经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则可将任一处理器或两个处理器的本地高速缓存信息存储在此共享高速缓存中。
芯片组890可经由接口896耦合至第一总线816。在一个实施例中,第一总线816可以是外围组件互连(PCI)总线,或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围并不受此限制。
如图8中所示,各种I/O设备814可以连同总线桥818一起被耦合到第一总线816,总线桥818将第一总线816耦合至第二总线820。在一个实施例中,第二总线820包括低引脚计数(LPC)总线。在一个实施例中,各种设备可以耦合至第二总线820,这些设备包括例如,键盘和/或鼠标822、通信设备827以及经常包括指令/代码和数据830的存储单元828(诸如,盘驱动器或其他大容量存储设备)。此外,音频I/O824示出为耦合到第二总线820。注意,其他架构是可能的,其中所包括的组件和互连架构有所不同。例如,替代图8的点对点架构,系统可实现多分支总线或其他此类架构。
尽管已经参照有限数量的实施例描述了本发明,但是本领域技术人员将认识到从中延伸的众多修改和变型。所附权利要求书旨在使所有此类修改和变型覆盖为落入本发明的真实精神和范围中。
设计可经历各种阶段,从创造到模拟到制造。表示设计的数据能以许多方式表示此设计。首先,如在模拟时有用的那样,可使用硬件描述语言或另一种功能描述语言来表示硬件。此外,可在设计过程的一些阶段生产具有逻辑核/或晶体管门的电路级模型。此外,在某个阶段,大多数设计达到表示各种器件在硬件模型中的物理放置的数据的级别。在使用常规的半导体制造技术的情况下,表示硬件模型的数据可以是为用于生产集成电路的掩模指定各种特征在不同掩模层上的存在或不存在的数据。在设计的任何表示中,能以任何形式的机器可读介质来存储数据。存储器或磁或光存储设备(诸如,盘)可以是机器可读介质,所述机器可读介质用于存储经由光或电波传输的信息,所述光或电波经调制或以其他方式生成以传输此类信息。当传输指示或携带此代码或设计的电载波时,在执行对电信号的复制、缓冲或重传的程度上,完成了新副本。因此,通信提供商或网络提供商可至少临时地将具体化本发明的实施例的技术的制品(诸如,编码到载波中的信息)存储在有形的机器可读介质上。
如本文中使用的模块是指硬件、软件和/或固件的任何组合。作为示例,模块包括硬件(诸如,微控制器),所述硬件与非暂态介质相关联,所述非暂态介质用于存储适配为由微控制器执行的代码。因此,在一个实施例中,对模块的引用是指专门配置成用于识别和/或执行将被保持在非暂态介质上的代码的硬件。此外,在另一个实施例中,对模块的使用是指包括代码的非暂态介质,所述代码专门适配成用于由微控制器执行以执行预定的操作。如可推断的那样,在又一实施例中,术语“模块”(在此示例中)可以指微控制器与非暂态介质的组合。经常,被示出为分开的模块边界通常发生变化并且潜在地重叠。例如,第一和第二模块可共享硬件、软件、固件或它们的组合,同时潜在地保持一些独立的硬件、软件或固件。在一个实施例中,术语“逻辑”的使用包括硬件(诸如,晶体管、寄存器)或其他硬件(诸如,可编程逻辑器件))。
在一个实施例中,短语“用于”或“配置成用于”的使用是指布置、组装、制造、许诺销售、进口和/或设计装置、硬件、逻辑或元件以执行指定的或确定的任务。在此示例中,如果装置或此装置的元件被设计、耦合和/或互连以执行指定的任务,则不正在操作的装置和此装置的元件仍“配置成用于”执行所指定的任务。作为纯说明性示例,逻辑门可在操作期间提供0或1。但是,‘配置成用于’向时钟提供启用信号的逻辑门不包括可提供1或0的每一个潜在的逻辑门。相反,逻辑门是以某种方式耦合的逻辑门,使得在操作期间,1或0输出用于启用时钟。再次注意,术语“配置成用于”不要求操作,而相反聚焦于装置、硬件和/或元件的潜在状态,在此潜在状态中,装置、硬件和/或元件被设计成用于当此装置、硬件和/或元件正在操作时执行特定的任务。
此外,在一个实施例中,短语“能够/用于”和/或“可操作以”是指以能够以指定的方式使用装置、逻辑、硬件和/或元件的方式来设计的某个装置、逻辑、硬件和/或元件。注意,如上所述,在一个实施例中,“用于”、“能够用于”或“可操作以”的使用是指装置、逻辑、硬件和/或元件的潜在状态,在此潜在状态中,装置、逻辑、硬件和/或元件不是正在操作,而是以能够以指定的方式使用装置的方式来设计。
如本文中所使用,值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知的表示。逻辑电平、逻辑值或逻辑值的使用也被称为1和0,其简单地表示二进制逻辑状态。例如,1是指高逻辑电平,而0是指低逻辑电平。在一个实施例中,存储单元(诸如,晶体管或闪存单元)可以能够保持单个逻辑值或多个逻辑值。然而,已经使用计算机系统中的值的其他表示。例如,十进制数10还可被表示为二进制值1110和十六进制字母A。因此,值包括能够被保持在计算机系统中的信息的任何表示。
此外,状态可由值或值的多个部分表示。作为示例,第一值(诸如,逻辑一)可表示默认状态或初始状态,而第二值(诸如,逻辑零)可表示非默认状态。此外,在一个实施例中,术语“复位”和“置位”分别是指默认的和经更新的值或状态。例如,默认值潜在地包括高逻辑值(即,复位),而经更新的值潜在地包括低逻辑值(即,置位)。注意,可利用值的任何组合来表示任何数量的状态。
上述方法、硬件、软件、固件或代码的实施例可经由指令或代码来实现,所述指令或代码存储在机器可访问的、机器可读的、计算机可访问的、或计算机可读的介质上,并且可由处理元件执行。非暂态机器可访问/可读介质包括提供(即,存储和/或传输)可由机器(诸如,计算机或电子系统)读取形式的信息。例如,非暂态机器可访问介质包括:随机存取存储器(RAM),诸如,静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪存设备;电存储设备;光存储设备;声存储设备;用于保持从暂态(传播)信号(例如,载波、红外信号、数字信号)接收到的信息的其他形式的存储设备;等等,这些将与可从其中接收信息的非暂态介质区分开。
用于将逻辑编程为执行本发明的实施例的指令可存储在系统中的存储器中,所述存储器诸如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可经由网络或通过其他计算机可读介质来分布。因此,机器可读介质可包括用于存储或传输可由机器(例如,计算机)读取形式的信息的任何机制,但不限于:软盘、光盘、紧致盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、磁或光卡、闪存、或在通过互联网、经由电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)传输信息时使用的有形的机器可读存储设备。因此,计算机可读介质包括适用于存储或传输可由机器(例如,计算机)读取形式的电子指令或信息的任何类型的有形的机器可读介质。
以下示例涉及根据本说明书的实施例。一个或多个实施例可以提供用于以下操作的装置、系统、机器可读存储设备、机器可读介质、基于硬件和/或软件的逻辑以及方法:进入饥饿模式;标识重试队列中的第一请求的特定的依赖关系;确定获取到所述特定的依赖关系;以及基于所述特定的依赖关系的获取来重试所述第一请求。
在至少一个示例中,至少部分地在硬件电路中实现逻辑。
在至少一个示例中,将针对多个流控制类中的特定的一个流控制类而进入饥饿模式,并且为所述多个流控制类中的每一个流控制类提供重试队列。
在至少一个示例中,所述第一请求包括事务的初始请求,并且所述第一请求可以被指定为所述重试队列的头部请求。
在至少一个示例中,所述重试队列中的请求以先进先出(FIFO)顺序来排序。
在至少一个示例中,可以确定通过所述第一请求的重试实现了向前进展,所述多个请求中的第二请求可以被指定为所述重试队列的头部请求,所述第二请求按照FIFO有序跟随所述第一请求。可以标识所述第二请求的依赖关系,可以确定获取到所述第二请求的依赖关系,并且可以基于所述第二请求的依赖关系的获取来重试所述第二请求。
在至少一个示例中,所述第二请求的依赖关系与所述特定的依赖关系不同。
在至少一个示例中,所述第一请求对应于对所接收的请求的、将生成的响应。
在至少一个示例中,将至少部分地基于依赖关系类型来对所述重试队列排序。
在至少一个示例中,所述第一请求是所述重试队列中的多个请求中的一个请求,并且可以确定所述特定的依赖关系适用于所述多个请求中的第二请求,并且可以基于所述特定的依赖关系的获取来重试所述第二请求。
在至少一个示例中,在进入饥饿模式之前,将唯一的标识符分配给所述第一请求。
在至少一个示例中,从依赖关系信息种获取所述依赖关系,所述依赖关系信息从流水线接收,所述第一请求将通过所述流水线被发送。
在至少一个示例中,接收与所述第一请求的重试相关联的所述依赖关系信息。
在至少一个示例中,对于未能取得向前进展,所述第一请求将被添加到所述重试队列。
在至少一个示例中,可以标识所述第一请求继续无法通过所述重试而取得向前进展,并且可以基于所述重试来标识另一依赖关系,其中,在获取到所述另一依赖关系之后,将再次重试所述第一请求。
在至少一个示例中,可以标识所述重试队列与另一重试队列之间的冲突,其中,所述冲突包括至少部分地基于所述依赖关系的、所述另一个重试队列中的特定的请求的重试与所述第一请求的重试之间的冲突。
在至少一个示例中,所述重试队列包括虚拟重试队列,并且所述虚拟重试队列指向标准队列。
在至少一个示例中,在所述饥饿模式期间,激活所述虚拟重试队列。
在至少一个示例中,可以维护所述第一请的依赖关系信息,其中,所述依赖关系信息包括以下各项中的一项或多项:是否已经在所述饥饿模式期间重试所述第一请求的标识、所述特定的依赖关系的标识、是否已经获取到所述特定的依赖关系的标识以及在与另一重试队列之间的冲突是否存在的标识。
在至少一个示例中,仅为所述重试队列的所述头部请求维护依赖关系信息。
在至少一个示例中,为所述重试队列中的每一个请求维护依赖关系信息。
在至少一个示例中,可以确定所述第一请求的重试的量,并且可以确定所述重试的量超过阈值量。可以基于确定了所述重试的量超过阈值量而进入所述饥饿模式。
在至少一个示例中,在所述饥饿模式期间,将丢弃新请求。
在至少一个示例中,当所述重试队列为空时,将退出所述饥饿模式。
在至少一个示例中,可以尝试获取所述特定的依赖关系。
在至少一个示例中,可以提供一种系统,所述系统包括第一设备和第二设备,所述第二设备使用点串行互连而通信地耦合到所述第一设备。所述第二设备可以包括用于以下操作的逻辑:进入饥饿模式;将待从所述第二设备发送到所述第一设备的第一请求指定为重试队列的头部请求;标识所述第一请求的特定的依赖关系;确定获取到所述特定的依赖关系;以及基于所述特定的依赖关系的获取来重试所述第一请求。在一些示例中,所述第一设备包括多个知识产权(IP)块中的第一IP块,并且所述第二设备包括所述多个IP块中的第二IP块。在一些示例中,所述第二设备维护与多个流控制类相关联的多个重试队列。在一些示例中,所述多个重试队列包括至少一个请求虚拟重试队列和至少一个响应虚拟重试队列。
贯穿本说明书对“一个实施例”或“实施例”的引用是指结合所述实施例描述的特定的特征、结构或特性被包括在本发明的至少一个实施例中。因此,贯穿本说明书,短语“在一个实施例中”或“在实施例中”在各种地方的出现不一定全部指代相同的实施例。此外,在一个或多个实施例中,能以任何合适的方式来组合特定的特征、结构或特性。
在前述说明书中,已经参照特定的示例性实施例给出了详细的描述。然而明显的将是,可对其作出各种修改和改变而不背离在所附权利要求书中陈述的本发明的更宽泛的精神和范围。因此,将以说明性的意义而不是限制性的意义来看待说明书和附图。此外,实施例和其他示例性语言的前述使用不一定是指相同的实施例或相同的示例,而是可以指不同的且有区别的实施例,并且潜在地可以指相同的实施例。

Claims (31)

1.一种装置,所述装置包括:
耦合至以下各项的逻辑:
用于进入饥饿模式的逻辑;
用于标识重试队列中的第一请求的特定的依赖关系的逻辑;
用于确定获取到所述特定的依赖关系的逻辑;以及
用于基于所述特定的依赖关系的获取来重试所述第一请求的逻辑。
2.如权利要求1所述的装置,其中,至少部分地在硬件电路中实现所述逻辑。
3.如权利要求1所述的装置,其中,将针对多个流控制类中的特定的一个流控制类而进入饥饿模式,并且为所述多个流控制类中的每一个流控制类提供重试队列。
4.如权利要求1所述的装置,其中,所述第一请求包括事务的初始请求,并且所述逻辑进一步耦合到用于将所述第一请求指定为所述重试队列的头部请求的逻辑。
5.如权利要求4所述的装置,其中,所述重试队列中的请求以先进先出(FIFO)顺序来排序。
6.如权利要求5所述的装置,其中,所述逻辑进一步耦合到:
用于确定通过重试所述第一请求而实现了向前进展的逻辑;
用于将所述多个请求中的第二请求指定为所述重试队列的所述头部请求的逻辑,其中,所述第二请求按照所述FIFO顺序跟随所述第一请求;
用于标识所述第二请求的依赖关系的逻辑;
用于确定获取到所述第二请求的依赖关系的逻辑;以及
用于基于所述第二请求的依赖关系的获取来重试所述第二请求的逻辑。
7.如权利要求6所述的装置,其中,所述第二请求的依赖关系与所述特定的依赖关系不同。
8.如权利要求1所述的装置,其中,所述第一请求对应于对所接收的请求的、将生成的响应。
9.如权利要求8所述的装置,其中,将至少部分地基于依赖关系类型来对所述重试队列排序。
10.如权利要求9所述的装置,其中,所述第一请求是所述重试队列中的多个请求中的一个,并且所述逻辑进一步耦合到:
用于确定所述特定的依赖关系适用于所述多个请求中的第二请求的逻辑;以及
用于基于所述特定的依赖关系的获取来重试所述第二请求的逻辑。
11.如权利要求8所述的装置,其中,在进入饥饿模式之前,将唯一的标识符分配给所述第一请求。
12.如权利要求1所述的装置,其中,所述逻辑进一步耦合到用于从依赖关系信息中获取所述依赖关系的逻辑,所述依赖关系信息从流水线接收,所述第一请求将通过所述流水线被发送。
13.如权利要求12所述的装置,其中,接收与所述第一请求的重试相关联来的所述依赖关系信息。
14.如权利要求1所述的装置,其中,对于未能取得向前进展,所述第一请求将被添加到所述重试队列。
15.如权利要求14所述的装置,其中,所述逻辑进一步耦合到:
用于标识所述第一请求继续无法通过所述重试而取得向前进展的逻辑;以及
用于基于所述重试来标识另一依赖关系的逻辑,其中,在获取到所述另一依赖关系之后,将再次重试所述第一请求。
16.如权利要求14所述的装置,其中,所述逻辑进一步耦合到用于标识所述重试队列与另一重试队列之间的冲突的逻辑,其中,所述冲突包括至少部分地基于所述依赖关系的、在所述另一重试队列中的特定的请求的重试与所述第一请求的重试之间的冲突。
17.如权利要求1所述的装置,其中,所述重试队列包括虚拟重试队列,并且所述虚拟重试队列指向标准队列。
18.如权利要求17所述的装置,其中,在所述饥饿模式期间,激活所述虚拟重试队列。
19.一种方法,所述方法包括以下步骤:
进入饥饿模式;
将第一请求指定为重试队列的头部请求;
标识所述第一请求的特定的依赖关系;
确定获取到所述特定的依赖关系;以及
基于所述特定的依赖关系的获取来重试所述第一请求。
20.如权利要求19所述的方法,进一步包括以下步骤:维护所述第一请求的依赖关系信息,其中,所述依赖关系信息包括以下各项中的一项或多项:是否已经在所述饥饿模式期间重试所述第一请求的标识、所述特定的依赖关系的标识、是否已经获取到所述特定的依赖关系的标识以及与另一重试队列之间的冲突是否存在的标识。
21.如权利要求20所述的方法,其中,仅为所述重试队列的所述头部请求维护依赖关系信息。
22.如权利要求20所述的方法,其中,为所述重试队列中的每一个请求维护依赖关系信息。
23.如权利要求20所述的方法,进一步包括以下步骤:
确定所述第一请求的重试的量;
确定所述重试的量超过阈值量,其中,基于确定了所述重试的量超过阈值量而进入饥饿模式。
24.至少一种机器可访问存储介质,所述机器可访问存储介质具有存储在其上的代码,当在机器上执行所述代码时,所述代码使所述机器:
进入饥饿模式;
将第一请求指定为重试队列的头部请求;
标识所述第一请求的特定的依赖关系;
确定获取到所述特定的依赖关系;以及
基于所述特定的依赖关系的获取来重试所述第一请求。
25.如权利要求24所述的存储介质,其中,在所述饥饿模式期间,将丢弃新请求。
26.如权利要求24所述的存储介质,其中,当所述重试队列为空时,将退出所述饥饿模式。
27.如权利要求24所述的存储介质,其中,当执行所述代码时,所述代码进一步使机器尝试获取所述特定的依赖关系。
28.一种系统,所述系统包括:
第一设备;
第二设备,其中,所述第二设备使用点对点串行互连通信地耦合到所述第一设备,并且所述第二设备包括用于进行以下操作的逻辑:
进入饥饿模式;
将待从所述第二设备发送到所述第一设备的第一请求指定为重试队列的头部请求;
标识所述第一请求的特定的依赖关系;
确定获取到所述特定的依赖关系;以及
基于所述特定的依赖关系的获取来重试所述第一请求。
29.如权利要求28所述的系统,其中,所述第一设备包括多个知识产权(IP)块中的第一IP块,并且所述第二设备包括所述多个IP块中的第二IP块。
30.如权利要求28所述的系统,其中,所述第二设备维护与多个流控制类相关联的多个重试队列。
31.如权利要求30所述的系统,其中,所述多个重试队列包括至少一个请求虚拟重试队列和至少一个响应虚拟重试队列。
CN201380080097.5A 2013-11-06 2013-11-06 虚拟重试队列 Active CN105612502B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/068734 WO2015069235A1 (en) 2013-11-06 2013-11-06 Virtual retry queue

Publications (2)

Publication Number Publication Date
CN105612502A true CN105612502A (zh) 2016-05-25
CN105612502B CN105612502B (zh) 2019-08-13

Family

ID=53008057

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201380080097.5A Active CN105612502B (zh) 2013-11-06 2013-11-06 虚拟重试队列

Country Status (5)

Country Link
US (1) US10338974B2 (zh)
EP (1) EP3066573A4 (zh)
KR (1) KR101775569B1 (zh)
CN (1) CN105612502B (zh)
WO (1) WO2015069235A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109241066A (zh) * 2017-07-04 2019-01-18 北京国双科技有限公司 请求处理方法及装置

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9537646B2 (en) * 2014-08-27 2017-01-03 Lattice Semiconductor Corporation Retry disparity for control channel of a multimedia communication link
US9490962B2 (en) * 2014-08-27 2016-11-08 Lattice Semiconductor Corporation Phase relationship control for control channel of a multimedia communication link
US9703951B2 (en) 2014-09-30 2017-07-11 Amazon Technologies, Inc. Allocation of shared system resources
US9378363B1 (en) 2014-10-08 2016-06-28 Amazon Technologies, Inc. Noise injected virtual timer
US9754103B1 (en) 2014-10-08 2017-09-05 Amazon Technologies, Inc. Micro-architecturally delayed timer
US9864636B1 (en) * 2014-12-10 2018-01-09 Amazon Technologies, Inc. Allocating processor resources based on a service-level agreement
US9491112B1 (en) 2014-12-10 2016-11-08 Amazon Technologies, Inc. Allocating processor resources based on a task identifier
US9858190B2 (en) * 2015-01-27 2018-01-02 International Business Machines Corporation Maintaining order with parallel access data streams
US10496448B2 (en) * 2017-04-01 2019-12-03 Intel Corporation De-centralized load-balancing at processors
US10417146B1 (en) 2018-05-15 2019-09-17 Apple Inc. Real-time resource handling in resource retry queue
JP7081321B2 (ja) * 2018-06-13 2022-06-07 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US10866892B2 (en) * 2018-08-13 2020-12-15 Apple Inc. Establishing dependency in a resource retry queue
US11909643B2 (en) 2021-09-13 2024-02-20 Hewlett Packard Enterprise Development Lp Efficient progression management in a tracker with multiple sources

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1641605A (zh) * 2004-01-16 2005-07-20 国际商业机器公司 支持一致总线上改进突发传输的方法
US20070288937A1 (en) * 2006-05-08 2007-12-13 Microsoft Corporation Virtual Device Driver
US20090198893A1 (en) * 2008-01-31 2009-08-06 Arm Norway As Microprocessor systems
US20100095036A1 (en) * 2008-10-14 2010-04-15 Nvidia Corporation Priority Based Bus Arbiters Avoiding Deadlock And Starvation On Buses That Support Retrying Of Transactions
US20110161601A1 (en) * 2009-12-26 2011-06-30 Vash James R Inter-queue anti-starvation mechanism with dynamic deadlock avoidance in a retry based pipeline
US20110161705A1 (en) * 2009-12-26 2011-06-30 Vash James R Multiple-queue multiple-resource entry sleep and wakeup for power savings and bandwidth conservation in a retry based pipeline

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6834315B2 (en) * 2001-03-26 2004-12-21 International Business Machines Corporation Method, system, and program for prioritizing input/output (I/O) requests submitted to a device driver
US20040059858A1 (en) * 2002-09-23 2004-03-25 Blankenship Robert G. Methods and arrangements to enhance a downbound path
US7443869B2 (en) 2003-08-04 2008-10-28 Intel Corporation Deadlock avoidance queuing mechanism
US9058206B2 (en) * 2008-06-19 2015-06-16 Freescale emiconductor, Inc. System, method and program product for determining execution flow of the scheduler in response to setting a scheduler control variable by the debugger or by a processing entity
US8266331B2 (en) 2010-07-12 2012-09-11 International Business Machines Corporation Transmitting retry request associated with non-posted command via response credit channel
US8972995B2 (en) 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US20130111084A1 (en) * 2011-11-01 2013-05-02 Qualcomm Incorporated Methods and devices for single link aggregated buses
US9128754B2 (en) * 2012-05-31 2015-09-08 Hewlett-Packard Development Company, L.P. Resource starvation management in a computer system
US8867559B2 (en) * 2012-09-27 2014-10-21 Intel Corporation Managing starvation and congestion in a two-dimensional network having flow control

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1641605A (zh) * 2004-01-16 2005-07-20 国际商业机器公司 支持一致总线上改进突发传输的方法
US20070288937A1 (en) * 2006-05-08 2007-12-13 Microsoft Corporation Virtual Device Driver
US20090198893A1 (en) * 2008-01-31 2009-08-06 Arm Norway As Microprocessor systems
US20100095036A1 (en) * 2008-10-14 2010-04-15 Nvidia Corporation Priority Based Bus Arbiters Avoiding Deadlock And Starvation On Buses That Support Retrying Of Transactions
US20110161601A1 (en) * 2009-12-26 2011-06-30 Vash James R Inter-queue anti-starvation mechanism with dynamic deadlock avoidance in a retry based pipeline
US20110161705A1 (en) * 2009-12-26 2011-06-30 Vash James R Multiple-queue multiple-resource entry sleep and wakeup for power savings and bandwidth conservation in a retry based pipeline

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109241066A (zh) * 2017-07-04 2019-01-18 北京国双科技有限公司 请求处理方法及装置

Also Published As

Publication number Publication date
EP3066573A1 (en) 2016-09-14
US20150128142A1 (en) 2015-05-07
WO2015069235A8 (en) 2015-06-25
KR101775569B1 (ko) 2017-09-19
CN105612502B (zh) 2019-08-13
US10338974B2 (en) 2019-07-02
WO2015069235A1 (en) 2015-05-14
EP3066573A4 (en) 2017-06-21
KR20160051883A (ko) 2016-05-11

Similar Documents

Publication Publication Date Title
CN105612502A (zh) 虚拟重试队列
CN109154924B (zh) 多个上行链路端口设备
CN107077521B (zh) 片上系统配置元数据
TWI522792B (zh) 用以產生要求之設備、用於記憶體要求之方法、及運算系統
CN108604209B (zh) 扁平化端口桥
CN105009101B (zh) 提供与数据缓冲器相关联的监听滤波
CN100478871C (zh) 从队列处理指令刷新的生存期计数器设计的系统和方法
CN105492989B (zh) 用于管理对时钟进行的门控的装置、系统、方法和机器可读介质
US7761696B1 (en) Quiescing and de-quiescing point-to-point links
KR101830685B1 (ko) 온칩 메시 상호접속부
CN106293894B (zh) 执行事务性功率管理的硬件设备和方法
CN101132336A (zh) 异构多核处理器高速异步互连通信网络
CN107005231A (zh) 用于在高性能互连中定中心的方法、设备、系统
US11934313B2 (en) Scalable system on a chip
CN107112042A (zh) 数据信号的边沿感知同步
CN101546275B (zh) 一种获取多处理器硬件信号量的方法
CN107003838B (zh) 解码信息库
KR102614515B1 (ko) 스케일러블 인터럽트들
Painkras A chip multiprocessor for a large-scale neural simulator
Keckler et al. Tera-Op Reliable Intelligently Adaptive Processing System (TRIPS) Implementation
Feehrer et al. Coherency hub design for multi-node victoria falls server systems
Balasingam Modular, Configurable Bus Architecture Targeted for Ease of IP Reuse on System on Chip and ASIC Devices
Confidential PROJECT NUMBER: 249013

Legal Events

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