CN109753371B - 一种i/o阻塞检测方法、装置及设备 - Google Patents

一种i/o阻塞检测方法、装置及设备 Download PDF

Info

Publication number
CN109753371B
CN109753371B CN201711079605.4A CN201711079605A CN109753371B CN 109753371 B CN109753371 B CN 109753371B CN 201711079605 A CN201711079605 A CN 201711079605A CN 109753371 B CN109753371 B CN 109753371B
Authority
CN
China
Prior art keywords
request
functional module
module
message
identifier
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
CN201711079605.4A
Other languages
English (en)
Other versions
CN109753371A (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
Priority to CN201711079605.4A priority Critical patent/CN109753371B/zh
Publication of CN109753371A publication Critical patent/CN109753371A/zh
Application granted granted Critical
Publication of CN109753371B publication Critical patent/CN109753371B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本申请实施例提供了一种I/O阻塞检测方法、装置及设备。所述方法根据I/O读写任务的处理流向将虚拟化存储资源分层划分为不同功能模块后,监控每个功能模块中的I/O请求,若I/O请求的处理时间大于预设的时间阈值,则I/O请求超时,若超时的I/O请求的数量超过最大限制值,则确定该功能模块发生I/O请求阻塞故障,从而能够及时准确地检测到I/O请求阻塞故障,定位发生I/O请求阻塞故障的位置,有利于I/O请求的恢复和调度。

Description

一种I/O阻塞检测方法、装置及设备
技术领域
本申请涉及软件技术领域,尤其涉及一种I/O阻塞检测方法、装置及设备。
背景技术
虚拟化存储(Storage Virtualization)是指将多个不同类型且独立存在的物理存储体,通过软硬件技术集成转化成逻辑上的虚拟存储模块,从而更利于存储资源的分配。I/O (Input/Output,输入/输出)读写过程是存储资源使用过程的重要环节,存储资源虚拟化后,I/O读写过程从应用程序到物理磁盘之间会经历多个虚拟存储模块,导致I/O读写故障率增加,因此及时检测出虚拟存储模块的I/O阻塞故障对于I/O请求调度和I/O请求恢复至关重要。其中I/O阻塞指超过一定的时间阈值未返回I/O读写结果。
现有的虚拟化存储I/O故障检测方案主要以存储节点(控制器)为单位,缺乏针对虚拟存储模块进行I/O阻塞故障检测的方法。
发明内容
本申请提供了一种I/O阻塞检测方法、装置及设备,以及时准确地检测到I/O阻塞故障。
第一方面,提供了一种I/O阻塞检测方法,由存储阵列的故障检测模块执行,所述存储阵列接收到的I/O请求经过至少一个功能模块到达所述存储阵列的硬盘,所述方法包括:故障检测模块接收所述功能模块发送的第一消息,所述第一消息在所述I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;将所述功能模块的标识、所述I/O请求请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求;统计每个功能模块对应的超时I/O请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。该实现方式针对I/O请求处理流向所涉及的功能模块而非节点进行,能够及时准确地检测到I/O请求阻塞故障,并定位发生I/O请求阻塞故障的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高I/O请求调度的合理性。
所述方法还可以包括:故障检测模块接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;I/O请求在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列中删除。采用该实现方式能够防止故障检测模块在检测过程中对处理结束的I/O请求进行重复统计而出现错误。
其中,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块。
在第一方面中,故障检测模块侦听功能模块发送的消息,接收到功能模块发送的消息后,判断所述消息是否为第一消息,所述第一消息由功能模块在I/O请求到达时发送;若为第一消息,则获取其中携带的功能模块的标识、I/O请求的标识以及I/O请求到达时间,将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列;若所述消息不为第一消息,则判断是否为第二消息,所述第二消息由功能模块在I/O请求处理结束时发送;若为第二消息,则将获取其中携带的处理结束的I/O请求的标识,将处理结束的I/O请求的标识所对应的映射关系从检测队列删除,防止故障检测模块在检测过程中对处理结束的I/O请求进行重复统计而出现错误。故障检测模块侦听功能模块发送的消息的同时,定时或周期性遍历检测队列,检测所述检测队列中的功能模块是否发生I/O请求阻塞。故障检测模块遍历检测队列,计算各功能模块对应的映射关系中的I/O请求到达时间和当前时间的差值,比较差值和预设的时间阈值,统计各功能模块对应的超时I/O请求的数量,其中超时I/O请求为差值大于预设的时间阈值的I/O请求。故障检测模块再比较各功能模块对应的超时I/O请求的数量和各功能模块的最大限制值,确定数量大于最大限制值的功能模块为存在I/O请求阻塞的功能模块。所述故障检测模块可以将检测结果发送给故障恢复模块。因此所述故障检测模块可以实时监控功能模块对I/O请求的处理时间,及时准确地检测到I/O 请求阻塞,有效地定位发生I/O请求阻塞的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高I/O请求调度的合理性。
在一种可能的实现方式中,每个功能模块设置一个时间阈值,每个功能模块的所述时间阈值为所述功能模块对历史处理的I/O请求的处理时间所计算的平均值。
在一种可能的实现方式中,每个功能模块设置一个所述最大限制值,每个功能模块的最大限制值为每个功能模块中当前未处理完毕的I/O请求的总数量与预设系数的乘积。在另一种可能的实现方式中,不同功能模块的最大限制值相同。
第二方面,提供了一种I/O阻塞检测装置,应用于存储阵列,所述存储阵列接收到的I/O 请求经过至少一个功能模块到达所述存储阵列的硬盘,其特征在于,包括:
接收模块,用于接收功能模块发送的第一消息,所述第一消息在所述I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息中携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;以及,将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;
检测模块,用于检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求;以及,统计每个功能模块对应的超时I/O请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
所述I/O阻塞检测装置针对I/O请求处理流向所涉及的功能模块而非节点进行I/O阻塞检测,能够及时准确地检测到I/O请求阻塞故障,并定位发生I/O请求阻塞故障的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高I/O请求调度的合理性。
其中,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块。
其中,所述接收模块还可以用于:接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。采用该实现方式能够防止故障检测模块在检测过程中对处理结束的I/O请求进行重复统计而出现错误。
在第二方面中,I/O阻塞检测装置的接收模块侦听功能模块发送的消息,接收到功能模块发送的消息后,判断所述消息是否为第一消息,所述第一消息由功能模块在I/O请求到达时发送;若为第一消息,则获取其中携带的功能模块的标识、I/O请求的标识以及I/O请求到达时间,将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列;若所述消息不为第一消息,则判断所述消息是否为第二消息,所述第二消息由功能模块在I/O请求处理结束时发送;若为第二消息,则将获取其中携带的处理结束的I/O请求的标识,将处理结束的I/O请求的标识所对应的映射关系从检测队列删除,防止检测模块在检测过程中对处理结束的I/O请求进行重复统计而出现错误。接收模块侦听功能模块发送的消息的同时,检测模块定时或周期性遍历检测队列,检测所述检测队列中的功能模块是否发生I/O请求阻塞。检测模块遍历检测队列,计算各功能模块对应的映射关系中 I/O请求到达时间和当前时间的差值,比较差值和预设的时间阈值,差值大于预设的时间阈值的I/O请求为超时I/O请求,检测模块统计各功能模块对应的超时I/O请求的数量,比较各功能模块对应的超时I/O请求的数量和各功能模块的最大限制值,确定数量大于最大限制值的功能模块为存在I/O请求阻塞的功能模块。所述检测模块可以将检测结果发送给故障恢复模块。因此所述I/O阻塞检测装置可以实时监控功能模块对I/O请求的处理时间,及时准确地检测到I/O请求阻塞,有效地定位发生I/O请求阻塞的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高I/O请求调度的合理性。
在一种可能的实现方式中,每个功能模块设置一个时间阈值,每个功能模块的所述时间阈值为所述功能模块对历史处理的I/O请求的处理时间所计算的平均值。
在一种可能的实现方式中,每个功能模块设置一个所述最大限制值,每个功能模块的最大限制值为每个功能模块中当前未处理完毕的I/O请求的总数量与预设系数的乘积。在另一种可能的实现方式中,不同功能模块的最大限制值相同。
第三方面,提供了一种I/O阻塞检测设备,包括处理器及存储器,所述存储器连接至所述处理器,用于存储程序指令,所述处理器运行所述程序指令以执行第一方面所述的I/O阻塞检测方法。具体地,所述处理器用于:
接收功能模块发送的第一消息,所述第一消息在I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;将所述功能模块的标识、I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求;统计每个功能模块对应的超时I/O 请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。所述I/O阻塞检测设备针对I/O请求处理流向所涉及的功能模块而非节点进行I/O阻塞检测,能够及时准确地检测到I/O请求阻塞故障,并定位发生I/O请求阻塞故障的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高I/O请求调度的合理性
其中,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块。
所述处理器还可以用于:接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。采用该实现方式能够防止故障检测模块在检测过程中对处理结束的I/O 请求进行重复统计而出现错误。
在第三方面中,处理器侦听功能模块发送的消息,接收到功能模块发送的消息后,判断所述消息是否为第一消息,所述第一消息由功能模块在I/O请求到达时发送;若为第一消息,则获取其中携带的功能模块的标识、I/O请求的标识以及I/O请求到达时间,将所述功能模块的标识、所述I/O请求请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列;若所述消息不为第一消息,则判断是否为第二消息,所述第二消息由功能模块在I/O请求处理结束时发送;若为第二消息,则将获取其中携带的处理结束的I/O请求的标识,将处理结束的I/O请求的标识所对应的映射关系从检测队列删除,防止在检测过程中对处理结束的I/O 请求进行重复统计而出现错误。处理器侦听功能模块发送的消息的同时,定时或周期性遍历检测队列,检测所述检测队列中的功能模块是否发生I/O请求阻塞。处理器遍历检测队列,计算当前时间和各功能模块对应的映射关系中I/O请求到达时间的差值,比较差值和预设的时间阈值,差值大于预设的时间阈值的I/O请求为超时I/O请求,处理器统计各功能模块对应的超时I/O请求的数量,比较各功能模块对应的超时I/O请求的数量和各功能模块的最大限制值,确定数量大于最大限制值的功能模块为存在I/O请求阻塞的功能模块。因此所述处理器可以实时监控功能模块对I/O请求的处理时间,及时准确地检测到I/O请求阻塞,有效地定位发生I/O请求阻塞的功能模块,从而有利于快速准确地解除I/O请求阻塞故障,提高 I/O请求调度的合理性。
在一种可能的实现方式中,每个功能模块设置一个时间阈值,每个功能模块的所述时间阈值为所述功能模块对历史处理的I/O请求的处理时间所计算的平均值。
在一种可能的实现方式中,每个功能模块设置一个所述最大限制值,每个功能模块的最大限制值为每个功能模块中当前未处理完毕的I/O请求的总数量与预设系数的乘积。在另一种可能的实现方式中,不同功能模块的最大限制值相同。
第四方面,提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行第一方面所述的方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面所述的方法。
附图说明
图1为基本的存储物理设备的组成示意图;
图2为虚拟化存储资源的构造示意图;
图3为一种功能模块划分示例图;
图4本申请实施例提供的一种I/O阻塞检测方法的流程示意图;
图5为故障检测模块对各功能模块进行消息侦听的交互示意图;
图6为故障检测模块对每个功能模块进行消息侦听的流程示意图;
图7本申请实施例提供的一种I/O阻塞检测装置的框图。
具体实施方式
基本的存储物理设备如图1所示,主要由主机(Host)和存储阵列组成,I/O请求由主机下发,经过交换机到达存储阵列,最后实际读写的是阵列端的物理硬盘,也就是实际的物理存储资源是存储阵列的物理硬盘(亦称为阵列硬盘)。物理硬盘由阵列控制器管理。阵列操作系统运行于存储阵列的阵列控制器中。
虚拟化存储资源的基本构造如图2所示,主要是在阵列操作系统中,将物理存储资源通过抽象的方式用软件来重组,得到虚拟化存储资源。一种类型的虚拟化存储资源(亦称为虚拟存储模块)在阵列操作系统中为一个功能模块(软件处理模块),例如图2所示,Storage unit n是最小粒度的虚拟存储模块,Storage unit 0是最大粒度的虚拟存储模块,Storage unit 0 包含多个Storage unit 1,Storage unit 1包含多个Storage unit2,以此类推。Storage unit n之间也可以是交叉关系。其中,n为大于0的整数。
虚拟化存储资源是一种扁平化的虚拟资源。实施本申请实施例所提供的I/O阻塞检测方法前,先将虚拟存储资源根据I/O请求处理流程以分层方式划分,得到不同功能模块(标记为Layer),所述功能模块为I/O请求到达阵列硬盘所经过的虚拟存储模块,亦即处理I/O请求的虚拟存储模块。每个功能模块(Layer 0至Layer n)会参与处理一个或多个I/O请求(所述处理包括当前虚拟存储资源的分配和回收等)。
例如图3所示,I/O请求由主机下发,到达阵列操作系统之后,经历多个虚拟存储模块 (Storage unit 0至Storage unit n)的处理工作,最后到达阵列硬盘(从阵列硬盘读走数据或写入数据到阵列硬盘),这些虚拟存储模块可以根据粒度分为不同层次。具体地,预先规定最小粒度的虚拟存储模块的大小,不同个数的最小粒度的虚拟存储模块组成更大粒度的虚拟存储模块,由此可以根据虚拟存储模块的粒度大小将虚拟存储模块分层,例如分为n层,粒度最大的虚拟存储模块(Storage unit 0)例如LUN(Logical Unit Number,逻辑单元号) 为第一层;低一级粒度的虚拟存储模块(Storage unit 1)例如Volume(卷)为第二层,更低一级粒度的虚拟存储模块(Storage unit 1)例如CKG(Chunk Group,块组)为第三层,依此类推,粒度最小的虚拟存储模块(Storage unit n)例如BDM(Block DeviceManagement,块设备管理)为第n层。
当主机下发一个I/O请求时,通过通讯的方式将I/O请求发送到阵列操作系统,I/O请求先到达阵列操作系统中粒度最大的Storage unit 0,故将Storage unit 0作为第一层功能模块(记为Layer 0);Storage unit 0对I/O请求处理完毕后将I/O请求发送到低一级粒度的Storage unit 1,因此将Storage unit 1作为第二层功能模块(记为Layer 1);Storage unit 1对I/O请求处理完毕后将I/O请求发送到更低一级粒度的Storage unit 2,因此将 Storage unit 2作为第三层功能模块(记为Layer 2),依次类推。I/O请求经过各功能模块后,最终将读或写的数据写到实际的阵列磁盘上。图3所示的功能模块划分仅为示例,并不限定功能模块的划分方式。
在存储阵列中,具体地在存储阵列的阵列操作系统中可以设置故障检测模块(为软件模块),由所述故障检测模块执行本申请实施例所提供的I/O阻塞检测方法。故障检测模块侦听每个功能模块发送的消息,对每个功能模块检测是否有I/O请求阻塞的异常发生,若有,则可以通知故障恢复模块,采取恢复措施。具体地,参见图4,为本申请实施例提供的一种I/O 阻塞检测方法,所述方法包括:
步骤S401,故障检测模块接收功能模块发送的消息;
步骤S402,判断所述消息是否为第一消息,所述第一消息由所述功能模块在I/O请求到达所述功能模块时发送,所述第一消息携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;
步骤S403,若所述消息为第一消息,获取所述第一消息中携带的所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间,将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被功能模块处理完的I/O请求。
其中,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块,亦即处理所述I/O请求的虚拟存储模块。所述功能模块的标识可以为所述功能模块的ID,所述I/O请求的标识可以为所述I/O请求的ID,以下说明中,为方便描述,功能模块的标识皆以功能模块的ID为例,I/O请求的标识皆以I/O请求的ID为例。其中,I/O请求的ID唯一表征一个I/O请求,由阵列操作系统在收到主机发送的I/O请求后为所述I/O请求分配。
I/O请求由主机(Host)下发到阵列操作系统后,其路径主要是从功能模块Layer 0到 Layer n(为方便描述,以下各个功能模块用Layer x表示,0≤x≤n,x为整数)。当I/O请求到达Layer x时,Layer x通过通讯的方式通知故障检测模块I/O请求到达本模块并开始对I/O请求进行处理。具体地,某个I/O请求到达Layer x时,Layer x向故障检测模块发送第一消息,所述第一消息中携带有该I/O请求的ID、I/O请求到达时间(即该I/O请求到达Layerx的时间,亦即Layer x开始处理所述I/O请求的时间)和Layer x的ID(记为 LayerID)。
故障检测模块则侦听每个Layer的消息。故障检测模块接收到Layer x发送的消息后,判断所述消息是否为第一消息,从而确定是否有I/O请求到达了Layer x。故障检测模块可以通过解析所述消息,判断所述消息中是否包含I/O请求的标识和I/O请求到达时间,来确定所述消息是否为第一消息;也可以由功能模块在消息中加入第一特定标识,所述第一特定标识用以表征所述消息为第一消息,故障检测模块通过判断所述消息是否包含第一特定标识,来确定所述消息是否为第一消息。
如果所述消息为第一消息,则故障检测模块从所述第一消息中获取I/O请求的ID、I/O 请求到达时间和Layer x的LayerID,将I/O请求的ID、I/O请求到达时间和LayerID的映射关系保存到检测队列中。具体地,将I/O请求的ID、I/O请求到达时间和LayerID的映射关系添加到检测队列中,为将I/O请求的ID、I/O请求到达时间和对应的LayerID组成的数据结构保存到检测队列中。
其中,检测队列可以为一个,该检测队列中保存故障检测模块根据所有Layer发送的第一消息得到的数据(I/O请求的ID、I/O请求到达时间和对应的LayerID组成的数据结构);也可以每个Layer对应一个检测队列,每个检测队列保存根据对应的Layer所发送的第一消息得到的数据。
检测队列中的I/O请求应当为没有被该I/O请求对应的功能模块处理完毕的I/O请求。 I/O请求在功能模块中被处理结束时,为避免故障检测模块检测时重复对该I/O请求进行统计而出现错误,误将未发生I/O请求阻塞的功能模块判为发送了I/O请求阻塞的功能模块,所述方法还可以包括步骤S404和步骤S405:
步骤S404,若所述消息不是所述第一消息,判断所述消息是否为第二消息,所述第二消息由所述功能模块在对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O 请求的标识;
步骤S405,若所述消息为所述第二消息,获取所述第二消息中的处理结束的I/O请求的标识,在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。
功能模块对I/O请求处理完毕时,该功能模块再向故障检测模块发送第二消息,所述第二消息用于通知故障检测模块该I/O请求在本模块已处理完毕,所述第二消息携带有该I/O 请求的标识(例如该I/O请求的ID),或者所述第二消息携带有该I/O请求的标识和该功能模块的ID。
对故障检测模块而言,故障检测模块在确定所述消息不是所述第一消息后,判断所述消息是否为所述第二消息。具体地,可以由功能模块在消息中加入第二特定标识,所述第二特定标识用以表征所述消息为第二消息,故障检测模块通过解析所述消息,判断所述消息是否包含第二特定标识,来确定所述消息是否为第二消息。
若所述消息为第二消息,故障检测模块在接收到所述第二消息后,获取所述第二消息中的处理结束的I/O请求的ID,在检测队列中找到所述处理结束的I/O请求的ID所对应的映射关系(即检测队列中包含该I/O请求的ID的数据结构)从检测队列删除。若所述第二消息携带有处理结束的I/O请求的ID和该I/O请求的ID对应的LayerID,则可以获取所述处理结束的I/O请求的ID和所述LayerID,同时根据所述处理结束的I/O请求的ID和所述LayerID 找到对应的映射关系,将所述映射关系从检测队列删除,这种方式可以提高搜索效率,快速找到需要删除的映射关系,尤其在只有一个检测队列的情况下。
若功能模块发送的消息既非第一消息也非第二消息,则故障检测模块不执行上述步骤 S403和步骤S405,继续侦听功能模块所发送的消息。
故障检测模块和功能模块之间的交互示例如图5所示,当I/O请求到达Layer x时,Layer x向故障检测模块发送第一消息,以通知故障检测模块I/O请求到达本模块并开始对I/O请求进行处理,处理完成后可以再向故障检测模块发送第二消息,所述第二消息用于告知故障检测模块该I/O请求已处理完毕,无需再对该I/O请求进行统计。
故障检测模块对功能模块的消息侦听过程如图6所示,故障检测模块接收每个Layer的消息,接收到Layer x发送的消息后,判断是否为第一消息,也就是判断是否是有I/O请求到达了Layer x,若是,则从所述第一消息中获取I/O请求的ID、I/O请求到达时间和Layer x的LayerID,将I/O请求的ID、I/O请求到达时间和LayerID的映射关系添加到检测队列中,然后继续消息的侦听,继续接收功能模块发送的消息;若不是所述第一消息,则判断是否为第二消息,也就是判断Layer x中是否有I/O请求处理结束,若是,则从所述第二消息中获取处理结束的I/O请求的ID,将处理结束的I/O请求的ID所对应的映射关系从检测队列删除,若否不是第二消息,则继续消息的侦听。
侦听功能模块发送的消息的同时,故障检测模块定时或周期性遍历检测队列,对每个功能模块进行I/O请求阻塞检测。具体地,故障检测模块执行如下步骤进行检测:
步骤S406,遍历所述检测队列,计算当前时间和所述检测队列中的映射关系中的I/O请求到达时间之间的差值;
步骤S407,比较所述差值与预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求,统计每个功能模块对应的超时I/O请求的数量,具体地,可以对每个差值,判断该差值是否大于所述时间阈值,若大于,则超时I/O请求的数量加1,由此完成超时I/O 请求的数量的统计;
步骤S408,比较所述数量和预设的最大限制值,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
其中,每个功能模块设置一个时间阈值。Layer x的时间阈值Tx可以等于Tx_stable* Tx_tolerate。其中,Tx_stable为Layer x对历史处理的I/O请求的处理时间的平均值,也就是Layer x对I/O请求的处理时间的历史统计平均值。具体地,可以取一历史时间段,计算该历史时间段中Layer x对所有I/O请求的处理时间的平均值,例如该历史时间段中Layer x所处理的I/O请求的总数量为m,Ti为第i个I/O请求的处理时间,1≤i≤m,则
Figure RE-GDA0001563727210000071
或者取多个(例如k个)历史时间段,求取第j个历史时间段中Layerx对所有I/O请求的处理时间的平均值Tx_stable(j),令
Figure RE-GDA0001563727210000081
由于功能模块对I/O请求的处理时间会趋于稳态,因此可以使用历史统计平均值来得到时间阈值,也使得I/O请求的超时判断成为可能。Tx_tolerate为处理时间最大容忍系数,所述处理时间最大容忍系数预先设置,可以根据实际情况调节。所述时间阈值可以预先由功能模块计算得到,或由其他计算模块在获取功能模块对历史处理的I/O请求的处理时间后计算得到。计算得到的时间阈值可以由功能模块通过消息发送给故障检测模块,但这种方式需要额外消耗消息资源,因此更宜将计算得到的时间阈值保存于故障检测模块中。所述时间阈值也可以不通过上述方式计算得到,而直接根据经验预先设定为固定值。
故障检测模块对Layer x统计完毕超时I/O请求的数量后,比较该数量和Layer x的最大限制值Cx_max,若该数量大于Cx_max,则确定Layer x发生I/O请求阻塞故障,并可以通知故障恢复模块,由故障恢复模块对Layer x进行故障处理。
其中,Layer x的I/O请求阻塞数量的最大限制值Cx_max的计算方法可以为:统计检测队列中Layer x当前对应的I/O请求的总数量Cx_total,Cx_max=Cx_total*Cx_tolerate,其中Cx_tolerate为阻塞请求最大容忍系数,所述阻塞请求最大容忍系数预先设置,可以根据实际情况调节。这样最大限制值可以根据Layer x对应的I/O请求的总数量自动调节。所述最大限制值也不通过上述方式计算得到,而直接预先设定为固定值。每个Layer的最大限制值可以不同,也可以强制预先设定为相同的值。
本申请实施例所提供的I/O阻塞检测方法中,功能模块在I/O请求到达时将自己的标识、到达的I/O请求的标识以及I/O请求到达时间发送给故障检测模块;故障检测模块监控每个功能模块中I/O请求的处理时间,统计超时I/O请求的数量,若超时I/O请求的数量超过最大限制值,则确定该功能模块存在I/O请求阻塞。本申请实施例所提供的技术方案针对I/O 请求处理流向而非节点进行,能够及时准确地检测到I/O请求阻塞,并定位发生I/O请求阻塞的功能模块,从而有利于快速准确地解除I/O请求阻塞,提高I/O请求调度的合理性。
参见图7,为本申请实施例提供的一种I/O阻塞检测装置,应用于存储阵列,所述存储阵列接收到的I/O请求经过至少一个功能模块到达所述存储阵列的硬盘,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块。所述装置可以包括接收模块和检测模块:
所述接收模块,可以包括第一判断子模块、添加子模块、第二判断子模块和删除子模块:
所述第一判断子模块,用于接收功能模块发送的消息,判断所述消息是否为第一消息,所述第一消息在所述I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息中携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间。所述第一判断子模块可以通过解析所述消息判断其中是否包含I/O请求的标识和I/O请求到达时间,来确定所述消息是否为第一消息;也可以由功能模块在第一消息中加入第一特定标识,所述第一特定标识用以表征所述消息为第一消息,所述第一判断子模块通过判断所述消息是否包含第一特定标识,来确定所述消息是否为第一消息。
所述添加子模块,用于若所述消息为所述第一消息,获取所述第一消息中的所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间,将所述功能模块的标识、所述 I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的 I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求。
所述第二判断子模块,用于若所述消息不是所述第一消息,判断所述消息是否为第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识。可以由功能模块在第二消息中加入第二特定标识,所述第二特定标识用以表征所述消息为第二消息,所述第二判断子模块通过解析所述消息判断所述消息是否包含第二特定标识,来确定所述消息是否为第二消息。
所述删除子模块,用于若所述消息为所述第二消息,在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。从而避免I/O 请求在功能模块中处理结束后,所述装置在检测时重复对该I/O请求进行统计而出现错误。
所述检测模块可以包括差值计算子模块,超时I/O请求统计子模块和阻塞检测子模块:
所述差值计算子模块,用于遍历所述检测队列,计算当前时间和所述检测队列中的映射关系中的I/O请求到达时间之间的差值;
所述超时I/O请求统计子模块,用于检测所述差值是否大于预设的时间阈值,也就是比较所述差值与预设的时间阈值,统计每个功能模块对应的超时I/O请求的数量,所述超时I/O 请求为差值大于时间阈值的I/O请求;
所述阻塞检测子模块,用于比较所述数量和预设的功能模块的最大限制值,确定超时I/O 请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
其中,每个功能模块设置一个时间阈值。Layer x的时间阈值Tx可以等于Tx_stable* Tx_tolerate,其中,Tx_stable为Layer x对历史处理的I/O请求的处理时间的平均值,该平均值可以通过多次性能测试(例如读写速率测试)得到Layer x对I/O请求的处理时间,然后求取一定历史时间段以内所述处理时间的平均值。Tx_tolerate为处理时间最大容忍系数,所述处理时间最大容忍系数预先设置,可以根据实际情况调节。所述时间阈值也可以不通过上述方式计算得到,而直接根据经验预先设定为固定值。
其中,一个功能模块的I/O请求阻塞数量的最大限制值Cx_max=Cx_total*Cx_tolerate,其中Cx_total为检测队列中该功能模块当前对应的I/O请求的总数量,Cx_tolerate为阻塞请求最大容忍系数,所述阻塞请求最大容忍系数预先设置,可以根据实际情况调节,这样最大限制值可以根据功能模块对应的I/O请求的总数量自动调节。所述最大限制值也不通过上述方式计算得到,而直接预先设定为固定值。每个功能模块的最大限制值可以不同,也可以强制预先设定为相同的值。
本申请实施例所提供的I/O阻塞检测装置针对I/O请求处理流向而非节点进行I/O阻塞检测,能够及时准确地检测到发生I/O请求阻塞的功能模块,从而有利于快速准确地解除I/O 请求阻塞,提高I/O请求调度的合理性。
本申请实施例还提供一种I/O阻塞检测设备,所述设备包括处理器,及存储器,所述存储器连接至所述处理器,用于存储程序指令,所述处理器运行所述程序指令以执行如图4所示的I/O阻塞检测方法。具体地,所述处理器用于:
接收功能模块发送的第一消息,所述第一消息在I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;将所述功能模块的标识、I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述所述差值大于所述时间阈值的I/O请求为超时I/O请求;统计每个功能模块对应的超时 I/O请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
其中,所述功能模块为所述I/O请求到达所述硬盘所经过的虚拟存储模块。所述处理器还用于:接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。
具体地,所述处理器用于:
接收功能模块发送的消息;判断所述消息是否为第一消息,若所述消息为第一消息,获取所述第一消息中携带的所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列;
若所述消息不是所述第一消息,判断所述消息是否为第二消息,所述第二消息由所述功能模块在对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;
若所述消息为所述第二消息,获取所述第二消息中的处理结束的I/O请求的标识,在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除;以及,
定时或周期性遍历所述检测队列,计算当前时间和所述检测队列中的映射关系中的I/O 请求到达时间之间的差值;
比较所述差值与预设的时间阈值,统计每个功能模块对应的超时I/O请求的数量,所述超时I/O请求为所述差值大于所述时间阈值的I/O请求;
比较所述数量和预设的最大限制值,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
其中,每个功能模块设置一个时间阈值。所述时间阈值可以为所述功能模块对历史处理的I/O请求的处理时间所计算的平均值。所述时间阈值也可以不通过上述方式计算得到,而直接根据经验预先设定为固定值。
其中,每个功能模块的最大限制值为每个功能模块中当前未处理完毕的I/O请求的总数量与预设系数的乘积。每个功能模块的最大限制值可以不同,也可以强制预先设定为相同的值。
本申请实施例还提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如图4所示的方法。
本申请实施例还提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如图4所示的方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个对象与另一个对象区分开来,而不一定要求或者暗示这些对象之间存在任何这种实际的关系或者逆序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、装置或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、装置或设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、装置或设备中还存在另外的相同要素。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置和设备实施例而言,由于其基本相似于方法实施例,所以描述得较简单,相关之处参见方法实施例中的说明即可。

Claims (7)

1.一种输入/输出I/O阻塞检测方法,由存储阵列的故障检测模块执行,所述存储阵列接收到的I/O请求经过至少一个功能模块到达所述存储阵列的硬盘,所述功能模块为I/O请求到达所述硬盘的过程中处理IO请求的虚拟存储模块,其特征在于,所述方法包括:
接收所述功能模块发送的第一消息,所述第一消息在所述I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;
将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;
检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求;
统计每个功能模块对应的超时I/O请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
2.如权利要求1所述的方法,其特征在于,还包括:
接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;
在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列中删除。
3.如权利要求1所述的方法,其特征在于,每个功能模块设置一个时间阈值,每个功能模块的所述时间阈值为所述功能模块对历史处理的I/O请求的处理时间所计算的平均值。
4.如权利要求1所述的方法,其特征在于,每个功能模块设置一个所述最大限制值,每个功能模块的最大限制值为每个功能模块中当前未处理完毕的I/O请求的总数量与预设系数的乘积。
5.一种I/O阻塞检测装置,应用于存储阵列,所述存储阵列接收到的I/O请求经过至少一个功能模块到达所述存储阵列的硬盘,所述功能模块为I/O请求到达所述硬盘的过程中处理IO请求的虚拟存储模块,其特征在于,包括:
接收模块,用于接收功能模块发送的第一消息,所述第一消息在所述I/O请求到达所述功能模块时由所述功能模块发送,所述第一消息中携带有所述功能模块的标识、所述I/O请求的标识以及I/O请求到达时间,所述I/O请求到达时间为所述I/O请求到达所述功能模块的时间;以及,
将所述功能模块的标识、所述I/O请求的标识以及所述I/O请求到达时间的映射关系添加至检测队列,所述检测队列中的I/O请求为没有被与所述I/O请求对应的功能模块处理完的I/O请求;
检测模块,用于检测所述检测队列中的映射关系中的I/O请求到达时间与当前时间的差值是否大于预设的时间阈值,所述差值大于所述时间阈值的I/O请求为超时I/O请求;以及,
统计每个功能模块对应的超时I/O请求的数量,确定超时I/O请求的数量大于预设的最大限制值的功能模块为存在I/O请求阻塞的功能模块。
6.如权利要求5所述的装置,其特征在于,所述接收模块还用于:
接收所述功能模块发送的第二消息,所述第二消息为所述功能模块对所述I/O请求处理结束时发送,所述第二消息携带有处理结束的I/O请求的标识;
在所述检测队列中找到所述处理结束的I/O请求的标识所对应的映射关系,将所述映射关系从所述检测队列删除。
7.一种I/O阻塞检测设备,包括:
处理器,及
存储器,连接至所述处理器,用于存储程序指令,所述处理器运行所述程序指令以执行权利要求1-4任意一项所述的I/O阻塞检测方法。
CN201711079605.4A 2017-11-06 2017-11-06 一种i/o阻塞检测方法、装置及设备 Active CN109753371B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711079605.4A CN109753371B (zh) 2017-11-06 2017-11-06 一种i/o阻塞检测方法、装置及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711079605.4A CN109753371B (zh) 2017-11-06 2017-11-06 一种i/o阻塞检测方法、装置及设备

Publications (2)

Publication Number Publication Date
CN109753371A CN109753371A (zh) 2019-05-14
CN109753371B true CN109753371B (zh) 2021-10-19

Family

ID=66399641

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711079605.4A Active CN109753371B (zh) 2017-11-06 2017-11-06 一种i/o阻塞检测方法、装置及设备

Country Status (1)

Country Link
CN (1) CN109753371B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913667B (zh) * 2020-08-06 2023-03-14 平安科技(深圳)有限公司 一种基于Ceph的OSD阻塞检测方法、系统、终端及存储介质
CN113672448A (zh) * 2021-07-07 2021-11-19 深圳Tcl新技术有限公司 BootLoader启动流程的监控方法、装置及存储介质
CN114020516B (zh) * 2022-01-05 2022-04-22 苏州浪潮智能科技有限公司 一种异常io处理的方法、系统、设备及可读存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1945521A (zh) * 2006-10-13 2007-04-11 中国科学院计算技术研究所 一种非同质存储设备的虚拟化系统及方法
CN101706742A (zh) * 2009-11-20 2010-05-12 北京航空航天大学 一种基于多核动态划分的非对称虚拟机i/o调度方法
CN104636080A (zh) * 2013-11-12 2015-05-20 国际商业机器公司 存储系统及用于其的方法
US9122505B1 (en) * 2013-01-31 2015-09-01 Parallels IP Holdings GmbH System and method for handling I/O timeout deadlines in virtualized systems
CN105094993A (zh) * 2015-08-18 2015-11-25 华为技术有限公司 一种多核处理器、数据同步的方法及装置
CN105556473A (zh) * 2014-12-27 2016-05-04 华为技术有限公司 一种i/o任务处理的方法、设备和系统
CN106407083A (zh) * 2016-10-26 2017-02-15 华为技术有限公司 故障检测方法及装置
CN106469088A (zh) * 2015-08-21 2017-03-01 华为技术有限公司 一种i/o请求调度方法及调度器

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1945521A (zh) * 2006-10-13 2007-04-11 中国科学院计算技术研究所 一种非同质存储设备的虚拟化系统及方法
CN101706742A (zh) * 2009-11-20 2010-05-12 北京航空航天大学 一种基于多核动态划分的非对称虚拟机i/o调度方法
US9122505B1 (en) * 2013-01-31 2015-09-01 Parallels IP Holdings GmbH System and method for handling I/O timeout deadlines in virtualized systems
CN104636080A (zh) * 2013-11-12 2015-05-20 国际商业机器公司 存储系统及用于其的方法
CN105556473A (zh) * 2014-12-27 2016-05-04 华为技术有限公司 一种i/o任务处理的方法、设备和系统
CN105094993A (zh) * 2015-08-18 2015-11-25 华为技术有限公司 一种多核处理器、数据同步的方法及装置
CN106469088A (zh) * 2015-08-21 2017-03-01 华为技术有限公司 一种i/o请求调度方法及调度器
CN106407083A (zh) * 2016-10-26 2017-02-15 华为技术有限公司 故障检测方法及装置

Also Published As

Publication number Publication date
CN109753371A (zh) 2019-05-14

Similar Documents

Publication Publication Date Title
US10936364B2 (en) Task allocation method and system
US9584617B2 (en) Allocating cache request in distributed cache system based upon cache object and marker identifying mission critical data
US10318366B2 (en) System and method for relationship based root cause recommendation
US20200387311A1 (en) Disk detection method and apparatus
US9294338B2 (en) Management computer and method for root cause analysis
CN109753371B (zh) 一种i/o阻塞检测方法、装置及设备
US9037826B1 (en) System for optimization of input/output from a storage array
US10909018B2 (en) System and method for end-to-end application root cause recommendation
US10015283B2 (en) Remote procedure call management
US8122158B1 (en) Method for improving I/O performance of host systems by applying future time interval policies when using external storage systems
US9027025B2 (en) Real-time database exception monitoring tool using instance eviction data
US10069753B2 (en) Relationship-based resource-contention analysis system and method
US20170091013A1 (en) Pcie error reporting and throttling
US20160020965A1 (en) Method and apparatus for dynamic monitoring condition control
AU2012202195A1 (en) Detecting and diagnosing misbehaving applications in virtualized computing systems
WO2015063889A1 (ja) 管理システム、プラン生成方法、およびプラン生成プログラム
US9003432B1 (en) Efficient management of kernel driver performance data
US20190354426A1 (en) Method and device for determining causes of performance degradation for storage systems
US9459799B1 (en) Identifying problematic application workloads based on associated response times
US11366606B2 (en) Smarter performance alerting mechanism combining thresholds and historical seasonality
CN109726151B (zh) 用于管理输入输出栈的方法、设备和介质
CN109510730B (zh) 分布式系统及其监控方法、装置、电子设备及存储介质
CN110837428B (zh) 存储设备管理方法及装置
US8275865B2 (en) Methods, systems and computer program products for selecting among alert conditions for resource management systems
US11334279B2 (en) Hierarchical blacklisting of storage system components

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant