CN115657963B - 基于固态硬盘的顺序写方法、装置、电子设备及存储介质 - Google Patents

基于固态硬盘的顺序写方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115657963B
CN115657963B CN202211417270.3A CN202211417270A CN115657963B CN 115657963 B CN115657963 B CN 115657963B CN 202211417270 A CN202211417270 A CN 202211417270A CN 115657963 B CN115657963 B CN 115657963B
Authority
CN
China
Prior art keywords
target
bit offset
array
analysis result
small
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
CN202211417270.3A
Other languages
English (en)
Other versions
CN115657963A (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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202211417270.3A priority Critical patent/CN115657963B/zh
Publication of CN115657963A publication Critical patent/CN115657963A/zh
Application granted granted Critical
Publication of CN115657963B publication Critical patent/CN115657963B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

本发明提供了一种基于固态硬盘的顺序写方法,所述方法包括:当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;根据所述多个第一物理地址和所述大数据块生成大数组和小数组;当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址,通过一次性读取和更新大数据块对应的全部旧的PBA,大大减少了对DRAM的访问次数和消息交互次数,提升了固态硬盘的顺序写性能。

Description

基于固态硬盘的顺序写方法、装置、电子设备及存储介质
技术领域
本发明涉及硬盘读写领域,特别是涉及一种基于固态硬盘的顺序写方法、装置、电子设备及存储介质。
背景技术
在SSD写的过程中,如果一个LBA被重复写了,那么这个LBA的数据会被写到另外一个新的物理地址上,然后这个LBA对应的旧的物理地址会被标为无效数据,以便进行垃圾回收。
现有的标记无效数据的方法是:写流程处理一个LBA之前,先把这个LBA对应的PBA从DRAM中读上来,然后把DRAM中的PBA修改成新的,解析旧的PBA,计算出它在VDFB中的位置,把VDFB中对应的位置清零,VDFB存放于DRAM。计算出它的VDFC的位置,把对应的VDFC值减1,VDFC存放于SRAM,而且是等VDFB处理完成后再处理VDFC。这样每写一个LBA的数据,就要进行2次状态机的切换,还需要访问3次DRAM,访问1次SRAM。比如对于一笔128k的写命令,需要进行64次状态机切换,访问96次DRAM,访问32次SRAM。由于频繁的状态机切换和频繁的访问DRAM以及SRAM,导致顺序写性能比较差。
发明内容
基于此,有必要针对上述技术问题,提供一种能够减少切换和访问状态机并提升固态硬盘顺序写性能的基于固态硬盘的顺序写方法、装置、电子设备及存储介质。
第一方面,提供一种基于固态硬盘的顺序写方法, 所述方法包括:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
另一方面,提供一种基于固态硬盘的顺序写装置,所述装置包括:
获取模块,用于当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
数组生成模块,用于根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
写模块,用于当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述数组生成模块根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述数组生成模块根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,当所述固态硬盘顺序写所述大数据块时,所述写模块根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述写模块根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述写模块根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述写模块根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述写模块根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述写模块将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述写模块检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述写模块根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述写模块确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述写模块根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述写模块检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
再一方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
通过当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;根据所述多个第一物理地址和所述大数据块生成大数组和小数组;当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址,通过一次性读取和更新大数据块对应的全部旧的PBA,大大减少了对DRAM的访问次数和消息交互次数,提升了固态硬盘的顺序写性能。
附图说明
图1为基于固态硬盘的顺序写方法的流程示意图;
图2为基于固态硬盘的顺序写方法的步骤示意图;
图3为基于固态硬盘的顺序写装置示意图;
图4为本发明实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请执行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的方法,可以应用于如图1所示的基于固态硬盘的资源调度方法的流程示意图,先根据一次性获取的多个第一物理地址和大数据块生成大数组和小数组,再通过判断小数据块中是否有第二解析结果来确定是根据第二物理地址一次性更新第一物理地址,还是根据第二物理地址和第三物理地址更新第一物理地址。另外当SSD(Solid StateDisk固态硬盘)接收到主机中某一模块比如机械硬盘发送的一笔大数据块比如128k命令时,固态硬盘顺序写128k命令时都是将其暂存于DRAM(动态随机存储内存)中,此时因为旧的物理地址是指向的该机械硬盘,所以需要将128k命令对应的旧PBA(物理地址)全部更新成新的PBA(用于指向该固态硬盘中的DRAM)并一次性存储于DRAM中。
在一个实施例中,如图2所示,本发明提供一种基于固态硬盘的顺序写方法, 所述方法包括:
S201、当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
S202、根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
S203、当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
具体的,在检测到SSD收到一笔假设为128k的命令后,首先把128k的数据对应的PBA一次性从DRAM中读到大数组中,然后在处理32个4k生成的旧PBA时将更新好的PBA存放大数组中,等全部更新完后一次性写到DRAM中,这样32个PBA的读写操作只需要访问两次DRAM。
在其中一个实施例中,所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
具体的,根据从DRAM中读取到的32个旧的PBA将128k命令分成32个4k命令,定义一个大数组并将32个4k命令写入该大数组。定义一个小数组并将通过解析旧PBA确定的4k命令对应的解析结果存储到小数组中。
在其中一个实施例中,所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
具体的,通过解析大数组中存储的每个4k命令对应的旧PBA,查询nand中是否存储有旧PBA对应的4k命令,如果有,说明原本存储于DRAM中的某一4k命令已经自动从DRAM中写入到nand中,即在DRAM内的该4k命令已经是“无效数据”,在nand内的该4k命令为“有效数据”,此时可以确定小数组中该4k命令的解析结果为1(第二解析结果);如果没有,则说明该4k命令依然存储于DRAM中,还是“有效数据”,确定小数组中该4k命令对应的解析结果为0(第一解析结果)。最终将32个4k命令对应的解析结果(0或者1)写入小数组中。
在其中一个实施例中,所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
具体的,确定小数组中32个解析结果里“1”的个数,如果没有“1”,说明32个4k命令依然都存储于DRAM中,并没有从DRAM中写入到nand中,此时只需要通过解析32个旧PBA更新得到32个4k命令在DRAM中的新PBA,更新结束后将32个新PBA一次性存储到DRAM中。如果有“1”,说明32个4k命令有一部分存储于nand中,另一部分存储于DRAM中,此时需要将32个旧PBA更新成第二物理地址(用于指向DRAM)和第三物理地址(用于指向nand)并在全部更新完成后一次性写入DRAM。
在其中一个实施例中,所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
具体的,当小数组中没有“1”时,说明32个4k命令在DRAM中都是“有效数据”,此时DRAM中的32个VDFB(有效数据的bitmap)即多个有效位偏移图和SRAM中的32个VDFC(有效数据的个数)即多个有效数据数无需修改;而当小数组中存在“1”时,需要在根据第二物理地址和第三物理地址一次性更新32个旧PBA之前,先根据大数组和小数组修改DRAM中的VDFB和SRAM中的VDFC。
在其中一个实施例中,所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
具体的,先根据小数组中32个0或者1定义32个解析结果对应的bitmap(位偏移图),然后确定bitmap的标记位上的值,最后根据bitmap和旧PBA修改DRAM中的VDFB。
在其中一个实施例中,所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
具体的,其中bitmap的初始值为0,当遍历到小数组中的“1”时,在“1”对应的bitmap的标记位上置1,当遍历到小数组中的“0”时,保持bitmap的初始值不变。
在其中一个实施例中,所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
具体的,确定小数组中第一次遍历到的“1”对应的4k命令为目标小数据块,并通过解析该4k命令对应的旧PBA从多个VDFB中确定目标VDFB即第一个需要修改的有效数据的bitmap,因为当有一个4k命令写入nand时,对应的该有效数据的bitmap就需要修改。当找到目标VDFB时,通过标志位已置1的bitmap(第二位偏移图)修改原本是有效数据对应的bitmap(目标位偏移图),之后继续遍历小数组中的“1”,并根据其余“1”对应的标记位置1的bitmap修改其余目标VDFB的bitmap,如果小数组中没有其余“1”,则修改SRAM中的VDFC。
在其中一个实施例中,所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
具体的,通过遍历到的小数组中其余“1”和对应的旧PBA从多个VDFB中确定其余目标VDFB,而在修改其余目标VDFB时,先根据对应的旧PBA查询固态硬盘中记录的其余目标VDFB所在的位置(在某一DWORD中的具体位置),然后比较第一个修改的VDFB所在的位置和后续的其余目标VDFB所在的位置是否相同,如果相同,说明需要修改的目标VDFB都在同一DWORD文档中,仅仅是这些目标VDFB的bit offset(位偏移)不同,所以仅需发送一次修改消息让固态硬盘一次性修改同一DWORD中的目标VDFB和其余目标VDFB,减少了和固态硬盘等硬件的消息交互次数。如果不同,比如遍历到小数组中有一个“1”对应的VDFB和第一个遍历到的“1”对应的VDFB不在同一个DWORD中时,此时需要通过固态硬盘先将这个“1”对应的其余目标VDFB清零,并且确定清零后才能继续遍历其他“1”对应的其余目标VDFB,在遍历了所有“1”对应的VDFB并将不在同一DWORD中的VDFB清零后,让固态硬盘一次性修改同一DWORD中所有的VDFB。
在其中一个实施例中,所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改所述其余目标位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
具体的,如上所述,向固态硬盘发送VDFB修改(位偏移图修改)消息,其中VDFB修改消息中包括该VDFB在DWORD中的具体位置和标记位置1的bitmap以及具体的修改指令,其中固态硬盘在该VDFB的具体位置上根据标记位置1的bitmap修改该VDFB。确定该VDFB修改消息是否发送成功,如果成功,则无需确定固态硬盘是否修改完成并继续遍历小数组中其余的解析结果;如果没成功,则需要将该消息加入到消息队列中并等待消息发送成功。
在其中一个实施例中,所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
具体的,如上所述,向固态硬盘发送VDFB清零(位偏移图修改)消息,其中VDFB清零消息中包括该VDFB在DWORD中的具体位置和具体的清零指令,确定该VDFB清零消息是否发送成功,如果成功,则继续检测该VDFB是否清零成功;如果没成功,则需要将该消息加入到消息队列中并等待消息发送成功。
在其中一个实施例中,所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
具体的,如上所述,查询到DRAM中该其余目标VDFB已经被固态硬盘清零时,则继续遍历小数组中其余解析结果;如果未清零成功,则等待固态硬盘清零成功后再继续遍历小数组中其余解析结果。
在其中一个实施例中,所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
具体的,当小数组中“1”对应的目标VDFB都已修改或清零完成后,继续修改SRAM中的VDFC, 32个VDFC可以具体表示为1-32,如果小数组中没有“1”,32个VDFC无需修改。根据小数组中的“0”和“1”确定需要修改的第一目标VDFC和第二目标VDFC,然后根据对应的旧PBA查询到固态硬盘中目标VDFC的具体位置,使固态硬盘根据具体位置将第一目标VDFC进行修改或将第二目标VDFC清零。
在其中一个实施例中,所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
具体的,如上所述,当遍历小数组中32个“0”或“1”时,假设第一个“1”处于第13个,则前12个“0”对应的VDFC无需修改,确定后续“0”对应的VDFC为第一目标VDFC,所有的“1”对应的VDFC为第二目标VDFC。修改第一目标VDFC需要确定对应的解析结果数,比如修改处于第15个的“0”对应的第一目标VDFC,需要确定第15个之前“1”的解析结果数,假设只有一个,则需要将该第一目标VDFC减1;再比如修改处于第27个的“0”对应的第一目标VDFC,需要确定第27个之前“1”的解析结果数,假设有3个,则需要将该第一目标VDFC减3。
在其中一个实施例中,所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
具体的,向固态硬盘发送VDFC修改(有效数据数修改)消息,其中VDFC修改消息中包括该VDFC在SRAM中的具体位置和对应的解析结果数以及具体的修改指令,使固态硬盘通过该消息修改第一目标VDFC,比如将该VDFC原来为15的值修改为14。确定该消息是否发送成功,如果成功,无需等待修改完成在继续遍历小数组的同时发送其余的VDFC修改消息;如果未成功,则将该消息加入到消息队列中并等待消息发送成功。
在其中一个实施例中,所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
具体的,向固态硬盘发送VDFC清零(有效数据数清零)消息,其中VDFC清零消息中包括该VDFC在SRAM中的具体位置和具体的清零指令,使固态硬盘通过该消息将第二目标VDFC清零,比如对于遍历到的第13个解析结果为“1”对应的VDFC,使固态硬盘根据其在SRAM中的具体位置将其原来为13的值清零。确定该消息是否发送成功,如果成功,则继续检测该第二目标VDFC,如果没成功,则将该消息加入到消息队列中并等待消息发送成功。
在其中一个实施例中,所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
具体的,确定该第二目标VDFC是否被固态硬盘清零,如果是,则继续遍历小数组并继续发送第一目标VDFC修改消息或第二目标VDFC清零消息,直到全部的VDFC都修改完成;若否,则等待固态硬盘将该第二目标数据数清零,防止对后续的VDFC进行错误修改。
本申请的方案有如下有益效果:
1)通过一次性读取和更新一笔命令全部的PBA,大大减少了对DRAM的访问次数和消息交互次数,提升了固态硬盘的顺序写性能;
2)对于一笔大数据块对应的PBA计算出来的VDFB和VDFC,大部分都在一个DWORD,所以一次尽量修改最多个数的VDFB和VDFC,这样就减少了对DRAM和SRAM的访问次数,同时也减少了状态机的切换;
3)修改VDFB和VDFC的时候,不需要等待修改完成后再进行下次的修改,只要确保修改的消息发送成功,就可以进行下次修改。
应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次执行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图3所示,提供一种基于固态硬盘的顺序写装置,所述装置包括:
获取模块301,用于当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
数组生成模块302,用于根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
写模块303,用于当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述数组生成模块根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述数组生成模块根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,当所述固态硬盘顺序写所述大数据块时,所述写模块根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述写模块根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述写模块根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述写模块根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述写模块根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述写模块将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述写模块检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述写模块根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述写模块根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述写模块确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述写模块根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述写模块检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
关于基于固态硬盘的顺序写装置的具体限定可以参见上文中对于基于固态硬盘的顺序写方法的限定,在此不再赘述。上述基于固态硬盘的顺序写装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现告警信息处理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述处理器执行所述计算机程序时实现以下步骤:
所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
在其中一个实施例中,所述计算机程序被处理器执行时实现以下步骤:
所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以执行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都执行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (19)

1.一种基于固态硬盘的顺序写方法,所述方法包括:
当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址;
所述根据所述多个第一物理地址和所述大数据块生成大数组和小数组包括:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
2.根据权利要求1所述的方法,其特征在于,所述根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组包括:
遍历每个第一物理地址;
确定非易失性内存是否存储有所述第一物理地址对应的小数据块;
若否,则生成第一解析结果;
若是,则生成第二解析结果;
根据所述多个解析结果生成所述小数组。
3.根据权利要求2所述的方法,其特征在于,所述当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址包括:
确定所述小数组中是否存储有所述第二解析结果;
若否,则根据所述大数组生成多个第二物理地址并根据所述多个第二物理地址修改所述多个第一物理地址;
若是,则根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址。
4.根据权利要求3所述的方法,其特征在于,所述根据所述小数组和所述大数组生成第二物理地址和第三物理地址并根据所述第二物理地址和所述第三物理地址修改所述多个第一物理地址之前包括:
根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图;
根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数。
5.根据权利要求4所述的方法,其特征在于,所述根据所述小数组和所述大数组修改所述动态存储内存中的多个有效位偏移图包括:
根据所述解析结果生成所述解析结果对应的位偏移图;
根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图。
6.根据权利要求5所述的方法,其特征在于,所述根据所述解析结果生成所述解析结果对应的位偏移图包括:
生成所述小数组对应的全局下标并根据所述全局下标开始遍历所述多个解析结果;
当确定所述解析结果为所述第一解析结果时,生成第一位偏移图;
当确定所述解析结果为所述第二解析结果时,生成第二位偏移图。
7.根据权利要求6所述的方法,其特征在于,所述根据所述位偏移图和所述第一物理地址修改所述多个有效位偏移图包括:
根据遍历到的第一个第二解析结果从所述多个小数据块中确定目标小数据块;
根据所述目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述目标小数据块对应的目标位偏移图并根据所述第二位偏移图修改所述目标位偏移图;
根据其余第二解析结果从所述多个小数据块中确定其余目标小数据块;
根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图。
8.根据权利要求7所述的方法,其特征在于,所述根据所述第一物理地址、所述其余目标小数据块和所述第二位偏移图修改其余目标位偏移图包括:
根据所述其余目标小数据块和所述第一物理地址从所述多个有效位偏移图中确定所述其余目标小数据块对应的其余目标位偏移图;
确定所述目标位偏移图所在的目标偏移位置和所述其余目标位偏移图所在的其余目标偏移位置是否相同;
若是,则根据所述第二位偏移图修改所述其余目标位偏移图;
若否,则将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置。
9.根据权利要求8所述的方法,其特征在于,所述根据所述第二位偏移图修改所述其余目标位偏移图包括:
向所述固态硬盘发送位偏移图修改消息以供所述固态硬盘根据所述位偏移图修改消息修改多个有效位偏移图;
确定所述位偏移图修改消息是否发送成功;
若是,则继续遍历所述其余目标位偏移图;
若否,则将所述位偏移图修改消息加入消息队列并等待所述位偏移图修改消息发送成功。
10.根据权利要求8所述的方法,其特征在于,所述将所述其余目标位偏移图清零并继续遍历所述其余目标偏移位置包括:
向所述固态硬盘发送位偏移图清零消息以供所述固态硬盘根据所述位偏移图清零消息将所述其余目标位偏移图清零;
确定所述位偏移图清零消息是否发送成功;
若是,则检测所述其余目标位偏移图;
若否,则将所述位偏移图清零消息加入消息队列并等待所述位偏移图清零消息发送成功。
11.根据权利要求10所述的方法,其特征在于,所述检测所述其余目标位偏移图包括:
确定所述固态硬盘是否将所述其余目标位偏移图清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述其余目标位偏移图清零。
12.根据权利要求4所述的方法,其特征在于,所述根据所述小数组和所述大数组修改静态存储内存中的多个有效数据数包括:
当修改所述多个有效位偏移图完成后,根据所述第一解析结果和所述第一物理地址从所述多个有效数据数中确定所述第一解析结果对应的第一目标数据数;
根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数;
根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零。
13.根据权利要求12所述的方法,其特征在于,所述根据所述第一解析结果和所述第二解析结果修改所述第一目标数据数包括:
当遍历所述小数组时,确定所述第一解析结果之前是否存在所述第二解析结果;
若否,则不修改所述第一目标数据数并继续遍历所述多个解析结果;
若是,则确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数。
14.根据权利要求12所述的方法,其特征在于,所述确定所述第一解析结果之前的所述第二解析结果的解析结果数并根据所述解析结果数修改所述第一目标数据数包括:
向所述固态硬盘发送有效数据数修改消息以供所述固态硬盘根据所述有效数据数修改消息修改所述第一目标数据数,其中所述有效数据数修改消息包括所述解析结果数和所述第一目标数据数的数据位置;
确定所述有效数据数修改消息是否发送成功;
若是,则继续遍历所述小数组;
若否,则将所述有效数据数修改消息加入所述消息队列并等待所述有效数据数修改消息发送成功。
15.根据权利要求12所述的方法,其特征在于,所述根据所述第二解析结果和所述第一物理地址从所述多个有效数据数中确定所述第二解析结果对应的第二目标数据数并将所述第二目标数据数清零包括:
根据所述第二解析结果和所述第一物理地址确定所述第二目标数据数;
向所述固态硬盘发送有效数据数清零消息以供所述固态硬盘根据所述有效数据数清零消息将所述第二目标数据数清零,其中所述有效数据数清零消息包括所述第二目标数据数;
确定所述有效数据数清零消息是否发送成功;
若否,则将所述有效数据数清零消息加入所述消息队列并等待所述有效数据数清零消息发送成功;
若是,则检测所述第二目标数据数。
16.根据权利要求15所述的方法,其特征在于,所述检测所述第二目标数据数包括:
确定所述固态硬盘是否将所述第二目标数据数清零;
若是,则继续遍历所述多个解析结果;
若否,则等待所述固态硬盘将所述第二目标数据数清零。
17.一种基于固态硬盘的顺序写装置,所述装置包括:
获取模块,用于当检测到固态硬盘接收到大数据块时,从所述固态硬盘中的动态存储内存获取所述大数据块对应的多个第一物理地址;
数组生成模块,用于根据所述多个第一物理地址和所述大数据块生成大数组和小数组;
写模块,用于当所述固态硬盘顺序写所述大数据块时,根据所述大数组和所述小数组修改所述多个第一物理地址;
其中,所述数组生成模块还用于:
根据所述多个第一物理地址和所述大数据块生成多个小数据块;
根据所述多个第一物理地址生成所述大数组;
根据所述多个第一物理地址确定所述多个小数据块对应的多个解析结果并根据所述多个解析结果生成所述小数组。
18.一种电子设备,其特征在于,包括:
一个或多个处理器;以及与所述一个或多个处理器关联的存储器,所述存储器用于存储程序指令,所述程序指令在被所述一个或多个处理器读取执行时,执行如权利要求1~16中任一所述的方法。
19.一种计算机存储介质,其特征在于,其上存储有计算机程序,其中,该程序被处理器执行时实现如权利要求1~16中任一所述的方法。
CN202211417270.3A 2022-11-14 2022-11-14 基于固态硬盘的顺序写方法、装置、电子设备及存储介质 Active CN115657963B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211417270.3A CN115657963B (zh) 2022-11-14 2022-11-14 基于固态硬盘的顺序写方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211417270.3A CN115657963B (zh) 2022-11-14 2022-11-14 基于固态硬盘的顺序写方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN115657963A CN115657963A (zh) 2023-01-31
CN115657963B true CN115657963B (zh) 2023-04-11

