CN105117351A - 向缓存写入数据的方法及装置 - Google Patents
向缓存写入数据的方法及装置 Download PDFInfo
- Publication number
- CN105117351A CN105117351A CN201510568241.0A CN201510568241A CN105117351A CN 105117351 A CN105117351 A CN 105117351A CN 201510568241 A CN201510568241 A CN 201510568241A CN 105117351 A CN105117351 A CN 105117351A
- Authority
- CN
- China
- Prior art keywords
- metadata
- buddy group
- queue
- data
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 238000011084 recovery Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 11
- 230000000694 effects Effects 0.000 description 5
- 230000003321 amplification Effects 0.000 description 4
- 238000003199 nucleic acid amplification method Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002688 persistence Effects 0.000 description 3
- RMCCONIRBZIDTH-UHFFFAOYSA-N 2-(2-methylprop-2-enoyloxy)ethyl 1,3-dioxo-2-benzofuran-5-carboxylate Chemical compound CC(=C)C(=O)OCCOC(=O)C1=CC=C2C(=O)OC(=O)C2=C1 RMCCONIRBZIDTH-UHFFFAOYSA-N 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
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/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- 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
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- 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/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/21—Employing a record carrier using a specific recording technology
- G06F2212/214—Solid state disk
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/22—Employing cache memory using specific memory technology
- G06F2212/222—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/604—Details relating to cache allocation
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- 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
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例公开了一种向缓存中写入数据的方法及装置,方法包括:接收写入IO请求命令,该写入IO请求命令包括待写入数据的元数据;在全局的伙伴队列中获取第一伙伴组,判断第一伙伴组中是否能够写入待写入数据的全部元数据;若是,则向第一伙伴组中写入待写入数据的全部元数据,并向与第一伙伴组所属的元数据组对应的元数据块中写入待写入数据的全部元数据。本发明可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
Description
技术领域
本发明实施例涉及数据存储领域,尤其涉及一种向缓存中写入数据的方法及装置。
背景技术
在业界现有的读写缓存(Cache)中,一般采用的存储介质都是基于非易失性记忆体(ANon-VolatileDualIn-lineMemoryModule,NVDIMM)或者非易失性随机访问存储器(Non-VolatileRandomAccessMemory,NVRAM),然而基于上述设备,写Cache的容量通常比较小,难以应对大量随机写压力的场景。
现有技术中,采用闪存(Flash)设备作为Cache。由于要保证数据的安全性,每一次写请求都需要2次的IO,一次是写数据IO,另一次是写元数据IO。而Flash的寿命跟写的次数直接相关,例如,多层单元闪存(Multi-LevelCell,MLC)通常只有5000-10000次左右。而元数据的大小一般是30B-64B之间,如果每个元数据按照元数据的大小直接IO,则不能充分发挥Flash的性能,如果元数据按照4K对齐的大小下IO,则可能存在写放大的问题,对整个Flash的寿命会大大的影响。
发明内容
本发明实施例提供了一种向缓存中写入数据的方法及装置,可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
第一方面,本发明实施例提供了一种向缓存Cache中写入数据的方法,所述Cache的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述方法包括:
接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
结合第一方面,在第一方面的第一种实施方式中,当所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组,向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,当所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组,向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
结合第一方面的第二种实施方式,在第一方面的第三种实施方式中,当所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块,向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
结合第一方面,在第一方面的第四种实施方式中,每个伙伴组中包含的缓存块是按地址连续排列的。
结合第一方面,在第一方面的第五种实施方式中,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
结合第一方面,或第一方面的第一种、或第二种、或第三种、或第四种、或第五种实施方式,在第一方面的第六种实施方式中,在所述接收写入IO请求命令之后,在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组之前,所述方法还包括:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
结合第一方面,在第一方面的第七种实施方式中,当所述全局的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
结合第一方面,在第一方面的第八种实施方式中,所述方法还包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;
根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;
将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组;
根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
结合第一方面的第八种实施方式,在第一方面的第九种实施方式中,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
结合第一方面的第八种实施方式,在第一方面的第十种实施方式中,若所述前一缓存块和所述后一缓存块的状态均不为空闲状态,则将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
第二方面,本发明实施例提供了一种向缓存Cache中写入数据的装置,所述装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述装置包括:
接收单元,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
第一获取单元,用于在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
判断单元,用于判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
第一写入单元,用于当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
结合第二方面,在第二方面的第一种实施方式中,所述装置还包括:
第二获取单元,用于当所述判断单元判断所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组;
第二写入单元,用于向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
结合第二方面的第一种实施方式,在第二方面的第二种实施方式中,所述装置还包括:
第三获取单元,用于当所述判断单元判断所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组;
第三写入单元,用于向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
结合第二方面的第二种实施方式,在第二方面的第三种实施方式中,所述装置还包括:
第四获取单元,用于当所述判断单元判断所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块;
第四写入单元,用于向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
结合第二方面,在第二方面的第四种实施方式中,每个伙伴组中包含的缓存块是按地址连续排列的。
结合第二方面,在第二方面的第五种实施方式中,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
结合第二方面,或第二方面的第一种、或第二种、或第三种、或第四种、或第五种实施方式,在第二方面的第六种实施方式中,所述判断单元还用于,根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
所述装置还包括:
拆分单元,用于在所述判断单元判断需要进行拆分时,根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
所述判断单元还用于,对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
结合第二方面,在第二方面的第七种实施方式中,所述装置还包括:
排列单元,用于当所述全局的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
结合第二方面,在第二方面的第八种实施方式中,所述接收单元还用于,接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;
所述装置还包括:
第五获取单元,用于根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;
加入单元,用于将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组,根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
结合第二方面的第八种实施方式,在第二方面的第九种实施方式中,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
结合第二方面的第八种实施方式,在第二方面的第十种实施方式中,所述加入单元还用于,在所述前一缓存块和所述后一缓存块的状态均不为空闲状态时,将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,通过伙伴组记录内存中的剩余缓存块,当接收到写入IO请求命令时,从上述伙伴组中获取剩余缓存块,并将上述写入IO请求命令中包含的待写入数据的全部元数据写入到从同一伙伴组获取的剩余缓存块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,导致写放大,而影响Flash的寿命的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的Flash的一种数据布局示意图;
图2是本发明提供的Flash的另一种数据布局示意图;
图3为本发明提供的元数据在内存中位置和Flash中实际持久化的位置的一种关系示意图;
图4为本发明实施例一提供的向Cache中写入数据的方法流程图;
图5为全局的伙伴队列与伙伴组的关系示意图;
图6为本发明实施例二提供的向Cache中写入数据的装置示意图;
图7为本发明实施例提供的计算存储一体机的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为便于对本发明实施例的理解,下面将结合附图以具体实施例做进一步的解释说明,实施例并不构成对本发明实施例的限定。
图1是本发明提供的Flash的一种数据布局示意图。如图1所示,Flash的存储区域可包括超级块、元数据区和数据区三部分。
超级块,用于存储Cache中的全局数据,主要为了***宕机后恢复时需要用的数据。其中,该全局数据可包括元数据块的大小、数据块的大小等。
元数据(metadata),维护存储***中的数据块的数据,用于描述和组织数据块的关系,其大小根据***中定义的数据结构大小决定。
元数据区,指用于存储元数据的区域。
数据区,用于存储Cache中真实的数据,其下可包括多个数据块。
图2是本发明提供的Flash的另一种数据布局示意图。如图2所示,Flash包括超级块和多个存储块(chunk),每个chunk包括一个chunk元数据区和一个chunk数据区,每个chunk元数据区包括一个或多个元数据块,每个chunk数据区包括与该一个或多个元数据块对应的数据区。每个chunk数据区下的数据区与其对应的chunk元数据区下的元数据块一一对应。一个元数据块维护一个对应的数据区,具体地,每个元数据区下包括多个元数据,每个元数据对应于数据区下的一个数据块。
图2中,虽然1个chunk元数据区中包含了4个元数据块,但并不表示1个chunk元数据区只能包含4个元数据块,还可以是1个、2个或其它数值。同样的,图2所示的chunk的个数,chunk数据区内数据区的个数、元数据区内元数据的个数、数据区内数据块的个数都不限于图2所示的数值。
每个数据区对应于一个不同的元数据块,一个元数据块内的元数据所对应的数据块组成一个数据区。也就是说,一个数据区包含一个元数据块大小的元数据所对应的数据,一个数据区的大小由一个元数据块内元数据的个数和一个数据块的大小来决定。
在Flash中,一次页面写入的大小为4K。因此,一种优选的方案,一个元数据块的大小为4K。不妨假设一个元数据的大小为32B,一个数据块的大小为16K,则一个数据区的大小为2M(16K*(4K/32B))。
需要说明的是,一个chunk元数据区可能包括一个或多个元数据块,一个chunk元数据区的大小是可变的。一种优选的方案,可将一个数据块的大小作为一个chunk元数据区的大小,这样,可使得在Flash加载初始化时,按照数据块的大小对Flash的存储区域进行划分。例如,一个数据块的大小为4K,则一个chunk元数据区的大小也为4K,其元数据块的个数为1(4K/4K)。又例如,一个数据块的大小为16K,则一个chunk元数据区的大小也为16K,其元数据块的个数为4(16K/4K)。数据块的大小可以由操作***或存储装置配置,其大小可以为4K、8K、16K、32K或64K等等,本发明实施例在此不作限制。
当然,数据块的大小也可以与chunk元数据区的大小不同。例如,数据块的大小还可以是512B,1K,2K等,而chunk元数据区中至少包括1个元数据块,显然比一个数据块大。
又例如,当数据块的大小为8K、16K、32K或64K等时,chunk元数据区的大小也可以比数据块的大小还小,比如chunk元数据区中只包括1个元数据块。
图3为本发明提供的元数据在内存中位置和Flash中实际持久化的位置的一种关系示意图。图3中,可在内存中设计一个数据结构p_head数组,存储数据区中每个数据块对应的元数据。不妨假设每个数据块所需要的元数据的大小为64个字节,那么可以将p_head数组按照64个(4K/64B=64)元数据分成一组。
缓存块对应的元数据的数据结构wbhead_persistent及其含义如下所示:
内存中一个元数据对应于p_head数组的一个元素,其数据结构flashcache_wbhead及含义如下所示:
如图3所示,还可在内存中设计一个数据结构metadata_head数组,维护在内存中数据的元数据和这些元数据在实际持久化设备(Flash)中的实际的存储位置(即对应的元数据块)的关系。
Flash中的一个元数据在内存中所对应的一个元数据组,对应于metadata_head数组中的一个元素,其数据结构metadata_head及含义可如下所示:
如图3所示,内存中按flashCache_wbhead存储着一个数据块的元数据信息,又按metadata_head存储着同一组元数据(即一个元数据块)的信息,以方便在写入时按照元数据块进行写入。
下面,结合图3及元数据、元数据块的数据结构对图4的方法进行描述。当然图4还可应用于其它包含多个元数据区的Flash数据布局方式,本发明实施例在此不作限制。
S410,接收写入IO请求命令,写入IO请求命令包括待写入数据的元数据。
可选地,在接收写入IO请求命令之后,所述方法还可以包括如下步骤:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令。
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
具体地,缓存装置预先获取Flash中的数据块的大小,举例来说,获取到的数据块的大小可以为16K。在接收到写入IO请求命令之后,假设该写入IO请求命令的大小为32K(数据块的2倍),则需要对上述写入IO请求命令进行拆分。在拆分时,如果写入IO请求命令的偏移为0时,则将上述IO请求命令拆分为两个第一写入IO请求命令,其中,每个第一写入IO请求命令的大小为16K;当该写入IO请求命令的偏移不为0时,则将上述IO请求命令拆分为三个第一写入IO请求命令。该步骤可以保证缓存装置向Flash中写入数据块的大小与Flash内部的数据块大小相统一,从而可以提高向Flash中写入数据的效率。
需要说明的是,步骤S410中判断所述多个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中的步骤可参考现有技术实现,本发明实施例在此不做赘述。
S420,在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块。
需要说明的是,可以预先获取内存中用来存储数据块对应的元数据的存储空间的总大小,并获取Flash中数据块对应的元数据的大小,然后将存储空间的总大小除以数据块对应的元数据的大小,就可以得到内存中缓存块的总个数。可以理解的是,缓存块的大小即为元数据的大小。此外,元数据组对应于Flash中的元数据块,则元数据组中包含缓存块的个数可以根据Flash中元数据块的大小和数据块对应的元数据的大小计算得到,举例来说,如果元数据块的大小为4K,数据块对应的元数据的大小为32B,则元数据组管理缓存块的个数为4K/32B=128个,即一个4K元数据组可以包含128个缓存块。可选地,元数据组中包含的缓存块是按地址连续排列的。其中,每个缓存块用于存储待写入数据的元数据。在此说明,待写入数据的元数据的大小与Flash中数据块对应的元数据的大小一致,在***中大小均是可配置的。
初始时,可以将元数据组中包含的缓存块进行分组,例如按照元数据的地址范围,顺序地将64个缓存块分成一组,这组缓存块组成一个伙伴组,即一个伙伴组中包含的缓存块的地址是连续的。
具体地,可以通过多级队列对伙伴组进行管理,本实施例中,可以建立两个多级队列,一个是全局的伙伴队列,一个是元数据组的伙伴队列。元数据组的伙伴队列用来记录该元数据组中包含的伙伴组,全局的伙伴队列用来记录所有元数据组中包含的伙伴组。
请参阅图5,图5所示为全局的伙伴队列G_free_buddy_q与伙伴组的关系示意图。图5中,全局的伙伴队列的数据结构multi_q_node及含义如下所示:
全局的伙伴队列中各个队列的类型的数据结构invalid_q_type及含义如下所示:
各个队列中伙伴组的数据结构block_buddy及含义如下所示:
即初始时将元数据组包含的缓存块分组之后,需要根据每个伙伴组中包含的缓存块的个数将每个伙伴组挂入到全局的伙伴队列中,同时需要将该伙伴组挂入到该伙伴组所属的元数据组的伙伴队列中。
需要说明的是,根据队列的类型的数据结构invalid_q_type可知,全局的伙伴队列中各队列的类型是不同的,如0队列只记录包含的缓存块的个数为2或3的伙伴组,1队列只记录包含的缓存块的个数为4至7的伙伴组,这样依次类推。因此,若某个伙伴组包含的缓存块的个数为4个时,则将该伙伴组记录到1队列中。
具体地,参见图5,全局的伙伴队列包括6个队列,当任一队列中记录多个伙伴组时,则根据各个伙伴组包含的剩余缓存块的个数,对各个伙伴组依次进行排列。具体地,可按照各个伙伴组包含的剩余缓存块的个数从大到小依次排列。
在此说明,缓存装置将当前正在处理的全局的伙伴队列中的伙伴组作为第一伙伴组,可以理解的是,当缓存装置处理完第一伙伴组,而开始处理全局的伙伴队列中的其他伙伴组时,则其他伙伴组作为第一伙伴组。
S430、判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据。
在此说明,由于缓存块用于存储待写入数据的元数据,因此在缓存装置处理多个写入IO请求命令之后,第一伙伴组中缓存块的个数就会相应的减少。如前述例子中,一个伙伴组中可以包含64个缓存块,当缓存装置向该伙伴组中写入64个元数据时,则该伙伴组不再有剩余缓存块。因此,在缓存装置每次向剩余缓存块中写入元数据时,需要判断第一伙伴组是否有剩余缓存块且剩余缓存块的数量足够将本次写IO请求命令包含的全部元数据写入。例如,当前有三个需要写入的元数据,而第一伙伴组中只有两个剩余缓存块,则第一伙伴组中的剩余缓存块就不能够将全部的元数据写入。
S440,当第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
需要说明的是,可以根据第一伙伴组组所属的元数据组对应的metadata_head,获取该元数据组在Flash中对应的元数据块,并向该数据块中写入上述待写入数据的元数据。
在向第一伙伴组的剩余缓存块中写入待写入数据的全部元数据之后,可以更新第一伙伴组中剩余缓存块的数量,根据第一伙伴组中当前剩余缓存块的数量调整第一伙伴组在全局的伙伴队列中的位置,同时调整第一伙伴组在其所属的元数据组的伙伴队列中的位置。
可选地,在向与该元数据组对应的元数据块中写入所述待写入数据的元数据之前,所述方法还可以包括:
缓存装置判断是否处理完成了所有的第一写入IO请求命令,如果没有处理完成,则继续对其他的第一写入IO请求命令作S420-S440的处理;如果已经处理完成,则判断这些写入IO请求命令是否可以合并,如果可以合并,则根据合并后的IO请求命令,向Flash中写入数据。本发明中,每次优先从第一伙伴组中获取剩余缓存块,由于从同一伙伴组中获取的剩余缓存块的地址都是连续的,由此可以增加写入IO请求命令的合并概率,从而可以减小向Flash中写入数据的次数。
需要说明的是,判断写入IO请求命令是否可以合并可参考现有技术实现,在此不做赘述。
进一步地,当第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组。
上述步骤的主要目的是:在第一伙伴组中没有剩余缓存块或剩余缓存块不足时,尽快找到与第一伙伴组属于同一元数据组的第二伙伴组,以将全部元数据写入第二伙伴组,由于同一元数据组中包含的缓存块的地址也是连续的,由此可以进一步增加写入IO请求命令的合并概率,从而可以减小向Flash中写入数据的次数。
元数据组的伙伴队列中记录的是该元数据组包含的伙伴组,元数据组的伙伴队列中各队列的类型也是不同的,同全局的伙伴队列一样,0队列只记录包含的缓存块的个数为2或3的伙伴组,1队列只记录包含的缓存块的个数为4至7的伙伴组,这样依次类推。同样,当元数据组的伙伴队列的任一队列中记录多个伙伴组时,则根据各个伙伴组包含的剩余缓存块的个数,对各个伙伴组依次进行排列。具体地,可按照各个伙伴组包含的剩余缓存块的个数从大到小依次排列。因此,当在元数据组的伙伴队列中获取第二伙伴组时,可以获取包含的剩余缓存块的个数最接近当前所需的缓存块的个数的第二伙伴组。
在获取第二伙伴组之后,向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
在向第二伙伴组的剩余缓存块中写入待写入数据的全部元数据之后,可以更新第二伙伴组中剩余缓存块的数量,根据第二伙伴组中当前剩余缓存块的数量调整第二伙伴组在全局的伙伴队列中的位置,同时调整第二伙伴组在其所属的元数据组的伙伴队列中的位置。
可选地,在向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据之前,所述方法还可以包括:缓存装置将判断是否处理完成了所有的第一写入IO请求命令,如果没有处理完成,则继续处理其他的第一写入IO请求命令;如果已经处理完成,则判断这些写入IO请求命令是否可以合并,如果可以合并,则根据合并后的写入IO请求命令,向Flash中写入数据。
进一步地,当第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组,向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
即当没有合适的第二伙伴组时,则返回到全局的伙伴队列中,获取能够写入待写入数据的全部元数据的第三伙伴组,具体可在全局的伙伴队列中获取包含的剩余缓存块的个数最接近当前所需的缓存块的个数的第三伙伴组。第三伙伴组将与第一伙伴组不属于同一元数据组,但第三伙伴组可以将全部的元数据写入。写入完成之后,同样需要更新第三伙伴组中剩余缓存块的数据,以及调整第三伙伴组在全局的伙伴队列及元数据组的伙伴队列中的位置。
当全局的伙伴队列中没有能够写入待写入数据的全部元数据的第三伙伴组时,可以在根据当前所需的缓存块的数量,在全局的伙伴队列中同时获取多个伙伴组,将全部元数据分开写入到所获取的多个伙伴组中。写入完成之后,需要更新所述多个伙伴组中每个伙伴组的剩余缓存块的数量,并调整所述多个伙伴组中每个伙伴组在全局的伙伴队列及元数据组的伙伴队列中的位置。
另外,还可以建立全局的单缓存队列(如图5中的G_free_head_q)及元数据组的单缓存队列,元数据组的单缓存队列用于记录该元数据组中不能与其他缓存块组成伙伴组的单个缓存块,全局的伙伴队列用于记录所有元数据组中包含的单个缓存块。
当全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,还可以在全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的单个剩余缓存块,向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据;全局的单缓存队列中包含的剩余缓存块,可能属于不同的元数据组,所以需要将待写入数据的全部元数据对应写入与全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中。
需要说明的是,当全局的单缓存队列中剩余缓存块的数量不足以写入待写入数据的全部元数据时,则缓存装置可以不对写入IO请求命令进行处理,将该写入IO请求命令加入到等待队列中,当全局的伙伴队列中有足够数量的剩余缓存块时,再对上述写入IO请求命令进行处理。
对通过上述方法获取到的剩余缓存块,当写入该缓存块的元数据为无效的元数据时,则缓存装置需要将该缓存块回收到内存中。其中,回收缓存块的步骤可以包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据的所属的缓存块的地址;
根据所述缓存块的地址,获取所述缓存块的前一缓存块及后一缓存块;
将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组;
根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
具体地,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。例如所述缓存块的前一缓存块为单个空闲状态,所述缓存块的后一个缓存块为空闲状态,但后一个缓存块已属于一个伙伴组,则将所述前一缓存块,所述缓存块以及所述后一缓存块所属的伙伴组中包含的缓存块组成所述新的伙伴,同时需要在全局的伙伴队列及元数据组的伙伴队列中删除所述后一缓存块所属的伙伴组,以及在全局的单缓存队列及元数据组的单缓存队列中删除所述前一缓存块。
另外,若所述前一缓存块和所述后一缓存块的状态均不为空闲状态,则将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
通过上述回收缓存块的步骤,可以将回收的缓存块回收到其所属的元数据组的伙伴队列及全局的伙伴队列中,解决了缓存块碎片的问题,从而可以保证通过本发明的方法,在获取剩余缓存块时,获取到的剩余缓存块的地址是连续的,由此可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,而影响Flash的寿命的问题。
本发明实施例提供了的方法,通过元数据管理,结合元数据合并,大大增加元数据合并的概率,从而可以大量的减少元数据IO,对提供***的性能具体重大的作用,同时减少写IO的次数,大量的减少因为元数据的操作IO,对提高FLASH卡的寿命具体重大的作用。
对于大块的IO,通过元数据管理,尽量对大块的IO,分配的缓存块在物理卡中的位置也是尽量连在一起的,这样的带来的作用,可以通过WriteV接口,把几个IO进行合并写,在大块的场景中,可以大量的减少IO的次数,可以大大的降低***的CPU的利用率,通过实际的测试,在大块的场景中,CPU的利用率可以减少20-30%。
由于在分配空闲块的时候,IO的物理位置是尽量连在一起的,所以在刷盘的时候,在大块场景中,或者顺序IO的场景中,降大大的增加读合并的效果;也可以大量的减少读IO的请求,对降低CPU的利用率作用非常大。
图6为本发明实施例二提供的向Cache中写入数据的装置示意图。所述装置用于执行图4所述的方法。图6中,该装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,包括:接收单元601、第一获取单元602、判断单元603、第一写入单元604。
接收单元601,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
第一获取单元602,用于在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
判断单元603,用于判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
第一写入单元604,用于当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
可选地,所述装置还包括:
第二获取单元605,用于当所述判断单元判断所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组;
第二写入单元606,用于向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
可选地,所述装置还包括:
第三获取单元607,用于当判断单元603判断所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组;
第三写入单元608,用于向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
可选地,所述装置还包括:
第四获取单元609,用于当判断单元603判断所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块;
第四写入单元610,用于向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
可选地,每个伙伴组中包含的缓存块是按地址连续排列的。
可选地,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
可选地,判断单元603还用于,根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
所述装置还包括:拆分单元611,用于在判断单元603判断需要进行拆分时,根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
判断单元603还用于,对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
可选地,所述装置还包括:排列单元612,用于当所述全局的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
可选地,接收单元601还用于,接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;
所述装置还包括:
第五获取单元613,用于根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;
加入单元614,用于将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组,根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
可选地,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
可选地,加入单元614还用于,在所述前一缓存块和所述后一缓存块的状态均不为空闲状态时,将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
本发明实施例提供的向缓存中写入数据的装置,通过伙伴组记录内存中的剩余缓存块,当接收到写入IO请求命令时,从上述伙伴组中获取剩余缓存块,并将上述写入IO请求命令中包含的待写入数据的全部元数据写入到从同一伙伴组获取的剩余缓存块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,导致写放大,而影响Flash的寿命的问题。
相应的,本发明实施例还提供了一种计算存储一体机,如图7所示,包括使用闪存Flash701的cache(图中仅示出Flash701)、内存702和处理器703。
闪存Flash701的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应。
处理器703接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
处理器703在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存702中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
处理器703判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,处理器703向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
进一步地,当所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,处理器703判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组;
处理器703向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
进一步的,所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,处理器703判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组;
处理器703向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
进一步的,当所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,处理器703判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块;
处理器703向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
进一步的,每个伙伴组中包含的缓存块是按地址连续排列的。
进一步的,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
进一步的,在处理器703接收写入IO请求命令之后,并且在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组之前,处理器703所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则处理器703根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
处理器703对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
进一步的,当所述全局的伙伴队列中任一队列记录多个伙伴组时,处理器703根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
进一步的,处理器703接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组,根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
进一步的,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
进一步的,在所述前一缓存块和所述后一缓存块的状态均不为空闲状态时,处理器703将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
本发明实施例提供的计算存储一体机,通过伙伴组记录内存中的剩余缓存块,当接收到写入IO请求命令时,从上述伙伴组中获取剩余缓存块,并将上述写入IO请求命令中包含的待写入数据的全部元数据写入到从同一伙伴组获取的剩余缓存块中,从而可以增大元数据的合并概率,进而可以解决频繁向Flash中写入元数据,导致写放大,而影响Flash的寿命的问题。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (22)
1.一种向缓存Cache中写入数据的方法,其特征在于,所述Cache的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述方法包括:
接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
2.根据权利要求1所述的方法,其特征在于,当所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组,向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
3.根据权利要求2所述的方法,其特征在于,当所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组,向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
4.根据权利要求3所述的方法,其特征在于,当所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块,向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
5.根据权利要求1所述的方法,其特征在于,每个伙伴组中包含的缓存块是按地址连续排列的。
6.根据权利要求1所述的方法,其特征在于,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
7.根据权利要求1至6任一所述的方法,其特征在于,在所述接收写入IO请求命令之后,在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组之前,所述方法还包括:
根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
若需要进行拆分,则根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
8.根据权利要求1所述的方法,其特征在于,当所述全局的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;
根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;
将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组;
根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
10.根据权利要求9所述的方法,其特征在于,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
11.根据权利要求9所述的方法,其特征在于,若所述前一缓存块和所述后一缓存块的状态均不为空闲状态,则将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
12.一种向缓存Cache中写入数据的装置,其特征在于,所述装置的闪存Flash的存储区域包括多个存储块chunk,一个所述chunk包括一个chunk元数据区和一个chunk数据区,所述一个chunk元数据区包括至少一个元数据块,所述一个chunk数据区包括与所述至少一个元数据块对应的至少一个数据区,所述元数据块包括多个元数据,所述数据区包括多个数据块,所述元数据块与所述数据区一一对应,所述元数据与所述数据块一一对应,所述装置包括:
接收单元,用于接收写入IO请求命令,所述写入IO请求命令包括待写入数据的元数据;
第一获取单元,用于在全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组,每个伙伴组包含内存中的多个缓存块,每个伙伴组属于一个元数据组,一个所述元数据组对应一个所述元数据块;
判断单元,用于判断所述第一伙伴组中是否有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据;
第一写入单元,用于当所述第一伙伴组中有剩余缓存块且剩余缓存块能够写入所述待写入数据的全部元数据时,向所述第一伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第一伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
第二获取单元,用于当所述判断单元判断所述第一伙伴组中没有剩余缓存块或剩余缓存块不能够写入所述待写入数据的全部元数据时,则判断所述第一伙伴组所属的元数据组的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组,若有,则在所述第一伙伴组所属的元数据组的伙伴队列中获取所述第二伙伴组;
第二写入单元,用于向所述第二伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第二伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据,所述全局的伙伴队列中包括所有元数据组的伙伴队列中包括的伙伴组。
14.根据权利要求13所述的装置,其特征在于,所述装置还包括:
第三获取单元,用于当所述判断单元判断所述第一伙伴组所属的元数据组的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第二伙伴组时,则判断所述全局的伙伴队列中是否有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组,若有,则在所述全局的伙伴队列中获取所述第三伙伴组;
第三写入单元,用于向所述第三伙伴组的剩余缓存块中写入所述待写入数据的全部元数据,并向与所述第三伙伴组所属的元数据组对应的元数据块中写入所述待写入数据的全部元数据。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:
第四获取单元,用于当所述判断单元判断所述全局的伙伴队列中没有剩余缓存块能够写入所述待写入数据的全部元数据的第三伙伴组时,则判断全局的单缓存队列中是否有足够数量的剩余缓存块能够写入所述待写入数据的全部元数据,若有,则在所述全局的单缓存队列中获取能够写入所述待写入数据的全部元数据的剩余缓存块;
第四写入单元,用于向所获取的所述全局的单缓存队列中的剩余缓存块中写入所述待写入数据的全部元数据,并将所述待写入数据的全部元数据对应写入与所述全局的单缓存队列中的剩余缓存块所属的元数据组对应的元数据块中,所述全局的单缓存队列中包含所有元数据组的单缓存队列中中包含的不能与其他缓存块组成伙伴组的单个缓存块。
16.根据权利要求12所述的装置,其特征在于,每个伙伴组中包含的缓存块是按地址连续排列的。
17.根据权利要求12所述的装置,其特征在于,每个伙伴组中包含的剩余缓存块的个数被同时记录在所述全局的伙伴队列及所述元数据组的伙伴队列中,所述全局的伙伴队列及所述元数据组的伙伴队列中各队列记录的伙伴组包含的剩余缓存块的个数是不同的。
18.根据权利要求12至17任一所述的装置,其特征在于,
所述判断单元还用于,根据所述数据块的大小,判断是否需要对所述写入IO请求命令进行拆分;
所述装置还包括:
拆分单元,用于在所述判断单元判断需要进行拆分时,根据所述数据块的大小,对所述写入IO请求命令进行拆分,得到多个第一写入IO请求命令;
所述判断单元还用于,对所述多个第一写入IO请求命令,分别判断各个第一写入IO请求命令中包括的待写入数据的元数据是否已缓存在所述内存中,如果是,则直接进行写操作,如果否,则执行在所述全局的伙伴队列中获取当前正在处理的伙伴组为第一伙伴组的步骤。
19.根据权利要求12所述的装置,其特征在于,所述装置还包括:
排列单元,用于当所述全局的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列;和/或当所述元数据组的伙伴队列中任一队列记录多个伙伴组时,则根据每个伙伴组中包含的剩余缓存块的个数,对所述多个伙伴组进行排列。
20.根据权利要求12所述的装置,其特征在于,
所述接收单元还用于,接收回收元数据指令,所述回收元数据指令包括待回收元数据所属的缓存块的索引;
所述装置还包括:
第五获取单元,用于根据所述缓存块的索引,获取所述缓存块的前一缓存块及后一缓存块;
加入单元,用于将所述缓存块与所述前一缓存块和所述后一缓存块中状态为空闲的缓存块组成一个新的伙伴组,根据所述新的伙伴组中包含的缓存块的数量将所述新的伙伴组加入到所述全局的伙伴队列及所述元数据组的伙伴队列。
21.根据权利要求20所述的装置,其特征在于,若所述前一缓存块和所述后一缓存块中状态为空闲的缓存块已属于一个伙伴组,则所述新的伙伴组中包括包括所述缓存块,以及所述前一缓存块和所述后一缓存块中状态为空闲的缓存块所属的伙伴组中包含的缓存块。
22.根据权利要求20所述的装置,其特征在于,所述加入单元还用于,在所述前一缓存块和所述后一缓存块的状态均不为空闲状态时,将所述缓存块加入到全局的单缓存队列及元数据组的单缓存队列。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510568241.0A CN105117351B (zh) | 2015-09-08 | 2015-09-08 | 向缓存写入数据的方法及装置 |
EP16843508.9A EP3309685B1 (en) | 2015-09-08 | 2016-06-29 | Method and apparatus for writing data to cache |
PCT/CN2016/087705 WO2017041570A1 (zh) | 2015-09-08 | 2016-06-29 | 向缓存写入数据的方法及装置 |
US15/867,120 US10409502B2 (en) | 2015-09-08 | 2018-01-10 | Method and apparatus for writing metadata into cache |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510568241.0A CN105117351B (zh) | 2015-09-08 | 2015-09-08 | 向缓存写入数据的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105117351A true CN105117351A (zh) | 2015-12-02 |
CN105117351B CN105117351B (zh) | 2018-07-03 |
Family
ID=54665349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510568241.0A Active CN105117351B (zh) | 2015-09-08 | 2015-09-08 | 向缓存写入数据的方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10409502B2 (zh) |
EP (1) | EP3309685B1 (zh) |
CN (1) | CN105117351B (zh) |
WO (1) | WO2017041570A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017041570A1 (zh) * | 2015-09-08 | 2017-03-16 | 华为技术有限公司 | 向缓存写入数据的方法及装置 |
CN107783784A (zh) * | 2016-08-24 | 2018-03-09 | 衡宇科技股份有限公司 | 由主机到设备控制器传输命令的方法及使用其的*** |
CN108062200A (zh) * | 2016-11-08 | 2018-05-22 | 杭州海康威视数字技术股份有限公司 | 一种磁盘数据读写方法及装置 |
CN109582244A (zh) * | 2018-12-05 | 2019-04-05 | 广东浪潮大数据研究有限公司 | 一种元数据落盘方法、装置、终端及计算机可读存储介质 |
CN109830249A (zh) * | 2018-12-29 | 2019-05-31 | 百度在线网络技术(北京)有限公司 | 数据处理方法、装置和存储介质 |
WO2020024933A1 (zh) * | 2018-07-31 | 2020-02-06 | 杭州海康威视***技术有限公司 | 一种数据写入方法和服务端 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10896153B2 (en) * | 2018-03-30 | 2021-01-19 | EMC IP Holding Company LLC | Large block misaligned deduplication |
CN110209343B (zh) * | 2018-07-23 | 2021-12-14 | 腾讯科技(深圳)有限公司 | 数据存储方法、装置、服务器及存储介质 |
EP3866016A4 (en) * | 2018-11-20 | 2021-11-10 | Huawei Technologies Co., Ltd. | METHOD AND APPARATUS FOR DELETING INDEX ENTRY IN MEMORY |
US11513739B2 (en) * | 2019-07-31 | 2022-11-29 | EMC IP Holding Company LLC | File layer to block layer communication for block organization in storage |
EP4172785A1 (en) * | 2020-06-30 | 2023-05-03 | ARRIS Enterprises LLC | Virtual elastic queue |
CN112783802B (zh) * | 2021-01-29 | 2022-11-01 | 山东华芯半导体有限公司 | 一种ssd中优化读干扰处理的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505284B1 (en) * | 2000-06-26 | 2003-01-07 | Ncr Corporation | File segment subsystem for a parallel processing database system |
CN101470667A (zh) * | 2007-12-28 | 2009-07-01 | 英业达股份有限公司 | Linux***平台上指定地址范围分配物理内存的方法 |
CN103473185A (zh) * | 2013-09-06 | 2013-12-25 | 华为数字技术(苏州)有限公司 | 缓存写入的方法、缓存装置和存储*** |
CN103488582A (zh) * | 2013-09-05 | 2014-01-01 | 深圳市华为技术软件有限公司 | 写高速缓冲存储器的方法及装置 |
CN104238962A (zh) * | 2014-09-16 | 2014-12-24 | 华为技术有限公司 | 向缓存中写入数据的方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9032151B2 (en) * | 2008-09-15 | 2015-05-12 | Microsoft Technology Licensing, Llc | Method and system for ensuring reliability of cache data and metadata subsequent to a reboot |
TWI451247B (zh) * | 2010-09-23 | 2014-09-01 | Phison Electronics Corp | 資料寫入方法、記憶體控制器與記憶體儲存裝置 |
US20140244901A1 (en) * | 2013-02-26 | 2014-08-28 | Lsi Corporation | Metadata management for a flash drive |
US9514054B2 (en) * | 2014-07-08 | 2016-12-06 | Netapp, Inc. | Method to persistent invalidation to ensure cache durability |
CN105117351B (zh) * | 2015-09-08 | 2018-07-03 | 华为技术有限公司 | 向缓存写入数据的方法及装置 |
US10223272B2 (en) * | 2017-04-25 | 2019-03-05 | Seagate Technology Llc | Latency sensitive metadata object persistence operation for storage device |
-
2015
- 2015-09-08 CN CN201510568241.0A patent/CN105117351B/zh active Active
-
2016
- 2016-06-29 WO PCT/CN2016/087705 patent/WO2017041570A1/zh active Application Filing
- 2016-06-29 EP EP16843508.9A patent/EP3309685B1/en active Active
-
2018
- 2018-01-10 US US15/867,120 patent/US10409502B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6505284B1 (en) * | 2000-06-26 | 2003-01-07 | Ncr Corporation | File segment subsystem for a parallel processing database system |
CN101470667A (zh) * | 2007-12-28 | 2009-07-01 | 英业达股份有限公司 | Linux***平台上指定地址范围分配物理内存的方法 |
CN103488582A (zh) * | 2013-09-05 | 2014-01-01 | 深圳市华为技术软件有限公司 | 写高速缓冲存储器的方法及装置 |
CN103473185A (zh) * | 2013-09-06 | 2013-12-25 | 华为数字技术(苏州)有限公司 | 缓存写入的方法、缓存装置和存储*** |
CN104238962A (zh) * | 2014-09-16 | 2014-12-24 | 华为技术有限公司 | 向缓存中写入数据的方法及装置 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017041570A1 (zh) * | 2015-09-08 | 2017-03-16 | 华为技术有限公司 | 向缓存写入数据的方法及装置 |
US10409502B2 (en) | 2015-09-08 | 2019-09-10 | Huawei Technologies Co., Ltd. | Method and apparatus for writing metadata into cache |
CN107783784A (zh) * | 2016-08-24 | 2018-03-09 | 衡宇科技股份有限公司 | 由主机到设备控制器传输命令的方法及使用其的*** |
CN108062200A (zh) * | 2016-11-08 | 2018-05-22 | 杭州海康威视数字技术股份有限公司 | 一种磁盘数据读写方法及装置 |
US11048601B2 (en) | 2016-11-08 | 2021-06-29 | Hangzhou Hikvision Digital Technology Co., Ltd. | Disk data reading/writing method and device |
WO2020024933A1 (zh) * | 2018-07-31 | 2020-02-06 | 杭州海康威视***技术有限公司 | 一种数据写入方法和服务端 |
CN109582244A (zh) * | 2018-12-05 | 2019-04-05 | 广东浪潮大数据研究有限公司 | 一种元数据落盘方法、装置、终端及计算机可读存储介质 |
CN109830249A (zh) * | 2018-12-29 | 2019-05-31 | 百度在线网络技术(北京)有限公司 | 数据处理方法、装置和存储介质 |
CN109830249B (zh) * | 2018-12-29 | 2021-07-06 | 百度在线网络技术(北京)有限公司 | 数据处理方法、装置和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2017041570A1 (zh) | 2017-03-16 |
US20180129429A1 (en) | 2018-05-10 |
CN105117351B (zh) | 2018-07-03 |
US10409502B2 (en) | 2019-09-10 |
EP3309685B1 (en) | 2019-09-11 |
EP3309685A4 (en) | 2018-07-25 |
EP3309685A1 (en) | 2018-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105117351A (zh) | 向缓存写入数据的方法及装置 | |
CN108804031B (zh) | 最佳记录查找 | |
US9983821B2 (en) | Optimized hopscotch multiple hash tables for efficient memory in-line deduplication application | |
CN104238962B (zh) | 向缓存中写入数据的方法及装置 | |
US10031675B1 (en) | Method and system for tiering data | |
US11132300B2 (en) | Memory hierarchy using page-based compression | |
US8595451B2 (en) | Managing a storage cache utilizing externally assigned cache priority tags | |
US9966152B2 (en) | Dedupe DRAM system algorithm architecture | |
CN108363620B (zh) | 提供虚拟内存容量的内存模块及其操作方法 | |
EP3316150B1 (en) | Method and apparatus for file compaction in key-value storage system | |
US9477605B2 (en) | Memory hierarchy using row-based compression | |
CN103797470A (zh) | 存储*** | |
US10496543B2 (en) | Virtual bucket multiple hash tables for efficient memory in-line deduplication application | |
JP2005267600A5 (zh) | ||
CN103942161B (zh) | 只读缓存的去冗余***及方法以及缓存的去冗余方法 | |
CN109086141B (zh) | 内存管理方法和装置以及计算机可读存储介质 | |
US20210011634A1 (en) | Methods and systems for managing key-value solid state drives (kv ssds) | |
CN103399823A (zh) | 业务数据的存储方法、设备和*** | |
CN111324303A (zh) | Ssd垃圾回收方法、装置、计算机设备及存储介质 | |
CN105183399A (zh) | 一种基于弹性块存储的数据写、读方法及装置 | |
CN109408416B (zh) | 一种地址映射表项页管理方法及装置 | |
CN108334457B (zh) | 一种io处理方法及装置 | |
CN110658999B (zh) | 一种信息更新方法、装置、设备及计算机可读存储介质 | |
CN109871355B (zh) | 一种快照元数据存储方法、装置及设备、介质 | |
WO2020237409A1 (en) | Technologies for memory-efficient key-value lookup |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220208 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Patentee after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |