一种元数据管理内存申请方法、装置、设备及介质

阅读: 评论:0

著录项
  • CN202211049483.5
  • 20220830
  • CN115408308A
  • 20221129
  • 苏州浪潮智能科技有限公司
  • 张刚;王鹏飞;蒋米传
  • G06F12/0804
  • G06F12/0804 G06F12/0882

  • 江苏省苏州市吴中经济开发区郭巷街道官浦路1号9幢
  • 江苏(32)
  • 北京集佳知识产权代理有限公司
  • 姚莹丽
摘要
本申请公开了一种元数据管理内存申请方法、装置、设备及介质,包括:基于自身内存大小确定出元数据管理所需内存页数;更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。这样,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。
权利要求

1.一种元数据管理内存申请方法,其特征在于,应用于多控集中双控存储设备中的任意控制器,包括:

基于自身内存大小确定出元数据管理所需内存页数;

更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;

触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

2.根据权利要求1所述的元数据管理内存申请方法,其特征在于,所述更新第一结构体成员的最高位,包括:

将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

3.根据权利要求2所述的元数据管理内存申请方法,其特征在于,还包括:

将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

4.根据权利要求3所述的元数据管理内存申请方法,其特征在于,所述将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,包括:

将所述内存页数赋值给预设临时变量;

将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;

将所述与运算后变量与更新后的第一结构体成员进行或运算。

5.根据权利要求4所述的元数据管理内存申请方法,其特征在于,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。

6.根据权利要求5所述的元数据管理内存申请方法,其特征在于,所述对所述第二结构体成员的最高位进行清零操作的过程为:

对所述第二结构体成员与所述预设掩码进行与运算。

7.根据权利要求1至6任一项所述的元数据管理内存申请方法,其特征在于,所述基于自身内存大小确定出元数据管理所需内存页数之前,还包括:

获取所述CSM端发送的申请内存页数查询消息;

基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动基于自身内存大小确定出元数据管理所需内存页数的步骤。

8.一种元数据管理内存申请装置,其特征在于,应用于多控集中双控存储设备中的任意控制器,包括:

内存页数确定模块,用于基于自身内存大小确定出元数据管理所需内存页数;

内存页数保存模块,用于更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;

消息发送模块,用于触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

9.一种电子设备,其特征在于,包括存储器和处理器,其中:

所述存储器,用于保存计算机程序;

所述处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的元数据管理内存申请方法。

10.一种计算机可读存储介质,其特征在于,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的元数据管理内存申请方法。

说明书
技术领域

本申请涉及内存申请技术领域,特别涉及一种元数据管理内存申请方法、装置、设备及介质。

多控集是指有两台及以上的双控存储设备组建的集,其中,整个集拥有一个共同的CSM(即Control state machine,在存储系统中表示为各个模块的控制状态机),来控制集的管理信息,每台存储拥有两个控制器,可算作一个IOGROUP(即Input/Outputgroup,输入输出组),多控集中由几台存储设备组成就包含几个IOGROUP,组成集的存储设备内存大小可以不相同。一个IOGROUP中可创建多个全闪精简池,当在多控集中使用全闪精简池时,要对全闪精简池使用的元数据管理部分的内存页进行动态的分配和回收,即要在对某个IOGROUP中创建首个全闪精简池时,就要从DMM(即Dynamic memorymanagement,动态内存管理模块)模块申请该IOGROUP的精简池元数据管理所需要的内存页,而当删除某个IOGROUP中的最后全闪精简池时,则要将该IOGROUP中的申请的精简池元数据管理所需的内存页进行释放,还给DMM模块。

目前,控制器在计算出元数据管理所需要的动态申请的内存页数后,将内存页数保存在控制器端指定的结构体成员中,通过消息机制发送给CSM端,CSM端收到消息后,将内存页数保存在CSM端指定的结构体成员中,但如果控制器在计算出内存页数后,与结构体成员保存的值相同,则表明控制器端的结构体成员与CSM端的结构体成员的值相同,不会触发消息机制,CSM端保存的值便不会被更新,相应的回调函数不会被触发,后续流程就不会执行,导致全闪精简池无法被正常创建。

有鉴于此,本申请的目的在于提供一种元数据管理内存申请方法、装置、设备及介质,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。其具体方案如下:

第一方面,本申请公开了一种元数据管理内存申请方法,应用于多控集中双控存储设备中的任意控制器,包括:

基于自身内存大小确定出元数据管理所需内存页数;

更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;

触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

可选的,所述更新第一结构体成员的最高位,包括:

将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

可选的,还包括:

将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

可选的,所述将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,包括:

将所述内存页数赋值给预设临时变量;

将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;

将所述与运算后变量与更新后的第一结构体成员进行或运算。

可选的,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。

可选的,所述对所述第二结构体成员的最高位进行清零操作的过程为:

对所述第二结构体成员与所述预设掩码进行与运算。

可选的,所述基于自身内存大小确定出元数据管理所需内存页数之前,还包括:

获取所述CSM端发送的申请内存页数查询消息;

基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动基于自身内存大小确定出元数据管理所需内存页数的步骤。

第二方面,本申请公开了一种元数据管理内存申请装置,应用于多控集中双控存储设备中的任意控制器,包括:

内存页数确定模块,用于基于自身内存大小确定出元数据管理所需内存页数;

内存页数保存模块,用于更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;

消息发送模块,用于触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

可选的,内存页数保存模块,具体包括:

最高位更新子模块,用于将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量;

异或操作子模块,用于将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员;

内存页数临时保存子模块,用于将所述内存页数赋值给预设临时变量;

与运算子模块,用于将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;

或运算子模块,用于将所述与运算后变量与更新后的第一结构体成员进行或运算。

第三方面,本申请公开了一种电子设备,包括存储器和处理器,其中:

所述存储器,用于保存计算机程序;

所述处理器,用于执行所述计算机程序,以实现前述的元数据管理内存申请方法。

第四方面,本申请公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现前述的元数据管理内存申请方法。

可见,本申请基于自身内存大小确定出元数据管理所需内存页数之后,更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,然后触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。也即,本申请在计算出元数据管理所需内存页数之后,均会更新用于保存内存页数的第一结构体成员的最高位,并在将内存页数保存至更新后的第一结构体成员的过程中,保留该最高位的值,这样,每次计算出内存页数,用于保存内存页数的第一结构体成员均会发生变化,从而正常触发消息发送机制,将携带更新后的第一结构体成员的消息发送至多控集的CSM端,CSM端将该第一结构体成员赋值给第二结构体成员并基于第二结构体成员申请内存,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

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

图1为本申请公开的一种元数据管理内存申请方法流程图;

图2为本申请公开的一种元数据管理内存申请装置结构示意图;

图3为本申请公开的一种电子设备结构图。

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

目前,控制器在计算出元数据管理所需要的动态申请的内存页数后,将内存页数保存在控制器端指定的结构体成员中,通过消息机制发送给CSM端,CSM端收到消息后,将内存页数保存在CSM端指定的结构体成员中,但如果控制器在计算出内存页数后,与结构体成员保存的值相同,则表明控制器端的结构体成员与CSM端的结构体成员的值相同,不会触发消息机制,CSM端保存的值便不会被更新,相应的回调函数不会被触发,后续流程就不会执行,导致全闪精简池无法被正常创建。为此,本申请提供了一种元数据管理内存申请方案,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

参见图1所示,本申请实施例公开了一种元数据管理内存申请方法,应用于多控集中双控存储设备中的任意控制器,包括:

步骤S11:基于自身内存大小确定出元数据管理所需内存页数。

在一种实施方式中,本申请实施例可以获取所述CSM端发送的申请内存页数查询消息;基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动基于自身内存大小确定出元数据管理所需内存页数的步骤。

步骤S12:更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值。

在具体的实施方式中,本申请实施例可以将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

进一步的,将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

例如,定义一个uint32 SIZE_UTAS_TRIGGER_BIT 0x80000000,这个值表示只有最高位为1,其余为都为0的触发器;定义一个uint32SIZE_VALUE_MASK 0x7FFFFFFFF,这个值表示只有最高位为0,其余为均为1的一个掩码。第一结构体成员为agt->page_size。可以对agt->page_size与SIZE_UTAS_TRIGGER_BIT进行异或操作,使得page_size的最高位做反转,这样一来,每次对agt->page_size进行重新赋值时,最高位都会进行变化,使得整个agt->page_size的值与之前保存的值不同;进一步的,对异或运算后的agt->page_size进行运算:agt->page_size&=~SIZE_VALUE_MASK,将除了最高位之外的位进行清零操作,避免有信息残留。

进一步的,所述将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,包括:将所述内存页数赋值给预设临时变量;将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;将所述与运算后变量与更新后的第一结构体成员进行或运算。

例如,将内存页数保存在临时变量uint32 pages中,对前述除了最高位之外的位进行清零操作之后的agt->page_size进行计算:agt->page_size|=pages&SIZE_VALUE_MASK,将pages中保存的数值除最高位之外,赋值给agt->page_size,达到将元数据管理所需要动态申请的内存页数保存至agt->page_size的目的。

步骤S13:触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

在具体的实施方式中,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。并且,所述对所述第二结构体成员的最高位进行清零操作的具体过程为:对所述第二结构体成员与所述预设掩码进行与运算。并且,在一种实施方式中,触发预设回调函数,以对所述第二结构体成员与所述预设掩码进行与运算。例如,第二结构体成员为csm->page_size,回调函数被触发以后,将进行下边的运算,以确保获取到正确的page_size值:csm->page_size&=SIZE_VALUE_MASK,以获取除最高位以外的信息。

在一种实施方式中,本申请所提供的元数据管理内存申请方案,应用于控制器中的agent(在存储系统中表示为各个节点上的模块终端,为一种软件服务),每个控制器均有一个agent。全闪精简池为全部使用固态存储介质构成的可创建精简卷的存储池,下面结合全闪精简池的创建过程,举例阐述本申请所提供的元数据管理内存申请方案:

假设多控集由内存分别为128GB的存储设备A和256GB的存储设备B组成,存储设备A的IOGROUP ID为IOGROUP0,对应的agent分别为agt_A1和agt_A2,存储设备B的IOGROUPID为IOGROUP1,对应的agent分别为agt_B1和agt_B2,现需要在IOGROUP0中创建全闪精简池:

步骤1:CSM端接收到命令配置行为,因为存储设备的内存大小不同,所以创建精简池时,需要的分配给元数据管理模块的动态内存页数也就不一样。CSM端需要向所有在线的agent发消息,查询需要动态申请的内存页数;

步骤2:所有agent收到消息之后,agent需要识别创建全闪精简池的IOGROUP是不是自己所在的IOGROUP,前述假设条件,agt_A1和agt_A2会根据自己的内存大小,计算出元数据管理模块所需要的动态申请的内存大小(也即内存页数),并通过消息机制发送给CSM端,而agt_B1和agt_B2不需要发消息给CSM端;

步骤3:CSM端收到agt_A1和agt_A2的消息之后,会把元数据管理模块所需要的动态申请的内存大小的信息保存在IOGROUP 0对应的结构体中,并向DMM模块申请内存,以供元数据管理模块使用,触发回调函数,执行后续的内存申请流程以完成全闪精简池的创建。

其中,agt_A1和agt_A2获取到本节点的元数据管理模块所需要动态申请的内存页数(pages1)之后,要把page1的值保存在一个uint32 agt->page_size中,并发送给CSM端。但是因为机制的问题,如果agt->page_size的值与CSM端csm->page_size已经保存的值一样的话,则不会再触发消息发送机制,CSM端保存的值不会被更新,CSM端的回调函数不会被触发,后续流程就不会执行,导致全闪精简池无法被正常创建。比如,忘记清除结构体成员中的值等操作,均会导致agt->page_size的值与CSM端csm->page_size已经保存的值一致。

本申请实施例可以执行以下步骤,以克服上述问题:

a)、定义一个uint32 SIZE_UTAS_TRIGGER_BIT 0x80000000,这个值表示只有最高位为1,其余为都为0的触发器;

b)、定义一个uint32 SIZE_VALUE_MASK 0x7FFFFFFFF这个值表示只有最高位为0,其余为均为1的一个掩码;

c)、agt_A1和agt_A2获取到本节点的元数据管理模块所需要动态申请的页数(page1),保存在临时变量uint32 pages中;

d)、对agt->page_size与SIZE_UTAS_TRIGGER_BIT进行异或操作,使得page_size的最高位做反转,这样一来,每次对agt->page_size进行重新赋值时,最高位都会进行变化,使得整个agt->page_size的值与之前保存的值不同;

e)、使用步骤d)运算后的agt->page_size进行以下运算:

agt->page_size&=~SIZE_VALUE_MASK;目的是将除了最高位之外的为进行清零操作,避免有信息残留;

f)、使用步骤e)运算后的agt->page_size进行以下计算:

agt->page_size|=pages&SIZE_VALUE_MASK;目的是将pages中保存的数值除最高位之外,赋值给agt->page_size,达到将元数据管理模块所需要动态申请的页数(page1)传递给agt->page_size的目的;

g)、CSM端的回调函数被触发以后,将进行以下运算,以确保获取到正确的page_size值:csm->page_size&=SIZE_VALUE_MASK;目的是获取除最高位以外的信息。

可以理解的是,结合上边的步骤a-g,可使得每次获取agt->page_size的值都是不同的,这样一来,即可将agt_A1、agt_A2中获取的元数据管理模块所需要动态申请的页数(page1)每次都可以正常的传递给CSM端,使得CSM端的回调函数可以被正常的触发,而CSM端可以获取到正确的page_size信息,以便于执行后续的创建全闪精简池的流程,从而避免命令行执行不成功导致的全闪精简池创建失败的问题。

需要指出的是,内存页数无需占用32位,这样,在多控集下,通过使用uint32变量最高位作为触发器,确保agent端信息能够传递到CSM端,并触发回调函数被调用。防止了因为CSM与Agent端通信机制问题导致命令不能被正常执行的问题发生,使得全闪精简池可被正常创建和使用。

可见,本申请实施例基于自身内存大小确定出元数据管理所需内存页数之后,更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,然后触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。也即,本申请实施例在计算出元数据管理所需内存页数之后,均会更新用于保存内存页数的第一结构体成员的最高位,并在将内存页数保存至更新后的第一结构体成员的过程中,保留该最高位的值,这样,每次计算出内存页数,用于保存内存页数的第一结构体成员均会发生变化,从而正常触发消息发送机制,将携带更新后的第一结构体成员的消息发送至多控集的CSM端,CSM端将该第一结构体成员赋值给第二结构体成员并基于第二结构体成员申请内存,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

参见图2所示,本申请实施例公开了一种元数据管理内存申请装置,应用于多控集中双控存储设备中的任意控制器,包括:

内存页数确定模块11,用于基于自身内存大小确定出元数据管理所需内存页数;

内存页数保存模块12,用于更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值13;

消息发送模块,用于触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

可见,本申请实施例基于自身内存大小确定出元数据管理所需内存页数之后,更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,然后触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。也即,本申请实施例在计算出元数据管理所需内存页数之后,均会更新用于保存内存页数的第一结构体成员的最高位,并在将内存页数保存至更新后的第一结构体成员的过程中,保留该最高位的值,这样,每次计算出内存页数,用于保存内存页数的第一结构体成员均会发生变化,从而正常触发消息发送机制,将携带更新后的第一结构体成员的消息发送至多控集的CSM端,CSM端将该第一结构体成员赋值给第二结构体成员并基于第二结构体成员申请内存,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

其中内存页数保存模块12,具体包括:

最高位更新子模块,用于将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

异或操作子模块,用于将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

内存页数临时保存子模块,用于将所述内存页数赋值给预设临时变量;

与运算子模块,用于将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;

或运算子模块,用于将所述与运算后变量与更新后的第一结构体成员进行或运算。

其中,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。

进一步的,所述对所述第二结构体成员的最高位进行清零操作的过程为:

对所述第二结构体成员与所述预设掩码进行与运算。

并且,所述装置还包括:

消息获取模块:用于,在所述基于自身内存大小确定出元数据管理所需内存页数之前,获取所述CSM端发送的申请内存页数查询消息;

判断模块,用于基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动内存页数确定模块11执行基于自身内存大小确定出元数据管理所需内存页数的步骤。

参见图3所示,本申请实施例公开了一种电子设备20,包括处理器21和存储器22;其中,所述存储器22,用于保存计算机程序;所述处理器21,用于执行所述计算机程序,以实现以下步骤:

基于自身内存大小确定出元数据管理所需内存页数;更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

可见,本申请实施例基于自身内存大小确定出元数据管理所需内存页数之后,更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,然后触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。也即,本申请实施例在计算出元数据管理所需内存页数之后,均会更新用于保存内存页数的第一结构体成员的最高位,并在将内存页数保存至更新后的第一结构体成员的过程中,保留该最高位的值,这样,每次计算出内存页数,用于保存内存页数的第一结构体成员均会发生变化,从而正常触发消息发送机制,将携带更新后的第一结构体成员的消息发送至多控集的CSM端,CSM端将该第一结构体成员赋值给第二结构体成员并基于第二结构体成员申请内存,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:将所述内存页数赋值给预设临时变量;将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;将所述与运算后变量与更新后的第一结构体成员进行或运算。

其中,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。并且,所述对所述第二结构体成员的最高位进行清零操作的过程为:对所述第二结构体成员与所述预设掩码进行与运算。

本实施例中,所述处理器21执行所述存储器22中保存的计算机子程序时,可以具体实现以下步骤:所述基于自身内存大小确定出元数据管理所需内存页数之前,获取所述CSM端发送的申请内存页数查询消息;基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动基于自身内存大小确定出元数据管理所需内存页数的步骤。

并且,所述存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,存储方式可以是短暂存储或者永久存储。

另外,所述电子设备20还包括电源23、通信接口24、输入输出接口25和通信总线26;其中,所述电源23用于为所述电子设备20上的各硬件设备提供工作电压;所述通信接口24能够为所述电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;所述输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。

进一步的,本申请实施例公开了一种计算机可读存储介质,用于保存计算机程序,其中,所述计算机程序被处理器执行时实现以下步骤:

基于自身内存大小确定出元数据管理所需内存页数;更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值;触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。

可见,本申请实施例基于自身内存大小确定出元数据管理所需内存页数之后,更新第一结构体成员的最高位,将所述内存页数保存至更新后的第一结构体成员并在保存过程中保留所述更新后的第一结构体成员的最高位的值,然后触发消息发送机制,将携带所述更新后的第一结构体成员的消息发送至所述多控集的CSM端,以便所述CSM端将该第一结构体成员赋值给第二结构体成员并基于所述第二结构体成员申请内存。也即,本申请实施例在计算出元数据管理所需内存页数之后,均会更新用于保存内存页数的第一结构体成员的最高位,并在将内存页数保存至更新后的第一结构体成员的过程中,保留该最高位的值,这样,每次计算出内存页数,用于保存内存页数的第一结构体成员均会发生变化,从而正常触发消息发送机制,将携带更新后的第一结构体成员的消息发送至多控集的CSM端,CSM端将该第一结构体成员赋值给第二结构体成员并基于第二结构体成员申请内存,能够保障控制器端的内存页数相关消息能够传递到CSM端,从而保障正常创建全闪精简池。

本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将第一结构体成员与预设触发器进行异或操作以更新第一结构体成员的最高位;其中,所述预设触发器为最高位为1,非最高位均为0的变量。

本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将异或操作后的第一结构体成员的非最高位进行清零操作,得到更新后的第一结构体成员。

本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:将所述内存页数赋值给预设临时变量;将所述预设临时变量与预设掩码进行与运算,得到与运算后变量;其中,所述预设掩码为最高位为0,非最高位均为1的掩码;将所述与运算后变量与更新后的第一结构体成员进行或运算。

其中,所述CSM端将该第一结构体成员赋值给第二结构体成员之后,对所述第二结构体成员的最高位进行清零操作,基于清零操作后的第二结构体成员申请内存。并且,所述对所述第二结构体成员的最高位进行清零操作的过程为:对所述第二结构体成员与所述预设掩码进行与运算。

本实施例中,所述计算机可读存储介质中保存的计算机子程序被处理器执行时,可以具体实现以下步骤:所述基于自身内存大小确定出元数据管理所需内存页数之前,获取所述CSM端发送的申请内存页数查询消息;基于所述申请内存页数查询消息判断自身是否属于待创建全闪精简池的输入输出组,若是,则启动基于自身内存大小确定出元数据管理所需内存页数的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种元数据管理内存申请方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

本文发布于:2023-04-13 01:37:08,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/85705.html

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

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图