CN109690681B - 处理数据的方法、存储装置、固态硬盘和存储系统 - Google Patents
处理数据的方法、存储装置、固态硬盘和存储系统 Download PDFInfo
- Publication number
- CN109690681B CN109690681B CN201680086236.9A CN201680086236A CN109690681B CN 109690681 B CN109690681 B CN 109690681B CN 201680086236 A CN201680086236 A CN 201680086236A CN 109690681 B CN109690681 B CN 109690681B
- Authority
- CN
- China
- Prior art keywords
- data
- ssd
- controller
- storage device
- written
- 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.)
- Active
Links
Images
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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into 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/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
- 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/0604—Improving or facilitating administration, e.g. storage management
-
- 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/0608—Saving storage space on storage systems
-
- 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/0626—Reducing size or complexity of storage systems
-
- 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/0658—Controller construction arrangements
-
- 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
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/10—Programming or data input circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1006—Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
-
- 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/40—Specific encoding of data in memory or cache
- G06F2212/401—Compressed data
-
- 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/72—Details relating to flash memory management
- G06F2212/7204—Capacity control, e.g. partitioning, end-of-life degradation
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
一种处理数据的方法、存储装置、固态硬盘和存储系统,该方法应用于SSD中,包括:SSD从控制器接收写请求,写请求中携带待写入数据;SSD对待写入数据进行压缩,得到压缩数据;SSD存储压缩数据;SSD向控制器发送第一反馈信息,第一反馈信息指示SSD存储了压缩数据之后的剩余容量。通过将压缩功能从控制器下移至SSD中,降低了控制器的计算压力。
Description
技术领域
本发明涉及存储系统领域,并且更具体地,涉及一种处理数据的方法、存储装置、固态硬盘和存储系统。
背景技术
存储系统一般包括主机、控制器(或称存储控制器,或者也可称为存储阵列控制器)以及磁盘阵列。控制器是主机和磁盘阵列之间的桥梁,用于控制主机和磁盘之间的通信和数据交换。
当前主流的存储系统都支持数据的压缩解压功能。例如,在向磁盘写入数据之前,存储系统一般会对数据进行压缩。又如,从磁盘读出数据后,存储系统会先对数据进行解压缩,然后再将解压后的数据返给主机。通过对数据进行压缩和解压缩,能够节省磁盘空间。
现有技术中,存储系统的压缩解压功能主要由控制器实现。具体地,可以由控制器中的处理器实现。例如,对于写请求(或称写输入输出(Input Output,IO))而言,控制器会先对该数据进行压缩,再将压缩后的数据写入磁盘中。对于读请求(或称读IO)而言,控制器会先将压缩后的数据从盘内读出,然后对读出的数据进行解压缩,并将解压缩后的数据返给主机。由上述过程可知,整个压缩和解压缩的过程均需要控制器参与,而数据的压缩和解压缩需要消耗大量的计算资源,导致控制器的计算压力增大。
发明内容
本申请提供一种处理数据的方法、存储装置、固态硬盘和存储系统,以缓解控制器的计算压力。
第一方面,提供一种处理数据的方法,该方法应用于固态硬盘(Solid StateDisk,SSD)中。具体地,所述方法可以由SSD执行,例如,可以由SSD中的处理器执行。所述方法包括:所述SSD从控制器接收写请求,所述写请求中携带待写入数据。所述SSD对所述待写入数据进行压缩,得到压缩数据。应理解,SSD可以对待写入数据按逻辑块进行压缩,也就是说,为待写入数据分配几个逻辑块地址(Logical Block Address,LBA),就压缩出几个压缩块。此外,SSD可以采用定长压缩或变长压缩。所述方法还包括:所述SSD存储所述压缩数据。所述SSD向所述控制器发送第一反馈信息,所述第一反馈信息指示所述SSD存储了所述压缩数据之后的剩余容量。应理解,第一反馈信息指示剩余容量的方式可以有多种,可以直接指示,也可以间接指示。例如,直接指示的方式可以是:SSD直接上报SSD的剩余容量给控制器;间接指示的方式可以是:SSD上报SSD的剩余容量的变化情况给控制器,控制器根据SSD的剩余容量的变化情况也能够确定出SSD的剩余容量。
在现有技术中,数据的压缩由控制器执行,且控制器自身建立地址空间来管理SSD的容量,该地址空间是一个定长的地址空间,一旦该地址空间建立完成,该地址空间的大小就不会改变,这样一来,即使SSD能够将数据压缩引起的容量的增加告知控制器,控制器也无法将其利用起来,造成SSD的存储资源的浪费。本实现方式首先将压缩功能从控制器下移至SSD,这样可以降低控制器的计算压力,其次,将SSD的容量管理功能下放到SSD中,并由SSD向控制器反馈剩余容量,由于SSD能够准确地获得自身的剩余容量,避免了SSD的存储资源的浪费。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD向所述控制器发送第二反馈信息,所述第二反馈信息指示所述SSD的逻辑容量,所述SSD的逻辑容量为所述SSD中的已存储数据在压缩前的数据量与所述SSD的空闲的物理空间的容量之和。
结合第一方面,在第一方面的某些实现方式中,在所述SSD向所述控制器发送第一反馈信息之前,所述方法还包括:所述SSD查询所述SSD的空闲的物理空间;所述SSD将所述空闲的物理空间的容量确定为所述剩余容量。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD为所述待写入数据分配空白逻辑块,所述空白逻辑块为逻辑地址空闲的逻辑块,每个逻辑块对应所述SSD中的一段逻辑容量;所述SSD将所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;所述SSD查询所述SSD的剩余空白逻辑块的数量;所述SSD向所述控制器发送第一反馈信息,包括:所述SSD向所述控制器发送所述第一反馈信息,所述第一反馈信息包括所述剩余空白逻辑块的数量和/或所述剩余容量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。应理解,本实现方式中,所述SSD可以在为待写入数据分配了空白逻辑块之后,直接将这些空白逻辑块转换成有效逻辑块;或者,所述SSD可以在为待写入数据分配了空白逻辑块之后,先对待写入数据执行压缩存储操作,然后再将空白逻辑块转换成有效逻辑块。
结合第一方面,在第一方面的某些实现方式中,所述SSD通过SSD的映射表记录所述SSD的逻辑块。
结合第一方面,在第一方面的某些实现方式中,所述SSD对所述待写入数据进行压缩,得到压缩数据,包括:在所述SSD为所述待写入数据分配空白逻辑块之后,所述SSD对所述待写入数据进行压缩,得到所述压缩数据;所述方法还包括:所述SSD根据所述待写入数据和所述压缩数据的大小,确定所述SSD中需要增加的空白逻辑块的数量。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD根据所述SSD中需要增加的空白逻辑块的数量,在所述SSD的映射表中添加新的空白逻辑块对应的表项。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD根据所述SSD中需要增加的空白逻辑块的数量,在所述SSD的映射表的末尾插入新的空白逻辑块对应的表项。
通过维护长度动态变化的映射表,可以方便地记录SSD的逻辑容量的变化情况。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD根据所述SSD中需要增加的空白逻辑块的数量,将所述SSD中的隔离逻辑块更新为空白逻辑块,所述隔离逻辑块为所述SSD中的逻辑地址不能使用的逻辑块。
通过动态更新映射表中的逻辑块的状态,可以方便SSD中的逻辑块的管理。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD从所述控制器接收命令,所述命令包括一段逻辑地址范围,所述命令用于指示将所述一段逻辑地址范围内的有效数据标记为无效数据;所述SSD将所述一段逻辑地址范围内的有效逻辑块转换成隔离逻辑块,其中,所述隔离逻辑块为逻辑地址不能使用的逻辑块。所述命令例如可以是修剪/解映射(trim/unmap)命令。
本方案将逻辑块分成空白逻辑块、有效逻辑块和隔离逻辑块,通过更新和维护SSD中的逻辑块的状态,不仅可以很好地反映SSD中的逻辑块的数据存储情况,而且可以很好地反映SSD的逻辑容量的动态变化情况。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD确定所述一段逻辑地址范围内的数据占用的物理空间的大小;所述SSD从预留空间中选取部分预留空间,所述部分预留空间与所述一段逻辑地址范围内的数据占用的物理空间的大小相等;所述SSD将所述部分预留空间作为所述SSD的空闲的物理空间。
结合第一方面,在第一方面的某些实现方式中,所述SSD中需要增加的空白逻辑块的数量M等于D与L相除的结果向下取整,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述SSD的逻辑块的长度。M可以通过查表的方式获取,也可以在线计算得到。
结合第一方面,在第一方面的某些实现方式中,所述SSD中需要增加的空白逻辑块的数量M等于D与L相除的结果减1,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述SSD的逻辑块的长度。M可以通过查表的方式获取,也可以在线计算得到。
结合第一方面,在第一方面的某些实现方式中,在所述SSD从控制器接收所述写请求之后,所述方法还包括:所述SSD为所述待写入数据分配逻辑地址;所述SSD在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
通过以上映射信息可以直接定位到压缩数据的物理地址,提高了SSD的寻址效率。
结合第一方面,在第一方面的某些实现方式中,在所述SSD从控制器接收所述写请求之后,所述方法还包括:所述SSD为所述待写入数据分配逻辑地址;所述SSD在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息;所述SSD在所述物理页中存储所述压缩数据的元数据,所述元数据包括所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
通过映射表和物理页联合记录数据块的逻辑地址和物理地址的映射关系,可以降低映射表在SSD中所占的内存,节省了SSD的内存空间。
结合第一方面,在第一方面的某些实现方式中,所述写请求包含所述待写入数据的数据长度,所述待写入数据的逻辑地址是基于所述数据长度分配的。
结合第一方面,在第一方面的某些实现方式中,所述SSD存储所述压缩数据之后,所述方法还包括:所述SSD向所述控制器发送所述待写入数据在所述SSD中的逻辑地址。
结合第一方面,在第一方面的某些实现方式中,所述方法还包括:所述SSD从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;所述SSD读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;所述SSD对所述目标数据进行解压缩,得到所述待读取数据;所述SSD向所述控制器发送所述待读取数据。
结合第一方面,在第一方面的某些实现方式中,在所述SSD向所述控制器发送第一反馈信息之前,所述方法还可包括:所述SSD接收所述控制器发送的查询请求消息,所述查询请求用于查询所述SSD的剩余容量;所述SSD向所述控制器发送第一反馈信息,包括:所述SSD向所述控制器发送查询响应消息,所述查询响应消息包括所述第一反馈信息。具体地,所述SSD接收所述控制器发送的查询消息,所述查询消息具体用于查询所述SSD的剩余空白逻辑块的数量;所述SSD向所述控制器发送查询响应消息,所述查询响应消息用于指示所述剩余空白逻辑块的数量。
结合第一方面,在第一方面的某些实现方式中,所述SSD向所述控制器发送第一反馈信息,包括:所述SSD主动向所述控制器发送所述第一反馈信息。具体地,所述SSD可以主动向所述控制器发送所述剩余空白逻辑块的数量。应理解,SSD可以按照一定周期向所述控制器反馈所述剩余空白逻辑块的数量,也可以由事件触发剩余空白逻辑块的上报。
第二方面,提供一种存储装置,所述存储装置包括用于执行第一方面中的方法的模块。
第三方面,提供一种固态硬盘,包括通信接口、存储介质和处理器,所述通信接口用于与控制器进行通信,所述存储介质用于提供存储空间,所述处理器与所述通信接口和所述存储介质相连,通过所述通信接口和所述存储介质执行第一方面中的方法。
第四方面,提供一种计算机可读介质,所述计算机可读介质存储用于固态硬盘执行的程序代码,所述程序代码包括用于执行第一方面中的方法的指令。
在上述某些实现方式中,所述映射表可以用于指示所述SSD的逻辑地址空间。
在上述某些实现方式中,SSD的逻辑块为所述SSD的逻辑地址空间的基本单位。
在上述某些实现方式中,所述SSD确定所述待写入数据的逻辑地址可包括:所述SSD为所述待写入数据中的N个数据块分配N个空白逻辑块,所述空白逻辑块为所述SSD中的逻辑地址空闲的逻辑块,所述N个数据块中的每个数据块的长度与所述SSD的逻辑块的长度相同,N为大于或等于1的整数;所述SSD将所述N个空白逻辑块的逻辑地址作为所述待写入数据的逻辑地址。
现有技术中,SSD的逻辑地址由控制器统一分配和管理。但是,SSD对自身的数据存储和压缩情况最为了解,因此,本实现方式将SSD的逻辑地址的分配和管理功能从控制器下放到SSD中,使得SSD的逻辑地址的分配和管理方式更加合理。
在上述某些实现方式中,所述SSD为所述待写入数据中的N个数据块分配N个空白逻辑块可以包括:所述SSD从SSD的逻辑块中随机选取N个空白逻辑块。
在上述某些实现方式中,所述SSD为所述待写入数据中的N个数据块分配N个空白逻辑块可以包括:所述SSD按照空白逻辑块对应的表项在映射表中的位置,选取位置靠前的N个空白逻辑块。
在上述某些实现方式中,所述SSD可以按照预设的压缩粒度对所述待写入数据进行切分,得到N个数据块,所述压缩粒度等于所述SSD的逻辑块的长度,N为大于1的整数。压缩粒度具体可以指SSD中的数据块的压缩单位,即以多大尺寸为单位进行压缩。
将压缩粒度与逻辑块的长度设置成相等,可以简化SSD内部的实现,方便映射表的管理。
在现有技术中,数据的压缩由控制器执行,且控制器自身建立地址空间来管理SSD的容量,该地址空间是一个定长的地址空间,一旦该地址空间建立完成,该地址空间的大小就不会改变,这样一来,即使SSD能够将数据压缩引起的容量的增加告知控制器,控制器也无法将其利用起来,造成SSD的存储资源的浪费。本发明实施例首先将压缩功能从控制器下移至SSD,这样可以降低控制器的计算压力,其次,将SSD的容量管理功能下放到SSD中,并由SSD向控制器反馈剩余容量,由于SSD能够准确地获得自身的剩余容量,避免了SSD的存储资源的浪费。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是存储系统对主机的写请求的处理流程图。
图2是存储系统对主机的写请求的处理流程图。
图3是本发明实施例的存储系统的示意性结构图。
图4是本发明实施例的映射表的示例图。
图5是本发明实施例的逻辑块的状态转换图。
图6是本发明实施例的逻辑块与物理块的映射示例图。
图7是本发明实施例的定长压缩系统的压缩流程示例图。
图8是本发明实施例的压缩块的组合方式示例图。
图9是本发明实施例的映射信息的存储方式的示例图。
图10是本发明实施例的映射信息的存储方式的示例图。
图11是本发明实施例的物理页结构示例图。
图12是本发明实施例的写请求的处理流程图。
图13是采用定长压缩时步骤1214的实现方式的示意性流程图。
图14是采用变长压缩时步骤1214的实现方式的示意性流程图。
图15是本发明实施例的trim/unmap流程的示例图。
图16是本发明实施例的读请求的处理流程示意图。
图17是本发明实施例的存储装置的示意性结构图。
图18是本发明实施例的存储系统的示意性结构图。
图19是本发明实施例的固态硬盘的示意性结构图。
图20是本发明实施例的存储系统的示意性结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
需要说明的是,本发明实施例中的磁盘(disk)可以指SSD,磁盘阵列可以指SSD阵列。
为了便于理解,先结合图1和图2,简单介绍现有存储系统的数据压缩方式。
图1是存储系统对主机的写请求(或称写IO)的处理流程图。图1的存储系统是基于定长压缩的存储系统。定长压缩可以将数据块压缩成一个或多个固定长度的压缩块。举例说明,假设存储系统的压缩粒度为4KB(即以4KB为单位进行压缩),基于定长压缩的存储系统会将4KB的数据块压缩成0.5KB的整数倍。比如,将4KB的数据块压缩成以下粒度中的一种:0.5KB、1KB、1.5KB、2KB、3KB、3.5KB、4KB(当4KB的数据块压缩后大于3.5KB时,无需对该数据块进行压缩)。具体地,假设4KB的数据块压缩之后的长度位于0.5KB与1KB之间,此时,需要对该数据块进行向上对齐操作,得到1KB的数据块。向上对齐的具体方式可以是在压缩后的数据末尾添加0,将其填充至1KB。应理解,数据块的压缩粒度还可以是8KB、16KB等其它任意粒度,而且每个压缩粒度大小的数据块可以压缩成0.5KB的整数倍、1KB的整数倍等,本发明实施例对此不作具体限定。后文主要以压缩粒度为4KB,将4KB的压缩块压缩为0.5KB、1KB、1.5KB、2KB、3KB、3.5KB、4KB中的一种为例进行举例说明。
102、主机向控制器发送写请求。
写请求可以包括待写入磁盘的数据。控制器也可以称为存储块控制器,可以对提供物理存储空间的磁盘进行管理。如果磁盘组成阵列,控制器也可以称为阵列控制器。
104、控制器按照固定长度对待写入磁盘的数据进行切分。
具体地,可以按照压缩粒度对待写入磁盘的数据进行切分,生成数据块。例如,压缩粒度为4KB,则以4KB为单位对待写入磁盘的数据进行切分。
106、控制器对切分后的数据块进行压缩,并对压缩后的数据进行向上对齐操作。
假设4KB大小的数据块经过压缩形成的压缩数据的长度小于0.5KB,可以对该压缩数据进行向上取整操作,将其填充为0.5KB的压缩块。
108、控制器对压缩块进行凑整,并选择合适的磁盘。
例如,可以将压缩块以物理页的大小(这里以物理页的大小是4KB为例进行说明)为单位进行凑整,每凑整出4KB大小的数据块,就可以生成一个写请求。然后,可以将生成的一个或多个写请求一次性写入选出的磁盘中。也可以再凑整出多个4KB后,一次性写入选出的磁盘。
此外,控制器需要选择用来存储凑整后数据的磁盘,寻找磁盘的策略或方式可以有多种。例如,控制器可以随机从磁盘阵列中选取一个磁盘,只需要保证该磁盘的剩余空间大于待写入磁盘的数据的长度即可。或者,控制器基于磁盘阵列中的各磁盘的当前数据存储量等因素选取一个合适的磁盘,使得各磁盘对数据的存储尽量均衡。
110、控制器向选择的磁盘发送写请求。
该写请求中可以包括:待写入磁盘的数据,以及控制器为写请求中的数据分配的磁盘逻辑地址。
112、数据经过上述步骤处理后最终到达磁盘,磁盘将数据写入磁盘的物理地址中,并向控制器返回写请求成功响应。
114、控制器向主机反馈写请求成功响应。
图2是存储系统对主机的写请求的处理流程图。图2的存储系统是基于变长压缩的存储系统。不同于定长压缩,变长压缩可以不必要求将数据块压缩成固定长度。仍以压缩粒度为4KB为例,假设4KB的数据块压缩后的长度为2778B,那么无需对该2778B的数据块进行调整,即压缩出来多少就是多少。图2的步骤202至214与图1的步骤102至114基本类似,为避免重复,此处不再详述。二者的主要区别在于步骤206对数据块进行变长压缩,而步骤106对数据块进行定长压缩。
图1和图2均描述的是写请求的处理流程。当主机需要从磁盘中读取数据时,主机会向控制器发送读请求。控制器在接收到读请求之后,会先从磁盘中获取数据,然后对数据进行解压缩,再将解压后的数据返给主机。读请求的处理流程为写请求的逆过程,为避免重复,此处不再详述。
基于上文的描述可以看出,现有技术中的压缩解压功能主要由控制器实现。随着存储系统的数据处理规模越来越大,压缩解压功能需要耗费控制器的大量的计算资源,导致控制器处理写请求的时延较长,进而导致存储系统的整体性能下降。
随着技术的发展,SSD成为磁盘阵列主要采用的存储介质之一。SSD与传统硬盘驱动器(Hard Disk Drive,HDD)的不同点之一,是SSD包含具有数据处理能力的处理器。在现有技术中,SSD的处理器主要用于执行块管理、垃圾回收、磨损均衡以及逻辑地址与物理地址之间的转换等简单的功能。而随着技术的发展,SSD内部的处理器的处理能力越来越强大,仅将SSD用于执行上述功能,无法充分发挥SSD处理器的处理能力。因此,为了充分利用SSD中的处理器的处理能力,并降低控制器的负担,可以将数据的压缩和解压功能下移至SSD中。因此,在本发明实施例中,数据的压缩和解压功能均可由SSD实现。下面结合图3,详细描述本发明实施例的存储系统的组成结构,以及存储系统中的各组成部分的功能。
图3是本发明实施例的存储系统的示意性结构图。图3的存储系统包括主机(host)310、控制器320以及SSD 330。从图3可以看出,控制器320位于主机310和SSD 330之间,作为桥梁,实现主机310与SSD 330的数据交互。
具体地,控制器320可以包括中央处理单元(Central Processing Unit,CPU)(或者其他拥有运算能力的芯片,例如现场可编程门阵列(Field Programmable Gate Array,FPGA)),高速缓存(Cache)等器件。图3中的控制器320是与主机分离,但本发明实施例不限于此,控制器320可以是独立的硬件设备,也可以是集成在主机310中的软件模块。此外,控制器320可以与一个或多个SSD相连。
继续参见图3,SSD可以包括闪存颗粒(闪存颗粒为SSD中的存储介质)。SSD(可以是SSD中的处理器)可以包括块管理单元,用于对SSD中的块进行管理,其中,块(block)是SSD的基本擦除单位。例如,SSD通过块管理单元维护SSD中的块的标识,对经过垃圾回收后的块进行擦除,对SSD中的坏块进行记录和替换等。SSD还可包括逻辑地址-物理地址转换单元,用于实现SSD内部数据的寻址。垃圾回收单元,用于对SSD中的无效数据进行垃圾回收,例如,将块中的有效数据搬移至其他块中。磨损均衡单元,用于控制SSD中的块的擦写次数,使得SSD中各块的磨损程度(即擦写次数)尽量均等。
进一步地,为了在SSD中实现数据的压缩解压功能,可以在SSD中添加压缩解压单元。具体地,当SSD收到控制器的写请求时,可以先对写请求中的待写入数据进行压缩,然后将压缩数据写入SSD的闪存颗粒中;当SSD收到控制器的读请求时,可以从SSD的闪存颗粒中读取数据,然后对该读出的数据进行解压缩,并向控制器返回解压后的数据。
SSD对数据的压缩伴随着SSD的逻辑容量的改变。具体而言,假设控制器获知SSD的逻辑容量为400GB,但SSD内部按照4:1的压缩比对接收到的400GB的数据进行了压缩,得到100GB的压缩数据。如果控制器无法获知磁盘此时仍能存取300GB的数据,即磁盘此时仍有300GB的逻辑容量,则会造成SSD资源的浪费。下面详细解释这一问题产生的原因。
首先,为了更好地进行说明,先介绍SSD相关的三种容量:介质容量、物理容量和逻辑容量。
介质容量:SSD的闪存颗粒的总容量。比如对外标称400GB的SSD,其闪存颗粒的容量一般大于400GB,例如可以是512GB。也就是说,512GB的介质容量中,有112GB的预留空间(Over Provisioning,OP),或称冗余空间,预留空间用于提高SSD的可靠性,通常无法被用户使用。当然,不同厂家设计SSD时采用的冗余比不一样,使得SSD的预留空间的大小也有所变化。预留空间可供坏块替换以及垃圾回收时数据的腾挪使用。
物理容量:SSD对外标称的可用容量的大小。相当于SSD中可被用户用于存储数据的存储介质的容量。比如对外标称400GB的SSD,对应的物理容量就是400GB。不论SSD是否在存储数据前对数据进行压缩,SSD的物理容量不变。
逻辑容量:SSD实际能够存放的数据的总量。或者说是SSD可用于存储数据的容量。如果SSD不对数据进行压缩,逻辑容量与物理容量一般相等;如果SSD对数据进行压缩后再存储,SSD的逻辑容量等于SSD的空闲的物理空间的容量与SSD中的已存储数据在压缩前的数据量之和。因此逻辑容量是动态变化的。比如,物理容量为400GB的SSD,如果其实际存放的压缩数据的大小为400GB,而这些数据在压缩前的大小为1200GB,则该SSD的逻辑容量为1200GB。逻辑容量与保存到该盘的数据的压缩比相关,会随着存入数据的不同而动态地变化。
为了便于理解,下面分别以定长压缩和变长压缩为例,介绍SSD的逻辑容量的变化量的计算方式。
假设SSD对外标称的物理容量为400GB,那么该SSD的初始逻辑容量就等于400GB。仍以压缩粒度为4KB为例,针对4KB的数据块的压缩情况,SSD的逻辑容量增量的计算方式可以分为以下几种:
1、4KB的数据块压缩为0.5KB的压缩块:SSD的逻辑容量增加4KB-0.5KB=3.5KB;
2、4KB的数据块压缩为1KB的压缩块:SSD的逻辑容量增加4KB-1KB=3KB;
3、4KB的数据块压缩为1.5KB的压缩块:SSD的逻辑容量增加4KB-1.5KB=2.5KB;
4、4KB的数据块压缩为2KB的压缩块:SSD的逻辑容量增加4KB-2KB=2KB;
5、4KB的数据块压缩为2.5KB的压缩块:SSD的逻辑容量增加4KB-2.5KB=1.5KB;
6、4KB的数据块压缩为3KB的压缩块:SSD的逻辑容量增加4KB-3KB=1KB;
7、4KB的数据块压缩为3.5KB的压缩块:SSD的逻辑容量增加4KB-3.5KB=0.5KB。
下面给出计算SSD的逻辑容量增量的一个具体的例子:
假设有4M个4KB大小的数据块,这些数据块的总长度为16GB:
假设这些数据块中共有1M个数据块被压缩为2KB大小,则SSD的逻辑容量增加:1M*(4KB-2KB)=2GB;
假设这些数据块中总共有1M个数据块被压缩为1.5KB,则SSD的逻辑容量增加:1M*(4KB-1.5KB)=2.5GB;
假设这些数据块中总共有1M个数据块被压缩为1KB,则SSD的逻辑容量增加:1M*(4KB-1KB)=3GB;
假设这些数据块中总共有1M个数据块被压缩为0.5KB,则SSD的逻辑容量增加:1M*(4KB-0.5KB)=3.5GB;
综上,累计往SSD中保存16GB的数据,因为压缩的存在,该16GB的数据实际占用的物理容量为2GB+1.5GB+1GB+0.5GB=5GB,这时该SSD的逻辑容量增加了2GB+2.5GB+3GB+3.5GB=11GB,变为411GB。
在变长压缩中,4KB的数据块经过压缩后的大小可能为:2778B、1678B、2012B、1212B等长度不定的压缩块。那么针对4KB的数据块的压缩情况,下面给出SSD的逻辑容量增量的计算方式的示例:
1、4KB的数据块压缩为2778B的压缩块:SSD的逻辑容量增加4096B-2778B=1318B;
2、4KB的数据块压缩为1678B的压缩块:SSD的逻辑容量增加4096B-1678B=2418B;
3、4KB的数据块压缩为2012B的压缩块:SSD的逻辑容量增加4096B-2012B=2084B;
4、4KB的数据块压缩为1212B的压缩块:SSD的逻辑容量增加4096B-1212B=2884B。
由上可知,无论是定长压缩还是变长压缩,SSD的逻辑容量是随着数据块的压缩情况而动态变化的。当然,除了数据的压缩,trim/unmap操作也会改变SSD的逻辑容量,后文会在trim/unmap操作进行详细介绍。
综上,SSD的逻辑容量是随着数据的压缩情况而动态变化的。如果控制器无法获知SSD的逻辑容量的动态变化情况,如果逻辑容量增加无法被控制器感知,仍像现有技术那样认为SSD的逻辑容量始终保持不变,就无法充分利用压缩后节省出的存储空间,会造成SSD的存储空间的浪费。因此,如何设计一套控制器和SSD相互配合的方案,使得SSD能够检测和管理动态变化的逻辑容量,并将SSD的逻辑容量的动态变化情况呈现给控制器,是将压缩解压功能下移至SSD时所需考虑的问题。
为了解决上述问题,可以在SSD中加入变长映射表管理单元331和逻辑块状态管理单元332(参见图3),并在控制器中加入SSD逻辑地址管理单元321。下面对这些单元的功能进行详细介绍。
变长映射表管理单元331可用于管理和维护SSD的映射表。映射表反映的是SSD的逻辑地址空间,映射表包括一个或多个表项(或称条目),每个表项对应该逻辑地址空间中的一段逻辑地址范围。映射表的每个表项对应的逻辑地址范围即为映射表的基本粒度,例如,假设每个表项对应4KB的逻辑地址范围,则映射表的基本粒度为4KB。通常,每个表项对应一个逻辑块,该每个表项对应的逻辑地址范围称为逻辑块地址(Logical BlockAddress,LBA)。此外,映射表可用于实现LBA到物理块地址(Physical Block Address,PBA)的映射,通过映射表记录的映射关系,可以实现数据的寻址。本发明实施例中,SSD的映射表的长度可以随着SSD的逻辑容量的改变而动态改变。
进一步地,通过映射表可以屏蔽掉SSD内的压缩和解压过程。具体地,SSD的映射表反映的是数据在SSD的逻辑地址空间的存储情况,而数据的原始尺寸(未经过压缩的尺寸)是多大,就会占用多大的逻辑地址空间,即数据在逻辑地址空间的存储不存在压缩现象,相当于通过映射表将SSD对数据的压缩过程进行了屏蔽。
此外,映射表的基本粒度可以与压缩粒度保持一致。映射表可以位于SSD内的内存中。
继续参见图3,逻辑块状态管理单元332可用于管理和维护SSD中的逻辑块的状态。具体而言,SSD可以包括三种状态的逻辑块:空白逻辑块(或称空白块)、有效逻辑块(或称有效块)和隔离逻辑块(或称隔离块)。应理解,空白逻辑块可以指逻辑地址空闲的逻辑块。空白逻辑块的数量可以反映SSD的剩余逻辑容量的多少;或者,空白逻辑块的数量可以反映SSD的剩余的可用空间的多少。此外,空白逻辑块的数量可以随着SSD的逻辑容量的改变而动态改变,因此,可以将空白逻辑块的数量的动态变化情况作为SSD的逻辑容量的动态变化情况的度量。有效逻辑块可以指:逻辑地址存储了有效数据的逻辑块,有效数据可以指未被trim/unmap的数据。隔离逻辑块可以指:逻辑地址被不可用的逻辑块,例如,逻辑地址被无效数据占用的逻辑块,该无效数据例如可以是通过trim/unmap操作而被标记为无效的数据。
具体地,SSD的映射表可以采用如图4所示形式展示SSD的一维逻辑地址空间。图4中的一个方框代表映射表的一个基本粒度,该基本粒度的大小可以是:4KB/8KB/16KB/32KB/64KB等。映射表呈现的一维逻辑地址空间可以是变长的,即可以动态增加或减少的。此外,映射表可以包括隔离逻辑块,隔离逻辑块在图4中以斜纹标识。该隔离逻辑块对应的逻辑地址范围内的数据是无效数据,该隔离逻辑块对应的逻辑地址暂时不能使用。
SSD的逻辑块的状态可以在上文描述的三种状态之间进行转换,下面结合图5,详细描述SSD的逻辑块的状态转换过程。
首先,当逻辑块对应的逻辑地址未被使用时,该逻辑块即为空白逻辑块。空白逻辑块的逻辑地址如果用于存储有效数据,该空白逻辑块就会转换成有效逻辑块。
接着,有效逻辑块会因为trim/unmap操作(对trim/unmap操作的详细介绍参见后文中的trim/unmap流程)从有效逻辑块转变为隔离逻辑块。考虑这样一种场景:先向SSD中写入一批压缩比为4的数据,然后向SSD中写一批无法压缩的数据。假设SSD的物理容量为400GB,在向SSD写入压缩比为4的数据时,SSD实际能够保存1600GB的数据。这时该SSD的逻辑容量将从400GB扩展到1600GB。此时,映射表反映的逻辑地址空间为1600GB。然后,对SSD中的数据进行更新,向SSD中存入不可压缩的400GB数据。此时,该SSD实际只能保存400GB的数据。在这种情况下,该SSD对应的逻辑容量又会从1600GB缩小为400GB。在逻辑容量收缩的过程中,必然导致部分的逻辑地址空间变为无效,就会在逻辑地址空间上就产生隔离逻辑块。
接着,随着SSD的逻辑容量的增加,隔离逻辑块又可以重新更新为空白逻辑块。具体地,当SSD的逻辑容量增加时,SSD的逻辑地址范围就会增加,相应地,SSD内的空白逻辑块的数量就会增加。此时,可以优先考虑将映射表中的隔离逻辑块更新为空白逻辑块;在映射表中的隔离逻辑块已全部更新为空白逻辑块的情况下,可以在映射表的尾部添加新的空白逻辑块对应的表项,也就增加了新的空白逻辑块。
映射表可以记录SSD的逻辑地址到物理地址的映射关系。该映射关系具体可以体现在逻辑块的逻辑地址与物理块的物理地址之间的映射关系。SSD内的物理块的大小可以按需设置,比如物理块可以包括:1/4个物理页、1/2个物理页、1个物理页、多个物理页、1个块(block)、多个块等。逻辑块到物理块的映射关系可以是多个逻辑块映射到一个物理块,即多对一的映射关系。应理解,SSD可以按物理块的大小对SSD的物理地址范围进行划分,得到一个或多个物理块,图6展现了其中一个物理块。参见图6,不管SSD支持的是定长压缩还是变长压缩,每一逻辑块都可以对应到一个物理块,而每个物理块内可以存储多个压缩块。
映射表中的映射信息可以指示压缩块在物理块中的存储位置。映射信息的具体形式可以有多种,例如,映射信息可以包括:存储压缩块的物理页的信息(如物理页的标识或编号)+压缩块在物理页的起始位置+压缩块的长度等信息。通过这样的指示方式,可以很快定位到压缩块,寻址效率高。可选地,映射信息可以包括存储压缩块的物理页的信息,而压缩块在物理页的起始位置以及压缩块的长度可以作为元数据,存储在该物理页中,例如,可以存储在该物理页的头部。因为映射表一般存在SSD的内存空间中,映射信息如果仅存物理页信息,可以减少映射表的长度,节省SSD的内存空间。无论SSD支持的是变长压缩还是定长压缩,SSD中的映射信息均可以采用上述实现方式的一种或多种,本发明实施例对此不作具体限定,后文会结合具体的例子详细进行描述。
继续参见图3,控制器中的SSD逻辑地址管理单元321可用于监控或查询SSD的剩余逻辑容量,或者SSD的逻辑容量的变化情况。具体地,SSD逻辑地址管理单元321可以通过监控或查询SSD中的空白逻辑块的数量,获知SSD的逻辑容量的变化情况。控制器监控或查询SSD中的空白逻辑块数量的方式可以有多种,下面给出几种可选的方案,实际中,可以选用下面方案中的一种或多种。
方案1:控制器实时检测SSD中的空白逻辑块的数量。具体地,当控制器检测到其记录的某个SSD中的空白逻辑块的数量(应理解,这里是指控制器记录的该SSD的剩余空白逻辑块的数量,该数量与该SSD实际剩余的空白逻辑块的数量可能不相等)小于某个设定的阈值(比如100)时,就主动向SSD查询空白逻辑块的个数。例如,通过上次查询,控制器获知某个SSD包括500个空白逻辑块,在后续数据写入的过程中,控制器可以一直更新其记录的该SSD的剩余的空白逻辑块的数量。当控制器发现其记录的该SSD的剩余空白逻辑块数量小于100时,可以主动向该SSD查询该SSD实际剩余的空白逻辑块的数量。
方案2:控制器根据trim/unmap的区域对应的数据量的大小,确定是否查询SSD中的空白逻辑块的个数。例如,控制器记录trim/unmap的数据量,每trim/unmap的数据量达到1GB之后,控制器就去主动查询SSD中的空白逻辑块的数量。
方案3:控制器根据写入SSD的数据量,确定是否查询SSD中的空白逻辑块的个数。例如,控制器每向SSD写入1GB的数据量之后,就主动查询SSD中的空白逻辑块的数量。
方案4:SSD主动上报空白逻辑块的数量。例如,SSD可以周期性上报SSD的空白逻辑块的数量;或者,当空白逻辑块的数量的变化超过某一阈值时,SSD向控制器上报当前的空白逻辑块的数量。
下面分别以定长压缩和变长压缩为例,详细描述SSD内部的压缩过程的实现方式。
定长压缩实现方式
先结合图7,介绍定长压缩系统的压缩处理流程。如图7所示,虚线以上是系统,包括控制器;虚线以下是磁盘,包括一个或多个SSD。图7仍以压缩粒度为4KB进行举例说明,实际中还可以采用其它压缩粒度,比如8KB、16KB等,本发明实施例对此不作具体限定。
具体地,控制器可以先从主机接收需要下盘的数据,然后将这些数据进行重删(即重复数据删除,具体的重删方式可以参照现有技术)。接着,控制器不对重删后的数据进行压缩处理,直接将重删后的数据发送到SSD,由SSD进行压缩处理。SSD以4KB为单位对数据进行压缩,压缩后的数据大小会随着数据的压缩比的不同而不同。由于SSD采用的是定长压缩方式,压缩后的数据需要执行向上对齐操作,使其长度为0.5KB的整数倍。比如,压缩后的数据的尺寸介于0.5KB和1KB之间,根据向上对齐的原则,该压缩后的数据需要填充至1KB,得到1KB的压缩块。
接下来需要将压缩块写入SSD的物理地址中。应理解,SSD一般以物理页为基本的读写单位,物理页的大小与SSD的类型有关,本发明实施例对此不作具体限定,本发明实施例以4KB大小的物理页为例进行说明。在向物理页写入数据前,可以对压缩块以4KB为单位进行凑整(或称重组),将压缩块凑整为4KB大小,这样可以很方便地将凑整后的一组压缩块一次性写入4KB大小的物理页中。图8给出了一些压缩块的组合方式。下面再给出一些将多个压缩块凑整到一个物理页的可选实现方式:
2个压缩块凑整到一个物理页:
(0.5KB,3.5KB)、(1KB,3KB)、(1.5KB,2.5KB)、(2KB,2KB)。
3个压缩块凑整到一个物理页:
(1KB,1KB,2KB)、(0.5KB,1.5KB,2KB)、(0.5KB,1KB,2.5KB)、(0.5KB,0.5KB,3KB)。
4个压缩块凑整到一个物理页:
(0.5KB,0.5KB,1.5KB,1.5KB)、(0.5KB,1KB,0.5KB,2KB)、(0.5KB,1.5KB,1KB,1KB)、(0.5KB,2.5KB,0.5KB,0.5KB)。
对于从控制器接收到的数据,SSD除了要以压缩粒度对齐进行压缩,还需要为该数据分配其在SSD中的逻辑地址,并记录该数据的逻辑地址和物理地址的映射关系。
具体地,可以在映射表的表项中记录映射信息,SSD通过该映射信息可以直接将数据的逻辑地址转换成物理地址,对数据进行寻址,参见图9。映射信息可以包括:物理页的信息、压缩块在物理页内的起始地址以及压缩块的长度。
需要说明的是,物理页的信息可以是物理页的编号。物理页可以具有全局唯一的编号;或者,物理块具有全局唯一的编号,而物理页的编号在物理块内唯一。
如果映射表表项中记录的映射信息包括以上三种信息,那么对于4KB大小的物理页,介质容量为512GB的SSD大约需要34比特(bit)来记录一条映射信息,具体分析如下。
针对4KB的物理页,由于512GB对应128M个4KB,大约需要28比特来寻址某一物理页。
针对压缩块在物理页的起始地址,由于在定长压缩实现方式中,压缩块的起始地址会按0.5KB进行边界对齐,因此,压缩块在物理页的起始地址存在8种可能,即0、0.5KB、1KB、1.5KB、2KB、2.5KB、3KB、3.5KB对应的起始地址。此时,通过3比特就能表示压缩块在物理页内的起始地址的所有可能。
针对压缩块的长度,由于压缩块均为0.5KB的整数倍,压缩块的长度存在8种可能,即0.5KB、1KB、1.5KB、2KB、2.5KB、3KB、3.5KB、4KB。因此,通过3比特就能表示压缩块长度的所有可能。
由上可知,定位到某一个压缩块(例如0.5KB或1.5KB的压缩块),约需要34比特的映射信息。需要说明的是,根据SSD的容量和/或压缩粒度的不同,一条映射信息所需的比特数也会有所不同,本发明实施例对此不作具体限定。
变长压缩实现方式
在变长压缩中,压缩后的数据无需进行向上对齐操作,维持压缩块的尺寸不变即可,不进行向上对齐。仍以4KB为例,假设4KB的数据块压缩出的数据大小为2778B、3600B,那么压缩块的长度就维持在2778B、3600B即可。
参见图10,假设物理页的长度是16KB,可以将经过变长压缩得到的大小不一的压缩块依次放入物理页中,直到无法放下下一个完整的压缩块为止。物理页的末尾可能会存在无法被利用的部分存储空间,这部分存储空间太小,无法容纳一个完整压缩块。可以将该无法被利用的部分存储空间称为碎片(fragment),碎片中可以不存有效数据。
假设映射表的基本粒度是4KB,物理页的大小是16KB,4KB的数据块的逻辑地址与物理地址的映射关系可以采用以下三种方案中的任一种记录在SSD中。
方案一:映射表中的映射信息包含存储压缩块的物理页的信息。在该物理页的头部保存元数据,该元数据指示压缩块在物理页的起始地址以及压缩块的长度。在读取该压缩块时,可以先根据映射表中保存的映射信息,找到对应的物理页;然后将该物理页中的数据整体读出,并从其头部信息中查找该压缩块在物理页内的起始地址和长度。具体地,在物理页的头部信息中可能保存了多个压缩块的元数据,为了方便查找某个压缩块的元数据,可以在物理页的头部信息中建立该4KB的数据块的LBA与元数据的对应关系,此时SSD就可以根据数据块的LBA,查找压缩块对应的元数据。
方案二:方案二与方案一类似,也是将压缩块的物理页信息保存在映射表中,将压缩块的元数据保存在物理页中。不同之处在于,映射表中除了保存压缩块的物理页的信息,还额外保存索引信息,该索引信息可以描述该压缩块在该物理页存储的全部压缩块中的排序。这样,在查找该物理页的元数据时,就无需像方案一那样通过查找复杂的LBA定位该压缩块的元数据,而是按照该索引信息定位该元数据即可,降低了元数据的数据量,节省了物理页的存储空间。
方案三:映射表中的映射信息包含存储压缩块的物理页的信息、压缩块在物理页内的起始地址以及压缩块的长度。这种方案无需在物理页中存储元数据,简化了物理页的实现方式,同时省去了根据映射信息查找元数据的过程,提高了物理地址的寻址效率。
下面结合图11,对上述方案一进行详细描述。参见图11,物理页被划分为3个区域,最上边的是物理页的头部区域,用于保存头部信息;中间区域为数据保存区域,存储有多个压缩块;最下边是碎片区域。下面分别进行描述。
一、头部区域
在物理页的头部区域存放有头部信息,该头部信息包括物理页中存储的压缩块的元数据。元数据的格式可以是:逻辑LBA+物理页的起始地址+压缩块的长度。当然,如果映射表中已有的索引信息,元数据的格式可以是:索引信息+物理页的起始地址+压缩块的长度。此外,映射信息还可以保存到SSD的预留空间里面,这样可以节省物理页的存储空间。
二、数据保存区域
数据保存区域用于存储压缩块,这些压缩块在物理页中可以紧凑的存储在一起。
三、碎片区域
未被利用存储区域,其长度较小,无法完整地存储一个压缩块,所以只能遗留下来。
上文描述了定长压缩和变长压缩的实现方式。下面结合图12,详细描述在SSD内实现数据压缩时的写请求处理流程。
图12是本发明实施例的写请求的处理流程图。应理解,图12示出的步骤或操作仅是示例,本发明实施例还可以执行其它操作或者图12中的各种操作的变形。此外,图12中的各个步骤可以按照与图12呈现的不同的顺序来执行,并且有可能并非要执行图12中的全部操作。
1202、主机向控制器发送写请求。
具体地,该写请求中可以包含如下信息:LUN_ID+LBA+LEN+DATA。DATA表示待写入的数据;LUN_ID是指逻辑单元号(Logical Unit Number,LUN)的编号;这里的LBA表示的是DATA在LUN上的逻辑地址,并非SSD的逻辑地址,LUN的逻辑地址一般指呈现给主机的磁盘阵列的LBA;LEN表示数据的长度,DATA是待写入的数据。应理解,系统定义的LBA和LEN一般以扇区为基本单位,一个扇区的大小通常是0.5KB。假设LEN为10,可以理解为DATA的长度为10*0.5KB=5KB。当然,每个扇区还可以采用其他大小格式,本发明实施例对此不作具体限定,这里是以扇区大小为0.5KB为例进行举例说明。
1204、控制器对待写入的数据进行边界对齐处理,并按照固定大小对边界对齐处理后的数据进行切分。这是一个可选的步骤。
控制器对DATA进行边界对齐处理是为了方便后续的数据切分,使得控制器按照固定大小对数据进行切分时,能够切分出整数个数据块。
控制器对数据的切分方式可以有多种,下面给出两种可选的切分方式。
切分方式1:控制器按SSD的压缩粒度进行切分,使得切分后的每个数据块为一个可压缩单位。例如,假设SSD的压缩粒度为4KB,待写入的数据的LEN为10(即5KB)。此时,控制器可以先对5KB的数据进行边界对齐处理,得到8KB的数据,然后将8KB的数据以4KB为粒度进行切分,得到2个4KB的数据块。控制器对5KB的数据进行边界处理的方式例如可以是:控制器从SSD中读取出3KB的数据,与5KB的数据合并得到8KB的数据。
切分方式2:控制器基于SSD一次性能够处理的写数据的最大单位进行切分,比如SSD一次性能够处理的写数据的最大单位是128KB,那么这里可以按照128KB进行切分。这种处理方式简化了控制器的操作,后续SSD会将这128KB的数据继续按照压缩粒度进行切分,例如由SSD的处理器把128KB的数据切分成32个4K为数据块。
需要说明的是,对数据切分之后,控制器可以以切分后的数据块为单位,向SSD发送写请求。此时,可以基于切分前的完整数据的LUN_ID+LBA+LEN+DATA等参数,确定切分后的每个数据块的LUN_ID+LBA+LEN+DATA等参数。
1206、控制器从磁盘阵列中选取用于存储切分后的数据块的SSD。
控制器选取SSD的策略可以有多种,例如可以基于SSD之间的磨损均衡、容错处理、冗余关系等,选择一个合适的SSD。需要说明的是,在选择SSD时,首先要保证该SSD存在足够的空白逻辑块。磁盘阵列中的SSD的空白逻辑块的数量是随着SSD的逻辑容量的改变而动态变化的,控制器可以按照上文中描述的空白逻辑块查询方案查询SSD内的空白逻辑块的个数。
1208、控制器向SSD发送切分后的每个数据块对应的写请求。
写请求中可以携带切分后的数据块的LEN+DATA信息,LEN指该写请求中的数据的长度,DATA指该写请求中的数据内容(或称作数据本身,也就是数据块)。应理解,这里可以无需指定该写请求中的数据要写入SSD的哪个位置,即该数据在SSD的实际存储位置可以由SSD自主决定。
1210、SSD对写请求中的数据进行切分处理。
应理解,步骤1210为可选的步骤。如果控制器在步骤1204中是按照压缩粒度对数据进行切分的,SSD接收到的写请求中的数据的大小就是一个基本的压缩单位,可以直接执行后续操作,无需再次切分。如果控制器在步骤1204中是按照压缩粒度的N倍对数据进行切分的,SSD接收到的数据就是压缩粒度的N倍,可以通过步骤1210将其按照压缩粒度进行切分,得到N个数据块。特殊情况下,如果SSD收到的数据块不是压缩单位的整数倍,可以由SSD先把数据块补齐为压缩单位的整数倍以后,再按照压缩单位的大小进行切分。
1212、SSD为切分后的数据块分配空白逻辑块。
SSD可以查询SSD内的逻辑块的状态,从中选取用于存储数据块的空白逻辑块。空白逻辑块的选取方式可以有多种,例如,可以从SSD中随机选取空白逻辑块,也可以按照空白逻辑块在映射表中的顺序优先选取逻辑地址靠前的空白逻辑块,本发明实施例对此不作具体限定。
逻辑块的状态可以通过bitmap指示。该bitmap可以存储在SSD的内存中。在将数据块存入空白逻辑块之后,可以更改空白逻辑块的状态,使得空白逻辑块转换为有效逻辑块。
1214、SSD对切分后的数据块进行压缩,将压缩块写入SSD,并在映射表中记录映射信息。
支持定长压缩的SSD与支持变长压缩的SSD对步骤1214的执行方式可以有所不同,后文会结合图13和图14分别进行描述。
1216、SSD根据逻辑容量的变化,调整逻辑块的状态。
具体而言,可以每增加一个逻辑块大小的逻辑容量,就将一个隔离逻辑块转化为空白逻辑块。该隔离逻辑块可以是从SSD的全部隔离块中随机选取的隔离逻辑块;或者,该隔离逻辑块也可以SSD的全部隔离块中的逻辑地址靠前的隔离逻辑块。如果SSD中不存在隔离逻辑块,则可以在映射表的尾部添加一个空白逻辑块对应的表项,相当于在SSD中增加了一个空白逻辑块。
对逻辑块的状态调整完成之后,可以将SSD的当前空白逻辑块的数量发送至控制器,以指示SSD的剩余逻辑容量。举例说明,假设SSD当前有1000个空白逻辑块(每个空白逻辑块对应4KB的实际物理空间,合计1000*4KB的实际可用的逻辑空间)。当控制器查询SSD中包含的空白逻辑块数量时,SSD会返给控制器查询结果:当前有1000个空白逻辑块。于是控制器可以往SSD写入了1000个4KB的数据块。假设在控制器往SSD中写入的这1000个数据块中,有500个能够压缩为2KB,另外500个能够压缩为1KB。原本需要消耗1000个空白逻辑块才能够存储这些数据块,因为压缩的参与,现在仅消耗(500*2+500*1)/4=375个空白逻辑块。也就是说,仅消耗375个空白逻辑块,就保存了1000个4KB大小的数据块。然后,当控制器再次查询该SSD还有多少空白逻辑块可用时,SSD会返回查询结果:当前具有1000-375=625个空白逻辑块可用。
1218、SSD向控制器发送写请求的响应消息。
写请求中的数据块写入SSD后,SSD发送响应消息给控制器,可以在该响应消息中携带该数据块在SSD中的逻辑地址,如LBA。响应消息的具体形式与步骤1204中描述的切分方式有关。
如果控制器在步骤1204中是按照压缩粒度对数据进行切分的,SSD就无需对数据进行继续切分,可以直接为写请求中的数据分配逻辑地址,并对该数据进行压缩和存储操作。上述写请求的响应消息可以采用普通的写完成命令,携带一个数据块对应的LBA即可。
如果控制器在步骤1204中是按照更大的粒度对数据进行切分的,步骤1218的响应消息需要携带切分生成的多个数据块对应的LBA。在这种情况下,可以定义新的写完成命令。该新的写完成命令需要比普通的写完成命令的数据量大一些。比如普通的写完成命令为16字节,新定义的写完成命令可以为32/64/128字节,这样可以容纳更多的LBA。需要说明的是,如果需要写完成命令带回多个LBA,该多个LBA在写完成命令中的先后顺序可以与该多个LBA对应的数据块之间的先后顺序保持一致,这样就无需消耗额外的字节指示该多个LBA分别是写请求中的哪部分数据的LBA。
1220、控制器建立磁盘阵列的LBA与SSD中的LBA之间的映射关系。
控制器在步骤1202接收到主机发送的写请求,该写请求中携带的是LUN_ID以及磁盘阵列的LBA;控制器在步骤1218接收到的写完成命令包含的是SSD的LBA。控制器建立二者之间的映射关系。
例如,存储控制器根据步骤1202中接收到的写请求,在LUN_ID为0的LUN设备中,以LBA=0作为起始位置,连续写入2个大小为4KB的数据块。由于系统定义的LBA和LEN一般以扇区为基本单位,一个扇区的大小通常是0.5KB,那么4KB的数据块的LEN为8。这样,第1个数据块在磁盘阵列的逻辑地址可以表示为(LUN_ID=0,LBA=0,LEN=8);第2个数据块在磁盘阵列的逻辑地址可以表示为(LUN_ID=0,LBA=8,LEN=8)。假设第1个数据块被写入ID为2的SSD的第2个逻辑块中,第2个数据块被写入ID为3的SSD的第3个逻辑块中,则第1个数据块在SSD的逻辑地址可以表示为(SSD_ID=2,LBA=8,LEN=8),第2个数据块在SSD的逻辑地址可以表示为(SSD_ID=3,LBA=16,LEN=8),则控制器可以建立下表所示的映射关系:
LUN_ID、LBA、LEN | SSD(SSD_ID、LBA、LEN) |
0、0、8 | 2、8、8 |
0、8、8 | 3、16、8 |
控制器可以记录二者之间的映射关系,以便后续的数据读取。具体地,当主机需要读取之前写入SSD的数据,控制器会基于记录的映射关系表将主机的读请求转换为对SSD的读请求,并将对应的数据返回给主机。比如,主机要读取LUN_ID为0的第2个4KB的数据,也即是上面表格的第二行。控制器就会基于上表所示的映射关系,找到该数据存储于ID为3的SSD的LBA 16的位置;接着,控制器就可以向ID为3的SSD发送读请求,读取位于LBA 16位置上的数据,并将读出的数据返给主机。
1222、控制器向主机发送写请求命令执行成功消息。
图13是采用定长压缩时步骤1214的实现方式的示意性流程图。应理解,图13示出的步骤或操作仅是示例,本发明实施例还可以执行其它操作或者图13中的各种操作的变形。此外,图13中的各个步骤可以按照与图13呈现的不同的顺序来执行,并且有可能并非要执行图13中的全部操作。
1302、对数据块进行压缩,并执行向上对齐操作。
例如,数据块的压缩粒度为4KB,定长压缩要求将数据压缩为0.5KB的整数倍。对数据块进行压缩后,如果压缩后的数据在1.5KB至2KB之间,那么执行向上对齐操作,得到2KB大小的压缩块。
1304、将压缩块凑整到一个物理页中。
上文对压缩块的凑整方式有详细描述,详见图8,此处不再赘述。由于采用的是定长压缩,多个压缩块可以填满一个物理页,不会产生碎片。
1306、将凑整后的压缩块写入SSD的介质中。
例如,当压缩块凑满一个物理页后,就将这些压缩块写入SSD的介质中。写成功后,更新这些压缩块在映射表中的映射信息,将逻辑地址对应的物理地址记录到映射表中。需要说明的是,本发明实施例不限于此,也可以将所有压缩块处理完之后,一次性写入SSD的介质中。
1308、计算逻辑容量的变化情况。
例如,可以每完成一个数据块的压缩,就计算一次逻辑容量的变化;也可以将所有数据压缩完成之后,再计算逻辑容量的变化,本发明实施例对此不作具体限定。上文对逻辑容量的变化的具体计算方式有详细描述,此处不再赘述。
图14是采用变长压缩时步骤1214的实现方式的示意性流程图。应理解,图14示出的步骤或操作仅是示例,本发明实施例还可以执行其它操作或者图14中的各种操作的变形。此外,图14中的各个步骤可以按照与图14呈现的不同的顺序来执行,并且有可能并非要执行图14中的全部操作。
1402、对数据块进行压缩,得到压缩块。
由于是变长压缩,这里无需对数据进行向上对齐操作,保持压缩压缩块大小不变即可。
1404、将压缩块凑整到一个物理页中。
例如,可以将变长的压缩块首尾相连,凑整到一个物理页中,最后剩余出的无法继续容纳一个完整压缩块的区域可以作为碎片,不存储有效数据。
1406、将凑整后的压缩块按照方案一的方式写入SSD的介质中。
方案一:映射表中的映射信息包含存储压缩块的物理页的信息。在该物理页的头部保存元数据,该元数据指示压缩块在物理页的起始地址以及压缩块的长度。在读取该压缩块时,可以先根据映射表中保存的映射信息,找到对应的物理页;然后将该物理页中的数据整体读出,并从其头部信息中查找该压缩块在物理页内的起始地址和长度。具体地,在物理页的头部信息中可能保存了多个压缩块的元数据,为了方便查找某个压缩块的元数据,可以在物理页的头部信息中建立该4KB的数据块的LBA与元数据的对应关系,此时SSD就可以根据数据块的LBA,查找压缩块对应的元数据。
1408、将凑整后的压缩块按照方案二的方式写入SSD的介质中。
方案二:方案二与方案一类似,也是将压缩块的物理页信息保存在映射表中,将压缩块的元数据保存在物理页中。不同之处在于,映射表中除了保存压缩块的物理页的信息,还额外保存索引信息,该索引信息可以描述该压缩块在该物理页存储的全部压缩块中的排序。这样,在查找该物理页的元数据时,就无需像方案一那样通过查找复杂的LBA定位该压缩块的元数据,而是按照该索引信息定位该元数据即可,降低了元数据的数据量,节省了物理页的存储空间。
1410、将凑整后的压缩块按照方案三的方式写入SSD的介质中。
方案三:映射表中的映射信息包含存储压缩块的物理页的信息、压缩块在物理页内的起始地址以及压缩块的长度。这种方案无需在物理页中存储元数据,简化了物理页的实现方式,同时省去了根据映射信息查找元数据的过程,提高了物理地址的寻址效率。
应理解,实际中,选择步骤1406至步骤1410中的一个执行即可。
1412、计算逻辑容量的变化。
例如,可以每完成一个数据块的压缩,就计算一次逻辑容量的变化;也可以将所有数据压缩完成之后,再计算逻辑容量的变化,本发明实施例对此不作具体限定。上文对逻辑容量的变化的具体计算方式有详细描述,此处不再赘述。
上文结合图5,详细描述了逻辑块在三种状态之间的转换,其中,隔离逻辑块是由trim/unmap命令触发而产生的,下面结合图15,详细描述trim/unmap相关的处理流程。
图15是本发明实施例的trim/unmap流程的示例图。应理解,图15示出的步骤或操作仅是示例,本发明实施例还可以执行其它操作或者图15中的各种操作的变形。此外,图15中的各个步骤可以按照与图15呈现的不同的顺序来执行,并且有可能并非要执行图15中的全部操作。
为了便于理解,先简单介绍trim/unmap操作的过程。
一般情况下,当主机需要删除磁盘中的某些数据时,控制器会向SSD发送trim/unmap命令,先将这些数据标记为无效数据。受到SSD特性的影响,这些无效数据所占的物理块暂时无法写入新的数据(即无法写覆盖),需要通过垃圾回收机制将该无效数据所在的物理块擦除之后,才能继续存储新的数据。
当控制器将某一段逻辑地址范围trim/unmap时,可以该逻辑地址范围对应的逻辑块会从有效逻辑块变为隔离逻辑块。trim/unmap命令中的逻辑地址范围可以按逻辑块的倍数选取,这样可以方便SSD执行trim/unmap操作。
trim/unmap会伴随着SSD的逻辑容量的减少,以及SSD的可用逻辑容量的增加。具体而言,trim/unmap命令所针对的逻辑地址范围会被标记为无效,此时需要从SSD的逻辑容量中除去这段逻辑地址范围对应的容量。此外,这段逻辑地址范围对应的物理空间是无法马上被利用的,这是因为trim/unmap操作仅是将这段物理空间的数据标记为无效,这段物理空间的释放是需要通过垃圾回收机制完成的。但是,由于预留空间的存在,这部分物理空间对应的逻辑容量的增加可以马上体现出来的。下面结合图15的步骤进行详细的描述。
1502、控制器向SSD发送trim/unmap命令。
一般地,控制器会先收到主机发送的trim/unmap命令,该命令用于指示将一段数据标记为无效数据。控制器会找到这段数据在SSD中的逻辑地址范围,然后向SSD发送trim/unmap命令,指示SSD将这段逻辑地址范围内的数据标记为无效数据,或者解除这段地址范围内的数据的逻辑地址和物理地址的映射关系。控制器向SSD发送的trim/unmap命令中可以携带待trim或unmap的数据的逻辑地址,例如,可以是待trim或unmap数据在SSD中的LBA+LEN。
1504、SSD对指定逻辑地址范围内的数据进行trim/unmap操作。
具体地,SSD可以选取这段逻辑地址范围内的一个逻辑块,然后从映射表中的与该逻辑块对应的表项中提取出映射信息,找到该逻辑块在物理块中的物理地址,然后将这段物理地址内的数据标记为无效。
物理块中可以维护两个统计值,一个值可以表示物理块中保存的数据块的总数;另一个值可以表示该物理块保存的有效数据块的数目。SSD可以根据物理块中的有效数据块的数目,或者有效数据块的比例确定是否进行垃圾回收。向物理块写入数据时,会增加该物理块对应的有效数据块的数量;每trim/unmap该物理块中的一个有效数据块,该物理块中的有效数据块的数据减1。按照上述方式循环执行,直到这段逻辑地址范围内的所有逻辑块均处理完毕。
1506、SSD计算trim/unmap命令导致的逻辑容量的缩减。
trim/unmap命令对应的所有地址范围对应的逻辑块的映射关系均被解除后,可以计算并调整SSD的逻辑容量。具体的计算方式可以参照如下公式:
逻辑容量的缩减=trim/unmap操作范围对应的逻辑地址的逻辑容量。
1508、SSD计算trim/unmap命令导致的可用逻辑容量的增加。
具体而言,假如无效数据在SSD中占用80KB的物理空间。虽然这80KB的物理空间需要等待垃圾回收之后才能被释放,但可以先从SSD的预留空间中借用80KB的预留空间,后续可以等无效数据占用的这80KB物理空间被垃圾回收机制释放后,再将这80KB的预留空间中的数据搬移到物理容量对应的存储空间中。
利用这种机制,一旦trim/unmap操作产生无效数据,就可以借用预留空间将这些无效数据占用的物理空间“释放”出来。此时,SSD的可用逻辑容量也会相应增加80KB。如果逻辑块的大小为8KB,则可以将10个隔离逻辑块转换为空白逻辑块。相当于额外新增了10个可用的空白逻辑块。释放出来的空白逻辑块可用于存放新写入的数据。
举个例子,假设SSD接收到的trim/unmap命令指示的逻辑地址范围为100K,由于压缩的存储,该100K的逻辑地址范围中的数据实际占用的物理空间为80K,此时,可以从预留空间中借用80K的预留空间,这80K的预留空间可用来存储新的数据。在这个例子中,trim/unmap命令引起的SSD的逻辑容量的减少量为100K,通过借助预留空间,该SSD的可用逻辑容量的增加量为80K。
上文结合图10,详细描述了写请求的处理流程。读请求(或称读IO)的处理流程是写请求的逆过程。下面结合图16,详细描述本发明实施例的读请求的处理流程。
图16是本发明实施例的读请求的处理流程示意图。应理解,图16示出的步骤或操作仅是示例,本发明实施例还可以执行其它操作或者图16中的各种操作的变形。此外,图16中的各个步骤可以按照与图16呈现的不同的顺序来执行,并且有可能并非要执行图16中的全部操作。
1602、主机向控制器发送读请求。
主机下发的读请求可以包括LUN_ID、待读取数据在磁盘阵列的LBA,以及待读取数据的长度。
1604、控制器向SSD发送读请求。
具体地,控制器可以根据步骤1602中接收到的LUN_ID、待读取数据在磁盘阵列的LBA,以及待读取数据的长度,查询控制器自己维护的映射表(该映射表可用于指示呈现给主机的磁盘阵列的LBA与SSD的LBA的映射关系),确定待读取数据所在的SSD,以及待读取数据在SSD中的LBA和长度。
1606、SSD基于映射表,从SSD的介质中读取压缩数据。
假设SSD采用定长压缩方式,且映射表中保存了存储压缩数据的物理页的信息、压缩数据在物理页的起始地址、以及压缩数据的长度,那么,SSD可以根据映射表中保存的这些信息,直接定位到压缩数据。
假设SSD采用变长压缩方式,且映射表中仅保存了存储压缩数据的物理页的信息,压缩数据在物理页中的起始地址和长度位于该物理页的头部,那么,SSD可以先根据该物理页信息,找到该物理页,从物理页的头部信息中找到压缩数据在物理页的起始地址和长度,然后根据压缩数据在物理页的起始地址和长度定位到该压缩数据。
1608、SSD对压缩数据进行解压缩操作,得到待读取数据。
SSD可以通过内部的解压单元,将该压缩数据解压,还原待读取数据。
1610、SSD将待读取数据返回给控制器。
1612、控制器将待读取数据返回给主机。
上文结合图1至图16,详细描述了根据本发明实施例的处理数据的方法。下文结合图17和图18,详细描述根据本发明实施例SSD。应理解,图17或图18中的SSD能够实现图1至图16中由SSD执行的各个步骤,为避免重复,此处不再详述。
下面对本发明的装置实施例和系统实施例进行描述,由于装置实施例和系统实施例可以执行上述方法,因此未详细描述的部分可以参见前面各方法实施例。
图17是本发明实施例的存储装置的示意性结构图。应理解,该存储装置1700的功能或逻辑可以通过纯软件的方式实现,也可以通过纯硬件的方式,还可以通过软硬结合的方式实现。例如,存储装置1700可以通过软硬结合的方式实现,此时,下文中的接收模块可以用接收电路实现,压缩模块可以由计算机代码实现。又如,存储装置1700可以通过纯硬件的方式实现,下文中的各个模块的功能或逻辑均可通过逻辑电路实现。又如,存储装置1700可以通过纯硬件的方式实现,下文中的各个模块均可以是计算机代码对应的功能模块。
存储装置1700包括:
第一接收模块1710,用于从控制器接收写请求,所述写请求中携带待写入数据;
压缩模块1720,用于对所述待写入数据进行压缩,得到压缩数据;
第一存储模块1730,用于存储所述压缩数据;
第一发送模块1740,用于向所述控制器发送第一反馈信息,所述第一反馈信息指示所述存储装置1700存储了所述压缩数据之后的剩余容量。
可选地,在一些实施例中,所述存储装置1700还包括:第二发送模块,用于向所述控制器发送第二反馈信息,所述第二反馈信息指示所述存储装置1700的逻辑容量,所述存储装置1700的逻辑容量为所述存储装置1700中的已存储数据在压缩前的数据量与所述存储装置1700的空闲的物理空间的容量之和。
可选地,在一些实施例中,所述存储装置1700还包括:分配模块,用于为所述待写入数据分配空白逻辑块,每个逻辑块对应所述存储装置1700中的一段逻辑容量;第一转换模块,用于将所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;第一查询模块,用于查询所述存储装置1700的剩余空白逻辑块的数量;所述第一发送模块1740具体用于向所述控制器发送所述第一反馈信息,所述第一反馈信息包括所述剩余空白逻辑块的数量和/或所述剩余容量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。
可选地,在一些实施例中,所述压缩模块1720具体用于在所述分配模块为所述待写入数据分配空白逻辑块之后,对所述待写入数据进行压缩,得到所述压缩数据;所述存储装置1700还包括:第一确定模块,用于根据所述待写入数据和所述压缩数据的大小,确定所述存储装置1700中需要增加的空白逻辑块的数量。
可选地,在一些实施例中,所述存储装置1700还包括:添加模块,用于根据所述存储装置1700中需要增加的空白逻辑块的数量,在所述映射表中添加新的空白逻辑块对应的表项。
可选地,在一些实施例中,所述存储装置1700还包括:更新模块,用于根据所述存储装置1700中需要增加的空白逻辑块的数量,将所述存储装置1700中的隔离逻辑块更新为空白逻辑块,所述隔离逻辑块为所述存储装置1700中的逻辑地址不能使用的逻辑块。
可选地,在一些实施例中,所述存储装置1700中增加的空白逻辑块的数量M等于D与L相除的结果向下取整,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述存储装置1700的逻辑块的长度。
可选地,在一些实施例中,所述存储装置1700还包括:第二接收模块,用于从所述控制器接收命令,所述命令包括一段逻辑地址范围,所述命令用于指示将所述一段逻辑地址范围内的有效数据标记为无效数据;第二转换模块,用于将所述一段逻辑地址范围内的有效逻辑块转换成隔离逻辑块,其中,所述隔离逻辑块为逻辑地址不能使用的逻辑块。
可选地,在一些实施例中,所述存储装置1700还包括:第二确定模块,用于确定所述一段逻辑地址范围内的数据占用的物理空间的大小;选取模块,用于从预留空间中选取部分预留空间,所述部分预留空间与所述一段逻辑地址范围内的数据占用的物理空间的大小相等;第三确定模块,用于将所述部分预留空间作为所述存储装置1700的空闲的物理空间。
可选地,在一些实施例中,所述存储装置1700还包括:第二查询模块,用于在向所述控制器发送所述第一反馈信息之前,查询所述存储装置1700的空闲的物理空间;第四确定模块,用于将所述空闲的物理空间的容量确定为所述剩余容量。
可选地,在一些实施例中,所述存储装置1700还包括:第五确定模块,用于从所述控制器接收所述写请求之后,为所述待写入数据分配逻辑地址;第一记录模块,用于在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
可选地,在一些实施例中,所述存储装置1700还包括:第六确定模块,用于从所述控制器接收所述写请求之后,为所述待写入数据分配逻辑地址;第二记录模块,用于在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息;第二存储模块,用于在所述物理页中存储所述压缩数据的元数据,所述元数据包括所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
可选地,在一些实施例中,所述写请求包含所述待写入数据的数据长度,所述待写入数据的逻辑地址是基于所述数据长度分配的。
可选地,在一些实施例中,所述存储装置1700还包括:第三发送模块,用于从所述控制器接收所述写请求之后,向所述控制器发送所述待写入数据在所述存储装置1700中的逻辑地址。
可选地,在一些实施例中,所述存储装置1700还包括:第三接收模块,用于从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;读取模块,用于读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;解压缩模块,用于对所述目标数据进行解压缩,得到所述待读取数据;第四发送模块,用于向所述控制器发送所述待读取数据。
需要说明的是,上述存储装置1700例如可以是SSD,存储装置1700可以通过通信接口、存储介质与处理器组成的SSD实现。其中,处理器可以通过运行内存中的计算机指令执行方法实施例中描述的操作。
处理器还可以通过内部硬件的逻辑连接执行方法实施例中描述的操作,例如通过专用集成电路(英文:application-specific integrated circuit,缩写:ASIC)实现,或可编程逻辑器件(英文:programmable logic device,缩写:PLD)实现。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:CPLD),FPGA,通用阵列逻辑(英文:generic array logic,缩写:GAL)或其任意组合执行操作。以本发明实施例中的存储装置是SSD为例,SSD包括存储介质和处理器。存储介质用于提供存储空间。SSD的处理器包括:第一接收电路,用于从控制器接收写请求,所述写请求中携带待写入数据;压缩电路,用于对所述待写入数据进行压缩,得到压缩数据;第一存储电路,用于存储所述压缩数据;第一发送电路,用于向所述控制器发送第一反馈信息,所述第一反馈信息指示所述SSD在存储了所述压缩数据之后的剩余容量。
图18是本发明实施例的存储系统的示意性结构图。图18中的存储系统1800包括:控制器1810和图17中描述的存储装置1700,
所述控制器1810用于生成包含所述待写入数据的写请求;从所述存储装置1700接收所述写请求的响应消息,所述响应消息包括所述待写入数据在所述存储装置1700中的逻辑地址;记录所述待写入数据在磁盘阵列的逻辑地址与所述待写入数据在所述存储装置1700的逻辑地址之间的映射关系。
可选地,在一个实施例中,所述控制器1810还用于从主机接收新的待写入数据;根据所述第一反馈信息确定所述存储装置1700的剩余容量;在所述存储装置1700的剩余容量大于所述新的待写入数据的大小的情况下,将所述新的待写入数据写入所述存储装置1700中。
图19是本发明实施例的固态硬盘的示意性结构图。图19的固态硬盘1900包括:
通信接口1910,用于与控制器进行通信;
存储介质1920,用于提供存储空间;
处理器1930,所述处理器1930与所述通信接口1910和所述存储介质1920相连,用于通过所述通信接口1910接收所述控制器的写请求,所述写请求中携带待写入数据;对所述待写入数据进行压缩,得到压缩数据;将所述压缩数据存入所述存储介质1920;通过所述通信接口1910向所述控制器发送第一反馈信息,所述第一反馈信息指示所述存储介质1920存储了所述压缩数据之后的剩余容量。
可选地,在一些实施例中,所述处理器1930还用于通过所述通信接口1910向所述控制器发送第二反馈信息,所述第二反馈信息指示所述存储介质1920的逻辑容量,所述存储介质1920的逻辑容量为所述存储介质1920中的已存储数据在压缩前的数据量与所述存储介质1920的空闲的物理空间的容量之和。
可选地,在一些实施例中,所述处理器1930还用于为所述待写入数据分配空白逻辑块,所述空白逻辑块为逻辑地址空闲的逻辑块,每个逻辑块对应所述存储介质1920中的一段逻辑容量;将被分配的所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;查询所述固态硬盘1900的剩余空白逻辑块的数量;所述处理器1930具体用于通过所述通信接口1910向所述控制器发送所述第一反馈信息,所述第一反馈信息包括所述剩余空白逻辑块的数量和/或所述剩余容量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。
可选地,在一些实施例中,所述处理器1930具体用于在所述处理器1930为所述待写入数据分配空白逻辑块之后,对所述待写入数据进行压缩,得到所述压缩数据;所述处理器1930还用于根据所述待写入数据和所述压缩数据的大小,确定所述固态硬盘1900中需要增加的空白逻辑块的数量。
可选地,在一些实施例中,所述处理器1930还用于根据所述固态硬盘1900中需要增加的空白逻辑块的数量,在所述固态硬盘1900的映射表中添加新的空白逻辑块对应的表项。
可选地,在一些实施例中,所述处理器1930还用于根据所述固态硬盘1900中需要增加的空白逻辑块的数量,将所述固态硬盘1900中的隔离逻辑块更新为空白逻辑块,所述隔离逻辑块为所述固态硬盘1900中的逻辑地址不能使用的逻辑块。
可选地,在一些实施例中,所述固态硬盘1900中需要增加的空白逻辑块的数量M等于D与L相除的结果向下取整,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述固态硬盘1900的逻辑块的长度。
可选地,在一些实施例中,所述处理器1930还用于通过所述通信接口1910从所述控制器接收命令,所述命令包括一段逻辑地址范围,所述命令用于指示将所述一段逻辑地址范围内的有效数据标记为无效数据;将所述一段逻辑地址范围内的有效逻辑块转换成隔离逻辑块,其中,所述隔离逻辑块为逻辑地址不能使用的逻辑块。
可选地,在一些实施例中,所述处理器1930还用于确定所述一段逻辑地址范围内的数据占用的物理空间的大小;从预留空间中选取部分预留空间,所述部分预留空间与所述一段逻辑地址范围内的数据占用的物理空间的大小相等;将所述部分预留空间作为所述存储介质1920的空闲的物理空间。
可选地,在一些实施例中,在所述处理器1930通过所述通信接口1910向所述控制器发送第一反馈信息之前,所述处理器1930还用于查询所述存储介质1920的空闲的物理空间;将所述空闲的物理空间的容量确定为所述剩余容量。
可选地,在一些实施例中,在所述处理器1930通过所述通信接口1910从控制器接收到写请求之后,所述处理器1930还用于为所述待写入数据分配逻辑地址;在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
可选地,在一些实施例中,在所述处理器1930通过所述通信接口1910从控制器接收到写请求之后,所述处理器1930还用于为所述待写入数据分配逻辑地址;在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息;在所述物理页中存储所述压缩数据的元数据,所述元数据包括所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
可选地,在一些实施例中,所述写请求包含所述待写入数据的数据长度,所述待写入数据的逻辑地址是基于所述数据长度分配的。
可选地,在一些实施例中,所述处理器1930存储所述压缩数据之后,所述处理器1930还用于通过所述通信接口1910向所述控制器发送所述待写入数据在所述存储介质1920中的逻辑地址。
可选地,在一些实施例中,所述处理器1930还用于通过所述通信接口1910从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;对所述目标数据进行解压缩,得到所述待读取数据;通过所述通信接口1910向所述控制器发送所述待读取数据。
图20是本发明实施例的存储系统的示意性结构图。图20的存储系统2000包括:控制器2010,以及图19所述的固态硬盘1900,
所述控制器2010用于生成包含所述待写入数据的写请求;通过所述通信接口1910从所述处理器1930接收所述写请求的响应消息,所述响应消息包括所述待写入数据在所述存储介质1920中的逻辑地址;记录所述待写入数据在磁盘阵列的逻辑地址与所述待写入数据在所述存储介质1920的逻辑地址之间的映射关系。
可选地,在一些实施例中,所述控制器2010还用于从主机接收新的待写入数据;根据所述第一反馈信息确定所述固态硬盘1900的剩余容量;在所述固态硬盘1900的剩余容量大于所述新的待写入数据的大小的情况下,将所述新的待写入数据写入所述固态硬盘1900中。
本发明还提供以下实施例。需要说明的是,以下实施例的编号并不一定需要遵从前面实施例的编号顺序:
1、一种固态硬盘,包括:通信接口,用于与控制器进行通信;存储介质,用于提供存储空间;处理器,所述处理器与所述通信接口和所述存储介质相连,用于通过所述通信接口接收所述控制器的写请求,所述写请求中携带待写入数据;对所述待写入数据进行压缩,得到压缩数据;将所述压缩数据存入所述存储介质;通过所述通信接口向所述控制器发送第一反馈信息,所述第一反馈信息指示所述存储介质存储了所述压缩数据之后的剩余容量。
2、如实施方式1所述的固态硬盘,所述处理器还用于通过所述通信接口向所述控制器发送第二反馈信息,所述第二反馈信息指示所述存储介质的逻辑容量,所述存储介质的逻辑容量为所述存储介质中的已存储数据在压缩前的数据量与所述存储介质的空闲的物理空间的容量之和。
3、如实施方式1或2所述的固态硬盘,所述处理器还用于为所述待写入数据分配空白逻辑块,所述空白逻辑块为逻辑地址空闲的逻辑块,每个逻辑块对应所述存储介质中的一段逻辑容量;将被分配的所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;查询所述固态硬盘的剩余空白逻辑块的数量;所述处理器具体用于通过所述通信接口向所述控制器发送所述第一反馈信息,所述第一反馈信息包括所述剩余空白逻辑块的数量和/或所述剩余容量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。
4、如实施方式3所述的固态硬盘,所述处理器具体用于在所述处理器为所述待写入数据分配空白逻辑块之后,对所述待写入数据进行压缩,得到所述压缩数据;所述处理器还用于根据所述待写入数据和所述压缩数据的大小,确定所述固态硬盘中需要增加的空白逻辑块的数量。
5、如实施方式4所述的固态硬盘,所述处理器还用于根据所述固态硬盘中需要增加的空白逻辑块的数量,在所述固态硬盘的映射表中添加新的空白逻辑块对应的表项。
6、如实施方式4或5所述的固态硬盘,所述处理器还用于根据所述固态硬盘中需要增加的空白逻辑块的数量,将所述固态硬盘中的隔离逻辑块更新为空白逻辑块,所述隔离逻辑块为所述固态硬盘中的逻辑地址不能使用的逻辑块。
7、如实施方式4-6中任一项所述的固态硬盘,所述固态硬盘中需要增加的空白逻辑块的数量M等于D与L相除的结果向下取整,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述固态硬盘的逻辑块的长度。
8、如实施方式3-7中任一项所述的固态硬盘,所述处理器还用于通过所述通信接口从所述控制器接收命令,所述命令包括一段逻辑地址范围,所述命令用于指示将所述一段逻辑地址范围内的有效数据标记为无效数据;将所述一段逻辑地址范围内的有效逻辑块转换成隔离逻辑块,其中,所述隔离逻辑块为逻辑地址不能使用的逻辑块。
9、如实施方式8所述的固态硬盘,所述处理器还用于确定所述一段逻辑地址范围内的数据占用的物理空间的大小;从预留空间中选取部分预留空间,所述部分预留空间与所述一段逻辑地址范围内的数据占用的物理空间的大小相等;将所述部分预留空间作为所述存储介质的空闲的物理空间。
10、如实施方式2或3所述的固态硬盘,在所述处理器通过所述通信接口向所述控制器发送第一反馈信息之前,所述处理器还用于查询所述存储介质的空闲的物理空间;将所述空闲的物理空间的容量确定为所述剩余容量。
11、如实施方式1-10中任一项所述的固态硬盘,在所述处理器通过所述通信接口从控制器接收到写请求之后,所述处理器还用于为所述待写入数据分配逻辑地址;在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
12、如实施方式1-10中任一项所述的固态硬盘,在所述处理器通过所述通信接口从控制器接收到写请求之后,所述处理器还用于为所述待写入数据分配逻辑地址;在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息;在所述物理页中存储所述压缩数据的元数据,所述元数据包括所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
13、如实施方式11或22所述的固态硬盘,所述写请求包含所述待写入数据的数据长度,所述待写入数据的逻辑地址是基于所述数据长度分配的。
14、如实施方式1-13中任一项所述的固态硬盘,所述处理器存储所述压缩数据之后,所述处理器还用于通过所述通信接口向所述控制器发送所述待写入数据在所述存储介质中的逻辑地址。
15、如实施方式14所述的固态硬盘,所述处理器还用于通过所述通信接口从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;对所述目标数据进行解压缩,得到所述待读取数据;通过所述通信接口向所述控制器发送所述待读取数据。
本文中术语“和/或”表示可以存在三种关系。例如,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中的字符“/”一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (26)
1.一种处理数据的方法,应用于固态硬盘SSD中,其特征在于,包括:
所述SSD从控制器接收写请求,所述写请求中携带待写入数据;
所述SSD对所述待写入数据进行压缩,得到压缩数据;
所述SSD存储所述压缩数据;
所述SSD向所述控制器发送第一反馈信息,所述第一反馈信息指示所述SSD存储了所述压缩数据之后的剩余容量;
所述SSD向所述控制器发送第二反馈信息,所述第二反馈信息指示所述SSD的逻辑容量,所述SSD的逻辑容量为所述SSD中的已存储数据在压缩前的数据量与所述SSD的空闲的物理空间的容量之和。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述SSD为所述待写入数据分配空白逻辑块,所述空白逻辑块为逻辑地址空闲的逻辑块,每个逻辑块对应所述SSD中的一段逻辑容量;
所述SSD将被分配的所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;
所述SSD查询所述SSD的剩余空白逻辑块的数量;
所述第一反馈信息还包括所述剩余空白逻辑块的数量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。
3.如权利要求2所述的方法,其特征在于,所述SSD对所述待写入数据进行压缩,得到压缩数据,包括:
在所述SSD为所述待写入数据分配空白逻辑块之后,所述SSD对所述待写入数据进行压缩,得到所述压缩数据;
所述方法还包括:
所述SSD根据所述待写入数据和所述压缩数据的大小,确定所述SSD中需要增加的空白逻辑块的数量。
4.如权利要求1所述的方法,其特征在于,在所述SSD向所述控制器发送第一反馈信息之前,所述方法还包括:
所述SSD查询所述SSD的空闲的物理空间;
所述SSD将所述空闲的物理空间的容量确定为所述剩余容量。
5.如权利要求1-4中任一项所述的方法,其特征在于,在所述SSD从控制器接收到写请求之后,所述方法还包括:
所述SSD为所述待写入数据分配逻辑地址;
所述SSD在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
6.如权利要求1-4中任一项所述的方法,其特征在于,所述SSD存储所述压缩数据之后,所述方法还包括:
所述SSD向所述控制器发送所述待写入数据在所述SSD中的逻辑地址。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
所述SSD从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;
所述SSD读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;
所述SSD对所述目标数据进行解压缩,得到所述待读取数据;
所述SSD向所述控制器发送所述待读取数据。
8.一种存储装置,其特征在于,包括:
第一接收模块,用于从控制器接收写请求,所述写请求中携带待写入数据;
压缩模块,用于对所述待写入数据进行压缩,得到压缩数据;
第一存储模块,用于存储所述压缩数据;
第一发送模块,用于向所述控制器发送第一反馈信息,所述第一反馈信息指示所述存储装置在存储了所述压缩数据之后的剩余容量;
第二发送模块,用于向所述控制器发送第二反馈信息,所述第二反馈信息指示所述存储装置的逻辑容量,所述存储装置的逻辑容量为所述存储装置中的已存储数据在压缩前的数据量与所述存储装置的空闲的物理空间的容量之和。
9.如权利要求8所述的存储装置,其特征在于,所述存储装置还包括:
分配模块,用于为所述待写入数据分配空白逻辑块,所述空白逻辑块为逻辑地址空闲的逻辑块,每个逻辑块对应所述存储装置中的一段逻辑容量;
第一转换模块,用于将被分配的所述空白逻辑块转换成有效逻辑块,所述有效逻辑块为逻辑地址被有效数据占用的逻辑块;
第一查询模块,用于查询所述存储装置的剩余空白逻辑块的数量;
所述第一反馈信息还包括所述剩余空白逻辑块的数量,其中,所述剩余容量是基于所述剩余空白逻辑块的数量确定的。
10.如权利要求9所述的存储装置,其特征在于,所述压缩模块具体用于在所述分配模块为所述待写入数据分配空白逻辑块之后,对所述待写入数据进行压缩,得到所述压缩数据;
所述存储装置还包括:
第一确定模块,用于根据所述待写入数据和所述压缩数据的大小,确定所述存储装置中需要增加的空白逻辑块的数量。
11.如权利要求10所述的存储装置,其特征在于,所述存储装置还包括:
添加模块,用于根据所述存储装置中需要增加的空白逻辑块的数量,在映射表中添加新的空白逻辑块对应的表项。
12.如权利要求10或11所述的存储装置,其特征在于,所述存储装置还包括:
更新模块,用于根据所述存储装置中需要增加的空白逻辑块的数量,将所述存储装置中的隔离逻辑块更新为空白逻辑块,所述隔离逻辑块为所述存储装置中的逻辑地址不能使用的逻辑块。
13.如权利要求10或11中任一项所述的存储装置,其特征在于,所述存储装置中增加的空白逻辑块的数量M等于D与L相除的结果向下取整,其中,D表示所述待写入数据的长度与所述压缩数据的长度的差值,L表示所述存储装置的逻辑块的长度。
14.如权利要求9-11中任一项所述的存储装置,其特征在于,所述存储装置还包括:
第二接收模块,用于从所述控制器接收命令,所述命令包括一段逻辑地址范围,所述命令用于指示将所述一段逻辑地址范围内的有效数据标记为无效数据;
第二转换模块,用于将所述一段逻辑地址范围内的有效逻辑块转换成隔离逻辑块,其中,所述隔离逻辑块为逻辑地址不能使用的逻辑块。
15.如权利要求14所述的存储装置,其特征在于,所述存储装置还包括:
第二确定模块,用于确定所述一段逻辑地址范围内的数据占用的物理空间的大小;
选取模块,用于从预留空间中选取部分预留空间,所述部分预留空间与所述一段逻辑地址范围内的数据占用的物理空间的大小相等;
第三确定模块,用于将所述部分预留空间作为所述存储装置的空闲的物理空间。
16.如权利要求8所述的存储装置,其特征在于,所述存储装置还包括:
第二查询模块,用于在向所述控制器发送所述第一反馈信息之前,查询所述存储装置的空闲的物理空间;
第四确定模块,用于将所述空闲的物理空间的容量确定为所述剩余容量。
17.如权利要求8-11和16中任一项所述的存储装置,其特征在于,所述存储装置还包括:
第五确定模块,用于从所述控制器接收所述写请求之后,为所述待写入数据分配逻辑地址;
第一记录模块,用于在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息、所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
18.如权利要求8-11和16中任一项所述的存储装置,其特征在于,所述存储装置还包括:
第六确定模块,用于从所述控制器接收所述写请求之后,为所述待写入数据分配逻辑地址;
第二记录模块,用于在映射表中的与所述逻辑地址对应的表项记录映射信息,所述映射信息包括存储所述压缩数据的物理页的信息;
第二存储模块,用于在所述物理页中存储所述压缩数据的元数据,所述元数据包括所述压缩数据在所述物理页的起始位置以及所述压缩数据的长度。
19.如权利要求17所述的存储装置,其特征在于,所述写请求包含所述待写入数据的数据长度,所述待写入数据的逻辑地址是基于所述数据长度分配的。
20.如权利要求8-11和16中任一项所述的存储装置,其特征在于,所述存储装置还包括:
第三发送模块,用于从所述控制器接收所述写请求之后,向所述控制器发送所述待写入数据在所述存储装置中的逻辑地址。
21.如权利要求20所述的存储装置,其特征在于,所述存储装置还包括:
第三接收模块,用于从所述控制器接收读请求,所述读请求包括待读取数据的逻辑地址;
读取模块,用于读取所述待读取数据的逻辑地址对应的物理地址中的目标数据;
解压缩模块,用于对所述目标数据进行解压缩,得到所述待读取数据;
第四发送模块,用于向所述控制器发送所述待读取数据。
22.一种存储系统,其特征在于,包括控制器,以及如权利要求13所述的存储装置,
所述控制器用于生成包含所述待写入数据的写请求;从所述存储装置接收所述写请求的响应消息,所述响应消息包括所述待写入数据在所述存储装置中的逻辑地址;记录所述待写入数据在磁盘阵列的逻辑地址与所述待写入数据在所述存储装置的逻辑地址之间的映射关系。
23.如权利要求22所述的存储系统,其特征在于,所述控制器还用于从主机接收新的待写入数据;根据所述第一反馈信息确定所述存储装置的剩余容量;在所述存储装置的剩余容量大于所述新的待写入数据的大小的情况下,将所述新的待写入数据写入所述存储装置中。
24.一种固态硬盘,其特征在于,包括:
通信接口,用于与控制器进行通信;
存储介质,用于提供存储空间;
处理器,所述处理器与所述通信接口和所述存储介质相连,用于通过所述通信接口接收所述控制器的写请求,所述写请求中携带待写入数据;对所述待写入数据进行压缩,得到压缩数据;将所述压缩数据存入所述存储介质;通过所述通信接口向所述控制器发送第一反馈信息,所述第一反馈信息指示所述存储介质存储了所述压缩数据之后的剩余容量;通过所述通信接口向所述控制器发送第二反馈信息,所述第二反馈信息指示所述存储装置的逻辑容量,所述存储装置的逻辑容量为所述存储装置中的已存储数据在压缩前的数据量与所述存储装置的空闲的物理空间的容量之和。
25.一种存储系统,其特征在于,包括控制器,以及如权利要求24所述的固态硬盘,
所述控制器用于生成包含所述待写入数据的写请求;通过所述通信接口从所述处理器接收所述写请求的响应消息,所述响应消息包括所述待写入数据在所述存储介质中的逻辑地址;记录所述待写入数据在磁盘阵列的逻辑地址与所述待写入数据在所述存储介质的逻辑地址之间的映射关系。
26.如权利要求25所述的存储系统,其特征在于,所述控制器还用于从主机接收新的待写入数据;根据所述第一反馈信息确定所述固态硬盘的剩余容量;在所述固态硬盘的剩余容量大于所述新的待写入数据的大小的情况下,将所述新的待写入数据写入所述固态硬盘中。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/087096 WO2017219364A1 (zh) | 2016-06-24 | 2016-06-24 | 处理数据的方法、存储装置、固态硬盘和存储系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109690681A CN109690681A (zh) | 2019-04-26 |
CN109690681B true CN109690681B (zh) | 2021-08-31 |
Family
ID=60783738
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680086236.9A Active CN109690681B (zh) | 2016-06-24 | 2016-06-24 | 处理数据的方法、存储装置、固态硬盘和存储系统 |
Country Status (7)
Country | Link |
---|---|
US (1) | US10628060B2 (zh) |
EP (1) | EP3296996B1 (zh) |
JP (1) | JP6725120B2 (zh) |
CN (1) | CN109690681B (zh) |
CA (1) | CA3028821C (zh) |
ES (1) | ES2755720T3 (zh) |
WO (1) | WO2017219364A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9495288B2 (en) * | 2013-01-22 | 2016-11-15 | Seagate Technology Llc | Variable-size flash translation layer |
US11068299B1 (en) * | 2017-08-04 | 2021-07-20 | EMC IP Holding Company LLC | Managing file system metadata using persistent cache |
CN111966540B (zh) * | 2017-09-22 | 2024-03-01 | 成都华为技术有限公司 | 存储介质的管理方法、装置及可读存储介质 |
KR102659832B1 (ko) | 2019-03-05 | 2024-04-22 | 삼성전자주식회사 | 데이터 저장 장치 및 시스템 |
JP6898393B2 (ja) * | 2019-03-22 | 2021-07-07 | 株式会社日立製作所 | ストレージシステム及びデータ転送方法 |
CN111752466B (zh) * | 2019-03-27 | 2024-02-13 | 深圳市茁壮网络股份有限公司 | 一种数据存储方法及装置 |
WO2020222727A1 (en) * | 2019-04-29 | 2020-11-05 | Hitachi Vantara Llc | Optimizing storage and retrieval of compressed data |
US11748023B2 (en) * | 2019-11-29 | 2023-09-05 | Silicon Motion, Inc. | Data storage device and non-volatile memory control method |
CN111241090B (zh) * | 2019-12-23 | 2023-11-10 | 华为技术有限公司 | 存储系统中管理数据索引的方法和装置 |
CN113467699B (zh) * | 2020-03-30 | 2023-08-22 | 华为技术有限公司 | 一种提升可用存储容量方法及装置 |
CN111914788A (zh) * | 2020-08-13 | 2020-11-10 | 河北金如软件开发有限公司 | 一种数据交换/储存方法 |
CN112612722A (zh) * | 2020-12-28 | 2021-04-06 | 深圳忆联信息系统有限公司 | 变长的数据管理方法、装置、计算机设备及存储介质 |
CN113326001B (zh) * | 2021-05-20 | 2023-08-01 | 锐掣(杭州)科技有限公司 | 数据处理方法、装置、设备、系统、介质及程序 |
CN113176859B (zh) * | 2021-05-24 | 2022-11-08 | 锐掣(杭州)科技有限公司 | 数据存储方法与装置 |
CN113726341B (zh) * | 2021-08-25 | 2023-09-01 | 杭州海康威视数字技术股份有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
US20230135151A1 (en) * | 2021-10-28 | 2023-05-04 | Netapp Inc. | Persistent metafile used to cache slot header metadata for improved read performance of objects within an object store |
CN117435124A (zh) * | 2022-07-15 | 2024-01-23 | 华为技术有限公司 | 数据存储方法、电子设备以及存储介质 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5960465A (en) * | 1997-02-27 | 1999-09-28 | Novell, Inc. | Apparatus and method for directly accessing compressed data utilizing a compressed memory address translation unit and compression descriptor table |
KR100365725B1 (ko) * | 2000-12-27 | 2002-12-26 | 한국전자통신연구원 | 플래시 메모리를 이용한 파일 시스템에서 등급별 지움정책 및 오류 복구 방법 |
EA007888B1 (ru) * | 2002-05-13 | 2007-02-27 | Трек 2000 Интернэшнл Лтд. | Система и устройство сжатия и распаковки данных, сохраняемых в портативном запоминающем устройстве для данных |
US20040128414A1 (en) * | 2002-12-30 | 2004-07-01 | Rudelic John C. | Using system memory as a write buffer for a non-volatile memory |
US7188227B2 (en) * | 2003-09-30 | 2007-03-06 | International Business Machines Corporation | Adaptive memory compression |
JP4098752B2 (ja) * | 2004-06-14 | 2008-06-11 | 株式会社東芝 | 光ディスク、光ディスク記録方法、および光ディスク記録装置 |
KR101220538B1 (ko) * | 2006-11-02 | 2013-01-17 | 주식회사 나노엔텍 | 표면 토폴로지를 이용한 미세 입자 분리를 위한 채널 필터 및 이의 제조방법 |
US8261030B2 (en) * | 2008-11-18 | 2012-09-04 | Microsoft Corporation | Using delete notifications to free related storage resources |
TWI428917B (zh) * | 2009-11-25 | 2014-03-01 | Silicon Motion Inc | 快閃記憶裝置、資料儲存系統、以及資料儲存系統之運作方法 |
US8533550B2 (en) * | 2010-06-29 | 2013-09-10 | Intel Corporation | Method and system to improve the performance and/or reliability of a solid-state drive |
WO2012050934A2 (en) * | 2010-09-28 | 2012-04-19 | Fusion-Io, Inc. | Apparatus, system, and method for a direct interface between a memory controller and non-volatile memory using a command protocol |
JP2012221251A (ja) * | 2011-04-08 | 2012-11-12 | Toshiba Corp | メモリシステムの制御方法、情報処理装置、及びプログラム |
US9069703B2 (en) | 2011-04-29 | 2015-06-30 | Seagate Technology Llc | Encrypted-transport solid-state disk controller |
EP2652587B1 (en) | 2011-06-07 | 2017-11-15 | Hitachi, Ltd. | Storage system comprising flash memory, and storage control method |
US20140059278A1 (en) * | 2011-11-14 | 2014-02-27 | Lsi Corporation | Storage device firmware and manufacturing software |
JP5687639B2 (ja) | 2012-02-08 | 2015-03-18 | 株式会社東芝 | コントローラ、データ記憶装置及びプログラム |
JP5826114B2 (ja) * | 2012-05-25 | 2015-12-02 | クラリオン株式会社 | データ解凍装置、データ圧縮装置、データの解凍プログラム、データの圧縮プログラム、及び、圧縮データ配信システム |
US9141532B2 (en) * | 2012-12-26 | 2015-09-22 | Western Digital Technologies, Inc. | Dynamic overprovisioning for data storage systems |
JP6007332B2 (ja) * | 2013-07-31 | 2016-10-12 | 株式会社日立製作所 | ストレージシステム及びデータライト方法 |
US10235396B2 (en) * | 2016-08-29 | 2019-03-19 | International Business Machines Corporation | Workload optimized data deduplication using ghost fingerprints |
US20180060235A1 (en) * | 2016-08-30 | 2018-03-01 | Intel Corporation | Non-volatile memory compression devices and associated methods and systems |
-
2016
- 2016-06-24 EP EP16898145.4A patent/EP3296996B1/en active Active
- 2016-06-24 JP JP2018566339A patent/JP6725120B2/ja active Active
- 2016-06-24 ES ES16898145T patent/ES2755720T3/es active Active
- 2016-06-24 CN CN201680086236.9A patent/CN109690681B/zh active Active
- 2016-06-24 CA CA3028821A patent/CA3028821C/en active Active
- 2016-06-24 WO PCT/CN2016/087096 patent/WO2017219364A1/zh unknown
-
2018
- 2018-04-22 US US15/959,276 patent/US10628060B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
CN109690681A (zh) | 2019-04-26 |
ES2755720T3 (es) | 2020-04-23 |
EP3296996A4 (en) | 2018-05-30 |
JP6725120B2 (ja) | 2020-07-15 |
JP2019519047A (ja) | 2019-07-04 |
EP3296996A1 (en) | 2018-03-21 |
US20180246664A1 (en) | 2018-08-30 |
US10628060B2 (en) | 2020-04-21 |
EP3296996B1 (en) | 2019-08-28 |
CA3028821C (en) | 2023-01-24 |
WO2017219364A1 (zh) | 2017-12-28 |
CA3028821A1 (en) | 2017-12-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109690681B (zh) | 处理数据的方法、存储装置、固态硬盘和存储系统 | |
US11907569B1 (en) | Storage deveice that garbage collects specific areas based on a host specified context | |
US11449240B1 (en) | Techniques for supporting erasure coding with flash memory controller | |
JP6553566B2 (ja) | メモリシステムおよび制御方法 | |
US9792172B2 (en) | Memory system and method of controlling nonvolatile memory | |
US11086519B2 (en) | System and method for granular deduplication | |
US9946462B1 (en) | Address mapping table compression | |
US11321229B2 (en) | System controller and system garbage collection method | |
JP2019079113A (ja) | ストレージ装置、データ管理方法、及びデータ管理プログラム | |
US10592150B2 (en) | Storage apparatus | |
US9378214B2 (en) | Method and system for hash key memory reduction | |
JPWO2013186828A1 (ja) | 計算機システム及び制御方法 | |
JP2019128906A (ja) | ストレージ装置及びその制御方法 | |
CN114691020A (zh) | 基于zns标准提供数据压缩存储设备及其方法 | |
EP3798852B1 (en) | System controller and system garbage recovery method | |
US10929299B2 (en) | Storage system, method and non-transitory computer-readable storage medium | |
CN117312260B (zh) | 文件的压缩存储方法、装置、存储介质和电子设备 | |
CN117312261B (zh) | 文件的压缩编码方法、装置存储介质及电子设备 | |
CN114625318A (zh) | 应用于固态硬盘的数据写入方法、装置、设备 | |
CN115145468A (zh) | 获取地址空间属性的方法、数据备份方法及存储设备 | |
CN117369718A (zh) | 在存储装置中形成和选择回收单元的系统、方法和装置 | |
CN113050873A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |