G06F9/52
1.一种存储系统中数据处理方法,其特征在于,包括:
接收目标线程在要进行模式数据更改时发送的写锁申请;
如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
2.根据权利要求1所述的方法,其特征在于,还包括:
如果所述目标线程对所述模式数据更改完成,则确定当前是否存在其他线程发送的写锁申请;
如果存在,则触发其他线程对所述模式数据进行更改;
如果不存在,则释放所述第一写锁。
3.根据权利要求1所述的方法,其特征在于,还包括:
接收所述目标线程在要处理第二IO时发送的读锁申请,所述第二IO为用户数据正常处理IO;
如果当前所述模式数据已被分配第二写锁,则在所述第二写锁被释放后,为所述第二IO分配第一读锁,以使所述目标线程基于所述第一读锁,处理所述第二IO。
4.根据权利要求3所述的方法,其特征在于,在所述接收所述目标线程在要处理第二IO时发送的读锁申请之后,还包括:
如果当前所述模式数据未被分配写锁或者仅存在拥有读锁的IO,则为所述第二IO分配所述第一读锁。
5.根据权利要求3所述的方法,其特征在于,还包括:
在所述目标线程处理完成所述第二IO后,释放所述第一读锁。
6.根据权利要求1至5之中任一项所述的方法,其特征在于,还包括:
通过读写锁数据确定当前锁状态;
根据所述当前锁状态,确定当前是否存在拥有读锁的IO或者所述模式数据是否已被分配写锁。
7.根据权利要求6所述的方法,其特征在于,所述读写锁数据的高两位标识互斥量状态,低位标识读锁数量。
8.一种存储系统中数据处理装置,其特征在于,包括:
写锁申请单元,用于接收目标线程在要进行模式数据更改时发送的写锁申请;
写锁分配单元,用于如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
访问控制单元,用于在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
9.一种存储系统中数据处理设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述存储系统中数据处理方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述存储系统中数据处理方法的步骤。
本申请涉及计算机应用技术领域,特别是涉及一种存储系统中数据处理方法、装置、设备及存储介质。
随着计算机技术的快速发展,存储系统在各行业的应用逐渐增多。存储系统可以处理大量的用户数据,在运行过程中需要保证系统的稳定性和一致性。
因为存储系统的模块较多,如驱动、协议、缓存、磁盘空间管理、容灾备份等,使得存储系统中各种数据处理流程复杂。存储系统允许多线程并发进行相应数据处理,以充分发挥硬件计算能力,提升系统性能。但多线程并发进行数据处理,有可能出现所基于的数据不一致的情况,导致数据处理混乱,数据处理效率较低。
综上所述,如何在存储系统中进行数据处理,提高数据处理效率,是目前本领域技术人员急需解决的技术问题。
本申请的目的是提供一种存储系统中数据处理方法、装置、设备及存储介质,以提高存储系统中数据处理效率,提升系统性能。
为解决上述技术问题,本申请提供如下技术方案:
一种存储系统中数据处理方法,包括:
接收目标线程在要进行模式数据更改时发送的写锁申请;
如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
在本申请的一种具体实施方式中,还包括:
如果所述目标线程对所述模式数据更改完成,则确定当前是否存在其他线程发送的写锁申请;
如果存在,则触发其他线程对所述模式数据进行更改;
如果不存在,则释放所述第一写锁。
在本申请的一种具体实施方式中,还包括:
接收所述目标线程在要处理第二IO时发送的读锁申请,所述第二IO为用户数据正常处理IO;
如果当前所述模式数据已被分配第二写锁,则在所述第二写锁被释放后,为所述第二IO分配第一读锁,以使所述目标线程基于所述第一读锁,处理所述第二IO。
在本申请的一种具体实施方式中,在所述接收所述目标线程在要处理第二IO时发送的读锁申请之后,还包括:
如果当前所述模式数据未被分配写锁或者仅存在拥有读锁的IO,则为所述第二IO分配所述第一读锁。
在本申请的一种具体实施方式中,还包括:
在所述目标线程处理完成所述第二IO后,释放所述第一读锁。
在本申请的一种具体实施方式中,还包括:
通过读写锁数据确定当前锁状态;
根据所述当前锁状态,确定当前是否存在拥有读锁的IO或者所述模式数据是否已被分配写锁。
在本申请的一种具体实施方式中,所述读写锁数据的高两位标识互斥量状态,低位标识读锁数量。
一种存储系统中数据处理装置,包括:
写锁申请单元,用于接收目标线程在要进行模式数据更改时发送的写锁申请;
写锁分配单元,用于如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
访问控制单元,用于在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
一种存储系统中数据处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现上述任一项所述存储系统中数据处理方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述存储系统中数据处理方法的步骤。
应用本申请实施例所提供的技术方案,在接收到目标线程在要进行模式数据更改时发送的写锁申请的情况下,如果当前存在拥有读锁的第一IO,则在第一IO处理完成后,再为模式数据分配第一写锁,以使目标线程基于第一写锁对模式数据进行更改。对模式数据进行更改具有排外性,在目标线程对模式数据进行更改的过程中,限制其他线程对模式数据的访问。这样可以有效避免模式数据更改与其他用户数据正常处理IO之间的相互干扰,可以提高存储系统中数据处理效率,提升系统性能。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中一种存储系统中数据处理方法的实施流程图;
图2为本申请实施例中一种锁状态变换过程示意图;
图3为本申请实施例中一种存储系统中数据处理装置的结构示意图;
图4为本申请实施例中一种存储系统中数据处理设备的结构示意图。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,为本申请实施例所提供的一种存储系统中数据处理方法的实施流程图,该方法可以包括以下步骤:
S110:接收目标线程在要进行模式数据更改时发送的写锁申请。
在本申请实施例中,存储系统允许多线程并发访问。目标线程可以为存储系统中开启的任意一个线程。
在实际应用中,根据系统需要或者在进行异常IO(Input/Output,输入/输出)处理时都可能需要进行模式数据更改。这时可以启动一个线程进行相应的模式数据更改操作。
所谓模式数据,即modeData,是可以影响IO处理流程/策略的变量。要进行模式数据更改时,需保证当前不存在正在处理的数据,否则容易导致数据处理流程变化,所基于的数据出现不一致的情况。
目标线程在要进行模式数据更改时,可以先向存储系统发送相应的写锁申请。因为进行模式数据更改,可能会对用户数据正常处理IO产生影响,所以需要发出写锁申请。在模式数据拥有写锁被目标线程更改过程中,不允许其他线程的访问。
在接收到目标线程在要进行模式数据更改时发送的写锁申请后,可以执行步骤S120的操作。
S120:如果当前存在拥有读锁的第一IO,则在第一IO处理完成后,为模式数据分配第一写锁,以使目标线程基于所述第一写锁对所述模式数据进行更改。
存储系统在接收到目标线程在要进行模式数据更改时发送的写锁申请后,可以先确定当前是否存在拥有读锁的IO。
如果当前存在拥有读锁的IO,则目标线程进行模式数据更改将会影响当前拥有读锁的IO的正常处理。所以,在当前存在拥有读锁的第一IO的情况下,可以先保留目标线程的写锁申请,在拥有读锁的第一IO均处理完成后,再为模式数据分配第一写锁,以使模式数据拥有写锁,目标线程基于该第一写锁可以对模式数据进行更改。第一IO可以有一个或多个。
S130:在目标线程对模式数据进行更改的过程中,限制其他线程对模式数据的访问。
在实际应用中,存储系统允许多线程并发访问。为模式数据分配第一写锁后,目标线程可以开始对模式数据进行更改。在目标线程对模式数据进行更改的过程中,可能会有其他线程在有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后,可以释放第一读锁。
在本申请实施例中,存储系统可以通过LUN(Logical Unit Number,逻辑单元号)的划分来实现后端磁盘资源的管理,上层各特性模块,如缓存、快照、镜像、自精简配置等会对LUN进行封装,来管理模式数据。模式数据影响着用户数据在相应模块的处理方式。比如,缓存中典型的模式数据为写缓存模式writeMode:WT(writethrough)/WB(writeback)。数据在WB/WT模式下处理策略是不一致的,尤其是在涉及到存储双控缓存镜像时。在WB模式下,CPU更新缓存时,只要把更新的缓存区标记一下,并不同步更新后端存储,只是在缓存区数据要被新进入的数据取代时,才更新后端存储。在WT模式下,CPU向缓存写入数据时,同时向后端存储也写一份,使缓存和后端存储的数据保持一致。
用户数据正常处理IO不会改变模式数据,但是模式数据改变时需要限制用户数据正常处理IO。
在相关技术中,读写锁允许多个读线程共享互斥量,对写操作保证仅限制一个线程处理。读写互斥量对多线程进行IO处理访问共享变量时比较有效,尤其是在正常IO处理被异常IO处理打断时。例如,SCSI(Small Computer System Interface,小型计算机系统接口)的前后端在IO处理过程中会使用单线程分配超级块controlBlock,但是当遇到超时、链路断开等异常IO需要处理时,也需要修改controlBlock,即需要进行模式数据更改。这就导致了正常流程和错误流程的冲突,会导致数据一致性问题。另外,模式数据的改变,也会影响正常IO处理的进行,也需要通过读写锁机制来进行保证。
本申请实施例在进行用户数据正常处理IO的处理时使用读锁,因为读锁不会影响其他要进行的用户数据正常处理IO的处理,不需要限制其他线程获取读锁;在进行模式数据更改时使用写锁,来保证其他线程不能访问模式数据,以及不让其他线程再次获取写锁或者读锁。
在本申请的一个实施例中,该方法还可以包括以下步骤:
第一个步骤:通过读写锁数据确定当前锁状态;
第二个步骤:根据当前锁状态,确定当前是否存在拥有读锁的IO或者模式数据已被分配写锁。
为便于描述,将上述两个步骤结合起来进行说明。
在本申请实施例中,可以通过读写锁数据Counter确定当前锁状态。锁状态可以有迅捷FAST状态、静默中QUIESING状态、静默QUIESCED状态、排外EXCLUSIVE状态等。
可以通过读写锁模块获得读写锁数据。读写锁模块可以包括线程库中标准的互斥量mutex和读写条件变量condition,以及reader/writer/counter变量。reader表示读锁数量,writer代表写锁数量,而counter则是一个组合状态,用于通过指令操作来判断是否能够加减读写锁。
读写锁数据counter的高两位标识互斥量状态,低位标识读锁数量。在实际应用中,读写锁数据可以为32位整型数据,其中的高两位标识互斥量mutex状态。如果这两位被清除则标识当前没有获取到的写锁或者正在申请的写锁,属于FAST状态。在FAST状态中,无锁或者存在获取到的读锁,该状态可以允许多线程申请读锁,每分配出一个读锁即在标识读锁数量的低位增加1,可以通过增加reader/counter值实现,在该状态下允许获取写锁。如果高两位被设置则标识有获取到的写锁或者正在申请的写锁,此时如果读写锁数据的标识读锁数量的低位不为0,则表明有读锁未释放,当前处于QUIESCING状态,反之如果读写锁数据的标识读锁数量的低位为0,则表示当前处于QUIESCED状态,此后则可以获取写锁。存在获取到的写锁的状态为EXCLUSIVE状态。写锁释放后下一个写锁可处理。
随着线程对于IO的处理,锁状态不断发生变化。各锁状态之间的转换关系可以参见图2所示,在无锁或者存在获取到的读锁的FAST状态,可以转换到QUIESCING状态,即存在获取到的读锁和正在申请的写锁,从QUIESCING状态可以转换到QUIESCED状态,即存在正在申请的写锁,QUIESCED状态与EXCLUSIVE状态可以互相转换,EXCLUSIVE状态即为存在获取到的写锁的状态,从QUIESCED状态可以转换到FAST状态。
锁状态与计数器的数据的对应关系举例如下:
表1
根据当前锁状态,可以确定当前是否存在拥有读锁的IO或模式数据是否已被分配写锁。
在本申请实施例中,可以利用线程库中标准互斥量和条件变量来实现读写锁。为了提高性能表现能力,减少读写锁加锁和解锁过程的消耗,本申请实施例使用原子自增/自减,or/compare/exchange等指令操作。
本申请实施例可以在较大程度上控制正常IO处理流程和异常处理流程的时序,保证在模块内部的原子性处理流程,提高系统稳定性。
相应于上面的方法实施例,本申请实施例还提供了一种存储系统中数据处理装置,下文描述的存储系统中数据处理装置与上文描述的存储系统中数据处理方法可相互对应参照。
参见图3所示,该装置包括:
写锁申请单元310,用于接收目标线程在要进行模式数据更改时发送的写锁申请;
写锁分配单元320,用于如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
访问控制单元330,用于在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
应用本申请实施例所提供的装置,在接收到目标线程在要进行模式数据更改时发送的写锁申请的情况下,如果当前存在拥有读锁的第一IO,则在第一IO处理完成后,再为模式数据分配第一写锁,以使目标线程基于第一写锁对模式数据进行更改。对模式数据进行更改具有排外性,在目标线程对模式数据进行更改的过程中,限制其他线程对模式数据的访问。这样可以有效避免模式数据更改与其他用户数据正常处理IO之间的相互干扰,可以提高存储系统中数据处理效率,提升系统性能。
在本申请的一种具体实施方式中,还包括写锁释放控制单元,用于:
如果所述目标线程对所述模式数据更改完成,则确定当前是否存在其他线程发送的写锁申请;
如果存在,则触发其他线程对所述模式数据进行更改;
如果不存在,则释放所述第一写锁。
在本申请的一种具体实施方式中,还包括:
读锁申请单元,用于接收目标线程在要处理第二IO时发送的读锁申请,第二IO为用户数据正常处理IO;
读锁分配单元,用于如果当前所述模式数据已被分配第二写锁,则在所述第二写锁被释放后,为所述第二IO分配第一读锁,以使所述目标线程基于所述第一读锁,处理所述第二IO。
在本申请的一种具体实施方式中,读锁分配单元,还用于:
在接收目标线程在要处理第二IO时发送的读锁申请之后,如果当前所述模式数据未被分配写锁或者仅存在拥有读锁的IO,则为所述第二IO分配所述第一读锁。
在本申请的一种具体实施方式中,还包括读锁释放单元,用于:
在目标线程处理完成第二IO后,释放第一读锁。
在本申请的一种具体实施方式中,还包括状态确定单元,用于:
通过读写锁数据确定当前锁状态;
根据当前锁状态,确定当前是否存在拥有读锁的IO或者所述模式数据是否已被分配写锁。
在本申请的一种具体实施方式中,读写锁数据的高两位标识互斥量状态,低位标识读锁数量。
相应于上面的方法实施例,本申请实施例还提供了一种存储系统中数据处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现上述存储系统中数据处理方法的步骤。
如图4所示,为存储系统中数据处理设备的组成结构示意图,存储系统中数据处理设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。
在本申请实施例中,处理器10可以为中央处理器(Central Processing Unit,CPU)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。
处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行存储系统中数据处理方法的实施例中的操作。
存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本申请实施例中,存储器11中至少存储有用于实现以下功能的程序:
接收目标线程在要进行模式数据更改时发送的写锁申请;
如果当前存在拥有读锁的第一IO,则在所述第一IO处理完成后,为所述模式数据分配第一写锁,以使所述目标线程基于所述第一写锁对所述模式数据进行更改;
在所述目标线程对所述模式数据进行更改的过程中,限制其他线程对所述模式数据的访问。
在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能(比如监测功能、通信功能)所需的应用程序等;存储数据区可存储使用过程中所创建的数据,如读写锁数据等。
此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
通信接口13可以为通信模块的接口,用于与其他设备或者系统连接。
当然,需要说明的是,图4所示的结构并不构成对本申请实施例中存储系统中数据处理设备的限定,在实际应用中存储系统中数据处理设备可以包括比图4所示的更多或更少的部件,或者组合某些部件。
相应于上面的方法实施例,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述存储系统中数据处理方法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
本文发布于:2023-04-15 10:41:02,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/87230.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |