一种计算机系统、高速外围组件互联端点设备的访问方法和装置与流程

文档序号:11864611阅读:180来源:国知局
一种计算机系统、高速外围组件互联端点设备的访问方法和装置与流程

本发明实施例涉及计算机技术,特别是一种高速外围组件互联端点设备的访问方法、计算机系统和装置。



背景技术:

高速外围组件互联(Peripheral Component Interconnect Express,PCIe)的简称,是用于计算和通信平台上的高性能系统总线。PCIe总线被广泛的应用在CPU和外围设备的互连系统中,在计算和存储设备中作为核心业务通道。通过PCIe总线与CPU互连的外围设备可以有多种,例如网卡设备或固态硬盘(Solid State Disk,SSD)等,本文件中将此类设备统称为PCIe端点设备。

PCIe总线作为服务器或存储系统的总线接口被广泛应用,系统正常运行时,由于在线扩容和维护的需求,需要在不断电的情况下增加或者移除PCIe端点设备,即热插拔的需求。现有的PCIe热插拔遵循以下操作流程:操作者通过按下按钮发起热拔请求,热插拔控制器获知到热插拔事件后,通知系统中所有可能访问该PCIe端点设备的驱动停止访问该PCIe端点设备,并且将需要进行热插拔的PCIe端点设备的资源卸载掉,此后,对该PCIe端点设备下电,操作者拔出该PCIe端点设备。

现有的PCIe端点设备热插拔需要预先通知才能保证系统正常运行。然而,近年来,PCIe总线逐渐由系统内的互连发展为系统间的互连,外部线缆等应用增多,线缆容易异常脱落,出现未预先通知的PCIe端点设备异常离线的情况。另外,用户使用固态硬盘SSD直接接入系统的场景越来越广泛,由于用户习惯的因素,用户可能不预先通知就直接插拔SSD盘。然而,对于上述提到的PCIe端点设备突然突然异常离线的情况,如果CPU已经发起对这个PCIe端点设备的读写指令,相关的指令将一直处于待完成状态,当CPU对所述PCIe端点设备的访问指令持续积累达到一定程度,CPU就会认为整个系统异常,报出机器检测异常(Machine check exception,MCE)错误,并进行复位。



技术实现要素:

本发明实施例提出了一种高速外围组件互联端点设备的访问方法、计算机系统和装置,在PCIe端点设备异常离线之后,保证CPU不会产生复位。

第一方面,本发明实施例提出了一种计算机系统,所述计算机系统包括:

处理器;

高速外围组件互联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端点设备发送的所述访问请求的响应消息,若接收到所述PCIe端点设备发送的所述访问请求的响应消息,将所述访问请求的报文状态记录为“已完成”。

结合第二方面或者第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述预设的触发条件为所述PCIe端点设备发生异常离线;

所述方法还包括:

监测所述PCIe端点设备是否发生异常离线,在确定所述PCIe端点设备发生异常离线时,执行所述确定所述访问请求的报文状态的步骤。

结合第二方面或者第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述预设的触发条件为所述访问请求的计时器超时;

所述方法还包括:

针对所述处理器发送的所述访问请求启动计时器进行计时,在所述计时器超时后,执行所述确定所述访问请求的报文状态的步骤。

第三方面,提出了一种模拟响应装置,应用于计算机系统中,高速外围组件互联PCIe端点设备通过PCIe总线接入所述计算机系统中,所述装置包括:

监控单元,用于在所述计算机系统中的处理器向所述PCIe端点设备发送访问请求之后,对所述访问请求的报文状态进行监控,其中,所述访问请求的报文状态包括“已完成”或“未完成”,所述“未完成”表示所述PCIe端点设备未发送所述访问请求的响应消息;

确定单元,用于当预设的触发条件达到时,根据所述监控单元的监控结果确定所述访问请求的报文状态;

获取单元,用于在所述确定单元确定所述访问请求的报文状态是“未完成”时,获取所述访问请求的模拟响应消息;

响应单元,用于向所述处理器发送所述获取单元获取的所述模拟响应消息。

结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,还包括交互单元,用于接收所述处理器发送的访问请求,向所述PCIe端点设备转发所述访问请求;

则所述监控单元具体用于监控所述交互单元是否接收到所述PCIe端点设备发送的所述访问请求的响应消息,若接收到所述PCIe端点设备发送的所述访问请求的响应消息,将所述访问请求的报文状态记录为“已完成”。

第四方面,提出了一种计算机,包括:处理器、存储器、总线和通信接口;

所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行第二方面所述的一种高速外围组件互联PCIe端点设备的访问方法。

第五方面,提出了一种计算机可读介质,包括计算机执行指令,当计算机的处理器执行所述计算机执行指令时,所述计算机执行第二方面所述的一种高速外围组件互联PCIe端点设备的访问方法。

本发明实施例中,由于能够对处理器发送的访问请求的报文状态进行监控,并在确定PCIe端点设备未发送对所述访问请求的响应消息时,向处理器发送访问请求的模拟响应消息,使得处理器能够根据该模拟响应消息,确认之前发出的访问请求对应的流程已经完成,从而关闭对该访问请求进行计时的计时器,并清除缓存的该访问请求,保持处理器内部的处理正常进行,避免了访问请求在处理器内积累所导致的MCE复位问题。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例提供的一种计算机系统的组成图;

图2是根据本发明实施例提供的又一种计算机系统的组成图;

图3是根据本发明实施例提供的一种方法流程图;

图4是根据本发明实施例提供的又一种方法流程图;

图5是根据本发明实施例提供的又一种方法流程图;

图6是根据本发明实施例提供的一种模拟响应装置的组成图;

图7是根据本发明实施例提供的又一种模拟响应装置的组成图;

图8是根据本发明实施例提供的一种计算机的组成图。

具体实施方式

本发明实施例提出了一种高速外围组件互联端点设备的访问方法、计算机系统和装置,当有PCIe端点设备需要进行热插拔操作时可以不用预先通知系统进行预处理,就直接断开PCIe端点设备与处理器之间的连接,此时处理器也不会产生MCE复位的风险。

本发明实施例将PCIe端点设备被直接拔出系统或者出现故障掉线的情况统称为PCIe端点设备的异常离线。

本发明实施例的系统架构

图1描绘了本发明实施例提供的计算机系统的组成图,图1所示的计算机系统中包括CPU 110和存储器120,PCIe端点设备130通过PCIe总线140连接到CPU110,并可以从该计算机系统中插拔出去。PCIe端点设备130包含多种类型,例如图形处理单元131、网络适配器132、固态硬盘133与视频加速部件134。

图1所示的计算机系统中的PCIe端点设备130和CPU110组成一个PCIe域,所述PCIe域中的所有设备通过PCIe总线140与CPU 110连接并接受CPU110的控制。

当CPU110获取到对PCIe端点设备130进行访问的操作指令后,CPU110根据操作指令,向PCIe端点设备130发出访问请求,要求对PCIe端点设备130的寄存器进行读操作或写操作,如果PCIe端点设备130发生异常离线,CPU110将接收不到PCIe端点设备130对CPU110的访问请求的响应消息,此时,CPU就会认为该访问请求属于未完成的任务,如果此类未完成任务在CPU中积累到一定程度,CPU就会认为整个系统异常,报出MCE错误进行复位。

本发明实施例在系统中新增模拟响应模块160,该模拟响应应模块160用于在所述CPU110向所述PCIe端点设备130发送所述访问请求之后,对CPU110发送的所述访问请求的报文状态进行监控,如果预先设定的触发条件达到时,所述访问请求的报文状态仍然是“未完成”,即所述PCIe端点设备130未发送对所述访问请求的响应消息,该模拟响应应模块160就获取所述访问请求的模拟响应消息,并向CPU110发送所述模拟响应消息。由于所述模拟响应消息与所述访问请求具有相同的报文头,所述访问请求与所述模拟响应消息互相对应,可以使得CPU认为其之前发出的访问请求对应的流程已经被完成,从而关闭对该访问请求进行计时的计时器,并清除CPU自身缓存的该访问请求。

其中,所述访问请求的报文状态包括“已完成”或“未完成”,“已完成”表示所述PCIe端点设备已经发送所述访问请求的响应消息,“未完成”表示所述PCIe端点设备未发送所述访问请求的响应消息。

另外,所述模拟响应模块160还用于在所述处理器向所述PCIe端点设备发送所述访问请求之后,就生成所述访问请求的模拟响应消息,并缓存所述访问请求的模拟响应消息,该模拟响应模块160后续直接获取自身缓存的所述访问请求的模拟响应消息即可。

本发明实施例中,由于模拟响应模块能够对CPU发送的所述访问请求的报文状态进行监控,并在确定PCIe端点设备未发送对所述访问请求的响应消息时,向CPU发送访问请求的模拟响应消息,使得CPU能够根据该模拟响应消息,确认之前发出的访问请求对应的流程已经完成,从而关闭对该访问请求进行计时的计时器,并清除缓存的该访问请求,保持CPU内部的处理正常进行,避免了访问请求在CPU内积累所导致的MCE复位问题。

本发明一种具体的实施方式中,模拟响应模块160对所述访问请求的报文状态进行监控,可以通过监控自身是否接收到所述PCIe端点设备130发送的所述访问请求的响应消息来实现,若所述模拟响应模块接收到所述PCIe端点设备发送的所述访问请求的响应消息,模拟响应模块将所述访问请求的报文状态记录为“已完成”。

在本发明的一个具体实施例中,可以将模拟响应模块160设置在CPU110和各个PCIe端点设备130之间的传输路径中,保证CPU110和各个PCIe端点设备130之间的消息都需要经过模拟响应模块160,从而模拟响应模块160可以通过监控自身是否接收到所述PCIe端点设备130发送的所述访问请求的响应消息来监控所述访问请求的报文状态,另一种实现方式中,也可以预先在PCIe端点设备130上进行配置,使得PCIe端点设备130向CPU110发送所述访问请求的响应消息的时候,也向模拟响应模块发送该响应消息,这样也可以保证模拟响应模块160根据自身是否接收到所述访问请求的响应消息来监控所述访问请求的报文状态。当然,本领域技术人员也可以根据本发明实施例提供的实现方式,采用其他等同或者相似的实现方式来实现模拟响应模块160对所述访问请求的报文状态进行监控。

如图1所示,模拟响应模块160被设置在CPU110和各个PCIe端点设备130之间的信号传输路径中,这样,CPU110发出的访问请求需要通过模拟响应模块160才能到达PCIe端点设备130,因此模拟响应模块160可以接收到访问请求,并且,由于PCIe端点设备发送的消息需要经过模拟响应模块160才能到达CPU110,因此模拟响应模块160可以根据自身是否接收到PCIe端点设备130发送的对该访问请求的响应消息,确定PCIe端点设备130是否发送所述访问请求的响应消息,并记录所述访问请求的报文状态。进一步地,在本发明实施例的又一种具体实现方式中,当模拟响应模块160接收到CPU110发送的访问请求之后,还可以缓存该访问请求,若后续接收到PCIe端点设备130发送的该访问请求的响应消息,模拟响应模块160可以将缓存的该访问请求打上“已完成”的标记,或者删除缓存的该访问请求,模拟响应模块160在预设的触发条件到达时,可以查询该访问请求的报文状态,即查询缓存的访问请求的标记或者查询缓存的访问请求,如果该访问请求的标记表示该访问请求“未完成”或者缓存的访问请求未被删除,模拟响应模块160确定所述访问请求的报文状态是“未完成”,即所述PCIe端点设备130未发送该访问请求的响应消息,则模拟响应模块160获取该访问请求的模拟响应消息,并向CPU110发送该模拟响应消息。

其中,模拟响应模块160可以在接收到CPU110发送的所述访问请求时,提前生成所述访问请求的模拟响应消息,并将生成的所述访问请求的模拟响应消息与所述访问请求进行关联缓存,后续模拟响应模块160直接获取缓存的所述访问请求的模拟响应消息即可。当然,模拟响应模块160也可以在确定未接收到PCIe端点设备130发送的该访问请求的响应消息时,才生成该访问请求的模拟响应消息,本发明实施例对具体实施形式不做限定。

如图2所示,如果系统中存在多个PCIe端点设备,可以通过PCIe交换器150实现多个PCIe端点设备130与CPU110的连接,图2所示的系统中除了图1所示的各组成元素之外,还包括PCIe交换器150,该PCIe交换器150上游端口通过PCIe总线140与CPU110连接,下游端口面向每个PCIe端点设备提供一个PCIe端口,所述每个PCIe端口通过PCIe总线140连接到每个PCIe端点设备,PCIe交换器150用于将数据向下游路由到对应的PCIe端口,以及从每个独立的PCIe端口将数据向上游路由至CPU110。在图2中,模拟响应模块160可以设置在CPU110与PCIe交换器150之间的信号传输路径中,用来接收CPU110发出的访问请求,并对CPU110发出的访问请求进行缓存,向所述PCIe端点设备130转发所述访问请求,对所述访问请求的报文状态进行监控,若确定自身接收到所述PCIe端点设备130发送的所述访问请求的响应消息,将自身缓存的所述访问请求打上“已完成”的标记,或者删除自身缓存的所述访问请求,在预设的触发条件到达时,查询缓存的访问请求的标记或者缓存的访问请求,如果该访问请求的标记表示该访问请求“未完成”或者缓存的访问请求未被删除,模拟响应模块160即确定PCIe端点设备130未发送该访问请求的响应消息,则获取该访问请求的模拟响应消息,并向CPU110发送该模拟响应消息。

在上述实施例中,上述预设的触发条件可以是模拟响应模块160确定PCIe端点设备130发生异常离线,此种情况下,模拟响应模块160还用于监测所述PCIe端点设备是否异常离线,在图1和图2所示的实施例中,模拟响应模块160确定自身是否接收到PCIe端点设备130的异常离线通知(例如PCIe端点设备被拔出系统的中断通知),根据所述PCIe端点设备130的异常离线通知确定所述PCIe端点设备130发生异常离线。上述预设的触发条件还可以是所述访问请求的计时器超时,此种情况下,模拟响应模块160还用于针对PCIe端点设备130发送的访问请求启动计时器,在该计时器超时后,确定PCIe端点设备130是否发送对访问请求的响应消息,在图1和图2所示的实施例中,模拟响应模块160在接收到CPU110发送的访问请求并缓存该访问请求后,即针对该访问请求启动计时器。

本发明实施例,模拟响应模块通过对访问请求的报文状态的监控,在预设的触发条件达到时,如果访问请求的报文状态仍然为“未完成”状态,模拟响应模块就将模拟生成的访问请求的模拟响应消息发送给CPU,使得CPU不再继续对该访问请求对应的流程是否完成进行计时,并清除自身缓存的该访问请求,保持CPU内部处理的正常运行,避免了CPU访问请求超时不完成所导致的MCE复位问题。

在上述各实施例中,模拟响应模块160向CPU110发送的访问请求的模拟响应消息可以包括第一类型模拟响应消息或第二类型模拟响应消息,所述第一类型模拟响应消息指示所述PCIe端点设备130不支持所述访问请求,所述第二类型模拟响应消息指示所述PCIe端点设备130异常,所述CPU110接收到访问请求的模拟响应消息之后,还用于根据所述第一类型模拟响应消息或所述第二类型模拟响应消息,确定对所述PCIe端点设备130的访问失败,并据此不再启动访问数据的读取的操作。本实施例中由于进一步指明了模拟响应消息的类型,使得CPU根据该模拟响应消息确认本次访问流程完成的同时,还能够确认本次访问并非一次成功的访问,并据此不去执行对本次访问相关数据的下一步的操作(例如读取操作),因此本发明实施例在PCIe端点设备异常离线的情况下的维持CPU正常处理流程的同时,还避免了CPU去执行一些不必要的操作,从而避免系统资源的浪费。

在本发明的又一个实施例中,所述CPU110针对被访问的PCIe端点设备可能具体不止一条访问请求,例如发送多条访问请求,此种情况下,模拟响应模块160可以对所述CPU发送的所述多条访问请求的每条的报文状态都进行监控,例如缓存所述多条访问请求的每一条,对自身是否接收到每一条访问请求的响应消息进行监控,在预设的触发条件达到时,对没有接收到响应消息的访问请求的数量进行统计,得到所述多条访问请求中报文状态是“未完成”的访问请求的数量,若所述数量超过第一门限值,则获取所述访问请求的模拟响应消息,并向所述处理器发送所述模拟响应消息。在本实施例中,并非只要有一条访问请求没有接收到的响应消息,CPU就会产生MCE复位,实际上CPU具有一定的容忍量,只有在不返回响应消息的访问请求数量累计到一定数值之后,才会产生MCE复位,因此,本实施例设置第一门限值,只有没有接收到响应消息的访问请求数量超过这个第一门限值时,模拟响应模块160才将模拟响应消息发送给CPU,以避免CPU的MCE复位。

上述模拟响应模块160可以通过软件或者硬件的方式实现,在本发明提供的一种实施例中,可以采用FPGA(Field-Programmable Gate Array),即现场可编程门阵列来实现。

图1和图2中描述的CPU110也只是一种示例,例如还可以是特定集成电路,不管哪一种形式,其在计算机系统中,实现处理器的功能。本发明实施例所述的计算机系统,可以是计算型服务器,也可以是管理路由的服务器,例如交换机,本发明对计算机系统的具体实现形式不做限定。

PCIe端点设备的访问流程

下面对PCIe端点设备的访问流程实施例进行介绍,如图3所示,为本发明实施例提供的对PCIe端点设备进行访问的流程,该PCIe端点设备通过PCIe总线接入计算机系统,包括:

S301:在所述计算机系统中的CPU向PCIe端点设备发送访问请求之后,模拟响应模块对所述访问请求的报文状态进行监控。

具体地,所述访问请求的报文状态包括“已完成”或“未完成”,“已完成”表示所述PCIe端点设备已经发送所述访问请求的响应消息,“未完成”表示所述PCIe端点设备未发送所述访问请求的响应消息。

所述模拟响应模块对所述访问请求的报文状态进行监控,可以通过监控自身是否接收到所述PCIe端点设备发送的所述访问请求的响应消息来实现,若所述模拟响应模块接收到所述PCIe端点设备发送的所述访问请求的响应消息,模拟响应模块将所述访问请求的报文状态记录为“已完成”。

进一步地,模拟响应模块可以设置在CPU和PCIe端点设备的信号传输路径上,这样,模拟响应模块可以接收到来自CPU的访问请求,也可以接收到来自PCIe端点设备的访问请求的响应消息,模拟响应模块可以在接收到访问请求后即缓存该访问请求,后续若接收到该访问请求的响应消息,则将缓存的该访问请求打上“已完成”的标记,或者模拟响应模块删除缓存的该访问请求(此种情况下,访问请求的报文状态通过是否缓存访问请求来标记,若缓存访问请求,则表示该访问请求的报文状态未完成,若缓存的访问请求被删除,则表示该访问请求的报文状态已完成)。

S302:当预先设定的触发条件达到时,所述模拟响应模块确定所述访问请求的报文状态。

所述预先设定的触发条件可以是所述访问请求的计时器超时,也可以是接收到PCIe端点设备发生异常离线的通知,实施方式后续实施例将具体介绍。

S303:如果所述访问请求的报文状态是“未完成”,所述模拟响应模块获取所述访问请求的模拟响应消息。

S304:向所述CPU发送所述模拟响应消息。

具体地,模拟响应模块可以获取自身生成的所述访问请求的模拟响应消息,所述模拟响应消息与所述访问请求具有相同的报文头,所述访问请求与所述模拟响应消息互相对应,可以使得CPU认为其之前发出的访问请求对应的流程已经被完成,从而关闭对该访问请求进行计时的计时器,并清除CPU自身缓存的该访问请求,保持了CPU内部的处理正常进行,避免了访问请求在CPU内积累所导致的CPU的MCE复位问题。

本发明实施例中的访问请求的模拟响应消息并非由PCIe端点设备发出,并非所述访问请求真实的响应消息,可以由其他的模块模拟生成,本发明实施例中可以由所述模拟响应模块生成所述访问请求的模拟响应消息。模拟响应模块可以预先生成该访问请求的模拟响应消息,也可以在确定所述访问请求的报文状态是“未完成”时,临时生成该访问请求的模拟响应消息。

本发明实施例,模拟响应模块通过对访问请求的报文状态的监控,在预设的触发条件达到时,如果访问请求的报文状态仍然为“未完成”状态,模拟响应模块就将模拟生成的访问请求的模拟响应消息发送给CPU,使得CPU不再继续对该访问请求对应的流程是否完成进行计时,并清除自身缓存的该访问请求,保持CPU内部处理的正常运行,避免了CPU访问请求超时不完成所导致的MCE复位问题。

结合上述图1或图2所示的计算机系统实施例,当模拟响应模块设置于CPU和PCIe端点设备之间的信号传输路径中,本发明实施例一个具体的访问流程如图4所示,包括:

S401:计算机系统中的CPU获得操作指令,所述操作指令指示所述CPU对PCIe端点设备进行访问,所述CPU向所述PCIe端点设备发送访问请求。

其中,当上游端点产生对PCIe端点设备的读操作或写操作需求时,所述PCIe端点设备的驱动模块接收上游端点的调用,根据预先配置的访问接口生成对PCIe端点设备进行访问的操作指令,CPU获得该操作指令。

S402:所述模拟响应模块接收来自所述CPU的所述访问请求,缓存所述访问请求。

由于所述模拟响应模块设置于CPU和PCIe端点设备之间的信号传输路径中,其能够接收到来自CPU的访问请求;

S403:所述模拟响应模块生成所述访问请求的模拟响应消息,并将所述模拟响应消息与所述访问请求关联缓存。

模拟响应模块可以在本步骤403中,即缓存所述访问请求的时候,提前生成所述访问请求的模拟响应消息,也可以在后续步骤中确定需要模拟响应消息的时候,再生成所述模拟响应消息。

S404:所述模拟响应模块向所述PCIe端点设备转发所述访问请求。

S405:所述模拟响应模块监控所述访问请求的报文状态。

具体地,所述模拟响应模块监控自身是否接收到所述PCIe端点设备发送的所述访问请求的响应消息,若所述模拟响应模块接收到所述PCIe端点设备发送的所述访问请求的响应消息,模拟响应模块将缓存的所述访问请求打上“已完成”的标记,或者模拟响应模块删除缓存的所述访问请求。

所述模拟响应模块可以在步骤404后,即其向所述PCIe端点设备转发所述访问请求之后启动所述监控,也可以在步骤401后,即CPU向所述PCIe端点设备发送所述访问请求之后就启动所述监控。

S406:所述模拟响应模块接收到所述PCIe端点设备异常离线的通知,确定所述访问请求的报文状态。

本实施例中,预先设定的触发条件是接收到所述PCIe端点设备异常离线的通知。由于模拟响应模块设置CPU和PCIe端点设备之间的信号传输路径中,若PCIe端点设备被拔出,向CPU传送的PCIe端点设备异常离线的通知会经过模拟响应模块,该模拟响应模块接收该PCIe端点设备异常离线的通知,确定预先设定的触发条件达到,查询所述访问请求的报文状态,确定所述报文状态。

S407:若所述模拟响应模块确定所述访问请求的报文状态是“未完成”,所述模拟响应模块获取自身缓存的所述访问请求的模拟响应消息,并向所述CPU发送所述模拟响应消息。

本实施例中,所述模拟响应消息可以是第一类型模拟响应消息,指示所述PCIe端点设备130不支持所述访问请求,例如所述模拟响应消息携带Unsupported Request(UR)指示,或者,所述模拟响应消息可以是第二类型模拟响应消息,指示所述PCIe端点设备130异常,例如所述模拟响应消息携带Completer Abort(CA)指示。

S408:所述CPU接收到所述模拟响应消息,根据所述模拟响应消息确定所述访问请求对应的流程被完成,清除自身缓存的所述访问请求。

由于所述模拟响应消息与所述访问请求具有相同的报文头,访问请求与模拟响应消息相互对应,可以使得CPU认为其之前发出的访问请求对应的流程已经被完成,从而关闭对该访问请求进行计时的计时器,并清除CPU自身缓存的该访问请求,最终保持了CPU内部的处理正常进行,避免了访问请求在CPU内积累所导致的CPU的MCE复位问题。

进一步,由于该模拟响应消息还可能携带UR或者CA指示,模拟响应模块还可以进一步根据所述模拟响应消息携带的指示信息,确定对所述PCIe端点设备的访问失败,以及进行访问错误处理。所述访问错误处理可以包括:抑制所述CPU对所述访问请求相关的进一步操作(例如数据的读取),或者将所述PCIe端点设备的状态记录为发生异常离线,从而使得CPU中止对所述PCIe端点设备进行后续访问操作。

S409:所述模拟响应模块将所述PCIe端点设备异常离线的通知转发给所述CPU。

所述CPU后续可以根据所述PCIe端点设备异常离线的通知,将所述PCIe端点设备对应的物理设备进行下电操作,以及相关的资源释放操作。

本发明实施例中,模拟响应模块通过对访问请求的报文状态的监控,在接收到被访问的PCIe端点设备异常离线的通知时,如果访问请求的报文状态仍然为“未完成”状态,模拟响应模块就将模拟生成的访问请求的模拟响应消息发送给CPU,使得CPU不会对该访问请求对应的流程是否完成进行超时计时,保持CPU内部处理的正常运行,避免了CPU内部访问请求超时不完成所导致的MCE复位问题。本发明实施例中,模拟响应模块设置CPU和PCIe端点设备之间的信号传输路径中,可以通过自身是否接收到被访问的PCIe端点设备发出的访问请求的响应消息实现对访问请求报文状态的监控,实现起来方便灵活,效率较高。

另外,本实施例中由于进一步指明了模拟响应消息的类型,使得CPU根据该模拟响应消息确认本次访问流程完成的同时,还能够确认本次访问并非一次成功的访问,并据此不去执行对本次访问相关数据的下一步的操作(例如读取操作),因此本发明实施例在PCIe端点设备异常离线的情况下的维持CPU正常处理流程的同时,还避免了CPU去执行一些不必要的操作,从而避免系统资源的浪费。

本发明方法实施例二,本实施例中模拟响应模块仍然设置于CPU和PCIe端点设备之间的信号传输路径中,如图5所示,该方法包括:

S501:计算机系统中的CPU获得操作指令,所述操作指令指示所述CPU对PCIe端点设备进行访问,所述CPU向所述PCIe端点设备发送访问请求。

S502:所述模拟响应模块接收来自所述CPU的所述访问请求,缓存所述访问请求。

由于所述模拟响应模块设置CPU和PCIe端点设备之间的信号传输路径中,其能够接收到来自CPU的访问请求。

S503:所述模拟响应模块针对所述访问请求启动计时器,并开始计时。

S504:所述模拟响应模块生成所述访问请求的模拟响应消息,并将所述模拟响应消息与所述访问请求关联缓存。

模拟响应模块可以在本步骤503中,即缓存所述访问请求的时候,提前生成所述访问请求的模拟响应消息,也可以在后续步骤中确定需要模拟响应消息的时候,再生成所述模拟响应消息。

上述步骤503和步骤504执行没有先后之分,模拟响应模块可以在接收到所述访问请求之后同时开始执行步骤503和504,也可以先执行503再执行504。

S505:所述模拟响应模块向所述PCIe端点设备转发所述访问请求。

S506:所述模拟响应模块监控所述访问请求的报文状态。

具体地,所述模拟响应模块监控自身是否接收到所述PCIe端点设备发送的所述访问请求的响应消息,若所述模拟响应模块接收到所述PCIe端点设备发送的所述访问请求的响应消息,模拟响应模块将缓存的所述访问请求打上“已完成”的标记,或者模拟响应模块删除缓存的所述访问请求。

S507:所述模拟响应模块在所述计时器超时后,确定所述访问请求的报文状态。

本实施例中,预设的触发条件是访问请求的计时器是否超时,所述计时器的计时时间根据经验值设定,该经验值是PCIe端点设备发送访问请求的响应消息的最大容忍时间,一般情况下,如果PCIe端点设备保持正常,则在该经验值时间内,模拟响应模块一定可以接收到其发出的访问请求的响应消息。

S508:若所述模拟响应模块确定所述访问请求的报文状态是“未完成”,所述模拟响应模块获取自身缓存的所述访问请求的模拟响应消息,并向所述CPU发送所述模拟响应消息。

当计时器超时后,模拟响应模块查询所述访问请求的报文状态,若确定所述报文状态是“未完成”,那么基本可以确定被访问的PCIe端点设备异常离线,CPU不可能接收到访问请求的响应消息,此时,为了避免CPU缓存的访问请求超时所导致的MCE复位问题,模拟响应模块将提前生成的模拟响应消息发送给CPU。

本实施例中,所述模拟响应消息可以是第一类型模拟响应消息,指示所述PCIe端点设备130不支持所述访问请求,例如所述模拟响应消息携带Unsupported Request(UR)指示,或者所述模拟响应消息可以是第二类型模拟响应消息,指示所述PCIe端点设备130异常,例如所述模拟响应消息携带Completer Abort(CA)指示。

S509:所述CPU接收到所述模拟响应消息,根据所述模拟响应消息确定所述访问请求对应的流程被完成,清除自身缓存的所述访问请求。

由于所述模拟响应消息与所述访问请求具有相同的报文头,访问请求与模拟响应消息相互对应,可以使得CPU认为其之前发出的访问请求对应的流程已经被完成,从而关闭对该访问请求进行计时的计时器,并清除CPU自身缓存的该访问请求,最终保持了CPU内部的处理正常进行,避免了访问请求在CPU内积累所导致的CPU的MCE复位问题。

进一步,由于该模拟响应消息还可能携带UR或者CA指示,模拟响应模块还可以进一步根据所述模拟响应消息携带的指示信息,进行访问错误处理;所述访问错误处理可以包括:抑制所述CPU对所述访问请求相关的进一步操作(例如数据的读取),或者将所述PCIe端点设备的状态记录为发生异常离线,从而使得CPU中止对所述PCIe端点设备进行后续访问操作。

S510:所述模拟响应模块确定所述PCIe端点设备的状态。

所述模拟响应模块进一步确定所述PCIe端点设备的状态是异常离线还是发生故障,如果是所述PCIe端点设备异常离线,执行步骤511,如果是所述PCIe端点设备发生故障,执行步骤512。

所述模拟响应模块可以确定自身是否接收到PCIe端点设备异常离线的通知,根据是否接收到所述通知确定所述PCIe端点设备是否异常离线,也可以向PCIe端点设备发送探测消息,用以确定所述PCIe端点设备的状态。

S511:如果所述模拟响应模块确定所述PCIe端点设备异常离线,向所述CPU发送所述PCIe端点设备异常离线的通知,以使得所述CPU根据所述PCIe端点设备异常离线的通知,将所述PCIe端点设备对应的物理设备进行下电操作以及资源释放操作。

S512:如果所述模拟响应模块确定所述PCIe端点设备发生故障,修复所述PCIe端点设备的故障。

本发明实施例中,模拟响应模块通过对访问请求的报文状态的监控,在计时器超时后,如果访问请求的报文状态仍然为“未完成”状态,模拟响应模块就将模拟生成的访问请求的模拟响应消息发送给CPU,使得CPU不会对该访问请求对应的流程是否完成进行超时计时,保持CPU内部处理的正常运行,避免了CPU内部访问请求超时不完成所导致的MCE复位问题。

另外,本实施例中由于进一步指明了模拟响应消息的类型,使得CPU根据该模拟响应消息确认本次访问流程完成的同时,还能够确认本次访问并非一次成功的访问,并据此不去执行对本次访问相关数据的下一步的操作(例如读取操作),因此本发明实施例在PCIe端点设备异常离线的情况下的维持CPU正常处理流程的同时,还避免了CPU去执行一些不必要的操作,从而避免系统资源的浪费。

本发明装置实施例

本发明实施例提供的模拟响应装置,应用于计算机系统中,PCIe端点设备通过PCIe总线接入所述计算机系统中,如图6所示,所述装置与PCIe端点设备130和CPU110交互,该装置包括:

监控单元601,用于在所述计算机系统中的CPU110向所述PCIe端点设备发送访问请求之后,对所述访问请求的报文状态进行监控,其中,所述访问请求的报文状态包括“已完成”或“未完成”,所述“未完成”表示所述PCIe端点设备未发送所述访问请求的响应消息;

确定单元602,用于当预设的触发条件达到时,根据所述监控单元601的监控结果确定所述访问请求的报文状态;

获取单元603,用于在所述确定单元602确定所述访问请求的报文状态是“未完成”时,获取所述访问请求的模拟响应消息;

响应单元604,用于向所述CPU110发送所述获取单元603获取的所述模拟响应消息。

进一步,在本发明的又一装置实施例中,如图7所示,该装置还可以进一步包括:

交互单元605,用于接收所述CPU110发送的访问请求,向所述PCIe端点设备130转发所述访问请求;

则所述监控单元601具体用于监控所述交互单元605是否接收到所述PCIe端点设备发送的所述访问请求的响应消息,若接收到所述PCIe端点设备发送的所述访问请求的响应消息,将所述访问请求的报文状态记录为“已完成”。

