在基于闪存的存储介质中写入存储数据的方法和装置与流程

文档序号:11589879阅读:370来源:国知局

本申请涉及计算机及网络技术领域,尤其涉及一种在基于闪存的存储介质中写入存储数据的方法和装置。



背景技术:

使用闪存作为存储介质,并采用电子读写的ssd(solidstatedrives,固态硬盘)有着优异的读写性能,已经成为个人电脑以及服务器存储的主流硬件。ssd的存储介质是nandflash闪存颗粒,其每一位(bit)的物理特性是可以通过对晶体管充电使该位的值由1变为0,而只能通过擦除来将其值由0重置为1。擦除操作以block(块)为单位进行。

而nandflash闪存颗粒的寿命通过其擦写次数来衡量,某个block达到了这个擦写次数后,该block无法再用来存储数据,成为坏块。随着坏块的增多,ssd的使用寿命就会锐减。

因此,现有技术中采用ftl(flashtranslationlevel,闪存转换层)均衡擦写算法或具有均衡擦写功能的文件系统层,来尽可能实现对同一个ssd上各个块的均衡擦写,以延长单个ssd的使用寿命。例如,ftl层动态均衡策略、ftl层的静态均衡策略、jaff2(journallingflashfilesystemversion2,日志闪存文件系统第2版)、yaffs(yetanotherflashfilesystem,另一种闪存文件系统)等。

但是,对于有多个ssd可供使用的系统,常常会发生对某个或某些ssd的擦写次数过多,远超过对另外某个或某些ssd的情形,从而导致使用过多的ssd提前损坏。如果该ssd上存储的数据没有采用高可用性方案,可能造成数据丢失;对采用了高可用性存储方案的系统来说,则会因额外的数据迁移降低系统的稳定性。



技术实现要素:

有鉴于此,本申请提供一种在基于闪存的存储介质中写入存储数据的方法,应用在对至少两个物理存储单位进行写入控制的中控功能模块上,包括:

获取每个物理存储单位内所有块的累计擦除总次数;

在满足预定写入条件的物理存储单位中,将存储数据写入到累计擦除总次数最少的至少一个物理存储单位上。

本申请还提供了一种在基于闪存的存储介质中写入存储数据的装置,应用在对至少两个物理存储单位进行写入控制的中控功能模块上,包括:

累计擦除总次数单元,用于获取每个物理存储单位内所有块的累计擦除总次数;

物理存储单位单元,用于在满足预定写入条件的物理存储单位中,将存储数据写入到累计擦除总次数最少的至少一个物理存储单位上。

由以上技术方案可见,本申请的实施例中,由中控功能模块基于各个物理存储单位内所有块的累计擦除总次数,在满足预定写入条件的物理存储单位中选择累计擦除总次数最少的进行存储数据的写入,从而在不同的物理存储单位之间实现了均衡擦写,避免了对单个物理存储单位擦写过多导致的该物理存储单位的提前损坏,在非高可用性场景中能够降低丢失数据的可能性,在高可用性场景中能够提高所在系统的稳定性。

附图说明

图1是本申请实施例第一种应用场景示例的一种主机结构组成结构示意图;

图2是本申请实施例第二种应用场景示例的一种集群组成结构示意图;

图3是本申请实施例一中一种写入存储数据的方法的流程图;

图4是本申请实施例二中一种在集群中写入存储数据的方法的流程图;

图5是本申请实施例所在设备的一种硬件结构图;

图6是本申请实施例中一种写入存储数据的装置的逻辑结构图;

图7是本申请实施例中一种集群的逻辑结构图。

具体实施方式

本申请的实施例提出一种新的在基于闪存的存储介质中写入存储数据的方法,以每个物理存储单位内所有块的累计擦除总次数的统计数据为依据,在满足预定写入条件的物理存储单位中,选择具有最小累计擦除总次数的一个到多个物理存储单位,来写入存储数据,实现了不同物理存储单位之间的均衡擦写,使得不同物理存储单位的使用寿命更为接近,降低了因单个物理存储单位的提前损坏造成的丢失数据、或影响系统稳定的可能性,以解决现有技术存在的问题。

本申请的实施例中,两个或两个以上的物理存储单位由一个中控功能模块来进行写入控制,即由该中控功能模块决定将存储数据写入到哪个或哪些物理存储单位上。其中,物理存储单位是在物理上独立于其他物理存储单位、采用基于闪存的存储介质的实体,可以是一个独立的基于闪存的物理存储部件(如flash闪存芯片、硬盘等)、一个包括至少一个独立的基于闪存的物理存储部件的主机(如一个磁盘阵列柜、一台个人电脑、一台服务器)等等;中控功能模块采用软件、或软件和硬件相结合的方式实现,可以运行在某个物理存储单位上,也可以运行在独立于其控制的所有物理存储单位的其他主机上。

图1所示为本申请实施例应用场景的一个例子,一台主机上安装有若干个硬盘(本应用场景中的物理存储单位),并且在该主机上运行有存储控制模块(本应用场景中的中控功能模块),用来对所有硬盘进行读写控制,包括确定将哪些数据存放在哪个硬盘上。

图2所示为本申请实施例应用场景的另一个例子,在一个以若干台主机(本应用场景中的物理存储单位)组成的集群中,其中一台主机是主控节点,其他主机是工作节点。集群的集群控制模块(本应用场景中的中控功能模块)运行在主控节点上,对若干台服务器的数据存储进行分配和管理。当作为主控节点的主机发生故障时,其他的某台主机能够升级为主控节点继续集群的运行。

本申请实施例应用的中控功能模块可以运行在任何具有计算和存储能力的设备上,例如可以是平板电脑、pc(personalcomputer,个人电脑)、笔记本、服务器等设备。

本申请的实施例一中,写入存储数据的方法的流程如图3所示。

步骤310,获取每个物理存储单位内所有块的累计擦除总次数。

块是数据存储中存储空间分配的最小单位,当某个块被分配后会对该块进行擦除操作,以便得到该块空间的应用程序(或线程、进程等)能够使用该块写入数据。因此,块被分配的次数就是该块的累计擦除次数。

对物理上独立的存储部件(如硬盘、闪存芯片等)而言,块的分割通常在对该存储部件进行初始化时进行,以硬盘为例,在绝大多数文件系统中,管理员可以在硬盘初始化时指定块的大小。假设由该硬盘所在主机的存储控制模块对该硬盘进行存储管理,在完成初始化后,存储控制模块可以用该硬盘范围内唯一的块标识来代表硬盘上的每个块,并且维护该硬盘的每个块标识与累计擦除次数的对应关系,每次将某个块分配后则在该块块标识的累计擦除次数上加1;当该硬盘作为应用场景中的物理存储单位时,可以将所有块的累计擦除次数相加,得到该硬盘的累计擦除总次数。或者,存储控制模块也可以在该硬盘的超级块(superblock)中维护所有块的累计擦除总次数,每次有块分配时,则在累计擦除总次数上增加该次分配的块数量;换言之,在每个块被分配后都在累计擦除总次数上加1。通过上述方式,可以得到物理上独立的存储部件的所有块的累计擦除总次数。

对物理存储单位是包括至少一块独立物理存储部件的主机的情形,可以由每个主机上的存储控制模块统计其控制的物理存储部件的累计擦除总次数,并上报给中控功能模块。具体的上报方式可以根据应用场景的实现来确定,例如,假设所有主机组成一个集群,该集群的集群控制模块为该应用场景中的中控功能模块,则可以由每个主机以预定周期主动向集群控制模块上报该主机上所有块的累计擦除总次数,或者也可以由集群控制模块以预定周期向各个主机轮询所有块的累计擦除总次数,集群控制模块即可以预定周期收到每个主机的所有块的累计擦除总次数。

步骤320,在满足预定写入条件的物理存储单位中,将存储数据写入到累计擦除总次数最少的至少一个物理存储单位上。

假设存储数据需要写入到n(n为自然数)个物理存储单位上,现有技术中,如果有两个或两个以上物理存储单位可以用来写入存储数据,会采用某个或某些条件来确定将存储数据写入哪个或哪几个物理存储单位。例如,要满足的条件通常包括剩余存储空间足以容纳要写入的存储数据。本申请的实施例中,可以根据上述某个或某些条件的可接受范围来生成预定写入条件,以下用两个例子说明:

第一个例子,在若干个硬盘中选择剩余存储空间最大的n个来用作写入存储数据的硬盘,则本申请实施例中,可以将剩余存储空间不小于预定值或不小于硬盘容量的预定比例来作为预定写入条件。

第二个例子,在若干个主机中,选择剩余存储空间足以容纳要写入的存储数据、并且对主机上已保存数据的访问量最小的n个主机来写入存储数据,则本申请实施例中,可以将剩余存储空间足以容纳要写入的存储数据、并且对主机上已保存数据的访问量不超过某个阈值来作为预定写入条件。

要写入物理存储单位的存储数据可以是在进行文件保存时需要写入的存储数据,也可以是在进行文件迁移时需要写入的存储数据。对中控功能模块而言,在进行文件保存时需要写入的存储数据通常是新增加的存储数据,而文件迁移时需要写入的存储数据则是对已保存的存储数据的维护。根据应用场景的具体实现,进行文件保存时需要写入的存储数据可能是一份,也可能是两份或两份以上、并且通常要将每份写入到不同的物理存储单位上。文件迁移包括两种情形,一种是更换保存文件的物理存储单位,即将已保存的文件写入新的物理存储单位并从原来保存该文件的物理存储单位上删除;另一种是在保存两份以上文件的应用场景中,当其中某一份文件损坏或其中某一份文件所在的物理存储单位故障时,需要将该文件拷贝一份到工作正常的物理存储单位上,以满足整个系统高可用性的要求。在进行文件迁移时,可以采用预定写入条件来排除已保存有该文件拷贝的物理存储单位、和/或发生故障的物理存储单位。

可见,不论是在文件保存还是在文件迁移中,需要用来写入存储数据的物理存储单位都可能超过1个。因此,中控功能模块在得到各个物理存储单位的所有块的累计擦除总次数后,在有存储数据需要进行写入操作时,基于预定写入条件确定可供选择的若干个物理存储单位,并在其中选择累计擦除总次数最小的n(n为自然数)个物理存储单位来写入存储数据。这样,可以在不同的物理存储单位之间实现均衡擦写。

本申请的实施例中,中控功能模块除了在有存储数据写入时进行各物理存储单位之间的均衡擦写外,还可以在各物理存储单位的擦写差异较大时,主动进行文件迁移,以平衡各个物理存储单位的使用情况。具体而言,中控功能模块可以对各个物理存储单位的擦写情况进行监测,在出现某两个物理存储单位的累计擦除总次数的差异超过预定偏差范围的情形时,将存储数据从上述两个物理存储单位中累计擦除总次数较高的物理存储单位迁移到累计擦除总次数较低的物理存储单位。

可以根据实际应用场景中存储文件的大小、对擦写均衡的要求等因素来确定物理存储单位间的预定偏差范围。在一种应用场景中,可以根据所有物理存储单位的累计擦除总次数的平均值来确定预定偏差范围,例如,将该平均值的20%作为预定偏差范围。

可见,本申请的实施例一中,由中控功能模块以每个物理存储单位内所有块的累计擦除总次数的统计数据为依据,在满足预定写入条件的物理存储单位中,选择累计擦除总次数最少的物理存储单位进行存储数据的写入,实现了不同物理存储单位之间的均衡擦写,避免了对单个物理存储单位擦写过多导致的该物理存储单位的提前损坏,使得不同物理存储单位的使用寿命更为接近,在非高可用性场景中能够降低丢失数据的可能性,在高可用性场景中能够提高所在系统的稳定性。

需要说明的是,在一个由若干主机组成的集群中,如果至少部分主机带有两个以上的硬盘或其他独立的物理存储部件,则可以在集群层面和主机层面分别应用本申请的实施例,即:在集群层面实现不同主机之间的擦写均衡,在主机层面实现单个主机上不同硬盘或其他物理存储部件的擦写均衡。此外,还可以在单个硬盘或其他物理存储部件上采用现有技术中的ftl均衡擦写算法或采用具有均衡擦写功能的文件系统层,来在物理存储部件的层面实现擦写均衡,从而在整个集群系统的各个层面都达到均衡擦写,延长集群系统中存储设备的使用寿命,同时提高集群系统的稳定性。

本申请的实施例二中,一种在集群中写入存储数据的方法的流程如图4所示。本实施例中的集群包括至少两台主机,这些主机由集群控制模块进行存储管理;每台主机包括至少两个采用闪存作为存储介质的硬盘,每台主机上的硬盘由该主机上的存储控制模块进行存储管理。实施例二给出了一种在两个层面(集群层面和主机层面)同时应用实施例一的具体实现,其中对各个步骤的详细说明请参见实施例一中的描述,不再重复。

步骤410,由集群控制模块获取每台主机上所有块的累计擦除总次数。

