一种用于raid io的内存管理方法、系统、终端及存储介质

著录项
  • CN201911089362.1
  • 20191108
  • CN111007987A
  • 20200414
  • 苏州浪潮智能科技有限公司
  • 邸忠辉
  • G06F3/06
  • G06F3/06 G06F9/50

  • 江苏省苏州市吴中区吴中经济开发区郭巷街道官浦路1号9幢
  • 江苏(32)
  • 济南舜源专利事务所有限公司
  • 刘雪萍
摘要
本发明提供一种用于raid io的内存管理方法、系统、终端及存储介质,包括:将raid io按操作流程分类;根据raid io所属类别生成内存参数;根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。本发明在raid io开始的时候就申请了整个raid io流程的所需内存,因此不会存在raid io流程的进行中出现内存不足从而进行等待或者失败的各种复杂操作,简化了流程。一次分配释放内存,也比多次分配释放内存效率更高,耗时更少,性能更好。
权利要求

1.一种用于raid io的内存管理方法,其特征在于,包括:

将raid io按操作流程分类;

根据raid io所属类别生成内存参数;

根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

2.根据权利要求1所述的方法,其特征在于,所述根据raidio所属类别生成内存参数,包括:

根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

3.根据权利要求1所述的方法,其特征在于,所述根据内存参数为raidio操作申请内存并在申请完成后执行所述raid io操作,包括:

在所述raid io操作流程的开始阶段请求内存;

若内存请求成功,则构造并初始化raid io操作的管理结构;

若内存请求失败,则将raid io请求存入等待链表。

4.根据权利要求1所述的方法,其特征在于,所述监控所述raidio操作执行结果,包括:

采集raid io操作执行结果;

若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

5.一种用于raid io的内存管理系统,其特征在于,包括:

操作分类单元,配置用于将raid io按操作流程分类;

内存计算单元,配置用于根据raid io所属类别生成内存参数;

内存申请单元,配置用于根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

内存释放单元,配置用于监控所述raidio操作执行结果,在所述raidio操作执行完成后释放申请的内存。

6.根据权利要求5所述的系统,其特征在于,所述内存计算单元包括:

结构计算模块,配置用于根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

内存计算模块,配置用于根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

7.根据权利要求5所述的系统,其特征在于,所述内存申请单元包括:

内存请求模块,配置用于在所述raid io操作流程的开始阶段请求内存;

结构构造模块,配置用于若内存请求成功,则构造并初始化raid io操作的管理结构;

请求保存模块,配置用于若内存请求失败,则将raid io请求存入等待链表。

8.根据权利要求5所述的系统,其特征在于,所述内存释放单元包括:

结果采集模块,配置用于采集raid io操作执行结果;

重复执行模块,配置用于若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

失败定位模块,配置用于若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

9.一种终端,其特征在于,包括:

处理器;

用于存储处理器的执行指令的存储器;

其中,所述处理器被配置为执行权利要求1-4任一项所述的方法。

10.一种存储有计算机程序的计算机可读存储介质,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一项所述的方法。

说明书
技术领域

本发明涉及数据存储技术领域,具体涉及一种用于raid io的内存管理方法、系统、终端及存储介质。

在云计算数据中心中,数据存储的性能和安全性是用户关心的核心问题。而存储系统得内存使用能够很大程度上影响存储系统得稳定性和性能。存储系统相当复杂,代码多达数百万行或千万行,对内存的使用和管理提出了很高的要求。

在raid的io方面内存管理尤其重要,通常raid的io路径上使用的内存需要分多次从多个内存池申请,并分多次在内存使用完后立即释放,这虽然是为了充分和精细化的对内存管理和利用。但是首先由于整个raid io路径上的数据缓存为主要使用的内存,而其他管理结构的小内存数量繁多,总量大小却占比非常小;其次,频繁的对内存进行申请和释放的操作,不如一次申请和释放性能更好;第三,如果系统并发量很大,可能存在大量raid io进行到一半时,内存或内存池耗尽,批量io进行等待,甚至导致系统卡住;第四,由于代码庞大,raid io路径上涉及内存分配和使用的地方非常多,经常造成引用已释放内存、内存重复释放、内存泄露等问题发生,这类问题解决起来非常困难,经常耗费大量人力和时间。

针对现有技术的上述不足,本发明提供一种用于raid io的内存管理方法、系统、终端及存储介质,以解决上述技术问题。

第一方面,本发明提供一种用于raid io的内存管理方法,包括:

将raid io按操作流程分类;

根据raid io所属类别生成内存参数;

根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

进一步的,所述根据raid io所属类别生成内存参数,包括:

根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

进一步的,所述根据内存参数为raid io操作申请内存并在申请完成后执行所述raid io操作,包括:

在所述raid io操作流程的开始阶段请求内存;

若内存请求成功,则构造并初始化raid io操作的管理结构;

若内存请求失败,则将raid io请求存入等待链表。

进一步的,所述监控所述raid io操作执行结果,包括:

采集raid io操作执行结果;

若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

第二方面,本发明提供一种用于raid io的内存管理系统,包括:

操作分类单元,配置用于将raid io按操作流程分类;

内存计算单元,配置用于根据raid io所属类别生成内存参数;

内存申请单元,配置用于根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

内存释放单元,配置用于监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

进一步的,所述内存计算单元包括:

结构计算模块,配置用于根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

内存计算模块,配置用于根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

进一步的,所述内存申请单元包括:

内存请求模块,配置用于在所述raid io操作流程的开始阶段请求内存;

结构构造模块,配置用于若内存请求成功,则构造并初始化raid io操作的管理结构;

请求保存模块,配置用于若内存请求失败,则将raid io请求存入等待链表。

进一步的,所述内存释放单元包括:

结果采集模块,配置用于采集raid io操作执行结果;

重复执行模块,配置用于若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

失败定位模块,配置用于若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

第三方面,提供一种终端,包括:

处理器、存储器,其中,

该存储器用于存储计算机程序,

该处理器用于从存储器中调用并运行该计算机程序,使得终端执行上述的终端的方法。

第四方面,提供了一种计算机存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。

本发明的有益效果在于,

本发明提供的用于raid io的内存管理方法、系统、终端及存储介质,通过把不同的raid io操作进行分类,进而计算不同io操作所需要的内存大小,在raid收到io请求后根据该raid io操作类型一次性申请所需要的内存,该内存用于构造本次raid io操作的所有管理结构及数据缓存。等到该raid io操作完成之后,一次性将内存释放。由于在raid io开始的时候就申请了整个raid io流程的所需内存,因此不会存在raid io流程的进行中出现内存不足从而进行等待或者失败的各种复杂操作,简化了流程。一次分配释放内存,也比多次分配释放内存效率更高,耗时更少,性能更好。而在raid io执行完成后一次释放所有内存,也降低了引用已释放内存、内存重复释放、内存泄露等问题发生的机会,使存储系统更加健壮。同时由于raid io过程中所有管理和数据信息都存在,较完整的保留了操作的信息,存储出现问题后也更容易定位和调试。所以这优化了系统的实现,大大提高了存储系统的健壮性。

此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一个实施例的方法的示意性流程图。

图2是本发明一个实施例的方法的示意性流程图。

图3是本发明一个实施例的系统的示意性框图。

图4为本发明实施例提供的一种终端的结构示意图。

为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

下面对本发明中出现的关键术语进行解释。

raid io:磁盘阵列输入输出操作。

图1是本发明一个实施例的方法的示意性流程图。其中,图1执行主体可以为一种用于raid io的内存管理系统。

如图1所示,该方法100包括:

步骤110,将raid io按操作流程分类;

步骤120,根据raid io所属类别生成内存参数;

步骤130,根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

步骤140,监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

可选地,作为本发明一个实施例,所述根据raid io所属类别生成内存参数,包括:

根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

可选地,作为本发明一个实施例,所述根据内存参数为raid io操作申请内存并在申请完成后执行所述raid io操作,包括:

在所述raid io操作流程的开始阶段请求内存;

若内存请求成功,则构造并初始化raid io操作的管理结构;

若内存请求失败,则将raid io请求存入等待链表。

可选地,作为本发明一个实施例,所述监控所述raid io操作执行结果,包括:

采集raid io操作执行结果;

若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

为了便于对本发明的理解,下面以本发明用于raid io的内存管理方法的原理,结合实施例中对用于raid io的内存进行管理的过程,对本发明提供的用于raid io的内存管理方法做进一步的描述。

具体的,所述用于raid io的内存管理方法包括:

S1、将raid io按操作流程分类。

对不同的raid io操作进行分类,由于各种raid io操作流程不同造成对内存的使用量不同。由于raid数据按照条带化进存取,因此对各raid io操作按流程的的条带数量进行分类。

S2、根据raid io所属类别生成内存参数。

由于raid io流程的操作是可预测的,因此可以实现将各种io操作管理结构及数据缓存的内存使用量计算出来。以raid的写操作为例,由于raid数据按照条带化进存取。因此假设请求写三个条带的数据。则需要的内存管理结构有:一个TCB用来管理本次IO操作的数据结构、一个TCB对应三个SIO结构管理三个数据条带的写流程、每个SIO对应多个IPK,每个IPK管理一个数据分块的写操作流程;同时还包含本次io操作相关的TCS结构等及每个条带FSW等结构、每个分块操作中所需要的xor等数据结构;还可能包含部分对故障处理等的管理结构。

不同条带数量的操作对应不同的管理结构,每种管理结构占用的内存是定值,由此可以计算出不同类别的raid io操作所需的内存大小。

S3、根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raidio操作。

参考图2,在raid io流程操作的开始阶段请求内存,如果内存请求成功,则构造并初始化raid io操作的管理结构TCB,并继续io流程;如果内存分配失败,说明系统的内存已经比较紧张。将io请求放入等待链表,当有内存释放时,从等待链表中将其取出,继续请求内存,若成功,则继续io流程,若失败,则仍然放回请求链表中。

S4、监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

将io操作拆分成三个条带的操作,进一步对每个条带拆分成对每个分块数据的操作。由于每个条带及分块操作的管理结构已经申请内存,只需要对其初始化。某个条带或分块操作完成后,并不释放其管理结构的内存。

当io操作的某个条带或分块完成后,返回结果是非成功时,根据其错误码进行相应的错误处理。如果错误为超时或者媒介失败等。需要将该条带或者分块进行重试,此时由于所有io管理内存结构及数据缓存仍然存在,可以直接使用。如果重试设定次数后仍然失败,或错误为非可重试错误,则返回错误码给上层,并将错误的raid条带记录到相应的raid管理中。以便进行坏块管理,磁盘离线等管理操作。

如果io操作返回非可重试错误,或返回重试错误,但重试失败超过设定次数或所有条带和分块返回成功,即raid io操作的所有分块均返回最终执行结果则释放所有的内存,并返回相应的操作结果。

如图3示,该系统300包括:

操作分类单元310,配置用于将raid io按操作流程分类;

内存计算单元320,配置用于根据raid io所属类别生成内存参数;

内存申请单元330,配置用于根据所述内存参数为raid io操作申请内存,并在申请完成后执行所述raid io操作;

内存释放单元340,配置用于监控所述raid io操作执行结果,在所述raid io操作执行完成后释放申请的内存。

可选地,作为本发明一个实施例,所述内存计算单元包括:

结构计算模块,配置用于根据操作流程类别的条带数量计算各操作流程类别对应的管理结构;

内存计算模块,配置用于根据所述管理结构和对应类别raid io操作执行数据计算各类别raid io操作所需内存大小。

可选地,作为本发明一个实施例,所述内存申请单元包括:

内存请求模块,配置用于在所述raid io操作流程的开始阶段请求内存;

结构构造模块,配置用于若内存请求成功,则构造并初始化raid io操作的管理结构;

请求保存模块,配置用于若内存请求失败,则将raid io请求存入等待链表。

可选地,作为本发明一个实施例,所述内存释放单元包括:

结果采集模块,配置用于采集raid io操作执行结果;

重复执行模块,配置用于若执行结果中存在失败操作条带,则对所述失败操作条带重复执行;

失败定位模块,配置用于若重复执行次数超过预设次数后所述失败操作条带仍执行失败,则将所述失败操作条带保存至相应raid管理中。

图4为本发明实施例提供的一种终端系统400的结构示意图,该终端系统400可以用于执行本发明实施例提供的用于raid io的内存管理方法。

其中,该终端系统400可以包括:处理器410、存储器420及通信单元430。这些组件通过一条或多条总线进行通信,本领域技术人员可以理解,图中示出的服务器的结构并不构成对本发明的限定,它既可以是总线形结构,也可以是星型结构,还可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

其中,该存储器420可以用于存储处理器410的执行指令,存储器420可以由任何类型的易失性或非易失性存储终端或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。当存储器420中的执行指令由处理器410执行时,使得终端400能够执行以下上述方法实施例中的部分或全部步骤。

处理器410为存储终端的控制中心,利用各种接口和线路连接整个电子终端的各个部分,通过运行或执行存储在存储器420内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行电子终端的各种功能和/或处理数据。所述处理器可以由集成电路(Integrated Circuit,简称IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器410可以仅包括中央处理器(Central Processing Unit,简称CPU)。在本发明实施方式中,CPU可以是单运算核心,也可以包括多运算核心。

通信单元430,用于建立通信信道,从而使所述存储终端可以与其它终端进行通信。接收其他终端发送的用户数据或者向其他终端发送用户数据。

本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。

因此,本发明通过把不同的raid io操作进行分类,进而计算不同io操作所需要的内存大小,在raid收到io请求后根据该raid io操作类型一次性申请所需要的内存,该内存用于构造本次raid io操作的所有管理结构及数据缓存。等到该raid io操作完成之后,一次性将内存释放。由于在raid io开始的时候就申请了整个raid io流程的所需内存,因此不会存在raid io流程的进行中出现内存不足从而进行等待或者失败的各种复杂操作,简化了流程。一次分配释放内存,也比多次分配释放内存效率更高,耗时更少,性能更好。而在raid io执行完成后一次释放所有内存,也降低了引用已释放内存、内存重复释放、内存泄露等问题发生的机会,使存储系统更加健壮。同时由于raid io过程中所有管理和数据信息都存在,较完整的保留了操作的信息,存储出现问题后也更容易定位和调试。所以这优化了系统的实现,大大提高了存储系统的健壮性,本实施例所能达到的技术效果可以参见上文中的描述,此处不再赘述。

本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中如U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质,包括若干指令用以使得一台计算机终端(可以是个人计算机,服务器,或者第二终端、网络终端等)执行本发明各个实施例所述方法的全部或部分步骤。

本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于终端实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

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

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

尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

本文发布于:2024-09-25 00:39:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/86385.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议