CN103141050B - 快速通道互联***中数据包重传方法、节点 - Google Patents
快速通道互联***中数据包重传方法、节点 Download PDFInfo
- Publication number
- CN103141050B CN103141050B CN201280001769.4A CN201280001769A CN103141050B CN 103141050 B CN103141050 B CN 103141050B CN 201280001769 A CN201280001769 A CN 201280001769A CN 103141050 B CN103141050 B CN 103141050B
- Authority
- CN
- China
- Prior art keywords
- packet
- module
- node
- counter
- count value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Detection And Prevention Of Errors In Transmission (AREA)
- Communication Control (AREA)
Abstract
本发明实施例公开了一种快速通道互联***中数据包重传方法、节点,当第一节点作为发送端时,仅向第二节点重传检测错误的第一数据包,避免了向第二节点重复发送第二节点已正确接收的第一数据包,由此节省了数据包重传所需占用的***资源,进而有利于提高***资源的利用率;当第一节点作为接收端时,第一节点的第一链路层缓存在发送第一重传请求至接收第一重传响应期间正确接收的第二数据包,并在正确接收到第二节点重传的第二数据包之后,向第一协议层发送上述期间缓存的第二数据包,实现了当第二节点仅重传检测错误的第二数据包的情形下,第一节点不会丢包,由此保障了基于QPI总线传输数据包的可靠性。
Description
技术领域
本发明涉及计算机技术,尤其涉及一种快速通道互联***中数据包重传方法、节点。
背景技术
快速通道互联(Quick Path Interconnect,简称QPI)技术,广泛应用于多处理器平台的中央处理器(Central Processing Unit,简称CPU)之间的数据交换,是一种基于数据包传输的串行式高速点对点连接协议,采用差分信号与专门的时钟进行数据传输,用来实现CPU之间的直接互联,可提供较高的访问带宽。基于QPI总线的接口协议包括:物理层(也称为下层,Lower Layer)、链路层(Link Layer)和协议层(也称为上层,Upper Layer)。物理层负责接收外部CPU发送的数据包以及向外部CPU发送数据包;协议层负责QPI端口与该端口所在CPU内部的通讯;链路层位于协议侧和物理层之间,负责将来自协议层的数据包经物理层发送给外部CPU,以及对物理层接收到的数据包进行译码、并将译码成功的数据包经协议层发送给该端口所在CPU内部。
为了提高QPI***不同CPU之间数据传输的可靠性,QPI技术在链路层引入了数据包重传机制。QPI***中如果本地链路层检测到远端发送的数据包出错时,会经本地物理层向远端发送重传请求,用于请求重传出错的数据包;由于链路时延等因素,在本地链路层确定接收到出错的数据包到远端重传该出错的数据包期间,远端向本地持续发送一个或多个数据包,本地链路层则丢弃出错数据包之后本地物理层接收到的各数据包;远端链路层根据重传请求确定需要重传的数据包,并经远端物理层向本地重传自该出错数据包之后发送的所有数据包。
现有QPI***当传输的数据包出错时,远端链路层重传的是出错的数据包之后发送的所有数据包,其中包括远端链路层已向本地发送过的数据包,由此造成***带宽资源的浪费。
发明内容
本发明提供一种快速通道互联总线的数据包重传方法、节点,用于减少数据包重传所需占用的***资源,进而有利于提高***资源的利用率。
本发明提供了一种快速通道互联总线的数据包重传方法,包括:
接收来自远端节点的第二数据包,所述第二数据包中不包含该数据包的序列号;
启动第一计数器,所述第一计数器的第一计数值的初始值为0;
对接收到的每一个第二数据包进行检测,如果检测结果正确,则缓存该正确的第二数据包,所述第一计数器将第一计数值加1,向所述远端节点发送第二接收确认信息,所述第二接收确认信息中不包含该正确的第二数据包的序列号;如果检测结果错误,则第一计数器停止计数,启动第二计数器,所述第二计数器的第二计数值的初始值为0,向所述远端节点发送第一重传请求,所述第一重传请求中携带所述第一计数值,所述第一计数值代表该错误的第二数据包的序列号;
在检测到所述错误的第二数据包后,继续接收来自远端节点的第二数据包,对每一个第二数据包进行检测,如果检测结果正确,则缓存该正确的第二数据包,所述第二计数器将第二计数值加1;
接收到来自所述远端节点的第一重传响应后,则对所述第一重传响应后的首个第二数据包进行检测,检测结果正确,向所述远端节点发送第二接收确认信息,所述第二接收确认信息中不包含该第二数据包的序列号,所述第一计数器将第二计数值加到所述第一计数值,所述第一计数器重新开始计数。
本发明提供了一种实现快速通道互联QPI总线的数据包重传的节点,包括:
接收模块,用于接收来自远端节点的数据,所述数据为第二数据包或第一重传响应,其中所述第二数据包中不包含该数据包的序列号;
接收译码模块,用于启动第一计数器,所述第一计数器的第一计数值的初始值为0;对接收到的每一个第二数据包进行检测,如果检测结果正确,将该第二数据包缓存到接收缓存模块,向***控制模块发送该正确的第二数据包的译码信息;所述第一计数器将第一计数值加1;如果检测结果错误,则通知所述接收缓存模块启动第二计数器,所述第二计数器的第二计数值的初始值为0;第一计数器停止计数;向所述***控制模块发送第一计数值;所述接收译码模块还用于在检测到所述错误的第二数据包后继续检测来自所述远端节点的每一个第二数据包,如果检测结果正确,则将该第二数据包缓存到接收缓存模块,所述第二计数器将第二计数值加1;所述接收译码模块还用于对所述第一重传响应后的首个第二数据包进行检测,若检测结果正确,则所述第一计数器将第二计数值加到所述第一计数值,所述第一计数器重新开始计数;向所述***控制模块发送该第二数据包的译码信息;
所述***控制模块,用于根据所述正确的第二数据包的译码信息向特殊包生成模块发送控制信息以指令所述特殊包生成模块生成第二接收确认信息,所述第二接收确认信息中不包含该正确的第二数据包的序列号;用于根据所述第一计数值向特殊包生成模块发送控制信息以指令所述特殊包生成模块生成第一重传请求,所述第一重传请求中携带所述第一计数值,所述第一计数值代表该错误的第二数据包的序列号;
发送模块:用于向所述远端节点发送所述第二接收确认信息或第一重传请求。
本发明实施例提供的快速通道互联***中数据包重传方法、节点,经QPI总线进行数据包重传处理,当第一节点作为发送端时,仅向第二节点重传检测错误的第一数据包,避免了向第二节点重复发送第二节点已正确接收的第一数据包,由此节省了数据包重传所需占用的***资源,进而有利于提高***资源的利用率;当第一节点作为接收端时,第一节点的第一链路层缓存在发送第一重传请求至接收第一重传响应期间正确接收的第二数据包,并在正确接收到第二节点重传的第二数据包之后,向第一协议层发送上述期间缓存的第二数据包,实现了当第二节点仅重传检测错误的第二数据包的情形下,第一节点不会丢包,由此保障了基于QPI总线传输数据包的可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的QPI总线中数据包重传方法的流程图;
图2为本发明实施例提供的QPI总线应用场景示例一;
图3为本发明实施例提供的QPI总线应用场景示例二;
图4为本发明实施例二提供的QPI接口链路层的结构示意图;
图5为图4中重传缓冲器的状态示意图;
图6为本发明实施例三提供的QPI总线中正常数据包的交换流示意图;
图7为本发明实施例四提供的QPI总线中重传数据包的交换流示意图;
图8为本发明实施例四提供的第一节点接收数据包的链路层处理方法流程图;
图9为本发明实施例提供的第一节点发送数据包的链路层处理方法流程图。
具体实施方式
本发明实施例中,第一节点和第二节点基于QPI总线通信,且每端与QPI总线间的接口协议层均包括:物理层、链路层和协议层。为便于描述,本发明实施例将第一节点包括的各协议层称为:第一物理层、第一链路层和第一协议层;将第二节点包括的各协议层称为:第二物理层、第二链路层和第二协议层;第一节点向所述第二节点发送的数据包、重传请求、重传响应和接收确认信息,分别称为:第一数据包、第一重传请求、第二重传响应和第二接收确认信息;所述第二节点向所述第一节点发送的数据包、重传请求、重传响应和接收确认信息,分别称为:第二数据包、第二重传请求、第一重传响应和第一接收确认信息;下文不再赘述。可选的,任一节点包括的各协议层中:物理层用于提供物理链路的连接和具有特定电气特性的接口;链路层用于提供物理链路的管理;协议层用于提供数据包的处理,如采用缓存一致性(Cache-Coherent,简称CC)协议对数据包进行处理等。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明以下实施例的序号仅仅为了描述,不代表实施例的优劣。
图1为本发明实施例一提供的QPI总线中数据包重传方法的流程图。本实施例是从某QPI接口链路层的执行方法角度进行描述,其方法执行主体可为QPI总线连接的第一节点的QPI接口的链路层对应的装置。本发明实施例中,假定第一节点作为接收方,第二节点作为发送方。即所述第二节点向第一节点发送第二数据包,所述第一节点接收所述第二数据包,若第二数据包正确,则向所述第二节点发送第二接收确认信息,若所述第二数据包错误,则向所述第二节点发送第一重传请求,若所述第二节点收到来自所述第一节点的第一重传请求,则向所述第一节点发送第一重传响应。如图1所示的方法包括:
11:检测经QPI总线连接的第一节点的第一物理层接收到的每个第二数据包,并获得检测结果,所述第二数据包来自与所述QPI总线连接的第二节点;缓存所述检测结果中检测正确的第二数据包;生成对所述检测结果中检测错误的第二数据包的第一重传请求,并经所述第一物理层向所述第二节点发送所述第一重传请求。
第一物理层接收第二节点发送的第二数据包,之后将接收到的每个第二数据包发送给第一链路层进行检测。如果检测正确,则第一链路层对检测正确的第二数据包进行缓存;如果检测错误,则第一链路层不对检测错误的第二数据包进行缓存,而是生成第一重传请求,用于请求第二节点重传上述检测错误的数据包。该第一重传请求经第一物理层向第二节点发送。
由于数据包检测、总线传输等原因,导致第一节点和第二节点在收发数据包时存在时延;例如:第一节点向第二节点发送第一重传请求,与第二节点向第一节点返回第一重传响应和重传相应数据包,二者之间存在时延。在该时延期间,第二节点不知道其向第一节点发送的第二数据包出现错误,因此第二节点会继续向第一节点发送第二数据包。第一节点的第一物理层接收到第二节点发送的数据包之后,转发给第一链路层。第一链路层对接收到的每个第二数据包进行检测,并缓存正确的第二数据包。
12:所述第一链路层将所述检测错误的第二数据包之前缓存的第二数据包,发送给所述第一节点的第一协议层;检测接收到的所述第二节点发送的与所述第一重传请求对应的第二数据包,如果检测正确,则将与所述第一重传请求对应的第二数据包发送给所述第一协议层;将所述检测错误的第二数据包之后缓存的第二数据包,发送给所述第一协议层。
本发明实施例中,第一节点和第二节点之间传递的数据包与现有技术中的数据包不同,所述数据包不包含该数据包的序列号(SequenceNumber)。所述第一节点每收到一个正确的第二数据包,向所述第二节点发送第二接收确认信息,如ACK消息,本发明实施例中,所述Ack消息不需要像现有技术的Ack消息那样携带相应数据包的序列号SN,本发明实施例中的Ack消息的长度可以是1个比特,Ack消息用这1个比特位来表示接收的第二数据包是否正确,比如,当Ack的比特位取值为1,则第二数据包正确。
区别于现有技术的是:本实施例第一链路层没有丢弃在发送第一重传请求至接收第一重传响应期间收到的第二数据包,而是对这些第二数据包采用上述11的方法进行处理;第二节点在接收到第一重传请求之后,重传的仅为所述检测错误的第二数据包。第一链路层分批向第一协议层发送检测正确的第二数据包,例如:第一链路层将检测错误的第二数据包之前缓存的第二数据包,发送给第一协议层;在接收到重传且检测正确的第二数据包时,直接将该第二数据包发送给第一协议层;之后,在将检测错误的第二数据包之后缓存的第二数据包,发送给第一协议层。
可选的,如果所述第一链路层接收到所述第二节点发送的与所述第一重传请求对应的第一重传响应,则检测所述第一重传响应之后接收到的首个第二数据包,如果所述首个第二数据包检测正确,则将所述首个第二数据包发送给所述第一协议层。
如果第一节点接收且检测正确的所述首个第二数据包,则说明第一节点已正确接收到第二节点重传的第二数据包,该情形下,第一节点的第一链路层可生成第二接收确认信息,如Ack,并经所述第一物理层向所述第二节点发送所述Ack。
可选的,所述第一链路层还可启动第一计数器,该第一计数器的第一计数值的初始值为0。所述第一链路层对接收到的来自第二节点的每一个第二数据包进行检测,若检测结果正确,则所述第一计数器将所述第一计数值加1,若检测结果错误,则暂停所述第一计数值的计数,并启动第二计数器,所述第二计数器的第二计数值的初始值为0。所述第一链路层生成第一重传请求,所述第一重传请求中携带有所述第一链路层在其检测到错误的第二数据包时所述第一计数器的第一计数值,该第一计数值就是所述错误的第二数据包的序列号SN,所述第一重传请求用于请求第二节点重传所述第一计数值标记的第二数据包。所述第一链路层在检测到所述错误的第二数据包后继续接收后续的第二数据包,并对每一个第二数据包进行检测,若检测结果正确,则所述第二计数器将所述第二计数值加1。
所述第二节点收到所述第一重传请求后,暂停第二数据包的发送,根据所述第一重传请求生成第一重传响应,将所述第一重传响应发送给所述第一节点。然后再根据所述第一重传请求中携带的序列号查找需要重传的第二数据包,在发送该第二重传响应后发送所述需要重传的第二数据包,然后继续发送新的第二数据包。
当所述第一链路层接收到来自第二节点的所述第一重传响应后,接收该第一重传响应后的需重传的第二数据包,该第二数据包就是与所述第一重传请求对应的第二数据包。所述第一链路层对该数据包进行检测,若检测正确,则所述第一链路层将该第二数据包发送给所述第一协议层,将所述第二计数值累加到所述第一计数值,恢复所述第一计数器从累加后的所述第一计数值进行累加计数;将所述第二计数器的第二计数值重新设置为0。所述第一链路层生成第二接收确认信息并将该第二接收确认信息发送给所述第二节点,所述第二接收确认信息可以是Ack。
所述第一链路层还可启动第三计数器,顺序选出缓存的第二数据包,并根据选出的第二数据包的数量对第三计数值进行累加计数,直至所述第三计数值等于所述第一计数值时,将选出的第二数据包发送给所述第一协议层;所述方法还包括:在将与所述第一重传请求对应的第二数据包发送给所述第一协议层之后,所述第三计数器对所述第三计数值加1。
进一步的,本发明实施例中,所述第一节点还可作为发送方,所述第二节点还可作为接收方,则在该场景下,所述第一节点向所述第二节点发送第一数据包,所述第二节点接收所述第一数据包后则向所述第一节点发送第一接收确认信息、或第二重传请求。若所述第一节点收到来自所述第二节点的第二重传请求,则向所述第二节点发送第二重传响应。该方法进一步包括:
13:在接收到第二重传请求时,查找与所述第二重传请求对应的第一数据包,并经所述第一物理层向所述第二节点发送与所述第二重传请求对应的第一数据包。
本发明实施例中,所述第一节点的第一链路层在接收到来自第二节点的第二重传请求后,暂停发送新的第一数据包,根据所述第二重传请求生成第二重传响应并发送给所述第二节点,然后查找与所述第二重传请求对应的第一数据包,即需要重传的第一数据包,发送该需要重传的第一数据包,然后继续发送新的第一数据包。
区别于现有技术的是:本实施例仅向第二节点重传第二重传请求对应的第一数据包,而不是重传自第二重传请求对应的第一数据包之后已发送的所有第一数据包,因此节省了重传数据包所需占用的***资源。本实施例在重传第二重传请求对应的第一数据包之后,可继续向第二节点发送待发送的第一数据包。
本实施例提供的方法经QPI总线进行数据包重传处理,当第一节点作为发送端时,仅向第二节点重传检测错误的第一数据包,避免了向第二节点重复发送第二节点已正确接收的第一数据包,由此节省了数据包重传所需占用的***资源,进而有利于提高***资源的利用率;当第一节点作为接收端时,第一节点的第一链路层缓存在发送第一重传请求至接收第一重传响应期间正确接收的第二数据包,并在正确接收到第二节点重传的第二数据包之后,向第一协议层发送上述期间缓存的第二数据包,实现了当第二节点仅重传检测错误的第二数据包的情形下,第一节点不会丢包,由此保障了基于QPI总线传输数据包的可靠性。进一步的,本发明实施例中,第一节点和第二节点之间传递的数据包不像现有技术的数据包那样包含了数据包的序列号,接收确认信息,如Ack,也不需要包含相应数据包的序列号,这样节省了***资源,进而有利于提高***资源的利用率。
QPI总线广泛应用于计算机网络多处理器平台之间的节点互联。图2为本发明实施例提供的QPI总线应用场景示例一。如图2所示,多处理器平台的不同CPU之间,可通过QPI总线互联,以实现互联的CPU之间数据的可靠传输。当互联的CPU数量较多,可采用如图3所示的方法,将不同CPU通过网络控制器互联,每个CPU与网络控制器之间通过QPI总线连接,由网络控制器对互联的不同CPU之间的数据包进行转发。可以理解,上述图2和图3仅为QPI总线应用场景的示例,不应理解为对本发明实施例技术方案实质的限制。
图4为本发明实施例二提供的QPI接口链路层的结构示意图。QPI接口模块包括:物理层A、链路层B和协议层C;链路层B结构如图4所示,包括:接收模块(Rx)41、接收译码模块(Rx_decode)42、接收缓存模块(Rx_temp_buf)43、***控制模块(Sys_ctrl)44、重传控制模块(Retry_ctrl)45、重传缓冲器(Retry_buf)46、特殊数据包生成模块(Gen_sp)47、发送控制模块(Tx_ctrl)48和发送模块(Tx)49。
接收模块41是链路层B与物理层A的接口之一,用于接收来自物理层A的第二数据包。如上述实施例所述,所述第二数据包不需要像现有技术的数据包那样包含该数据包的序列号SN。其中,该物理层A跟远端节点的物理层相连,用于接收来自所述远端节点的物理层的所述第二数据包。所述接收模块41还用于通过所述物理层A接收来自所述远端节点的第二重传请求,所述第二重传请求携带有所述远端节点请求的需要重传的第一数据包的序列号。
接收译码模块42用于对接收模块41接收到的第二数据包进行检测;如果检测正确,将检测正确的第二数据包缓存到接收缓存模块43或直接发送到协议层C中,并将检测正确的第二数据包的译码结果发送给***控制模块44;如果检测错误,将检测错误的第二数据包的信息发送给***控制模块44。所述接收译码模块42还用于对所述第二重传请求解码并将该第二重传请求发送给重传控制模块45。
接收缓存模块43用于顺序缓存接收译码模块42检测正确的第二数据包。
***控制模块44用于向协议层C发送接收缓存模块43缓存的第二数据包,可向重传控制模块45、特殊数据包生成模块47和发送控制模块48发送相应的控制信息。其中所述***控制模块44根据所述错误的第二数据包的信息生成控制信息,并将该控制信息发送给所述特殊数据包生成模块47。
重传控制模块45用于根据第一数据包的序列号在重传缓冲器46中查找需要重传的第一数据包,并向发送控制模块48发送向重传缓冲器获取待发送的第一数据包的控制信息。
重传缓冲器46用于缓存来自协议层C的第一数据包。
特殊数据包生成模块47可用于根据***控制模块44的控制信息,生成特殊数据包,例如:生成第一重传请求(Retry_Request)、第二接收确认信息(Ack)和第二重传响应(Retry_Response)等数据包,其中,所述第一重传请求携带有所述需要重传的第二数据包的序列号。
发送控制模块48用于从重传缓冲器46、特殊数据包生成模块47或协议层C选择需要发送的数据包。
发送模块49是链路层B与物理层A的接口之一,用于将发送控制模块48选出的数据包发送给物理层A。
图5为图4中重传缓冲器的状态示意图。如图5所示,重传缓冲器可包括多个存储单元,每个存储单元可用于缓存一数据包。重传缓冲器涉及三类指针:写指针WrPtr、读指针RdPtr和尾指针TailPtr;其中:
写指针WrPtr指向的存储单元,用于存放重传缓冲器将要接收的第一数据包。当某个新的数据包经发送模块发送之后,该新的数据包将同时缓存到写指针当前指向的存储单元,之后将写指针WrPtr加1以指向下一空闲的存储单元。
尾指针TailPtr指向的尾地址,对应重传缓冲器当前缓存的最早的已发送的数据包;每接收到第二节点发送的第一接收确认信息,释放尾指针TailPtr当前指向的存储单元存储的第一数据包,并将尾指针TailPtr加1。写指针WrPtr和尾指针TailPtr之间的存储单元,为重传缓冲器已使用的存储空间;其他存储单元,为重传缓冲器未使用的存储空间。
读指针RdPtr指向的存储单元,用于存储第二重传请求对应的、需要重传的第一数据包。
上述技术方案中,可选的,接收译码模块42可设置有第一计数器Pkt,接收缓存模块43可设置有第二计数器Tem_Pkt,***控制模块44可设置有第三计数器Cnt。三个计数器的初始计数值均为0。
接收译码模块42开始从接收模块41接收第二数据包时,启动第一计数器开始计数,所述第一计数器的第一计数值Pkt_num的初时值为0。所述接收译码模块42对接收到每一个第二数据包进行检测,如果检测正确,则第一计数器将第一计数值加1,将该检测正确的第二数据包缓存到所述接收缓存模块43,如果检测错误,暂停第一计数器的计数,将第一计数器当前的第一计数值Pkt_num发送给所述***控制模块44,,并通知接收缓存模块43启动第二计数器。所述接收译码模块42继续从所述接收模块41接收后续的第二数据包,并对接收到每一个第二数据包包进行检测。如果检测正确,则将该检测正确的第二数据包缓存到接收缓存模块43,同时第二计数器加1。所述***控制模块44根据所述Pkt_num生成控制信息并发送该控制信息发送给所述特殊包生成模块47,所述特殊包生成模块47根据所述控制信息生成第一重传请求,所述第一重传请求中携带有所述Pkt_num,该Pkt_num就是需要重传的第二数据包的序列号。
当接收译码模块42正确接收远端节点重传的与Pkt_num对应的第二数据包时,将该第二数据包直接发送到协议层C中,接收译码模块42获取第二计数器的当前计数值Tem_Pkt_num,将Tem_Pkt_num累加到第一计数器的当前计数值Pkt_num,之后,恢复第一计数器的计数;接收缓存模块43将第二计数器清零。
***控制模块44开始从接收译码模块42接收正确的第二数据包的译码信息时,启动第三计数器;每接收到一个正确的第二数据包的译码信息,第三计数器加1。
下面结合图4-5,并以QPI总线的第一节点和第二节点之间的交互、以及第一节点收发数据包的链路层处理流程为例,对本发明实施例的技术方案进行详细说明。其中,每个节点都包括有如图4所示的QPI接口,并通过QPI接口经QPI总线与其它节点交换数据包。
图6为本发明实施例三提供的QPI总线正常数据包的交换流示意图。第一节点向第二节点发送某第一数据包,如果第二节点正确接收相应数据包,则可向第一节点反馈第一确认响应信息,用于通知第一节点相应第一数据包已正确接收。
一种可选的实现方式例如:第一节点向第二节点发送第一数据包Packt0、Packt1、Packt2、Packt3等,第二节点正确接收后相应发送第一接收确认信息Ack0、Ack1、Ack2、Ack3等。本发明实施例中,所述Ack消息不需要像现有技术的Ack消息那样携带相应数据包的序列号SN,本发明实施例中的Ack消息的长度可以是1个比特,Ack消息用这1个比特位来表示接收的第二数据包是否正确,比如,当Ack的比特位取值为1,则第二数据包正确。
第一节点链路层中重传缓冲器写指针WrPtr和尾指针TailPtr的移动可参见图5所示,例如:当第一节点完成某数据包如Packt2的发送之后,写指针WrPtr加1;当第一节点接收到某确认信息如Ack0,则删除尾指针TailPtr当前指向的存储单元缓存的数据包Packt0,且尾指针TailPtr加1。
图7为本发明实施例四提供的QPI总线重传数据包的交换流示意图。图7中假设第一节点检测到第二节点向其发送的数据包Packet1发生错误,则生成第一重传请求(Retry_Request)并向第二节点发送,该第一重传请求用于请求第二节点重传数据包Packet1。
假设第二节点在完成数据包PacketN的发送之后,第二节点接收到该第一重传请求,则第二节点暂停发送新的数据包,向第一节点发送第一重传响应(Retry_Response)并重传数据包Packet1,重传的数据包Packet1是第二节点在第一重传响应之后发送的首个数据包;在发送数据包Packet1之后,第二节点继续接着发送待发送的数据包PacketN+1、PacketN+2……
第一节点在检测到错误数据包Packet1之后,仍继续接收第二节点发送的数据包Packet2……PacketN,并缓存接收到的这些数据包Packet2……PacketN。当第一节点接收到第一重传响应,并检测第一重传响应接收到的首个数据包即Packet1检测无误,则继续接收后续数据包PacketN+1、PacketN+2……;否则重复生成和发送用于请求重传数据包Packet1的第一重传请求,直至第一节点正确接收到重传的数据包Packet1。
图8为本发明实施例四提供的第一节点接收数据包的链路层处理方法流程图。参见图4-5和图7-8所示,第一节点作为数据接收方的链路层处理方法包括:
81:接收模块41从物理层A接收第二数据包Packet0、Packet1……,将接收到的数据包依次发送给接收译码模块42。
82:接收译码模块42检测数据包Packet0,并启动第一计数器开始计数,第一计数器的初始值Pkt_num=0。
83:假设数据包Packet0检测正确,则将数据包Packet0缓存到接收缓存模块43,并将数据包Packet0的译码信息发送到***控制模块44;***控制模块44接收数据包Packet0的译码信息,启动第三计数器,第三计数器的初始值Cnt_num=0。所述***控制模块44根据数据包Packet0的译码信息向特殊包生成模块47发送控制信息,所述特殊包生成模块47根据该控制信息生成第二接收确认信息Ack0,并通过物理层A发送给第二节点。
84:第一计数器将计数值Pkt_num加1,接收译码模块42检测数据包Packet1,。
85:假设数据包Packet1检测错误,则:接收译码模块42暂停第一计数器的累加计数,通知接收缓存模块43启动第二计数器,并将数据包Packet1的信息发送给***控制模块44,;其中,第二计数器的初始值Tem_Pkt_num=0,Packet1的信息包括第一计数器当前的第一计数值Pkt_num=1,所述第一计数值代表该错误的第二数据包的序列号。
86:所述***控制模块44根据Packet1的信息(如第一计数值)向特殊包生成模块47发送控制信息,所述特殊包生成模块47根据该控制信息生成第一重传请求,并通过物理层A发送给第二节点。
87:接收译码模块42继续检测接收模块41接收的其他数据包Packet2……P acketN,假设这些数据包都检测正确,则将这些数据包都缓存到接收缓存模块43;接收缓存模块43每缓存一个数据包,则将第二计数器的计数值加1。
88:***控制模块44启动第三计数器,并顺序选出接收缓存模块43缓存的数据包;第三计数器的初识值Cnt_num=0,当***控制模块44每选出一数据包,第三计数器的计数值Cnt_num加1,直至第三计数器当前的计数值等于第一计数器当前的计数值时,停止选取数据包,并将选出的数据包Packet0发送给协议层C。
89:假设接收模块41在接收到数据包PacketN之后,继续接收到来自第二节点的第一重传响应(Retry_Response)和数据包Packet1。
810:接收译码模块42接收到第一重传响应之后,对第一重传响应之后接收到的首个数据包Packet1进行检测,假设数据包Packet1检测正确,则接收译码模块42将检测正确的Packet1直接发送到协议层C,并读取第二计数器当前的计数值,将第二计数器当前的计数值累加到第一计数器当前的计数值,之后恢复第一计数器的计数。
811:***控制模块44顺序选择接收缓存模块43缓存的数据包,每选出一数据包,第三计数器的计数值Cnt_num加1,直至第三计数器当前的计数值等于第一计数器当前的计数值,停止选取数据包,并将选出的数据包Packet0发送给协议层C。
812:接收译码模块42将重传数据包Packe1的译码信息发送给***控制模块44,***控制模块44在接收到重传数据包Packet1的译码信息之后,将第三计数器当前的计数值加1。所述***控制模块44根据数据包Packet1的译码信息向特殊包生成模块47发送控制信息,所述特殊包生成模块47根据该控制信息生成第二接收确认信息Ack1,并通过物理层A发送给第二节点。
813:***控制模块44顺序选择接收缓存模块43缓存的数据包,每选出一数据包,第三计数器的计数值Cnt_num加1,并将选出的数据包Packet2、Packet3……发送给协议层C。
图9为本发明实施例五提供的第一节点发送数据包的链路层处理方法流程图。参见图4-5所示,第一节点作为数据发送方的链路层处理方法包括:
901:链路层接收来自协议层的第一数据包并传递到发送模块49。重传缓冲器46将所述第一数据包缓存到写指针WrPtr指向的存储单元,将写指针WrPtr加1以指向下一个存储单元。
902:发送单元49将所述第一数据包发送给物理层,所述物理层将所述第一数据包发送给对端节点的物理层。
903:接收模块41接收来自第二节点的数据并转发给接收译码模块42,所述的数据可以是第二数据包、第二重传请求、第一重传响应或第一接收确认信息。
904:接收译码模块42对接收模块41转发的数据进行解码,若该数据是第一接收确认信息,则执行步骤905-907,若该数据是第二重传请求,则执行步骤908-912。
905:接收译码模块42将所述第一接收确认信息发送给重传控制模块45。
906:所述重传控制模块45将该第一接收确认信息发送给重传缓冲器46。
907:所述重传缓冲器46接收到所述第一接收确认信息后,释放尾指针TailPtr指向的存储单元存储的第一数据包,将尾指针TailPtr加1。
908:接收译码模块42将所述第二重传请求发送给重传控制模块45和***控制模块44。
909:所述***控制模块44根据所述第二重传请求向特殊包生成模块47发送控制信息,所述特殊包生成模块47根据所述控制信息生成第二重传响应并将所述第二重传响应发送给发送模块49。
910:所述重传控制模块45将所述第二重传请求中携带的请求重传的第一数据包的序列号发送给所述重传缓冲器46。
911:所述重传缓冲器46将读指针RdPtr的值设置为所述请求重传的第一数据包的序列号,则读指针RdPtr指向的存储单元存放的即是需要重传的第一数据包。所述重传缓冲器46将读指针RdPtr指向的存储单元存放的第一数据包发送给发送模块49。
912:所述发送模块49在发送第二重传响应后发送所述需要重传的第一数据包,然后顺序发送新的第一数据包。
本实施例基于QPI总线进行数据包重传处理,当第一节点作为发送端时,仅向第二节点重传检测错误的第一数据包,避免了向第二节点重复发送第二节点已正确接收的第一数据包,由此节省了数据包重传所需占用的***资源,进而有利于提高***资源的利用率;当第一节点作为接收端时,第一节点的第一链路层缓存在发送第一重传请求至接收第一重传响应期间正确接收的第二数据包,并在正确接收到第二节点重传的第二数据包之后,向第一协议层发送上述期间缓存的第二数据包,实现了当第二节点仅重传检测错误的第二数据包的情形下,第一节点不会丢包,由此保障了基于QPI总线传输数据包的可靠性。
本发明实施例还提供了的QPI总线的数据包重传***,该***包括至少两个节点,不同节点之间通过QPI总线连接,且每个节点都设置有如图4所示的链路层,该链路层的具体结构和效果可参见上述实施例的记载,在此不再赘述。一种可选的实现方式例如:本实施例提供的***可为某多处理器***,该多处理器***包括多个CPU,每个CPU都设置有QPI接口,QPI接口的链路层具有如图4所示的链路层,且不同CPU之间采用QPI总线连接。
可以理解,本实施例中的装置中的模块,可以按照本实施例描述分布于本实施例提供的装置中,也可以根据某个模块需要实现的功能,将该模块拆分成用于实现各部分功能的多个模块,或将本实施例装置提供的几个模块的功能,合并在一个模块中实现;本发明实施例对此并不限制。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种快速通道互联QPI总线的数据包重传方法,其特征在于,包括:
接收来自远端节点的第二数据包,所述第二数据包中不包含该数据包的序列号;
启动第一计数器,所述第一计数器的第一计数值的初始值为0;
对接收到的每一个第二数据包进行检测,如果检测正确,则缓存该正确的第二数据包,所述第一计数器将第一计数值加1,向所述远端节点发送第二接收确认信息,所述第二接收确认信息中不包含该正确的第二数据包的序列号;如果检测错误,则第一计数器停止计数,启动第二计数器,所述第二计数器的第二计数值的初始值为0,向所述远端节点发送第一重传请求,所述第一重传请求中携带所述第一计数值,所述第一计数值代表该错误的第二数据包的序列号;
在检测到所述错误的第二数据包后,继续接收来自远端节点的第二数据包,对每一个第二数据包进行检测,如果检测正确,则缓存该正确的第二数据包,所述第二计数器将第二计数值加1;
接收到来自所述远端节点的第一重传响应后,则对所述第一重传响应后的首个第二数据包进行检测,若检测正确,向所述远端节点发送第二接收确认信息,所述第二接收确认信息中不包含该第二数据包的序列号,所述第一计数器将第二计数值加到所述第一计数值,所述第一计数器重新开始计数。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:
针对检测到所述错误的第二数据包后缓存的每一个第二数据包,向所述远端节点发送第二接收确认信息,所述第二接收确认信息中不包含该第二数据包的序列号。
3.根据权利要求1所述的方法,其特征在于,该方法还包括:
向所述远端节点发送第一数据包,并在重传缓冲器中缓存发送的每一个第一数据包,所述第一数据包中不包含该数据包的序列号;
若接收到来自所述远端节点的第二重传请求,其中所述第二重传请求中携带有需要重传的第一数据包的序列号,则根据所述需要重传的第一数据包的序列号在所述重传缓冲器中查找需要重传的第一数据包,向所述远端节点发送第二重传响应,并在发送所述第二重传响应后发送所述需要重传的第一数据包;
继续发送新的第一数据包。
4.根据权利要求3所述的方法,其特征在于,所述重传缓冲器包含写指针;则所述在重传缓冲器中缓存发送的每一个第一数据包具体为:
重传缓冲器将所述第一数据包缓存到写指针指向的存储单元,将所述写指针加1以指向下一个存储单元。
5.根据权利要求4所述的方法,其特征在于,所述重传缓冲器包含尾指针,该方法还包括:
若接收到来自所述远端节点的第一接收确认信息,所述重传缓冲器释放尾指针指向的存储单元存储的第一数据包,将尾指针加1。
6.一种实现快速通道互联QPI总线的数据包重传的节点,其特征在于,包括:
接收模块,用于接收来自远端节点的数据,所述数据为第二数据包或第一重传响应,其中所述第二数据包中不包含该数据包的序列号;
接收译码模块,用于启动第一计数器,所述第一计数器的第一计数值的初始值为0;对接收到的每一个第二数据包进行检测,如果检测正确,将该第二数据包缓存到接收缓存模块,向***控制模块发送该正确的第二数据包的译码信息;所述第一计数器将第一计数值加1;如果检测错误,则通知所述接收缓存模块启动第二计数器,所述第二计数器的第二计数值的初始值为0;第一计数器停止计数;向所述***控制模块发送第一计数值;所述接收译码模块还用于在检测到所述错误的第二数据包后继续检测来自所述远端节点的每一个第二数据包,如果检测正确,则将该第二数据包缓存到接收缓存模块,所述第二计数器将第二计数值加1;所述接收译码模块还用于对所述第一重传响应后的首个第二数据包进行检测,若检测正确,则所述第一计数器将第二计数值加到所述第一计数值,所述第一计数器重新开始计数;向所述***控制模块发送该第二数据包的译码信息;
所述***控制模块,用于根据所述正确的第二数据包的译码信息向特殊包生成模块发送控制信息以指令所述特殊包生成模块生成第二接收确认信息,所述第二接收确认信息中不包含该正确的第二数据包的序列号;用于根据所述第一计数值向特殊包生成模块发送控制信息以指令所述特殊包生成模块生成第一重传请求,所述第一重传请求中携带所述第一计数值,所述第一计数值代表该错误的第二数据包的序列号;
发送模块:用于向所述远端节点发送所述第二接收确认信息或第一重传请求。
7.如权利要求6所述的节点,其特征在于:
所述接收译码模块,还用于将所述检测到错误的第二数据包后所检测到的每一个正确的第二数据包的译码信息发送给所述***控制模块;
所述***控制模块,用于根据所述正确的第二数据包的译码信息向特殊包生成模块发送控制信息以指令所述特殊包生成模块生成第二接收确认信息,所述第二接收确认信息中不包含该正确的第二数据包的序列号;
所述发送模块:用于向所述远端节点发送所述第二接收确认信息。
8.如权利要求6所述的节点,其特征在于,所述节点还包括重传控制模块和重传缓冲器;
所述发送模块:还用于向所述远端节点发送第一数据包;
所述重传缓冲器:用于缓存所述发送模块发送的每一个第一数据包;
所述接收模块,还用于接收来自所述远端节点的第二重传请求,所述第二重传请求携带有需要重传的第一数据包的序列号;
所述接收译码模块,还用于对所述第二重传请求解码并将所述第二重传请求发送给所述重传控制模块和***控制模块;
所述***控制模块,还用于根据所述第二重传请求向所述特殊包生成模块发送控制信息以指令所述特殊包生成模块生成根据所述控制信息生成第二重传响应;
所述重传控制模块,用于将所述第二重传请求中携带的需要重传的第一数据包的序列号发送给所述重传缓冲器;
所述重传缓冲器,还用于根据所述序列号查找需要重传的第一数据包,并所述需要重传的第一数据包发送给所述发送模块;
所述发送模块:还用于在发送所述第二重传响应后发送所述需要重传的第一数据包,然后顺序发送新的第一数据包。
9.如权利要求8所述的节点,其特征在于,所述重传缓冲器包含写指针;
所述重传缓冲器,具体用于将所述发送模块发送的每一个第一数据包缓存到写指针指向的存储单元,将所述写指针加1以指向下一个存储单元。
10.如权利要求9所述的节点,其特征在于,所述重传缓冲器包含尾指针;
所述接收模块,还用于接收来自所述远端节点的第一接收确认信息;
所述接收译码模块,还用于对所述第一接收确认信息解码,然后将其发送给所述重传控制模块;
所述重传控制模块,还用于将所述第一接收确认信息发送给所述重传缓冲器;
所述重传缓冲器,还用于在接收到所述第一接收确认信息后,释放尾指针指向的存储单元存储的第一数据包,将尾指针加1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201280001769.4A CN103141050B (zh) | 2011-12-28 | 2012-12-20 | 快速通道互联***中数据包重传方法、节点 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110448673.X | 2011-12-28 | ||
CN201110448673XA CN103188059A (zh) | 2011-12-28 | 2011-12-28 | 快速通道互联***中数据包重传方法、装置和*** |
PCT/CN2012/087042 WO2013097642A1 (zh) | 2011-12-28 | 2012-12-20 | 快速通道互联***中数据包重传方法、节点 |
CN201280001769.4A CN103141050B (zh) | 2011-12-28 | 2012-12-20 | 快速通道互联***中数据包重传方法、节点 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103141050A CN103141050A (zh) | 2013-06-05 |
CN103141050B true CN103141050B (zh) | 2014-11-05 |
Family
ID=48499255
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280001769.4A Active CN103141050B (zh) | 2011-12-28 | 2012-12-20 | 快速通道互联***中数据包重传方法、节点 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103141050B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104333500B (zh) * | 2013-07-22 | 2017-11-24 | 华为技术有限公司 | 一种信号转换方法、装置及*** |
US9632862B2 (en) * | 2014-12-20 | 2017-04-25 | Intel Corporation | Error handling in transactional buffered memory |
CN105389288A (zh) * | 2015-12-30 | 2016-03-09 | 山东海量信息技术研究院 | 一种支持多分区计算机***中的数据交互方法 |
CN107277062B (zh) * | 2017-08-09 | 2019-12-24 | 北京中科威荣计算机技术有限公司 | 数据包的并行处理方法及装置 |
CN108055323B (zh) * | 2017-12-13 | 2020-11-20 | 中核控制***工程有限公司 | 一种基于数据链路层的通讯方法 |
CN111385523B (zh) * | 2018-12-27 | 2022-10-28 | 北京图森智途科技有限公司 | 一种数据接收方法、图像处理设备和汽车 |
CN115933860B (zh) * | 2023-02-20 | 2023-05-23 | 飞腾信息技术有限公司 | 一种处理器***、处理请求的方法及计算设备 |
CN117318898B (zh) * | 2023-11-24 | 2024-02-09 | 合肥奎芯集成电路设计有限公司 | 高速串行接口中重复数据包的处理方法 |
CN117527151B (zh) * | 2023-12-29 | 2024-03-26 | 合肥奎芯集成电路设计有限公司 | 基于ucie的数据重传方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5754754A (en) * | 1995-07-26 | 1998-05-19 | International Business Machines Corporation | Transmission order based selective repeat data transmission error recovery system and method |
CN1561602A (zh) * | 2001-09-28 | 2005-01-05 | 英特尔公司 | 丢失分组的检测方法 |
CN102204149A (zh) * | 2011-05-26 | 2011-09-28 | 华为技术有限公司 | 数据重传方法及装置 |
-
2012
- 2012-12-20 CN CN201280001769.4A patent/CN103141050B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5754754A (en) * | 1995-07-26 | 1998-05-19 | International Business Machines Corporation | Transmission order based selective repeat data transmission error recovery system and method |
CN1561602A (zh) * | 2001-09-28 | 2005-01-05 | 英特尔公司 | 丢失分组的检测方法 |
CN102204149A (zh) * | 2011-05-26 | 2011-09-28 | 华为技术有限公司 | 数据重传方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103141050A (zh) | 2013-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103141050B (zh) | 快速通道互联***中数据包重传方法、节点 | |
CN103188059A (zh) | 快速通道互联***中数据包重传方法、装置和*** | |
US6393023B1 (en) | System and method for acknowledging receipt of messages within a packet based communication network | |
CN103248467B (zh) | 基于片内连接管理的rdma通信方法 | |
TWI259674B (en) | Method and apparatus for reducing transmission errors in a third generation cellular system | |
KR102046792B1 (ko) | 송신 노드로부터 목적지 노드로의 데이터 전송 방법 | |
CN103905300A (zh) | 一种数据报文发送方法、设备及*** | |
JP5331898B2 (ja) | 並列計算用の通信方法、情報処理装置およびプログラム | |
US7725556B1 (en) | Computer system with concurrent direct memory access | |
CN107104902B (zh) | 一种rdma数据传输的方法、相关装置与*** | |
CN103957155A (zh) | 报文传输方法、装置及互联接口 | |
JP2015027100A (ja) | パケット通信の伝送制御方法及びパケット通信システム | |
CN104038322A (zh) | 中间节点、通信网络及其数据传输控制方法 | |
CN102857354A (zh) | 告警信息上报方法、装置及*** | |
CN105933453A (zh) | 一种传输数据的方法和*** | |
CN103368703B (zh) | 数据包重传方法、数据包接收方法及装置 | |
JP2019106697A (ja) | 相互接続ネットワークでのメッセージ再送遅延を動的に管理するための方法及びデバイス | |
US7548972B2 (en) | Method and apparatus for providing likely updates to views of group members in unstable group communication systems | |
WO2022000208A1 (zh) | 一种数据重传方法和装置 | |
CN113572582A (zh) | 数据发送、重传控制方法及***、存储介质及电子设备 | |
CN101465719B (zh) | 数据重传方法及装置 | |
CN114337938A (zh) | 一种数据传输方法、数据重传方法、装置和相关设备 | |
CN104426866A (zh) | 一种数据传输方法及装置 | |
JP2014131093A (ja) | プログラム、情報処理装置、及び通信方法 | |
CN113612737A (zh) | 一种基于分组与重传机制的长报文可靠传输方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |