CN114741327B - 一种垃圾回收方法及装置 - Google Patents

一种垃圾回收方法及装置 Download PDF

Info

Publication number
CN114741327B
CN114741327B CN202210431218.7A CN202210431218A CN114741327B CN 114741327 B CN114741327 B CN 114741327B CN 202210431218 A CN202210431218 A CN 202210431218A CN 114741327 B CN114741327 B CN 114741327B
Authority
CN
China
Prior art keywords
write
instruction
once
solid state
state disk
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
Application number
CN202210431218.7A
Other languages
English (en)
Other versions
CN114741327A (zh
Inventor
张宇
侯普
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yusur Technology Co ltd
Original Assignee
Yusur Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yusur Technology Co ltd filed Critical Yusur Technology Co ltd
Priority to CN202210431218.7A priority Critical patent/CN114741327B/zh
Publication of CN114741327A publication Critical patent/CN114741327A/zh
Application granted granted Critical
Publication of CN114741327B publication Critical patent/CN114741327B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开实施例涉及一种垃圾回收方法及装置,其中该方法包括:在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;当写指令为写一次指令时,根据写一次指令将数据写入到预先分配的第一块组中;当写指令为非写一次的普通写指令时,根据普通写指令将数据写入到预先分配的第二块组中;在进行垃圾回收过程中,对第二块组进行扫描,且不对第一块组进行扫描。本公开能够提升垃圾回收效率,进而优化固态硬盘的写入性能。

Description

一种垃圾回收方法及装置
技术领域
本公开涉及计算机技术领域,尤其涉及一种垃圾回收方法及装置。
背景技术
垃圾回收(Garbage Collection,GC)对固态硬盘(Solid State Drives,SSD)的性能有很大影响。在垃圾回收过程中,有效数据(仍在使用中的数据)较多,则需要较多的搬移,后台搬移工作会占用较多固态硬盘内部资源,影响用户的使用。由于一个block内部的数据是否有效取决于用户是怎么使用固态硬盘的,也就是用户的读写行为对垃圾回收的效率有很大的影响。然而,用户的行为是不可提前预测的,因此,优化垃圾回收效率具有较大的难度。
发明内容
为了解决上述技术问题,本公开提供了一种垃圾回收方法及装置。
本公开实施例提供了一种垃圾回收方法,包括:
在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;
当所述写指令为写一次指令时,根据所述写一次指令将数据写入到预先分配的第一块组中;
当所述写指令为非写一次的普通写指令时,根据所述普通写指令将数据写入到预先分配的第二块组中;其中,所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同类型的块组;
在进行垃圾回收过程中,对所述第二块组进行扫描,且不对所述第一块组进行扫描。
可选的,所述固态硬盘支持写一次指令,包括:
接收所述软件系统发送的识别命令;所述识别命令用于识别所述固态硬盘是否支持所述写一次指令;针对所述识别命令返回预先添加有支持标志的返回字段。
可选的,所述接收软件系统的写指令,包括:
通过所述固态硬盘的接口接收所述软件系统发送的携带写一次标志的写指令;将所述携带写一次标志的写指令转换为写一次指令;将所述写一次指令传给所述固态硬盘的控制器。
可选的,所述方法还包括:
在接收到所述写一次指令后,检测所述写一次指令的数据是否发生缺页异常;其中,所述缺页异常为:数据发生覆盖写且所述覆盖写写入的数据块属于所述第一块组;如果是,则将预设的错误码返回给所述软件系统。
可选的,所述方法还包括:
接所述收软件系统的删除命令;
当所述删除命令是针对所述第一块组中的第一数据块时,将所述第一数据块标记为无效;
或者,当所述删除命令是针对所述第二块组中的第二数据块时,对所述第二数据块进行垃圾回收;将垃圾回收后的所述第二数据块标记为无效。
可选的,所述方法还包括:
通过所述固态硬盘的接口接收针对所述目标文件的写一次指令;其中,所述目标文件具有写一次标志;
在所述写一次指令的数据发生覆盖写且所述覆盖写写入的数据块属于所述第一块组的情况下,执行预设的异常处理操作;其中,所述异常处理操作为:将所述写一次指令对应的普通写指令传给所述固态硬盘的控制器,所述控制器根据所述普通写指令将数据写入到预先分配的第二块组中,并将所述覆盖写写入的数据块标记为属于所述第二块组;
记录针对所述目标文件的所述异常处理操作的执行次数;判断所述执行次数是否超过预设的次数阈值;如果超过,则清除所述目标文件的写一次标志。
可选的,所述方法还包括:
统计预设时间段内接收到的针对所述目标文件的写一次指令的指令个数;判断所述指令个数是否大于预设的个数阈值;其中,所述个数阈值是与所述目标文件的大小正相关的阈值;如果大于,则关闭所述目标文件的写一次标志;如果不大于,则重新开启所述目标文件的写一次标志。
本公开实施例还提供了一种垃圾回收方法,包括:
向固态硬盘发送写指令;其中,所述固态硬盘支持写一次指令;所述写指令包括:写一次指令和非写一次的普通写指令。
可选的,所述方法还包括:
当软件系统的驱动程序扫描到所述固态硬盘后,向所述固态硬盘发送识别命令;所述识别命令用于识别所述固态硬盘是否支持所述写一次指令;
接收所述固态硬盘针对所述查询命令的返回字段;
如果所述返回字段中添加有预设的支持标志,则确定所述固态硬盘支持所述写一次指令。
可选的,所述向固态硬盘发送写指令,包括:
接收用户的应用程序发送的写指令;检查所述写指令的文件是否具有写一次标志;如果没有所述写一次标志,则确定所述写指令为非写一次的普通写指令;如果有所述写一次标志,则通过驱动程序向所述固态硬盘发送携带所述写一次标志的写指令。
本公开实施例还提供了一种垃圾回收装置,包括:
指令接收模块,用于在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;
第一写入模块,用于当所述写指令为写一次指令时,根据所述写一次指令将数据写入到预先分配的第一块组中;
第二写入模块,用于当所述写指令为非写一次的普通写指令时,根据所述普通写指令将数据写入到预先分配的第二块组中;其中,所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同的块组;
垃圾回收模块,用于在进行垃圾回收过程中,对所述第二块组进行扫描,且不对所述第一块组进行扫描。
本公开实施例还提供了一种垃圾回收装置,包括:
指令发送模块,用于向固态硬盘发送写指令;其中,所述固态硬盘支持写一次指令;所述写指令包括:写一次指令和非写一次的普通写指令。
本公开实施例还提供了一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现如本公开实施例提供的方法。
本公开实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行如本公开实施例提供的方法。
本公开实施例提供的技术方案与现有技术相比具有如下优点:
本公开实施例提供的一种垃圾回收方法及装置,其中该方法包括:在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;当写指令为写一次指令时,根据写一次指令将数据写入到预先分配的第一块组中;当写指令为非写一次的普通写指令时,根据普通写指令将数据写入到预先分配的第二块组中;在进行垃圾回收过程中,对第二块组进行扫描,且不对第一块组进行扫描。本公开能够提升垃圾回收效率,进而优化固态硬盘的写入性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的一种垃圾回收方法的流程示意图;
图2为本公开实施例提供的一种接收软件系统的写指令的方法流程图;
图3为本公开实施例提供的一种固态硬盘的示意图;
图4为本公开实施例提供的另一种垃圾回收方法的流程示意图;
图5为本公开实施例提供的一种垃圾回收装置的结构示意图;
图6为本公开实施例提供的另一种垃圾回收装置的结构示意图;
图7为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
垃圾回收过程为:固态硬盘中,写数据以page(页)为单位,一般一个page是4096Bytes,而擦除以block(数据块或物理块)为单位,通常是几M(兆字节)。当一个数据块内的page都被写过一次后,需要对整个block做擦除操作才能再次写,而擦除前要将这个block内部的有效的数据搬移到另外一个地方保存起来。可见,如果有效数据较多,则需要较多的搬移,后台搬移工作会占用较多固态硬盘内部资源,影响用户的使用。因此,高效的垃圾回收对具有重大意义。由于用户的读写行为对垃圾回收的效率有很大的影响,然而,用户的行为是不可提前预测的,优化垃圾回收效率具有较大的难度。因此,如何提高固态硬盘的垃圾回收效率,从而提高固态硬盘的随机写性能,是现今急需解决的问题。
基于此,本公开实施例结合固态硬盘上述写之前需要擦除的特点和应用程序的IO(Input/Output,输入/输出)模式,提供一种垃圾回收方法及装置,以提高固态硬盘的垃圾回收效率。
为了便于理解本公开实施例提供的垃圾回收方法,首先对该方法的应用场景进行描述。本实施例基于固态硬盘和软件系统实现。其中,固体硬盘的硬件一般包括:接口、控制器和FLASH(闪存);软件系统一般包括:驱动程序、操作系统和应用软件;驱动程序与固态硬盘的硬件交互,应用软件诸如为用户的应用程序。
基于上述固态硬盘和软件系统,本公开实施例提供一种垃圾回收方法,该方法可应用于固态硬盘。如图1所示,该方法具体包括如下步骤:
步骤S102,在固态硬盘支持写一次指令的情况下,接收软件系统的写指令。
在本实施例中,写一次指令为write once指令,该指令可以添加到诸如NVME(NVMExpress,非易失性内存主机控制器接口规范)标准或者SCSI(Small Computer SystemInterface,小型计算机系统接口)标准等其它标准的IO标准当中。示例性的,可以在NVME标准的identify命令中添加代表write once指令的操作码(opcode),或者,在SCSI标准的inquiry命令的返回字段中添加代表write once指令的字段,以查询固态硬盘的控制器是否支持写一次指令。查询固态硬盘的控制器是否支持写一次指令的方式可参照如下所示:
当软件系统的驱动程序扫描到固态硬盘后,向固态硬盘发送识别命令;识别命令用于识别固态硬盘是否支持写一次指令。相应地,固态硬盘接收软件系统发送的识别命令。
具体的,对于NVME标准,识别命令为identify命令;对于SCSI标准,识别命令为inquiry命令。以NVME标准为例,在系统初始化的时候,NVME的驱动程序发送identify命令给固态硬盘,固态硬盘接收到identify命令后,向软件系统发送返回字段。
在实际应用中,上述写一次指令是扩展指令,固态硬盘的控制器可以支持写一次指令,也可以不支持写一次指令。如果固态硬盘支持写一次指令,那么固态硬盘针对识别命令返回预先添加有支持标志的返回字段;在此情况下,软件系统接收固态硬盘针对查询命令的返回字段,并根据添加有支持标志的返回字段确定固态硬盘支持写一次指令。当然,如果固态硬盘不支持,则返回字段中不会添加有支持标志,相应地,软件系统不会使用写一次指令。
如图2所示,在此提供一种固态硬盘接收软件系统的写指令的实施例,包括以下步骤:
步骤S202,软件系统接收用户的应用程序发送的写指令。
本实施例中,软件系统中的应用软件打开一个文件,操作系统调用open命令打开文件时可以指定写一次标志,该写一次标志例如叫做F_WRITEONCE;操作系统检查固态硬盘是否支持写一次指令;如果支持,则在文件描述中记录上述写一次标志,如果不支持,则不记录该写一次标志。需要说明的是,在不支持的情况下,由于写一次指令对固态硬盘是友好的,因此并不会影响程序的运行,从而一个应用可以运行在有或者没有写一次指令的固态硬盘上。
应用软件使用接口发送IO,该接口比如为POSIX(Portable Operating SystemInterface,可移植操作系统接口)。在该IO是一个写指令的情况下,执行如下步骤S204。
步骤S204,检查写指令的文件是否具有写一次标志。具体可以通过软件系统的操作系统检测文件是否具有写一次标志F_WRITONCE。如果没有写一次标志,则执行如下步骤S206;如果有写一次标志,则执行如下步骤S208。
步骤S206,确定写指令为非写一次的普通写指令。
如果没有写一次标志,表示用户没有在打开文件的时候指定写一次标志F_WRITONCE,或者,打开时指定了写一次标志F_WRITONCE,但是固态硬盘不支持写一次指令。在没有写一次标志的情况下,将写指令作为普通写指令直接发送给固态硬盘。
步骤S208,通过驱动程序向固态硬盘发送携带写一次标志的写指令。
在具体实施中,提交给操作系统内部的通用块层一个携带写一次标志的IO请求,通用块层将该IO请求发送给驱动程序;驱动程序根据IO请求向固态硬盘发送携带写一次标志的写指令。
步骤S210,固态硬盘基于携带写一次标志的写指令得到写一次指令。在一种具体实施方式中,通过固态硬盘的接口接收软件系统发送的携带写一次标志的写指令;将携带写一次标志的写指令转换为写一次指令;将写一次指令传给固态硬盘的控制器。
至此,固态硬盘接收到软件系统的写指令,该写指令可以是如步骤S206所示的普通写指令,或者也可以是如步骤S208和S210所示的写一次指令。
步骤S104,当写指令为写一次指令时,根据写一次指令将数据写入到预先分配的第一块组中。
步骤S106,当写指令为非写一次的普通写指令时,根据普通写指令将数据写入到预先分配的第二块组中;其中,第一块组和第二块组是从固态硬盘的块存储池中分配的不同类型的块组。
固态硬盘的Flash内部包括多个数据块,多个数据块可以看成为块存储池(blockpool),或者说,块存储池由固定大小的数据块构成。写数据的时候,从块存储池里分配数据块写入数据。
如图3所示,本实施例中,通过固态硬盘的控制器对块存储池进行管理,从固态硬盘的块存储池中分配的不同类型的块组(block group),块组包括多个数据块。一种类型的块组用于存放写一次指令的数据,称作第一块组;另一种类型的块组用于存放普通写指令的数据,称作第二块组。
固态硬盘的控制器通过接口接收到上层软件发出写一次指令时,根据写一次指令将数据写入到第一块组中。作为对比,固态硬盘的控制器接收到普通写指令时,会根据普通写指令将数据写入到第二块组中。由此,写一次指令和普通写指令各自的数据将在两个不同的块组内部,且可以理解的是,写一次指令的数据都是有效数据。
步骤S108,在进行垃圾回收过程中,对第二块组进行扫描,且不对第一块组进行扫描。
本实施例在进行垃圾回收过程中,只需要对第二块组进行扫描,而第一块组内部的数据块则不需要扫描,从而垃圾回收的扫描范围变小;进而,由于第一块组内部都是有效数据,垃圾回收扫描到有效数据的几率也相应减小,需要进行的数据搬移减小,从而扫描回收数据块的效率也会变高,提升了固态硬盘的性能。
本公开实施例提供的垃圾回收方法,基于软件系统和支持写一次指令的固态硬盘,在固态硬盘接收软件系统的写指令后,当写指令为写一次指令时,将数据写入到第一块组中;当写指令为普通写指令时,将数据写入到第二块组中;这样,在进行垃圾回收过程中,只对第二块组进行扫描,而无需对第一块组进行扫描,使垃圾回收的扫描范围得到有效控制,也就是不需要扫描写一次指令的数据,垃圾回收需要搬移的有效数据减少,大大提升垃圾回收效率,明显优化固态硬盘后台的写性能。例如在某一场景中,用户下发的写一次指令的数据量为X,普通写指令的数据量为Y,那么垃圾回收可以只扫描Y的数据,减少了X/(X+Y)的扫描量,相应地平均减少了X/(X+Y)的数据搬移。
进一步的,本实施例还可以提供如下针对写一次指令的报错方法,包括以下内容。
固态硬盘在接收到写一次指令后,检测写一次指令的数据是否发生缺页异常;其中,缺页异常为:数据发生覆盖写且覆盖写写入的数据块属于第一块组。
具体而言,携带有写一次标志F_WRITEONCE的文件,如果被写入过某一数据块后发生一次覆盖写,那么写一次指令在发送给固态硬盘的控制器后,控制器检测写一次指令的数据是否发生缺页异常。如果发生缺页异常,也即检测到数据发生覆盖写且覆盖写写入的数据块属于第一块组。
在此情况下,将预设的错误码返回给软件系统。其中,固态硬盘控制器预先添加有错误码,该错误码可以为write once page fault,用于表示发生缺页异常。控制器向软件系统的驱动程序返回上述错误码,驱动程序再将错误码返回给文件系统,进而返回给用户。例如,用户向第20个数据块内写了4k数据,之后再次对第20个数据块写4k数据,且第20个数据块属于第一块组;此时,用户会收到错误码write once page fault。
本实施例提供一种文件删除方法,参照如下所示:固态硬盘接收软件系统的删除命令。在删除文件的时候,软件系统的操作系统向固态硬盘的控制器下发删除命令(如discard命令)。
当删除命令是针对第一块组中的第一数据块时,将第一数据块标记为无效。如果待删除的第一数据块属于第一块组,那么整个第一数据块将会无效,可以直接将第一数据块擦除。
或者,当删除命令是针对第二块组中的第二数据块时,对第二数据块进行垃圾回收;将垃圾回收后的第二数据块标记为无效。对于第二块组中的第二数据块,只有部分page无效,还需要进一步垃圾回收之后,才能释放第二数据块。
考虑到现实有不少应用在写文件的时候本身就是写一次,比如用户打开一个日志文件,用户只会往里append(追加)的写数据和偶尔的读数据,一般不会出现覆盖写。还有一些其它文件有这类似的特点,也就是实际大多数情况下都是写一次。基于此,本实施例提供一种自动识别写一次的方法;该方法可以自动识别上述写一次的情况,并直接使用写一次指令。
本实施例提供的识别方法包括如下步骤:
步骤1,通过固态硬盘的块层接收针对目标文件的写一次指令;其中,目标文件具有写一次标志;
在目标文件打开的时候,操作系统直接默认设置打开写一次标志,也就是每个打开的文件默认都携带写一次标志F_WRITEONCE;后续学习目标文件的行为,如果目标文件发生了覆盖写,那么将目标文件的写一次标志F_WRITEONCE清除,控制器也做相应的调整。
步骤2,在写一次指令的数据发生覆盖写且覆盖写写入的数据块属于第一块组的情况下,执行预设的异常处理操作;其中,异常处理操作为:将写一次指令对应的普通写指令传给固态硬盘的控制器,控制器根据普通写指令将数据写入到预先分配的第二块组中,并将覆盖写写入的数据块标记为属于第二块组。
在具体实施例中,控制器第一次检测到发生缺页异常时,返回错误码write oncepage fault;块层根据错误码发现错误是缺页异常的错误。接下来,块层并不向用户返回错误码,而是,块层执行如下异常处理操作:再次向控制器发送写指令,且发送的写指令是写一次指令对应的普通写指令。控制器接收普通写指令后,根据普通写指令将数据写入到第二块组的数据块中,并将之前对应的第一块组内部数据块标记为普通的数据块,也即标记为属于第二块组。
而后,用户继续发送写指令,软件系统将写指令转变成写一次指令,如果固态硬盘的控制器发现又发生了缺页异常,重复上述步骤2,重新发送普通写指令,也就是重复针对错误码write once page fault的异常处理操作。
步骤3,记录针对目标文件的异常处理操作的执行次数。判断执行次数是否超过预设的次数阈值。
步骤4,如果超过,则清除目标文件的写一次标志。
当异常处理操作的执行次数超过一个阈值时,软件系统可以确定该目标文件的IO模式不适合写一次指令,那么软件系统可以将目标文件的写一次标志F_WRITEONCE清除,不再发送写一次指令给控制器,后续的所有写指令,均以普通写指令直接发送给控制器。
在实际应用中,软件系统下发的写一次指令越多,对固态硬盘来说帮助越大。本实施例将写一次指令在所有写指令中的占比称作写一次占比率,该率值越高表示系统越好。为了更准确的控制是否下发写一次指令,以提高写一次占比率,本实施例提供如下一种控制方法。
在本实施例中,可以统计预设时间段内接收到的针对目标文件的写一次指令的指令个数。判断指令个数是否大于预设的个数阈值;其中,个数阈值是与目标文件的大小正相关的阈值。如果大于,则关闭目标文件的写一次标志;如果不大于,则重新开启目标文件的写一次标志。
本实施例综合考虑目标文件的大小和时间段等参数,来控制关闭或开启目标文件的写一次标志F_WRITEONCE,进而更加准确地控制写一次指令的下发与否,由此能够提高写一次占比率。
此外,实际使用中,日志文件、append形式打开的文件和快照等系统,多数是只写一次,这些系统都能够使用写一次指令,从而使系统受益。
如图4所示,本公开实施例提供一种垃圾回收方法,该方法可应用于软件系统,该方法具体包括如下步骤:
步骤S402,向固态硬盘发送写指令;其中,固态硬盘支持写一次指令;写指令包括:写一次指令和非写一次的普通写指令。
相应地,固态硬盘在接收到写指令后,当写指令为写一次指令时,根据写一次指令将数据写入到预先分配的第一块组中;当写指令为非写一次的普通写指令时,根据普通写指令将数据写入到预先分配的第二块组中;在进行垃圾回收过程中,对第二块组进行扫描,且不对第一块组进行扫描。
在一种实施例中,垃圾回收方法还包括:当软件系统的驱动程序扫描到固态硬盘后,向固态硬盘发送识别命令;识别命令用于识别固态硬盘是否支持写一次指令;接收固态硬盘针对查询命令的返回字段;如果返回字段中添加有预设的支持标志,则确定固态硬盘支持写一次指令。
在一种实施例中,向固态硬盘发送写指令,包括:接收用户的应用程序发送的写指令;检查写指令的文件是否具有写一次标志;如果没有写一次标志,则确定写指令为非写一次的普通写指令;如果有写一次标志,则通过驱动程序向固态硬盘发送携带写一次标志的写指令。
本实施例所提供的垃圾回收方法,其实现原理及产生的技术效果和前述实施例相同,为简要描述,本实施例部分未提及之处,可参考前述实施例中相应内容。
参照图5,本公开实施例提供一种垃圾回收装置,该装置应用于固态硬盘,该装置包括:
指令接收模块502,用于在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;
第一写入模块504,用于当写指令为写一次指令时,根据写一次指令将数据写入到预先分配的第一块组中;
第二写入模块506,用于当写指令为非写一次的普通写指令时,根据普通写指令将数据写入到预先分配的第二块组中;其中,第一块组和第二块组是从固态硬盘的块存储池中分配的不同的块组;
垃圾回收模块508,用于在进行垃圾回收过程中,对第二块组进行扫描,且不对第一块组进行扫描。
参照图6,本公开实施例提供一种垃圾回收装置,该装置应用于软件系统,该装置包括:
指令发送模块602,用于向固态硬盘发送写指令;其中,固态硬盘支持写一次指令;写指令包括:写一次指令和非写一次的普通写指令。
本公开实施例所提供的垃圾回收装置可执行本公开任意实施例所提供的垃圾回收方法,具备执行方法相应的功能模块和有益效果。
图7为本公开实施例提供的一种电子设备的结构示意图。如图7所示,电子设备700包括一个或多个处理器701和存储器702。
处理器701可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备700中的其他组件以执行期望的功能。
存储器702可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器701可以运行所述程序指令,以实现上文所述的本公开的实施例的垃圾回收方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。
在一个示例中,电子设备700还可以包括:输入装置703和输出装置704,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置703还可以包括例如键盘、鼠标等等。
该输出装置704可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置704可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图7中仅示出了该电子设备700中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备700还可以包括任何其他适当的组件。
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所述的垃圾回收方法。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本公开实施例所提供的垃圾回收方法。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本公开实施例还提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现本公开实施例中的方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (13)

1.一种垃圾回收方法,其特征在于,包括:
在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;
当所述写指令为写一次指令时,根据所述写一次指令将数据写入到预先分配的第一块组中;
当所述写指令为非写一次的普通写指令时,根据所述普通写指令将数据写入到预先分配的第二块组中;其中,所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同类型的块组;
在进行垃圾回收过程中,对所述第二块组进行扫描,且不对所述第一块组进行扫描;
所述方法还包括:
通过所述固态硬盘的接口接收针对目标文件的写一次指令;其中,所述目标文件具有写一次标志;
在所述写一次指令的数据发生覆盖写且所述覆盖写写入的数据块属于所述第一块组的情况下,执行预设的异常处理操作;其中,所述异常处理操作为:将所述写一次指令对应的普通写指令传给所述固态硬盘的控制器,所述控制器根据所述普通写指令将数据写入到预先分配的第二块组中,并将所述覆盖写写入的数据块标记为属于所述第二块组;
记录针对所述目标文件的所述异常处理操作的执行次数;
判断所述执行次数是否超过预设的次数阈值;
如果超过,则清除所述目标文件的写一次标志。
2.根据权利要求1所述的方法,其特征在于,所述固态硬盘支持写一次指令,包括:
接收所述软件系统发送的识别命令;所述识别命令用于识别所述固态硬盘是否支持所述写一次指令;
针对所述识别命令返回预先添加有支持标志的返回字段。
3.根据权利要求1所述的方法,其特征在于,所述接收软件系统的写指令,包括:
通过所述固态硬盘的接口接收所述软件系统发送的携带写一次标志的写指令;
将所述携带写一次标志的写指令转换为写一次指令;
将所述写一次指令传给所述固态硬盘的控制器。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在接收到所述写一次指令后,检测所述写一次指令的数据是否发生缺页异常;其中,所述缺页异常为:数据发生覆盖写且所述覆盖写写入的数据块属于所述第一块组;
如果是,则将预设的错误码返回给所述软件系统。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接所述收软件系统的删除命令;
当所述删除命令是针对所述第一块组中的第一数据块时,将所述第一数据块标记为无效;
或者,
当所述删除命令是针对所述第二块组中的第二数据块时,对所述第二数据块进行垃圾回收;
将垃圾回收后的所述第二数据块标记为无效。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
统计预设时间段内接收到的针对所述目标文件的写一次指令的指令个数;
判断所述指令个数是否大于预设的个数阈值;其中,所述个数阈值是与所述目标文件的大小正相关的阈值;
如果大于,则关闭所述目标文件的写一次标志;
如果不大于,则重新开启所述目标文件的写一次标志。
7.一种垃圾回收方法,其特征在于,包括:
向固态硬盘发送写指令;其中,所述固态硬盘支持写一次指令;所述写指令包括:写一次指令和非写一次的普通写指令;
所述方法还包括:
向所述固态硬盘的接口发送针对目标文件的写一次指令,所述目标文件具有写一次标志,以使所述固态硬盘执行以下操作:
在所述写一次指令的数据发生覆盖写且所述覆盖写写入的数据块属于第一块组的情况下,执行预设的异常处理操作;其中,所述异常处理操作为:将所述写一次指令对应的普通写指令传给所述固态硬盘的控制器,所述控制器根据所述普通写指令将数据写入到预先分配的第二块组中,并将所述覆盖写写入的数据块标记为属于所述第二块组;记录针对所述目标文件的所述异常处理操作的执行次数;判断所述执行次数是否超过预设的次数阈值;如果超过,则清除所述目标文件的写一次标志;所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同类型的块组。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
当软件系统的驱动程序扫描到所述固态硬盘后,向所述固态硬盘发送识别命令;所述识别命令用于识别所述固态硬盘是否支持所述写一次指令;
接收所述固态硬盘针对所述识别命令的返回字段;
如果所述返回字段中添加有预设的支持标志,则确定所述固态硬盘支持所述写一次指令。
9.根据权利要求7所述的方法,其特征在于,所述向固态硬盘发送写指令,包括:
接收用户的应用程序发送的写指令;
检查所述写指令的文件是否具有写一次标志;
如果没有所述写一次标志,则确定所述写指令为非写一次的普通写指令;
如果有所述写一次标志,则通过驱动程序向所述固态硬盘发送携带所述写一次标志的写指令。
10.一种垃圾回收装置,其特征在于,包括:
指令接收模块,用于在固态硬盘支持写一次指令的情况下,接收软件系统的写指令;
第一写入模块,用于当所述写指令为写一次指令时,根据所述写一次指令将数据写入到预先分配的第一块组中;
第二写入模块,用于当所述写指令为非写一次的普通写指令时,根据所述普通写指令将数据写入到预先分配的第二块组中;其中,所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同的块组;
垃圾回收模块,用于在进行垃圾回收过程中,对所述第二块组进行扫描,且不对所述第一块组进行扫描;
所述装置还包括:
通过所述固态硬盘的接口接收针对目标文件的写一次指令;其中,所述目标文件具有写一次标志;
在所述写一次指令的数据发生覆盖写且所述覆盖写写入的数据块属于所述第一块组的情况下,执行预设的异常处理操作;其中,所述异常处理操作为:将所述写一次指令对应的普通写指令传给所述固态硬盘的控制器,所述控制器根据所述普通写指令将数据写入到预先分配的第二块组中,并将所述覆盖写写入的数据块标记为属于所述第二块组;
记录针对所述目标文件的所述异常处理操作的执行次数;
判断所述执行次数是否超过预设的次数阈值;
如果超过,则清除所述目标文件的写一次标志。
11.一种垃圾回收装置,其特征在于,包括:
指令发送模块,用于向固态硬盘发送写指令;其中,所述固态硬盘支持写一次指令;所述写指令包括:写一次指令和非写一次的普通写指令;
所述垃圾回收装置还包括:
向所述固态硬盘的接口发送针对目标文件的写一次指令,所述目标文件具有写一次标志,以使所述固态硬盘执行以下操作:
在所述写一次指令的数据发生覆盖写且所述覆盖写写入的数据块属于第一块组的情况下,执行预设的异常处理操作;其中,所述异常处理操作为:将所述写一次指令对应的普通写指令传给所述固态硬盘的控制器,所述控制器根据所述普通写指令将数据写入到预先分配的第二块组中,并将所述覆盖写写入的数据块标记为属于所述第二块组;记录针对所述目标文件的所述异常处理操作的执行次数;判断所述执行次数是否超过预设的次数阈值;如果超过,则清除所述目标文件的写一次标志;所述第一块组和所述第二块组是从所述固态硬盘的块存储池中分配的不同类型的块组。
12.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1-6中任一所述的方法,或者执行所述指令以实现上述权利要求7-9中任一所述的方法。
13.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,当所述计算机程序被计算设备执行时,使所述计算设备实现上述权利要求1-6中任一所述的方法,或者使所述计算设备实现上述权利要求7-9中任一所述的方法。
CN202210431218.7A 2022-04-22 2022-04-22 一种垃圾回收方法及装置 Active CN114741327B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210431218.7A CN114741327B (zh) 2022-04-22 2022-04-22 一种垃圾回收方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210431218.7A CN114741327B (zh) 2022-04-22 2022-04-22 一种垃圾回收方法及装置

Publications (2)

Publication Number Publication Date
CN114741327A CN114741327A (zh) 2022-07-12
CN114741327B true CN114741327B (zh) 2024-04-19

Family

ID=82284079

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210431218.7A Active CN114741327B (zh) 2022-04-22 2022-04-22 一种垃圾回收方法及装置

Country Status (1)

Country Link
CN (1) CN114741327B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003809A (zh) * 2015-11-27 2017-08-01 华为技术有限公司 一种存储设备存储数据的方法及存储设备
CN109542358A (zh) * 2018-12-03 2019-03-29 浪潮电子信息产业股份有限公司 一种固态硬盘冷热数据分离方法、装置及设备
CN110895445A (zh) * 2018-09-12 2020-03-20 华为技术有限公司 数据处理方法和系统
WO2020172821A1 (zh) * 2019-02-27 2020-09-03 华为技术有限公司 固态硬盘写放大优化方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107003809A (zh) * 2015-11-27 2017-08-01 华为技术有限公司 一种存储设备存储数据的方法及存储设备
CN110895445A (zh) * 2018-09-12 2020-03-20 华为技术有限公司 数据处理方法和系统
CN109542358A (zh) * 2018-12-03 2019-03-29 浪潮电子信息产业股份有限公司 一种固态硬盘冷热数据分离方法、装置及设备
WO2020172821A1 (zh) * 2019-02-27 2020-09-03 华为技术有限公司 固态硬盘写放大优化方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
通过重组超级块改善固态硬盘寿命和性能的算法;段星辉;陈仁;;计算机应用;20191230(第S2期);137-140 *

Also Published As

Publication number Publication date
CN114741327A (zh) 2022-07-12

Similar Documents

Publication Publication Date Title
US20180373722A1 (en) System and method for data classification using machine learning during archiving
US20070043900A1 (en) Flash memory management method and flash memory system
US8838875B2 (en) Systems, methods and computer program products for operating a data processing system in which a file delete command is sent to an external storage device for invalidating data thereon
KR102023351B1 (ko) 저장 장치 내 할당 촉진을 위한 데이터 분석 방법 및 장치
CN100478946C (zh) 用于文件系统快照持久性的方法和装置
US11782632B2 (en) Selective erasure of data in a SSD
US9891833B2 (en) Eliminating garbage collection in nand flash devices
KR20090026296A (ko) 예측 데이터 로더
US20210157746A1 (en) Key-value storage device and system including the same
US11126561B2 (en) Method and system for organizing NAND blocks and placing data to facilitate high-throughput for random writes in a solid state drive
US20110029749A1 (en) Semiconductor storage system for decreasing page copy frequency and controlling method thereof
US20150310053A1 (en) Method of generating secondary index and apparatus for storing secondary index
CN107608905B (zh) 擦写Flash数据的方法及装置
CN113495847A (zh) 一种存储空间回收方法、系统及计算机存储介质
US8412751B2 (en) Determining whether a Java object has been scan-missed by a garbage collector scan
CN116069681A (zh) 一种磁盘空间回收方法、装置、电子设备以及存储介质
CN114741327B (zh) 一种垃圾回收方法及装置
CN111625482B (zh) 顺序流检测方法与装置
CN111177105A (zh) 分布式文件系统的海量文件写方法、装置、系统及介质
US10007601B2 (en) Data storage device and operating method for flash memory
KR101889222B1 (ko) 악성코드탐지를 수행하는 이동식저장장치 및 이를 위한 방법
US11204866B2 (en) Deep object graph traversal
CN115469796A (zh) 数据存储方法、装置、设备及存储介质
CN112162937A (zh) 存储芯片的数据回收方法、装置、计算机设备及存储介质
CN110389706B (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