一种超时监测方法及系统与流程

文档序号:11216141阅读:367来源:国知局
一种超时监测方法及系统与流程

本申请涉及计算机领域,特别是涉及一种超时监测方法及系统。



背景技术:

在存储系统中,主机系统软件向存储设备或者下层存储系统发出io请求。系统软件的实例包括存储设备驱动程序、用户态驱动程序、raid管理程序、存储协议栈等。系统软件需要检查每个io请求是否超时。

常用的超时监测机制有多种(参见中国专利cnl03067258b)。例如,维护发出但尚未返回的io请求集合,在每个io请求中记录发出io请求的时间,定期遍历io请求集合,通过io请求中的时间与当前时间进行比较来判断是否超时。又例如,以超时时间为io请求建立索引,定期以当前时间为索引查找io请求,找到的io请求为超时io请求。

在网络通信中,主机系统软件向网卡发出网络报文。系统软件也检查每个报文是否超时。



技术实现要素:

目前,诸如存储设备或网络设备的计算机外围设备的io处理能力越来越强,在超时时间窗口内被发出且尚未完成的io请求会多达千、万、亿乃至更多量级。为每个未完成的io请求检查超时或建立/查询超时索引将消耗大量系统资源。以及当超时事件与io请求同时到来时,急需处理时间索引的竞争问题。

为了解决上述问题,本申请提供一种超时监测方法及系统。

本申请提出一种超时监测系统,包括:

发送端:将待监测内容存入未完成集合,向接收端发送该待监测内容;在预先设置的超时监测时间间隔内,判断未完成集合中待监测内容的数量,做出相应的处理;

接收端:接收发送端发送的待监测内容,并在完成该待监测内容之后,向发送端返回处理完成的消息。

具体的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,发送端包括多个未完成集合,以及与未完成集合相配合的计数器,计数器用于记录未完成的待监测内容的数量。

可选的,发送端设置索引,通过索引能够访问计数器和未完成集合。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

优选的,所述发送端:

预先设置超时监测时间间隔;

响应于要向接收端发送待监测内容,而根据当前时间和超时监测时间间隔获得当前时间段序号;将当前时间段序号与计数器或未完成集合的数量的模作为当前索引;

将待监测内容存入根据当前索引找到与该当前索引对应的计数器和未完成集合。

本申请还提出一种超时监测中待监测内容记录方法,包括:

接收待监测内容;

根据当前索引确定当前索引对应的未完成集合;

将待监测内容写入该未完成集合。

可选的,每个未完成集合都具有一个与之相配合的计数器,计数器用于记录未完成集合中的待监测内容的数量。

可选的,还根据当前索引确定当前索引对应的计数器,对该计数器进行 递增操作。

可选的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

可选的,根据当前索引确定当前索引对应的未完成集合具体为:

预先设置超时监测时间间隔;

根据当前时间和超时监测时间间隔获得当前时间段序号;

将当前时间段序号与计数器或未完成集合的数量的模作为当前索引。

本申请还提出一种超时监测中删除待监测内容的方法,包括:

接收接收端返回的待监测内容处理完成消息;

确定该待监测内容所对应的未完成集合;

将待监测内容从该未完成集合中删除。

可选的,获取该待监测内容对应的索引的方法,为以下之一:

从返回的指示待监测内容处理完成的消息中提取该待监测内容对应的索引,其中在发送给接收端的待监测内容中包含所使用的当前索引,以及在返回的指示待监测内容处理完成的消息中携带所述索引;

或者,收到待监测内容处理完成消息时,遍历多个未完成集合,包含所收到的待监测内容的未完成集合的序号为与该待监测内容相对应的索引;

或者,提供第一集合用于存储待监测内容与索引对,在收到待监测内容处理完成消息时,遍历该第一集合找到与该待监测内容相对应的索引;

或者,在收到待监测内容处理完成消息时,从待监测内容的描述符中获得与该待监测内容相对应的索引,其中在待监测内容的描述符中记录所使用的当前索引。

可选的,还对所述索引对应的计数器进行递减操作。

可选的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或多种。

可选的,其特征在于,所述未完成集合由hash表、数组、线性表或链 表实现。

本申请还提出一种超时监测处理方法,包括:

在到达预定时间间隔时,根据当前索引确定待进行超时监测的未完成合集;

监测待进行超时监测的未完成集合中待监测内容的数量,若数量不为零,则对待进行超时监测的未完成集合中的待监测内容进行处理;

对当前索引进行更新。

可选的,还包括:

根据当前时间和超时监测时间间隔获得当前时间段序号;

将当前时间段序号与计数器或未完成集合的数量的模作为当前索引。

可选的,预定时间间隔是定时器的重置时间。

可选的,对待进行超时监测的未完成集合中的待监测内容进行处理包括:

获取所述未完成集合中的待监测内容的信息;

将所述信息提示给用户。

可选的,将所述信息提示给用户的方式为打印。

可选的,对当前索引进行更新包括:

对当前索引进行递增操作。

可选的,每个未完成集合都具有一个与之相配合的计数器,计数器用于记录未完成集合中的待监测内容的数量。

可选的,根据当前索引确定待进行超时监测的未完成集合包括:

与所述当前索引所对应的时间段相差一个超时时间间隔的时间段所对应的索引为待进行超时监测的未完成集合索引;

根据待进行超时监测的未完成集合索引确定待进行超时监测的未完成集合。

可选的,待监测内容为io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

本申请还提出一种超时监测方法,包括:

设置当前索引;

发出第一待监测内容时,使用当前索引访问第一未完成集合,将对应于第一待监测内容的信息插入第一未完成集合;

收到被处理完成的第二待监测内容时,基于第二待监测内容获取与第二待监测内容相对应的第二索引,并依据第二索引访问第二未完成集合,从第二未完成集合中删除与第二待监测内容相对应的信息;

在进入下一时间段时,基于所述当前时间段所对应的第三索引访问第三未完成集合,第三未完成集合中的元素为超时内容。

可选的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,基于待监测内容获取与待监测内容相对应的索引的方法,为以下之一:

从返回的指示待监测内容处理完成的消息中提取该待监测内容对应的索引,其中在发送给接收端的待监测内容中包含所使用的当前索引,以及在返回的指示待监测内容处理完成的消息中携带所述索引;

或者,收到待监测内容处理完成消息时,遍历多个未完成集合,包含所收到的待监测内容的未完成集合的序号为与该待监测内容相对应的索引;

或者,提供第一集合用于存储待监测内容与索引对,在收到待监测内容处理完成消息时,遍历该第一集合找到与该待监测内容相对应的索引;

或者,在收到待监测内容处理完成消息时,从待监测内容的描述符中获得与该待监测内容相对应的索引,其中在待监测内容的描述符中记录所使用的当前索引。

可选的,当前时间段所对应的第三索引为与所述当前时间段的时间间隔为超时时间间隔的时间段所对应的索引。

可选的,包括:

获取所述第三未完成集合中的待监测内容的信息;

将所述信息提示给用户。

可选的,未完成集合中的与待监测内容相对应的信息为访问待监测内容的地址,以及未完成集合中的与待监测内容相对应的信息的索引为待监测内容的地址。

可选的,基于所述当前时间段所对应的第三索引访问第三未完成集合后,更新当前索引。

本申请还提出一种超时监测中待监测内容记录装置,包括:

信息接收单元,用于接收待监测内容;

定位单元,用于根据当前索引确定当前索引对应的未完成集合;

信息处理单元,用于将待监测内容写入该未完成集合。

可选的,每个未完成集合都具有一个与之相配合的计数器,计数器用于记录未完成集合中的待监测内容的数量。

可选的,定位单元还根据当前索引确定当前索引对应的计数器,并有信息处理单元对该计数器进行递增操作。

可选的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

可选的,定位单元根据当前索引确定当前索引对应的未完成集合具体为:

预先设置超时监测时间间隔;

根据当前时间和超时监测时间间隔获得当前时间段序号;

将当前时间段序号与计数器或未完成集合的数量的模作为当前索引。

本申请还提出一种超时监测中删除待监测内容的装置,包括:

消息接收单元,用于接收接收端返回的待监测内容处理完成消息;

确定单元,用于确定该待监测内容所对应的未完成集合;

数据处理单元,用于将待监测内容从该未完成集合中删除。

可选的,获取该待监测内容对应的索引的方法,为以下之一:

从返回的指示待监测内容处理完成的消息中提取该待监测内容对应的索引,其中在发送给接收端的待监测内容中包含所使用的当前索引,以及在返回的指示待监测内容处理完成的消息中携带所述索引;

或者,收到待监测内容处理完成消息时,遍历多个未完成集合,包含所收到的待监测内容的未完成集合的序号为与该待监测内容相对应的索引;

或者,提供第一集合用于存储待监测内容与索引对,在收到待监测内容处理完成消息时,遍历该第一集合找到与该待监测内容相对应的索引;

或者,在收到待监测内容处理完成消息时,从待监测内容的描述符中获得与该待监测内容相对应的索引,其中在待监测内容的描述符中记录所使用的当前索引。

可选的,数据处理单元还对所述索引对应的计数器进行递减操作。

可选的,待监测内容是io操作请求、网络报文、网络数据包或消息的一种或多种。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

可选的,包括:

信息检测单元,用于检测待进行超时监测的未完成集合中待监测内容的数量;

内容处理单元,用于在到达预定时间间隔时,根据当前索引确定待进行超时监测的未完成合集,对待进行超时监测的未完成集合中的待监测内容进行处理;

索引更新单元,用于对索引进行更新。

可选的,还包括:

根据当前时间和超时监测时间间隔获得当前时间段序号;

将当前时间段序号与计数器或未完成集合的数量的模作为当前索引。

可选的,预定时间间隔是定时器的重置时间。

可选的,内容处理单元对对待进行超时监测的未完成集合中的待监测内 容进行处理:

获取所述未完成集合中的待监测内容的信息;

将所述信息提示给用户。

可选的,内容处理单元将所述信息提示给用户的方式为打印。

可选的,索引更新单元对当前索引进行更新包括:

对当前索引进行递增操作。

可选的,每个未完成集合都具有一个与之相配合的计数器,计数器用于记录未完成集合中的待监测内容的数量;

可选的,根据当前索引确定待进行超时监测的未完成合集包括:

与所述当前索引所对应的时间段相差一个超时时间间隔的时间段所对应的索引为待进行超时监测的未完成集合索引;

根据待进行超时监测的未完成集合索引确定待进行超时监测的未完成集合。

可选的,待监测内容为io操作请求、网络报文、网络数据包或消息的一种或多种。

可选的,所述未完成集合由hash表、数组、线性表或链表实现。

本申请还提出一种超时监测装置,包括:

索引确认模块,用于确认当前索引;

操作处理模块,用于发出第一待监测内容时,使用当前索引访问第一未完成集合,将对应于第一待监测内容的信息插入第一未完成集合,收到被处理完成的第二待监测内容时,依据第二索引访问第二未完成集合,从第二未完成集合中删除与第二待监测内容相对应的信息,在进入下一时间段时,基于所述当前时间段所对应的第三索引访问第三未完成集合,第三未完成集合中的元素为超时内容。

可选的,所述待监测内容是io操作请求、网络报文、网络数据包或消息的一种或几种。

可选的,所述索引确认模块基于待监测内容获取与待监测内容相对应 的索引,为以下之一:

从返回的指示待监测内容处理完成的消息中提取该待监测内容对应的索引,其中在发送给接收端的待监测内容中包含所使用的当前索引,以及在返回的指示待监测内容处理完成的消息中携带所述索引;

或者,收到待监测内容处理完成消息时,遍历多个未完成集合,包含所收到的待监测内容的未完成集合的序号为与该待监测内容相对应的索引;

或者,提供第一集合用于存储待监测内容与索引对,在收到待监测内容处理完成消息时,遍历该第一集合找到与该待监测内容相对应的索引;

或者,在收到待监测内容处理完成消息时,从待监测内容的描述符中获得与该待监测内容相对应的索引,其中在待监测内容的描述符中记录所使用的当前索引。

可选的,当前时间段所对应的第三索引为与所述当前时间段的时间间隔为超时时间间隔的时间段所对应的索引。

可选的,包括:

获取所述第三未完成集合中的待监测内容的信息;

将所述信息提示给用户。

可选的,未完成集合中的与待监测内容相对应的信息为访问待监测内容的地址,以及未完成集合中的与待监测内容相对应的信息的索引为待监测内容的地址。

可选的,基于所述当前时间段所对应的第三索引访问第三未完成集合后,更新当前索引。