步骤420,由每台主机的存储控制模块分别获取所在主机上每个硬盘的累计擦除总次数。

步骤430,在满足主机预定写入条件的主机中,集群控制器选择主机的累计擦除总次数最少的至少一台主机作为目标主机。

当集群有需要写入的存储数据时,例如当有进行文件迁移时、和/或进行文件保存时需要写入的存储数据时,假设存储数据需要写入到n台主机上,集群控制器在满足主机预定写入条件的主机中,选择主机的累计擦除总次数最少的n台主机作为目标主机,即要写入存储数据的主机。

步骤440,在每台目标主机上,该主机的存储控制器将存储数据写入到满足硬盘预定写入条件、硬盘的累计擦除总次数最少的至少一个硬盘上。

当某台主机被选择作为目标主机后,假设存储数据需要写入该主机上的m(m为自然数)个硬盘中,该主机上的存储控制器在满足硬盘预定写入条件的硬盘中,选择m个硬盘的累计擦除总次数最少的硬盘作为目标硬盘,将存储数据写入到目标硬盘中。

可以由集群控制器对各台主机间累计擦除总次数的差异进行监测,当某两台主机的累计擦除总次数的差异超过主机预定偏差范围时,集群控制器将存储数据从这两台主机中累计擦除总次数较高的主机上,迁移到累计擦除总次数较低的主机上。作为写入迁移存储数据的主机,可以由其上的存储控制器将数据写入到满足硬盘预定写入条件、硬盘的累计擦除总次数最少的硬盘上。

可以各台主机的存储控制器对该主机上各个硬盘间累计擦除总次数的差异进行监测,当某台主机上的某两个硬盘的累计擦除总次数的差异超过硬盘预定偏差范围时,该主机的存储控制器可以将存储数据从这两个硬盘中累计擦除总次数较高的硬盘上,迁移到累计擦除总次数较低的硬盘上。

可见,本申请实施例二通过在集群层面(各个主机之间)和主机层面(每台主机上的各个硬盘之间)分别应用实施例一中的方法,使得整个集群系统的物理存储部件都达到均衡擦写,延长集群系统中存储设备的使用寿命,同时提高集群系统的稳定性。

在本申请的一个应用示例中,一个高可用性集群系统包括k(k为大于3的自然数)台主机,每台主机包括至少3块采用闪存作为存储介质的硬盘。存储在该集群中的每个文件应该在3个不同的主机上分别保存一份。该集群的集群控制器运行在集群的主控节点(其中一台主机)上,用来控制文件存储在哪3台主机上;每台主机上运行有存储控制器,用来控制文件存储在该主机的哪块硬盘上。

在每台主机上,存储控制器在每个硬盘的超级块中维护有该硬盘上每个块的累计擦除次数block_wear_count和该硬盘所有块的累计擦除总次数disk_wear_count。当该硬盘上的某个块被分配后,在该块的块标识block_num对应的累计擦除次数block_wear_count上加1,并且在该硬盘所有块的累计擦除总次数disk_wear_count上加1。

另外,存储控制器维护有该主机上所有块的累计擦除总次数server_wear_count,server_wear_count等于该主机上每个硬盘的disk_wear_count的总和。集群中每台工作节点要定时向主控节点发送心跳信号,工作节点所在主机的server_wear_count可以在周期性的心跳信号中上报给集群控制器,主控节点上的存储控制器也以与心跳信号相同的周期将主控节点所在主机的server_wear_count上报给集群控制器。

当集群中有新文件写入时,集群控制器在k个主机中确定符合主机预定写入条件的若干个主机,本应用示例中写入新文件的主机预定写入条件为:剩余存储容量超过主机存储总容量的15%、并且对已保存数据的访问量不超过既定阈值。在符合写入新文件的主机预定写入条件的主机中,集群控制器选择server_wear_count数目最小的3台主机作为写入新文件的主机。

在被选中的3台主机上,每台主机的存储控制器在该主机上的硬盘中确定符合硬盘预定写入条件的若干个硬盘,本应用示例中硬盘预定写入条件为:剩余存储容量超过硬盘存储总容量的10%。在符合硬盘写入条件的硬盘中,存储控制器选择disk_wear_count最小的硬盘,来写入新的文件。

