CN104170322B - 一种PCIe链路故障的处理方法、设备及系统 - Google Patents

一种PCIe链路故障的处理方法、设备及系统 Download PDF

Info

Publication number
CN104170322B
CN104170322B CN201480000399.1A CN201480000399A CN104170322B CN 104170322 B CN104170322 B CN 104170322B CN 201480000399 A CN201480000399 A CN 201480000399A CN 104170322 B CN104170322 B CN 104170322B
Authority
CN
China
Prior art keywords
node devices
pcie
pcie node
passage
link
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
Application number
CN201480000399.1A
Other languages
English (en)
Other versions
CN104170322A (zh
Inventor
杜阁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN104170322A publication Critical patent/CN104170322A/zh
Application granted granted Critical
Publication of CN104170322B publication Critical patent/CN104170322B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3027Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0745Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in an input/output transactions management context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • G06F11/221Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test buses, lines or interfaces, e.g. stuck-at or open line faults
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus

Abstract

本发明公开了一种PCIe链路故障的处理方法、设备及系统,PCIe节点设备检测到与下游PCIe节点设备之间的链路的通道发生故障时,向CPU发送MSI消息,并与下游PCIe节点设备协商当前的通道宽度值;CPU根据MSI消息从PCIe节点设备中获取PCIe节点设备的通道协商能力值M和当前通道宽度值M,并比较N与M/2的大小,在N<M/2时PCIe节点设备对与所述下游PCIe节点设备之间的链路执行通道翻转操作;再与下游PCIe节点设备协商新的当前通道宽度值。这样在PCIe节点设备间的链路通道发生故障时,无论发生故障的通道的编号是多少,采用本发明的技术方案可以保证原有链路一半的通道可以供两个PCIe节点设备继续进行数据传输,减小了现有技术中链路宽度受到发生故障的通道的通道编号大小的限制,使得重新协商后的链路宽度能够达到最佳宽度,保证了链路的传输性能。

Description

一种PCIe链路故障的处理方法、设备及系统
技术领域
本发明涉及数据传输技术领域,更具体的说,是涉及一种PCIe链路故障的处理方法、设备及装置。
背景技术
目前,在数据传输技术领域中,PCIe(Peripheral Component InterconnectExpress快捷外设组件互连标准)协议已得到了广泛的应用。PCIe协议应用于设备中时,设备之间以点对点的形式进行数据的传输。使用PCIe协议进行数据传输的设备统一称为PCIe节点设备。在系统中,两个PCIe节点设备之间的通信可以通过串行器/解串器(serdes,Serializer/De-Serializer)电路实现链路连接。在两个PCIe节点设备进行数据传输时,采用协商的速率通过serdes来进行数据传输。两个PCIe节点设备之间的链路可以包括1、2、4、8、16条或32条serdes。当有多条serdes时,这些serdes采用由小到大的连续数字来依次进行编号。一条serdes即为链路的一条通道(lane),serdes的编号称为通道编号。
两个PCIe节点设备间数据传输的带宽(W)就等于通道的数量(N)和协商的速率(S)的乘积,即带宽公式W=N×S。两个PCIe节点设备的链路的协商速率(S)根据采用的PCIe协议的版本不同而不同,目前有GEN1(2.5GT/s)、GEN2(5.0GT/s)、GEN3(8.0GT/s)和GEN4(16.0GT/s)四种,表示1条电路在1秒钟内能够传输的数据容量。一般来说,一个PCIe节点设备的链路支持的协商的速率(S)是固定的,在这种情况下,为了满足用户对通信带宽(W)越来越高的要求,就只能通过提高链路通道的数量(N)来提高带宽。
两个PCIe节点设备传输数据时,需要同时用到两个PCIe节点设备之间的链路的所有通道,如果其中的一条通道出现故障,数据的传输就会中断。现有技术中,当连接于PCIe节点设备的某一条通道出现故障时,PCIe节点设备会根据PCIe协议的重协商机制进行链路协商。链路协商时,从通道编号最小的通道开始协商,并按通道编号从小到大依次进行链路协商。按通道编号从小到大连续向上重新进行链路协商的方式称为向上协商。如:一个原本需要协商到速率为GEN2、链路宽度为16(PCIe2.0×16)的PCIe节点设备的2号通道出现故障时,根据PCIe协议的重协商机制,PCIe节点设备从0号通道开始往向上进行链路协商。由于2号通道故障无法协商成功,从0号通道协商至1号通道之后链路协商无法继续,这样只有0号和1号2条通道协商成功,即只有0号通道和1号通道可以继续传输数据。根据PCIe协议约定的两个PCIe节点设备之间的链路的通道宽度,重新协商得到的两个PCIe节点设备之间的链路的通道宽度为2,即只有2条通道可以供PCIe节点设备进行数据传输。这样,此时带宽公式中的N就由原来的16变为2,PCIe节点设备间的数据传输性能就只有原来性能的1/8。而如果是1号通道出现故障,根据上述重协商方法,只能协商到1条通道,则此时的数据传输性能就只有原来性能的1/16。
由此可见,现有技术中当PCIe节点设备之间的链路的通道出现故障时,重新协商链路的通道宽度时会受到出现故障的通道的通道编号的大小的很大限制,会导致重新协商得到的通道宽度存在不确定性,且会出现通道宽度大大减小的情况,严重影响通道的数据传输性能。
发明内容
有鉴于此,本发明提供了一种PCIe链路的故障处理方法、设备及系统,以克服现有技术中由于受到出现故障的通道的通道编号的大小限制,而使重新协商得到的通道宽度存在不确定性且可能出现通道宽度大大减小而严重影响通道的传输性能的问题。
本发明第一方面提供了一种PCIe链路故障的处理方法,包括:
PCIe节点设备检测到与下游PCIe节点设备之间的链路的通道发生故障,向中央处理器CPU发送消息中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;
所述PCIe节点设备与所述下游PCIe节点设备协商得到当前通道宽度值N;
所述CPU根据接收到的MSI消息中的所述设备ID从所述PCIe节点设备获取所述PCIe节点设备的通道协商能力值M和当前通道宽度值N;
所述CPU将N与M/2进行比较;
如果N<M/2,所述CPU通知所述PCIe节点设备执行通道翻转操作;
所述PCIe节点设备对与所述下游PCIe节点设备之间的链路执行通道翻转操作;
所述PCIe节点设备与所述下游PCIe节点设备协商得到新的当前通道宽度值N’,并通过所述N’条通道继续与所述下游PCIe节点设备进行数据传输。
在第一方面的第一种可能的实现方式中,所述方法还包括:如果N≥M/2,
所述PCIe节点设备根据协商得到的N条通道继续与所述下游PCIe节点
设备进行数据传输。
结合第一方面的实现方式,或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,如果N<M/2,所述方法还包括:所述CPU关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
本发明第二方面提供了一种PCIe链路故障的处理方法,包括:
接收PCIe节点设备上报的消息信号中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;
根据所述设备ID从所述PCIe节点设备获取所述PCIe节点设备的通道协商能力值M和当前通道宽度值N;其中所述当前通道宽度值N是所述PCIe节点设备与下游PCIe节点设备协商得到的;
将N与M/2进行比较;如果N<M/2,通知所述PCIe节点设备执行通道翻转操作。
在第二方面的第一种可能的实现方式中,如果N<M/2时,所述方法还包括:关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
结合第二方面的方面的实现方式,或第二方面的的第一可能的实现方式,在第二种可能的实现方式中,所述PCIe节点设备的通道协商能力值M等于所述PCIe节点设备与所述下游PCIe节点设备之间的链路的通道总条数。
本发明第三方面提供了一种PCIe链路故障的处理方法,包括:
PCIe节点设备检测到与下游PCIe节点设备之间的链路的通道发生故障,向中央处理器CPU发送消息信号中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;
与所述下游PCIe节点设备协商得到当前通道宽度值N;
接收所述CPU发送的执行通道翻转操作的通知,对与所述下游PCIe节点设备之间的链路执行通道翻转操作;
与所述下游PCIe节点设备协商得到新的当前通道宽度值N’,通过N’条通道继续与所述下游PCIe节点设备进行数据传输。
在第三方面的第一种可能的实现方式中,PCIe节点设备在预定时间内没有接收到所述CPU发送的执行通道翻转操作的通知,通过N条通道继续与所述下游PCIe节点设备进行数据传输。
本发明第四方面提供了一种PCIe链路故障的处理系统,所述系统包括中央处理器CPU、PCIe节点设备和下游PCIe节点设备,所述CPU与所述PCIe节点设备连接,所述PCIe节点设备与所述下游PCIe节点设备通过链路连接;
所述PCIe节点设备用于检测与所述下游PCIe节点设备之间的链路的通道是否发生故障,并在发生故障时向CPU上报消息中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;所述PCIe节点设备还用于与所述下游PCIe节点设备协商得到当前通道宽度值N;
所述CPU用于根据所述MSI消息中的设备ID从所述PCIe节点设备获取所述PCIe节点设备的通道协商能力值M和当前通道宽度值N,并将N与M/2进行比较;在N<M/2时,通知所述PCIe节点设备执行通道翻转操作;
所述PCIe节点设备还用于接收到CPU发送的执行通道翻转操作的通知后,对与所述下游PCIe节点设备之间的链路执行通道翻转操作,并与所述下游PCIe节点设备协商得到新的当前通道宽度值N’。
在第四方面的第一种可能的实现方式中,在N<M/2时,所述CPU还用于关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
本发明第五方面提供了一种处理PCIe链路故障的PCIe节点设备,包括检测模块5031、MSI模块5033、协商模块5035、寄存器5037和通道翻转模块5039;
所述寄存器5037中存储有所述PCIe节点设备的当前通道宽度值N和通道协商能力值M;
所述检测模块5031用于监控所述PCIe节点设备503与下游PCIe节点设备之间的链路504的通信情况,并且在检测到链路504的通道发生故障时,向MSI模块5033发送通道故障通知消息;
所述MSI模块5033用于接收到所述检测模块5031发送的通道故障通知消息以后,向中央处理器CPU501发送MSI消息,所述MSI消息中携带有所述PCIe节点设备503的设备ID;
所述协商模块5035用于协商所述PCIe节点设备与所述下游PCIe节点设备之间的链路的通道宽度;
所述通道翻转模块5039用于在接收到所述CPU发送的执行通道翻转操作以后,对所述PCIe节点设备与所述下游PCIe节点设备之间的链路的通道执行通道翻转操作。
经由上述的技术方案可知,与现有技术相比,本发明公开了PCIe链路的故障处理方法、设备及系统,该方法通过比较PCIe节点设备的当前通道宽度值与通道协商能力值M的大小,无论发生故障的通道的通道编号的大小,都能够保证PCIe节点设备的通道宽度保持通道协商能力值的一半。通过本发明公开的PCIe链路的故障处理方法设备及系统,大大减小了在重新进行链路协商时受到发生故障的通道的通道编号大小的限制,使得重新协商后的链路宽度能够达到最佳宽度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,还可以根据提供的附图获得其他的附图。
图1为本发明实施例公开的PCIe节点设备之间的连接示意图;
图2为本发明实施例公开的PCIe节点设备的连接简化示意图;
图3为本发明实施例公开的PCIe节点设备的另一连接简化示意图;
图4为本发明实施例公开的PCIe节点设备的链路故障处理方法流程图;
图5为本发明实施例公开的PCIe节点设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
本发明提供了一种新的PCIe(Peripheral Component Interconnect Express快捷外设组件互连标准)设备的链路故障处理方法。PCIe节点设备是对使用PCIe协议进行数据传输的设备的统称。PCIe节点设备可以是集成在独立设备中的芯片,也可以是物理上独立的设备,在此不做限定。PCIe节点设备之间的连接关系可参见附图1。如附图1所示,两个PCIe节点设备之间可以直接连接进行数据传输,如根联合体(root complex)设备的下行端口与PCIe节点设备1的上行端口直接连接,实现root complex与PCIe节点设备1之间的数据传输。两个PCIe节点设备之间也可以间接进行数据传输,例如通过交换机实现数据传输。例如root complex的下行端口与交换机的上行端口连接,交换机的下行端口与PCIe节点设备2的上行端口连接,实现root complex与PCIe节点设备2之间的数据传输。一个PCIe节点设备可以同时与多个PCIe节点设备相连,如附图1所示,root complex同时与PCIe节点设备1以及交换机相连。这些PCIe节点设备可以由中央处理器CPU统一进行管理。
两个PCIe节点设备之间通过链路连接实现数据传输,链路可以是串行器/解串器(serdes,Serializer/De-Serializer)电路。例如root complex的下行端口与PCIe节点设备1上行端口通过多条serdes连接,这些serdes组成root complex与PCIe节点设备1之间的链路。两个PCIe节点设备之间的serdes可以为1、2、4、8、16或32条,两个PCIe节点设备之间的serdes组成这两个PCIe节点设备之间的链路。两个PCIe节点设备间数据传输的带宽(W)就等于通道的数量(N)和协商的速率(S)的乘积,即带宽公式W=N×S。两个PCIe节点设备的链路的协商的速率(S)根据采用的PCIe协议的版本不同而不同,目前有GEN1(2.5GT/s)、GEN2(5.0GT/s)、GEN3(8.0GT/s)和GEN4(16.0GT/s)四种,表示1条电路在1秒钟内能够传输的数据容量。一般来说,一个PCIe节点设备的链路支持的协商的速率(S)是固定的,在这种情况下,为了满足用户对通信带宽(W)越来越高的要求,就只能通过提高链路通道的数量(N)来提高带宽。
当有多条serdes时,这些serdes采用由小到大的连续数字来依次连续编号,此时一条serdes即为两个PCIe节点设备之间的链路的一条通道(lane),serdes的编号称为通道编号。例如,附图1中所示的root complex与PCIe节点设备1之间的通道从左往右用数字0-15依次进行连续编号。此处所说的serdes采用现有的serdes结构,支持已有的功能,在此不再另行描述。
当两个PCIe节点设备连接时,发起链路协商的一方称为上游PCIe节点设备,与之相连的另一方称为下游PCIe节点设备。如附图1所示,当root complex与PCIe节点设备1连接时,root complex为上游PCIe节点设备,PCIe节点设备1为下游PCIe节点设备。当rootcomplex与交换机连接时,root complex为上游PCIe节点设备,交换机为下游PCIe节点设备。交换机又与PCIe节点设备2连接,此时,交换机为上游PCIe节点设备,PCIe节点设备2为下游PCIe节点设备。当一个PCIe节点设备同时与多个PCIe节点设备连接时,该PCIe节点设备与其他PCIe节点设备两两之间通过独立的链路进行数据传输。例如PCIe节点设备交换机同时与PCIe节点设备2和PCIe节点设备3相连,PCIe节点设备交换机与PCIe节点设备2之间通过链路1实现数据传输,交换机与PCIe节点设备3之间通过链路2实现数据传输。链路1和链路2相互之间独立存在,互不影响。链路1和链路2的通道数量可以相同也可以不相同。但是PCIe节点设备通过链路进行数据传输的方式相同。在下文中,以两个PCIe节点设备之间的链路发生故障时的处理方法为例进行说明。
为使整个过程更清晰明确,简化两个PCIe节点设备之间的连接关系如附图2中所示,第一PCIe节点设备为上游PCIe节点设备,与第二PCIe节点设备进行通道协商。第二PCIe节点设备则为下游PCIe节点设备。由中央处理器CPU对这两个PCIe节点设备进行管理。第一PCIe节点设备与第二PCIe节点设备之间的链路包含有16条serdes,每条serdes即为第一PCIe节点设备和第二PCIe节点设备之间的链路的一条通道,这16条通道从左到右从0开始连续编号,一直编到15。编号为0的称之为0号通道,编号为1的称之为1号通道,以此类推,编号为15的则为15号通道,如附图2中所示。此处的通道数量仅为说明,在实际使用中,可以根据需要配置1、2、4、8或者32条通道,其实现原理与16条通道的实现原理相同。
第一PCIe节点设备中配置有消息信号中断(MSI,message signal interrupt)功能。当第一PCIe节点设备检测到与第二PCIe节点设备连接的链路中有一条或者多条通道发生故障时,上报MSI消息给CPU,MSI消息中携带有第一PCIe节点设备的设备ID。第一PCIe节点设备将出现故障的通道的通道编号存储在寄存器中。第一PCIe节点设备根据PCIe协议的重协商机制与第二PCIe节点设备重新进行通道协商,得到第一PCIe节点设备与第二PCIe节点设备之间的链路的当前通道宽度值N。通道重新协商过程中,第一PCIe节点设备按照PCIe协议约定的通道协商机制,从通道编号最小的通道开始,按通道编号从小到大连续向上与第二PCIe节点设备进行链路协商,直到协商到发生故障的通道,由于发生故障的通道无法协商成功而终止重协商过程。第一PCIe节点设备再根据PCIe协议规定的两个PCIe节点设备之间的链路的通道的条数来确定链路的当前通道宽度值N。由于通道编号需要连续,并且链路协商是从编号最小的通道开始的,所以重新协商得到的通道的数量会根据发生故障的通道的通道编号的不同而不同,存在着不确定性。当发生故障的通道编号较小时,重新协商得到的通道数量也会大大减少,即会使得到的当前通道宽度值N大大减小,从而严重影响到两个PCIe节点设备之间的数据传输性能。例如当第一PCIe节点设备与第二PCIe节点设备之间的3号通道发生故障时,第一PCIe节点设备根据PCIe协议的协商机制,从0号通道开始与第二PCIe节点设备进行链路协商。0号通道没有故障,协商成功;继续协商1号通道,1号通道协商成功,继续协商2号通道,2号通道协商成功,继续协商3号通道。由于3号通道发生了故障,所以无法协商成功。又由于通道编号需要连续,3号通道中断后,即不能继续协商。此时有0号、1号和2号3通道可供使用。又由于根据PCIe协议,两个PCIe节点设备之间的链路可以为1、2、4、8、16或者32条通道,因此,第一PCIe节点设备与第二PCIe节点设备之间协商得到的当前通道宽度值N为2。第一PCIe节点设备与第二PCIe节点设备之间原来有16条通道可以进行数据传输,而当第3号通道发生故障后,重新协商得到的可以进行数据传输的通道仅为2条,为原来的1/8。此时第一PCIe节点设备和第二PCIe节点设备之间的链路的通道宽度大大降少,数据传输性能明显降低。如果是第一PCIe节点设备与第二PCIe节点设备之间的1号通道发生故障,类似的,此时仅有0号通道可供使用,此时第一PCIe节点设备与第二PCIe节点设备之间重新协商得到的当前通道宽度值N为1,为原来的1/16,数据传输性能显著降低。
在本发明实施例中,当CPU收到第一PCIe节点设备上报的MSI消息后,进入中断处理程序。CPU根据MSI消息中的第一PCIe节点设备的设备ID从第一PCIe节点设备获取所述第一PCIe节点设备的当前通道宽度值N以及所述第一PCIe节点设备的通道协商能力值M。所述第一PCIe节点设备的通道协商能力值M是指第一PCIe节点设备可以与第二PCIe节点设备协商得到的最大通道宽度值。第一PCIe节点设备可以协商到的最大通道宽度值为所述第一PCIe节点设备与第二PCIe节点设备之间的链路的通道总条数。在本实施例中,第一PCIe节点设备与第二PCIe节点设备之间的链路的通道有16条,因此第一PCIe节点设备与第二PCIe节点设备之间可以协商到的最大通道宽度值为16,那么第一PCIe节点设备的通道协商能力值M为16。所述第一PCIe节点设备当前通道宽度值N是所述第一PCIe节点设备与第二PCIe节点设备重新协商得到的当前通道宽度值N。例如如前所述,第一PCIe节点设备与第二PCIe节点设备之间连接有16条通道,当第一PCIe节点设备与第二PCIe节点设备之间的第3号通道发生故障时,第一PCIe节点设备根据PCIe协议的重协商机制与第二PCIe节点设备重新进行协商,得到当前通道宽度值N为2。
CPU将获取到的所述第一PCIe节点设备的当前通道宽度值N与通道协商能力值M进行比较。根据两个PCIe节点设备之间的链路的通道的数量规律,在本发明中,CPU将N和M/2进行比较。
如果N≥M/2,CPU不做处理。第一PCIe节点设备在预定的时间内没有收到CPU发送的通知,则第一PCIe节点设备通过重新协商得到的N条通道与第二PCIe节点设备继续进行数据传输。此时N≥M/2,则说明发生故障的通道的通道编号大于(M/2-1),由于两个PCIe节点设备之间的链路可以为1、2、4、8、16或者32条通道,此时第一PCIe节点设备与第二PCIe节点设备重新协商得到的当前通道宽度值N的值为M/2,第一PCIe节点设备通过重新协商得到的链路通道继续与第二PCIe节点设备进行数据传输。
如果N<M/2,CPU通知所述第一PCIe节点设备对第一PCIe节点设备与第二PCIe节点设备之间的舞蹈执行通道翻转操作。当N<M/2时,第一PCIe节点设备与第二PCIe节点设备重新协商得到的当前通道宽度不到总链路宽度的一半,说明发生故障的通道的通道编号小于M/2。通道翻转操作是指第一PCIe节点设备将与第二PCIe节点设备之间的链路的通道的编号反向重新编号。如果第一PCIe节点设备与第二PCIe节点设备之间的链路的通道原来是从左往右从0开始编号,一直到15,那么当PCIe节点设备执行通道翻转操作后,第一PCIe节点设备与第二PCIe节点设备之间的链路的通道则从右往左从0开始编号,一直到15。反之亦然。例如在本实施例中,当所述第一PCIe节点设备执行通道翻转操作后,原来的15号通道的编号由15变更为0,即原来的15号通道变为0号通道;原来的14号通道的编号由14变更为1,即原来的14号通道变更为1号通道;以此类推。CPU在通知所述第一PCIe节点设备执行通道翻转操作之前,还可以将所述第一PCIe节点设备与第二PCIe节点设备之间的0至(M/2-1)号通道关闭。当0至(M/2-1)号通道关闭后,第一PCIe节点设备不再需要对已关闭的通道进行编号。这样,第一PCIe节点设备执行通道翻转操作,原来的M号通道的编号变为0,原来的M-1号通道的编号变为1,以此类推,直到原来的M/2号通道的编号变为(M/2-1)。
所第一述PCIe节点设备执行通道翻转操作之后,重新与第二PCIe节点设备进行新的当前通道宽度协商,得到新的当前通道宽度值N’。第一PCIe节点设备与第二PCIe节点设备重新协商当前通道宽度的方法与前述重新协商方法相同。所述第一PCIe节点设备根据PCIe协议的要求,从翻转后的通道编号最小的通道开始进行协商,按通道编号从小到大连续向上重新与第二PCIe节点设备进行链路协商,即第一PCIe节点设备从翻转后的0号通道开始协商,然后依次协商1号通道,2号通道,直到协商到(M/2-1)号通道。由于第一PCIe节点设备是在N<M/2的情况下执行的通道翻转操作,此时发生故障的通道的通道编号小于M/2,即为0号到(M/2-1)号通道中的一个,0号到(M/2-1)号通道已经被关闭;而M/2号通道到M号通道没有发生故障,可以进行数据传输。因此当第一PCIe节点设备执行通道翻转后,新的0号到(M/2-1)号通道没有故障,第一PCIe节点设备重新与第二PCIe节点设备协商得到的新的当前通道宽度值N’为M/2。
即在PCIe节点设备的通道发生故障时,采用本发明的方案,无论发生故障的通道的通道编号是多少,都能够保障重新协商到的通道宽度为原来通道宽度的1/2,避免了发生故障的通道编号较小时,PCIe节点设备的通道值大大减小从而影响PCIe节点设备之间的数据传输速度。
下文将以具体的例子详细的对本发明的技术方案进行描述和说明。PCIe节点设备的连接关系如附图3所示,方法流程请参见附图4。
下文中所述的PCIe节点设备是指使用PCIe协议与其他设备进行通信的设备。如附图3所示,根联合体(root complex)设备代表使用PCIe协议与下游PCIe节点设备进行通信的PCIe节点设备,即上游PCIe节点设备,如附图2中所示的第一PCIe节点设备。PCIe节点设备1(PCIe endpoint1)代表使用PCIe协议与上游PCIe节点设备进行通信的PCIe节点设备,即下游PCIe节点设备,如附图2中所示的第二PCIe节点设备。另外,PCIe节点设备可以是物理上独立的一个设备,也可以是集成在设备中的芯片,不限于附图1中所示的PCIe节点设备。
Root complex通过下行端口与PCIe节点设备1的上行端口连接来实现数据传输。在本实施例中,以root complex与PCIe节点设备1之间有16条serdes为例进行说明。这16条serdes组成所述root complex与所述PCIe节点设备1之间的链路,一条serdes称为1条通道。即root complex与PCIe节点设备1之间的通道的数量为16条,即X16。并且,这16条通道从左到右以0-15连续编号。此时,root complex与PCIe节点设备1之间的最大通道宽度值为16。root complex的通道协商能力值M等于root complex的最大通道宽度值,root complex的最大通道宽度值是指root complex可以协商到的与PCIe节点设备1之间的最大通道数量。本实施例中,root complex的通道协商能力值M等于16。root complex将其通道协商能力值M存储在寄存器中。根据PCIe协议的规定,两个PCIe节点设备之间的链路可以为1、2、4、8、16或者32条通道,此例中以16条通道为例进行说明,当链路为1、2、4、8或32条通过时其实现方式与16条通道的实现方式相同。
root complex还可以其他的PCIe节点设备相连。当与多个PCIe节点设备相连时,如附图1中所示,root complex还可以和交换机相连,root complex与各个PCIe节点设备之间的通道协商能力值可以分别记录为M1、M2、M3等以示区别。以下述方法中,以与一个PCIe节点设备连接为例进行说明,与多个PCIe节点设备连接时,root complex与任一PCIe节点设备之间的通道故障的处理方法与本实施例相似。
root complex中配置有消息信号中断(MSI,message signal interrupt)功能。root complex对与PCIe节点设备1连接的通道进行监控,当检测到与PCIe节点设备1之间的通道宽度发生变化时,向CPU上报MSI消息。root complex与PCIe节点设备1传输数据时,会用到两设备之间连接的所有的通道(即所有的serdes)。当其中任意一条或者多条通道出现故障时,root complex会检测出与PCIe节点设备1之间的通道宽度发生了变化,rootcomplex产生一个MSI消息,并将所述MSI消息上报给CPU。所述MSI消息中包含root complex的设备ID,如root complex的端口的B:D:F(总线号:设备号:功能号)。root complex将发生故障的通道的通道编号存储在寄存器中。在此实施例中,root complex与PCIe节点设备1之间的5号通道发生了故障,root complex检测出第5号通道发生故障,将发生故障的通道的通道编号信息5存储在寄存器中。
root complex上报MSI消息给CPU之后,与PCIe节点设备1重新协商得到当前的通道宽度值N。根据PCIe协议的规定,PCIe节点设备之间的链路的通道协商从编号最小的通道开始进行协商,直到协商到发生故障的通道为止。这样,协商成功的各通道之间的编号仍然是连续的,并且可以得到可以进行数据传输的通道的数量。在本实施例中,root complex与PCIe节点设备1从0号通道开始进行协商,0号通道协商成功后(即0号通道正常,可以进行数据传输),再协商1号通道。以此类推,当协商到5号通道时,由于5号通道发生了故障,此时5号通道协商不成功,root complex与PCIe节点设备1停止协商。root complex与PCIe节点设备1之间的0号-4号通道协商成功,即root complex与PCIe节点设备1之间有5条通道协商成功。再根据PCIe协议规定的两个PCIe节点设备之间的链路可以为1、2、4、8、16或者32条通道,确定root complex与PCIe节点设备1之间的当前通道宽度值N为4。root complex将重新协商得到的当前通道宽度值N存储在寄存器中。
CPU接收到root complex上报的MSI消息,进入中断处理程序。CPU从MSI消息中,提取出root complex的ID,再根据获取到的ID从root complex的寄存器中读取root complex的当前通道宽度值N和通道协商能力值M。root complex的当前通道宽度值N为rootcomplex检测到与PCIe节点设备1之间有通道发生故障后与PCIe节点设备1重新协商得到的。在本实施例中,root complex与PCIe节点设备1之间的第5号serdes通道发生故障后,重新协商得到的当前通道宽度值N为4,具体协商方法前段已描述,在此不再另行说明。另外,如前所述,本实施例中root complex与PCIe节点设备1之间有16条通道,所以root complex的通道协商能力值M为16。
CPU将root complex的当前通道宽度值N与通道协商能力值M进行比较。根据两个PCIe节点设备之间的链路的通道的数量规律,在本发明中,CPU将N和M/2进行比较。
当N≥M/2时,root complex与PCIe节点设备1协商得到的当前通道宽度值为最大通道宽度值的一半,CPU在这种情况下不做处理。root complex在预定的时间内没有收到CPU发送的通知,通过新协商得到的N条链路通道与PCIe节点设备1继续进行数据传输。
当N<M/2时,root complex与PCIe节点设备1协商得到的当前通道宽度值小于最大通道宽度值的一半,此时root complex与PCIe节点设备1之间的链路的宽度大大减少。在这种情况下,CPU将root complex与PCIe节点设备1之间的0号至(M/2-1)号的通道关闭,并通知root complex启动通道翻转操作。通道翻转操作是指PCIe节点设备将其与下游PCIe节点设备之间的链路的通道的编号反向重新编号。root complex启动通道翻转操作后,将与PCIe节点设备1之间的通道反方向重新编号。root complex与PCIe节点设备1之间的通道是从左到右从小到大连续编号,root complex启动通道翻转操作后,将与PCIe节点设备1之间的通道从右到左从小到大连续编号。具体编号过程上文已有相关描述,在此不再另行说明。由于原0号至(M/2-1)号通道已关闭,root complex启动通道翻转操作后,不会对已关闭的通道进行编号。这样,root complex将与PCIe节点设备1之间的通道从右到左从0开始编号,直到由小到大连续编号编到(M/2-1)。
root complex执行完通道翻转操作后,再与PCIe节点设备1进行通道宽度协商,得到root complex与PCIe节点设备之间链路的新的当前通道宽度值N’。根据PCIe协议的约定,PCIe节点设备之间从编号最小的通道开始进行协商,直到协商到发生故障的通道为止。root complex执行完通道翻转操作后,从新的0号通道开始协商,直到协商到有故障的通道为止,确认可以进行通信的通道的数量。root complex再根据PCIe协议规定的两个PCIe节点设备之间的链路的通道的数量的要求确认新的当前通道宽度值N’。root complex通过协商得到的新的N’个通道与PCIe节点设备1继续进行数据传输。
在本实施例中,5号通道发生故障,N为4,M为16,4<8(N<M/2)。CPU将root complex与PCIe节点设备1之间的0号至(M/2-1)号(即7号)的通道关闭,并通知root complex执行通道翻转操作。root complex收到通知后,将与PCIe节点设备1之间的通道重新反向进行编号,将原来的15号通道的编号由15变更为0,即原来的15号通道变更为0号通道;原来的14号通道的编号由14变更为1,即原来的14号通道变更为1号通道;由此类推。由于0号至(M/2-1)号(即7号)通道已关闭,因此将原来的M/2号(即8号)通道变更为(M/2-1)号(即7号)通道后,通道翻转过程结束。通道翻转完成后,root complex与PCIe节点设备1重新进行通道协商,从翻转之后的新的0号通道开始进行协商,再根据通道编号连续向上协商。由于原来的8号至15号通道是没有发生故障可以进行数据传输,因此,此时root complex与PCIe节点设备1再次进行通道协商时有8条通道协商成功。再由于PCIe协议的约定,通道的宽度值为1、2、4、8、16或者32中的一个,因此root complex与PCIe节点设备1再次协商得到新的当前通道宽度值N’为8。
root complex通过与PCIe节点设备1之间的翻转后的新的0-7号(即8条)通道继续进行数据传输。具体的数据传输过程与现有的实现方式类似,在此不在另行描述。
这样,在两个PCIe节点设备之间的链路有通道发生故障的情况下,无论发生故障的通道的通道编号是多少,采用本发明提供的解决方案,都可以确保有PCIe节点设备的通道协商能力值的一半数量的通道可以使用,最大可能的保证了PCIe节点设备链路的传输速度和性能。
本发明还提供了一种处理PCIe节点设备链路故障的系统,其组成如附图2中所示。所述系统中包括了中央处理器CPU201,第一PCIe节点设备203和第二PCIe节点设备205。第一PCIe节点设备与第二PCIe节点设备之间通过多条串行器/解串器(serdes,Serializer/De-Serializer)电路连接。多条serdes组成第一PCIe节点设备与第二PCIe节点设备之间传输数据的链路204,每条serdes为一条通道,通道按一定的顺序连续编号。两个PCIe节点设备之间的serdes可以为1、2、4、8、16或32条,在本实施例中,以16条为例进行说明。即第一PCIe节点设备203与第二PCIe节点设备205之间有16条serdes,即16条通道,这16条通道从左到右按顺序从0开始,连续编号到15。编号为0的称之为0号通道,以此类推,编号为15的称之为15号通道。Serdes采用现有的serdes结构,支持已有的功能,再此不再另行说明。在本发明实施例中,无论链路中的serdes的数量是多少,其实现原理均是类似的。
第一PCIe节点设备203中配置有消息信号中断(MSI,message signal interrupt)功能。当第一PCIe节点设备203检测到与第二PCIe节点设备205连接的链路204中有一条或者多条通道发生故障时,上报MSI消息给CPU201,MSI消息中携带有第一PCIe节点设备203的设备ID。
第一PCIe节点设备203根据PCIe协议的重协商机制与第二PCIe节点设备205重新进行通道协商,得到第一PCIe节点设备203与第二PCIe节点设备205之间的链路204的当前通道宽度值N。通道重新协商过程中,第一PCIe节点设备203按照PCIe协议约定的通道协商机制,从通道编号最小的通道开始,按通道编号从小到大连续向上重新与第二PCIe节点设备205进行链路协商,直到协商到发生故障的通道,由于发生故障的通道无法协商成功而终止重协商过程。第一PCIe节点设备203再根据PCIe协议约定的两个PCIe节点设备之间的链路的通道的条数来确定链路的当前通道宽度值N。
由于通道编号需要连续,并且链路协商是从编号最小的通道开始的,所以重新协商得到的通道的数量会根据发生故障的通道的通道编号的不同而不同,存在着不确定性。当发生故障的通道编号较小时,重新协商得到的通道数量也会大大减少,即会使得到的当前通道宽度值N大大减小,从而严重影响到两个PCIe节点设备之间的数据传输性能。
在本发明实施例中,当CPU201收到第一PCIe节点设备203上报的MSI消息后,进入中断处理程序。CPU201根据MSI消息中的第一PCIe节点设备203的设备ID从第一PCIe节点设备203获取所述第一PCIe节点设备203的当前通道宽度值N以及所述第一PCIe节点设备203的通道协商能力值M。所述第一PCIe节点设备203的通道协商能力值M是指第一PCIe节点设备203可以与第二PCIe节点设备205协商得到的最大通道宽度值,即所述第一PCIe节点设备203与第二PCIe节点设备205之间的通道总条数。在本实施例中,第一PCIe节点设备203与第二PCIe节点设备205之间的通道有16条,因此第一PCIe节点设备203与第二PCIe节点设备205之间可以协商到的最大通道宽度值为16,那么第一PCIe节点设备203的通道协商能力值M为16。所述第一PCIe节点设备203当前通道宽度值N是所述第一PCIe节点设备203与第二PCIe节点设备205重新协商得到的当前通道宽度值N。
CPU201将获取到的所述第一PCIe节点设备203的当前通道宽度值N与通道协商能力值M进行比较。根据两个PCIe节点设备之间的链路的通道的数量规律,在本发明中,CPU201将N和M/2进行比较。
如果N≥M/2,第一PCIe节点设备203通过重新协商得到的链路通道与第二PCIe节点设备205继续进行数据传输。此时N≥M/2,则说明发生故障的通道的通道编号大于(M/2-1),由于两个PCIe节点设备之间的链路可以为1、2、4、8、16或者32条通道,此时第一PCIe节点设备203与第二PCIe节点设备205重新协商得到的当前通道宽度值N的值为M/2,第一PCIe节点设备203通过重新协商得到的链路通道继续与第二PCIe节点设备205进行数据传输。CPU201在此种条件下不做处理,所述第一PCIe节点设备203可以设定一个时间段,在设定的时间段内没有接收到CPU201的通知,则通过重新协商得到的链路通道继续与第二PCIe节点设备205进行数据传输。
如果N<M/2,CPU201通知所述第一PCIe节点设备203执行通道翻转操作。当N<M/2时,第一PCIe节点设备203与第二PCIe节点设备205重新协商得到的当前通道宽度不到总链路宽度的一半,说明发生故障的通道的通道编号小于M/2。通道翻转操作是指第一PCIe节点设备203将与第二PCIe节点设备205之间的通道的编号反向重新编号。例如在本实施例中,第一PCIe节点设备203与第二PCIe节点设备205之间的通道原来是从左往右从0开始编号,一直到15,当所述第一PCIe节点设备203执行通道翻转操作后,原来的15号通道的编号由15变更为0,即原来的15号通道变为0号通道;原来的14号通道的编号由14变更为1,即原来的14号通道变更为1号通道;由此类推。CPU201在通知所述第一PCIe节点设备执行通道翻转操作之前,还可以将所述第一PCIe节点设备与所述第二PCIe节点设备之间的0号至(M/2-1)号通道关闭。当0至(M/2-1)号通道关闭后,第一PCIe节点设备执203行通道翻转操作,原来的M号通道的编号变为0,原来的M-1号通道的编号变为1,以此类推,直到原来的M/2号通道的编号变为(M/2-1)。所第一述PCIe节点设备203执行通道翻转操作之后,重新与第二PCIe节点设备205进行新的当前通道宽度协商,得到新的当前通道宽度值N’。第一PCIe节点设备203与第二PCIe节点设备205重新协商当前通道宽度的方法与前述重新协商方法相同。所述第一PCIe节点设备203根据PCIe协议的要求,从翻转后的通道编号最小的通道开始进行协商,按通道编号从小到大连续向上重新与第二PCIe节点设备205进行链路协商,即第一PCIe节点设备203从翻转后的0号通道开始协商,然后依次协商1号通道,2号通道,直到协商到(M/2-1)号通道。由于第一PCIe节点设备203是在N<M/2的情况下执行的通道翻转操作,此时发生故障的通道的通道编号小于M/2,即为0号到(M/2-1)号通道中的一个,而0号到(M/2-1)号通道已经被关闭;而M/2号通道到M号通道没有发生故障,可以进行数据传输。因此当第一PCIe节点设备203执行通道翻转后,新的0号到(M/2-1)号通道没有故障,第一PCIe节点设备203重新与第二PCIe节点设备205协商得到的新的当前通道宽度值N’为M/2。第一PCIe节点设备203通过重新协商得到的新的链路通道继续与第二PCIe节点设备205进行数据传输。
即在PCIe节点设备的通道发生故障时,采用本发明的方案,无论发生故障的通道的通道编号是多少,都能够保障重新协商到的通道宽度为原来通道宽度的1/2,避免了发生故障的通道编号较小时,PCIe节点设备的通道值大大减小从而影响PCIe节点设备之间的数据传输速度。
本发明实施例中的第一PCIe节点设备503的内部结构图请参见附图5。如附图5中所示,第一PCIe节点设备503包括检测模块5031,MSI模块5033,协商模块5035、寄存器5037和通道翻转模块5039。
检测模块5031用于监控所述第一PCIe节点设备503与第二PCIe节点设备505之间的链路504的通信情况。第一PCIe节点设备503与第二PCIe节点设备505之间的链路504由多条串行器/解串器(serdes,Serializer/De-Serializer)电路组成,每条serdes为一条通道(lane)。当检测模块5031检测到链路504的一条或者多条通道发生故障时,向MSI模块5033发送通道故障通知消息,并将发生故障的通道的信息发送到寄存器5037中存储。
MSI模块5033用于接收到检测模块5031的通道故障通知消息后,向中央处理器CPU501发送MSI消息。发送的MSI消息中携带有第一PCIe节点设备503的设备ID。
协商模块5035用于协商第一PCIe节点设备503与第二PCIe节点设备505之间的通道宽度。两个PCIe节点设备之间的链路中的通道是按一定的顺序连续编号的。两个PCIe节点设备之间的链路可以有1、2、4、8、16或32条通道,在本实施例中,以16条通道为例进行说明。例如附图5中所示,第一PCIe节点设备503与第二PCIe节点设备505之间的链路504从左至右从0开始向右连续编号。从左往右依次是0号通道、1号通道、2号通道…15号通道。根据PCIe协议的协商机制,链路协商时从编号最低的通道开始协商,按通道编号从小到大连续向上重新与第二PCIe节点设备505进行链路协商,直到协商到发生故障的通道,由于发生故障的通道无法协商成功而终止重协商过程。第一PCIe节点设备503再根据PCIe协议约定的两个PCIe节点设备之间的链路的通道的条数来确定与第二PCIe节点设备505之间的链路的当前通道宽度值N。
寄存器5037用于存储信息,包括第一PCIe节点设备503的通道协商能力值M、当前通道宽度值N等信息。
通道翻转模块5039用于接收到执行通道翻转操作通知以后,对链路504中的通道执行通道翻转操作。
当检测模块5031检测到链路504的一条或者多条通道发生故障时,向MSI模块5033发送通道故障通知消息,并将发生故障的通道的信息发送到寄存器5037中存储。
协商模块5035发起重新协商,确定第一PCIe节点设备503与第二PCIe节点设备505之间的当前通道宽度值N。协商模块5035从链路504编号最小的通道开始协商,即从0号通道开始协商;0号通道协商成功后,再协商1号通道,以此类推,直到协商到发生故障的通道。在本实施例中,假设链路504中的5号通道发生故障,协商模块5035发起重新协商时,0号至4号通道协商成功,此时有5条通道可以进行通信,但是由于两个PCIe节点设备之间的链路可以有1、2、4、8、16或32条通道,因此第一PCIe节点设备503与第二PCIe节点设备505之间的当前通道宽度值N为4。
CPU501接收到MSI模块5033发送的MSI消息后,根据MSI消息中携带的设备ID从所述第一PCIe节点设备503的寄存器5037中获取第一PCIe节点设备设备的通道协商能力值M和当前通道宽度值N。在本实施例中,第一PCIe节点设备与第二PCIe节点设备之间的链路的通道数量为16,因此CPU501获取到的第一PCIe节点设备的通道协商能力值M为16。当前通道宽度值N为4。
CPU501将获取到的通道协商能力值M和当前通道宽度值N进行比较。根据两个PCIe节点设备之间的链路的通道的数量规律,在本发明中,CPU501将N和M/2进行比较。
当N<M/2时,CPU501通知第一PCIe节点设备503的通道翻转模块5039执行通道翻转操作。即将第一PCIe节点设备503与第二PCIe节点设备505之间的链路504的通道反向重新编号。例如附图5中所示,现在链路504的通道是从左向右从0开始连续编号到15的,执行通道翻转操作即是将链路504的15号通道的通道编号由15变为0,则15号通道变为0号通道;14号通道的通道编号由14变更为1,即14号通道变为1号通道;以此类推,执行通道翻转操作后,链路504的通道则是从右向左从0开始连续编号到15。第一PCIe节点设备503的通道翻转模块5039执行完通道翻转操作后,再由协商模块5035重新发起第一PCIe节点设备503与第二PCIe节点设备505之间链路504的通道协商,确定新的当前通道宽度值N’,协商方式与前述方式相同,在此不再另行说明。第一PCIe节点设备503通过协商得到的新的当前通道宽度与第二PCIe节点设备505进行数据传输。由于N<M/2,说明发生故障的通道的通道编号小于(M/2-1),那么重新协商得到的新的当前通道宽度值就会大于等于M/2。这样可以保证链路504的通道发生故障后,重新协商得到的通道宽度值大于等于M/2,保证了链路504的传输性能。
当N<M/2时,CPU501还可以先将第一PCIe节点设备503与第二PCIe节点设备505之间的链路504的0号至(M/2-1)号通道关闭,再通知第一PCIe节点设备503的通道翻转模块5039执行通道翻转操作。由于N<M/2,协商得到的当前通道宽度小于M/2,说明发生故障的通道的通道编号小于(M/2-1),那么M/2号至M号通道没有发生故障,可以进行数据传输。这样,CPU501将链路504的的0号至(M/2-1)号通道关闭,第一PCIe节点设备503的通道翻转模块5039执行通道翻转操作时,将M号通道的通道编号由M变更为0,(M-1)号通道的通道编号由(M-1)变为0,以此类推,直到将M/2号通道的通道编号由M/2就为(M/2-1)。由于链路原来的0号至(M/2-1)号通道已经关闭,第一PCIe节点设备503的通道翻转模块5039不再对这些已经关闭的通道进行通道翻转。通道翻转完成后,协商模块5035重新发起第一PCIe节点设备503与第二PCIe节点设备505之间链路504的通道协商,确定新的当前通道宽度值N’。此时链路504新的0号至(M/2-1)号通道可以进行通信,即链路504的通道发生故障后,重新协商得到的通道宽度值等于M/2,保证了链路504的传输性能。
当N≥M/2,说明第一PCIe节点设备503与第二PCIe节点设备505之间的链路的当前通道宽度大于等于M/2,此时链路504的性能已经得到了最大可能的保留。CPU501不做处理。第一PCIe节点设备503在预定的时间期限内没有接收到CPU501的通知,则通过协商得到的当前通道宽度N与第二PCIe节点设备504进行数据传输。链路504的传输性能也得到了保证。
在本发明实施例中,第一PCIe节点设备503的通道协商能力值M的值为16,链路504的5号通道发生故障,第一PCIe节点设备的协商模块5035重新与第二PCIe节点设备505协商得到的当前通道宽度值N的值为4,此时4<16/2,即N<M/2,CPU501关闭链路504的0号到7号通道,并通知第一PCIe节点设备503的通道翻转模块5039执行通道翻转。第一PCIe节点设备503的通道翻转模块5039将链路504的15号通道的通道编号变更为0,14号通道的通道编号变更为1,直到将8号通道的通道编号变更为7。由于链路504原来的0号到7号通道已经关闭,通道翻转模块5039不再对其进行编号。这样第一PCIe节点设备503与第二PCIe节点设备505之间的链路504现在有8条通道。第一PCIe节点设备503的协商模块5035重新与第二PCIe节点设备505进行通道协商,得到新的当前通道宽度值N’的值为8,第一PCIe节点设备503与第二PCIe节点设备505通过链路504的8条继续进行数据传输。
这样通过使用本发明提供的技术方案,两个PCIe节点设备之间的链路的通道发生故障时,无论发生故障的通道的编号是多少,都可以保证原有链路的一半的通道可以供两个PCIe节点设备继续进行数据传输,减小了现有技术中链路宽度受到发生故障的通道的通道编号大小的限制,使得重新协商后的链路宽度能够达到最佳宽度,保证了链路的传输性能。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (8)

1.一种PCIe链路故障的处理方法,其特征在于,所述方法包括:
PCIe节点设备检测到与下游PCIe节点设备之间的链路的通道发生故障,向中央处理器CPU发送消息中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;
所述PCIe节点设备与所述下游PCIe节点设备协商得到当前通道的可用数量N;
所述CPU根据接收到的MSI消息中的所述设备ID从所述PCIe节点设备获取所述PCIe节点设备与所述下游PCIe节点设备之间的通道的数量M和当前通道的可用数量N;
所述CPU将N与M/2进行比较;
如果N<M/2,所述CPU通知所述PCIe节点设备执行通道翻转操作;
所述PCIe节点设备对与所述下游PCIe节点设备之间的通道的编号反向编号;
所述PCIe节点设备与所述下游PCIe节点设备协商得到新的当前通道的可用数量N’,并通过所述N’条通道继续与所述下游PCIe节点设备进行数据传输。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果N≥M/2,所述PCIe节点设备根据协商得到的N条通道继续与所述下游PCIe节点设备进行数据传输。
3.根据权利要求1或2所述的方法,其特征在于,如果N<M/2,所述方法还包括:
通知所述PCIe节点设备执行通道翻转操作之前,所述CPU关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
4.一种PCIe链路故障的处理方法,其特征在于,所述方法包括:
接收PCIe节点设备上报的消息信号中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;
根据所述设备ID从所述PCIe节点设备获取所述PCIe节点设备与下游PCIe节点设备之间的通道的数量M和当前通道的可用数量N;其中所述当前通道的可用数量N是所述PCIe节点设备与所述下游PCIe节点设备协商得到的;
将N与M/2进行比较;
如果N<M/2,通知所述PCIe节点设备将与所述下游PCIe节点设备之间的通道的编号反向编号。
5.根据权利要求4所述方法,其特征在于,如果N<M/2时,所述方法还包括:通知所述PCIe节点设备将与所述下游PCIe节点设备之间的通道的编号反向编号之前,关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
6.根据权利要求4或5所述的方法,其特征在于,所述PCIe节点设备的通道协商能力值M等于所述PCIe节点设备与所述下游PCIe节点设备之间的链路的通道总条数。
7.一种PCIe链路故障的处理系统,所述系统包括中央处理器CPU、PCIe节点设备和下游PCIe节点设备,所述CPU与所述PCIe节点设备连接,所述PCIe节点设备与所述下游PCIe节点设备通过链路连接,其特征在于:
所述PCIe节点设备用于检测与所述下游PCIe节点设备之间的链路的通道是否发生故障,并在发生故障时向CPU上报消息中断MSI消息,所述MSI消息中包含所述PCIe节点设备的设备ID;所述PCIe节点设备还用于与所述下游PCIe节点设备协商得到当前通道的可用数量N;
所述CPU用于根据所述MSI消息中的设备ID从所述PCIe节点设备获取所述PCIe节点设备与所述下游PCIe节点设备之间的通道的数量M和当前通道的可用数量N,并将N与M/2进行比较;在N<M/2时,通知所述PCIe节点设备执行通道翻转操作;
所述PCIe节点设备还用于接收到CPU发送的执行通道翻转操作的通知后,对与所述下游PCIe节点设备之间的通道的编号反向编号,并与所述下游PCIe节点设备协商得到新的当前通道的可用数量N’。
8.根据权利要求7所述的处理系统,其特征在于,在N<M/2时,所述CPU还用于通知所述PCIe节点设备执行通道翻转操作之前关闭所述PCIe节点设备与所述下游PCIe节点设备之间的链路的0号至(M/2-1)号通道。
CN201480000399.1A 2014-04-02 2014-04-02 一种PCIe链路故障的处理方法、设备及系统 Active CN104170322B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/074584 WO2015149293A1 (zh) 2014-04-02 2014-04-02 一种PCIe链路故障的处理方法、设备及系统

Publications (2)

Publication Number Publication Date
CN104170322A CN104170322A (zh) 2014-11-26
CN104170322B true CN104170322B (zh) 2017-06-20

Family

ID=51912365

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480000399.1A Active CN104170322B (zh) 2014-04-02 2014-04-02 一种PCIe链路故障的处理方法、设备及系统

Country Status (5)

Country Link
US (1) US9785530B2 (zh)
EP (1) EP2961098B1 (zh)
JP (1) JP6110560B2 (zh)
CN (1) CN104170322B (zh)
WO (1) WO2015149293A1 (zh)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9859974B2 (en) * 2015-06-25 2018-01-02 International Business Machines Corporation Rerouting bus data signals from faulty signal carriers to existing healthy signal carriers
US9858161B2 (en) 2015-10-27 2018-01-02 International Business Machines Corporation Implementing cable failover in multiple cable PCI express IO interconnections
CN105700967A (zh) * 2016-01-08 2016-06-22 华为技术有限公司 一种外设部件内部互联PCIe设备及其检测方法
CN107590089B (zh) * 2016-07-06 2020-09-18 技嘉科技股份有限公司 基本输入输出系统对pci-e通道的控制方法
CN107888442B (zh) * 2016-09-30 2021-05-14 华为技术有限公司 一种端口速率确定方法以及计算机设备
KR102569761B1 (ko) * 2016-10-05 2023-08-22 삼성전자주식회사 반도체 장치, 반도체 시스템 및 반도체 장치의 동작 방법
CN106502952B (zh) * 2016-10-24 2019-08-02 郑州云海信息技术有限公司 一种pcie设备安全掉线设计方法
US10585831B2 (en) * 2017-01-27 2020-03-10 Hewlett Packard Enterprise Development Lp PCIe connectors
CN107703362A (zh) * 2017-12-07 2018-02-16 郑州云海信息技术有限公司 一种服务器主板pcie信号线阻抗测试治具
US20190250930A1 (en) * 2018-02-12 2019-08-15 Western Digital Technologies, Inc. Method and apparatus for configuring a serial data link
US10657080B2 (en) * 2018-03-29 2020-05-19 Quanta Computer Inc. Method and system for checking errors on cables
CN109495463B (zh) * 2018-11-02 2021-06-29 郑州云海信息技术有限公司 一种链路宽度协商方法、装置及计算机可读存储介质
CN111371582B (zh) * 2018-12-26 2021-04-16 大唐移动通信设备有限公司 一种pcie链路故障的处理方法及装置
CN109815043B (zh) * 2019-01-25 2022-04-05 华为云计算技术有限公司 故障处理方法、相关设备及计算机存储介质
CN109885420B (zh) * 2019-02-27 2022-06-17 苏州浪潮智能科技有限公司 一种PCIe链路故障的分析方法、BMC及存储介质
US11836101B2 (en) * 2019-11-27 2023-12-05 Intel Corporation Partial link width states for bidirectional multilane links
CN114385534A (zh) * 2020-10-19 2022-04-22 华为技术有限公司 一种数据处理的方法及装置
US11836059B1 (en) 2020-12-14 2023-12-05 Sanblaze Technology, Inc. System and method for testing non-volatile memory express storage devices
KR102635457B1 (ko) * 2021-05-24 2024-02-13 에스케이하이닉스 주식회사 PCIe 장치 및 이를 포함하는 컴퓨팅 시스템
US11960367B2 (en) 2021-05-24 2024-04-16 SK Hynix Inc. Peripheral component interconnect express device and operating method thereof
CN115150254B (zh) * 2022-06-29 2023-05-23 苏州浪潮智能科技有限公司 一种PCIe链路故障检测方法、检测装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1808406A (zh) * 2005-01-18 2006-07-26 富士通株式会社 监控控制器和PCI Express设备间信道数量的方法和装置
CN101872330A (zh) * 2009-11-04 2010-10-27 杭州海康威视数字技术股份有限公司 多pcie设备系统中断处理方法
CN102541790A (zh) * 2010-12-03 2012-07-04 国际商业机器公司 用于为多通路pci特快io互连提供故障保护的方法和装置
CN103440188A (zh) * 2013-08-29 2013-12-11 福建星网锐捷网络有限公司 一种pcie硬件故障的检测方法及装置

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4322659B2 (ja) * 2003-12-19 2009-09-02 エヌイーシーコンピュータテクノ株式会社 シリアル伝送制御装置、コンピュータシステム、および、シリアル伝送制御方法
US7444558B2 (en) * 2003-12-31 2008-10-28 Intel Corporation Programmable measurement mode for a serial point to point link
US7844767B2 (en) * 2004-05-21 2010-11-30 Intel Corporation Method for identifying bad lanes and exchanging width capabilities of two CSI agents connected across a link
US7705850B1 (en) * 2005-11-08 2010-04-27 Nvidia Corporation Computer system having increased PCIe bandwidth
US7756123B1 (en) * 2006-12-21 2010-07-13 Nvidia Corporation Apparatus, system, and method for swizzling of a PCIe link
US20090003335A1 (en) * 2007-06-29 2009-01-01 International Business Machines Corporation Device, System and Method of Fragmentation of PCI Express Packets
US8139575B2 (en) * 2007-06-29 2012-03-20 International Business Machines Corporation Device, system and method of modification of PCI express packet digest
WO2012023198A1 (ja) * 2010-08-19 2012-02-23 富士通株式会社 バス制御装置及びバス制御方法
JP5786492B2 (ja) * 2011-06-29 2015-09-30 富士通株式会社 通信装置、通信回路および通信方法
WO2012106934A1 (zh) * 2011-07-27 2012-08-16 华为技术有限公司 Pci快速通道设备、链路能量管理方法及系统
JP6017584B2 (ja) * 2011-12-21 2016-11-02 インテル コーポレイション 動的リンク幅調整
US9256268B2 (en) * 2012-04-24 2016-02-09 Intel Corporation Adaptive low-power link-state entry policy for active interconnect link power management
JP6069897B2 (ja) 2012-06-05 2017-02-01 富士通株式会社 データ伝送装置、およびデータ伝送方法
US20140003283A1 (en) * 2012-06-28 2014-01-02 David J. Koenen Network lane reconfiguration
US9009370B2 (en) * 2013-03-04 2015-04-14 Lsi Corporation Intelligent data buffering between interfaces
KR102033112B1 (ko) * 2013-07-15 2019-10-16 한국전자통신연구원 Pci 익스프레스 스위치 장치 및 그의 접속 제어 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1808406A (zh) * 2005-01-18 2006-07-26 富士通株式会社 监控控制器和PCI Express设备间信道数量的方法和装置
CN101872330A (zh) * 2009-11-04 2010-10-27 杭州海康威视数字技术股份有限公司 多pcie设备系统中断处理方法
CN102541790A (zh) * 2010-12-03 2012-07-04 国际商业机器公司 用于为多通路pci特快io互连提供故障保护的方法和装置
CN103440188A (zh) * 2013-08-29 2013-12-11 福建星网锐捷网络有限公司 一种pcie硬件故障的检测方法及装置

Also Published As

Publication number Publication date
EP2961098B1 (en) 2017-06-14
JP2016526311A (ja) 2016-09-01
CN104170322A (zh) 2014-11-26
EP2961098A1 (en) 2015-12-30
US20150324268A1 (en) 2015-11-12
EP2961098A4 (en) 2016-01-27
WO2015149293A1 (zh) 2015-10-08
US9785530B2 (en) 2017-10-10
JP6110560B2 (ja) 2017-04-05

Similar Documents

Publication Publication Date Title
CN104170322B (zh) 一种PCIe链路故障的处理方法、设备及系统
CN101908986B (zh) 一种链路故障的检测方法和设备
CN103684835B (zh) 链路故障上报方法、处理方法、传输节点及主节点
CN103916281B (zh) 一种动态lacp聚合链路故障恢复方法
CN103634131B (zh) 一种虚拟化网络设备互联链路检测方法及设备
CN102970157A (zh) 链路故障处理方法、irf成员设备及数据通信装置
CN107612800A (zh) 一种连接profibus冗余网络与单总线网络的y型转换设备的实现方法及控制装置
CN107611506A (zh) 一种电池管理系统
CN109032863A (zh) 一种NVMe固态硬盘及其故障原因的确定方法、系统
CN106100988A (zh) 一种实现链路聚合快速切换的方法
CN106533964A (zh) 一种管理链路聚合成员端口丢包的方法和装置
CN106502944A (zh) 计算机、pcie设备以及pcie设备的心跳检测方法
CN107534576A (zh) 一种链路恢复方法和网络设备
CN107707299A (zh) 一种fc聚合链路的检测方法及装置
CN104486787B (zh) 一种无线链路故障检测方法及装置
CN115733729B (zh) 通信故障处理方法、系统及设备
CN103888108B (zh) 一种数据解码方法及装置
CN102355367B (zh) 一种分布式lacp接收状态机死锁预防方法及装置
CN108023811B (zh) Lacp聚合系统、协议报文的透传方法及装置
CN107819508A (zh) 基于epon家庭网关的链路故障检测及恢复方法
CN109495463B (zh) 一种链路宽度协商方法、装置及计算机可读存储介质
CN103780458A (zh) 一种以太网接口测试方法和系统
CN101729349A (zh) 一种基于rrpp的主环通道连通性检测方法及装置
JP2000134216A (ja) 通信制御装置及び通信制御方法
CN107332697A (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
GR01 Patent grant
GR01 Patent grant