Family

ID=85021948

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211417270.3A Active CN115657963B (zh) 2022-11-14 2022-11-14 基于固态硬盘的顺序写方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115657963B (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8296337B2 (en) * 2006-12-06 2012-10-23 Fusion-Io, Inc. Apparatus, system, and method for managing data from a requesting device with an empty data token directive
CN104035729B (zh) * 2014-05-22 2017-02-15 中国科学院计算技术研究所 一种日志映射的块设备精简配置方法
CN114036079B (zh) * 2021-09-07 2023-02-17 联芸科技(杭州)股份有限公司 映射表压缩方法、系统、存储器控制器、固态硬盘及数据读取方法
CN114415942B (zh) * 2021-12-21 2022-11-04 联芸科技(杭州)股份有限公司 L2p映射表重建方法及固态硬盘

Also Published As

Publication number Publication date
CN115657963A (zh) 2023-01-31

Similar Documents

Publication Publication Date Title
CN109542333B (zh) 存储器系统及控制非易失性存储器的控制方法
CN109426619B (zh) 访问快闪存储器模块的方法及相关闪存控制器与电子装置
CN109871333B (zh) 存取闪存模块的方法及相关的闪存控制器与电子装置
US20180275887A1 (en) Data Storage Device and Operating Method of Data Storage Device
CN110568998B (zh) 基于固态硬盘的Trim命令实现方法、装置和计算机设备
US7287117B2 (en) Flash memory and mapping control apparatus and method for flash memory
US10552377B2 (en) Data discard method for journaling file system and memory management apparatus thereof
US9851920B2 (en) System and method for removing hash table entries
CN107391038B (zh) 资料存储型闪存的数据写入方法、闪存及存储介质
US20140304487A1 (en) Information processing apparatus, memory control device, and data transfer control method
CN112241310B (zh) 页表管理、信息获取方法、处理器、芯片、设备及介质
JP2009506411A (ja) コンピュータ装置におけるプリエンプト可能なコンテキストスイッチ
KR20130034450A (ko) 저장 장치 및 그 구동 방법
CN111625482B (zh) 顺序流检测方法与装置
US10628301B1 (en) System and method for optimizing write amplification of non-volatile memory storage media
CN113220469B (zh) 进程间通信方法、装置和计算机设备和计算机可读介质
CN115657963B (zh) 基于固态硬盘的顺序写方法、装置、电子设备及存储介质
US8856468B2 (en) Memory device capable of improving write processing speed and memory control method
CN115858417B (zh) 缓存数据处理方法、装置、设备及存储介质
CN114168073B (zh) 固态硬盘调试空间的访问方法及装置
US20200319999A1 (en) Storage device, control method of storage device, and storage medium
CN112988610A (zh) 内存回收处理方法、装置、计算机设备和存储介质
WO2021186142A1 (en) Memory accessor invalidation
CN111367718A (zh) 数据库的启动方法、装置、设备和存储介质
CN110888823B (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