缓存数据的刷盘方法及装置制造方法

文档序号:6636637阅读:245来源:国知局
缓存数据的刷盘方法及装置制造方法
【专利摘要】本发明提供一种缓存数据的刷盘方法及装置。一种缓存数据的刷盘方法,应用于存储系统中,所述存储系统包括控制器、磁盘和SSD,所述SSD作为所述磁盘的缓存,所述方法由控制器执行,所述方法包括:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N;根据脏数据块的标识与LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA;根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
【专利说明】缓存数据的刷盘方法及装置

【技术领域】
[0001 ] 本发明实施例涉及存储技术,尤其涉及一种缓存数据的刷盘方法及装置。

【背景技术】
[0002]随着固态硬盘(SSD, Solid State Drive)技术的成熟和成本的下降,越来越多的存储系统开始选用SSD作为高速缓冲存储器(cache)介质。
[0003]现有技术中,存储系统通过cache技术进行写缓存时:控制器首先接收处理器下发的写请求,其中该写请求包括了待写入数据及该待写入数据对应的逻辑区块地址(LBA,Logical Block Address);其次,将待写入数据写入到SSD的缓存块中,将该缓存块的状态设置为脏数据块,并将该脏数据块的标识与待写入数据对应的LBA进行关联存储;最后在cache的刷盘时机,向磁盘进行数据同步(即将写缓存中的数据发送到磁盘进行存储,本发明中也称为cache的刷盘)。现有技术中,在进行cache刷盘时:控制器采用异步1的方式向SSD发送多个缓存数据读取请求以获得多个脏数据块的缓存数据;并在接收到任一缓存数据读取请求对应的缓存数据后,将该缓存数据及该缓存数据对应的LBA发送至磁盘,以使磁盘将该缓存数据存储至对应的LBA。
[0004]由于磁盘存储数据时,首先需要将磁头步进到LBA所指示的位置,再将缓存数据进行存储;因此,现有技术中,存在控制器刷盘效率低的问题。


【发明内容】

[0005]本发明提供一种缓存数据的刷盘方法及装置,用以解决现有技术中控制器刷盘效率低的问题。
[0006]第一方面,本发明提供一种缓存数据的刷盘方法,应用于存储系统中,所述存储系统包括控制器、磁盘和固态硬盘SSD,所述SSD作为所述磁盘的缓存,所述方法由控制器执行,所述方法包括:
[0007]向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;
[0008]接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;
[0009]根据脏数据块的标识与磁盘逻辑区块地址LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;
[0010]根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0011]结合第一方面,在第一方面的第一种可能实现的方式中,所述向所述SSD发送缓存数据读取请求之前,还包括:根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
[0012]结合第一方面的第一种可能实现的方式,在第一方面的第二种可能实现的方式中,所述根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,包括:根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于或等于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ;从所述第一队列中选择所述M个待刷盘的脏数据块。
[0013]结合第一方面的第第二种可能实现的方式,在第一方面的第三种可能实现的方式中,从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0014]结合第一方面的第二种或第三种可能实现的方式,在第一方面的第四种可能实现的方式中,所述方法还包括:根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;
[0015]相应的,向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识,包括:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
[0016]第二方面,本发明提供一种控制器,所述控制器应用于存储系统中,所述存储系统包括所述控制器、磁盘和固态硬盘SSD,所述SSD作为所述磁盘的缓存,所述控制器包括:
[0017]读取请求发送模块,用于向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;
[0018]读取响应接收模块,用于接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;
[0019]LBA确定模块,用于根据脏数据块的标识与磁盘逻辑区块地址LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;
[0020]刷盘模块,用于根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0021]结合第二方面,在第二方面的第一种可能实现的方式中,所述读取请求发送模块,还用于:根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
[0022]结合第二方面的第一种可能实现的方式,在第二方面的第二种可能实现的方式中,所述读取请求发送模块,具体用于:根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ;从所述第一队列中选择所述M个待刷盘的脏数据块。
[0023]结合第二方面的第二种可能实现的方式,在第二方面的第三种可能实现的方式中,所述读取请求发送模块,具体用于:从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0024]结合第二方面的第二种或第三种可能实现的方式,在第二方面的第四种可能实现的方式中,所述读取请求发送模块,还用于:根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;
[0025]相应的,所述读取请求发送模块,具体用于:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
[0026]本发明提供一种缓存数据的刷盘方法及装置,通过根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘,避免了由于磁盘来回寻道而浪费的刷盘时间,提高了控制器的刷盘效率。

【专利附图】

【附图说明】
[0027]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0028]图1为本发明缓存数据的刷盘方法的应用场景示意图;
[0029]图2为本发明缓存数据的刷盘方法实施例一的流程图;
[0030]图3为本发明缓存数据的刷盘方法实施例二的流程图;
[0031]图4为本发明缓存数据的刷盘方法实施例三的流程图;
[0032]图5为本发明实施例LBA示意图;
[0033]图6为本发明控制器实施例一的结构示意图;
[0034]图7为本发明控制器实施例四的结构示意图。

【具体实施方式】
[0035]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0036]图1为本发明缓存数据的刷盘方法的应用场景示意图;如图1所示,存储系统中,处理器11将待写入的数据发送至控制器12 ;控制器12首先将接收到的数据发送至SSD 13进行缓存,然后再在cache的刷盘时机将缓存在SSD 13的数据同步至磁盘14。现有技术中,控制器12将缓存在SSD 13的数据同步至磁盘14时:控制器12采用异步1的方式向SSD 13发送多个缓存数据读取请求以获得多个缓存数据;并在接收到任一缓存数据读取请求对应的缓存数据后,将该缓存数据及该缓存数据对应的LBA发送至磁盘14,以使磁盘14将该缓存数据存储至对应的LBA。由于磁盘存储数据时,首先需要将磁头步进到LBA所指示的位置,再将缓存数据进行存储;且磁头只能向一个方向步进;因此,存在控制器刷盘效率低的问题。
[0037]图2为本发明缓存数据的刷盘方法实施例一的流程图,如图2所示,本实施例的方法可以包括:
[0038]步骤201、向SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;
[0039]可选的,所述向SSD发送缓存数据读取请求,包括:
[0040]向SSD发送M个缓存数据读取请求,每一个缓存数据读取请求中包括一个待刷盘的脏数据块的标识;或者,向SSD发送一个缓存数据读取请求,该缓存数据读取请求中包括M个待刷盘的脏数据块的标识。
[0041]可选的,所述M个待刷盘的脏数据块可以为所有脏数据块中任选的M个脏数据块。
[0042]步骤202、接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;
[0043]步骤203、根据脏数据块的标识与LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;
[0044]步骤204、根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0045]例如,若N = 5,且待刷盘的脏数据块I对应的LBA为2、待刷盘的脏数据块2对应的LBA为5、待刷盘的脏数据块3对应的LBA为3、待刷盘的脏数据块4对应的LBA为6、待刷盘的脏数据块5对应的LBA为4 ;则:控制器按照先待刷盘的脏数据块I的缓存数据、再待刷盘的脏数据块3的缓存数据、再待刷盘的脏数据块5的缓存数据、再待刷盘的脏数据块2的缓存数据、再待刷盘的脏数据块4的缓存数据的顺序将5个待刷盘的脏数据块的缓存数据存储至磁盘。
[0046]现有技术中,控制器通过异步1的方式向SSD发送多个缓存数据读取请求,并在接收到任一缓存数据读取请求对应的缓存数据后,就将该缓存数据同步至磁盘。本发明中,根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0047]现有技术中,由于控制器通过异步1的方式向SSD发送多个缓存数据读取请求,并在接收到任一缓存数据读取请求对应的缓存数据后,就将该缓存数据同步至磁盘;且磁盘在存储数据时,首先需要将磁头步进到LBA所指示的位置,再将缓存数据进行存储;且磁头只能向一个方向步进。因此,若磁头当前位于LBA等于3的位置,控制器第一次收到的缓存数据I对应的LBA为8、第二次收到的缓存数据2对应的LBA为6、第三次收到的缓存数据3对应的LBA为2 ;则:磁盘的磁头首先需要步进至LBA等于8为的位置将缓存数据I进行存储,接着磁头需要步进至LBA最大的位置后、重新回到LBA等于O的位置、再步进至LBA等于6的位置将缓存数据2进行存储,接着磁头又需要步进至LBA最大的位置后、重新又回到LBA等于O的位置、再步进至LBA等于2的位置将缓存数据3进行存储;因此,磁盘需要来回寻道(也即,步进至LBA最大的位置后、重新回到LBA等于O的位置、再步进至缓存数据对应的LBA的位置)才能实现对各缓存数据的存储;而磁盘来回寻道需要耗费较长时间;因此,现有技术中存在控制器刷盘效率低的问题。本发明中,通过根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘,避免了由于磁盘来回寻道而浪费的刷盘时间,提高了控制器的刷盘效率。
[0048]本实施例,通过根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘,避免了由于磁盘来回寻道而浪费的刷盘时间,提高了控制器的刷盘效率。
[0049]需要说明的是,本发明中方法的执行主体是控制器。
[0050]图3为本发明缓存数据的刷盘方法实施例二的流程图,如图3所示,本实施例的方法可以包括:
[0051]步骤301、获得脏数据块占SSD的所有缓存块的比例;
[0052]可选的,当控制器接收到处理器发送的待写入数据时,将待写入数据写入到SSD的若干个缓存块中,并将该若干个缓存块的状态设置为脏数据块;且该若干个缓存块分别对应一脏数据块的标识。
[0053]其中,所述脏数据块占SSD的所有缓存块的比例可以为:状态为脏数据块的缓存块的数量除以SSD缓存块的总数,再乘以百分之百。
[0054]步骤302、确定所述比例是否大于或等于预设比例;
[0055]若是,则执行步骤303 ;否则,结束。
[0056]可选的,预设比例可以为40%。
[0057]步骤303、根据当前刷盘操作的LBA,从全部脏数据块中选择M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA ;
[0058]可选的,根据脏数据块占SSD的所有缓存块的比例来确定M的大小:当脏数据块占SSD的所有缓存块的比例越大时,M越大。
[0059]可选的,当前刷盘操作的LBA可以为最近一次将一脏数据块的缓存数据存储至磁盘时,该脏数据块对应的LBA。
[0060]本实施例中,通过根据当前刷盘操作的LBA,从全部脏数据块中选择M个待刷盘的脏数据块;其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA ;使得控制器向磁盘进行同步的所有缓存数据所对应的LBA都大于或等于当前刷盘操作的LBA,使得在每次进行刷盘时磁头都是往一个方向步进,从而减小了磁头寻道的时间;进一步提高了控制器的刷盘效率。
[0061]可选的,所述根据当前刷盘操作的LBA,从全部脏数据块中选择M个待刷盘的脏数据块,包括:
[0062]根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于或等于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ;从所述第一队列中选择所述M个待刷盘的脏数据块。
[0063]具体的,在所有脏数据块的标识中,确定若一脏数据块的LBA大于或等于当前刷盘操作的LBA,则将该脏数据块放入第一队列。
[0064]例如,若当前存在5个脏数据块,脏数据块1、脏数据块2、脏数据块3、脏数据块4和脏数据块5,脏数据块I的LBA为5,脏数据块2的LBA为15、脏数据块3的LBA为20、脏数据块4的LBA为25、脏数据块5的LBA为30,当前刷盘操作的LBA为9 ;则将脏数据块2、脏数据块3、脏数据块4、脏数据块5放入第一队列;将脏数据块I放入第二队列。
[0065]进一步可选的,从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0066]例如,若M等于2,第一队列包括脏数据块A、脏数据块B、脏数据块C、脏数据块D、脏数据块E ;其中,脏数据块A的LBA为5,脏数据块B的LBA为9,脏数据块C的LBA为20,脏数据块D的LBA为3,脏数据块E的LBA为10 ;则通过从第一队列中选择LBA值小的所述M个待刷盘的脏数据块,获得的所述M个待刷盘的脏数据为脏数据块D和脏数据块A。
[0067]本实施例中,通过从第一队列中选择LBA值小的所述M个待刷盘的脏数据块,使得在刷盘时能够根据第一队列中所包括的各脏数据块的LBA由小至大的顺序,依次将第一队列中的M个脏数据块的缓存数据存储至磁盘;进一步减小了磁头寻道的时间,提高了控制器的刷盘效率。
[0068]步骤304、向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述M个待刷盘的脏数据块的标识;
[0069]可选的,控制器可以通过异步1的方式向SSD发送缓存数据读取请求。
[0070]步骤305、接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;
[0071]步骤306、根据脏数据块的标识与LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;
[0072]步骤307、根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘;
[0073]当M大于N时,例如,若控制器向SSD发送缓存数据读取请求(其中,包括8 (即,M)个待刷盘的脏数据块的标识)后,一段时间(例如,1ms)内收到了 6(也即,N)个待刷盘的脏数据块的缓存数据;则:控制器可以首先对该6个缓存数据进行磁盘同步。
[0074]本实施例,通过向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;并在接收到N待刷盘的脏数据块的缓存数据后对该N个缓存数据进行磁盘同步;从而避免了当控制器接收到若干个缓存数据的时间较晚时,由于等待该若干个缓存数据而浪费较长的时间。
[0075]可选的,在将N个待刷盘的脏数据块的缓存数据存储至所述磁盘之后,再将剩余的M-N个待刷盘的脏数据块的缓存数据存储至磁盘。
[0076]步骤308、回收cache空间;
[0077]可选的,可以通过将SSD中存储所述N个缓存数据的缓存块的状态由脏数据块更新为干净缓存块实现cache空间的回收;若一缓存块对应的状态为干净缓存块时,则控制器可以使用该缓存块来缓存数据。
[0078]需要说明的是,步骤308执行完之后,执行步骤301。
[0079]需要说明的是,当将第一队列不存在脏数据块时(也即,所有的脏数据块的LBA都小于当前刷盘操作的LBA),可以从第二队列中选取M个待刷盘的脏数据块。
[0080]图4为本发明缓存数据的刷盘方法实施例三的流程图,如图4所示,本实施例的方法可以包括:
[0081]步骤401、从第一队列中选择M个待刷盘的脏数据块;
[0082]可选的,从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0083]步骤402、根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;
[0084]其中,L小于或等于M ;
[0085]例如,图5为本发明实施例LBA示意图,如图5所示,M = 80,80个待刷盘的脏数据块分别对应的LBA为I?80,待刷盘的脏数据块的缓存数据的大小都为32K,且一个LBA对应32K;则将LBA连续的脏数据块合并后,可以获得3个(也即,L等于3)合并后的待刷盘的脏数据块(也即,合并后的待刷盘的脏数据块1、合并后的待刷盘的脏数据块2以及合并后的待刷盘的脏数据块3),且合并后的待刷盘的脏数据块I对应的LBA为1、合并后的待刷盘的脏数据块2对应的LBA为33、合并后的待刷盘的脏数据块3对应的LBA为65。在获得3个合并后的待刷盘的脏数据块后,可以根据合并后的待刷盘的脏数据块向SSD发送缓存数据读取请求。
[0086]步骤403、向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识;
[0087]步骤404、接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括合并后的待刷盘的脏数据块的缓存数据;
[0088]步骤405、根据脏数据块的标识与LBA的对应关系,确定所述合并后的待刷盘的脏数据块分别对应的LBA ;
[0089]步骤406、根据所述合并后的待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述合并后的待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0090]本实施例中,通过根据所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;根据所述合并后的待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述合并后的待刷盘的脏数据块的缓存数据存储至所述磁盘;减少了控制器向磁盘进行缓存数据同步的次数。
[0091]图6为本发明控制器实施例一的结构示意图,所述控制器应用于存储系统中,所述存储系统包括所述控制器、磁盘和SSD,所述SSD作为所述磁盘的缓存,如图6所示,本实施例的控制器可以包括:读取请求发送模块601,用于向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;读取响应接收模块602,用于接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;LBA确定模块603,用于根据脏数据块的标识与磁盘逻辑区块地址LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;刷盘模块604,用于根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0092]本实施例的控制器,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0093]控制器实施例二
[0094]可选的,在本发明控制器实施例一的基础上,读取请求发送模块601,还用于:根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
[0095]可选的,读取请求发送模块601,具体用于:根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ;从所述第一队列中选择所述M个待刷盘的脏数据块。
[0096]进一步可选的,读取请求发送模块601,具体用于:从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0097]本实施例的控制器,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0098]控制器实施例三
[0099]可选的,在本发明控制器实施例二的基础上,读取请求发送模块601,还用于:根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;相应的,读取请求发送模块602,具体用于:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
[0100]本实施例的控制器,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0101]图7为本发明控制器实施例四的结构示意图,如图7所示,本实施例的控制器可以包括:发射器701、接收器702和处理器703。其中,发射器701,用于向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识;接收器702,用于接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ;处理器703,用于根据脏数据块的标识与LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ;根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
[0102]本实施例的控制器,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0103]控制器实施例五
[0104]可选的,在本发明控制器实施例四的基础上,处理器703还用于:根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
[0105]可选的,处理器703,具体用于:根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ;从所述第一队列中选择所述M个待刷盘的脏数据块。
[0106]进一步可选的,处理器703,具体用于:从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
[0107]本实施例的控制器,可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0108]控制器实施例六
[0109]可选的,在本发明控制器实施例五的基础上,处理器703还用于:根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块;
[0110]发射器701,具体用于:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
[0111]本实施例的控制器,可以用于执行图4所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
[0112]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0113]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【权利要求】
1.一种缓存数据的刷盘方法,其特征在于,应用于存储系统中,所述存储系统包括控制器、磁盘和固态硬盘SSD,所述SSD作为所述磁盘的缓存,所述方法由控制器执行,所述方法包括: 向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识; 接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ; 根据脏数据块的标识与磁盘逻辑区块地址LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ; 根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
2.根据权利要求1所述的方法,其特征在于,所述向所述SSD发送缓存数据读取请求之前,还包括: 根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
3.根据权利要求2所述的方法,其特征在于,所述根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,包括: 根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于或等于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ; 从所述第一队列中选择所述M个待刷盘的脏数据块。
4.根据权利要求3所述的方法,其特征在于,从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括: 根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块; 相应的,向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识,包括: 向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
6.一种控制器,其特征在于,所述控制器应用于存储系统中,所述存储系统包括所述控制器、磁盘和固态硬盘SSD,所述SSD作为所述磁盘的缓存,所述控制器包括: 读取请求发送模块,用于向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括M个待刷盘的脏数据块的标识; 读取响应接收模块,用于接收所述SSD发送的缓存数据读取响应,所述缓存数据读取响应包括N个待刷盘的脏数据块的缓存数据,M大于或等于N ; LBA确定模块,用于根据脏数据块的标识与磁盘逻辑区块地址LBA的对应关系,确定所述N个待刷盘的脏数据块分别对应的LBA ; 刷盘模块,用于根据所述N个待刷盘的脏数据块分别对应的LBA,按照LBA由小至大的顺序,依次将所述N个待刷盘的脏数据块的缓存数据存储至所述磁盘。
7.根据权利要求6所述的控制器,其特征在于,所述读取请求发送模块,还用于: 根据当前刷盘操作的LBA,从全部脏数据块中选择所述M个待刷盘的脏数据块,其中,所述M个待刷盘的脏数据块分别对应的M个LBA均大于所述当前刷盘操作的LBA。
8.根据权利要求7所述的控制器,其特征在于,所述读取请求发送模块,具体用于: 根据所述当前刷盘操作的LBA和每个脏数据块的LBA,将所述每个脏数据块放入第一队列或第二队列,所述第一队列中的脏数据块的LBA大于所述当前刷盘操作的LBA,所述第二队列中的脏数据块的LBA小于所述当前刷盘操作的LBA ; 从所述第一队列中选择所述M个待刷盘的脏数据块。
9.根据权利要求8所述的控制器,其特征在于,所述读取请求发送模块,具体用于:从所述第一队列中选择LBA值小的所述M个待刷盘的脏数据块。
10.根据权利要求8或9所述的控制器,其特征在于,所述读取请求发送模块,还用于:根据选择的所述M个待刷盘的脏数据块的LBA,将所述M个待刷盘的脏数据块中LBA连续的脏数据块进行合并,获得合并后的待刷盘的脏数据块; 相应的,所述读取请求发送模块,具体用于:向所述SSD发送缓存数据读取请求,所述缓存数据读取请求包括所述合并后的待刷盘的脏数据块的标识。
【文档编号】G06F12/08GK104461936SQ201410712971
【公开日】2015年3月25日 申请日期:2014年11月28日 优先权日:2014年11月28日
【发明者】张志乐 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1