CN116340198A - 固态硬盘的数据写入方法、其装置及固态硬盘 - Google Patents
固态硬盘的数据写入方法、其装置及固态硬盘 Download PDFInfo
- Publication number
- CN116340198A CN116340198A CN202310607939.3A CN202310607939A CN116340198A CN 116340198 A CN116340198 A CN 116340198A CN 202310607939 A CN202310607939 A CN 202310607939A CN 116340198 A CN116340198 A CN 116340198A
- Authority
- CN
- China
- Prior art keywords
- data
- target
- unpacking
- logical block
- cache module
- 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
- 239000007787 solid Substances 0.000 title claims abstract description 90
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000013507 mapping Methods 0.000 claims abstract description 55
- 238000004590 computer program Methods 0.000 claims description 16
- 238000005516 engineering process Methods 0.000 abstract description 7
- 238000013523 data management Methods 0.000 description 25
- 229920001485 poly(butyl acrylate) polymer Polymers 0.000 description 15
- 238000012545 processing Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 11
- 230000005540 biological transmission Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 125000004122 cyclic group Chemical group 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004064 recycling Methods 0.000 description 1
Images
Classifications
-
- 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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/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
-
- 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]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
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)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例提供了一种固态硬盘的数据写入方法、其装置及固态硬盘,其中,该方法包括:获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中;将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中;判断多个写入数据的逻辑区块地址是否连续;在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址;根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地址。通过本申请,解决了相关技术中固态硬盘的写操作性能较差的问题。
Description
技术领域
本申请实施例涉及计算机领域,具体而言,涉及一种固态硬盘的数据写入方法、其装置、计算机可读存储介质及固态硬盘。
背景技术
固态硬盘(Solid State Disk或Solid State Drive,简称SSD)的写入数据流程中需要两次修改映射表(L2P表),第一次是把数据从主机(HOST)搬到固态硬盘中动态随机存取存储器(Dynamic Random Access Memory,简称DRAM)的缓存区(Buffer)中的时候,数据管理(Data Management,简称DM)模块需要把L2P表指向数据所在的Buffer地址,第二次是把数据从Buffer中写到闪存(NAND Flash)后,数据写处理(Write Management,简称WM)模块需要把L2P表指向NAND地址。
相关技术中是DM模块每处理一笔数据,会生成一个缓存项(cache entry),用来记录buffer地址和逻辑区块地址(Logical Block Address,简称LBA),并更新到L2P表。等处理完一个缓存控制模块(Cache Control Block,简称CCB)的数据量后,发送给WM模块进行NAND Flash的数据写入以及再次改表的操作,WM通过遍历CCB中的每一个cache entry然后进行改表操作。具体地,上述改表操作中每写入一个cache entry,均需要循环一遍CCB中的每一个cache entry,并且每次都需要从DRAM中读取LBA进行比较,最后才能确定这CCB中的LBA是否是连续的,这种大量的循环判断和对DRAM的访问极大的影响了固态硬盘的写操作的性能。
发明内容
本申请实施例提供了一种固态硬盘的数据写入方法、其装置、计算机可读存储介质及固态硬盘,以至少解决相关技术中固态硬盘的写操作性能较差的问题。
根据本申请的一个实施例,提供了一种固态硬盘的数据写入方法,包括:获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中;将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中;判断多个写入数据的逻辑区块地址是否连续;在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址;根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地址。
在一个示例性实施例中,获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中,包括:从主机中获取目标命令携带的数据包以及数据包中每个数据的逻辑区块地址;将数据包以及数据包中多个数据的逻辑区块地址存储至缓存区中的至少一个缓存模块中,至少一个缓存模块包括目标缓存模块;获取存储至目标缓存模块中的多个数据的逻辑区块地址。
在一个示例性实施例中,上述方法还包括:将数据包中的多个数据依次进行拆分,得到多个拆包数据;按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果;根据判断结果,生成目标缓存模块的目标标记参数,其中,目标标记参数用于指示目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果,包括:按照多个拆包数据的拆分顺序,判断第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址是否连续,得到判断结果。
在一个示例性实施例中,根据判断结果,生成目标缓存模块的目标标记参数,包括:根据判断结果,将目标缓存模块中的在先标记参数更新为目标标记参数,其中,在先标记参数用于表示第N-1个拆包数据的逻辑区块地址与第N-2个拆包数据的逻辑区块地址是否连续。
在一个示例性实施例中,根据判断结果,将目标缓存模块中的在先标记参数更新为目标标记参数,包括:在得到第一判断结果的情况下,根据第一判断结果,生成第一标记参数,并将在先标记参数更新为第一标记参数,其中,第一判断结果为在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址连续的情况下得到的判断结果;在得到第二判断结果的情况下,根据第二判断结果,生成第二标记参数,并将在先标记参数更新为第二标记参数,其中,第二判断结果为在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址不连续的情况下得到的判断结果。
在一个示例性实施例中,将数据包中的多个数据依次进行拆分,得到多个拆包数据,包括:将数据包中的多个数据依次进行拆分,得到具有相同大小的多个拆包数据。
在一个示例性实施例中,将数据包以及数据包中多个数据的逻辑区块地址的存储至缓存区中的至少一个缓存模块中,包括:按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的拆包数据以及满足预设数量的拆包数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的拆包数据以及满足预设数量的拆包数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,包括:将目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块中;判断目标缓存模块中当前存储的拆包数据的数量是否满足预设数量;在目标缓存模块中当前存储的拆包数据的数量未满足预设数量的情况下,按照多个拆包数据的拆分顺序,将目标拆包数据的下一个拆包数据以及下一个拆包数据的逻辑区块地址存储至目标缓存模块中;在目标缓存模块中当前存储的拆包数据的数量满足预设数量的情况下,停止向目标缓存模块中的存储操作,得到存储有多个写入数据的目标缓存模块。
在一个示例性实施例中,将数据包以及数据包中多个数据的逻辑区块地址的存储至缓存区中的至少一个缓存模块中,还包括:根据目标缓存模块的存储容量和每个拆包数据的大小,确定预设数量。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,包括:在每次拆分出拆包数据之后,判断至少一个缓存模块中是否存在可用缓存模块,其中,可用缓存模块为具有可用存储空间的缓存模块;在至少一个缓存模块中存在可用缓存模块的情况下,确定可用缓存模块为目标缓存模块;将拆分出的当前拆包数据以及当前拆包数据的逻辑区块地址存储至目标缓存模块中,得到存储至目标缓存模块中的写入数据。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,还包括:在至少一个缓存模块中不存在可用缓存模块的情况下,生成申请请求;根据申请请求,在缓存区中生成新的缓存模块,得到目标缓存模块;将拆分出的当前拆包数据存储至新的缓存模块中,得到存储至目标缓存模块中的写入数据。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,还包括:在生成新的缓存模块之后,将新的缓存模块初始化,得到目标缓存模块,其中,目标缓存模块具有第一标记参数,第一标记参数用于指示多个写入数据的逻辑区块地址连续。
在一个示例性实施例中,按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果,包括:在将拆分出的目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块之后,记录目标缓存模块中目标拆包数据的相对偏移参数,其中,相对偏移参数表示为目标缓存模块中存储顺位在目标拆包数据之前的拆包数据的数量;计算目标拆包数据的逻辑区块地址与存储至目标缓存模块中的第一个拆包数据的逻辑区块地址的差值;判断相对偏移参数与差值是否相等,得到判断结果。
在一个示例性实施例中,根据判断结果,生成目标缓存模块的目标标记参数,包括:在相对偏移参数与差值相等的情况下,生成第一标记参数,其中,第一标记参数用于表示多个写入数据的逻辑区块地址连续;在相对偏移参数与差值不相等的情况下,生成第二标记参数,其中,第二标记参数用于表示多个写入数据中的第一写入数据与第二写入数据的逻辑区块地址不连续,第一写入数据与第二写入数据为拆分顺位相邻的两个拆包数据。
在一个示例性实施例中,判断多个写入数据的逻辑区块地址是否连续,包括:判断目标标记参数是否指示多个写入数据的逻辑区块地址连续。
在一个示例性实施例中,判断目标标记参数是否指示多个写入数据的逻辑区块地址连续,包括:判断目标标记参数是否满足预设条件,其中,预设条件包括以下之一:目标标记参数为第一标记参数,以及目标标记参数为第二标记参数,其中,第一标记参数用于指示多个写入数据的逻辑区块地址连续,第二标记参数用于指示多个写入数据的逻辑区块地址不连续。
在一个示例性实施例中,上述方法还包括:获取多个写入数据在缓存区中的物理区块地址;根据多个写入数据的逻辑区块地址和多个写入数据在缓存区中的物理区块地址,生成第一映射表,第一映射表用于将多个写入数据的逻辑区块地址映射至缓存区中的物理区块地址。
在一个示例性实施例中,根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,包括:根据多个写入数据在固态存储单元中的物理区块地址,更新第一映射表,得到目标映射表。
根据本申请的另一个实施例,提供了一种固态硬盘的写操作装置,包括:第一获取模块,用于获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中;存储模块,用于将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中;判断模块,用于判断多个写入数据的逻辑区块地址是否连续;第二获取模块,用于在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址;生成模块,用于根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地址。
根据本申请的又一个实施例,还提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,其中,计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本申请的又一个实施例,还提供了一种固态硬盘,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
通过本申请,由于在获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,并将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中之后,先判断多个写入数据的逻辑区块地址是否连续,在多个写入数据的逻辑区块地址连续的情况下,再获取多个写入数据在固态存储单元中的物理区块地址,从而可以基于固态硬盘的写操作过程中一个缓存控制模块(CCB)中的逻辑区块地址(LBA)是连续的特点,以及写操作过程中需要把一笔命令携带的数据包拆成多个写入数据进行处理的特点,先识别出一个CCB中的LBA是否连续,如果连续,则无需再循环一遍CCB中的每一个写入数据及其LBA,也无需每次都需要从动态随机存取存储器(DRAM)中读取LBA进行比较,而是可以采用CCB中的LBA直接一次性生成上述映射表。因此,可以解决相关技术中大量的循环判断和对DRAM的访问极大的影响了固态硬盘的写操作性能的问题,达到提高固态硬盘写操作性能的效果。
附图说明
图1是执行本申请实施例所提供的固态硬盘的数据写入方法的固态硬盘的硬件结构框图;
图2是根据本申请实施例的一种固态硬盘的数据写入方法的流程图;
图3是根据本申请实施例的另一种固态硬盘的数据写入方法的流程图;
图4是根据本申请实施例的一种固态硬盘的写操作装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请的实施例。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在固态硬盘中执行。图1是本申请实施例的一种固态硬盘的硬件结构框图。如图1所示,固态硬盘可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述固态硬盘还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述固态硬盘的结构造成限定。例如,固态硬盘还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本申请实施例中的固态硬盘的数据写入方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至固态硬盘。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输设备106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括固态硬盘的通信供应商提供的无线网络。在一个实例中,传输设备106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种运行于上述固态硬盘的数据写入方法,图2是根据本申请实施例的固态硬盘的数据写入方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中;
步骤S204,将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中;
步骤S206,判断多个写入数据的逻辑区块地址是否连续;
步骤S208,在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址;
步骤S210,根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地址。
需要注意的是,本实施例中上述固态硬盘的数据写入方法应用于固态硬盘的顺序写,顺序写可以理解为将要处理的数据集中起来排好队,按照最优化的速度进行连续写入,通常在写入大型文件时可以获得比较理想的顺序写入速度。概括来说,顺序写是指固态硬盘在写入数据的过程中按照数据先后顺序进行工作,具备写入数据连续性的特点,具体表现为写入时间较短且具备连续性。
相关技术中,数据管理(Data Management,简称DM)模块每处理一笔数据,会生成一个缓存项(cache entry),用来记录缓存区(Buffer)地址和逻辑区块地址(LogicalBlock Address,简称LBA),并更新到L2P表,L2P表是逻辑地址到物理地址的映射表。等处理完一个缓存控制模块(Cache Control Block,简称CCB)的数据量后,发送给数据写处理(Write Management,简称WM)模块进行闪存(NAND Flash)的数据写入以及再次改表的操作,WM模块通过遍历CCB中的每一个cache entry然后进行改表操作。
其中,当DM模块接收到写操作指令时,该DM模块需要将指令携带的数据包中的数据量划分为多个4KB,每次将其中一个4KB对应的LBA发送至WM模块,WM模块根据接收到的LBA,为该LBA分配物理区块地址(Physics Block Address,简称PBA),然后WM模块根据该PBA在NAND中写入数据,并通过改表操作把L2P表指向NAND地址。
然而,上述改表操作中每写入一个cache entry,均需要循环一遍CCB中的每一个cache entry,并且每次都需要从DRAM中读取LBA进行比较,最后才能确定这CCB中的LBA是否是连续的,这种大量的循环判断和对DRAM的访问极大的影响了固态硬盘的顺序写的性能。
以NAND Flash技术架构为三层单元存储技术(Triple-Level Cell,简称TLC)为例,在SSD中,数据存储的最小单位是页面(page),一个页面的大小通常为4KB,若干个页面又被组合成块(block),一个CCB能够携带3个page的数据量,即12个4KB数据。WM模块改表的时候,遍历CCB中的每一个cache entry,连续的LBA可以一次性完成改表,但即使CCB中的12个LBA是连续的,也需要循环12次,并且每次都需要从DRAM中读取LBA进行比较,最后才能确定这12个LBA是否是连续的。
而本实施例通过上述步骤S202至S210,可以基于固态硬盘的写操作过程中一个缓存控制模块(CCB)中的逻辑区块地址(LBA)是连续的特点,以及写操作过程中需要把一笔命令携带的数据包拆成多个写入数据进行处理的特点,先识别出一个CCB中的LBA是否连续,如果连续,则无需再循环一遍CCB中的每一个写入数据及其LBA,也无需每次都需要从动态随机存取存储器(DRAM)中读取LBA进行比较,而是可以采用CCB中的LBA直接一次性生成上述映射表。因此,可以解决相关技术中大量的循环判断和对DRAM的访问极大的影响了固态硬盘的写操作性能的问题,达到提高固态硬盘写操作性能的效果。
在上述步骤S202中,获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中。
在一些可选的实施方式中,获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中,包括:从主机中获取目标命令携带的数据包以及数据包中每个数据的逻辑区块地址;将数据包以及数据包中多个数据的逻辑区块地址存储至缓存区中的至少一个缓存模块中,上述至少一个缓存模块包括目标缓存模块;获取存储至目标缓存模块中的多个数据的逻辑区块地址。
具体地,SSD中的控制单元包括DM模块和WM模块,主机(HOST)将目标命令携带的数据包发送至DM模块,DM模块可以将指令携带的数据包进行拆分,得到多个4KB数据以及每个4KB数据的LBA,然后将4KB数据及其LBA依次存储至SSD中DRAM的缓存区中,缓存区可以包括多个CCB,每个CCB可以携带12个4k数据,从而通过WM模块可以获取存储至CCB中的多个4KB数据的LBA。
在一些可选的实施方式中,本实施例中的数据写入方法还包括:获取多个写入数据在缓存区中的物理区块地址;根据多个写入数据的逻辑区块地址和多个写入数据在缓存区中的物理区块地址,生成第一映射表,第一映射表用于将多个写入数据的逻辑区块地址映射至缓存区中的物理区块地址。
具体地,SSD的写入数据流程中需要两次修改L2P表,第一次是把数据从HOST搬到固态硬盘中DRAM的Buffer中的时候,DM模块通过改表把L2P表指向数据所在的Buffer地址,即得到用于将多个写入数据的逻辑区块地址映射至缓存区中的物理区块地址的上述第一映射表。
在一些可选的实施方式中,本实施例中的数据写入方法还包括:将数据包中的多个数据依次进行拆分,得到多个拆包数据;按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果;根据判断结果,生成目标缓存模块的目标标记参数,其中,目标标记参数用于指示目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续。
具体地,DM模块可以将指令携带的数据包进行拆分,得到多个拆包数据,然后按照数据的拆分顺序,依次判断一个拆包数据的LBA与前一个拆包数据的LBA是否连续,从而可以使DM模块在拆包处理的过程中就识别出一个CCB中的LBA是否连续,DM模块识别出来以后,把CCB中的LBA的连续情况通过标记参数直接告知WM模块,使得WM模块在改表的时候,可以先根据上述标记参数判断LBA是否连续,如果连续,WM模块则无需再循环判断,直接一次性完成改表,否则再按相关技术中的方法通过改表,把L2P表指向NAND地址。
本实施例采用上述可选的实施方式,通过对SSD数据写入的改表方案进行优化处理,把WM模块大量的循环判断隐藏在DM模块的拆包处理流程中,大大的减少了WM模块的循环判断次数以及对DRAM的访问,减轻了WM模块的运算压力,提高了顺序写的性能。
示例性的,上述目标标记参数通过在CCB中新增一个标记位(Flag)字段表示,新增的flag用来表示该CCB中的LBA是否连续;同时,在CCB中新增一个first_lba字段,用来记录该CCB中存储的第一个数据对应的LBA。
在一些可选的实施方式中,将数据包中的多个数据依次进行拆分,得到多个拆包数据,包括:将数据包中的多个数据依次进行拆分,得到具有相同大小的多个拆包数据。
示例性的,DM模块可以将指令携带的数据包进行拆分,得到多个4KB数据,然后按照数据的拆分顺序,依次判断一个4KB数据的LBA与前一个4KB数据的LBA是否连续,从而可以使DM模块在拆包处理每个4k数据的过程中就识别出一个CCB中的LBA是否连续。
在一些可选的实施方式中,按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果,并根据判断结果,生成目标缓存模块的目标标记参数,包括:按照多个拆包数据的拆分顺序,判断第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址是否连续,得到判断结果,并根据判断结果,将目标缓存模块中的在先标记参数更新为目标标记参数,其中,在先标记参数用于表示第N-1个拆包数据的逻辑区块地址与第N-2个拆包数据的逻辑区块地址是否连续。
具体地,DM模块将数据包拆分得到多个4KB数据后,将4KB数据依次存储至CCB中,以完成一笔4KB数据的处理,DM模块在拆包处理每个4KB数据的过程中按照数据的拆分顺序,依次判断一个4KB数据的LBA与前一个4KB数据的LBA是否连续,从而根据连续与否生成不同的标记参数,其中,在为多个4KB数据分配同一个CCB的时候,判断该一个4KB数据与前一个4KB数据的LBA是否连续,以生成对应该CCB的标记参数,并在CCB中未被存储满的情况下,随时更新该CCB的标记参数,以得到上述目标标记参数。
具体地,在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址连续的情况下,得到的判断结果可以为第一判断结果,从而可以根据该第一判断结果,生成第一标记参数,并将在先标记参数更新为第一标记参数;在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址不连续的情况下,得到的判断结果可以为在得到第二判断结果,从而可以根据该第二判断结果,生成第二标记参数,并将在先标记参数更新为第二标记参数。
示例性的,DM模块把数据包从HOST搬到buffer以后,开始更新cache entry,修改L2P表,然后在将多个4KB数据依次存储至CCB时,判断该CCB对应的flag的值。每次处理完一笔4KB数据后,需要判断该CCB是否已经被存储满,如果已存储满,则直接发送至WM模块,否则等存储满后再发送至WM模块。WM模块写完数据进行改表的时候,先判断CCB中的flag,如果为1,一次就可以把12个旧PBA从L2P表中读上来,生成新的PBA后,一次性就可以把12个新的PBA更新到L2P表中。这样WM模块在处理每一个CCB的时候都可以减少12次循环和比较判断,大大的减小了WM模块的运算压力。
其中,如果flag的值为0,说明该CCB中的LBA已经不连续,则DM模块将该flag告知WM模块,WM模块发现CCB中的flag为0,则继续按照上述相关技术中的改表操作,先循环遍历并判断,每找到一个最大连续的LBA就改一次表,直到把12个4KB数据的表都改完为止。
其中,如果flag的值为1,说明该CCB中的LBA连续,则DM模块按照数据拆分顺序,判断一个4KB数据的LBA与前一个4KB数据的LBA是否连续,每个CCB中的第一个4KB数据用来申请CCB,其他的无需申请,直接使用第一个4KB数据申请的CCB,依次往后使用即可。第一个CCB在申请CCB的时候,把与该CCB对应的flag设置为1,默认表示该CCB中12个4KB数据的LBA是连续的,同时,使DM模块中的first_lba字段设置为第一个4KB数据对应的LBA,在为每个4KB数据分配CCB的时候,若该4KB数据的LBA与前一个4KB数据的LBA连续,则保持CCB对应的flag仍设置为1,若该4KB数据的LBA与前一个4KB数据的LBA不连续,则将该CCB对应的flag设置为0。
在一些可选的实施方式中,将数据包以及数据包中多个数据的逻辑区块地址的存储至缓存区中的至少一个缓存模块中,包括:按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的拆包数据以及满足预设数量的拆包数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据。
具体地,每次处理完一笔4KB数据后,可以通过CCB中存储的4KB数据的数量,判断该CCB是否已经被存储满,如果已存储满,则直接发送至WM模块,否则等存储满后再发送至WM模块。
在一些可选的实施方式中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的拆包数据以及满足预设数量的拆包数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,包括:将目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块中;判断目标缓存模块中当前存储的拆包数据的数量是否满足预设数量;在目标缓存模块中当前存储的拆包数据的数量未满足预设数量的情况下,按照多个拆包数据的拆分顺序,将目标拆包数据的下一个拆包数据以及下一个拆包数据的逻辑区块地址存储至目标缓存模块中;在目标缓存模块中当前存储的拆包数据的数量满足预设数量的情况下,停止向目标缓存模块中的存储操作,得到存储有多个写入数据的目标缓存模块。
在上述可选的实施方式中,将数据包以及数据包中多个数据的逻辑区块地址的存储至缓存区中的至少一个缓存模块中,还可以包括:根据目标缓存模块的存储容量和每个拆包数据的大小,确定预设数量。
示例性的,一个CCB能够携带3个page的数据量,即12个4KB数据。因此,设定预设数量为12,每次处理完一笔4KB数据后,可以判断当前CCB中存储的4KB数据的数量是否达到12个,若数量未达到,判断为该CCB未被存储满,则进行下一笔4KB数据的梳理,知道该CCB中存储满4KB数据后,再发送至WM模块,若数量已达到,判断为该CCB已经被存储满,则直接发送至WM模块。
在一些可选的实施方式中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,包括:在每次拆分出拆包数据之后,判断至少一个缓存模块中是否存在可用缓存模块,其中,可用缓存模块为具有可用存储空间的缓存模块;在至少一个缓存模块中存在可用缓存模块的情况下,确定可用缓存模块为目标缓存模块;将拆分出的当前拆包数据以及当前拆包数据的逻辑区块地址存储至目标缓存模块中,得到存储至目标缓存模块中的写入数据。
具体地,拆分出一个4KB数据之后,判断当前缓存区中是否有可用CCB,若具有可用CCB,则直接使用已有的CCB,并记录该4KB数据在CCB中的相对偏移,用cache_entry_offset表示,取值选自0-11。
在一些可选的实施方式中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,还包括:在至少一个缓存模块中不存在可用缓存模块的情况下,生成申请请求;根据申请请求,在缓存区中生成新的缓存模块,得到目标缓存模块;将拆分出的当前拆包数据存储至新的缓存模块中,得到存储至目标缓存模块中的写入数据。
在上述可选的实施方式中,按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的目标写入数据以及目标写入数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据,还可以包括:在生成新的缓存模块之后,将新的缓存模块初始化,得到目标缓存模块,其中,目标缓存模块具有第一标记参数,第一标记参数用于指示多个写入数据的逻辑区块地址连续。
具体地,拆分出一个4KB数据之后,判断当前缓存区中是否有可用CCB,若不具有可用CCB,则申请新的CCB,即每个CCB中的第一个4KB数据用来申请CCB,其他的无需申请,直接使用第一个4KB数据申请的CCB,依次往后使用即可。第一个4KB数据在申请CCB的时候,把flag值设置为1,默认表示该CCB中12个4KB数据的LBA是连续的,同时,把first_lba设置为第一个4KB数据对应的LBA。
在一些可选的实施方式中,按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果,包括:在将拆分出的目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块之后,记录目标缓存模块中目标拆包数据的相对偏移参数,其中,相对偏移参数表示为目标缓存模块中存储顺位在目标拆包数据之前的拆包数据的数量;计算目标拆包数据的逻辑区块地址与存储至目标缓存模块中的第一个拆包数据的逻辑区块地址的差值;判断相对偏移参数与差值是否相等,得到判断结果。
在上述可选的实施方式中,在相对偏移参数与差值相等的情况下,生成第一标记参数,其中,第一标记参数用于表示多个写入数据的逻辑区块地址连续;在相对偏移参数与差值不相等的情况下,生成第二标记参数,其中,第二标记参数用于表示多个写入数据中的第一写入数据与第二写入数据的逻辑区块地址不连续,第一写入数据与第二写入数据为拆分顺位相邻的两个拆包数据。
具体地,每个4KB数据在分配CCB的时候,记录该4KB数据在CCB中的相对偏移量,用cache_entry_offset表示,取值选自0-11。判断该笔4KB数据对应的cache_entry_offset的值,如果cache_entry_offset的值为0,表示该笔数据是CCB中的第一个4KB数据,不需要判断连续性,不需要修改flag的值,直接判断该CCB是否已经被存储满,如果cache_entry_offset的值不为0,说明该笔数据不是CCB中的第一个4KB数据。此时,可以用该笔数据的cache entry中记录的LBA的值和first_lba的值相减,把差值和cache_entry_offset做比较,如果相等,则说明与前一个4KB数据的LBA是连续的,不需要修改flag的值,如果不等,则把CCB对应的flag的值清0,然后再判断该CCB是否已经被存储满,如果已存储满,直接发送至WM模块,否则等存储满后再发送至WM模块。
在上述步骤S204中,将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中。
具体地,SSD的写入数据流程中需要两次修改L2P表,第二次是把数据从Buffer中写到NAND, 即WM模块根据接收到的LBA,为该LBA分配PBA,然后WM模块根据该PBA在NAND中写入数据,并通过改表操作把L2P表指向NAND地址。
在上述步骤S206中,判断多个写入数据的逻辑区块地址是否连续。
具体地,WM模块判断一个CCB中的LBA是否连续,若识别出一个CCB中的LBA连续,则无需再循环一遍CCB中的每一个写入数据及其LBA,也无需每次都需要从动态随机存取存储器(DRAM)中读取LBA进行比较,而是可以采用CCB中的LBA直接一次性生成上述映射表,否则再按相关技术中的方法通过改表,把L2P表指向NAND地址。
在一些可选的实施方式中,判断多个写入数据的逻辑区块地址是否连续,包括:判断目标标记参数是否指示多个写入数据的逻辑区块地址连续。
在上述可选的实施方式中,判断目标标记参数是否指示多个写入数据的逻辑区块地址连续,包括:判断目标标记参数是否满足预设条件,其中,预设条件包括以下之一:目标标记参数为第一标记参数,以及目标标记参数为第二标记参数,其中,上述第一标记参数用于指示多个写入数据的逻辑区块地址连续,上述第二标记参数用于指示多个写入数据的逻辑区块地址不连续。
具体地,DM模块在拆包处理每个4KB数据的过程中就识别出一个CCB中的LBA是否连续,在识别出来以后,可以把CCB中的LBA的连续情况通过标记位直接告诉WM模块,WM模块在改表的时候,先根据标记位判断该CCB中的LBA是否连续,如果连续,则无需再循环一遍CCB中的每一个写入数据及其LBA,也无需每次都需要从动态随机存取存储器(DRAM)中读取LBA进行比较,而是可以采用CCB中的LBA直接一次性生成用于指向NAND地址的映射表,否则再按相关技术中的方法通过改表。
在上述步骤S208和S210中,在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址,并根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地。
在一些可选的实施方式中,根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,包括:根据多个写入数据在固态存储单元中的物理区块地址,更新第一映射表,得到目标映射表。
具体地,WM模块根据接收到的LBA,为该LBA分配PBA,然后WM模块根据该PBA在NAND中写入数据,写完数据进行改表的时候,WM模块先判断CCB对应的flag,如果为1,则可以直接把12个旧PBA从L2P表中读取出来,生成新的PBA后,就可以把12个新的PBA更新到L2P表中,从而使WM模块在处理每一个CCB的时候都可以减少12次循环和比较判断,大大的减小了WM模块的运算压力。如果WM模块识别出CCB中的flag为0,则继续按照上述相关技术中的改表操作,先循环遍历并判断,每找到一个最大连续的LBA就改一次表,直到把12个4k的表都改完为止。
本实施例采用上述可选的实施方式,使WM模块可以在改表的时候,优先判断DM模块传递的flag,如果flag为1,则WM模块不需要进行循环判断就可以一次性完成改表操作,从而在连续写场景下,使WM模块能够省去大量的循环判断次数以及对DRAM的访问,同时减少了持有锁的时间。
下面将结合具体示例,进一步说明本实施例中固态硬盘的数据写入方法,如图3所示,包括以下步骤:
1)拆分出一个4KB数据之后,判断当前缓存区中是否有可用CCB,若具有可用CCB,则直接使用已有的CCB,并记录该4KB数据在CCB中的相对偏移,用cache_entry_offset表示,取值选自0-11。
2)若当前缓存区中不具有可用CCB,则申请新的CCB,即每个CCB中的第一个4KB数据用来申请CCB,其他的无需申请,直接使用第一个4KB数据申请的,依次往后使用即可,第一个4KB数据在申请CCB的时候,把flag初始化为1,默认表示12个LBA是连续的,同时初始化first_lba,将cache_entry_offset设置为0。
3)每个4KB数据在分配CCB的时候,记录该4KB数据在CCB中的相对偏移,用cache_entry_offset表示,取值为0-11。
4)把数据从HOST搬到buffer以后,开始更新cache entry,修改L2P表,然后判断flag的值,如果为0,说明该CCB中的LBA已经不连续,直接执行步骤7),否则继续执行步骤5)。
5)判断该笔4KB数据对应的cache_entry_offset的值,如果cache_entry_offset的值为0,表示该笔数据是CCB中的第一个4KB数据,不需要判断连续性,不需要修改flag的值,直接执行步骤7),否则继续执行步骤6)。
6)如果cache_entry_offset的值不为0,说明该笔数据不是CCB中的第一个4KB数据,此时需要用该笔数据的cache entry中记录的LBA的值和first_lba的值相减,把差值和cache_entry_offset做比较,如果相等,说明是连续的,不需要修改flag的值,如果不等,把flag的值清0。
7)每次处理完一笔4KB数据后,需要判断该CCB是否已经被存储满了,如果已存储满,直接发送给WM模块,否则等存储满后再发送。
8)WM模块写完数据进行改表的时候,先判断CCB中的flag,如果为1,一次把12个PBA从L2P表中读上来,生成新的PBA后,把12个新的PBA更新到L2P表中。
9)如果WM模块识别出CCB中的flag为0,继续按照相关技术中的改表操作,先循环遍历并判断,每找到一个最大连续的LBA就改一次表,直到把12个4KB数据的表都改完为止。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。
在本实施例中还提供了一种固态硬盘的写操作装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本申请实施例的固态硬盘的写操作装置的结构框图,如图4所示,该装置包括:
第一获取模块32,用于获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,目标缓存模块位于固态硬盘的缓存区中;
存储模块34,用于将缓存区中的多个写入数据存储至固态硬盘的固态存储单元中;
第一判断模块36,用于判断多个写入数据的逻辑区块地址是否连续;
第二获取模块38,用于在判断结果指示多个写入数据的逻辑区块地址连续的情况下,获取多个写入数据在固态存储单元中的物理区块地址;
第一生成模块40,用于根据多个写入数据的逻辑区块地址和多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,目标映射表用于将多个写入数据的逻辑区块地址映射至固态存储单元中的物理区块地址。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本实施例通过上述模块,可以基于固态硬盘的写操作过程中一个缓存控制模块(CCB)中的逻辑区块地址(LBA)是连续的特点,以及写操作过程中需要把一笔命令携带的数据包拆成多个写入数据进行处理的特点,先识别出一个CCB中的LBA是否连续,如果连续,则无需再循环一遍CCB中的每一个写入数据及其LBA,也无需每次都需要从动态随机存取存储器(DRAM)中读取LBA进行比较,而是可以采用CCB中的LBA直接一次性生成上述映射表。因此,可以解决相关技术中大量的循环判断和对DRAM的访问极大的影响了固态硬盘的写操作性能的问题,达到提高固态硬盘写操作性能的效果。
在一些可选的实施方式中,上述第一获取模块32包括:第一获取子模块,用于从主机中获取目标命令携带的数据包以及数据包中每个数据的逻辑区块地址;第一存储子模块,用于将数据包以及数据包中多个数据的逻辑区块地址存储至缓存区中的至少一个缓存模块中,至少一个缓存模块包括目标缓存模块;第二获取子模块,用于获取存储至目标缓存模块中的多个数据的逻辑区块地址。
在一些可选的实施方式中,本实施例中的上述装置还包括:拆分模块,用于将数据包中的多个数据依次进行拆分,得到多个拆包数据;第二判断模块,用于按照多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到判断结果;生成模块,用于根据判断结果,生成目标缓存模块的目标标记参数,其中,目标标记参数用于指示目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续。
在一些可选的实施方式中,上述第二判断模块包括:按照多个拆包数据的拆分顺序,判断第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址是否连续,得到判断结果。
在一些可选的实施方式中,上述生成模块包括:第一更新子模块,用于根据判断结果,将目标缓存模块中的在先标记参数更新为目标标记参数,其中,在先标记参数用于表示第N-1个拆包数据的逻辑区块地址与第N-2个拆包数据的逻辑区块地址是否连续。
在一些可选的实施方式中,上述第一更新子模块包括:第一生成子模块,用于在得到第一判断结果的情况下,根据第一判断结果,生成第一标记参数,并将在先标记参数更新为第一标记参数,其中,第一判断结果为在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址连续的情况下得到的判断结果;第二生成子模块,用于在得到第二判断结果的情况下,根据第二判断结果,生成第二标记参数,并将在先标记参数更新为第二标记参数,其中,第二判断结果为在第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址不连续的情况下得到的判断结果。
在一些可选的实施方式中,上述拆分模块包括:将数据包中的多个数据依次进行拆分,得到具有相同大小的多个拆包数据。
在一些可选的实施方式中,上述第一存储子模块包括:第二存储子模块,用于按照多个拆包数据的拆分顺序,将多个拆包数据中满足预设数量的拆包数据以及满足预设数量的拆包数据的逻辑区块地址依次存储至目标缓存模块中,得到多个写入数据。
在一些可选的实施方式中,上述第二存储子模块包括:第三存储子模块,用于将目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块中;第一判断子模块,用于判断目标缓存模块中当前存储的拆包数据的数量是否满足预设数量;第四存储子模块,用于在目标缓存模块中当前存储的拆包数据的数量未满足预设数量的情况下,按照多个拆包数据的拆分顺序,将目标拆包数据的下一个拆包数据以及下一个拆包数据的逻辑区块地址存储至目标缓存模块中;停止子模块,用于在目标缓存模块中当前存储的拆包数据的数量满足预设数量的情况下,停止向目标缓存模块中的存储操作,得到存储有多个写入数据的目标缓存模块。
在一些可选的实施方式中,上述第一存储子模块还包括:根据目标缓存模块的存储容量和每个拆包数据的大小,确定预设数量。
在一些可选的实施方式中,上述第二存储子模块包括:第二判断子模块,用于在每次拆分出拆包数据之后,判断至少一个缓存模块中是否存在可用缓存模块,其中,可用缓存模块为具有可用存储空间的缓存模块;第一确定子模块,用于在至少一个缓存模块中存在可用缓存模块的情况下,确定可用缓存模块为目标缓存模块;第五存储子模块,用于将拆分出的当前拆包数据以及当前拆包数据的逻辑区块地址存储至目标缓存模块中,得到存储至目标缓存模块中的写入数据。
在一些可选的实施方式中,上述第二存储子模块还包括:第三生成子模块,用于在至少一个缓存模块中不存在可用缓存模块的情况下,生成申请请求;第四生成子模块,用于根据申请请求,在缓存区中生成新的缓存模块,得到目标缓存模块;第六存储子模块,用于将拆分出的当前拆包数据存储至新的缓存模块中,得到存储至目标缓存模块中的写入数据。
在一些可选的实施方式中,上述第二存储子模块还包括:在生成新的缓存模块之后,将新的缓存模块初始化,得到目标缓存模块,其中,目标缓存模块具有第一标记参数,第一标记参数用于指示多个写入数据的逻辑区块地址连续。
在一些可选的实施方式中,上述第二判断模块包括:记录子模块,用于在将拆分出的目标拆包数据以及目标拆包数据的逻辑区块地址存储至目标缓存模块之后,记录目标缓存模块中目标拆包数据的相对偏移参数,其中,相对偏移参数表示为目标缓存模块中存储顺位在目标拆包数据之前的拆包数据的数量;计算子模块,用于计算目标拆包数据的逻辑区块地址与存储至目标缓存模块中的第一个拆包数据的逻辑区块地址的差值;第三判断子模块,用于判断相对偏移参数与差值是否相等,得到判断结果。
在一些可选的实施方式中,上述生成模块包括:第五生成子模块,用于在相对偏移参数与差值相等的情况下,生成第一标记参数,其中,第一标记参数用于表示多个写入数据的逻辑区块地址连续;第六生成子模块,用于在相对偏移参数与差值不相等的情况下,生成第二标记参数,其中,第二标记参数用于表示多个写入数据中的第一写入数据与第二写入数据的逻辑区块地址不连续,第一写入数据与第二写入数据为拆分顺位相邻的两个拆包数据。
在一些可选的实施方式中,上述第一判断模块包括:第四判断子模块,用于判断目标标记参数是否指示多个写入数据的逻辑区块地址连续。
在一些可选的实施方式中,上述第四判断子模块包括:第五判断子模块,用于判断目标标记参数是否满足预设条件,其中,预设条件包括以下之一:目标标记参数为第一标记参数,以及目标标记参数为第二标记参数,其中,第一标记参数用于指示多个写入数据的逻辑区块地址连续,第二标记参数用于指示多个写入数据的逻辑区块地址不连续。
在一些可选的实施方式中,本实施例中的上述装置还包括:第三获取模块,用于获取多个写入数据在缓存区中的物理区块地址;第二生成模块,用于根据多个写入数据的逻辑区块地址和多个写入数据在缓存区中的物理区块地址,生成第一映射表,第一映射表用于将多个写入数据的逻辑区块地址映射至缓存区中的物理区块地址。
在一个示例性实施例中,上述第一生成模块包括:根据多个写入数据在固态存储单元中的物理区块地址,更新第一映射表,得到目标映射表。
本申请的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本申请的实施例还提供了一种固态硬盘,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述固态硬盘还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (22)
1.一种固态硬盘的数据写入方法,其特征在于,包括:
获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,所述目标缓存模块位于所述固态硬盘的缓存区中;
将所述缓存区中的所述多个写入数据存储至所述固态硬盘的固态存储单元中;
判断所述多个写入数据的逻辑区块地址是否连续;
在判断结果指示所述多个写入数据的逻辑区块地址连续的情况下,获取所述多个写入数据在固态存储单元中的物理区块地址;
根据所述多个写入数据的逻辑区块地址和所述多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,所述目标映射表用于将所述多个写入数据的逻辑区块地址映射至所述固态存储单元中的物理区块地址。
2.根据权利要求1所述的方法,其特征在于,所述获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,所述目标缓存模块位于所述固态硬盘的缓存区中,包括:
从主机中获取目标命令携带的数据包以及所述数据包中每个数据的逻辑区块地址;
将所述数据包以及所述数据包中多个数据的逻辑区块地址存储至所述缓存区中的至少一个缓存模块中,所述至少一个缓存模块包括所述目标缓存模块;
获取存储至所述目标缓存模块中的多个数据的逻辑区块地址。
3.根据权利要求2所述的方法,其特征在于,还包括:
将所述数据包中的多个数据依次进行拆分,得到多个拆包数据;
按照所述多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到所述判断结果;
根据所述判断结果,生成所述目标缓存模块的目标标记参数,其中,所述目标标记参数用于指示所述目标拆包数据的逻辑区块地址与所述前一个拆包数据的逻辑区块地址是否连续。
4.根据权利要求3所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到所述判断结果,包括:
按照所述多个拆包数据的拆分顺序,判断第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址是否连续,得到所述判断结果。
5.根据权利要求4所述的方法,其特征在于,所述根据所述判断结果,生成所述目标缓存模块的目标标记参数,包括:
根据所述判断结果,将所述目标缓存模块中的在先标记参数更新为所述目标标记参数,其中,所述在先标记参数用于表示所述第N-1个拆包数据的逻辑区块地址与第N-2个拆包数据的逻辑区块地址是否连续。
6.根据权利要求5所述的方法,其特征在于,所述根据所述判断结果,将所述目标缓存模块中的在先标记参数更新为所述目标标记参数,包括:
在得到第一判断结果的情况下,根据所述第一判断结果,生成第一标记参数,并将所述在先标记参数更新为所述第一标记参数,其中,所述第一判断结果为在所述第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址连续的情况下得到的判断结果;
在得到第二判断结果的情况下,根据所述第二判断结果,生成第二标记参数,并将所述在先标记参数更新为所述第二标记参数,其中,所述第二判断结果为在所述第N个拆包数据的逻辑区块地址与第N-1个拆包数据的逻辑区块地址不连续的情况下得到的判断结果。
7.根据权利要求3所述的方法,其特征在于,所述将所述数据包中的多个数据依次进行拆分,得到所述多个拆包数据,包括:
将所述数据包中的多个数据依次进行拆分,得到具有相同大小的所述多个拆包数据。
8.根据权利要求3所述的方法,其特征在于,所述将所述数据包以及所述数据包中多个数据的逻辑区块地址的存储至所述缓存区中的至少一个缓存模块中,包括:
按照所述多个拆包数据的拆分顺序,将所述多个拆包数据中满足预设数量的拆包数据以及所述满足预设数量的拆包数据的逻辑区块地址依次存储至所述目标缓存模块中,得到所述多个写入数据。
9.根据权利要求8所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,将所述多个拆包数据中满足预设数量的拆包数据以及所述满足预设数量的拆包数据的逻辑区块地址依次存储至所述目标缓存模块中,得到所述多个写入数据,包括:
将所述目标拆包数据以及所述目标拆包数据的逻辑区块地址存储至所述目标缓存模块中;
判断所述目标缓存模块中当前存储的拆包数据的数量是否满足所述预设数量;
在所述目标缓存模块中当前存储的拆包数据的数量未满足所述预设数量的情况下,按照所述多个拆包数据的拆分顺序,将所述目标拆包数据的下一个拆包数据以及所述下一个拆包数据的逻辑区块地址存储至所述目标缓存模块中;
在所述目标缓存模块中当前存储的拆包数据的数量满足所述预设数量的情况下,停止向所述目标缓存模块中的存储操作,得到存储有所述多个写入数据的所述目标缓存模块。
10.根据权利要求8所述的方法,其特征在于,所述将所述数据包以及所述数据包中多个数据的逻辑区块地址的存储至所述缓存区中的至少一个缓存模块中,还包括:
根据所述目标缓存模块的存储容量和每个所述拆包数据的大小,确定所述预设数量。
11.根据权利要求8所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,将所述多个拆包数据中满足预设数量的目标写入数据以及所述目标写入数据的逻辑区块地址依次存储至所述目标缓存模块中,得到所述多个写入数据,包括:
在每次拆分出所述拆包数据之后,判断所述至少一个缓存模块中是否存在可用缓存模块,其中,所述可用缓存模块为具有可用存储空间的缓存模块;
在所述至少一个缓存模块中存在所述可用缓存模块的情况下,确定所述可用缓存模块为所述目标缓存模块;
将拆分出的当前拆包数据以及所述当前拆包数据的逻辑区块地址存储至所述目标缓存模块中,得到存储至所述目标缓存模块中的写入数据。
12.根据权利要求11所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,将所述多个拆包数据中满足预设数量的目标写入数据以及所述目标写入数据的逻辑区块地址依次存储至所述目标缓存模块中,得到所述多个写入数据,还包括:
在所述至少一个缓存模块中不存在所述可用缓存模块的情况下,生成申请请求;
根据所述申请请求,在所述缓存区中生成新的缓存模块,得到所述目标缓存模块;
将拆分出的当前拆包数据存储至所述新的缓存模块中,得到存储至所述目标缓存模块中的写入数据。
13.根据权利要求12所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,将所述多个拆包数据中满足预设数量的目标写入数据以及所述目标写入数据的逻辑区块地址依次存储至所述目标缓存模块中,得到所述多个写入数据还包括:
在生成所述新的缓存模块之后,将所述新的缓存模块初始化,得到所述目标缓存模块,其中,所述目标缓存模块具有第一标记参数,所述第一标记参数用于指示所述多个写入数据的逻辑区块地址连续。
14.根据权利要求3至13中任一项所述的方法,其特征在于,所述按照所述多个拆包数据的拆分顺序,判断目标拆包数据的逻辑区块地址与前一个拆包数据的逻辑区块地址是否连续,得到所述判断结果,包括:
在将拆分出的目标拆包数据以及所述目标拆包数据的逻辑区块地址存储至所述目标缓存模块之后,记录所述目标缓存模块中所述目标拆包数据的相对偏移参数,其中,所述相对偏移参数表示为所述目标缓存模块中存储顺位在所述目标拆包数据之前的拆包数据的数量;
计算所述目标拆包数据的逻辑区块地址与存储至所述目标缓存模块中的第一个拆包数据的逻辑区块地址的差值;
判断所述相对偏移参数与所述差值是否相等,得到所述判断结果。
15.根据权利要求14所述的方法,其特征在于,所述根据所述判断结果,生成所述目标缓存模块的目标标记参数,包括:
在所述相对偏移参数与所述差值相等的情况下,生成第一标记参数,其中,所述第一标记参数用于表示所述多个写入数据的逻辑区块地址连续;
在所述相对偏移参数与所述差值不相等的情况下,生成第二标记参数,其中,所述第二标记参数用于表示所述多个写入数据中的第一写入数据与第二写入数据的逻辑区块地址不连续,所述第一写入数据与所述第二写入数据为拆分顺位相邻的两个拆包数据。
16.根据权利要求15所述的方法,其特征在于,所述判断所述多个写入数据的逻辑区块地址是否连续,包括:
判断所述目标标记参数是否指示所述多个写入数据的逻辑区块地址连续。
17.根据权利要求16所述的方法,其特征在于,所述判断所述目标标记参数是否指示所述多个写入数据的逻辑区块地址连续,包括:
判断所述目标标记参数是否满足预设条件,其中,所述预设条件包括以下之一:所述目标标记参数为第一标记参数,以及所述目标标记参数为第二标记参数,其中,所述第一标记参数用于指示所述多个写入数据的逻辑区块地址连续,所述第二标记参数用于指示所述多个写入数据的逻辑区块地址不连续。
18.根据权利要求1所述的方法,其特征在于,还包括:
获取所述多个写入数据在所述缓存区中的物理区块地址;
根据所述多个写入数据的逻辑区块地址和所述多个写入数据在所述缓存区中的物理区块地址,生成第一映射表,所述第一映射表用于将所述多个写入数据的逻辑区块地址映射至所述缓存区中的物理区块地址。
19.根据权利要求18所述的方法,其特征在于,所述根据所述多个写入数据的逻辑区块地址和所述多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,包括:
根据所述多个写入数据在固态存储单元中的物理区块地址,更新所述第一映射表,得到所述目标映射表。
20.一种固态硬盘的写操作装置,其特征在于,包括:
第一获取模块,用于获取存储至目标缓存模块中的多个写入数据的逻辑区块地址,所述目标缓存模块位于所述固态硬盘的缓存区中;
存储模块,用于将所述缓存区中的所述多个写入数据存储至所述固态硬盘的固态存储单元中;
判断模块,用于判断所述多个写入数据的逻辑区块地址是否连续;
第二获取模块,用于在判断结果指示所述多个写入数据的逻辑区块地址连续的情况下,获取所述多个写入数据在固态存储单元中的物理区块地址;
生成模块,用于根据所述多个写入数据的逻辑区块地址和所述多个写入数据在固态存储单元中的物理区块地址,生成目标映射表,所述目标映射表用于将所述多个写入数据的逻辑区块地址映射至所述固态存储单元中的物理区块地址。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至19任一项中所述的方法的步骤。
22.一种固态硬盘,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至19任一项中所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310607939.3A CN116340198B (zh) | 2023-05-26 | 2023-05-26 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310607939.3A CN116340198B (zh) | 2023-05-26 | 2023-05-26 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116340198A true CN116340198A (zh) | 2023-06-27 |
CN116340198B CN116340198B (zh) | 2023-08-04 |
Family
ID=86884423
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310607939.3A Active CN116340198B (zh) | 2023-05-26 | 2023-05-26 | 固态硬盘的数据写入方法、其装置及固态硬盘 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116340198B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149091A (zh) * | 2023-10-23 | 2023-12-01 | 四川云海芯科微电子科技有限公司 | 一种固态硬盘数据保存方法及相关装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200065241A1 (en) * | 2018-08-22 | 2020-02-27 | SK Hynix Inc. | Data storage device and operating method thereof |
CN111694770A (zh) * | 2019-03-15 | 2020-09-22 | 杭州宏杉科技股份有限公司 | 一种处理io请求的方法及装置 |
-
2023
- 2023-05-26 CN CN202310607939.3A patent/CN116340198B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200065241A1 (en) * | 2018-08-22 | 2020-02-27 | SK Hynix Inc. | Data storage device and operating method thereof |
CN111694770A (zh) * | 2019-03-15 | 2020-09-22 | 杭州宏杉科技股份有限公司 | 一种处理io请求的方法及装置 |
Non-Patent Citations (1)
Title |
---|
赵建明;姚念民;韩永;蔡绍滨;: "一种针对iSCSI存储的缓存替换算法", 计算机工程与科学, no. 06 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117149091A (zh) * | 2023-10-23 | 2023-12-01 | 四川云海芯科微电子科技有限公司 | 一种固态硬盘数据保存方法及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN116340198B (zh) | 2023-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11029848B2 (en) | File management method, distributed storage system, and management node | |
US10761731B2 (en) | Array controller, solid state disk, and method for controlling solid state disk to write data | |
CN106354615B (zh) | 固态硬盘日志生成方法及其装置 | |
US9489409B2 (en) | Rollover strategies in a N-bit dictionary compressed column store | |
JP2018518733A (ja) | ファイル操作方法及び装置 | |
CN107122130B (zh) | 一种数据重删方法及装置 | |
CN112632069B (zh) | 哈希表数据存储管理方法、装置、介质和电子设备 | |
EP3196767B1 (en) | Method for writing data into flash memory device, flash memory device and storage system | |
CN110377233B (zh) | Ssd读性能优化方法、装置、计算机设备及存储介质 | |
CN107193503B (zh) | 一种数据重删方法及存储设备 | |
CN106201652B (zh) | 一种数据处理方法及虚拟机 | |
CN116340198B (zh) | 固态硬盘的数据写入方法、其装置及固态硬盘 | |
CN104503703A (zh) | 缓存的处理方法和装置 | |
CN114063893A (zh) | 数据储存装置与数据处理方法 | |
US9524236B1 (en) | Systems and methods for performing memory management based on data access properties | |
CN110737607B (zh) | 管理hmb内存的方法、装置、计算机设备及存储介质 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN113986773A (zh) | 基于固态硬盘的写放大优化方法、装置及计算机设备 | |
KR102330394B1 (ko) | 컨트롤러의 작동 방법과 상기 컨트롤러를 포함하는 장치의 작동 방법 | |
CN108427648B (zh) | 存储系统页内脏数据索引方法和装置 | |
US9632950B2 (en) | Storage control device controlling access to a storage device and access controlling method of a storage device | |
CN117215485A (zh) | Zns ssd管理方法及数据写入方法、存储装置、控制器 | |
US11226738B2 (en) | Electronic device and data compression method thereof | |
US11467766B2 (en) | Information processing method, apparatus, device, and system | |
US9990278B2 (en) | Overlaid erase block mapping |
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 |