计算机、PCIE设备以及PCIE设备的心跳检测方法技术领域
本发明涉及计算机技术领域,特别是涉及一种计算机、PCIE设备以
及PCIE设备的心跳检测方法。
背景技术
随着PCIE(Peripheral Component Interface Express,高速外围元件
接口)设备(如PCIE SSD盘)在全闪存阵列中的广泛应用,对PCIE
设备的暴力热插拔的支持是一种必然趋势。而按照PCIE协议规定的
PCIE热插拔操作是预先通知模式的,而在实际的应用场景中,可能出现
误操作、无意识的外力、特殊应用场景等情况出现PCIE设备在未通知
系统热插拔驱动的情况下,直接发生与计算机的北桥芯片的PCIE连接
链路断开。如果这个时候计算机中的PCIE设备驱动程序正在通过计算
机的处理器下发命令访问该PCIE设备的寄存器等,就可能导致计算机
的处理器出现MCE(Machine Check Exception,机器检测异常)错误,
从而导致计算机系统复位。
PCIE设备的热拔出流程必须是先将热插拔事件通知到计算机的热
插拔驱动程序,在热插拔驱动程序通知计算机系统中所有可能访问该设
备的驱动程序停止访问该PCIE设备、并且将需要进行热插拔设备的资
源卸载掉之后,再对PCIE设备下电,然后才能对PCIE设备进行热拔出。
PCIE设备的热插拔流程必须得先停止对PCIE设备的访问之后才能
将PCIE设备从计算机中拔出(断开与计算机的北桥芯片的连接),其根本
原因在于当计算机的处理器发起对一个PCIE设备寄存器的读/写请求
时,若这个PCIE设备此时被突然拔出计算机的PCIE插槽,这时处理器
发起的读/写请求得不到响应,处理器就会认为系统异常,报出MCE错
误让整个计算机系统复位。
因此,计算机的处理器和PCIE设备之间,需要进行定时的握手,
以保证业务逻辑能够正确执行,该握手过程称心跳。
在现有心跳技术中,计算机定时向PCIE设备发送心跳信息,而PCIE
设备接受到心跳信息后,马上返回对应消息包,计算机接收到对应消息
包后,完成一次完整的握手。计算机根据握手是否成功以及成功的次数,
判断PCIE设备心跳是否正常,从而进行相关的业务逻辑和错误处理。
由于现有的心跳技术中,必须由计算机不断地主动发起心跳信息至
PCIE设备,若计算机发出心跳信息至PCIE设备之后,PCIE设备来不
及回复就被暴力热拔出,此时计算机发起的消息包得不到PCIE设备响
应,计算机的处理器就会认为系统异常,此时处理器会报出MCE错误
让整个计算机系统复位,使得计算机可靠性不高。
发明内容
本发明实施方式提供一种计算机、PCIE设备以及PCIE设备的心跳
检测方法,能够有效避免因PCIE设备热插拔而导致计算机系统复位的
情况发生,进而提高计算机的可靠性。
第一方面提供一种PCIE设备的心跳检测方法,该方法应用于计算
机,计算机设置有PCIE插槽,PCIE设备可插拔设置于PCIE插槽,且
在插入PCIE插槽时与计算机建立PCIE链路连接,该方法包括:计算机
检测PCIE设备是否插置于PCIE插槽中,如果是,在计算机的内存选择
内存地址;计算机通过PCIE链路发送内存地址和预设频率至PCIE设备,
以使得PCIE设备通过PCIE链路以预设频率周期地将心跳信息写入内存
地址;计算机以预设频率周期地读取内存地址的内容,并判断内容是否
是心跳信息,如果是,确认PCIE设备心跳正常,如果否,确认PCIE设
备心跳异常。
在第一方面的第一种可能的实现方式中,计算机确认PCIE设备心
跳异常之后,该方法还包括:计算机再次检测PCIE设备是否插置于PCIE
插槽中,如果否,则清空内存地址的内容,并进行热插拔处理。
根据第一方面的第一种可能的实现方式,在第二种可能的实现方式
中,在检测到PCIE设备插置于PCIE插槽中时,该方法还包括:计算机
进一步检测PCIE链路是否出现故障,如果是,则进行PCIE链路故障处
理。
根据第一方面的第一种可能的实现方式,在第三种可能的实现方式
中,在检测到PCIE设备插置于PCIE插槽中时,该方法还包括:在检测
到PCIE设备插置于PCIE插槽中时,该方法还包括:计算机进一步检测
PCIE设备内部是否出现故障,如果是,则进行PCIE设备故障处理。
根据第一方面、第一方面的第一至第三种可能的实现方式中的任一
者,在第四种可能的实现方式中,心跳信息包括依次递增的0至N,其
中N为正整数,计算机判断内容是否是心跳信息具体包括:计算机判断
内容是否为依次递增的0至N,如果是,则判断到内容是心跳信息,其
中依次递增的0至N包括从N变为0的最大值反转状态。
根据第一方面、第一方面的第一至第三种可能的实现方式中的任一
者,在第五种可能的实现方式中,心跳信息包括依次递减的N至0,其
中N为正整数,计算机对内容进行判断具体包括:计算机判断内容是否
为依次递减的N至0,如果是,则判断到内容是心跳信息,其中依次递
减的N至0包括从0变为N的最小值反转状态。
第二方面提供一种PCIE设备的心跳检测方法,该方法应用于PCIE
设备,PCIE设备可插拔设置于计算机的PCIE插槽,且在插入PCIE插
槽时与计算机建立PCIE链路连接,该方法包括:PCIE设备通过PCIE
链路接收计算机发送的内存地址和预设频率,其中内存地址是计算机在
检测到PCIE设备插置于PCIE插槽时,在计算机的内存中选择获得;
PCIE设备通过PCIE链路以预设频率周期地将心跳信息写入内存地址,
以使得计算机以预设频率周期地读取内存地址的内容,并判断内容是否
是心跳信息,如果是,确认PCIE设备心跳正常,如果否,确认PCIE设
备心跳异常。
在第二方面的第一种可能的实现方式中,PCIE设备通过PCIE链路
以预设频率周期地将心跳信息写入内存地址包括:PCIE设备将心跳信息
设置在存储内存写请求类型的TLP包中,并将TLP包在PCIE链路中的
虚拟通道/流量级别设置为最高优先级。
根据第二方面或第二方面的第一种可能的实现方式,在第二种可能
的实现方式中,心跳信息包括依次递增的0至N,其中N为正整数。
根据第二方面或第二方面的第一种可能的实现方式,在第三种可能
的实现方式中,心跳信息包括依次递减的N至0,其中N为正整数。
第三方面提供一种计算机,计算机包括PCIE插槽和内存,PCIE设
备可插拔设置于PCIE插槽,且PCIE设备在插入PCIE插槽时与计算机
建立PCIE链路连接,计算机还包括:主机心跳模块,用于检测PCIE设
备是否插置于PCIE插槽中,如果是,在内存选择内存地址;主机心跳
模块,还用于通过PCIE链路发送内存地址和预设频率至PCIE设备,以
使得PCIE设备通过PCIE链路以预设频率周期地将心跳信息写入内存地
址;主机心跳模块,还用于预设频率周期地读取内存地址的内容,并判
断内容是否是心跳信息,如果是,确认PCIE设备心跳正常,如果否,
确认PCIE设备心跳异常。
在第三方面的第一种可能的实现方式中,计算机还包括热插拔处理
模块,其中:主机心跳模块,还用于在确认PCIE设备心跳异常之后,
再次检测PCIE设备是否插置于PCIE插槽中,如果否,则清空内存地址
的内容,并通知热插拔处理模块进行热插拔处理。
根据第三方面的第一种可能的实现方式,在第二种可能的实现方式
中,计算机还包括PCIE链路故障处理模块,其中:在主机心跳模块检
测到PCIE设备插置于PCIE插槽中时,PCIE链路故障处理模块用于检
测PCIE链路是否出现故障,如果是,则进行PCIE链路故障处理。
根据第三方面的第一种可能的实现方式,在第三种可能的实现方式
中,计算机还包括PCIE设备故障处理模块,其中:在主机心跳模块检
测到PCIE设备插置于PCIE插槽中时,PCIE设备故障处理模块用于检
测PCIE设备内部是否出现故障,如果是,则进行PCIE设备故障处理。
根据第三方面、第三方面的第一至第三种可能的实现方式中的任一
者,在第四种可能的实现方式中,心跳信息包括依次递增的0至N,N
为正整数,其中:主机心跳模块,用于判断内容是否为依次递增的0至
N,如果是,则判断到内容是心跳信息,其中依次递增的0至N包括从
N变为0的最大值反转状态。
根据第三方面、第三方面的第一至第三种可能的实现方式中的任一
者,在第五种可能的实现方式中,心跳信息包括依次递减的N至0,其
中N为正整数,其中:主机心跳模块,用于判断内容是否为依次递减的
N至0,如果是,则判断到内容是心跳信息,其中依次递减的N至0包
括从0变为N的最小值反转状态。
第四方面提供一种PCIE设备,PCIE设备可插拔设置于计算机的
PCIE插槽,且在插入PCIE插槽时与计算机建立PCIE链路连接,PCIE
设备包括:接收模块,用于通过PCIE链路接收计算机发送的内存地址
和预设频率,其中内存地址是计算机在检测到PCIE设备插置于PCIE插
槽时,在计算机的内存中选择获得;PCIE设备心跳模块,还用于通过
PCIE链路以预设频率周期地将心跳信息写入内存地址,以使得计算机以
预设频率周期地读取内存地址的内容,并判断内容是否是心跳信息,如
果是,确认PCIE设备心跳正常,如果否,确认PCIE设备心跳异常。
在第四方面的第一种可能的实现方式中,PCIE设备心跳模块在通过
PCIE链路以预设频率周期地将心跳信息写入内存地址之前,将心跳信息
设置在存储内存写请求类型的TLP包中,并将TLP包在PCIE链路中的
虚拟通道/流量级别设置为最高优先级。
根据第四方面、第四方面的第一种可能的实现方式,在第二种可能
的实现方式中,心跳信息包括依次递增的0至N,其中N为正整数。
根据第四方面、第四方面的第一种可能的实现方式,在第三种可能
的实现方式中,心跳信息包括依次递减的N至0,其中N为正整数。
本发明实施方式提供的计算机、PCIE设备以及PCIE设备的心跳检
测方法,PCIE设备通过PCIE链路以预设频率周期地将心跳信息写入计
算机的内存地址,计算机以该预设频率周期地读取本地内存地址的内
容,根据该内容获知PCIE设备心跳是否正常,由于在本发明实施例中,
因由PCIE设备主动发出心跳信息至计算机,而无需由计算机不断地主
动发出心跳信息至PCIE设备,因此PCIE设备只需负责发送心跳信息,
而无需对心跳信息进行回应,进而避免了PCIE设备热插拔时计算机系
统复位的情况发生,故能提高计算机的可靠性。
附图说明
图1是根据本发明实施例的计算机和PCIE设备所组成系统的系统
结构示意图;
图2是根据本发明实施例的PCIE设备的心跳检测方法的流程图;
图3是根据本发明实施例的PCIE设备的心跳检测方法的另一流程
图;
图4是根据本发明实施例的PCIE设备的心跳检测方法的另一流程
图;
图5是根据本发明实施例的计算机的装置结构示意图;
图6是根据本发明实施例的PCIE设备的装置结构示意图。
具体实施方式
下面结合附图和实施方式对本发明进行详细说明。
首先请参见图1,图1是根据本发明实施例的计算机10和PCIE设
备20所组成系统的系统结构示意图,如图1所示,在本发明实施例中,
计算机10设置有PCIE插槽102,PCIE设备20可插拔设置于PCIE插
槽102,且在插入PCIE插槽102时与计算机10建立PCIE链路连接。
其中,PCIE设备20与计算机10之间更设置有RC(Root Complex,根
组件)和PCIE SWITCH(PCIE交换器)(图未示),RC和PCIE SWITCH
可实现PCIE链路的通信。
值得注意的是,本发明实施例中,为了便于说明,仅仅列出一个PCIE
设备20作为示例性说明,但本发明实施例也支持多个PCIE设备分别插
置于计算机10的多个PCIE插槽的情况。
并且,网络管理分为带内管理(In-Band)和带外管理(Out-Of-Band),
其中带内管理即管理控制信息与数据信息使用统一物理通道进行传送。
在物理设备没有单独的带外管理端口的情况下,必须要使用带内管理。
而在本发明实施例中,PCIE设备20和计算机10无需利用带外管理端口
来传输心跳信息,本发明的心跳信息只在PCIE链路中进行传输,因此
本发明属于PCIE链路带内管理技术。
以下请参见图2,图2是根据本发明实施例的PCIE设备的心跳检测
方法的流程图,本实施例所揭示的方法应用于计算机10,如图2所示,
该方法包括以下步骤:
步骤201:计算机10检测PCIE设备20是否插置于PCIE插槽102
中,如果是,执行步骤202,如果否,可跳转至步骤201,继续检测PCIE
设备20是否插置于PCIE插槽102中。
步骤202:计算机10在内存选择内存地址。其中计算机10可在本
地的内存选择一空闲的特定内存地址。
步骤203:计算机10通过PCIE链路发送内存地址和预设频率至
PCIE设备20。PCIE设备20接收内存地址和预设频率之后,通过PCIE
链路以预设频率周期地将心跳信息写入内存地址。优选地,心跳信息可
为依次递增的0至N,如0,1,2,3,4……N,N为正整数。值得注意
的是,这里所述的依次递增的0至N包括从N变为0的最大值反转状态。
这里揭示的递增方式以1为步长,而可选地,也可以其他步长实现
递增,如步长为2,则可以下列方式进行递增:0,2,4……N,N为
偶数正整数。
优选地,计算机10可将内存地址和预设频率设置在存储内存写请
求(Memory Write)类型的TLP包中,并将TLP包在PCIE链路中的
VC/TC(虚拟通道/流量)级别设置为最高优先级,通过在PCIE链路发
送该TLP包至PCIE设备20,以将内存地址和预设频率发送至PCIE设
备20。
步骤204:计算机10以该预设频率周期地读取内存地址的内容。
步骤205:计算机10判断读取到的内容是否是心跳信息,如果是,
执行步骤206,如果否,执行步骤207。具体地,计算机10判断读取到
的内容是否为依次递增的0至N,如依次递增的0,1,2,3,4……N,
如果是,则判断到该内容是心跳信息,反之,则判断到该内容不是心跳
信息。
步骤206:计算机10确认PCIE设备20心跳正常。
步骤207:计算机10确认PCIE设备20心跳异常。
在本发明实施例中,因PCIE设备20主动发出心跳信息至计算机10,
而无需由计算机10不断地主动发出心跳信息至PCIE设备20,因此PCIE
设备20只需负责发送心跳信息,而无需对心跳信息进行回应,进而避
免了PCIE设备20热插拔时由于计算机10的处理器不能从PCIE设备
20获取到应答而导致计算机10系统复位的情况发生,故本实施例能提
高计算机10的可靠性。
进一步地,由于导致PCIE设备20心跳异常的原因主要包括:PCIE
设备20内部故障、PCIE链路故障以及PCIE设备20被热拔出,因此,
计算机10需针对以上三种情况进行相应的检测及处理。
以下请参见图3,图3是根据本发明实施例的PCIE设备20的心跳
检测方法的另一流程图,图3示出步骤207之后,计算机10针对PCIE
设备20心跳异常的判断结果而作出的相应处理方法,如图3所示,该
方法包括以下步骤:
步骤208:计算机10再次检测PCIE设备20是否插置于PCIE插槽
102中,如果是,执行步骤210,如果否,执行步骤209。
步骤209:计算机10清空内存地址的内容,并进行热插拔处理,其
中热插拔处理具体可为上报热插拔事件至计算机10内的对应功能模块,
使得对应功能模块获知PCIE设备20被热拔出,从而停止与该PCIE设
备20之间的通信。
步骤210:计算机10进一步检测PCIE链路是否出现故障,如果是,
则执行步骤211,如果否,则执行步骤212。
步骤211:计算机10进行PCIE链路故障处理。其中PCIE链路故
障处理具体可为计算机10上报PCIE链路故障事件至计算机10内的对
应功能模块,使得对应功能模块获知PCIE链路出现故障,从而进行对
应的PCIE链路故障处理动作。
步骤212:计算机10检测PCIE设备20内部是否出现故障,如果是,
执行步骤213,如果否,执行步骤214。
步骤213:计算机10进行PCIE设备20故障处理。其中PCIE链路
故障处理具体可为计算机10上报PCIE设备20故障事件至计算机10内
的对应功能模块,使得对应功能模块获知PCIE设备20出现故障,从而
进行对应的PCIE设备20故障处理动作。
步骤214:计算机10提示用户未查找到PCIE设备20心跳异常原因。
因此,通过上述方法,计算机10可以找出PCIE设备20心跳异常
的原因,并进行相关处理动作,以告知计算机10内部的相应功能模块
进行应对,从而使得计算机10系统内部资源得到较为高效的分配。
以下请参见图4,图4是根据本发明实施例的PCIE设备20的心跳
检测方法的另一流程图,本实施例所揭示的方法应用于PCIE设备20,
如图4所示,该方法包括以下步骤:
步骤301:PCIE设备20通过PCIE链路接收计算机10发送的内存
地址和预设频率,其中内存地址是计算机10在检测到PCIE设备20插
置于PCIE插槽102时,在计算机10的内存中选择获得;
步骤302:PCIE设备20通过PCIE链路以预设频率周期地将心跳信
息写入内存地址,以使得计算机10以预设频率周期地读取内存地址的
内容,并判断内容是否是心跳信息,如果是,确认PCIE设备20心跳正
常,如果否,确认PCIE设备20心跳异常。
在步骤301中,优选地,PCIE设备20可将心跳信息设置在存储内
存写请求类型的TLP(Transaction Layer Package,传输层数据包)包中,
并将TLP包在PCIE链路中的虚拟通道/流量级别设置为最高优先级。
对于高负载的PCIE设备20而言,由于IO负载比较大,心跳消息
和普通的IO消息在一起发送,则存在阻塞的可能,而将包括心跳信息
的TLP包在PCIE链路中的虚拟通道/流量级别设置为最高优先级,则会
避免心跳信息因为阻塞而不能及时发送至计算机10侧,从而进一步提
高了系统的稳定性。
可选地,心跳信息可为依次递增的0至N,其中N为正整数。
或者,心跳信息也可设定为依次递减的N至0,其中N为正整数。
以下可参见图5,图5是根据本发明实施例的计算机10的装置结构
示意图,如图5所示,计算机10包括PCIE插槽102和内存101,PCIE
设备20可插拔设置于PCIE插槽102,且PCIE设备20在插入PCIE插
槽102时与计算机10建立PCIE链路连接,计算机10还包括:
主机心跳模块103,用于检测PCIE设备20是否插置于PCIE插槽
102中,如果是,在内存101选择内存101地址;
主机心跳模块103,还用于通过PCIE链路发送内存101地址和预设
频率至PCIE设备20,以使得PCIE设备20通过PCIE链路以预设频率
周期地将心跳信息写入内存101地址;
主机心跳模块103,还用于预设频率周期地读取内存101地址的内
容,并判断内容是否是心跳信息,如果是,确认PCIE设备20心跳正常,
如果否,确认PCIE设备20心跳异常。
可选地,计算机10还包括热插拔处理模块106,该主机心跳模块
103,还用于在确认PCIE设备20心跳异常之后,再次检测PCIE设备
20是否插置于PCIE插槽102中,如果否,则清空内存101地址的内容,
并通知热插拔处理模块106进行热插拔处理。
可选地,计算机10还包括PCIE链路故障处理模块105,在主机心
跳模块103检测到PCIE设备20插置于PCIE插槽102中时,PCIE链路
故障处理模块105用于检测PCIE链路是否出现故障,如果是,则进行
PCIE链路故障处理。
可选地,计算机10还包括PCIE设备故障处理模块104,在主机心
跳模块103检测到PCIE设备20插置于PCIE插槽102中时,PCIE设
备故障处理模块104用于检测PCIE设备20内部是否出现故障,如果是,
则进行PCIE设备故障处理。
可选地,心跳信息为依次递增的0至N,N为正整数,主机心跳模
块103具体用于判断内容是否为依次递增的0至N,如果是,则判断到
内容是心跳信息,其中依次递增的0至N包括从N变为0的最大值反转
状态。
心跳信息为依次递减的N至0,其中N为正整数,主机心跳模块103
具体用于判断内容是否为依次递减的N至0,如果是,则判断到内容是
心跳信息,其中依次递减的N至0包括从0变为N的最小值反转状态。
以下请参见图6,图6是根据本发明实施例的PCIE设备20的装置
结构示意图。PCIE设备20可插拔设置于计算机10的PCIE插槽102,
且在插入PCIE插槽102时与计算机10建立PCIE链路连接,如图6所
示,PCIE设备20包括:
接收模块501,用于通过PCIE链路接收计算机10发送的内存101
地址和预设频率,其中内存101地址是计算机10在检测到PCIE设备20
插置于PCIE插槽102时,在计算机10的内存101中选择获得;
PCIE设备心跳模块502,还用于通过PCIE链路以预设频率周期地
将心跳信息写入内存101地址,以使得计算机10以预设频率周期地读
取内存101地址的内容,并判断内容是否是心跳信息,如果是,确认PCIE
设备20心跳正常,如果否,确认PCIE设备20心跳异常。
可选地,PCIE设备心跳模块502在通过PCIE链路以预设频率周期
地将心跳信息写入内存101地址之前,将心跳信息设置在存储内存101
写请求类型的TLP包中,并将TLP包在PCIE链路中的虚拟通道/流量
级别设置为最高优先级。
可选地,心跳信息为依次递增的0至N,其中N为正整数。
可选地,心跳信息为依次递减的N至0,其中N为正整数。
由于在本发明实施例中,因由PCIE设备主动发出心跳信息至计算
机,而无需由计算机不断地主动发出心跳信息至PCIE设备,因此PCIE
设备只需负责发送心跳信息,而无需对心跳信息进行回应,进而避免了
PCIE设备热插拔时计算机系统复位的情况发生,故能提高计算机的可靠
性。
以上所述仅为本发明的实施方式,并非因此限制本发明的专利范
围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变
换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的
专利保护范围内。