进一步,在本发明的又一装置实施例中,所述监控单元601还用于缓存所述交互单元605接收到的所述访问请求;

所述监控单元601具体用于在所述交互单元605接收到所述PCIe端点设备发送的所述访问请求的响应消息时,将所述缓存的所述访问请求的打上“已完成”的标记,或者删除缓存的所述访问请求;

所述确定单元602具体用于在预设的触发条件达到时,查询所述监控单元601缓存的所述访问请求,若缓存的所述访问请求的标记为“已完成”或者缓存的所述访问请求已经被删除,则确定所述访问请求的报文状态是“已完成”,若缓存的所述访问请求的标记为“未完成”或者缓存的所述访问请求没有“已完成”标记,则确定所述访问请求的报文状态是“未完成”。

进一步,在本发明的又一装置实施例中,所述监控单元601还用于,在所述交互单元605接收到所述CPU110发送的所述访问请求之后,生成所述访问请求的模拟响应消息,并缓存所述访问请求的模拟响应消息;

则,所述获取单元603具体用于获取所述监控单元601缓存的所述访问请求的模拟响应消息。

进一步,在本发明的又一装置实施例中,所述访问请求的模拟响应消息包括第一类型模拟响应消息或第二类型模拟响应消息,所述第一类型模拟响应消息指示所述PCIe端点设备不支持所述访问请求,所述第二类型模拟响应消息指示所述PCIe端点设备异常。

进一步,在本发明的又一装置实施例中,所述预设的触发条件为所述PCIe端点设备发生异常离线;

所述监控单元601还用于:监测所述PCIe端点设备是否发生异常离线,在确定所述PCIe端点设备发生异常离线时,通知所述确定单元602执行所述确定所述访问请求的报文状态的步骤。

进一步,在本发明的又一装置实施例中,所述监控单元601具体用于:确定所述交互单元605是否接收到所述PCIe端点设备的异常离线通知,如果是,确定所述PCIe端点设备发生异常离线。

进一步,在本发明的又一装置实施例中,所述交互单元605还用于:

向所述CPU110转发所述PCIe端点设备的异常离线通知,以使得所述CPU110根据接收到的所述PCIe端点设备130的异常离线通知,将所述PCIe端点设备130对应的物理设备进行下电操作。

进一步,在本发明的又一装置实施例中,所述预设的触发条件为所述访问请求的计时器超时;

所述监控单元601还用于:

针对所述CPU110发送的所述访问请求启动计时器进行计时,在所述计时器超时后,通知所述确定单元602执行所述确定所述访问请求的报文状态的步骤。

所述监控单元601还用于:

确定所述PCIe端点设备的状态,若确定所述PCIe端点设备的状态是异常离线,则通知所述交互单元605向所述CPU110发送所述PCIe端点设备130的异常离线通知,以使得所述CPU110根据接收到的所述PCIe端点设备130的异常离线通知,将所述PCIe端点设备130对应的物理设备进行下电操作。

进一步,在本发明的又一装置实施例中,所述CPU110向所述PCIe端点设备130发送多条访问请求;

所述监控单元601具体用于对所述多条访问请求的每条访问请求的报文状态进行监控;

所述确定单元602具体用于在预设的触发条件达到时,统计所述多条访问请求中未接收到响应消息的访问请求的数量,确定所述数量是否超过第一门限值;

所述获取单元603具体用于在所述数量超过第一门限值时,获取所述访问请求的模拟响应消息。

如图8,为本发明实施例提供的计算机的结构组成示意图。本发明实施例的计算机可包括:

处理器801、存储器802、系统总线804和通信接口805。处理器801、存储器802和通信接口805之间通过系统总线804连接并完成相互间的通信。

处理器801可能为单核或多核中央处理单元,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成电路。

存储器802可以为高速RAM存储器,也可以为非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。

存储器802用于计算机执行指令803。具体的,计算机执行指令803中可以包括程序代码。

当计算机运行时,处理器801运行计算机执行指令803,可以执行图3-图5任意之一所述的方法流程,具体在此不再重复描述。

本领域普通技术人员将会理解,本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此外,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。

计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包含但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合,如随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者快闪存储器)、光纤、便携式只读存储器(CD-ROM)。

计算机中的处理器读取存储在计算机可读介质中的计算机可读程序代码,使得处理器能够执行在流程图中每个步骤、或各步骤的组合中规定的功能动作;生成实施在框图的每一块、或各块的组合中规定的功能动作的装置。

计算机可读程序代码可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为单独的软件包、部分在用户的计算机上并且部分在远程计算机上,或者完全在远程计算机或者服务器上执行。也应该注意,在某些替代实施方案中,在流程图中各步骤、或框图中各块所注明的功能可能不按图中注明的顺序发生。例如,依赖于所涉及的功能,接连示出的两个步骤、或两个块实际上可能被大致同时执行,或者这些块有时候可能被以相反顺序执行。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1