1.本发明涉及存储技术领域,尤其涉及一种基于固态硬盘的数据读取方法、系统、介质及设备。
背景技术:
2.随着互联网、云计算、物联网、大数据等技术的发展及广泛应用,在人类生活中,时时刻刻都会产生海量的数据,这些海量的数据需要进行处理和存储,信息技术的高速发展对存储系统的性能提出了更高的要求。固态硬盘因为其读写速度快、能耗低而被广泛应用。由此,对固态硬盘的性能、容量的要求也越来越高。随着闪存技术的发展、主控芯片的性能提高,固态硬盘的相关技术需要不断更新,使得能够尽可能满足应用的需求。
3.主控芯片、缓存芯片和用于存储数据的闪存芯片是固态硬盘的重要组成部分,将这三者的能力充分发挥是提升固态硬盘性能的主要方法。
4.目前基于高性能固态硬盘的数据缓存方法如下:
5.1)当固态硬盘获取到主机架下发的读请求后,获取请求消息中的需要读取的逻辑地址;
6.2)通过逻辑地址进行查表,获取对应的物理地址;
7.3)通过物理地址发起对闪存的读取动作(通常情况下为50微秒左右)
8.这样,每次主机的读请求响应时间都包含固件运行时间及读取闪存时间两部分,导致响应时间比较长,总体响应时间在65微秒左右。因此,需要一种方法将缓存和闪存的潜力发挥出来,以极大地提升顺序读性能。
技术实现要素:
9.有鉴于此,本发明的目的在于提出一种基于固态硬盘的数据读取方法、系统、介质及设备,用以解决现有技术中固态硬盘读数据时间较长的问题。
10.基于上述目的,本发明提供了一种基于固态硬盘的数据读取方法,包括以下步骤:
11.响应于固态硬盘接收到主机发送的读请求,将读请求对应的第一逻辑地址添加至判定数组中,并检查完成添加的当前判定数组是否符合顺序性;
12.响应于当前判定数组符合顺序性,查询缓存链表中是否存在第一逻辑地址;
13.响应于缓存链表中不存在第一逻辑地址,从固态硬盘的闪存中读取对应于第一逻辑地址的当前数据,并将当前数据存放至固态硬盘的缓存中,且将第一逻辑地址存放至缓存链表中;
14.按照预设规则从闪存中继续读取多个数据,并将多个数据分别存放至固态硬盘的缓存中,且将与多个数据分别对应的多个第二逻辑地址依次存放至缓存链表中;
15.基于缓存链表中的逻辑地址从缓存中读取对应的数据。
16.在一些实施例中,检查完成添加的当前判定数组是否符合顺序性包括:
17.判断当前判定数组中的所有逻辑地址的数量是否等于预设的数组元素总数量;
18.响应于所有逻辑地址的数量小于数组元素总数量,确认当前判定数组不符合顺序性;或者
19.响应于所有逻辑地址的数量等于数组元素总数量,计算所有逻辑地址的均值,并判断第一逻辑地址的值与均值的差值是否大于第一预设数值;
20.响应于差值大于第一预设数值,将顺序性计数的值减一,并判断减一后的顺序性计数的值是否大于零;
21.响应于减一后的顺序性计数的值大于零,确认当前判定数组符合顺序性;
22.响应于减一后的顺序性计数的值等于零,确认当前判定数组不符合顺序性。
23.在一些实施例中,检查完成添加的当前判定数组是否符合顺序性还包括:
24.响应于差值小于等于第一预设数值,将顺序性计数的值加一,并确认当前判定数组符合顺序性。
25.在一些实施例中,按照预设规则从闪存中继续读取多个数据包括:
26.判断缓存链表的剩余可存放逻辑地址数是否小于第二预设数值;
27.响应于剩余可存放逻辑地址数大于等于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为第二预设数值;
28.响应于剩余可存放逻辑地址数小于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为剩余可存放逻辑地址数。
29.在一些实施例中,方法还包括:
30.响应于当前判定数组不符合顺序性且缓存链表中存在第一逻辑地址,从缓存链表中获取第一逻辑地址,并基于第一逻辑地址从缓存中读取对应的当前数据。
31.在一些实施例中,方法还包括:
32.响应于当前判定数组不符合顺序性且缓存链表中不存在第一逻辑地址,从闪存中读取对应于第一逻辑地址的当前数据。
33.在一些实施例中,方法还包括:
34.将当前数据在缓存中的存储位置存放至缓存链表中,并将多个数据在缓存中的存储位置存放至缓存链表中。
35.本发明的另一方面,还提供了一种基于固态硬盘的数据读取系统,包括:
36.检查模块,配置用于响应于固态硬盘接收到主机发送的读请求,将读请求对应的第一逻辑地址添加至判定数组中,并检查完成添加的当前判定数组是否符合顺序性;
37.查询模块,配置用于响应于当前判定数组符合顺序性,查询缓存链表中是否存在第一逻辑地址;
38.第一存放模块,配置用于响应于缓存链表中不存在第一逻辑地址,从固态硬盘的闪存中读取对应于第一逻辑地址的当前数据,并将当前数据存放至固态硬盘的缓存中,且将第一逻辑地址存放至缓存链表中;
39.第二存放模块,配置用于按照预设规则从闪存中继续读取多个数据,并将多个数据分别存放至固态硬盘的缓存中,且将与多个数据分别对应的多个第二逻辑地址依次存放至缓存链表中;以及
40.读取模块,配置用于基于缓存链表中的逻辑地址从缓存中读取对应的数据。
41.本发明的又一方面,还提供了一种计算机可读存储介质,存储有计算机程序指令,
该计算机程序指令被处理器执行时实现上述方法。
42.本发明的再一方面,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该计算机程序被处理器执行时执行上述方法。
43.本发明至少具有以下有益技术效果:
44.本发明通过设置判定数组来判断其中的逻辑地址的顺序性,并在符合顺序性的情况下对后续的还未发生读请求的数据进行预读,并将预读的多个数据存放在缓存中,且将多个数据的第二逻辑地址存放在缓存链表中,可以在后续对应的读请求到达时,直接从缓存中向主机发送对应的数据,不需要从闪存中读取;通过将已读取过的当前数据存放在缓存中,以及将第一逻辑地址存放在缓存链表中,可以在后续又对该当前数据进行读取时,直接通过第一逻辑地址从缓存中读取;由此,通过在接收到读请求时及时从缓存中读取数据,比现有的从闪存中读取数据更加快速,极大提升了固态硬盘的读性能。
附图说明
45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
46.图1为根据本发明实施例提供的基于固态硬盘的数据读取方法的示意图;
47.图2为根据本发明实施例提供的基于固态硬盘的数据读取系统的示意图;
48.图3为根据本发明实施例提供的实现基于固态硬盘的数据读取方法的计算机可读存储介质的示意图;
49.图4为根据本发明实施例提供的执行基于固态硬盘的数据读取方法的计算机设备的硬件结构示意图。
具体实施方式
50.为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
51.需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称的非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备固有的其他步骤或单元。
52.基于上述目的,本发明实施例的第一个方面,提出了一种基于固态硬盘的数据读取方法的实施例。图1示出的是本发明提供的基于固态硬盘的数据读取方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:
53.步骤s10、响应于固态硬盘接收到主机发送的读请求,将读请求对应的第一逻辑地址添加至判定数组中,并检查完成添加的当前判定数组是否符合顺序性;
54.步骤s20、响应于当前判定数组符合顺序性,查询缓存链表中是否存在第一逻辑地址;
55.步骤s30、响应于缓存链表中不存在第一逻辑地址,从固态硬盘的闪存中读取对应于第一逻辑地址的当前数据,并将当前数据存放至固态硬盘的缓存中,且将第一逻辑地址存放至缓存链表中;
56.步骤s40、按照预设规则从闪存中继续读取多个数据,并将多个数据分别存放至固态硬盘的缓存中,且将与多个数据分别对应的多个第二逻辑地址依次存放至缓存链表中;
57.步骤s50、基于缓存链表中的逻辑地址从缓存中读取对应的数据。
58.本发明实施例通过设置判定数组来判断其中的逻辑地址的顺序性,并在符合顺序性的情况下对后续的还未发生读请求的数据进行预读,并将预读的多个数据存放在缓存中,且将多个数据的第二逻辑地址存放在缓存链表中,可以在后续对应的读请求到达时,直接从缓存中向主机发送对应的数据,不需要从闪存中读取;通过将已读取过的当前数据存放在缓存中,以及将第一逻辑地址存放在缓存链表中,可以在后续又对该当前数据进行读取时,直接通过第一逻辑地址从缓存中读取;由此,通过在接收到读请求时及时从缓存中读取数据,比现有的从闪存中读取数据更加快速,极大提升了固态硬盘的读性能。
59.在一些实施例中,检查完成添加的当前判定数组是否符合顺序性包括:判断当前判定数组中的所有逻辑地址的数量是否等于预设的数组元素总数量;响应于所有逻辑地址的数量小于数组元素总数量,确认当前判定数组不符合顺序性;或者响应于所有逻辑地址的数量等于数组元素总数量,计算所有逻辑地址的均值,并判断第一逻辑地址的值与均值的差值是否大于第一预设数值;响应于差值大于第一预设数值,将顺序性计数的值减一,并判断减一后的顺序性计数的值是否大于零;响应于减一后的顺序性计数的值大于零,确认当前判定数组符合顺序性;响应于减一后的顺序性计数的值等于零,确认当前判定数组不符合顺序性。
60.本实施例中,第一预设数值为大于0的自然数。为了保证数值连续,第一预设数值的值不能太大,否则就不连续了,所以设定了大于第一预设数值后,就把顺序性减一。
61.在一些实施例中,检查完成添加的当前判定数组是否符合顺序性还包括:响应于差值小于等于第一预设数值,将顺序性计数的值加一,并确认当前判定数组符合顺序性。
62.在一些实施例中,按照预设规则从闪存中继续读取多个数据包括:判断缓存链表的剩余可存放逻辑地址数是否小于第二预设数值;响应于剩余可存放逻辑地址数大于等于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为第二预设数值;响应于剩余可存放逻辑地址数小于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为剩余可存放逻辑地址数。
63.例如,假设缓存链表长度为10,设置第二预设数值m=4,多个数据的数量为n,具体如下:
64.a.假设当前缓存链表中的逻辑地址分别为5、6、7、8,当前需要读取逻辑地址9对应的数据,缓存链表剩余6个空间,存放m个逻辑地址的空间足够,则n=m=4;
65.b.假设当前缓存链表中的逻辑地址分别为5、6、7、8、9、10、11,当前需要读取逻辑地址12对应的数据,缓存链表剩余3个空间,存放m个逻辑地址空间不够,则n=剩余个数=3,这里链表最大逻辑地址允许14,希望读取的最大逻辑地址为15,15》14,无法完成m个数据读取,则读取个数=14-12 1=3个,即剩余可存放逻辑地址数。
66.在另一实施例中,数据加入到链表中后检查缓存链表长度,如果当前长度大于最
大长度则减m,并从链表中获取逻辑地址最小的一项并删除,直到当前长度为最大长度减m。使用最大长度减m的原因在于可以有效保证缓存能够持续更新并删除旧数据,无需其他复杂算法的引入。
67.在一些实施例中,方法还包括:响应于当前判定数组不符合顺序性且缓存链表中存在第一逻辑地址,从缓存链表中获取第一逻辑地址,并基于第一逻辑地址从缓存中读取对应的当前数据。
68.本实施例中,缓存链表中存在的逻辑地址对应的数据,便可以直接从缓存中读取,提高读数据效率。
69.在一些实施例中,方法还包括:响应于当前判定数组不符合顺序性且缓存链表中不存在第一逻辑地址,从闪存中读取对应于第一逻辑地址的当前数据。
70.本实施例中,若当前判定数组不符合顺序性且缓存链表中不存在第一逻辑地址,可以从闪存在固态硬盘中的多个并发区域来分别读取多个数据,以缩短整体执行时间。
71.在一些实施例中,方法还包括:将当前数据在缓存中的存储位置存放至缓存链表中,并将多个数据在缓存中的存储位置存放至缓存链表中。
72.本实施例中,当数据存放到缓存中后,在存放逻辑地址时,会将数据在缓存中的存储位置也存放在缓存链表中,以便于在缓存中寻找数据。
73.本发明实施例的第二个方面,还提供了一种基于固态硬盘的数据读取系统。图2示出的是本发明提供的基于固态硬盘的数据读取系统的实施例的示意图。如图2所示,一种基于固态硬盘的数据读取系统包括:
74.检查模块10,配置用于响应于固态硬盘接收到主机发送的读请求,将读请求对应的第一逻辑地址添加至判定数组中,并检查完成添加的当前判定数组是否符合顺序性;
75.查询模块20,配置用于响应于当前判定数组符合顺序性,查询缓存链表中是否存在第一逻辑地址;
76.第一存放模块30,配置用于响应于缓存链表中不存在第一逻辑地址,从固态硬盘的闪存中读取对应于第一逻辑地址的当前数据,并将当前数据存放至固态硬盘的缓存中,且将第一逻辑地址存放至缓存链表中;
77.第二存放模块40,配置用于按照预设规则从闪存中继续读取多个数据,并将多个数据分别存放至固态硬盘的缓存中,且将与多个数据分别对应的多个第二逻辑地址依次存放至缓存链表中;以及
78.读取模块50,配置用于基于缓存链表中的逻辑地址从缓存中读取对应的数据。
79.在一些实施例中,检查模块10包括顺序性检查模块,配置用于判断当前判定数组中的所有逻辑地址的数量是否等于预设的数组元素总数量;响应于所有逻辑地址的数量小于数组元素总数量,确认当前判定数组不符合顺序性;或者响应于所有逻辑地址的数量等于数组元素总数量,计算所有逻辑地址的均值,并判断第一逻辑地址的值与均值的差值是否大于第一预设数值;响应于差值大于第一预设数值,将顺序性计数的值减一,并判断减一后的顺序性计数的值是否大于零;响应于减一后的顺序性计数的值大于零,确认当前判定数组符合顺序性;响应于减一后的顺序性计数的值等于零,确认当前判定数组不符合顺序性。
80.在一些实施例中,检查模块10还包括顺序性计数加一模块,配置用于响应于差值
小于等于第一预设数值,将顺序性计数的值加一,并确认当前判定数组符合顺序性。
81.在一些实施例中,第二存放模块40包括多个数据读取模块,配置用于判断缓存链表的剩余可存放逻辑地址数是否小于第二预设数值;响应于剩余可存放逻辑地址数大于等于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为第二预设数值;响应于剩余可存放逻辑地址数小于第二预设数值,从闪存中继续读取多个数据,且多个数据的数量为剩余可存放逻辑地址数。
82.在一些实施例中,系统还包括当前数据读取模块,配置用于响应于当前判定数组不符合顺序性且缓存链表中存在第一逻辑地址,从缓存链表中获取第一逻辑地址,并基于第一逻辑地址从缓存中读取对应的当前数据。
83.在一些实施例中,系统还包括闪存读取模块,配置用于响应于当前判定数组不符合顺序性且缓存链表中不存在第一逻辑地址,从闪存中读取对应于第一逻辑地址的当前数据。
84.在一些实施例中,系统还包括存储位置存放模块,配置用于将当前数据在缓存中的存储位置存放至缓存链表中,并将多个数据在缓存中的存储位置存放至缓存链表中。
85.本发明实施例的第三个方面,还提供了一种计算机可读存储介质,图3示出了根据本发明实施例提供的实现基于固态硬盘的数据读取方法的计算机可读存储介质的示意图。如图3所示,计算机可读存储介质3存储有计算机程序指令31。该计算机程序指令31被处理器执行时实现上述任意一项实施例的方法。
86.应当理解,在相互不冲突的情况下,以上针对根据本发明的基于固态硬盘的数据读取方法阐述的所有实施方式、特征和优势同样地适用于根据本发明的基于固态硬盘的数据读取系统和存储介质。
87.本发明实施例的第四个方面,还提供了一种计算机设备,包括如图4所示的存储器402和处理器401,该存储器402中存储有计算机程序,该计算机程序被该处理器401执行时实现上述任意一项实施例的方法。
88.如图4所示,为本发明提供的执行基于固态硬盘的数据读取方法的计算机设备的一个实施例的硬件结构示意图。以如图4所示的计算机设备为例,在该计算机设备中包括一个处理器401以及一个存储器402,并还可以包括:输入装置403和输出装置404。处理器401、存储器402、输入装置403和输出装置404可以通过总线或者其他方式连接,图4中以通过总线连接为例。输入装置403可接收输入的数字或字符信息,以及产生与基于固态硬盘的数据读取系统的用户设置以及功能控制有关的键信号输入。输出装置404可包括显示屏等显示设备。
89.存储器402作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本技术实施例中的基于固态硬盘的数据读取方法对应的程序指令/模块。存储器402可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储基于固态硬盘的数据读取方法的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器402可选包括相对于处理器401远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部
网、局域网、移动通信网及其组合。
90.处理器401通过运行存储在存储器402中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的基于固态硬盘的数据读取方法。
91.最后需要说明的是,本文的计算机可读存储介质(例如,存储器)可以是易失性存储器或非易失性存储器,或者可以包括易失性存储器和非易失性存储器两者。作为例子而非限制性的,非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦写可编程rom(eeprom)或快闪存储器。易失性存储器可以包括随机存取存储器(ram),该ram可以充当外部高速缓存存储器。作为例子而非限制性的,ram可以以多种形式获得,比如同步ram(dram)、动态ram(dram)、同步dram(sdram)、双数据速率sdram(ddr sdram)、增强sdram(esdram)、同步链路dram(sldram)、以及直接rambus ram(drram)。所公开的方面的存储设备意在包括但不限于这些和其它合适类型的存储器。
92.本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。为了清楚地说明硬件和软件的这种可互换性,已经就各种示意性组件、方块、模块、电路和步骤的功能对其进行了一般性的描述。这种功能是被实现为软件还是被实现为硬件取决于具体应用以及施加给整个系统的设计约束。本领域技术人员可以针对每种具体应用以各种方式来实现的功能,但是这种实现决定不应被解释为导致脱离本发明实施例公开的范围。
93.以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。
94.应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。
95.所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
转载请注明原文地址:https://tc.8miu.com/read-121.html