当集群中某台主机、或某台主机上的某个硬盘发生故障时,集群控制器认为该主机或该硬盘上保存的文件已不可使用,这样集群中对这些文件的存储份数不足3份。设迁移文件的主机预定写入条件为:剩余存储容量超过主机存储总容量的15%、对已保存数据的访问量不超过既定阈值、并且尚未保存有要写入的文件,则集群控制器在符合迁移文件的主机预定写入条件的主机中,选择server_wear_count数目最小的主机作为写入迁移文件的主机。在被选中的主机上,存储控制器在符合硬盘写入条件的硬盘中,选择disk_wear_count最小的硬盘,来写入迁移的文件。

集群控制器以一定的主机监测周期来检查各个主机的累计擦除总次数server_wear_count之间的差异程度,如果集群中server_wear_count的最大值与最小值的差异超过所有server_wear_count的平均值的20%,则将server_wear_count最大的主机上的文件迁移到server_wear_count最小的主机上,直到集群中server_wear_count的最大值与最小值的差异在所有server_wear_count的平均值的20%之内。对迁移文件的选择可参照现有技术实现,不再赘述。

在每台主机上,存储控制器以一定的硬盘监测周期来检查该主机上各个硬盘的累计擦除总次数disk_wear_count之间的差异程度,如果该主机上disk_wear_count的最大值与最小值的差异超过所有disk_wear_count的平均值的15%,则将disk_wear_count最大的硬盘上的文件迁移到disk_wear_count最小的硬盘上,直到该主机上disk_wear_count的最大值与最小值的差异在所有disk_wear_count的平均值的15%之内。对迁移文件的选择同样可参照现有技术实现。

与上述流程实现对应,本申请的实施例还提供了一种写入存储数据的装置。该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的cpu(centralprocessunit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的cpu、内存以及非易失性存储器之外,写入存储数据的装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。

图6所示为本申请实施例提供的一种写入存储数据的装置,应用在对至少两个物理存储单位进行写入控制的中控功能模块上,包括累计擦除总次数单元和物理存储单位单元,其中:累计擦除总次数单元用于获取每个物理存储单位内所有块的累计擦除总次数;物理存储单位单元用于在满足预定写入条件的物理存储单位中,将存储数据写入到累计擦除总次数最少的至少一个物理存储单位上。

一个例子中,所述装置还包括偏差迁移单元,用于当某两个物理存储单位的累计擦除总次数的差异超过预定偏差范围时,将存储数据从所述两个物理存储单位中累计擦除总次数较高的物理存储单位迁移到累计擦除总次数较低的物理存储单位。

上述例子中,所述预定偏差范围可以根据所有物理存储单位的累计擦除总次数的平均值确定。

可选的,所述存储数据包括:进行文件迁移时需要写入的存储数据、和/或进行文件保存时需要写入的存储数据。

可选的,所述物理存储单位包括:主机;所述中控功能模块包括:包括所有主机的集群的集群控制模块;所述累计擦除总次数单元具体用于:接收每个主机以预定周期上报的累计擦除总次数。

可选的,所述物理存储单位包括:硬盘;所述中控功能模块包括:主机的存储控制模块;所述累计擦除总次数单元具体用于:读取每个硬盘的超级块中维护的累计擦除总次数,所述累计擦除总次数在所述硬盘的每个块被分配后加1。

图7所示为本申请实施例提供的一种集群,包括至少两台主机,每台主机包括至少两个采用闪存作为存储介质的硬盘,还包括集群控制模块和每台主机上的存储控制模块,其中:集群控制模块用于获取每台主机上所有块的累计擦除总次数,以及在需要写入存储数据时,在满足主机预定写入条件的主机中,选择主机的累计擦除总次数最少的至少一台主机作为目标主机;每台主机上的存储控制模块用于获取所在主机上每个硬盘的累计擦除总次数,以及当所在主机作为目标主机时,将存储数据写入到满足硬盘预定写入条件、硬盘的累计擦除总次数最少的至少一个硬盘上。

可选的,所述集群控制模块还用于:当某两台主机的的累计擦除总次数的差异超过主机预定偏差范围时,将存储数据从所述两台主机中累计擦除总次数较高的主机迁移到累计擦除总次数较低的主机;所述每条主机上的存储控制模块还用于:当某台主机上的某两个硬盘的累计擦除总次数的差异超过硬盘预定偏差范围时,将存储数据从所述两个硬盘中累计擦除总次数较高的硬盘迁移到累计擦除总次数较低的硬盘。

可选的,所述存储数据包括:进行文件迁移时需要写入的存储数据。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

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