CN108710472A - 用于存储单元内部的磨损均衡管理方法及分布式存储*** - Google Patents
用于存储单元内部的磨损均衡管理方法及分布式存储*** Download PDFInfo
- Publication number
- CN108710472A CN108710472A CN201810394073.1A CN201810394073A CN108710472A CN 108710472 A CN108710472 A CN 108710472A CN 201810394073 A CN201810394073 A CN 201810394073A CN 108710472 A CN108710472 A CN 108710472A
- Authority
- CN
- China
- Prior art keywords
- data
- storage unit
- record
- offset
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供一种用于存储单元内部的磨损均衡管理方法及分布式存储***,所述磨损均衡管理方法包括以下步骤:步骤S1,接收并判断数据请求的类型,当接收数据记录写入请求时跳转至步骤S2,当接收数据记录访问请求时跳转至步骤S3;步骤S2,根据上一个数据记录的偏移纪录写入当前的数据记录,并在写入当前的数据记录后,保存当前的数据记录的结束位置作为下一个数据纪录的偏移纪录;步骤S3,根据数据记录访问请求读取其所在存储单元的偏移记录,并从偏移量开始读出数据记录中的数据。本发明通过记录存储单元内部的读写情况,使得对该存储单元的连续写操作会优先将整个存储单元的内部写满,能够延长存储单元的循环读写寿命,提高读写性能。
Description
技术领域
本发明涉及一种磨损均衡管理方法,尤其涉及一种用于存储单元内部的磨损均衡管理方法,并涉及采用了该用于存储单元内部的磨损均衡管理方法的分布式存储***。
背景技术
非易失内存(Non-Volatile Memory,NVM)是一种新型的存储技术,与传统的SRAM/DRAM相比,具有非易失、按字节存取、高存储密度、低静态功耗等优点,读写性能接近DRAM但可以长久保持数据,但是也存在着读写性能不对称,读远快于写,写入寿命有限的问题。在由NVM构成的存储设备中,如果不同地址之间的擦写更新次数存在较大差距,将导致部分区域磨损较快而迅速形成坏块,而另外一些区域则极少擦除;而只要有坏块开始产生,NVM存储设备的性能就会逐渐下降而变得不可用。为了减少这样不均衡的擦写导致NVM整体生命周期缩短的弊端,需要磨损均衡算法(Wear-Levelling)来解决该问题。现有的磨损均衡的算法主要是确保所有的存储单元在统计上被均匀地擦写从而推迟坏块的产生,而并不考虑存储单元内部区域的磨损情况。因为对于一般的存储***而言,大部分的数据要比存储单元大得多,所以只考虑存储单元之间的均衡即可。例如文件***在存储文件时存储单元为4KB大小,而一般的文件大小都远大于4KB,大部分使用的存储单元都是写满的,所以并不需要特地考虑存储单元内部的磨损均衡问题。另一方面,对于现在广泛使用的基于Flash闪存的存储设备而言,其擦写本身就是按块进行的,所以整块存储单元内部的磨损状态基本保持一致。但是,现实当中也会存在很多特定的应用场景,需要频繁使用和持久化存储大量结构化的小数据,而且这些小数据也不适合压缩打包存放,比如高频更新的交易记录、在线消息、高速信息缓存等等。在这些场景中,当已知要写入的大部分数据记录大小都显著小于存储单元大小时,按现有的方式大量存储单元实际都只使用到前部的空间,而尾部空间都没有得到使用,这样写入的不均衡将导致前部空间磨损较快,结果存储单元作为一个整体写入次数过早到达上限而成为坏块。
但是由于现有的磨损均衡算法并未针对大量小数据存储的场景优化。
现在有一种技术方案是通过控制冷热数据的迁移来实现存储单元之间的磨损均衡。写入次数少的存储单元上的数据称为冷数据,即数据很少被更新,写入次数多的存储单元上的数据称为热数据,即数据经常被更新。其中有一种磨损均衡算法是建立一个记录存储单元写入次数的表,基于该表由管理控制器进行冷热数据的交换来实现存储单元之间的擦写均衡。具体来讲,当任何两个存储单元的写入次数之差超过一个给定的阈值时,或者当某个存储单元的写入次数超过所有存储单元的平均写入次数时,启动磨损均衡处理,将写入次数少的存储单元上的数据和写入次数多的存储单元上的数据进行交换。另有一种磨损均衡算法Start-Gap算法,不考虑存储单元的写次数,周期性地将存储单元向相邻位置移动,使得冷热数据所在的数据块擦写次数均衡。
这种方案的缺点在于,只考虑了如何在存储单元之间进行磨损均衡,并没有考虑到存储单元内部的空间是否磨损均衡,所以并不适用于面向大量小数据存储单元内部的磨损均衡;此外,该类方案在进行冷热数据交换时需要进行数据拷贝操作引入时间开销。
现有技术还有一种方案是针对存储器器件由于质量及耐久度不一致导致在使用过程中发生错误的等级不同带来的问题;将存储块细分为多个页,以页为单位根据错误率以非均匀的方式写入特定个页的步骤,从而使得块内多个页的磨损达到均衡的效果。因为存储器的块内的页之类的损耗是不均匀的,不同的页在相同的写入次数情况下损耗也可能不同。所以均匀分配页写入操作将导致页错误率情况不同,在进行擦写操作时会有不同的损耗情况,这种方案采用不均衡的写入来使得块内不同页之间达到误码率的相对一致和可控;通过预先均匀写入存储器块中的页来监测它们中发生的误差,以此获得不同页的误差行为;然后根据页误差行为调用负载分配算法执行非均匀的页写入分配,将写入操作主要引导到不容易产生误差的那些页,旨在实现块内页之间相对均等的磨损。
但是这种方案针对的是由于器件本身质量和耐久度不同导致单元内部错误率等级不一致的情况,本质上仍然将存储器看作是大小均匀的最小存储单位组成,并未考虑到实际读写数据小于最小存储单位大小的情况。
发明内容
本发明所要解决的技术问题是需要提供一种针对要写入的数据中存在大量的小数据,进而能够克服存储单元经常写不满而使得其内部前后磨损不均衡的弊端的磨损均衡管理方法,并进一步提供采用了该用于存储单元内部的磨损均衡管理方法的分布式存储***。
对此,本发明提供一种用于存储单元内部的磨损均衡管理方法,包括以下步骤:
步骤S1,接收并判断数据请求的类型,当数据请求为数据记录写入请求时跳转至步骤S2,当数据请求为数据记录访问请求时跳转至步骤S3;
步骤S2,根据上一个数据记录的偏移纪录写入当前的数据记录,并在写入当前的数据记录后,保存当前的数据记录的结束位置作为下一个数据纪录的偏移纪录;
步骤S3,根据数据记录访问请求读取其所在存储单元的偏移记录,根据偏移记录从偏移量开始读出数据记录中的数据,所述偏移记录包括偏移量和数据大小信息。
本发明的进一步改进在于,所述步骤S2包括以下子步骤:
步骤S201,根据上一个数据记录获取存储单元地址;
步骤S202,读取上一个数据记录在该存储单元中偏移纪录;
步骤S203,访问该存储单元,并从上一个数据记录的偏移量开始写入当前的数据记录以及下一个数据纪录的偏移纪录。
本发明的进一步改进在于,所述步骤S203中,从上一个数据记录的偏移量开始,先写入用于扫描识别的标识位以及用于生成下一个数据纪录的偏移纪录信息,再写入当前的数据记录;所述用于生成下一个数据纪录的偏移纪录信息包括当前数据记录的序列号和数据大小。
本发明的进一步改进在于,在所述步骤S203中,若所述存储单元从偏移量开始有足够的空间用于存放完整的当前数据记录,则写入成功;否则,通过顺序写入或折叠写入实现写入操作。
本发明的进一步改进在于,通过顺序写入实现写入操作的过程为:申请一个新的存储单元,将当前数据记录中未存放的部分数据存储于新的存储单元中,并标记两个存储单元之间的相关关系和先后次序;通过折叠写入实现写入操作的过程为:将当前数据记录中未存放的部分数据存储于该存储单元的头部空间。
本发明的进一步改进在于,所述步骤S3中,如果当前数据记录的数据大小小于所述存储单元的偏移量开始的空间大小,则直接访问实现数据读取;否则根据顺序写入或折叠写入实现相应的数据读取过程。
本发明的进一步改进在于,当所述步骤S203采用的是顺序写入的写入操作时,所述步骤S3先读取当前的存储单元中所存放的部分数据,然后根据两个存储单元之间的关系记录找到剩余部分数据所在的新的存储单元,访问所述新的存储单元并读取数据之后,最后通过数据合并返回完整的读取结果;当所述步骤S203采用的是折叠写入的写入操作时,所述步骤S3先读取当前的存储单元从偏移量开始存放的部分数据,再跳转到当前的存储单元的头部控制读取剩余的部分数据,最后通过数据合并返回完整的读取结果。
本发明的进一步改进在于,在上电时先读取标识信息,若标识信息未包括写入更新成功标识,则判断为非正常掉电,并对所述存储单元进行扫描,根据存储单元中的标识位查找到正确的偏移记录,在内存中指定地址重构偏移记录对应的偏移信息表。
本发明的进一步改进在于,在实现数据记录写入前,将内存的存储空间分配成N个等长的存储单元,并同时在内存中建立一张用于记录各个存储单元的存储单元地址及其偏移记录的记录表;N为自然数。
本发明还提供一种分布式存储***,应用了如上所述的用于存储单元内部的磨损均衡管理方法。
与现有技术相比,本发明的有益效果在于:通过记录存储单元内部的读写情况,使得对该存储单元的连续写操作会优先将整个存储单元的内部写满,而不是像现有技术那样每次都反复从头写起,进而通过存储单元内部的磨损均衡管理大大延长了存储单元的循环读写寿命,提高读写性能。
并且,本发明提出的用于存储单元内部的磨损均衡管理方法可以和现在的用于存储单元之间的磨损均衡算法结合使用,兼容性强,在维持较低的时间和空间开销的基础上,将磨损在更细粒度上均衡地分布在整个存储设备的所有区域,从而延长存储设备的整体寿命,有效提高存储设备的性能并降低使用成本,还可以应用于构建分布式存储***,进而提高分布式存储***的使用寿命和存储性能。
附图说明
图1是本发明一种实施例的工作流程示意图;
图2是本发明一种实施例中存储单元纪录数据的原理示意图;
图3是本发明一种实施例的分配和写入存储单元的工作流程示意图;
图4是本发明一种实施例的数据纪录的结构原理示意图;
图5是本发明一种实施例的记录表的结构原理示意图;
图6是本发明一种实施例通过连续两个存储单元实现数据纪录写入的原理示意图;
图7是本发明一种实施例在收到新的数据记录写入请求时的原理示意图;
图8是本发明一种实施例通过顺序写入实现写入操作的原理示意图;
图9是本发明一种实施例在顺序写入操作中确定偏移量的原理示意图。
具体实施方式
下面结合附图,对本发明的较优的实施例作进一步的详细说明。
如图1所示,本例提供一种用于存储单元内部的磨损均衡管理方法,包括以下步骤:
步骤S1,接收并判断数据请求的类型,当数据请求为数据记录写入请求时跳转至步骤S2,当数据请求为数据记录访问请求时跳转至步骤S3;
步骤S2,根据上一个数据记录的偏移纪录写入当前的数据记录,并在写入当前的数据记录后,保存当前的数据记录的结束位置作为下一个数据纪录的偏移纪录;
步骤S3,根据数据记录访问请求读取其所在存储单元的偏移记录,根据偏移记录从偏移量开始读出数据记录中的数据,所述偏移记录包括偏移量和数据大小信息。
值得一提的是,本例针对的是用于单位存储空间内部进行磨损均衡的情形,而不是存储单元之间的磨损均衡。在实际应用中,存储设备中要写入的数据存在大量小数据,而小数据的大小要显著小于单位存储空间的大小,所示单位存储控制在本例中简称存储单元,所述存储单元是***访问存储设备的最小单位,常以页为单位,大小为4KB或以上。
现有的磨损均衡算法主要针对在存储单元之间保持磨损程度的一致性,当大部分存储单元由于存放小数据而长期写不满时,其存储单元尾部的存储空间经常用不到,就会导致资源浪费和磨损上的显著不均衡,即现有的磨损均衡算法并未针对大量小数据存储的场景进行优化,因此,本例提出的是来均衡存储单元内部空间的磨损均衡管理方法。
也就是说,针对要写入的数据中存在大量的小数据,即很多数据的长度小于存储单元大小、而这些数据记录又必须结构化存放,进而导致进行数据存储时,存储单元经常写不满而使得其内部前后磨损不均衡的情形;常见的例子有文件***中的小文件、NOSQL数据库、操作日志信息以及网络包缓存等等。本例可以在维持较低的空间和时间开销的基础上,均匀使用存储单元内部的所有空间,提高存储单元的整体使用寿命。
更为具体的,本例所述步骤S2包括以下子步骤:
步骤S201,根据上一个数据记录获取存储单元地址,即直接使用存储设备中上一个数据记录的存储单元地址;
步骤S202,读取上一个数据记录在该存储单元中偏移纪录;
步骤S203,访问该存储单元,并从上一个数据记录的偏移量开始写入当前的数据记录以及下一个数据纪录的偏移纪录。
本例所述步骤S203中,从上一个数据记录的偏移量开始,先写入用于扫描识别的标识位以及用于生成下一个数据纪录的偏移纪录信息,再写入当前的数据记录;所述用于生成下一个数据纪录的偏移纪录信息包括当前数据记录的序列号和数据大小,用于重构偏移记录。
本例所述步骤S203中,若所述存储单元从偏移量开始有足够的空间用于存放完整的当前数据记录,则写入成功,反馈写入更新成功标识;否则,通过顺序写入或折叠写入实现写入操作。其中,通过顺序写入实现写入操作的过程为:申请一个新的存储单元,将当前数据记录中未存放的部分数据存储于新的存储单元中,并标记两个存储单元之间的相关关系和先后次序;通过折叠写入实现写入操作的过程为:将当前数据记录中未存放的部分数据存储于该存储单元的头部空间;实现折叠写入的要求为:如果完整数据的大小严格不大于存储单元大小,可以重新利用该存储单元的头部空间,将放不下的数据从0偏移量开始存放。
本例所述步骤S203中,在完成数据写入之后,更新内存中该存储单元的相应偏移记录,该偏移记录包括偏移量、数据大小及相关标记等其他必须的记录信息。
本例所述步骤S3访问该存储单元,根据偏移记录从偏移量开始读出数据;在所述步骤S3中,如果当前数据记录的数据大小小于所述存储单元的偏移量开始的空间大小,则直接访问实现数据读取;否则根据顺序写入或折叠写入实现相应的数据读取过程。
更为具体的,当所述步骤S203采用的是顺序写入的写入操作时,所述步骤S3先读取当前的存储单元中所存放的部分数据,然后根据两个存储单元之间的关系记录找到剩余部分数据所在的新的存储单元,访问所述新的存储单元并读取数据之后,最后通过数据合并返回完整的读取结果;当所述步骤S203采用的是折叠写入的写入操作时,所述步骤S3先读取当前的存储单元从偏移量开始存放的部分数据,再跳转到当前的存储单元的头部控制读取剩余的部分数据,最后通过数据合并返回完整的读取结果。所述当前的存储单元简称当前存储单元。
在正常关机的情况下,本例将内存中的所有偏移记录以事先约定的规则结构化之后存放于非易失存储设备中事先约定的空间范围,更新标识信息确认备份写入更新成功。然后在下次上电时,读取标识信息,如果是备份成功状态,从事先约定的空间范围提取结构化的偏移记录信息,偏移记录信息也简称偏移记录,可以按事先约定的规则解读并释放到内存中的指定地址;最后更新标识信息确认备份读取成功。
在非正常掉电的情况下,本例在上电时先读取标识信息,若标识信息未包括写入更新成功标识,则判断为非正常掉电,并对所述存储单元进行扫描,根据存储单元中的标识位查找到正确的偏移记录,在内存中指定地址重构偏移记录对应的偏移信息表。
也就是说,本例所述步骤S2和步骤S3不是顺序步骤,属于通过判断数据请求而进入的步骤;在所述步骤S2和步骤S3之后,还优选设置有判断是否正常掉电的步骤,进而实现更加人性化的磨损均衡管理。
值得一提的是,在实现数据记录写入前,将内存的存储空间分配成N个等长的存储单元,并同时在内存中建立一张用于记录各个存储单元的存储单元地址及其偏移记录的记录表,进而能够快速定位当前存储单元偏移量;N为自然数。
本例还提供一种分布式存储***,应用了如上所述的用于存储单元内部的磨损均衡管理方法。
因此,本例能够通过记录存储单元内部的读写情况,使得对该存储单元的连续写操作会优先将整个存储单元的内部写满,而不是像现有技术那样每次都反复从头写起,进而通过存储单元内部的磨损均衡管理大大延长了存储单元的循环读写寿命,提高读写性能。
并且,本例提出的用于存储单元内部的磨损均衡管理方法可以和现在的用于存储单元之间的磨损均衡算法结合使用,兼容性强,在维持较低的时间和空间开销的基础上,将磨损在更细粒度上均衡地分布在整个存储设备的所有区域,从而延长存储设备的整体寿命,有效提高存储设备的性能并降低使用成本,还可以应用于构建分布式存储***,进而提高分布式存储***的使用寿命和存储性能。
本例无需建立大规模的物理地址到虚拟地址映射表以及存储单元写入次数记录表,只需在内存中建立简单的偏移记录用于快速定位,有效地减少了空间开销;并且该方案无需进行冷热数据的搬移,有效地避免了处理时间开销,在各种对数据持久化和访问性能有一定要求的场景下能满足性能需求,有效降低处理延迟,提高吞吐量。
为了更加清楚地说明本例的技术方案及其效果,本例还通过下面更为详细的例子进行举例说明,在常见用于存放结构化数据记录的存储的场景下,由于事前无法获知到来的每个数据记录的长度,一般按其可能的最大大小分配等长的存储单元。假设分配的存储空间包括大小为S的N个存储单元。同时在内存中建立一张记录表用来记录各个存储单元当前的偏移量等偏移记录信息,如图2所示,Buffer 1和Buffer 2表示的是两个连续的存储单元, Buffer为存储单元。m、n和P均为自然数。
在第一轮数据记录到达时,其中第一个数据记录将存放在Buffer1的首部,构建数据记录的元数据存储在它的头部空间m中,接着第二个数据记录存在Buffer2的首部,同样地将其元数据存在它的头部空间m中;并在内存记录表中记录每个Buffer当前写入位置偏移量offset。头部空间m中包含用于扫描重建的标记和数据长度等信息。当Buffer1到Buffer N的所有存储单元都写过数据之后,新一轮数据的存储将再次从Buffer1开始。
当然,如果在存储设备中采用了其他的单元间磨损均衡策略的话,则完全根据单元间磨损均衡算法选择下一个使用的存储单元;但每个存储单元内部的操作与上述描述相同。
当存储单元被再次使用时,新到来的数据记录(如图2所示的N+1),根据记录表中偏移量从Buffer1上一轮数据记录末尾位置开始写入;同理,后续的数据记录依次从各Buffer上一轮数据记录末尾位置开始写入,以此类推,如图2所示。
如图2的 Round 3第m+1个数据记录到来,当数据记录大小超过当前存储单元剩余可用空间大小,该数据记录无法完全存下时,需要将其分为两部分:前半部分写满当前存储单元的剩余空间,后半部分或者写入下一个存储单元(Buffer2),或者写入当前存储单元(Buffer1)的最前端(此时称折叠写入)。在第一种情况下,由于当前存储单元中存放的数据并不完整,需要在元数据中设置标识位便于上层应用连续读写多个存储单元以获得完整数据,或者根据元数据中的数据大小信息来判断。下一个到来的数据记录(m+2)往后写到Buffer3中。在第二种情况下,上层应用只需访问该存储单元即可获得所需数据,但使用前需要重新组装;下一个到来的数据记录(m+2)仍然使用Buffer2来存放;Round为轮,表示数据记录的次数。
对于上述第一种情况,当使用Buffer2存放第m+1个数据记录的后半部分时,如图2的 Round 4所示,在下一轮数据记录到来后,第p+1个数据记录将存到Buffer1的起始位置,第p+2个数据记录从Buffer2上一轮中第m+1个数据记录的末尾处开始存,如果剩余空间不够,将与上一轮类似采用一分为二的做法将数据分别存在两个存储单元中。通过这个方法,可以保证所有存储单元将会从头到尾均匀地被写入,达到存储单元内部的磨损均衡。
在本例中,通过选择NVM作为网络数据传输的目标存储设备,以实现将网络接收到的数据快速的持久化保存的目的,主要面向高性能的分布式键值存储和事务处理的场合作为一个具体的场景例子来说明。
在这些应用场景中,键值数据或者事务记录大小不一,因此在存储管理上一般都会按上限来分配较大的存储单元,在存储空间的使用上体现出很强的小数据特征,导致NVM设备存在单元内部磨损不均衡的问题。由于这些键值访问或事务指令一般都会各自封装在独立的网络包中传输,本例中选择2KB作为最小的存储单元,足够用来存储数据包,其工作流程图如图3所示,首先在NVM上分配好相应数量的存储单元用来存储写入数据,每个存储单元大小为2KB并循环使用。当数据包到达,将会根据磨损均衡算法依次地写入分配的存储单元中。
为便于数据的查找和访问,需要设计数据记录的存储结构。一个结构的示例如图4所示,其中元数据大小为20B,元数据大小也称数据大小,包含模式pattern、数据标识量d_state和数据大小d_size等三个域用于后续缓冲区的管理,并保留一个私有域private用于用户自定义管理。因为网络数据包最大为1500B,所以数据有效载荷payload大小在1500B以内。
根据本例的磨损均衡算法,数据包在存储单元内的存储位置会不断变化,所以需要维护各存储单元内已写入的数据偏移量。本例优选在内存中使用一个记录表来集中维护各存储单元的偏移量,以便下一轮能够快速定位写入的位置。而为了防止内存中的记录表在***非正常掉电后丢失,需要重新恢复记录表时使用pattern域来扫描和重建各个存储单元的偏移信息。另外,当数据大小小于当前单元的尾部空间时,选择将剩余部分数据存到下一个数据单元中,所以一个单元存储的数据可能不完整,需要一个表明数据是否完整的标识量d_state域进行标识,如果不完整的话还要表明当前数据块是前半部分数据还是后半部分。而表明数据大小的域d_size不仅用于数据访问,还用于计算下一轮该存储单元写入位置的偏移量。
由于数据包不等长且最大只有1500B,存入缓存区的元数据大小为20B,而出于地址对齐的目的(内存页一般为4KB大小)存储单元大小设为2KB,所以每个存储单元都可以完整存放一个数据包并有剩余空间。因此如果每个存储单元都是从头写起的话,其尾部的空间将永远得不到使用。因此本例需使用所述磨损均衡管理方法使存储单元内部的所有空间被均匀写入。
内存中维护当前存储单元偏移量的记录表结构如下图5所示,buf_index表示的是存储单元序号;data_offset为该单元当前偏移量,用于对数据的快速访问。Flag为数据状态,用于表明该存储单元中的数据是正常的网络数据还是错误数据。当***非正常掉电后,能够通过扫描所有NVM缓冲区,寻找元数据标记重建记录表。所述数据记录包括元数据标记。
当数据包到来,使用所述磨损均衡管理方法来确定写入数据包的位置,如图6所示,本例使用10个存储单元,选择循环使用连续的存储单元作为存储单元间磨损均衡的方案;其中图6所示的Buffer 1和Buffer 2是两个连续的单元。在第一轮数据包到达时,其中第一个数据包大小为1KB将存放在Buffer 1的首部,并且将数据包的元数据存储在数据前部头部空间m中,记录Buffer 1写入位置偏移为1020B。接着第二个数据包大小为800B存在Buffer 2的首部,同样地将元数据存下。并设置记录表中该Buffer当前写入位置偏移量。
当Buffer 1到Buffer 10所有缓冲区的首部都存了数据包后,新一轮数据包的存储再次从Buffer 1开始。新到来的数据包(图7所示的序号n+1数据包)查询记录表中Buffer1当前偏移量data_offset,为1020B,于是从Buffer 1偏移位置1020B处写入数据。同理,后续的数据包依次根据记录表中偏移量从各Buffer上一轮数据包末尾位置写入,并更新对应内存记录表,如图7所示。
如图8所示,第三轮数据包到达,第m+1个数据包大小为800B,大小超过当前要写入的存储单元剩余可用空间大小,一个存储单元无法完全存下,需要将当前数据包分为两部分,前半部分440B写满当前存储单元剩余空间,后半部分360B写入下一个存储单元并更新记录表。由于当前单元中存的数据并不完整,所以需要在元数据中设置标识位使上层应用在处理数据包前知道如何重新组装数据包。下一个到来的数据包(m+2)往后写到下一个存储单元Buffer 3中。
如图9所示,在新一轮数据包到来后,第p+1个数据包存到Buffer 1的起始位置,第p+2个数据包从Buffer 2上一轮中第m+1个数据包的末尾处开始存,如果剩余空间不够,将与上一轮类似采用一分为二的做法将数据分别存在两个存储单元中。通过这个方法,可以保证所有NVM存储单元都会从头到尾均匀地被写入,达到存储单元内部的磨损均衡。
综上所述,本例所解决的主要问题及技术要点包括:与存储单元之间的磨损均衡算法兼容,能够保证存储单元内部的磨损均衡,在总体上保证存储单元内部和存储单元之间的写入都是均匀的,从而实现整个存储空间在更细粒度上的平衡使用。
第二、由于存储单元为存储设备读写的最小单位,当新的数据记录到达时,现有方案会分配一个新的存储单元并将数据记录从单元头部开始存放;当存储单元使用完毕被再次分配时,由于反复从存储单元头部开始写入而导致存储单元后部空间经常得不到使用的不均衡写入问题。与现有技术不同,本例当存储单元写入一个数据记录后,会记录下该数据记录的结束位置作为偏移量;下一次重复使用该存储单元的剩余空间来写入一个新的数据记录,写入新的数据记录时从该偏移量开始,从而避免上述问题,提高写入均匀性。
第三、由于数据记录会从存储单元的中间写起,因此存在存储单元内剩余空间不足以完整容纳当前的数据记录的情况,需要正确处置。本例针对这一问题提出两种处理方法:第一种是使用下一个存储单元记录剩余的数据记录,第二种是将剩余的数据记录再从单元头部开始写入本存储单元中(即折叠写入)。第一种方法适用于数据的流式写入,比如写入操作由硬件完成而不能支持灵活地址跳转的情形;第二种方法可以保持读写操作的齐次性,这时每个数据记录都尽量存放在同一个存储单元中,其条件在于要求数据记录的大小不超过存储单元大小。
第四、如何记录、维护和高效查询每个存储单元的写入偏移量信息将直接影响到所述存储单元内部磨损均衡管理的效率和正确性。本例将偏移量等偏移记录信息在内存中维护,首先是由于目前NVM及其他非易失存储技术的访问代价和时延要高于内存,使用内存显然可以加快读写操作的速度。另一方面,由于每次对存储数据访问都需要获取和(写入时)修改偏移量,如果将其保存在存储设备中,则只能存放在事先指定的固定区域(否则对偏移量信息的读写本身又需要先获得其具体存放位置对应的偏移信息),这样存放偏移量的区域的使用强度要显著高于其他区域,导致更为复杂的磨损不均匀问题。
第五、为了解决掉电后内存中偏移量记录丢失的问题,本例提出两种方法。首先如果是正常关机,会将所有偏移记录整体从内存导入存储设备固定区域以便于下次上电读取,由于该操作只会在关机时执行,对存储设备整体磨损的影响可以忽略不计。如果是非正常掉电,由于存储设备中已存放的偏移记录不再是最新的,此时需要重建偏移记录。本例在每个存储单元的数据记录开头事先做上标识,这样只需扫描所有存储单元寻找该标识即可完整重建偏移记录。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (10)
1.一种用于存储单元内部的磨损均衡管理方法,其特征在于,包括以下步骤:
步骤S1,接收并判断数据请求的类型,当数据请求为数据记录写入请求时跳转至步骤S2,当数据请求为数据记录访问请求时跳转至步骤S3;
步骤S2,根据上一个数据记录的偏移纪录写入当前的数据记录,并在写入当前的数据记录后,保存当前的数据记录的结束位置作为下一个数据纪录的偏移纪录;
步骤S3,根据数据记录访问请求读取其所在存储单元的偏移记录,根据偏移记录从偏移量开始读出数据记录中的数据,所述偏移记录包括偏移量和数据大小信息。
2.根据权利要求1所述的用于存储单元内部的磨损均衡管理方法,其特征在于,所述步骤S2包括以下子步骤:
步骤S201,根据上一个数据记录获取存储单元地址;
步骤S202,读取上一个数据记录在该存储单元中偏移纪录;
步骤S203,访问该存储单元,并从上一个数据记录的偏移量开始写入当前的数据记录以及下一个数据纪录的偏移纪录。
3.根据权利要求2所述的用于存储单元内部的磨损均衡管理方法,其特征在于,所述步骤S203中,从上一个数据记录的偏移量开始,先写入用于扫描识别的标识位以及用于生成下一个数据纪录的偏移纪录信息,再写入当前的数据记录;所述用于生成下一个数据纪录的偏移纪录信息包括当前数据记录的序列号和数据大小。
4.根据权利要求2或3所述的用于存储单元内部的磨损均衡管理方法,其特征在于,在所述步骤S203中,若所述存储单元从偏移量开始有足够的空间用于存放完整的当前数据记录,则写入成功;否则,通过顺序写入或折叠写入实现写入操作。
5.根据权利要求4所述的用于存储单元内部的磨损均衡管理方法,其特征在于,通过顺序写入实现写入操作的过程为:申请一个新的存储单元,将当前数据记录中未存放的部分数据存储于新的存储单元中,并标记两个存储单元之间的相关关系和先后次序;通过折叠写入实现写入操作的过程为:将当前数据记录中未存放的部分数据存储于该存储单元的头部空间。
6.根据权利要求4所述的用于存储单元内部的磨损均衡管理方法,其特征在于,所述步骤S3中,如果当前数据记录的数据大小小于所述存储单元的偏移量开始的空间大小,则直接访问实现数据读取;否则根据顺序写入或折叠写入实现相应的数据读取过程。
7.根据权利要求6所述的用于存储单元内部的磨损均衡管理方法,其特征在于,当所述步骤S203采用的是顺序写入的写入操作时,所述步骤S3先读取当前的存储单元中所存放的部分数据,然后根据两个存储单元之间的关系记录找到剩余部分数据所在的新的存储单元,访问所述新的存储单元并读取数据之后,最后通过数据合并返回完整的读取结果;当所述步骤S203采用的是折叠写入的写入操作时,所述步骤S3先读取当前的存储单元从偏移量开始存放的部分数据,再跳转到当前的存储单元的头部控制读取剩余的部分数据,最后通过数据合并返回完整的读取结果。
8.根据权利要求1至3任意一项所述的用于存储单元内部的磨损均衡管理方法,其特征在于,在上电时先读取标识信息,若标识信息未包括写入更新成功标识,则判断为非正常掉电,并对所述存储单元进行扫描,根据存储单元中的标识位查找到正确的偏移记录,在内存中指定地址重构偏移记录对应的偏移信息表。
9.根据权利要求1至3任意一项所述的用于存储单元内部的磨损均衡管理方法,其特征在于,在实现数据记录写入前,将内存的存储空间分配成N个等长的存储单元,并同时在内存中建立一张用于记录各个存储单元的存储单元地址及其偏移记录的记录表;N为自然数。
10.一种分布式存储***,其特征在于,应用了如权利要求1至9任意一项所述的用于存储单元内部的磨损均衡管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810394073.1A CN108710472A (zh) | 2018-04-27 | 2018-04-27 | 用于存储单元内部的磨损均衡管理方法及分布式存储*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810394073.1A CN108710472A (zh) | 2018-04-27 | 2018-04-27 | 用于存储单元内部的磨损均衡管理方法及分布式存储*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108710472A true CN108710472A (zh) | 2018-10-26 |
Family
ID=63867615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810394073.1A Pending CN108710472A (zh) | 2018-04-27 | 2018-04-27 | 用于存储单元内部的磨损均衡管理方法及分布式存储*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108710472A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258919A (zh) * | 2018-12-03 | 2020-06-09 | 爱思开海力士有限公司 | 储存设备及其操作方法 |
CN112148645A (zh) * | 2019-06-28 | 2020-12-29 | 北京忆芯科技有限公司 | 去分配命令处理方法及其存储设备 |
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
WO2021195979A1 (zh) * | 2020-03-31 | 2021-10-07 | 华为技术有限公司 | 一种数据存储方法以及相关装置 |
CN114924690A (zh) * | 2022-02-23 | 2022-08-19 | 华东师范大学 | 一种基于非均衡磨损闪存的读性能优化方法 |
CN116880772A (zh) * | 2023-08-10 | 2023-10-13 | 广州菲利斯太阳能科技有限公司 | 基于flash保存发电量的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储***的操作处理方法,数据存储*** |
US20140297946A1 (en) * | 2013-03-28 | 2014-10-02 | Fujitsu Limited | Storage system and method for managing storage apparatuses |
CN106354662A (zh) * | 2015-07-17 | 2017-01-25 | 陕西千山航空电子有限责任公司 | 一种nand flash数据存储方法 |
CN106569748A (zh) * | 2016-10-27 | 2017-04-19 | 南方电网科学研究院有限责任公司 | Flash文件***的数据处理方法和装置 |
CN107015763A (zh) * | 2017-03-03 | 2017-08-04 | 北京中存超为科技有限公司 | 混合存储***中ssd管理方法及装置 |
-
2018
- 2018-04-27 CN CN201810394073.1A patent/CN108710472A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102779180A (zh) * | 2012-06-29 | 2012-11-14 | 华为技术有限公司 | 数据存储***的操作处理方法,数据存储*** |
US20140297946A1 (en) * | 2013-03-28 | 2014-10-02 | Fujitsu Limited | Storage system and method for managing storage apparatuses |
CN106354662A (zh) * | 2015-07-17 | 2017-01-25 | 陕西千山航空电子有限责任公司 | 一种nand flash数据存储方法 |
CN106569748A (zh) * | 2016-10-27 | 2017-04-19 | 南方电网科学研究院有限责任公司 | Flash文件***的数据处理方法和装置 |
CN107015763A (zh) * | 2017-03-03 | 2017-08-04 | 北京中存超为科技有限公司 | 混合存储***中ssd管理方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111258919A (zh) * | 2018-12-03 | 2020-06-09 | 爱思开海力士有限公司 | 储存设备及其操作方法 |
CN112148645A (zh) * | 2019-06-28 | 2020-12-29 | 北京忆芯科技有限公司 | 去分配命令处理方法及其存储设备 |
WO2021195979A1 (zh) * | 2020-03-31 | 2021-10-07 | 华为技术有限公司 | 一种数据存储方法以及相关装置 |
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN113297309B (zh) * | 2021-05-31 | 2023-11-10 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN114924690A (zh) * | 2022-02-23 | 2022-08-19 | 华东师范大学 | 一种基于非均衡磨损闪存的读性能优化方法 |
CN114924690B (zh) * | 2022-02-23 | 2024-04-19 | 华东师范大学 | 一种基于非均衡磨损闪存的读性能优化方法 |
CN116880772A (zh) * | 2023-08-10 | 2023-10-13 | 广州菲利斯太阳能科技有限公司 | 基于flash保存发电量的方法 |
CN116880772B (zh) * | 2023-08-10 | 2024-06-07 | 广州菲利斯太阳能科技有限公司 | 基于flash保存发电量的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108710472A (zh) | 用于存储单元内部的磨损均衡管理方法及分布式存储*** | |
CN107967124B (zh) | 一种分布式持久性内存存储***及方法 | |
CN104794070B (zh) | 基于动态非覆盖raid技术的固态闪存写缓存***及方法 | |
JP3892851B2 (ja) | メモリカード及び半導体装置 | |
US6587915B1 (en) | Flash memory having data blocks, spare blocks, a map block and a header block and a method for controlling the same | |
US8312326B2 (en) | Delta checkpoints for a non-volatile memory indirection table | |
JP4248510B2 (ja) | 計算機システム、ディスク装置およびデータ更新制御方法 | |
CN104503706B (zh) | 一种基于磁盘阵列的数据存储及读取方法 | |
CN100541453C (zh) | 大容量缓存实现方法及存储*** | |
US11461049B2 (en) | Method for controlling write and read operations in the nonvolatile memory by a host, using an identifier for a region | |
JP2013532853A (ja) | ストレージ装置及びデータ制御方法 | |
CN107357680A (zh) | 数据处理设备和数据处理的方法 | |
CN100383792C (zh) | 缓存数据库数据组织方法 | |
JP2007199905A (ja) | 半導体記憶装置の制御方法 | |
CN110347613A (zh) | 多租户固态盘中实现raid的方法、控制器及多租户固态盘 | |
CN109582219A (zh) | 存储***、计算***及其方法 | |
US9959044B2 (en) | Memory device including risky mapping table and controlling method thereof | |
US20070100852A1 (en) | File system management for integrated NOR and NAND flash memory | |
CN113590612A (zh) | Dram-nvm混合索引结构的构建方法及操作方法 | |
CN108733324A (zh) | 一种固态硬盘的数据读写方法、装置、设备及存储介质 | |
CN104937576B (zh) | 协调存储在基于非易失性存储器的***中的数据的复制 | |
CN103348653B (zh) | 扩容的方法和设备、以及访问数据的方法和设备 | |
CN102122284A (zh) | 一种复合文档存储、读写方法和装置 | |
JP3928500B2 (ja) | メモリ装置 | |
CN107451070A (zh) | 一种数据的处理方法和服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181026 |