一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种异常处理方法、装置、PCIe卡设备及存储介质与流程

2022-12-07 02:07:46 来源:中国专利 TAG:

一种异常处理方法、装置、pcie卡设备及存储介质
技术领域
1.本发明涉及pcie设备领域,特别涉及一种异常处理方法、装置、pcie卡设备及计算机可读存储介质。


背景技术:

2.pcie卡设备(peripheral component interconnect express,高速串行计算机扩展总线标准)是存储设备中的常见设备。相关技术中,在支持热插拔的pcie卡设备中,用户态驱动在检测到卡设备出现异常时,通常会对存储系统进行重启,以对pcie卡设备进行刷新,然而这种方式不仅降低了对pcie卡设备进行异常处理的效率,同时还增加了存储系统整体的不稳定性,不利于系统的运行维护。


技术实现要素:

3.本发明的目的是提供一种异常处理方法、装置、pcie卡设备及计算机可读存储介质,可将用户态驱动与pcie卡设备完全隔离开来,避免用户态驱动与pcie卡设备之间的任何交互,并在隔离状态下对pcie卡设备进行重新初始化,进而可提升pcie卡设备异常问题的处理效率。
4.为解决上述技术问题,本发明提供一种异常处理方法,应用于pcie驱动,所述方法包括:
5.在检测到pcie卡设备出现异常时,向用户态驱动发送与所述pcie卡设备对应的链路中断事件,以使所述用户态驱动停止向所述pcie卡设备下发io操作;
6.屏蔽所述pcie卡设备的下行端口,以屏蔽与所述下行端口连接的下行设备向所述用户态驱动发送的事件信息;
7.在屏蔽完成时,对所述pcie卡设备进行重新初始化。
8.可选地,所述用户态驱动停止向所述pcie卡设备下发io操作,包括:
9.所述用户态驱动对命令队列中需下发至所述pcie卡设备的io操作进行丢弃处理。
10.可选地,在向用户态驱动发送与所述pcie卡设备对应的链路中断事件之后,还包括:
11.所述用户态驱动确定已发送至所述pcie卡设备但未收到回复的异常io操作;
12.相应的,在对所述pcie卡设备进行重新初始化之后,还包括:
13.在完成对所述pcie卡设备的初始化时,向所述用户态驱动发送与所述pcie卡设备对应的链路连接事件,以使所述用户态驱动重新下发所述异常io操作。
14.可选地,在向用户态驱动发送与所述pcie卡设备对应的链路中断事件之后,还包括:
15.在接收到所述用户态驱动发送的链路中断确认请求时,向所述用户态驱动返回链路中断确认信息。
16.可选地,在检测到pcie卡设备出现异常之前,还包括:
17.周期性接收所述pcie卡设备发送的心跳信息;
18.当检测到所述pcie卡设备未在预设周期时间内发送所述心跳信息时,确定所述pcie卡设备出现异常。
19.可选地,在检测到pcie卡设备出现异常之前,还包括:
20.读取所述pcie卡设备的内存数据,并在确定所述内存数据无法读取或所述内存数据错误时,确定所述pcie卡设备出现异常。
21.可选地,所述屏蔽所述pcie卡设备的下行端口,包括:
22.对所述下行端口进行软件屏蔽,并模拟所述用户态驱动对所述下行设备向所述用户态驱动发送的事件信息进行响应。
23.本发明还提供一种异常处理装置,应用于pcie驱动,所述方法包括:
24.事件发送模块,用于在检测到pcie卡设备出现异常时,向用户态驱动发送与所述pcie卡设备对应的链路中断事件,以使所述用户态驱动停止向所述pcie卡设备下发io操作;
25.屏蔽模块,用于屏蔽所述pcie卡设备的下行端口,以屏蔽与所述下行端口连接的设备向所述用户态驱动发送的事件信息;
26.初始化模块,用于在屏蔽完成时,对所述pcie卡设备进行重新初始化。
27.本发明还提供一种pcie卡设备,包括:
28.存储器,用于存储计算机程序;
29.处理器,用于执行所述计算机程序时实现如上所述的异常处理方法。
30.本发明还提供一种计算机可读存储介质,,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上所述的异常处理方法。
31.本发明提供一种异常处理方法,应用于pcie驱动,所述方法包括:在检测到pcie卡设备出现异常时,向用户态驱动发送与所述pcie卡设备对应的链路中断事件,以使所述用户态驱动停止向所述pcie卡设备下发io操作;屏蔽所述pcie卡设备的下行端口,以屏蔽与所述下行端口连接的下行设备向所述用户态驱动发送的事件信息;在屏蔽完成时,对所述pcie卡设备进行重新初始化。
32.可见,本发明中的pcie驱动在检测到pcie卡设备出现异常时,首先会向用户态驱动发送链路中断事件,以使用户态驱动停止向pcie卡设备下发io操作;随后,pcie驱动还会将pcie卡设备中的下行端口进行屏蔽,以避免与下行端口连接的下行设备向用户态驱动发送事件信息,以及避免用户态驱动获取到这些设备的相关信息。换句话说,本发明可通过pcie驱动对用户态驱动和pcie卡设备进行双向软件屏蔽,以将用户态驱动与pcie卡设备及与pcie卡设备的下行端口连接的下行设备完全隔离开来,避免用户态驱动与pcie卡设备和下行设备进行通信交互,进而营造出pcie卡设备已与用户态设备物理断开的假象,进而便可直接对pcie卡设备进行重新初始化,以此实现在不重新启动存储系统的前提下对pcie卡设备进行重新初始化,进而可提升处理pcie卡设备异常问题的效率。本发明还提供一种异常处理装置、pcie卡设备及计算机可读存储介质,具有上述有益效果。
附图说明
33.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
34.图1为本发明实施例所提供的一种异常处理方法的流程图;
35.图2为本发明实施例所提供的一种异常处理装置的结构框图。
具体实施方式
36.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.相关技术中,在支持热插拔的pcie卡设备中,用户态驱动在检测到卡设备出现异常时,通常会对存储系统进行重启,以对pcie卡设备进行刷新。然而这种方式容易影响其他正常卡的正常工作,例如存储系统上有多张卡,假若每张卡上均处理有大量的io操作,当某张卡出现异常需要重新系统时,其它卡不仅会增加工作量,影响存储系统的整体性能,甚至在其他卡也出现异常时,容易对存储系统的整体稳定性造成影响。换句话说,这种方式不仅降低了对pcie卡设备进行异常处理的效率,同时还增加了存储系统整体的不稳定性,不利于系统的运行维护。有鉴于此,本发明可提供一种异常处理方法,可将用户态驱动与pcie卡设备完全隔离开来,避免用户态驱动与pcie卡设备之间的任何交互,并在隔离状态下对pcie卡设备进行重新初始化,进而可提升pcie卡设备异常问题的处理效率。请参考图1,图1为本发明实施例所提供的一种异常处理方法的流程图,该方法可以包括:
38.s101、在检测到pcie卡设备出现异常时,向用户态驱动发送与pcie卡设备对应的链路中断事件,以使用户态驱动停止向pcie卡设备下发io操作。
39.为便于理解,首先对本发明实施例所适用的硬件环境进行简单介绍。本发明实施例主要涉及到用户态驱动、pcie驱动及pcie卡设备,其中用户态驱动具体设置于主机设备,而pcie驱动则设置于pcie卡设备中。由于pcie卡设备需通过pcie驱动与用户态驱动进行交互,因此pcie驱动相当于用户态驱动与pcie卡设备之间的中间装置。此外,还需指出的是,pcie卡设备中还设置有下行端口(downstream port),该下行端口可接入其他下行设备;同时,用户态驱动也可通过pcie卡设备与这些通过下行端口接入的下行设备进行交互。本发明实施例并不限定具体的用户态驱动、pcie驱动及pcie卡设备,可根据实际应用需求进行设定。
40.基于上述硬件系统描述,在本发明实施例中,pcie驱动在检测到pcie卡设备存在异常时,首先会对用户态驱动侧进行屏蔽,避免用户态驱动向pcie卡设备下发任何信息。具体的,该驱动在确定pcie卡设备出现异常时,可首先向用户态驱动发送与本pcie卡设备对应的链路中断事件(link down),以通知用户态驱动停止向该pcie卡设备下发io操作,其中链路中断事件用于通知用户态驱动本pcie卡设备的下行端口处于链路中断状态。应当特别指出的是,此处的io操作为经过pcie卡设备的io操作,即包含直接发向pcie卡设备的io操
作,以及发往与pcie卡设备的下行端口连接的下行设备的io操作。可以理解的是,用户态驱动在接收到链路中断事件时,首先应当停止生成上述io操作;此外,对于已经写入命令队列中的、下发至该pcie卡设备的io操作,用户态驱动也应当进行丢弃处理(abort)。需要说明的是,本发明实施例并不限定链路中断事件的具体形式,可参考pcie设备的相关技术。本发明实施例也不限定丢弃处理的具体执行方式,可参考用户态驱动的相关技术。
41.在一种可能的情况中,用户态驱动停止向pcie卡设备下发io操作,可以包括:
42.步骤11:用户态驱动对命令队列中需下发至pcie卡设备的io操作进行丢弃处理。
43.进一步,应当指出的是,由于io操作是一种带回复的操作,即io操作的执行者需向该操作的发起者返回响应信息,以告知发起者当前io操作的执行情况(如完成、失败等)。考虑到在接收到链路中断事件时,用户态驱动可能已经向pcie卡设备下发了若干的io操作,且未接收到pcie卡设备或与其下行端口连接的下行设备对这些io操作的响应,此时用户态驱动可对此类异常的io操作进行统计确定,以等待pcie卡设备完成初始化之后,再对这些异常io操作进行重新下发处理。可以理解的是,pcie驱动在完成对pcie卡设备的重新初始化后,应当通知用户态驱动该设备重新上线,以使用户态驱动执行上述重发处理。pcie驱动具体可通过向用户态驱动发送链路连接事件(link up)的方式实现上述通知效果。需要说明的是,本发明实施例并不限定链路连接事件的具体形式,可参考pcie设备的相关技术。
44.在一种可能的情况中,在向用户态驱动发送与pcie卡设备对应的链路中断事件之后,还可以包括:
45.步骤21:用户态驱动确定已发送至pcie卡设备但未收到回复的异常io操作;
46.相应的,在对pcie卡设备进行重新初始化之后,还可以包括:
47.步骤22:在完成对pcie卡设备的初始化时,向用户态驱动发送与pcie卡设备对应的链路连接事件,以使用户态驱动重新下发异常io操作。
48.当然,用户态驱动也可以采取其他方式处理上述异常io操作,也可参考用户态驱动的相关技术,并根据实际应用需求进行设置。
49.进一步,在本发明实施例中,pcie卡设备的异常由pcie驱动检测。采用驱动进行异常检测的好处在于,可在用户态驱动感知到异常情况之前,及时检测出pcie卡设备的异常情况并进行修复,以避免为存储系统的正常工作带来过大的负面影响。需要说明的是,本发明实施例并不限定pcie驱动如何感知或主动检测pcie卡设备的异常情况。例如,可在pcie卡设备与pcie驱动之间可设置心跳机制,即pcie卡设备可以周期性地向pcie驱动发送心跳信息。假若pcie驱动未在预设周期时间内接收到上述心跳信息,则可确定pcie卡设备存在异常情况,需要进行异常修复。
50.在一种可能的情况中,在检测到pcie卡设备出现异常之前,还可以包括:
51.步骤31:周期性接收pcie卡设备发送的心跳信息;
52.步骤32:当检测到pcie卡设备未在预设周期时间内发送心跳信息时,确定pcie卡设备出现异常。
53.需要说明的是,本发明实施例并不限定具体的预设周期时间,可根据实际应用需求进行设定。可以理解的是,预设周期时间越短,则pcie驱动能够更快地发现pcie卡设备的异常,但相应会占用较多的计算量,因此可在平衡计算量及异常检测需求之后设置上述预设周期时间。本发明实施例也不限定心跳信息的具体形式,也可根据实际应用需求进行设
定。进一步,pcie驱动也可主动检测pcie卡的异常情况,例如该驱动可主动读取pcie卡设备的内存数据,假若确定该内存数据存在错误(如包含乱码),或是根本无法获取到该内存数据,则说明pcie卡设备存在异常,需要进行异常修复。
54.在一种可能的情况中,在检测到pcie卡设备出现异常之前,还可以包括:
55.步骤41:读取pcie卡设备的内存数据,并在确定内存数据无法读取或内存数据错误时,确定pcie卡设备出现异常。
56.需要说明的是,本发明实施例并不限定pcie驱动需要根据pcie卡设备中的哪些内存数据确定该设备异常,也不限定该内存数据的读取动作是否独立执行,还是与其它操作一同执行,例如当某些特定操作需要基于pcie卡设备的内存数据执行时,可在执行这一特定操作的过程中,同时对pcie卡设备的异常情况进行检测,可根据实际应用需求进行设定。
57.s102、屏蔽pcie卡设备的下行端口,以屏蔽与下行端口连接的设备向用户态驱动发送的事件信息。
58.在本发明实施例中,pcie驱动会进一步对下行端口一侧进行屏蔽。这是由于pcie卡设备的下行端口并未实现物理断开,换句话说,假若不对下行端口进行屏蔽,则用户态驱动还是可以和pcie卡设备及其下行设备进行交互,并且可以查看该pcie卡设备的下行端口中接入了哪些下行设备,以及获取到这些下行设备的具体信息,而上述这些交互容易对pcie卡设备的初始化过程造成干扰;此外,考虑到用户态驱动可能已下发部分未被pcie卡设备或通过下行端口接入的下行设备回复的异常io操作,而pcie卡设备及下行设备对这些异常io操作的响应也会对pcie卡设备的重新初始化造成干扰;此外,上述下行设备也可能主动向用户态驱动发送事件信息,而这一发送动作也会对pcie卡设备的重新初始化造成干扰,因此pcie驱动需要对下行端口进行屏蔽,以避免用户态驱动与pcie卡设备及其下行设备之间发生任何交互。
59.进一步,可以理解的是,在pcie卡设备进行重新初始化的过程中,上述下行设备实际上仍处于工作状态,即会通过pcie卡设备向用户态驱动发送事件信息。为避免对上述下行设备的正常工作造成干扰,在本发明实施例中,pcie驱动还需要接管经过上述下行接口的所有事件,即对事件链表进行接管,以防止发生干扰。具体的,pcie驱动在接收到下行设备向用户态驱动发送的事件信息时,需要模拟用户态驱动对这些事件信息进行响应,以确保下行设备能够完成相应操作。需要说明的是,本发明实施例并不限定上述下行设备具体发送的事件信息,也不限定pcie驱动如何模拟用户态驱动对各个下行设备所发送的事件信息进行响应,可参考用户态驱动的相关技术。
60.在一种可能的情况中,屏蔽pcie卡设备的下行端口,可以包括:
61.步骤51:对下行端口进行软件屏蔽,并模拟用户态驱动对下行设备向用户态驱动发送的事件信息进行响应。
62.需要说明的是,本发明实施例并不限定对下行端口进行软件屏蔽的具体方式,可参考pcie设备的相关技术。
63.进一步,用户态驱动还可能向pcie卡设备下发其他信息,而pcie驱动还需要将用户态驱动所下发的其他信息与pcie卡设备隔离开来。例如,某些用户态驱动在接收到链路中断事件时,还需向pcie卡设备发送一个链路中断确认请求,以确认后者的中断情况。此时,为避免pcie卡设备及与其下行端口连接的下行设备回复这一请求,pcie驱动还需对
pcie卡设备及下行设备屏蔽这一请求,并向用户态驱动返回一个链路中断确认信息(ack),以告知用户态驱动本pcie卡设备已断开。
64.在一种可能的情况中,在向用户态驱动发送与pcie卡设备对应的链路中断事件之后,还可以包括:
65.步骤61:在接收到用户态驱动发送的链路中断确认请求时,向用户态驱动返回链路中断确认信息。
66.s103、在屏蔽完成时,对pcie卡设备进行重新初始化。
67.在进行双向软件屏蔽之后,pcie卡设备下的所有下行设备便可被认为已与用户态驱动物理断开。此时,pcie卡设备将不会受到任何干扰,即可开始执行重新初始化动作。需要说明的是,本发明实施例并不限定pcie卡设备的重新初始化流程,可参考pcie卡设备的相关技术。
68.基于上述实施例,本发明中的pcie驱动在检测到pcie卡设备出现异常时,首先会向用户态驱动发送链路中断事件,以使用户态驱动停止向pcie卡设备下发io操作;随后,pcie驱动还会将pcie卡设备中的下行端口进行屏蔽,以避免与下行端口连接的下行设备向用户态驱动发送事件信息,以及避免用户态驱动获取到这些设备的相关信息。换句话说,本发明可通过pcie驱动对用户态驱动和pcie卡设备进行双向软件屏蔽,以将用户态驱动与pcie卡设备及与pcie卡设备的下行端口连接的下行设备完全隔离开来,避免用户态驱动与pcie卡设备和下行设备进行通信交互,进而营造出pcie卡设备已与用户态设备物理断开的假象,进而便可直接对pcie卡设备进行重新初始化,以此实现在不重新启动存储系统的前提下对pcie卡设备进行重新初始化,进而可提升处理pcie卡设备异常问题的效率。
69.基于上述实施例,下面基于具体的例子介绍上述异常处理方法。本方法具体包含三个步骤:
70.1、构造链路中断事件(link down)
71.pcie驱动可按照用户态驱动接收pcie卡事件的格式,向用户态驱动发送链路中断事件,以通知该驱动本pcie卡设备的下行端口处于链路中断状态,此时用户态驱动可能已经下发了一些io在命令队列中,因此在接收到这一事件时,用户态驱动可将命令队列中还未下发至pcie卡设备的io操作做丢弃处理;而对已经下发至pcie卡设备,但仍未接收到该设备回复的异常io操作,则由用户态驱动的上层判断是否需要重新发送。
72.2、接管事件链表
73.由于pcie卡的下行端口并未真正链路中断,用户态驱动还是可以与pcie卡设备进行交互,并且可以查看该设备的下行端口中接入了哪些下行设备,以及获取到这些下行设备的具体信息;且有些用户态驱动在接收到链路中断事件后,可能会向pcie卡设备发送链路中断确认信息,而上述这些交互动作都容易影响到pcie卡设备的初始化过程,因此,为了避免其他命令影响,pcie驱动需要临时屏蔽下行端口下所有设备并接管该下行口所有事件,保证不向驱动传递信息,防止造成干扰。同时,在接收到用户态驱动发送的链路中断确认信息时,pcie驱动应当向用户态驱动返回链路中断确认信息。
74.3、重新初始化卡恢复业务
75.在确保pcie卡设备的下行端口中的所有设备均对驱动不可见时,此时便可默认pcie卡已经没有设备,进而可以放心的初始化卡,走卡初始化流程。
76.下面对本发明实施例提供的异常处理装置、pcie卡设备及计算机可读存储介质进行介绍,下文描述的异常处理装置、pcie卡设备及计算机可读存储介质与上文描述的异常处理方法可相互对应参照。
77.请参考图2,图2为本发明实施例所提供的一种异常处理装置的结构框图,该装置应用于pcie驱动,可以包括:
78.事件发送模块201,用于在检测到pcie卡设备出现异常时,向用户态驱动发送与pcie卡设备对应的链路中断事件,以使用户态驱动停止向pcie卡设备下发io操作;
79.屏蔽模块202,用于屏蔽pcie卡设备的下行端口,以屏蔽与下行端口连接的设备向用户态驱动发送的事件信息;
80.初始化模块203,用于在屏蔽完成时,对pcie卡设备进行重新初始化。
81.可选地,用户态驱动停止向pcie卡设备下发io操作,可以包括:
82.用户态驱动对命令队列中需下发至pcie卡设备的io操作进行丢弃处理。
83.可选地,在向用户态驱动发送与pcie卡设备对应的链路中断事件之后,还可以包括:
84.用户态驱动确定已发送至pcie卡设备但未收到回复的异常io操作;
85.相应的,在对pcie卡设备进行重新初始化之后,还包括:
86.在完成对pcie卡设备的初始化时,向用户态驱动发送与pcie卡设备对应的链路连接事件,以使用户态驱动重新下发异常io操作。
87.可选地,在向用户态驱动发送与pcie卡设备对应的链路中断事件之后,还可以包括:
88.在接收到用户态驱动发送的链路中断确认请求时,向用户态驱动返回链路中断确认信息。
89.可选地,在检测到pcie卡设备出现异常之前,还可以包括:
90.周期性接收pcie卡设备发送的心跳信息;
91.当检测到pcie卡设备未在预设周期时间内发送心跳信息时,确定pcie卡设备出现异常。
92.可选地,在检测到pcie卡设备出现异常之前,还可以包括:
93.读取pcie卡设备的内存数据,并在确定内存数据无法读取或内存数据错误时,确定pcie卡设备出现异常。
94.可选地,屏蔽pcie卡设备的下行端口,可以包括:
95.对下行端口进行软件屏蔽,并模拟用户态驱动对下行设备向用户态驱动发送的事件信息进行响应。
96.本发明实施例还提供一种pcie卡设备,可以包括:
97.存储器,用于存储计算机程序;
98.处理器,用于执行计算机程序时实现如上述的异常处理方法的步骤。
99.由于pcie卡设备部分的实施例与异常处理方法部分的实施例相互对应,因此pcie卡设备部分的实施例请参见异常处理方法部分的实施例的描述,这里不再赘述。
100.本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意实施例的异常处理方法的步骤。
101.由于计算机可读存储介质部分的实施例与异常处理方法部分的实施例相互对应,因此存储介质部分的实施例请参见异常处理方法部分的实施例的描述,这里不再赘述。
102.说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
103.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
104.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
105.以上对本发明所提供的一种异常处理方法、装置、pcie卡设备及存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献