欢迎光临小豌豆知识网!
当前位置:首页 > 电学技术 > 电通讯技术> 支持有序和无序事务类的设备独创技术38244字

支持有序和无序事务类的设备

2020-11-21 15:58:19

支持有序和无序事务类的设备

  背景技术

  某些系统互连通信协议定义必须由连接到互连的组件支持的各种包类型。例如,协议可以定义读取请求、读取响应、写入请求、写入确认和各种控制包。诸如PCIe的传统计算机系统互连通过规定用于确保事务仅以预期顺序可见的某些组构排序规则来部分地提供正确行为。为提供更高的性能和可靠性,诸如Gen-Z的一些组构互连被设计以消除这些要求。

  附图说明

  在以下的详细描述中并且参考附图描述某些示例,其中:

  图1示出示例系统,该示例系统包括位于包含请求器和响应器的组构上的节点;

  图2示出包括请求器和响应器的示例设备;

  图3示出包括请求器和响应器的示例设备;

  图4是说明示出第一目的地上的第一请求器和响应器与第二目的地上的第二请求器和响应器之间的示例系列通信的通信跳转图;以及

  图5示出分岔的请求器和响应器的操作示例方法。

  具体实施方式

  所述技术的实施方式提供通过使用分离的请求器/响应器架构支持多个事务类的系统。第一事务类可以允许宽松排序,其中,包可以彼此越过并以不同于从源发送它们的方式的顺序到达目的地。第二事务类具有更严格的排序要求,其中,某些类型的包不能在类内越过其它类型的包。例如,第二事务类可以包括已提交写入请求包类型和未提交读取响应包类型,其中,未提交读取响应不能越过已提交写入请求。例如,第一事务类可以是一组核心点对点Gen Z包类型,而第二事务类可以是一组Gen Z PCIe兼容排序包类型。

  节点可以具有分离的架构,其中,请求器和响应器块相互独立地将包注入到组构上。请求器处理诸如读取请求和写入请求的事务请求到组构上的注入。响应器处理诸如读取响应和写入确认的事务响应到组构上的注入。在一些实施方式中,请求器和响应器彼此独立地从其相应的队列选择包。请求器和响应器彼此独立地将第一事务类的包注入到组构上。

  对于第二事务类的不能越过第二类的已提交事务请求的响应,响应器询问请求器,以确定是否存在针对同一目的地绑定的未决已提交事务请求。如果存在未决已提交事务,响应器缓冲选择的响应,直到请求器指示未决已提交事务不再未决。该架构允许响应器使用相同的队列、仲裁和注入逻辑以处理两个类的事务,由此减少支持这两个事务类所需的额外逻辑量。此外,该架构可以允许两个类的事务由互连请求器和响应器的开关组构内的公共路由逻辑支持。

  一些实施方式支持多个虚拟信道(VC)。VC是跨单个物理链接发送的逻辑包流。例如,组件可以利用多个VC以使得包鉴别能够提供不同的服务速率、服务质量(QoS)水平、促进多路径和动态路由、防止死锁或其它特性。包可以通过包含作为与包相关联的信息元素的VC标识符而被分配给VC。

  在一些实施方式中,第二事务类的包(请求包和响应包)在与用于传送第一事务类的包的一个或多个虚拟信道分开的虚拟信道上进行传送。在其它实施方式中,第二事务类的请求包在一个或更多个虚拟信道上被传送,并且,第二事务类的响应包在一个或更多个不同的虚拟信道上被传送。这两种实施方式均可以使用虚拟信道信息来维护针对第二类的已提交事务请求的排序要求。例如,在这两种实施方式中,组构可以将相同的路由应用于从源到目的地的所有已提交请求包。

  在一些实施方式中,用于第二事务类的包的一个或多个虚拟信道可以与用于第一事务类的包的一个或多个虚拟信道分开。例如,这可以允许第二事务类的包具有基于虚拟信道的通过组构的静态路由,而不影响第一事务类的包的路由。在其它实施方式中,两个类的包均可以使用相同的虚拟信道。例如,两个事务类的读取响应可以在同一虚拟信道上进行发送,而一个类的写入请求可以在与另一个类的写入请求不同的虚拟信道上进行发送。作为另一示例,两个事务类的写入请求和读取请求均可以在相同的一个或多个虚拟信道上被发送,并且组构可以使用其它信息元素以对第二事务类的已提交事务请求进行有序路由。

  图1示出经由包开关组构108连接的多个节点的示例。节点101、118、119、120可以是各种不同的组件。例如,节点可以包括具有集成存储器或储存控制器的处理器或芯片上系统(SOC);诸如动态随机存取存储器(DRAM)、非易失性存储器(NVM)或储存类存储器(SCM)模块的存储器模块;图形卡或其它加速器;网络控制器;开关;数字信号处理器;通过使用存储器语义通信协议进行通信的定制专用集成电路(ASIC)或现场可编程门阵列(FPGA)或其它设备。在存储器语义协议中,通信对应于加载/存储处理器架构。可以通过使用对例如处于字节地址级别的特定地址的读取和写入请求执行组件之间的通信。然而,读取和写入请求不一定限于将数据读取和写入到存储器或字节可寻址储存。例如,为了访问加速器工作队列或从完成队列读取,加速器可以暴露可以读取和写入的地址范围。

  在所示示例中,节点经由开关组构108被连接。开关组构108可以包括以诸如全对全拓扑的拓扑连接组件的多个包开关。在其它示例中,节点可以以各种不同的方式互连。例如,节点可以是开关连接、直接连接或菊花链连接。

  每个节点组件101、118、119、120包括组件接口。不同的组件可以具有接口配置。例如,节点101和120具有包括请求器102、114和响应器103、115的接口105、117;节点118具有包括请求器但没有响应器的接口113;并且节点119具有包括响应器但没有请求器的接口116。在该架构中,请求器102、114、113向响应器103、115、116传送请求,并且响应器103、115、116传送对接收的请求的响应。为便于解释,利用到组构108的单个链接106、107、109-112示出每个接口块(即,每个请求器120、114、113和每个响应器103、112、110)。在一些部署中,单个链接可能是逻辑的而不是物理的。例如,可以通过在单双工链接上的时间复用实现链接106和107,或者,可以采用在共享物理链接上提供专用逻辑链接的另一方法。

  在本示例中,接口105的请求器102和响应器103支持第一事务类和第二事务类。

  第一事务类包括具有宽松排序模型的多个存储器语义包类型。例如,第一事务类可以包括读取请求、读取响应和写入请求。

  读取请求可以由请求器102、114、113传送到响应器103、115、116。这些读取请求是请求从由读取请求定义的存储器地址读出和返回数据的包。读取响应由响应器103、115、116传送到请求器102、114、113以返回由相应读取请求所请求的数据。第一事务类可以包括单种或多种类型的读取请求。例如,第一事务类可以包括不同类型的读取请求,以读取从指示的地址开始的N字节数据,这里,N根据请求类型而变化(例如,组件可以支持读取从包含于请求中的地址开始的32字节数据的“Read 32”请求或读取从包含于请求中的地址开始的64字节数据的“Read 64”请求。

  写入请求由请求器传送并且是请求将数据写入到规定地址的包。写入请求可以包括起始存储器地址和待写入起始存储器地址处的存储器的有效载荷。在一些实施方式中,在执行所请求的写入之后,可以通过由响应器传送的确认包确认写入请求。在其它实施方式中,写入请求可能未被接收响应器确认。在进一步的实施方式中,架构可以支持第一事务类内的已确认写入请求和未确认写入请求。

  第二事务类包括已提交写入请求、未提交请求和响应。

  已提交请求不需要等待指示请求的成功或失败的请求完成响应。例如,在发出已提交写入请求时,该请求的请求器一在组构上发送请求,则请求的源就可以将请求视为已完成,而无需等待来自接收响应器的确认。例如,一旦请求器发送已提交请求,在请求源内导致请求被传送的组件(诸如在节点上运行的应用或操作系统(OS))可以将已提交请求视为已完成。

  未提交请求需要完成响应,以指示请求的成功或失败或提供请求数据。例如,当以上的存储器控制器发出未提交读取时,存储器控制器必须等待待由响应器返回的请求数据。作为另一示例,第二事务类还可以包括未提交的写入请求。发出未提交写入请求的请求器在动作之前以假定完成未提交写入请求的方式等待写入确认。

  第二事务类具有已提交请求可以越过到同一目的地的未提交请求和响应并且没有请求或响应可以越过到同一目的地的已提交请求的排序模型。例如,排序模型可以是PCIe兼容排序模型。

  在一些实施方式中,第一事务类和第二事务类可以共享包类型或格式。例如,元数据标记,诸如写入请求包标题中的信息元素,可以指示写入请求是第一事务类还是第二事务类。此外,如果请求是第二类,则信息元素可以指示请求是已提交请求还是未提交请求。

  返回图1,响应器103与由请求器102发送的第一类的事务无关地发送第一类的事务。例如,响应器103可以与由请求器102执行的排队和优先级仲裁无关地执行排队和优先级仲裁决定。例如,响应器103可以具有未决读取响应的读取响应队列以发送给其它节点118-120上的请求器。响应器可以从队列选择读取响应并且与请求器102在其自身队列中可能具有的或在组构108上可能未决的任何请求的状态无关地通过链接107传送读取响应。

  在一些情况下,响应器103、115、116被配置为向请求器发送对第二事务类的已提交事务请求的确认。在一些情况下,可以在响应器处接收到已提交事务请求时提供这些确认。在其它情况下,可以在请求的事务已完成后提供这些确认。

  例如,在一些实施方式中,对于已提交写入请求,响应器115与请求中的数据是否已被写入到响应器的介质无关地发送对已提交写入请求的接收确认。当写入的数据在实际写入响应器的介质之前对后续读取可见时,可以实现这一点。例如,如果响应器可以在并行地执行写入时为从写入缓冲区的后续读取提供服务,则可以实现这一点。

  在其它实施方式中,响应器115在写入请求完成后发送接收确认。例如,当写入对后续读取不可见直到该写入存储于响应器的介质中时,可能发生这种情况。作为另一例子,当写入需要持久并且在写入可以被视为持久之前必须被提交给非易失性数据储存介质时,可能发生这种情况。(相比之下,在写入必须在后续读取之前持久但响应器针对其非易失性介质包括电池或电容器支持易失性缓存的示例中,在响应器将数据提交到其非易失性介质之前,可能发送已提交写入确认。)

  请求器102使用对已提交事务请求的确认以跟踪组构上的第二事务类的已提交事务请求的未决。换句话说,请求器102指示已提交事务从其在组构108上被发送到从目的地接收遍历确认期间是未决的。在一些实施方式中,该确认不被提供给请求的源。换句话说,由于请求组件可以在发送已提交事务请求时将已提交事务请求视为完成,因此不需要接收到已提交事务请求的确认。

  系统还包括响应器103和请求器102之间的通信信道104。响应器103在发送第二事务类的未提交事务响应之前使用信道104以从请求器102接收指示请求器102是否具有第二事务类的未决先前提交事务请求的指示。例如,信道104可以是请求器102和响应器103之间的总线或其它通信链接,可以是到请求器102维护的寄存器集、表或其它数据结构的端口或者其它信道。

  在一些实施方式中,如果存在由请求器发送到目的地的第二事务类的未决已提交事务,则响应器104不向该目的地发送未提交响应。例如,当响应器103从目的地为节点X(即,节点118或120中的一个)的第二类选择事务响应时,响应器103询问请求器以确定是否存在针对节点X的未决已提交事务请求。在其它实施方式中,如果存在由请求器向任何目的地发送的第二事务类的未决已提交事务,则响应器104不向任何目的地发送第二事务类的未提交响应。

  在一些情况下,响应器103延迟发送未提交事务响应,直到请求器102对于与未提交事务相同的目的地而言没有任何未决先前已提交事务请求。例如,响应器103可以缓冲未提交事务响应,直到接收不存在到同一目的地的先前已提交事务请求的指示。通过在发出读取响应之前等待这些已提交写入请求完成,该技术方案消除组构的其它部分管理这些流的排序的需要。由于已提交请求已完成,因此读取响应不能越过该已提交请求。

  图2展示包括分叉的请求器和响应器的示例设备。例如,设备201可以是诸如关于图1描述的节点101的设备的实施方式。所示的系统组件被示为逻辑块,这些逻辑块可以在硬件中实施为数字电路、实施为存储在诸如闪速存储器或ROM的非暂时性介质中的固件或软件或实施为其组合。

  设备201包括具有请求器204和响应器205的系统计算机节点。出于解释的目的,设备201包括包含耦合到请求器204和响应器205以及本地存储器222的存储器控制器203的CPU 202。如上所述,在其它实施方式中,设备201可以是诸如动态随机存取存储器(DRAM)、非易失性存储器(NVM)或储存类存储器(SCM)模块的存储器模块。在这种实施方式中,作为CPU 202的替代,设备可以包括具有到存储器或储存设备的接口以及到请求器204和响应器205的接口的媒体控制器。在进一步的实施方式中,设备201可以是图形卡或其它加速器、网络控制器、开关、数字信号处理器、通过使用存储器语义通信协议进行通信的定制专用集成电路(ASIC)或现场可编程门阵列(FPGA)或其它设备。

  设备201包括支持第一事务类和第二事务类的请求器204。请求器包括多个请求传送队列206、208、210、212。在该示例中,请求器支持四个虚拟信道(VC),并为每个虚拟信道维护单独的传送队列206、208、210、212。虽然请求器204示出为具有用四个VC,但是实施方式可以具有更多或更少数量的VC,或者可以仅具有单个信道(其可被其视为隐式VC)。在一些实施方式中,存储器控制器203或CPU 202生成要传送的包,并将这些包直接放入队列206、208、210、212中,包括将包分配给其VC。在其它实施方式中,CPU 202将诸如加载或存储请求的请求传送到请求器204、响应器205或然后生成适当的事务包以实现CPU请求的中介组件(未图示)。

  每个队列206、208、210、212分别耦合队列仲裁器207、209、211、213。队列仲裁器207、209、211、213从其相应的队列206、208、210、212选择包。例如,队列仲裁器207可以应用各种类型的基于优先级的包选择中的一种以从队列选择包。不同的仲裁器207、209、211、213可以应用不同的优先级技术,或者可以应用相同的技术。在一些实施方式中,仲裁器207、209、211、213中的一些或全部不存在,而队列206、208、210、212是先进先出(FIFO)缓冲器。

  VC仲裁器214从来自不同VC(即,来自不同队列仲裁器207、209、211、213,或者,如果没有队列仲裁,则来自FIFO缓冲器的头部)的候选包选择要传送的包。VC仲裁器214可以应用各种不同的仲裁算法以选择要传送的包。例如,仲裁器214可以应用循环比对技术、基于年龄的优先级或这些算法中的一种的加权版本以选择用于传送的包。所选择的包被发送到请求器收发器215,用于注入到链接223上进入组构224中,用于传送到包的目的地。

  请求器204还包括多个接收队列218、219、220、221。每个接收队列218、219、220、221对应于由请求器204支持的VC中的一个。例如,接收队列218、219、220、221可以是存储对请求器先前发送的请求的响应的FIFO缓冲器。

  请求器204还包括跟踪第二事务类的已提交事务请求的端到端遍历的跟踪器216。在该示例中,跟踪器216耦合到收发器215,并且插入到VC仲裁器214和收发器215之间。这允许跟踪器216在包被发送之前检查它们,并且跟踪第二事务类的已提交事务请求。在其它实施方式中,跟踪器216可以位于主包传送和接收路径之外。例如,跟踪器216可以窥探VC仲裁器214和收发器215之间的总线,以确定何时传送已提交事务请求。

  跟踪器216进一步耦合到其维护的数据结构217,以跟踪第二事务类的飞行中已提交事务请求。跟踪器216可以以各种方式维护数据结构。例如,数据组构217可以是其中每个条目对应于飞行中已提交事务请求的表。例如,每个条目可以包括飞行中已提交事务的目的地和ID。当收发器215接收已提交事务遍历的确认时,跟踪器216可以清除对应于已提交事务的条目。作为另一示例,每个条目可以包括目的地ID和每当已提交事务被发送到相应ID时跟踪器递增并且每当已提交事务确认被接收时跟踪器递减的计数器。在本示例中,当计数器达到0时,跟踪器会清除表条目。

  如上所述,已提交事务请求一旦被传送就可以被视为已完成。例如,在CPU 202上运行的应用一旦被注入到组构224上就可以处理已提交写入请求。因此,在跟踪器216使用确认以跟踪事务请求的遍历之后,可以丢弃由请求器204接收的已提交事务遍历确认。例如,如果跟踪器216处于接收队列218、219、220、221之间的路径中,则跟踪器216可以丢弃已提交事务遍历确认,而不越过这些已提交事务遍历确认以接收队列管理逻辑。

  设备201还包括响应器205,以支持第一事务类和第二事务类。响应器205包括多个接收队列238、239、240、241。例如,接收队列238、239、240、241可以是存储接收的请求的FIFO缓冲器。在本示例中,响应器支持四个虚拟信道(VC)并针对每个VC维护单独的接收队列238、239、240、241。在一些示例中,由响应器205支持的一些或所有VC与由请求器204支持的那些VC相同。例如,VC可以通过ID号被区分,并且由响应器支持的VC可以具有相同的或重叠的ID号集合。

  如上所述,响应器经由组构224接收来自其它请求器的请求。这些请求在队列238、239、240、241中排队。然后,请求被传递到为请求提供服务的存储器控制器203,或者将请求传递到要被服务的另一组件。例如,当接收请求本地存储器222中的数据的读取请求时,存储器控制器203从存储器检索数据并将数据返回给响应器205,以供在读取响应包中传送到该请求。

  响应器205包括多个响应传送队列229、231、233、235。在该示例中,响应器支持四个虚拟信道(VC)并针对每个虚拟信道维护单独的传送队列229、231、233、235。在一些实施方式中,响应器205可以在与用于发送第二事务类的请求包的请求器204不同的VC上发送第二事务类的响应包。

  在一些实施方式中,存储器控制器203或CPU 202生成要传送的响应包并将该响应包直接放入队列229、231、233、235中,包括将包分配给其VC。在另一示例中,存储器控制器203或其它组件以原始或其它格式返回数据,并且,响应器205或中介组件将数据打包成适当的响应包,并将响应放入队列229、231、233、235中的一个中。

  响应器205包括未决事务检查器225。检查器225包括进入队列229、231、233、235中的边带接口226。在一些实施方式中,检查器225在响应包进入队列229、231、233、235时监视这些响应包。在其它实施方式中,VC(因此,队列)中的一个或多个专用于第二事务类的响应。在这些实施方式中,检查器225可以仅监视放置在专用队列中的响应包。

  在本示例中,如果被监视的响应包为第二事务类,则检查器225将该包标记为不可用于通过接口242传送并询问请求器204以接收对已提交事务请求的端到端遍历的指示。例如,接口242可以耦合到跟踪器216或数据结构217。在一个实施方式中,检查器225可以从被监视的包检索响应目的地ID(即,要求响应的请求的源)并且传送响应目的地ID以检查是否存在与未提交响应具有相同目的地节点的未决先前已提交事务。在另一个实施方式中,检查器225检查是否存在任何未决先前已提交事务。一旦检查器225接收指示不存在未决已提交事务的响应,则检查器225就从排队的响应包清除不可用标记。

  在另一示例中,生成第二事务类的响应包的组件可以创建具有不可用标记的包。作为另一示例,不使用不可用标记。相反,只有当检查器225从请求器204确定第二事务类的先前已提交写入事务已经完成,第二事务类的响应包才被标记为可用。在该示例中,队列仲裁器230、232、234、236仅从具有可用标记的第二类事务进行选择。

  每个队列229、231、233、235分别耦合队列仲裁器230、232、234、236。队列仲裁器230、232、234、236从其相应的队列229、231、233、235选择包。队列仲裁器230、232、234、236可以应用各种类型的基于优先级的包选择中的一种以从队列选择包。不同的仲裁器230、232、234、236可以应用不同的优先级技术,或者可以应用相同的技术。在一些实施方式中,仲裁器230、232、234、236中的一些或全部不存在,而队列230、232、234、236是先进先出(FIFO)缓冲器。

  管理存储第二事务类的响应的队列的队列仲裁器230、232、234、236被配置为不选择具有不可用标记的包。因此,适用的队列230、232、234、236缓冲事务响应,直到不可用标记被清除。如上所述,在检查器接收第二事务类的先前已提交事务(根据实施方式,要么为任何先前已提交事务要么为到同一目的地的先前已提交事务)已完成端到端遍历的指示后,响应包的不可用标记被清除。

  在具有FIFO队列且没有队列仲裁器229、231、233、235的实施方式中,检查器225可以从队列去除包或者防止这些包排队直到接收第二类的先前已提交写入请求已完成端到端遍历的指示,而不是标记第二事务类的响应包。

  VC仲裁器237从来自不同VC(即,来自不同队列仲裁器230、232、234、236,或者,如果没有队列仲裁,则来自FIFO缓冲器的头部)的候选包选择要传送的包。VC仲裁器237可以应用各种不同的仲裁算法以选择用于传送的包。例如,仲裁器237可以应用循环比对技术、基于年龄的优先级或这些算法中的一种的加权版本以选择用于传送的包。所选择的包被发送到请求器收发器227用于注入到链接228上进入组构224中以用于传送到包的目的地。

  响应器205还被配置为在从外部请求器接收第二事务类的已提交事务请求之后向外部请求器传送端到端遍历确认。在一些实施方式中,响应器205中的逻辑(诸如检查器225)可以生成和发送确认。例如,检查器225可以耦合到接收队列并监视接收队列,并且可以生成遍历确认。在该示例中,检查器225随后可以将遍历确认排队到传送队列229、231、233、235中的一个中。在其它实施方式中,如上面关于图1讨论的那样,可以在完成请求之后生成遍历确认。

  图3示出包括分叉的请求器和响应器的示例设备。例如,设备301可以是诸如关于图1描述的节点1 101的设备的实施方式。所示的系统组件被示为逻辑块,这些逻辑块可以在硬件中实施为数字电路、实施为存储在诸如闪速存储器或ROM的非暂时性介质中的固件或软件或实施为其组合。

  设备301包括具有请求器304和响应器305的系统计算机节点。出于解释的目的,设备301包括包含耦合到请求器304和响应器305以及本地存储器322的存储器控制器303的CPU 202。这些元件可以如关于CPU 202、存储器控制器203和本地存储器222描述的那样。如上所述,在其它实施方式中,设备301可以是诸如动态随机存取存储器(DRAM)、非易失性存储器(NVM)或储存类存储器(SCM)模块的存储器模块、图形卡或其它加速器、网络控制器、开关、DSP、ASIC、FPGA或通过使用存储器语义协议进行通信的其它设备。

  设备301还包括用于支持第一事务类和第二事务类的请求器304。请求器包括多个请求传送队列306、308、310、312。在该示例中,请求器支持四个虚拟信道(VC)并针对每个虚拟信道维护单独的传送队列306、308、310、312。在该示例中,队列306、308、310、312是FIFO缓冲器。每个缓冲器耦合到VC仲裁器314,该VC仲裁器314选择要从缓冲器头部传送的包。如关于VC仲裁器214描述的那样,VC仲裁器314可以应用各种不同的仲裁算法。在其它实施方式中,队列可以耦合到从队列306、308、310、312选择候选包的队列仲裁器

  请求器304还包括多个接收队列318、319、320、321。每个接收队列318、319、320、321对应于由请求器304支持的VC中的一个。例如,接收队列318、319、320、321可以是存储对由请求器先前发送的请求的响应的FIFO缓冲器。

  请求器304还包括跟踪第二事务类的已提交事务请求的端到端遍历的跟踪器316。在该示例中,跟踪器316耦合到收发器315并且被插设在VC仲裁器314和收发器315之间。这允许跟踪器316在包被传送之前检查这些包并跟踪第二事务类的已提交事务请求。在其它实施方式中,跟踪器316可以位于主包传送和接收路径之外。例如,跟踪器316可以监听VC仲裁器314和收发器315之间的总线,以确定已提交事务请求被何时传送。

  跟踪器316进一步耦合到其维护的数据结构317,以跟踪第二事务类的飞行中已提交事务请求。跟踪器316可以以各种方式维护数据结构。例如,数据组构317可以是其中每个条目对应于飞行中已提交事务请求的表。例如,每个条目可以包括飞行中已提交事务的目的地和ID。当收发器315接收已提交事务遍历的确认时,跟踪器316可以清除对应于已提交事务的条目。作为另一示例,每个条目可以包括目的地ID和每当已提交事务被发送到相应ID时跟踪器递增并且每当已提交事务确认被接收时跟踪器递减的计数器。在本示例中,当计数器达到0时,跟踪器会清除表条目。

  设备301还包括响应器305,以支持第一事务类和第二事务类。响应器305包括多个接收队列338、339、340、341。例如,接收队列338、339、340、341可以是存储接收的请求的FIFO缓冲器。在该示例中,响应器支持四个虚拟信道(VC)并针对每个VC维护单独的接收队列338、339、340、341。在一些示例中,由响应器305支持的一些或所有VC是与由请求器304支持的VC相同的VC。例如,VC可以通过ID号被区分,并且,由响应器支持的VC可以具有相同的或重叠的ID号集合。

  如上所述,响应器经由组构324接收来自其它请求器的请求。这些请求在队列338、339、340、341中排队。然后,请求被传递到为请求提供服务的存储器控制器303,或者将请求传递到要被服务的另一组件。例如,在接收请求本地存储器322中的数据的读取请求时,存储器控制器303从存储器检索数据并将数据返回给响应器305,以供在读取响应包中传送到该请求。

  响应器305包括多个响应传送队列329、331、333、335。在该示例中,响应器支持四个虚拟信道(VC),并针对每个虚拟信道维护单独的传送队列329、331、333、335。在一些实施方式中,响应器305可以在与用于发送第二事务类的请求包的请求器304不同的VC上发送第二事务类的响应包。。

  在一些实施方式中,存储器控制器303或CPU 302生成要传送的响应包并将这些响应包直接放入队列329、331、333、335中,包括将包分配给其VC。在另一示例中,存储器控制器303或其它组件以原始或其它格式返回数据,并且,响应器305或中介组件将数据打包成适当的响应包,并将响应放入队列329、331、333、335中的一个中。

  在本示例中,每个传送队列329、331、333、335是耦合到VC仲裁器337的FIFO缓冲器。在其它示例中,如关于图2描述的那样,队列可以耦合到队列仲裁器。VC仲裁器337从来自FIFO缓冲器329、331、333、335的头部的候选包选择要传送的包。VC仲裁器337可以应用关于VC仲裁器227描述的各种仲裁技术。所选择的包被发送到响应器收发器327,用于注入到链接328上进入组构324中以用于传送到包的目的地。

  响应器305还包括排队器325。排队器325耦合到至请求器304的接口342,以从跟踪器接收已提交事务请求的端到端遍历的指示。例如,接口342可以耦合到跟踪器316或数据结构317。当仲裁器337选择用于在链接328上传送的第二事务类的响应(诸如未提交读取响应)时,排队器325检查是否存在由请求器304发送的未决已提交事务。例如,排队器325可以检查是否存在与未提交响应具有相同目的地的未决已提交事务。可替代地,排队器325可以检查是否存在到任何目的地的任何未决已提交事务。

  请求器305还包括基于指示传送所选择的事务响应的收发器327。例如,响应器305可以在存在阻止所选响应的传送的未决已提交事务的同时在缓冲区326中缓冲所选择的事务响应。缓冲区326可以被定尺寸为缓冲多个未决响应。例如,缓冲器326可以根据在组构上的已提交事务的典型往返延迟和响应器的包传送速率来确定尺寸。

  响应器305还被配置为在接收来自外部请求器的第二事务类的已提交事务请求之后向外部请求器传送端到端遍历确认。在一些实施方式中,响应器305中的逻辑(诸如收发器327或排队器225)可以生成和发送响应。在其它实施方式中,其它系统组件可以在相应的请求完成之后生成遍历响应。

  图4示出第一目的地设备A处的请求器402和响应器401与第二目的地设备B处的第二请求器405和响应器406之间的一系列示例通信的示例网络跳转图。通信设备通过由开关1 403和开关2 404表示的开关网络互连。

  在该示例中,请求器A 402向响应器B 406传送第一类的写入请求(WR1 407)和第二类的已提交写入请求(PWR2 408)。响应器B 406执行请求的写入并向PWR2 408发送确认PWR-ACK2 411。在各种实施方式中,响应器B 406也可以发送WR1的确认。然而,为清楚起见,在图3中省略该确认。不需要第一类的事务请求来维护与第二类的事务的排序关系。在此示例中,开关1 403在WR1 407之前转发PWR2 408,从而与其原始传送顺序相比颠倒事务的顺序。

  这里,请求器B 405向响应器A 401发出第二类的读取请求(RD2 410)和第一类的读取请求(RD1 409)。响应器A 401接收读取请求并准备发送包含所请求数据的读取响应RD-RSP1 412和RD-RSP 2 413。

  在发送RD-RSP2 413之前,响应器A 401询问414请求器A 402以确定是否存在到目的地B的未决已提交事务。当请求器A 402接收询问414时,其尚未接收PWR-ACK2411。因此,响应于询问414,请求器A 402答复415是,存在到目的地B的未决已提交事务。在响应中,响应器A 401缓冲RD-RSP2 413并且不发送它。在RD1 409的情况下,事务是第一类,因此响应器A 401将RD-RSP1 412发送到请求器B 405,而不检查是否存在到目标B的未决写入请求。

  在该实施方式中,响应器A 401重复对请求器A 402的询问416,以确定是否存在到目的地B的未决已提交事务。请求器A 402在询问416之前已经接收PWR-ACK2 411。因此,请求器A 402响应417不存在到目的地B的未决已提交事务。响应器A 401然后将RD-RSP2发送到请求器B 405。在可替代实施方式中,请求器A 402延迟向询问414发送响应,直到已提交写入确认PWR-ACK2被接收。在该实施方式中,缺少响应表明存在第二事务类的未决已提交写入请求,并且响应器A 401缓冲RD-RSP2,直到接收响应之后。

  图5示出包括请求器和响应器的设备的操作方法。例如,图1的节点101、图2的设备201、图3的设备301或图3的目的地A可以如关于图5所描述的那样操作。

  该方法包括块501。块501包括请求器从请求队列选择到目的地的已提交请求。如上所述,请求器可以与由响应器执行的排队和仲裁无关地从请求队列请求请求。请求队列还可以包括未提交请求。已提交请求来自已排序事务类,而未提交请求可能来自未排序事务类或已排序事务类。例如,如上所述,请求器可以支持多个事务类,包括有序事务类和无序事务类。在有序事务类中,已提交事务请求(例如,已提交写入请求)可以越过到达同一目的地的未提交请求和未提交响应(包括完成或确认包),并且任何请求或响应都不能越过到达同一目的地的已提交请求。例如,排序模型可以是PCIe兼容排序模型。在无序事务类中,从一个目的地到另一个目的地的所有请求和响应都可以在组构上相互越过。

  该方法还包括块502。块502包括请求器将已提交请求发送到目的地。例如,块502可以包括请求器在第一虚拟信道上传送已提交请求。如上所述,块502还可以包括与由响应器传送的响应无关地传送请求。

  该方法还包括块503。块503包括请求器跟踪已提交请求的飞行中状态。例如,块503还可以包括请求器从目的地接收确认。这里,块503可以包括在已提交请求被发送到目的地时跟踪飞行中已提交请求,并且响应于确认,更新已提交请求的飞行中状态。例如,请求器可以通过在数据结构中将请求标记为完成或者从数据结构去除用于请求的跟踪数据来更新已提交请求的飞行中状态。

  该方法还包括块504。块504包括响应器从响应队列选择到目的地的第一响应。如上所述,响应器可以与请求器从请求队列选择已提交请求无关地从响应队列选择第一响应。在一些实施方式中,响应队列可以包括来自无序事务类和有序事务类的响应的混合。

  该方法还包括块505。块505包括响应器从请求器接收指示已提交请求处于飞行中的信号。例如,块505可以包括响应器询问请求器以响应于选择第一响应确定是否存在到目的地的飞行中已提交请求。接收的信号可以响应于响应器询问请求器。

  该方法还包括块506。块506包括响应器缓冲第一响应,直到响应器从请求器接收指示已提交请求不在飞行中的信号。例如,响应器可以重复块505和块506以重复询问请求器,直到响应器接收已提交请求不在飞行中的信号。作为另一示例,请求器可以延迟发送响应于询问的信号,直到已提交请求不在飞行中。

  该方法还包括块507。块507包括响应器将第一响应传送到目的地处的请求器。例如,块507可以包括在与请求器用于传送已提交请求的虚拟信道不同的虚拟信道上传送响应。作为另一示例,块507可以包括在与已提交请求相同的虚拟信道上传送响应。

  在上述描述中,阐述了许多细节,以提供对这里公开的主题的理解。然而,可以在没有这些细节中的一些或全部的情况下实施这里实施方式。其它实施方式可以包括对上述细节的修改和变化。所附权利要求旨在涵盖这些修改和变化。

《支持有序和无序事务类的设备.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式(或pdf格式)