CN112084121A - 硬盘预读方法、装置、计算机可读存储介质及电子设备 - Google Patents
硬盘预读方法、装置、计算机可读存储介质及电子设备 Download PDFInfo
- Publication number
- CN112084121A CN112084121A CN202010951136.6A CN202010951136A CN112084121A CN 112084121 A CN112084121 A CN 112084121A CN 202010951136 A CN202010951136 A CN 202010951136A CN 112084121 A CN112084121 A CN 112084121A
- Authority
- CN
- China
- Prior art keywords
- reading
- read
- command
- length
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000004590 computer program Methods 0.000 claims description 13
- 238000013507 mapping Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 9
- 238000012005 ligant binding assay Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000000047 product Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 230000001960 triggered effect Effects 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/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- 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/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0615—Address space extension
- G06F12/063—Address space extension for I/O modules, e.g. memory mapped I/O
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开一种硬盘预读方法、装置、计算机可读存储介质及电子设备,所述硬盘预读方法,包括步骤:生成预读命令,所述预读命令包括预读的起始地址和预读长度;根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;接收根据所述预读命令返回的预读数据;通过对预读长度的动态调整保证预读命令对应的预读数据的结束位置能够与硬盘中的页对齐,实现多条预读命令同时进行预读操作,避免预读过程中的等待,提高了预读性能,从而能够获得良好的读性能。
Description
技术领域
本发明涉及存储领域,尤其涉及一种硬盘预读方法、装置、计算机可读存储介质及电子设备。
背景技术
在SSD(Solid StateDsik,固态硬盘)的使用过程中,对于顺序读IO,传统firmware(固件)通常会做预读处理,即提前读取更多的数据进行缓存,后续读IO时如果命中缓存中的数据,则直接返回给主机,由此提高读性能。
图1所示为SSD内部存储结构示意图,整个存储空间由多个超级块构成,每个超级块由多个数据块Block组成。当主机对SSD顺序写入数据时,会选用一个超级块,对其进行数据的写入。通常为了提高性能,在一个超级块内,都是按照stripe(条带)的方式进行写入,如图2所示,在一个超级块内,写IO从srtipe0开始写到stripeN。当主机下发顺序读时,根据写入时的逻辑地址到物理地址的映射,从超级块中选中相应的stripe读取相应的page(页)。
预读操作是指提前去读主机还未下发的数据,比如主机要读LBA0~LBA100的数据,预读操作就会去读LBA0~LBA200的数据。这样当主机要读LBA101~LBA200的数据时,就可以直接把预读的数据返回,并继续做后续的预读操作。所以,预读是提高读性能的一种有效方法。
然而,传统的预读方式中,预读的长度是一个固定的大小,往往会因为固定的大小不合适或者预读的起始位置不合适,不能得到比较好的读性能。
发明内容
本发明所要解决的技术问题是:提供一种硬盘预读方法、装置、计算机可读存储介质及电子设备,能够获得良好的读性能。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种硬盘预读方法,包括步骤:
生成预读命令,所述预读命令包括预读的起始地址和预读长度;
根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
接收根据所述预读命令返回的预读数据。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种硬盘预读装置,包括:
命令生成模块,用于生成预读命令,所述预读命令包括预读的起始地址和预读长度;
命令下发模块,用于根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
数据接收模块,用于接收根据所述预读命令返回的预读数据。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述硬盘预读方法中的各个步骤。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述硬盘预读方法中的各个步骤。
本发明的有益效果在于:在进行硬盘预读过程中,根据预读命令中预读的起始地址和预读长度判断预读命令对应的预读的结束位置是否跨页,若是,根据起始地址和预读长度对预读长度进行动态调整,使得所述预读命令对应的预读的结束位置为页的边界,通过对预读长度的动态调整保证预读命令对应的预读数据的结束位置能够与硬盘中的页对齐,避免出现不同的预读命令占用同一页而导致的需要彼此等待的情况,保证了每笔预读数据都能够按照页page的长度对齐下发,实现多条预读命令同时进行预读操作,避免预读过程中的等待,提高了预读性能,从而能够获得良好的读性能。
附图说明
图1为SSD内部存储结构的示意图;
图2为SSD内部一个超级块按照stripe的方式进行写入的示意图;
图3为本发明实施例的一种硬盘预读方法的步骤流程图;
图4为本发明实施例的一种硬盘预读装置的结构示意图;
图5为本发明实施例的一种电子设备的结构示意图;
图6为本发明实施例的一种硬盘读数据的实现方法的步骤流程图;
图7为多个预读命令下发情况下当预取长度设置不合理时的预取数据分布示意图;
图8为多个预读命令下发情况下当预取长度设置不合理时采用本发明实施例的硬盘预读方法后的预取数据分布示意图;
图9为多个预读命令下发情况下当预取的起始位置不与page对齐时的预取数据分布示意图;
图10为多个预读命令下发情况下当预取的起始位置不与page对齐时采用本发明实施例的硬盘预读方法后的预取数据分布示意图。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
请参照图3,本发明实施例提供了一种硬盘预读方法,包括步骤:
生成预读命令,所述预读命令包括预读的起始地址和预读长度;
根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
接收根据所述预读命令返回的预读数据。
由上述描述可知,本发明的有益效果在于:在进行硬盘预读过程中,根据预读命令中预读的起始地址和预读长度判断预读命令对应的预读的结束位置是否跨页,若是,根据起始地址和预读长度对预读长度进行动态调整,使得所述预读命令对应的预读的结束位置为页的边界,通过对预读长度的动态调整保证预读命令对应的预读数据的结束位置能够与硬盘中的页对齐,避免出现不同的预读命令占用同一页而导致的需要彼此等待的情况,保证了每笔预读数据都能够按照页page的长度对齐下发,实现多条预读命令同时进行预读操作,避免预读过程中的等待,提高了预读性能,从而能够获得良好的读性能。
进一步的,所述生成预读命令之前包括步骤:
接收读命令,判断是否有预读流程,若否,判断是否启动预读流程;
所述判断是否启动预读流程包括:
判断是否连续接收到预设数量的读命令,所述读命令与上一条读命令是连续的,若是,启动预读流程,若否,执行普通读流程。
由上述描述可知,通过对主机发送的读命令的判断,当判断连续接收到预设数量的与上一条读命令的读取地址是连续的读命令时,则开启预读流程,在确定主机是在进行连续读的操作时开启预读流程,能够有效的提高顺序读的性能。
进一步的,所述启动预读流程后包括步骤:
记录当前下发预读的地址以及读结束的地址;
每下发一次预读命令,根据所述预读命令中的预读长度更新当前下发预读的地址;
每返回一次读命令对应的数据,根据所述读命令中的读长度更新当前读结束的地址;
判断更新后的所述当前下发预读的地址和更新后的所述当前读结束的地址的差值是否小于预先配置的预读总长度,若是,则根据所述差值和所述预先配置的预读总长度确定预读长度,根据更新后的所述当前下发预读的地址确定预读的起始地址,并执行生成预读命令步骤。
由上述描述可知,根据下发的预读命令和基于读命令返回的数据实时动态的更新当前下发预读的地址以及读结束的地址,能够实时地获知预读的数据是否足够,并及时进行补充,保障顺序读所需要的预读数据量,保证顺序读的性能。
进一步的,还包括:
若有预读流程,判断是否有预读数据,若是,则从所述预读数据中直接返回所述读命令对应的数据;
若否,挂起所述读命令;
当接收到预读数据时,触发执行挂起的所述读命令,从所述预读数据中返回挂起的所述读命令对应的数据。
由上述描述可知,如果已经开启了预读流程并且有预读数据时,直接从预读数据中返回读命令对应的数据,如果没有预读数据,则先将读命令挂起,待预读到数据后再触发执行挂起的读命令,从预读的数据中返回读命令对应的数据,当预读流程开启时,始终从预读的数据中返回读命令对应的数据,能够充分地利用预读流程,保证预读流程的有效利用,从而提高顺序读的性能。
进一步的,所述根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
若所述起始地址对应的是页的边界,则调整所述预设长度为页的整数倍;
若所述起始地址对应的不是页的边界,则根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界。
由上述描述可知,根据起始地址对应的是否是页的边界,能够实现对预设长度的快速调整以保证预读命令对应的预读的结束位置为页的边界。
进一步的,根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
判断所述预设长度是否为页的整数倍,若为页的整数倍,则:
确定所述起始地址与其所在的页的起始边界的第一偏移值;
将所述预读长度减去所述第一偏移值作为调整后的预设长度;
若不为页的整数倍,则:
将所述起始地址加上所述预设长度,得到对应的预读的结束位置;
确定所述对应的预读的结束位置与其所在的页的起始边界的第二偏移值或者与其所在的页的结束边界的第三偏移值;
将所述预读长度减去所述第二偏移值或者加上所述第三偏移值作为调整后的预设长度。
由上述描述可知,当起始地址对应的不是页的边界时,则根据其与页的边界的偏移值和预设长度是否为页的整数倍,通过不同的调整策略实现对预设长度快速便捷的调整,以保证预读命令对应的预读的结束位置为页的边界。
进一步的,所述根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页包括:
所述起始地址为起始逻辑地址;
根据预设的逻辑地址和物理地址之间的映射关系确定所述预读的起始逻辑地址对应的起始物理地址;
根据所述起始物理地址和所述预读长度确定将要访问的数据在所述硬盘上的分布,根据所述分布判断所述预读命令对应的预读的结束位置是否跨页。
由上述描述可知,通过地址映射能够快速的确定逻辑地址对应的物理地址,从而快速方便地确定将要访问的数据在所述硬盘上的分布,进而根据所述分布判断是否需要进行调整,提高了调整速度。
请参照图4,本发明另一实施例提供了一种硬盘预读装置,包括:
命令生成模块,用于生成预读命令,所述预读命令包括预读的起始地址和预读长度;
命令下发模块,用于根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
数据接收模块,用于接收根据所述预读命令返回的预读数据。
本发明另一实施例提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种硬盘预读方法中的各个步骤。
请参照图5,本发明另一实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一种硬盘预读方法中的各个步骤。
本发明上述硬盘预读方法、装置、计算机可读存储介质及电子设备可以应用于任何类型的硬盘的预读操作,比如固态硬盘SSD、机械硬盘等等,下面通过具体的实施方式进行说明:
实施例一
请参照图3,一种硬盘预读方法,包括步骤:
S1、生成预读命令,所述预读命令包括预读的起始地址和预读长度;
S2、根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
其中,所述根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页包括:
所述起始地址为起始逻辑地址;
根据预设的逻辑地址和物理地址之间的映射关系确定所述预读的起始逻辑地址对应的起始物理地址;
根据所述起始物理地址和所述预读长度确定将要访问的数据在所述硬盘上的分布,根据所述分布判断所述预读命令对应的预读的结束位置是否跨页;
具体的,主机是用LBA(Logic Block Address)地址来描述硬盘的空间的,硬盘空间被描述为LBA_0~LBA_N的一段连续的地址空间(一个LBA大小一般为512B或者4K),所以LBA对硬盘来说是逻辑地址;当用户将数据写入硬盘时,硬盘会分配一块NAND的空间来存储数据,而这块NAND的物理空间地址就是物理地址,也称之为page地址,逻辑地址与page地址之间的对应关系就叫做映射,即mapping;当写IO下发时,主机会填写其逻辑地址,firmware分配出对应的page地址进行数据存储后将逻辑地址和page地址的mapping保存在NAND的一段特殊的空间上,该空间区别于主机数据存放的空间;所以,当firmware在处理读命令或者预读命令时,需要通过其携带的逻辑地址,通过查询mapping来获取对应的page地址,从而知道对应的在硬盘物理空间上的位置;
一般的firmware都建立的是4k mapping映射,就是以4K长度的逻辑地址作为一个单元,包含8个LBA(512B),本实施例中,page长度也定位为4K;
S3、接收根据所述预读命令返回的预读数据;
其中,如图6所示,在步骤S1之前还包括:
S0、接收主机发送的读命令,判断是否有预读流程,若没有预读流程,判断是否启动预读流程;
其中,所述判断是否启动预读流程包括:
判断是否连续接收到预设数量的读命令,所述读命令与上一条读命令是连续的,若是,启动预读流程,若否,执行普通读流程;
其中,主机发送的读命令中包含了起始LBA和长度,当接收到主机下发的读命令后,通过协议解析(SATA协议或者NVME协议)后生成firmware内部的读命令,分析该读命令的起始LBA和长度,判断是否与上一个读命令是连续的,假设上一个读命令的起始LBA为A,长度为L,当前的读命令的启示LBA为B,则判断A+L和B是不是连续的,如果是,则说明两个读命令是连续的;
上述预设数量可以根据实际的读写环境进行动态设置,比如设置为10,则如果接收到的连续10笔读命令都是连续的,则就认为主机是在进行顺序读的操作,可以启动预读流程;
在开启预读流程后,会设置预读数管理数据,具体的:
记录当前下发预读的地址以及读结束的地址;
其中,以当前最后一笔读命令读取到的LBA作为预读的起始LBA,分别作为当前下发预读的地址和读结束的地址,并设置预读总长度,并开始执行上述步骤S1至S3,对于开启预读流程后的首次生成的预读命令,其预读的起始地址为当前最后一笔读命令读取到的LBA地址,预读长度为所述设置的预读总长度;
在执行预读流程的过程中,每下发一次预读命令,根据所述预读命令中的预读长度更新当前下发预读的地址,即修改预读下发地址;
每返回一次读命令对应的数据,根据所述读命令中的读长度更新当前读结束的地址,即修改主机读地址;
判断更新后的所述当前下发预读的地址和更新后的所述当前读结束的地址的差值是否小于预先配置的预读总长度total_length,若是,则根据所述差值和所述预先配置的预读总长度确定预读长度,根据更新后的所述当前下发预读的地址确定预读的起始地址,并执行生成预读命令步骤;
比如,启动预读时,设置初始时当前下发预读的地址为cur_submit_lba,读结束的地址为host_read_lba;
每下发一笔预读命令,cur_submit_lba就会增加预读命令中的预读长度:cur_submit_lba=cur_submit_lba+预读长度;
每向主机返回一笔读命令对应的数据,host_read_lba就会增加读命令的长度:host_read_lba=host_read_lba+读长度;
判断cur_submit_lba-host_read_lba是否小于total_length,若小于,则计算预读长度=total_length-(cur_submit_lba-host_read_lba),并令预读的起始地址=cur_submit_lba,根据确定的预读长度和预读的起始地址生成firmware内部的预读命令,返回继续执行步骤S1至S3;若不小于,则进入等待主机的读数据指令;
通过上述操作实现了对预读数据的管理,保证能够持续不断的有预设空间的预读数据以供主机读取;
若有预读流程,判断是否有预读数据,若有预读数据,则从所述预读数据中直接返回所述读命令对应的数据;
若没有预读数据,则挂起所述读命令;
当接收到预读数据时,触发执行挂起的所述读命令,从所述预读数据中返回挂起的所述读命令对应的数据;
其中,预读IO相当于提前帮助读IO将数据从NAND上读出来,所以当主机下发读IO命令时,对顺序读IO的处理如下:
若该读IO命令要读取的数据已经被预读IO读取成功,则该读IO直接将数据返回给主机,同时修改host_read_lba;
若该读IO读取的数据还未被预读IO读取上来,则将该读IO命令挂起,等到相应的预读IO返回数据后再触发挂起的主机读IO,从预读数据中返回读IO对应的数据。
实施例二
本实施例与实施例一的区别在于进一步限定了如何对预读长度进行动态调整,具体的:
所述根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
若所述起始地址对应的是页的边界,则调整所述预设长度为页的整数倍;
如图7所示,同时下发4个预读IO:IO_0、IO_1、IO_2以及IO_3,预读长度为2.5个page(2.5*16KB),则IO_0和IO_1同时要读page2,IO_2以及IO_3同时要读page7,而在同一个page上的多笔IO会进行排队,故在page2和page7上就会发生IO等待,从而影响整体的预读性能;
而采用本实施例的智能预读算法,会对IO_0这笔预读IO,查询到读取的长度在stripe上未能按照page对齐,即会存在跨page当前情况,故将其长度调整为2个page长度或者3个page长度再下发;后续的预读IO会根据上一笔预读的IO的下发的结束位置和其在stripe上的分布情况,再生成相应的按照page对齐的IO进行下发,如图8所示,就不会存在多个预读IO同时要读某一页的情况,使得多个预读IO可以同时进行,不需要相互等待;
若所述起始地址对应的不是页的边界,则根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界;
其中,根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
判断所述预设长度是否为页的整数倍,若为页的整数倍,则:
确定所述起始地址与其所在的页的起始边界的第一偏移值;
将所述预读长度减去所述第一偏移值作为调整后的预设长度;
若不为页的整数倍,则:
将所述起始地址加上所述预设长度,得到对应的预读的结束位置;
确定所述对应的预读的结束位置与其所在的页的起始边界的第二偏移值或者与其所在的页的结束边界的第三偏移值;
将所述预读长度减去所述第二偏移值或者加上所述第三偏移值作为调整后的预设长度;
如图9所示,同时下发4个预读IO:IO_0、IO_1、IO_2以及IO_3,预读长度为2个page(2*16k),IO_0的起始位置不是按照page长度对齐,相较于page0的开始位置有1K的起始偏移,即所述起始地址对应的不是页的边界,那么IO_1需要等待IO_0,IO_2需要等待IO_1,IO_3需要等待IO_2,整个预读IO的性能会变得很差;
而采用本实施例的智能预读算法,会对IO_0这笔IO的长度调整为PAGE_SIZE(16k)–1k;后续下发的预读IO再根据上一笔IO的结束位置和其在stripe上的分布情况进行调整后下发(若本来就是按照page对齐的则不需要调整),如图10所示,就不会存在多个预读IO同时要读某一页的情况,使得多个预读IO可以同时进行,不需要相互等待;
假设预读长度为2.5个page(2.5*16k),则1k+2.5*16k=41k,距离其所在的page的起始边界的偏移值为9k,距离其所在的page的结束边界的偏移值为7k,则可以将预设长度减去9K作为IO_0调整后的预设长度值,也可以加上7k作为IO_0调整后的的预设长度值;而对于后续的IO_1、IO_2以及IO_3,则可以将其预设长度调整为2个page或者3个page。
实施例三
请参照图3,一种硬盘预读装置,包括:
命令生成模块,用于生成预读命令,所述预读命令包括预读的起始地址和预读长度;
命令下发模块,用于根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
数据接收模块,用于接收根据所述预读命令返回的预读数据。
实施例四
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例一或实施例二所述的一种硬盘预读方法中的各个步骤。
实施例五
请参照图5,一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现实施例一或实施例二所述的一种硬盘预读方法中的各个步骤。
综上所述,本发明提供的一种硬盘预读方法、装置、计算机可读存储介质及电子设备,在进行硬盘预读过程中,根据预读命令中预读的起始地址和预读长度判断预读命令对应的预读的结束位置是否跨页,若是,根据起始地址和预读长度对预读长度进行动态调整,使得所述预读命令对应的预读的结束位置为页的边界,通过对预读长度的动态调整保证预读命令对应的预读数据的结束位置能够与硬盘中的页对齐,避免出现不同的预读命令占用同一页而导致的需要彼此等待的情况,保证了每笔预读数据都能够按照页page的长度对齐下发,实现多条预读命令同时进行预读操作,避免预读过程中的等待,提高了预读性能,从而能够获得良好的顺序读性能。
在本申请所提供的上述实施例中,应该理解到,所揭露的方法、装置、计算机可读存储介质以及电子设备,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个组件或模块可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或组件或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的组件可以是或者也可以不是物理上分开的,作为组件显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部组件来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个组件单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种硬盘预读方法,其特征在于,包括步骤:
生成预读命令,所述预读命令包括预读的起始地址和预读长度;
根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
接收根据所述预读命令返回的预读数据。
2.根据权利要求1所述的一种硬盘预读方法,其特征在于,所述生成预读命令之前包括步骤:
接收读命令,判断是否有预读流程,若否,判断是否启动预读流程;
所述判断是否启动预读流程包括:
判断是否连续接收到预设数量的读命令,所述读命令与上一条读命令是连续的,若是,启动预读流程,若否,执行普通读流程。
3.根据权利要求2所述的一种硬盘预读方法,其特征在于,所述启动预读流程后包括步骤:
记录当前下发预读的地址以及读结束的地址;
每下发一次预读命令,根据所述预读命令中的预读长度更新当前下发预读的地址;
每返回一次读命令对应的数据,根据所述读命令中的读长度更新当前读结束的地址;
判断更新后的所述当前下发预读的地址和更新后的所述当前读结束的地址的差值是否小于预先配置的预读总长度,若是,则根据所述差值和所述预先配置的预读总长度确定预读长度,根据更新后的所述当前下发预读的地址确定预读的起始地址,并执行生成预读命令步骤。
4.根据权利要求2所述的一种硬盘预读方法,其特征在于,还包括:
若有预读流程,判断是否有预读数据,若是,则从所述预读数据中直接返回所述读命令对应的数据;
若否,挂起所述读命令;
当接收到预读数据时,触发执行挂起的所述读命令,从所述预读数据中返回挂起的所述读命令对应的数据。
5.根据权利要求1至4中任一项所述的一种硬盘预读方法,其特征在于,所述根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
若所述起始地址对应的是页的边界,则调整所述预设长度为页的整数倍;
若所述起始地址对应的不是页的边界,则根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界。
6.根据权利要求5所述的一种硬盘预读方法,其特征在于,所述根据所述起始地址与页的边界的偏移值和所述预设长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界包括:
判断所述预设长度是否为页的整数倍,若为页的整数倍,则:
确定所述起始地址与其所在的页的起始边界的第一偏移值;
将所述预读长度减去所述第一偏移值作为调整后的预设长度;
若不为页的整数倍,则:
将所述起始地址加上所述预设长度,得到对应的预读的结束位置;
确定所述对应的预读的结束位置与其所在的页的起始边界的第二偏移值或者与其所在的页的结束边界的第三偏移值;
将所述预读长度减去所述第二偏移值或者加上所述第三偏移值作为调整后的预设长度。
7.根据权利要求1至4中任一项所述的一种硬盘预读方法,其特征在于,所述根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页包括:
所述起始地址为起始逻辑地址;
根据预设的逻辑地址和物理地址之间的映射关系确定所述预读的起始逻辑地址对应的起始物理地址;
根据所述起始物理地址和所述预读长度确定将要访问的数据在所述硬盘上的分布,根据所述分布判断所述预读命令对应的预读的结束位置是否跨页。
8.一种硬盘预读装置,其特征在于,包括:
命令生成模块,用于生成预读命令,所述预读命令包括预读的起始地址和预读长度;
命令下发模块,用于根据所述预读的起始地址和预读长度判断所述预读命令对应的预读的结束位置是否跨页,若是,根据所述起始地址和预读长度对所述预读长度进行调整,使得所述预读命令对应的预读的结束位置为页的边界,并下发调整后的预读命令,若否,直接下发所述预读命令;
数据接收模块,用于接收根据所述预读命令返回的预读数据。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-7任意一项所述的一种硬盘预读方法中的各个步骤。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7任意一项所述的一种硬盘预读方法中的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010951136.6A CN112084121B (zh) | 2020-09-11 | 2020-09-11 | 硬盘预读方法、装置、计算机可读存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010951136.6A CN112084121B (zh) | 2020-09-11 | 2020-09-11 | 硬盘预读方法、装置、计算机可读存储介质及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112084121A true CN112084121A (zh) | 2020-12-15 |
CN112084121B CN112084121B (zh) | 2024-06-11 |
Family
ID=73736644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010951136.6A Active CN112084121B (zh) | 2020-09-11 | 2020-09-11 | 硬盘预读方法、装置、计算机可读存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112084121B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113223584A (zh) * | 2021-05-26 | 2021-08-06 | 合肥康芯威存储技术有限公司 | 一种存储器及其数据读取方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070276993A1 (en) * | 2006-05-09 | 2007-11-29 | Hitachi Global Storage Techologies Netherlands B.V. | Disk unit and reading ahead control method for rotation type storage device |
CN103257831A (zh) * | 2012-02-20 | 2013-08-21 | 深圳市腾讯计算机***有限公司 | 存储器的读写控制方法及对应的存储器 |
CN105487987A (zh) * | 2015-11-20 | 2016-04-13 | 深圳市迪菲特科技股份有限公司 | 一种处理并发顺序读io的方法及装置 |
CN107291631A (zh) * | 2017-05-24 | 2017-10-24 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘中多流读出时性能的方法 |
CN109491952A (zh) * | 2018-11-27 | 2019-03-19 | 掌阅科技股份有限公司 | 跨页选择文字方法、电子设备及计算机存储介质 |
CN109918023A (zh) * | 2019-02-22 | 2019-06-21 | 深圳忆联信息***有限公司 | 基于内存受限ssd的预读取方法、装置和计算机设备 |
CN110389709A (zh) * | 2018-04-19 | 2019-10-29 | 北京忆恒创源科技有限公司 | 顺序流检测与数据预读 |
-
2020
- 2020-09-11 CN CN202010951136.6A patent/CN112084121B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070276993A1 (en) * | 2006-05-09 | 2007-11-29 | Hitachi Global Storage Techologies Netherlands B.V. | Disk unit and reading ahead control method for rotation type storage device |
CN103257831A (zh) * | 2012-02-20 | 2013-08-21 | 深圳市腾讯计算机***有限公司 | 存储器的读写控制方法及对应的存储器 |
CN105487987A (zh) * | 2015-11-20 | 2016-04-13 | 深圳市迪菲特科技股份有限公司 | 一种处理并发顺序读io的方法及装置 |
CN107291631A (zh) * | 2017-05-24 | 2017-10-24 | 记忆科技(深圳)有限公司 | 一种提高固态硬盘中多流读出时性能的方法 |
CN110389709A (zh) * | 2018-04-19 | 2019-10-29 | 北京忆恒创源科技有限公司 | 顺序流检测与数据预读 |
CN109491952A (zh) * | 2018-11-27 | 2019-03-19 | 掌阅科技股份有限公司 | 跨页选择文字方法、电子设备及计算机存储介质 |
CN109918023A (zh) * | 2019-02-22 | 2019-06-21 | 深圳忆联信息***有限公司 | 基于内存受限ssd的预读取方法、装置和计算机设备 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113223584A (zh) * | 2021-05-26 | 2021-08-06 | 合肥康芯威存储技术有限公司 | 一种存储器及其数据读取方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112084121B (zh) | 2024-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108459826B (zh) | 一种处理io请求的方法及装置 | |
US7890693B2 (en) | Flash translation layer apparatus | |
US8010770B2 (en) | Caching device for NAND flash translation layer | |
CN103577470B (zh) | 一种提升web服务器性能的文件***及方法 | |
US9710283B2 (en) | System and method for pre-storing small data files into a page-cache and performing reading and writing to the page cache during booting | |
US8694563B1 (en) | Space recovery for thin-provisioned storage volumes | |
CN104809179A (zh) | 访问哈希表的装置和方法 | |
US20180089088A1 (en) | Apparatus and method for persisting blocks of data and metadata in a non-volatile memory (nvm) cache | |
CN111563052A (zh) | 降低读延时的缓存方法、装置、计算机设备及存储介质 | |
CN110737607B (zh) | 管理hmb内存的方法、装置、计算机设备及存储介质 | |
CN112084121B (zh) | 硬盘预读方法、装置、计算机可读存储介质及电子设备 | |
CN107273306A (zh) | 一种固态硬盘的数据读取、数据写入方法及固态硬盘 | |
US9778858B1 (en) | Apparatus and method for scatter gather list handling for an out of order system | |
CN113407120A (zh) | 基于hmb的映射表管理方法、装置及计算机设备 | |
CN111026678B (zh) | 基于固态硬盘的缓存设计方法、装置及计算机设备 | |
CN108519860B (zh) | 一种ssd读命中的处理方法和装置 | |
CN110990301A (zh) | 多plane存储介质的顺序读方法及相关装置 | |
CN111290974A (zh) | 用于存储设备的缓存淘汰方法与存储设备 | |
CN111290975A (zh) | 使用统一缓存处理读命令与预读命令的方法及其存储设备 | |
US9043533B1 (en) | Sizing volatile memory cache based on flash-based cache usage | |
CN110968527A (zh) | Ftl提供的缓存 | |
CN111581127B (zh) | 映射关系处理方法及装置 | |
US11099985B2 (en) | Storage controller, storage array device, data depositing method, and storage medium | |
CN110658999B (zh) | 一种信息更新方法、装置、设备及计算机可读存储介质 | |
CN113254363A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 518000 floors 1-3 and 4 of buildings 4 and 8, zone 2, Zhongguan honghualing Industrial South Zone, No. 1213 Liuxian Avenue, Pingshan community, Taoyuan Street, Nanshan District, Shenzhen, Guangdong Applicant after: BIWIN STORAGE TECHNOLOGY Co.,Ltd. Address before: 518000 1st, 2nd, 4th and 6th floors of No.4 factory building of tongfuyu industrial city, Taoyuan Street, Nanshan District, Shenzhen City, Guangdong Province Applicant before: BIWIN STORAGE TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |