一种IO操作处理方法及装置与流程

文档序号:17988863发布日期:2019-06-22 00:37阅读:193来源:国知局
一种IO操作处理方法及装置与流程

本申请涉及分布式存储技术领域,具体而言,涉及一种io操作处理方法及装置。



背景技术:

在分布式存储领域,一般将一段逻辑连续的存储空间映射为卷,又称为逻辑卷,以便通过卷进行数据的读写。为了提高卷中数据的可靠性,防止数据丢失,通常会通过另一个容量相等的卷进行数据备份,形成源卷和目标卷。针对源卷和目标卷,为了使源卷和目标卷中的数据一致,服务器可执行的数据备份操作包括如下两种操作过程:一种是、定期执行后台复制任务,也即后台输入输出(inputoutput、io)操作,从源卷中读取数据并拷贝至目标卷中的对应存储位置上;另一种是、若监测到主机发送的io写操作指令,则执行前台io写操作,即将io操作指令中指示的待写入数据同时写入源卷和目标卷的同一存储位置上。

但是,针对同一段存储区域,如果同时执行上述后台io操作和上述前台io写操作,那么仍然会导致源卷和目标卷中的数据不一致的问题。例如,服务器执行后台io操作任务,包括如下步骤:步骤1、从源卷中读取0至4m数据段的数据;步骤2、将读取到的数据写入到目标卷的0至4m数据段。若服务器在执行完步骤1,未执行步骤2时,接收到io操作指令并执行前台io写操作,将源卷和目标卷的0至4m数据段写入新数据,那么,后续在执行步骤2时,仍会将之前步骤1中读取的数据写入目标卷的0至4m数据段,这样目标卷中写入的新数据就会被覆盖掉,从而使源卷和目标卷数据不一致。



技术实现要素:

有鉴于此,本申请实施例的目的在于提供一种io操作处理方法及装置,以有效避免对同一段存储区域同时执行后台io操作和前台io写操作,进而避免出现源卷和目标卷中的数据不一致的情况。

第一方面,本申请提供一种io操作处理方法,包括:

获取待处理的目标输入输出io操作并对互斥锁加锁,其中,所述互斥锁加锁期间,仅允许所述目标io操作占用互斥数据结构,所述互斥数据结构中记录有正在执行的io操作所指向的逻辑卷的存储区域;

若所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域不存在重叠,则将所述目标存储区域添加至所述互斥数据结构中,并处理所述目标io操作;

在将所述目标io操作处理完成之后,删除所述互斥数据结构中记录的所述目标存储区域,并对所述互斥锁解锁。

本申请的一些实施例中,所述方法还包括:

若所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域存在重叠,则确定所述目标io操作与正在执行的io操作冲突,并对所述互斥锁解锁;

禁止处理所述目标io操作,直至确定所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域不存在重叠之后,重新处理所述目标io操作。

本申请的一些实施例中,在对所述互斥锁加锁之后,在判断所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域是否存在重叠之前,还包括:

确定所述互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值。

本申请的一些实施例中,若确定所述互斥数据结构中记录的存储区域的数据量超出预设数据量阈值,则所述方法还包括:

禁止处理所述目标io操作并对所述互斥锁解锁,直至确定所述互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值之后,重新获取所述目标io操作。

本申请的一些实施例中,在将所述目标存储区域添加至所述互斥数据结构中之后,并在处理所述目标io操作之前,还包括:

对所述互斥锁解锁;

在删除所述互斥数据结构中记录的所述目标存储区域之前,还包括:

对所述互斥锁加锁。

第二方面,本申请实施例还提供一种io操作处理装置,包括:

获取模块,用于获取待处理的目标输入输出io操作并对互斥锁加锁,其中,所述互斥锁加锁期间,仅允许所述目标io操作占用互斥数据结构,所述互斥数据结构中记录有正在执行的io操作所指向的逻辑卷的存储区域;

处理模块,用于若所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域不存在重叠,则将所述目标存储区域添加至所述互斥数据结构中,并处理所述目标io操作;

删除模块,用于在将所述目标io操作处理完成之后,删除所述互斥数据结构中记录的所述目标存储区域,并对所述互斥锁解锁。

本申请的一些实施例中,所述处理模块,还用于:

若所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域存在重叠,则确定所述目标io操作与正在执行的io操作冲突,并对所述互斥锁解锁;

禁止处理所述目标io操作,直至确定所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域不存在重叠之后,重新处理所述目标io操作。

本申请的一些实施例中,所述处理模块,还用于:

在判断所述目标io操作所指向的逻辑卷的目标存储区域与所述互斥数据结构中记录的存储区域是否存在重叠之前,确定所述互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值。

本申请的一些实施例中,所述处理模块,还用于:

若确定所述互斥数据结构中记录的存储区域的数据量超出预设数据量阈值,则禁止处理所述目标io操作并对所述互斥锁解锁,直至确定所述互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值之后,重新获取所述目标io操作。

本申请的一些实施例中,所述处理模块,还用于:

在将所述目标存储区域添加至所述互斥数据结构中之后,并在处理所述目标io操作之前,对所述互斥锁解锁;

所述删除模块,还用于:

在删除所述互斥数据结构中记录的所述目标存储区域之前,对所述互斥锁加锁。

第三方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面的任一种可能的实施方式中io操作处理方法的步骤。

第四方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面的任一种可能的实施方式中io操作处理方法的步骤。

本申请实施例提供的io操作处理方法及装置,通过互斥数据结构来记录正在执行的io操作所指向的逻辑卷的存储区域,并且互斥数据结构的访问或操作等权限可以通过互斥锁来控制,当获取到待处理的目标io操作时,对互斥锁加锁,在互斥锁加锁期间,仅允许目标io操作占用互斥数据结构;判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠,若不存在重叠,说明目标存储区域当前没有正在执行的io操作,则将目标存储区域添加至互斥数据结构中,并处理目标io操作;在将目标io操作处理完成之后,删除互斥数据结构中记录的目标存储区域,并对互斥锁解锁。由于只在目标存储区域与互斥数据结构中记录的存储区域不存在重叠的情况下,才对目标io操作进行处理,可以有效避免对同一段存储区域同时执行后台io操作和前台io写操作,进而避免出现源卷和目标卷中的数据不一致的情况。

另外,本申请实施例中,为互斥数据结构设置互斥锁,可以保证当前只有一个io操作占用互斥数据结构,因为,在互斥锁加锁期间,仅允许当前待处理的目标io操作占用互斥数据结构,其它io操作无法占用互斥数据结构。并且,在目标io操作处理完成后,及时对互斥锁解锁,以便其它待处理的io操作能够占用互斥数据结构。

为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它相关的附图。

图1示出了本申请实施例提供的一种io操作处理方法的流程示意图;

图2示出了本申请实施例提供的另一种io操作处理方法的流程示意图;

图3示出了本申请实施例提供的一种io操作处理装置的示意图;

图4示出了本申请实施例提供的一种电子设备的示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其它实施例,都属于本申请保护的范围。

考虑到针对同一段存储区域,如果同时执行后台io操作和前台io写操作,那么仍然会导致源卷和目标卷中的数据不一致的问题。为避免上述问题,需要保证前台io写操作和后台io操作互斥,所谓互斥,也即针对同一段存储区域,后台io操作和前台io写操作不能同时执行。

值得注意的是,目前常用的前台io写操作和后台io操作互斥的方式为:

(1)按照预设分段长度,对逻辑卷的容量进行分段。例如,逻辑卷的容量为12g,预设分段长度为2g,则分段结果为[0g,2g]、[2g,4g]、[4g,6g]、[6g,8g]、[8g,10g]、[10g,12g]。

(2)为每个分段设置互斥标识符,并将互斥标识符存储在内存中。其中,源卷和目标卷对应相同的互斥标识符,该互斥标识符初始状态为未置位。

(3)在前台io写操作或后台io操作执行前,先判断与io操作所指向的逻辑卷的存储区域有重叠的分段的互斥标识符是否已置位。若上述分段的互斥标识符均未置位,则将上述分段的互斥标识符全部置位,然后再进行io操作,当io操作执行完毕后,将上述分段的互斥标识符全部设置为未置位。若上述分段的互斥标识符有一个或者多个已置位,则等待执行io操作,直到上述分段的互斥标识符均为未置位。

目前的这种方式,当逻辑卷的容量很大时,预设分段长度越小,互斥标识符的数量越多,需要消耗的内存越大;预设分段长度越大,与io操作所指向的逻辑卷的存储区域有重叠的分段的出现概率就越高,相应地,io操作互斥等待事件(即,需要等待处理io操作直至前台io写操作和后台io操作互斥)的发生概率越高,进而造成io操作时延越大。因此,很难均衡内存消耗和io操作时延较大的问题。

针对上述问题,本申请提供了一种io操作处理方法及装置,首先获取待处理的目标io操作并对互斥锁加锁,判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠,若不存在重叠,说明目标存储区域当前没有正在执行的io操作,则将目标存储区域添加至互斥数据结构中,并处理目标io操作;在将目标io操作处理完成之后,删除互斥数据结构中记录的目标存储区域,并对互斥锁解锁。由此可以保证前台io写操作和后台io操作互斥,进而避免出现源卷和目标卷中的数据不一致的情况。并且,互斥数据结构仅记录正在执行的io操作所指向的逻辑卷的存储区域,不需要记录对应逻辑卷的所有存储区域,可以大大减小互斥数据结构所占用的内存空间。同时,相对于现有互斥方式,本申请的前台io写操作和后台io操作互斥等待的概率不依赖于逻辑卷的预设分段长度,可以有效降低io操作互斥等待事件的发生概率,从而降低io操作时延。

在介绍本申请的实施例之前,首先对互斥数据结构和互斥锁进行说明。

互斥数据结构可以用于记录正在执行的io操作所指向的逻辑卷的存储区域。在面向对象的程序语言中,上述数据结构可以是对象。例如为c++或java语言中的向量(vector)、地图(map)、集合(set)、表(list)或数组等数据结构,在此不做限制。

互斥数据结构以list为例,可以对list执行的操作包括:将当前待处理的目标io操作的目标存储区域范围添加至list,遍历list查看目标存储区域范围与list中记录的存储区域是否有重叠,将目标存储区域范围从list中删除等,另外,还可以判断list中记录的存储区域的数据量是否超出预设数据量阈值。具体操作过程将在下文实施例中进行介绍。

本申请实施例中,互斥数据结构的访问或操作等权限可以通过互斥锁来控制,在互斥锁加锁期间,只允许当前待处理的目标io操作占用互斥数据结构,即仅允许针对当前待处理的目标io操作对互斥数据结构进行操作,在对互斥锁解锁以后才允许另外的io操作占用互斥数据结构。

下面结合具体实施例对本申请提供的技术方案进行详细说明。

参照图1所示,为本申请实施例提供的一种io操作处理方法的流程示意图,包括以下步骤:

步骤s101,获取待处理的目标io操作并对互斥锁加锁,其中,互斥锁加锁期间,仅允许目标io操作占用互斥数据结构,互斥数据结构中记录有正在执行的io操作所指向的逻辑卷的存储区域。

本申请实施例中,待处理的目标io操作可以是前台io写操作,也可以是后台io操作。其中,前台io写操作即将io操作指令中指示的待写入数据同时写入源卷和目标卷的同一存储位置上;后台io操作可以是后台复制操作,即从源卷中读取数据并写入目标卷中的对应存储位置上。

针对后台io操作,由于服务器定期执行后台复制任务,即定期执行后台io操作,故服务器可以通过检测后台程序运行任务来确定是否有后台io操作任务。针对前台io写操作,服务器可以通过检测是否接收到主机发送的io操作指令来检测是否有前台io写操作。

具体的,互斥数据结构中记录的正在执行的io操作所指向的逻辑卷的存储区域,是指io操作正在对逻辑卷的哪一存储区域进行写数据或者读数据,例如,逻辑卷的存储容量为1g,互斥数据结构中记录有{offset,len}这一存储范围,其中,offset是相对于逻辑卷的起始地址的偏移量,len是指存储区域的长度,假设逻辑卷的起始地址为0,offset为100m,len为10m,则{offset,len}这一存储范围对应的逻辑卷的存储区域即[100m,110m]。

另外,由于源卷和目标卷的存储区域相对应,故互斥数据结构中记录的正在执行的io操作所指向的逻辑卷的存储区域,既可以表示源卷的存储区域,也可以包括目标卷的存储区域。

步骤s102,若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠,则将目标存储区域添加至互斥数据结构中,并处理目标io操作。

具体实施中,服务器在获取到待处理的目标io操作并对互斥锁加锁以后,可以遍历互斥数据结构,从而判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠,如果不存在重叠,说明逻辑卷的目标存储区域没有正在执行的io操作,此时可以将目标存储区域添加至互斥数据结构中,然后处理目标io操作。从而可以保证只有一个io操作对目标存储区域进行操作,避免出现针对同一段存储区域,后台io操作和前台io写操作同时执行的情况,即保证前台io写操作和后台io操作互斥,进而避免出现源卷和目标卷中的数据不一致的情况。

步骤s103,在将目标io操作处理完成之后,删除互斥数据结构中记录的目标存储区域,并对互斥锁解锁。

本申请实施例中,在目标io操作处理完成之后,将互斥数据结构中记录的目标存储区域删除,并对互斥锁解锁,以便后续其它io操作可以继续对目标存储区域进行操作,同时,可以保证互斥数据结构中记录的只是正在执行的io操作所指向的逻辑卷的存储区域。

此外,具体实施中,若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域存在重叠,则确定目标io操作与正在执行的io操作冲突,也即前台io写操作和后台io操作同时指向目标存储区域,这种情况下无法满足前台io写操作和后台io操作互斥,故当前禁止处理目标io操作,即暂时不对目标io操作进行处理,此时对互斥锁解锁,以使其它io操作可以占用互斥数据结构,即继续获取其它io操作,并判断是否处理其它io操作。当确定目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠之后,可以重新处理目标io操作。

此外,本申请实施例中,考虑到互斥数据结构需要占用一定量的内存,为了限制互斥数据结构的内存占用量,故,服务器在获取到待处理的目标io操作并对互斥锁加锁之后,在判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠之前,还可以执行如下步骤:

判断互斥数据结构中记录的存储区域的数据量是否超出预设数据量阈值,若未超出预设数据量阈值,则继续遍历互斥数据结构,以判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠;若互斥数据结构中记录的存储区域的数据量超出预设数据量阈值,则禁止处理目标io操作并对互斥锁解锁,直至确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值之后,可以重新获取目标io操作,进而判断是否处理目标io操作。通过判断互斥数据结构中记录的存储区域的数据量是否达到预设数据量阈值,仅在未达到预设数据量阈值的情况下再重新获取待处理的目标io操作并进行互斥检测,可以达到限制互斥数据结构所占用的内存的目的,从而保证消耗的内存较小。

另外,本申请的一实施例中,在将目标存储区域添加至互斥数据结构中之后,并在处理目标io操作之前,还可以对互斥锁解锁,这样,在目标io操作处理过程中,可以允许其它io操作占用互斥数据结构,从而降低io操作时延。同时,在删除互斥数据结构中记录的目标存储区域之前,还需要对互斥锁加锁,在删除互斥数据结构中记录的目标存储区域之后,再对互斥锁解锁。

因此,上述获取到目标io操作并对目标io操作进行处理的过程中,对互斥锁的操作可以包括一个加锁解锁过程,即在获取到目标io操作之后对互斥锁加锁,直至目标io操作处理完成并删除互斥数据结构中记录的目标存储区域之后,再对互斥锁解锁。还可以包括两个加锁解锁过程,即在获取到目标io操作之后对互斥锁加锁,在处理目标io操作之前对互斥锁解锁;当处理完目标io操作后再对互斥锁加锁,在删除互斥数据结构中记录的目标存储区域之后,再对互斥锁解锁。

参照图2所示,为本申请实施例提供的另一io操作处理方法的流程示意图,包括以下步骤:

步骤s201,获取待处理的目标io操作并对互斥锁加锁;

步骤s202,判断互斥数据结构中记录的存储区域的数据量是否超出预设数据量阈值,如果否,则执行步骤s203,如果是,则执行步骤s205;

步骤s203,判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠,如果否,则执行步骤s204,如果是,则执行步骤s205;

步骤s204,将目标存储区域添加至互斥数据结构中,并将io操作互斥结果设置为ok,继续执行步骤s206;

步骤s205,禁止处理目标io操作,将io操作互斥结果设置为eagain,即“重新执行”,继续执行步骤s206;

步骤s206,对互斥锁解锁;

步骤s207,判断io操作互斥结果是否为eagain,如果否,则执行步骤s208,如果是,则执行步骤s212;

步骤s208,处理目标io操作,并得到io操作处理结果,具体包括操作成功或操作失败;

步骤s209,对互斥锁加锁;

步骤s210,删除互斥数据结构中记录的目标存储区域;

步骤s211,对互斥锁解锁;

步骤s212,将io操作处理结果设置为eagain;

步骤s213,返回io操作处理结果。

本申请实施例提供的一种io操作处理方法,首先获取待处理的目标io操作并对互斥锁加锁,在确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值时,判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠,若不存在重叠,说明目标存储区域没有正在执行的io操作,允许处理目标io操作,此时将目标存储区域添加至互斥数据结构中,对互斥锁解锁,并处理目标io操作;若存在重叠,说明目标存储区域存在正在执行的io操作,禁止处理目标io操作,并对互斥锁解锁。从而可以保证只有一个io操作对目标存储区域进行操作,避免出现针对同一段存储区域,后台io操作和前台io写操作同时执行的情况,即保证前台io写操作和后台io操作互斥,进而避免出现源卷和目标卷中的数据不一致的情况。

另外,确定互斥数据结构中记录的存储区域的数据量未达到预设数据量阈值,可以达到限制互斥数据结构所占用的内存的目的,从而保证消耗的内存较小。并且,在处理目标io操作之前,对互斥锁解锁,可以在目标io操作处理过程中,可以允许其它io操作占用互斥数据结构,从而降低io操作时延。

参照图3所示,为本申请实施例提供的一种io操作处理装置的示意图,所述装置包括获取模块10、处理模块20和删除模块30;其中:

获取模块10,用于获取待处理的目标输入输出io操作并对互斥锁加锁,其中,互斥锁加锁期间,仅允许目标io操作占用互斥数据结构,互斥数据结构中记录有正在执行的io操作所指向的逻辑卷的存储区域;

处理模块20,用于若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠,则将目标存储区域添加至互斥数据结构中,并处理目标io操作;

删除模块30,用于在将目标io操作处理完成之后,删除互斥数据结构中记录的目标存储区域,并对互斥锁解锁。

一种可能的实施方式中,处理模块20,还用于:

若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域存在重叠,则确定目标io操作与正在执行的io操作冲突,并对互斥锁解锁;

禁止处理目标io操作,直至确定目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠之后,重新处理目标io操作。

一种可能的实施方式中,处理模块20,还用于:

在判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠之前,确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值。

一种可能的实施方式中,处理模块20,还用于:

若确定互斥数据结构中记录的存储区域的数据量超出预设数据量阈值时,禁止处理目标io操作并对互斥锁解锁,直至确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值之后,重新获取目标io操作。

一种可能的实施方式中,处理模块20,还用于:

在将目标存储区域添加至互斥数据结构中之后,并在处理目标io操作之前,对互斥锁解锁;

删除模块30,还用于:

在删除互斥数据结构中记录的目标存储区域之前,对互斥锁加锁。

本申请实施例提供的io操作处理方法及装置,可以有效避免对同一段存储区域同时执行后台io操作和前台io写操作,进而避免导致源卷和目标卷中的数据不一致的情况。并且,互斥数据结构仅记录正在执行的io操作所指向的逻辑卷的存储区域,不需要记录对应逻辑卷的所有存储区域,可以大大减小互斥数据结构所占用的内存空间。另外,在目标io操作处理过程中,可以允许其它io操作占用互斥数据结构,从而降低io操作时延。

如图4所示,本申请实施例所提供的一种电子设备400的结构示意图,包括:处理器401、存储器402和总线403;

上述存储器402存储有上述处理器401可执行的机器可读指令,当电子设备400运行时,上述处理器401与上述存储器402之间通过总线403通信,上述机器可读指令被上述处理器401执行时执行如下处理:

获取待处理的目标输入输出io操作并对互斥锁加锁,其中,互斥锁加锁期间,仅允许目标io操作占用互斥数据结构,互斥数据结构中记录有正在执行的io操作所指向的逻辑卷的存储区域;

若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠,则将目标存储区域添加至互斥数据结构中,并处理目标io操作;

在将目标io操作处理完成之后,删除互斥数据结构中记录的目标存储区域,并对互斥锁解锁。

一种可能的实施方式中,处理器401还可以执行如下处理:

若目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域存在重叠,则确定目标io操作与正在执行的io操作冲突,并对互斥锁解锁;

禁止处理目标io操作,直至确定目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域不存在重叠之后,重新处理目标io操作。

一种可能的实施方式中,处理器401还可以执行如下处理:在判断目标io操作所指向的逻辑卷的目标存储区域与互斥数据结构中记录的存储区域是否存在重叠之前,确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值。

另一种可能的实施方式中,处理器401还可以执行如下处理:

若确定互斥数据结构中记录的存储区域的数据量超出预设数据量阈值,则禁止处理目标io操作并对互斥锁解锁,直至确定互斥数据结构中记录的存储区域的数据量未超出预设数据量阈值之后,重新获取目标io操作。

另一种可能的实施方式中,处理器401还可以执行如下处理:

在将目标存储区域添加至互斥数据结构中之后,并在处理目标io操作之前,对互斥锁解锁;

在删除互斥数据结构中记录的目标存储区域之前,对互斥锁加锁。

其中,关于处理器401在执行io操作处理方法时所执行的具体处理流程可以参照上述方法实施例中的描述,这里不再展开说明。

本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中的io操作处理方法的步骤。

本申请实施例所提供的io操作处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的方法的步骤,具体可参见上述方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

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