根据本发明的实施例,还提供了一种包含计算机程序代码的计算机程序,当被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的方法。

根据本发明的实施例,还提供了一种包含计算机程序代码的计算机存储介质,当所述存储介质上的计算机程序代码被载入计算机系统并在计算机系统上执行时,所述计算机程序代码使所述计算机系统执行上面所述的 方法。

上述本发明提出的一种超时监测方法及系统,获得了以下技术效果:

1、本申请提出的超时监测方法及系统,通过使用非精确的超时检测,极大的提高超时检测的效率。

2、本申请提出的超时监测方法及系统,可以在检测到待检测内容超时的时候打印出超时待检测内容的相关具体信息,从而可以帮助开发者搜集待检测内容的模式,最终定位超时的原因。

3、最后,本申请还解决了当超时事件与io请求同时到来时的时间索引并发访问的问题,从而使得系统运行更加高效。

附图说明

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

图1是根据本发明实施例的超时监测系统的结构示意图;

图2是根据本发明实施例的方框图;

图3是根据本发明实施例的时间轴示意图;

图4是根据本发明实施例的超时监测方法的流程图;

图5是根据本发明实施例的插入未完成集合的示意图;

图6是根据本发明实施例的中将待监测内容插入未完成集合的方法的流程图;

图7是根据本发明实施例的移除未完成集合元素的示意图;

图8是根据本发明实施例的从未完成集合移除待监测内容的方法的流程图;

图9是根据本发明实施例的检测待监测内容超时的示意图;以及

图10是根据本发明实施例的超时监测处理方法的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

根据本发明实施例的超时监测系统,如图1所示,包括发送端11和接收端12,由发送端11实施对待监测内容的监督和判断。发送端11可以是计算机、服务器、路由器、交换机等,接收端12可以是诸如机械硬盘、固态硬盘、u盘的计算机外围设备、另一台计算机、服务器或者另一台路由器、交换机等网络设备。发送端11与接收端12可通过多种通信链路连接,例如sata(serialadvancedtechnologyattachment,串行高级技术附件)、usb(universalserialbus,通用串行总线)、pcie(peripheralcomponentinterconnectexpress,快速外围组件互连)、scsi(smallcomputersysteminterface,小型计算机系统接口)、ide(integrateddriveelectronics,集成驱动器电子)等,发送端11与接收端12也可通过以太网、光纤通道、无线网等网络耦合在一起。发送端11与接收端12之间交换数据包、网络报文或io请求是根据本发明的实施例的待监测内容,通过在发送端11中实施本发明,监测由发送端11向接收端12发送的数据包、网络报文或io请求等待监测内容是否在预定时间内没有被从接收端12返回,即发生超时。待监测内容从接收端12返回,可以是发送端11收到接收端12发送的对数据包、网络报文的确认报文,或者对io请求执行结果的应答。

在图1的实施例中,发送端11包括超时监测装置111与收发器112。超时监测装置111通过实施本发明的实施例来实现对待检测内容的超时检测。收发器112用于向接收端12发送待监测内容,并接收从接收端12返回的待监测内容完成信息。

如图2所示,在一个例子中发送端是主机(host)而接收端是作为存储设备的固态硬盘。主机和存储设备通过nvme协议通信。主机向存储设备发送io请求,存储设备将指示io请求处理完成的消息发送给主机。在主机的存 储设备驱动程序中实施根据本发明实施例的方法来检测io请求的处理是否超时。

作为举例,若主机向存储设备发出io请求后,在10秒钟内没有收到存储设备返回的指示io请求处理完成的消息,认为该io请求超时。并且对于主机向存储设备发出的所有io请求,其超时时间均为10秒。

参看图2,在主机中提供5个计数器,用于记录未完成io的数量。主机中还提供5个未完成io集合,用于临时存储与尚未完成的io请求关联的信息。未完成的io请求是主机已向存储设备发出但尚未收到来自存储设备的指示io请求处理完成消息的io请求。

主机中还提供当前索引,通过当前索引能够访问5个计数器之一,以及5个未完成io集合之一。计数器与未完成io集合一一对应,通过当前索引能够访问计数器之一以及与该计数器相对应的未完成io集合。通过当前时间确定当前索引(下面将结合图3对当前索引的确定进行描述)。

主机中还提供定时器。在指定的定时时间(本例中,为每2秒),定时器产生超时事件并引起超时处理流程的执行。

所属领域技术人员将意识到,io请求的超时时间可以为其他时间,以及主机中可提供不同数量的计数器与未完成io集合。

图3是根据本发明实施例1的时间轴示意图。如图3所示,时间被划分为多个时间段,作为举例,时间段t0、t1、t2……t5的长度均为2秒。每当定时器产生超时事件,意味着进入了下一时间段。通过当前时间段确定当前索引。将当前时间段与计数器或未完成io集合的数量的模作为当前索引。系统初始化时的时间段的序号可以为0。

在图2中,计数器的数量为5,未完成io集合的数量为5。以每2秒作为一个时间段,若当前时间处于时间段t0(即0-2s的时间段),当前时间段序号0与未完成io集合数量5的模为0(0mod5),则当前索引为0。类似地,若当前时间处于时间段t4,则当前索引为4(4mod5),若当前时间处于时间段t5,则当前索引回绕为0(=5mod5)。在另一个例子中,若未完 成集合数量为5,以秒为单位的当前时间为是7秒,计数器或未完成集合的切换时间间隔设定为2秒,则当前的时间段序号是7/2=3(向下取整),则当前时间段序号为3,与未完成集合数量的模为3(3mod5),则当前索引为3。

根据本发明的实施例,超时io检测是不精确的,可以在时间段内的任何时刻设置当前索引。在一个例子中,为设置当前索引,获取以秒为单位的当前时间,并与未完成io集合数量求模,结果作为当前索引。在另一个例子中,获得时间段序号,用时间段序号与未完成io集合数量的模作为当前索引。

在依然另一个例子中,在初始时刻,将当前索引设置为0,以及每当进入新的时间段后,使当前索引递增以索引下一计数器与未完成io集合(例如计数器1的下一计数器为计数器2),并且在当前索引值超过未完成计数器或io集合数量后回绕为初始值以索引计数器0以及与其相对应的未完成io集合0。

图4是根据本发明实施例的超时监测方法的流程图。如图4所示,根据本发明实施例的超时监测方法可由如图2所示的主机的存储驱动程序实施。在根据本发明的实施例中,超时监测的对象是io请求。在其他实施例中,超时监测的对象也可以是网络报文、网络数据包或消息的一种或几种。

在图4的实施例中,响应于不同事件的出现,执行不同的处理步骤。当主机向存储设备发出第一io请求时,依照当前索引将对应于第一io请求的信息插入第一未完成集合(s410)。响应于收到被处理完成的第二io请求,获取与第二io请求相对应的第二索引,依据第二索引访问第二未完成集合,从第二未完成集合中删除与第二io请求相对应的信息(s420)。以及响应于时间进入下一时间段,基于当前时间段所对应的第三索引访问第三未完成集合,第三未完成集合中的元素为超时io请求(s430)。步骤s410、步骤s420与步骤s430可以并行执行,也可以在不同的时间执行。在一个实施例中,每个步骤可以由一个线程执行,也可以在一个线程中检查多种事件 的出现,并执行相应的步骤。在另一个实施例中,由多个线程来响应于发出多个第一io请求的每个而执行步骤s410,以及由多个线程来响应于收到多个被处理完成的第二io请求来执行步骤s420。

图5是根据本发明实施例的插入未完成集合的示意图。在主机向存储设备发出io请求时,将对应于io请求的信息插入未完成集合(也参看图4,步骤s410)。

图5中,提供了5个计数器(c0、c1、…c4)与5个未完成集合(s0、s1、……s4)。未完成集合中的元素为指示主机已向存储设备发出但尚未返回的io请求的信息,例如未完成集合s1中的元素包括标识符为1、2……1023的同io请求相对应的信息(分别记为io-1、io-2……io-1023)。图5中,当前索引指向计数器c1与未完成集合s1。可选地,省略计数器,通过遍历未完成集合能够得到集合中元素的数量。

如图5所示(同时参看图6),在接收到的要发出io请求或发出io请求(例如标识符为1181的io请求)时,为检测io超时,基于当前索引使计数器递增。在图5中,当前索引指向计数器c1,通过当前索引访问计数器c1,并使计数器c1递增。生成与标识符为1181的io请求相对应的信息(io-1181,1)作为未完成集合的元素,其中存储了当前索引(在本例中为1)。通过当前索引访问未完成io集合s1,将元素(io-1181,1)插入到未完成集合s1。

类似地,对于每个发出的io请求(图6,s610),主机根据当前索引确定当前索引对应的计数器和/或未完成集合(图6,s620),使对应的计数器递增,在记录io请求的单元中存储当前io请求的标识符,并将记录io请求的单元插入由当前索引访问的未完成集合(图6,s630)。

参看图5,5个计数器中,计数器c0的值为1023,表示对应于计数器c0有1023个未完成的io请求。计数器c1的值为158,表示对应于计数器c1有158个未完成的io请求。而计数器c2、计数器c3以及计数器c4均为0,表示对应于计数器c2、c3与c4尚不存在未完成的io请求。相对应 地,在未完成集合s0中,包括对应于计数器c0的1023个记录未完成io请求的单元,记为(io-1,0)(io-2,0)…(io-1023,0)。在未完成集合s2中,记录了对应于计数器c1的158个记录未完成io请求的单元,记为(io-1024,1)(io-1025,1)…(io-1181,1)。而未完成集合s2、s3与s4为空集。

进一步的,通过当前索引访问计数器和/或未完成io集合时,对计数器和/或未完成io集合加锁,使得多个线程互斥地访问计数器和/或未完成io集合。

作为举例,未完成io集合为hash表,以提供快速插入与删除操作。以指向记录io请求的单元(例如io请求描述符)的指针值作为hash表项的键,同样以指向io请求描述符的指针值作为hash表项的值。

作为举例,io请求描述符可包括命令操作码、起始逻辑块地址、逻辑块数量等。

图7是根据本发明实施例的移除未完成集合元素的示意图。在收到被存储设备处理完成的io请求时,将处理完成的io请求从未完成集合中删除(参看图4,步骤s420)。

如图7所示(也参看图8),随着时间流逝,当前索引已指向了计数器c2与未完成集合s2。在收到指示io请求处理完成的消息时(例如指示标识符为1100(记为io-1100)的io请求处理完成)时,获取与未完成io请求io-1100对应的索引,在本例中,为1。在一个例子中,遍历多个未完成集合,以包含记录未完成io请求io-1100的单元(io-1100,1)的未完成集合的索引,作为与未完成io请求io-1100对应的索引,进而无需在未完成集合的元素中存储与元素对应的索引值。在另一个例子中,在队列、链表或其他集合数据结构中存储未完成io请求或记录未完成io请求的单元,从而在收到指示io请求处理完成的消息时基于io请求的标识符高效地获取io请求。在依然另一个例子中,所收到的指示io请求处理完成的消息中,包含与io请求相对应的索引。

根据与未完成io请求io-1100相对应的索引(在本例中,为1),访问计 数器c1,并使计数器c1递减。如图7所示,计数器c1的值为10,指示与计数器c1相对应的未完成集合的元素数量为10。随着未完成io请求io-1100处理完成,计数器c1递减为9,并从未完成集合s1中移除io-1100。

类似地,对于每个收到的指示io请求处理完成的消息(图8,s810),主机获取与该io请求对应的索引,根据索引确定对应的计数器和/或未完成集合(图8,s820),将对应的计数器递减,以及根据索引将对应的未完成集合中与该io请求对应的单元删除(图8,s830)。

继续参看图7,此时若发出io请求(例如,标识符为1200的io请求,记为io-1200)(图6,s610),依据当前索引访问计数器c2与未完成集合s2(图6,s620),使计数器c2递增,并根据当前索引访问未完成集合s2,将与io请求io-1200对应的单元(io-1200,2)插入未完成集合s2(图6,s630)。以及可选地,与io-1200相关联地存储当前索引的值(在本例中,为2)。

进一步地,通过当前索引访问计数器和/或未完成集合时,对计数器和/或未完成集合加锁,使得多个线程互斥地访问计数器和/或未完成集合。然而,无需对当前索引加锁。

图9是根据本发明实施例的检测待监测内容超时的示意图。在时间进入下一时间段后,执行超时检测,基于当前时间段所对应的索引访问未完成集合,该未完成集合中的元素为超时io(参看图4,步骤s430)。

如图9所示,当主机的定时器到时,进行io请求超时检测。在本例中,超时时间为8秒(即,io请求被发出后,若8秒钟后依然没有接收到指示该io请求处理完成的消息,认为该io请求超时),当前索引指向计数器c4以及未完成集合s4。在定时器产生超时事件时,在计数器c4与未完成集合s4中指示的未完成io所经历的时间为0-2s,在计数器c3与未完成集合s3中指示的未完成io所经历的时间为2-4s,在计数器c2与未完成集合s2中指示的未完成io所经历的时间为4-6s,在计数器c1与未完成集合s1中 指示的未完成io所经历的时间为6-8s,此时在计数器c0与未完成集合s0中指示的未完成io所经历的时间为8-10s。因而,在定时器产生超时事件时,根据指向计数器c4与未完成集合s4的当前索引,确定计数器c0与未完成集合s0中的元素指示了超时io(图10,s1010)。

如图9所示,当前索引为4(定时器到时前),随着定时器到时,当前时间段进入到下一时间段,而下一时间段对应的索引为0。通过索引计数器c0发现计数器c0的值为2,可知有2个未完成io请求的处理时间已经超过8秒,并进而根据索引0访问未完成集合s0,获得超时io的详细信息(图10,s1020)。为处理超时io请求,可以打印每一个超时io请求的具体信息,例如操作码,访问的第一个块的地址和欲访问的块的数量等。

在另一个例子中,若计数器c0的值为0,意味着当前不存在处理时间超过8s的未完成io请求,从而无需访问未完成集合并获取超时io请求信息。

在一个例子中,超时时间为t,而定时器超时间隔为t,则提供n=(t/t+1)(向上取整)个未完成集合,以及在发生超时事件时,若当前索引为i,则索引为(i+1)modn的未完成集合为进行超时监测的未完成集合。

在又一个例子中,超时时间为t,而定时器超时间隔为t,则提供m个未完成集合(m≥n=(向上取整)(t/t+1)),以及在发生超时事件时,若当前索引为i,则索引为(i+m-n+1)modm的未完成集合为进行超时监测的未完成集合。

需要指出的是,在上面的例子中,超时时间为8秒,而定时器超时间隔为2秒,从而在当前索引为4时,在未完成集合s0中的未完成io所经历的时间为8-10秒,而在未完成集合s1中的未完成io所经历的时间为6-8秒,即在未完成集合s0中的未完成io均已超时,而在未完成集合s1-s4中的未完成io均未超时。在另一个例子中,超时时间为7秒,而定时器超时间隔为3秒,从而在当前索引为4时,未完成集合s1中的未完成io所经历的时间为9-12秒,未完成集合s2中的未完成io集合所经历的时间为6-9秒,即 未完成集合s1中的所有未完成io均已超时,而未完成io集合s2中的部分未完成io已超时。在此情况下,根据本发明的实施例,在当前索引为4,又产生了超时事件时,仅将未完成集合s1中的未完成io检测为超时,而不对未完成集合s2进行超时检测。从而提高超时检测的效率,而不关心超时检测的精度。

显然,计数器不是必须的。通过遍历未完成集合能够确定未完成io集合中的元素数量。

在一个实施例中,检测超时io请求后,还更新当前索引(图10,s1030),使当前索引与当前时间段相对应。例如,通过使当前索引递增来更新当前索引。从而随后发出io请求时,根据更新后的当前索引(在本例中,为0)访问对应的计数器和/或未完成io请求。

在根据本发明的实施例中,为检测超时,在定时器到时后,先根据当前时间段确定索引并依据索引访问计数器和/或未完成集合,确定是否存在超时io请求,并进行相应处理后,再更新当前索引。从而在确定是否存在超时io请求时,当前索引为4,当前并发的发出io请求的会引起对计数器c4与未完成集合s4的操作,而不会干扰针对计数器c0与未完成集合s0的超时检测。

进一步地,在更新索引时,无需对索引加锁。只要对超时io的检查发生在更新索引之前,就无需通过加锁来确保更新索引与发出io请求时使用索引的先后顺序。通过减少锁操作,将进一步降低检测超时io的开销并提升性能。

可选地,发出io请求时的处理、收到指示io请求执行完成时的处理以及定时器到时的超时检测可以由多个线程并行执行。即使在多线程执行的情况下,在更新索引时,无需对索引加锁。

以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭 示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

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