向缓存写入数据的方法及装置制造方法及图纸

技术编号:12440265 阅读:83 留言:0更新日期:2015-12-04 02:41
本发明专利技术实施例公开了一种向缓存中写入数据的方法及装置,方法包括:接收写入IO请求命令,该写入IO请求命令包括待写入数据的元数据;在全局的伙伴队列中获取第一伙伴组,判断第一伙伴组中是否能够写入待写入数据的全部元数据;若是,则向第一伙伴组中写入待写入数据的全部元数据,并向与第一伙伴组所属的元数据组对应的元数据块中写入待写入数据的全部元数据。本发明专利技术可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。

【技术实现步骤摘要】

本专利技术实施例涉及数据存储领域,尤其涉及一种向缓存中写入数据的方法及装 置。
技术介绍
在业界现有的读写缓存(Cache)中,一般采用的存储介质都是基于非易失性记忆 体(A Non-Volatile Dual In-line Memory Module,NVDIMM)或者非易失性随机访问存储 器(Non-Volatile Random Access Memory,NVRAM),然而基于上述设备,写 Cache 的容量通 常比较小,难以应对大量随机写压力的场景。 现有技术中,采用闪存(Flash)设备作为Cache。由于要保证数据的安全性,每一 次写请求都需要2次的10, 一次是写数据10,另一次是写元数据10。而Flash的寿命跟写 的次数直接相关,例如,多层单元闪存(Multi-Level Cell,MLC)通常只有5000-10000次左 右。而元数据的大小一般是30B-64B之间,如果每个元数据按照元数据的大小直接10,则 不能充分发挥Flash的性能,如果元数据按照4K对齐的大小下10,则可能存在写放大的问 题,对整个Flash的寿命会大大的影响。
技术实现思路
本专利技术实施例提供了一种向缓存中写入数据的方法及装置,可以解决频繁向 Flash中写入元数据,而影响Flash的寿命的问题。 第一方面,本专利技术实施例提供了一种向缓存Cache中写入数据的方法,所述Cache 的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据 区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk 数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数 据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述 数据块一一对应,所述方法包括: 接收写入10请求命令,所述写入10请求命令包括待写入数据的元数据; 在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含 内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元 数据块; 判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数 据的全部元数据; 当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全 部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向 与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。 结合第一方面,在第一方面的第一种实施方式中,当所述第一伙伴组中没有剩余 缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组 所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据 的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙 伴组,向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述 第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全 局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。 结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,当所述第一 伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元 数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写 入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴 组,向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第 三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。 结合第一方面的第二种实施方式,在第一方面的第三种实施方式中,当所述全局 的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则 判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部 元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据 的剩余缓存块,向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据 的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的 剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据 组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。 结合第一方面,在第一方面的第四种实施方式中,每个伙伴组中包含的缓存块是 按地址连续排列的。 结合第一方面,在第一方面的第五种实施方式中,每个伙伴组中包含的剩余缓存 块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙 伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不 同的。 结合第一方面,或第一方面的第一种、或第二种、或第三种、或第四种、或第五种实 施方式,在第一方面的第六种实施方式中,在所述接收写入IO请求命令之后,在所述全局 的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组之前,所述方法还包括: 根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分; 若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分, 得到多个第一写入IO请求命令; 对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的 待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执 行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。 结合第一方面,在第一方面的第七种实施方式中,当所述全局的伙伴队列中任一 队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴 组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每 个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。 结合第一方面,在第一方面的第八种实施方式中,所述方法还包括: 接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索 引; 根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块; 将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成 一个新的伙伴组; 根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局 的伙伴队列及所述元数据组的伙伴队列。 结合第一方面的第八种实施方式,在第一方面的第九种实施方式中,若所述前一 缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中 包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属 的伙伴组中包含的缓存块。 结合第一方面的第八种实施方式,在第一方面的第十种实施方式中,若所述前一 缓存块和所述后一缓存块的状态均不为空闲状态,则将所述缓存块加入到全局的单缓存队 列及元数据组的单缓存队列。 第二方面,本专利技术实施例提供了一种向缓存Cache中写入数据的装置,所述装置 的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk本文档来自技高网...
<a href="http://www.xjishu.com/zhuanli/55/CN105117351.html" title="向缓存写入数据的方法及装置原文来自X技术">向缓存写入数据的方法及装置</a>

【技术保护点】
一种向缓存Cache中写入数据的方法,其特征在于,所述Cache的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述方法包括:接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。

【技术特征摘要】

【专利技术属性】
技术研发人员:黄福堂
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1