专利名称:提供多设备镜像和条带功能的磁盘缓存方法、设备和系统的制作方法
技术领域:
本发明涉及数据缓存。
背景技术:
众所周知,磁盘与内存间的输入输出(IO)速度一直是系统性能的一个重要瓶颈。在IO密集型的应用场景下,CPU往往需要等待磁盘10。目前很多系统采用内存或类似的易失性介质来作为磁盘的缓存,用于提高IO速度。但内存的价格较贵,且下电后数据丢失。根据程序的局部性原理,可以在主存和磁盘之间设置一个高速的容量介于磁盘和内存之间的存储器,把正在执行的指令地址附近的一部分指令或数据从磁盘调入这个存储器,大大缩短CPU等待数据的时间。这对提高程序的运行速度有很大的作用。这个介于主存和磁盘之间的高速存储器称作高速缓冲存储器(Cache),即高速缓存。当前为了提高磁盘的I/O性能,业界多家著名公司均在内存与磁盘间加入了磁盘的高速缓存,如facebook公司的flashcache (闪存)方案是较为成熟的方案之一,已在MySQL数据库服务器场景中应用。SSD(solid state disk,固态硬盘)是非常适合作为缓存的一种非易失性存储器,可以基本避免数据丢失。图I是facebook flashcache的磁盘缓存数据块地址映射关系示意图。如图I所示,在采用非易失性介质(包括SSD、PCM等,下文以SSD为例)作磁盘的高速缓存时,采用与内存相同的模式来组织磁盘的缓存(cache)。使用组相联模式来作为磁盘HDD到缓存SSD的地址映射方式。将SSD的空间等分为若干个组,每个组由512个SSD数据块组成,每个数据块为4KB大小。同样,将磁盘空间分为SSD大小的n个区域,每个区域内的组织方式和SSD的组织方式相同。磁盘数据块到SSD的映射公式为组号=(dbn/块大小/组大小)mod(组数),其中dbn表示磁盘数据块的扇区号,块大小为前述的SSD数据块大小,组大小为组中数据块的数量。组数为SSD中组的总数目。与此同时,在内存中需要保留缓存的元数据信息,在缓存中也需要保留缓存的元数据信息,两者需要同步。利用这些元数据信息,可以有效定位各个数据块。然而,该现有技术无法将数据动态地分布到多物理或逻辑缓存设备上,实现缓存数据的并行读写。缓存的数据,不论其特性如何,即是否为脏、是否为重要的数据等,均只有一个数据副本。
发明内容
本发明的目的是提供能够解决上述问题的缓存机制。 为此,在第一方面,本发明提供一种对多个缓存设备进行输入输出10操作的方法。其中为所述多个缓存设备配置缓存设备管理信息。所述方法包括基于第一 10操作,选择配置条带和镜像中的至少一个;根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存块配置为镜像或条带。本发明在第二方面提供一种对多个缓存设备进行输入输出IO操作的设备。该设备包括设备映射模块判断IO操作请求是否要转发由所述多个缓存设备处理以及所述处理是否涉及条带和镜像中的至少一个操作;条带/镜像管理模块,在IO操作需要在所述多个缓存设备中进行条带和镜像中的至少一个操作时,根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;10请求执行模块,提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。在第三方面,本发明提供一种对多个缓存设备进行输入输出IO操作的系统。该系统包括磁盘、为磁盘提供缓存功能的多个缓存设备和具有内存的处理设备;其中处理设备 判断对内存的IO操作请求是否要转发由所述多个缓存设备处理以及所述处理是否涉及条带和镜像中的至少一个操作;在IO操作需要在所述多个缓存设备中进行条带和镜像中的至少一个操作时,根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。在第四方面,本发明提供一种缓存数据的处理方法,其特征在于,所述方法包括缓存管理模块读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;所述缓存管理模块根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。第五方面,本发明提供一种缓存数据的缓存管理设备。所述设备包括读取模块,用于读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;发起模块,根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。在第六方面,本发明提供一种缓存数据的处理系统。所述处理系统包括多个SSD缓存设备;缓存管理设备,读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;根据所述缓存块信息中的至少两个地址向所述多个SSD缓存设备中的至少两个发起数据读取操作。本发明实施例通过在缓存设备中配置缓存块条带,实现IO请求的多设备并行处理,提高缓存块读取的性能;通过对脏缓存块增加镜像副本,提高数据可靠性。
下面将参照附图对本发明的具体实施方案进行更详细的说明,其中图I是facebook flashcache的磁盘缓存数据块地址映射关系示意图;图2是本发明实施例的系统框图;图3为组相联模式中缓存和主存的组织示意图;图4是由多个SSD设备组成的磁盘缓存的示意图;图5是本发明实施例的磁盘缓存多设备镜像/条带配置的示意图;图6为在缓存中进行镜像/条带配置的操作流程图;图7是脏数据回写后进行镜像重配置的操作流程图8是干净数据写命中后进行条带重配置的操作流程示意图;图9是进行缓存空间扩展前的状态示意图;图10是进行缓存空间扩展并完成数据迁移后的状态示意图;图11是进行缓存空间收缩前的状态示意图;图12是完成缓存空间收缩后的状态示意图。图13是虚拟组cache_set的元数据的一个例子;图14是虚拟块cache_block的一个例子;图15 是 cacheblock_state 取值的一个例子;图16是缓存池控制信息的一个例子;图17是ssd设备的控制信息的一个例子;图18是ssd组元数据ssd_set的一个例子;图19是元数据ssd_block的一个例子;图20是本发明一个实施例的数据读取示意图;图21是本发明一个实施例的缓存管理设备的示意图。
具体实施例方式本发明技术方案通过改进磁盘缓存的缓存设备管理模式和缓存数据块的地址映射方式,在缓存内部实现缓存数据的镜像和条带功能,使用户能够根据缓存数据块的不同特性或者用户需要对其进行差异化的镜像和条带配置,达到性能和可靠性上的最优结合。在一个实施例中,本发明提供一种缓存数据的处理方法。所述方法包括缓存管理模块读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;所述缓存管理模块根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。优选地,所述方法包括在缓存管理模块读取缓存块信息的步骤之前,提交与所述条带相符的输入输出数据到所述两个地址,从而所述两个地址配置为条带。优选地,所述方法包括,在缓存管理模块读取缓存块信息的步骤之前,进行脏数据回写;所述脏数据回写的步骤包括,在该脏数据回写操作和配置为镜像的地址有关的情况下,保留一个地址中的镜像而删除其它地址中的镜像。优选地,所述方法包括在缓存管理模块读取缓存块信息的步骤之前,查找与对缓存写命中操作有关的地址的配置;在所述配置为条带的情况下,查找镜像的配置要求相符的地址;提交与所述镜像相符的输入输出数据到不同的所述地址,从而所述缓存地址配置为镜像。在另一个实施例中,本发明提供一种缓存数据的缓存管理设备。所述设备包括读取模块,用于读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;发起模块,根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。 在又一个实施例中,本发明提供一种缓存数据的处理系统。所述处理系统包括多个SSD缓存设备;缓存管理设备,读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;根据所述缓存块信息中的至少两个地址向所述多个SSD缓存设备中的至少两个发起数据读取操作。在再一个实施例中,提供一种对多个缓存设备进行输入输出IO操作的方法。其中为所述多个缓存设备配置缓存设备管理信息。所述方法包括基于第一 IO操作,选择配置条带和镜像中的至少一个;根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。优选地,第一 IO操作是对磁盘写数据,将磁盘读操作未命中的数据写入缓存设备,或者缓存写命中,其中所述条带和镜像中的至少一个是镜像。优选地,第一 IO操作是对脏数据进行磁盘回写,所述条带和镜像中的至少一个是条带。
优选地,所述方法包括根据缓存设备管理信息,查找与第二 IO操作有关的缓存设备中的缓存地址的配置;在所述配置为镜像和条带之一的情况下,根据缓存设备管理信息,查找与镜像和条带之另一个的配置要求相符的不同缓存设备中的缓存地址;提交与所述镜像和条带之另一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。进一步优选地,第二 IO操作是对脏数据进行磁盘回写,镜像和条带之一是镜像,镜像和条带之另一个是条带。或者,第二 IO操作是对缓存写命中,镜像和条带之一是条带,镜像和条带之另一个是镜像。优选地,条带和镜像中的至少一个是镜像,所述方法包括在第三IO操作和配置为镜像的缓存地址有关的情况下,保留一个镜像而删除其它镜像。进一步优选地,第三IO操作是脏数据回写。优选地,所述方法包括在所述多个缓存设备中添加至少一个新缓存设备时,根据缓存设备管理信息,查找所述多个缓存设备中的至少一个配置为条带和/或镜像的第一缓存地址,并且将所述第一缓存地址上的条带和/或镜像迁移到至少一个新缓存设备。进一步优选地,所述迁移条带或镜像的步骤包括将镜像变为条带。或者,所述迁移步骤包括根据缓存设备管理信息,在至少一个新缓存设备中查找与第一缓存地址上的条带和/或镜像的配置要求相符的第二缓存地址;提交第一缓存地址中的输入输出数据到所述第二缓存地址,从而所述第二缓存地址配置为镜像或条带。优选地,所述方法包括当所述多个缓存设备中释放至少一个缓存设备时,根据缓存设备管理信息,查找所述至少一个缓存设备中的配置为条带和/或镜像的第三缓存地址并且将第三缓存地址中的条带和/或镜像迁移到所述多个缓存设备中的其它缓存设备。进一步优选地,在释放所述缓存设备时,删除所述至少一个缓存设备中的条带和/或镜像中的一部分。或者,在释放所述至少一个缓存设备时,删除该至少一个缓存设备的至少一部分较冷缓存块中的数据。优选地,所述方法包括在提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址的步骤之后,更新缓存设备管理信息。优选地,多个缓存设备采用组相联模式管理。优选地,多个缓存设备按数据块为单位进行IO操作。优选地,所述多个缓存设备为磁盘提供缓存功能,所述方法包括判断针对内存的第一 IO操作是否需要转发给多个缓存设备,并且在需要转发给多个缓存设备的情况下执行所述选择配置条带和镜像中的至少一个的步骤。优选地,缓存管理模块读取缓存块信息的步骤包括解析缓存块信息,以得到所述至少两个地址。进一步优选地,所述方法包括根据解析结果初始化块输入输出数据bio,所述缓存管理模块根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作的步骤包括提交bio到所述至少两个SSD缓存设备。在再又一个实施例中,提供一种对多个缓存设备进行输入输出IO操作的设备。该设备包括设备映射模块,判断IO操作请求是否要转发由所述多个缓存设备处理以及所述处理是否涉及条带和镜像中的至少一个操作;条带/镜像管理模块,在IO操作需要在所述多个缓存设备中进行条带和镜像中的至少一个操作时,根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;10请求执行模块,提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。
优选地,条带/镜像管理模块根据缓存设备管理信息,查找与第二 IO操作有关的缓存设备中的缓存地址的配置,在所述配置为镜像和条带之一的情况下,根据缓存设备管理信息,查找与镜像和条带之另一个的配置要求相符的不同缓存设备中的缓存地址;IO请求执行模块提交与所述镜像和条带之另一个相符的输入输出数据到所述不同缓存设备中,从而所述缓存地址配置为镜像或条带。优选地,所述多个缓存设备是闪存固态硬盘SSD或相变存储器固态硬盘PCM SSD0优选地,读取模块包括解析模块,解析缓存块信息,以得到所述至少两个地址。进一步优选地,所述缓存管理设备包括初始化模块,根据解析结果初始化块输入输出数据bio,所述发起模块提交bio到所述至少两个SSD缓存设备。在另又一个实施例中,提供一种对多个缓存设备进行输入输出IO操作的系统。该系统包括磁盘、为磁盘提供缓存功能的多个缓存设备和具有内存的处理设备;其中处理设备判断对内存的IO操作请求是否要转发由所述多个缓存设备处理以及所述处理是否涉及条带和镜像中的至少一个操作;在IO操作需要在所述多个缓存设备中进行条带和镜像中的至少一个操作时,根据缓存设备管理信息,查找与所述条带和镜像中的至少一个的配置要求相符的不同缓存设备中的缓存地址;提交与所述条带和镜像中的至少一个相符的输入输出数据到所述不同缓存设备中的缓存地址,从而所述缓存地址配置为镜像或条带。优选地,缓存管理设备解析缓存块信息,以得到所述至少两个地址。进一步优选地,所述缓存管理设备根据解析结果初始化块输入输出数据bio,提交bio到所述至少两个SSD缓存设备。图2是本发明实施例的系统框图。如图2所示,系统包括处理设备和缓存池27。处理设备包括应用程序21、设备映射模块23、条带和镜像管理模块24、10请求执行模块25和虚拟缓存设备26。缓存池27用于存放缓存的数据,它是单一的虚拟设备。缓存池27可以由多个物理或逻辑缓存设备组成。每个逻辑缓存设备可以是一个缓存设备的分区,或一个完整的缓存盘,或配置为某种RAID级别的缓存阵列等。在本例中,缓存池采用SSD设备构成。缓存池27按数据块为单位进行10操作。缓存设备的每个缓存块采用元数据进行本数据块的管理。缓存池27可以缓和中央处理器和磁盘22之间速度不匹配的矛盾。当处理器存取磁盘22的某一单元时,可以将包括该单元在内的那一组单元内容调入缓存池27,以便处理器直接对缓存池27进行存取。缓存池27可以通过插槽连接到计算机设备中,或者通过远端网络连接到计算机设备中。虚拟缓存设备26包括对缓存池27进行IO操作所需要的缓存设备管理和缓存数据块管理。虚拟缓存设备26存放在内存中。应用程序21需要进行数据的读写操作时,向内核发送IO操作请求。内核中的设备映射模块23在判断内存中没有相关的数据因而需要从磁盘中读取,或者数据需要写入磁盘的情况下,继续判断该IO操作请求是否要转发由缓存池27处理以及缓存池27的处理是否涉及条带/镜像操作。如果需要在缓存池27进行条带/镜像操作,则调用条带/镜像 管理模块24。条带/镜像管理模块24访问虚拟缓存设备26获取缓存设备管理和缓存数据块管理并且获取缓存池中的缓存块元数据,查找与所述条带和/或镜像的配置要求相符的不同缓存设备中的缓存块,并且准备与所述条带和/或镜像相符的块输入输出数据。完成条带和/或镜像管理操作后,条带/镜像管理模块24将缓存设备和缓存块信息以及输入输出数据交给IO请求执行模块25。IO请求执行模块25完成对缓存池27的读写操作。IO请求执行模块25根据需要,还可以访问磁盘(HDD) 22。上文结合不同模块对处理设备和处理系统的结构做了描述,但是本领域的技术人员理解这些模块可以采用硬件、软件、固件或者其组合来实现,因此这些模块也可以采用其它的划分方式。下文将对缓存设备管理做详细讨论。具体地说,在缓存设备管理上,可以添加底层缓存设备的信息。在一个例子中,所述底层缓存设备的信息包括其总容量、已使用的容量、设备的接口类型和设备性质(裸设备、镜像或条带等RAID设备)等。这些信息用于缓存块分配时进行查询,以便将数据写入到最合理的位置上,最大化其IO性能。在缓存数据块管理上,可以添加和缓存块的镜像/条带配置有关的信息。在一个例子中,可以添加缓存块的镜像/条带标志字段,添加镜像/条带数量字段,添加镜像/条带的底层存储设备及其偏移字段。在工作中,条带/镜像管理模块24根据数据类型或用户需要来对数据进行条带/镜像配置或重配置。在一个例子中,当数据类型为干净的数据时,将缓存中干净的数据配置为多设备条带,提高其读写性能。将缓存中的脏数据配置为多设备镜像,在出现一个副本所在设备发生故障错误或IO出错时,仍能够读取另一个设备上的数据副本来提高缓存数据的容错能力。数据的镜像或条带数据可以动态调整。用户还可以设置自定义的镜像或条带模式。在缓存中数据的状态发生变化后,如脏数据通过磁盘回写操作变为干净数据,干净的数据由于写IO操作变为脏数据时,能够改变其镜像/条带模式,实现镜像/条带的重配置。在缓存的空间伸缩时,能够基于改变后的缓存所拥有的底层缓存设备的信息,对镜像/条带进行重配置。由于缓存设备增多,内存和缓存之间的对应关系趋于复杂。采用恰当的映射模式有助于提高内存和缓存之间的利用效率。组相联模式是CPU缓存所常用的内存地址到缓存映射模式。它介于直接映射和全相联映射之间。在内存地址变换复杂度和缓存块放置灵活性、空间利用率之间达成一个较好的平衡,综合效率较高。图3为组相联模式中缓存和主存的组织示意图。如图所示,主存有N个区。每个区有m块,分别编组为两组,第0组和第I组。缓存有m块,也分别编组为两组。按照组相联模式,主存中的数据块按组映射到缓存的同组的数据块。但两个数据块的块号可以不同,比如主存的第(N-l)m-l块属于第0组,它可以映射到缓存的第0组的第0块或第I块。下文将结合组相联模式进一步描述本发明的有关实施例。但是,本发明不限于此,还应该涵盖包括直接映射和全相联映射的其它映射方式。图4是由多个SSD设备组成的磁盘缓存的示意图。如图4所示,SSD缓存池包括但不限于三个SSD设备ssdl,ssd2和ssd3。每个SSD设备均可采用组相联模式来组织,拆分为一系列物理缓存块(下称物理块)。每个物理块中存储数据,并且包括用来管理该物理 块的元数据sscLblock。连续的物理块编组为物理组,该物理组包括管理该物理组的数据块信息的元数据ssd_set。每个物理块的ssd_block均有字段表明其所属的物理组ssd_set。在图中ssdl有组1,组3等。虚拟缓存设备(virtual cache device, vcd)可以对应于多个SSD设备的全部或部分空间。虚拟缓存设备采用与SSD设备相同的方式组织,在本例中采用组相联模式组织。虚拟缓存设备拆分为一些虚拟块,并且采用元数据cachejDlock管理本块的控制信息。一组连续的虚拟块组织为虚拟组,并且采用元数据cache_Set维护该组中的虚拟块信息。cache_block有字段表不它所在的虚拟块属于哪个虚拟组。cache_set具有和ssd_set基本相同的结构。图中,虚拟缓存设备有多个虚拟组,例如组I,组3等。以虚拟组I为例,该组对应于ssdl中的组I, ssd2中的组I和ssd3中的组I。可以采用不同结构的元数据来管理SSD设备、虚拟缓存设备。下面的图13-图19给出了组相联模式下的例子。需要说明,这样的例子仅属说明性的,本发明包括但不限于这样的数据结构。图13是虚拟组cache_set的元数据的一个例子。基于字段s_index可以找到本组cache_set,基于s_block_list可以快速找到组内各虚拟块的指针(cache_block),进而定位虚拟块。此外,还可以基于s_nr_dirty统计组内的脏块数。图14是虚拟块cache_block的一个例子。利用字段13_此11可以定位虚拟块在磁盘中的扇区号。利用字可以识别本虚拟块是空闲的还是有效的,常规配置、镜像配置还是条带配置。在镜像配置还是条带配置的情况下,利用字段b_ssd_bl0Ck可以迅速找到不同镜像或条带的sscLblock。字段b_cacheset表明虚拟块所属的虚拟组cache_set。图15 是 cacheblock_state 取值的一个例子。图16是缓存池控制信息的一个例子。字段p_ssd_header可以定位所有的ssd设备。字段P_pool_avail_size可以用于确定该缓存池的可用空间。字段p_ssd_header可以用于定位缓存池中所有SSD设备。图17是ssd设备的控制信息的一个例子。字段ssd_avail_size可以用于确定该ssd设备的可用空间。字段cache_pool可以确定ssd设备所属的缓存池。
图18是ssd组元数据ssd_set的一个例子。基于字段s_index可以找到本组ssd_set,基于字段s_block_list可以找到组内的各物理块cache_set。图19是元数据ssd_block的一个例子。字段owner_ssd表明该缓存块所在的SSD设备。字段ssd_block_offset表明该物理块在SSD设备中的起始偏移。字段owner_cacheblock表明该缓存块所在的虚拟块cache_block。字段same_cacheblock_list属于同个虚拟块caChe_bl0Ck的物理块链表。在镜像或条带需要迁移(比如下文将提到的缓存空间收缩)时,字段owner_cacheblock和same_cacheblock_list有助于快速定位有关镜像和条带。
基于图13-19描述的元数据,可以实现在SSD设备中镜像/条带的配置、重配置和在添加新设备或释放设备时的迁移操作。图5是本发明实施例的磁盘缓存多设备镜像/条带配置的示意图。如图所示,磁盘数据块的读写IO请求由内核转发由虚拟缓存设备处理。虚拟缓存设备通过组相联映射策略,根据磁盘数据块的磁盘扇区号来确定该数据应缓存的虚拟组组号。组号=(dbn/块大小/组大小)mod (组数),其中dbn表示磁盘数据块的扇区号,块大小为SSD数据块大小,组大小为组中数据块的数量。组数为SSD设备中组的总数目。假设确定数据缓存的位置在组I中。假设组I由五个虚拟块组成。根据字段b_cacheblock_state,确定当前空闲的虚拟块分别有虚拟块1、3、4和5。通过查询虚拟块cache_block,可以对数据进行虚拟块分配。通过查询缓存池的控制信息、SSd设备的控制信息,选择待写入的SSd设备、物理组和物理块。虚拟块I被配置为镜像模式,镜像的数目例如为2个。一般将脏数据分配给虚拟块I。脏数据的来源为用户发起的对磁盘的写操作。写入时,原有的IO请求被克隆成两份。查询SSD设备控制信息(字段ssd_avail_size)时发现ssd I和ssd 2有较多空闲空间。查询ssd I和ssd 2组I的元数据ssd_set(字段s_block_list)和该组各数据块的元数据ssd_block(字段same_ssd_list),找到合适的缓存位置。将IO请求中目标设备设置为ssd I和ssd 2,并设置IO请求的起始磁盘位置及长度字段。提交IO请求到这两个设备上完成数据写入。因此,两个副本分别保存在ssd I和ssd 2的组1(的物理块)中,并且分别标记为“ I镜像”和“ I镜像”,其中的“ I ”表明来自虚拟块I。虚拟块I则标记为“ 1MA”,MA代表镜像地址。虚拟块I的元数据cache_block做如下修改字段b_dbn记载被缓存的数据块在磁盘中的扇区号;字段b_cacheblock_state记载该虚拟块为镜像配置,字段b_ssd_block用双链表链接同属于该虚拟块的两个ssd物理块。对于ssdl的组I中保存副本的物理块,其ssd_block的字段owner_cacheblock记载该ssd物理块所在的虚拟块号,字段same_cacheblock_list在链表中记录ssd2的组I中保存副本的ssd物理块的指针。对于ssd2的组I中保存副本的ssd物理块,做类似处理。缓存池的控制信息、ssd设备的控制信息(比如,可用空间)也做相应修改。虚拟块4为条带配置,条带的数目为2个。一般将干净的数据存放在该虚拟块。干净数据的来源为1、用户在进行磁盘读操作时,读操作未命中,虚拟缓存将未命中的数据填充到SSD设备中;2、用户写入脏数据后,虚拟缓存执行了脏数据的磁盘回写操作,变为干净数据。该数据在存入时,原有的IO请求被拆分成两份。查询SSD设备控制信息(字段ssd_avail_size)时发现ssd I和ssd 3有较多空闲空间。查询ssd I和ssd 3组I的ssd_set (字段s_block_list)和该组各数据块的元数据ssd_block(字段same_ssd_list),找到合适的缓存位置。将IO请求中目标设备设置为ssd I和ssd 3,并设置IO请求的起始磁盘位置及长度字段,提交IO请求到这两个设备上完成数据写入。因此,条带分别保存在ssd I和ssd 3的组l(ssd_set I)中,并且分别标记为“4条带I”和“4条带2”。“4条带I”表明对应于虚拟块4的 条带1,“4条带2”表明对应于虚拟块4的条带2。最后,虚拟块4被标记为“SA1 ”和“SA2”,其中SA代表条带地址。虚拟块4的元数据cacheblock做如下修改字段b_dbn记载被缓存的数据块在磁盘中的扇区号;字段b_cacheblock_state记载该虚拟块为条带配置,字段b_ssd_bl0Ck用双链表链接同属于该虚拟块的两个ssd物理块。对于ssdl的组I中保存副本的ssd物理块,其元数据ssd_block的字段owner_cacheblock记载该ssd物理块所在的虚拟块号,字段same_cacheblock_list在链表中记录ssd2的组I中保存副本的ssd物理块的指针。对于ssd2的组I中保存副本的ssd物理块,做类似处理。缓存池的控制信息、ssd设备的控制信息(比如,可用空间等)也做相应修改。虚拟块3和5为常规配置,即仅为一个数据副本。其IO操作方法同原有的磁盘缓存方法相同。该副本分别保存在ssd3和ssd2的组I的缓存块中,并且将缓存块分别标记为“虚拟块3”和“虚拟块5”。最后,虚拟块3和5的控制信息cache_block做如下修改字段13_(11311记载被缓存的数据块在磁盘中的扇区号;字段b_cacheblock_state记载该虚拟块为常规配置。对于ssd2和ssd3的组I中保存副本的ssd物理块,其元数据ssd_block的字段owner_cacheblock记载该ssd物理块所在的虚拟块号。图6为在缓存中进行镜像/条带配置的操作流程图。在步骤S600,配置操作流程开始。在步骤S610,IO请求发送到虚拟缓存设备。在步骤S620,根据IO标志发现为写操作。在步骤S630,判断拟写的是否脏数据。如果是脏数据,则流程转往步骤S642 ;如果不是脏数据但默认或者根据用户自定义规则需要进行条带操作,则流程转往步骤S646 ;如果不属于以上情况,则流程转往步骤S640。在步骤S640,流程判断根据用户自定义规则是否需要进行镜像/条带操作。如果需要,则分别转往步骤S642或S646 ;否则,进入步骤S644,进行常规流程处理。在步骤S642,将数据配置为镜像,根据需要的副本数创建相应数量的块输入输出数据(bio),然后流程转往步骤S650。在步骤S646,将数据拆分为多个条带,分别创建bio数据。然后,流程转往步骤S650。在步骤S650,根据前述流程确定的镜像/条带操作,查找满足写入条件的镜像/条带设备。在步骤S660,在相应的设备中寻找合适的ssd物理块。在步骤S670,初始化各bio,并提交Mo到相应设备。在步骤S680,更新ssd设备的ssd物理块和所属组的元数据。在步骤S690,更新虚拟缓存设备的虚拟块和所属组的元数据。在步骤S699,流程结束。由于需要对磁盘和缓存进行频繁的读写,因此缓存块的状态会发生变化,从而需要进行镜像/条带重配置。因缓存块的状态变化而需要进行镜像/条带重配置的场景主要有两个脏数据完成回写时;干净的数据写命中时。下面分别对这两个场景进行介绍。第一个场景,脏数据完成回写。脏数据默认配置为镜像模式,缓存会定时或因其他操作触发进行脏数据的回写。完成脏数据回写后,数据的状态从脏变为干净。此时有下列三种处理方式可供选择。I、最简单的方式是维持原有镜像组织不变,但该方式造成了空间浪费。该方式仅在当前缓存有较多空闲空间时采用。2、将该缓存块调整为常规配置,即删除一个镜像,这种方式相比方式I节省了空间开销。3、考虑到缓存的应用场景一般为读操作的比例大于写操作,此时可以调整数据的镜像/条带配置,将在脏数据回写后,将该数据调整为条带配置。在缓存的IO较空闲时可采用该种方式。图7是脏数据回写后进行镜像重配置的操作流程图。假设缓存块脏数据有两个镜像。该场景下,对镜像的重配置操作可在完成缓存块脏数据回写后的回调函数中进行。在步骤S700,配置操作流程开始。在步骤S710,缓存向磁盘发起脏数据回写10。在步骤S720,系统完成回写IO操作。在步骤S730,创建多个bio数据结构,然后流程转往步骤S740。在步骤S740,查找满足写入条件的条带设备。在步骤S750,在相应的设备中寻找合适的ssd物理块。在步骤S760,初始化各bio,并提交Mo到相应设备。在步骤S770,将完成回写的两个缓存块镜像置无效。完成回写的缓存块镜像可以通过虚拟块兀数据cache_block(字段b_dbn和b_ssd_block)定位。在步骤S780,更新ssd设备的ssd物理块和组的元数据。在步骤S790,更新虚拟缓存的虚拟块和组的元数据。在步骤S799,流程结束。第二个场景,缓存写命中。命中的缓存块数据存在以下几种可能的配置方式I、若命中的为脏数据(默认为镜像配置),缓存写命中后的数据可仍维持镜像;2、若命中的数据为常规配置,可在其他设备中增加一个副本或者仍维持原有的常规配置状态,可视当前缓存中空闲空间而定;3、若命中的数据为干净数据(默认为条带配置),此时可将条带变为镜像,提高脏数据的保护级别。图8是干净数据写命中后进行条带重配置的操作流程示意图。假设缓存块数据有两条带。在步骤S800,配置操作流程开始。
在步骤S810,缓存发起脏数据写入10。在步骤S820,经查找,该缓存命中,且元数据状态为非脏,因此确定配置为条带。在步骤S830,将本次bio克隆为两个bio数据结构。在步骤S840,查找满足写入条件的镜像设备。
在步骤S850,在相应的设备中寻找合适的ssd物理块。在步骤S860,初始化各bio,并提交Mo到相应设备。在步骤S870,将被命中的干净缓存块条带置无效。被命中的的缓存块条带可以通过虚拟块元数据cache_block(字段b_dbn和b_ssd_block)定位。在步骤S880,更新ssd设备的ssd物理块和组的元数据。在步骤S890,更新虚拟缓存的虚拟块和组的元数据。在步骤S899,流程结束。在缓存空间动态伸缩时,也可能需要对缓存块的镜像/条带情况重配置。这主要包括以下两种场景在添加SSD设备进行空间扩展时,迁移缓存块的镜像/条带位置,均衡各设备空间使用率,有利于之后的缓存镜像/条带的分配;在删除SSD设备进行空间收缩 时,需要删除部分缓存块的镜像/条带,将另一部分缓存块的镜像/条带迁移到其他设备中。下面对这两种情况进行介绍。在进行空间扩展时,可以将部分缓存块的镜像或条带迁移到新设备上,均衡设备的使用率。尤其是在现有空间均已用完时,若仅加入一个新设备,则之后需要进行缓存块的镜像/条带操作时,操作将无法成功。为此,可以将部分缓存块迁移到新设备中,腾出部分旧设备的空间是十分有价值的。图9是进行缓存空间扩展前的状态示意图。假设缓存的数据均为干净数据,配置为条带。缓存池由例如三个设备组成,分别为ssdl、ssd2和ssd3,其中ssd2和ssd3的存储空间已接近用完,ssdl还有少量空间可用。虚拟块I中的两条带,条带I和2分别存放在ssdl和ssd2中,分别标记为“I条带I”和“I条带2”。同理,虚拟块3的两条带分别存放在ssd2和ssd3中(“3条带2”和“3条带I”),虚拟块4的两条带分别存放在ssdl和ssd3中(“4条带I”和“4条带2”),虚拟块5的两条带分别存放在ssd2和ssd3中(“5条带I”和“5条带2”)。图10是进行缓存空间扩展并完成数据迁移后的状态示意图。相比图9而言,图10在缓存中添加了一个新的ssd 4。首先,修改缓存池控制信息,将ssd4的指针添加到字段p_ssd_header,更新字段p_pool_total_size和p_pool_avail_size中的缓存池总空间和可用空间;为该ssd4配置控制信息。为了平衡缓存中缓存设备的空间使用率,可以基于缓存池控制信息(字段p_pool_avail_size)和ssd设备控制信息(字段ssd_avail_size)来确定其它原有缓存设备的空间使用率,并且在确定例如ssd 4有较多空闲空间时将ssd 2和ssd 3中部分数据迁移到ssd 4中。如图中所示,将虚拟块3原位于ssd 2中的第二个条带(“3条带2”)迁移到ssd 4中,将虚拟块5中原位于ssd 3中的第二个条带(“5条带2”)迁移到ssd 4中。当然,在迁移后,需要对相关ssd设备的物理块和组的元数据以及虚拟缓存的虚拟块和组的元数据进行更新,以反映迁移后的控制信息。虽然图9和10结合条带进行了空间扩展的说明,但是,本领域技术人员容易领会到上述说明同样适用于在空间扩展中镜像的迁移。在缓存空间扩展时,还可以引入混合型的镜像/条带配置。如在迁移脏数据的其中一个镜像时,可以将该镜像变为两个或多个条带。以两条带为例,一个条带写入新的设备中,另一个条带可仍保留在原设备中或迁移到第二个新设备(也就是说,当加入两个新设备时)。这样,可以既发挥镜像对脏数据的可靠性保护,又可以通过条带化来提高脏数据的读取速度。在进行空间收缩释放SSD设备时,可以将待删除的SSD设备中的缓存块镜像/条带迁移到其他设备中。在一个例子中,可以通过ssd设备的控制信息(字段least_allocated_block)找到已分配的第一个ssd物理块,在该物理块的元数据ssd_block(字段same_ssd_block)找到同一个ssd设备的所有已分配物理块,由此确定需要迁移的镜像/条带或者常规配置的数据。然后,通过物理块的元数据ssd_block(字段owner_cacheblock)找到该物理块所在的虚拟块的元数据cacheb lock,通过虚拟块的字段b_ssd_bl0Ck找到同一个镜像或条带的其它物理块,确定其它ssd设备中哪些设备可以接收镜像/条带或常规数据的迁移。其他设备的空间已满或接近满时,可以通过删除部分缓存块的镜像,删除部分较冷的缓存块来释放SSD空间,然后来完成剩余数据的迁移。图11是进行缓存空间收缩前的状态示意图。虚拟块I对应的条带存储在ssdl和ssd2中,虚拟块2对应的条带存储在ssd3和ssd4中,虚拟块3对应的条带存储在ssdl和ssd3中,虚拟块4对应的条带存储在ssd2和ssd4中。此时,需要空间收缩,释放SSD设备ssdl。由于ssdl中存放着虚拟块I和3对应的数据,因此,需要将相关数据迁移到其它SSD设备中。在进行数据迁移前,可以查看还需要释放多少缓存空间才能完成SSD设备的删除操作,假设为K GB。获取了该数据后,寻找出缓存块中最冷的K GB数据。在本例中,仅需要删除一个最冷的缓存块就能满足要求,通过热数据检测模块查询得知虚拟块2为最冷,其两条带分别位于ssd 3和ssd 4。将该缓存块的条带置为无效(设置该缓存块的元数据cache_block中的字段b_cacheblock_state为无效),并将待删除的ssdl中的数据迁移到ssd 3和ssd4中。删除ssd I并更新虚拟缓存的相关元数据(修改缓存池控制信息,将ssdl 的指针从字段 p_ssd_header 中删除,更新字段 p_pool_total_size 和 p_pool_avail_size中的缓存池总空间和可用空间)。图12是完成缓存空间收缩后的状态不意图。虽然图11和12结合条带进行了空间收缩的说明,但是,本领域技术人员容易领会到上述说明同样适用于在空间收缩中镜像的迁移。图12中未考虑缓存中有镜像数据的场景,若缓存中待删除的SSD中有镜像数据,可以先删除该镜像,释放部分空间,然后再进行数据的迁移。图20是本发明一个实施例的数据读取示意图。在步骤2010,缓存管理模块接收到IO数据读取请求。IO数据读取请求可以是由需要读取数据的应用程序发出的。IO数据读取请求可以包括所请求的数据所在的地址。在步骤2020,当判断内存中没有相关的数据因而需要从磁盘读取时,获取IO数据所在的磁盘地址。在步骤2030,根据磁盘地址,在内存中查找对应的缓存块信息。如果存在对应缓存块的信息,则表明磁盘数据有备份在缓存池的缓存块中。例如可以查询虚拟块cache_block,在有缓存的情况下通过cache_block查询到用双链表链接的属于同一个虚拟块的缓存块。在步骤2040,读取所述对应缓存块信息。所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备。在一个例子中,所述缓存块信息还包括IO数据所在的磁盘地址。在步骤2050,解析SSD缓存地址信息和缓存块大小。在一个例子中,解析就是确定缓存数据所位于的缓存池中哪个缓存设备、哪个组、哪个缓存块。解析可以借助于虚拟组cache_set,虚拟块cache_block,缓存池控制信息,ssd设备控制信息,ssd组兀数据ssd_set和元数据ssd_block中的一个或多个完成。在步骤2060,根据缓存块信息(比如设备、数据偏移、数据长度),初始化各bio。在步骤2070,提交bio到相应的SSD缓存设备上。在步骤2080,完成IO操作回调处理,即根据所述至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。在一个例子中,在涉及比如条带操作的情况下,读取所述至少两SSD缓存设备中所述至少两地址对应的数据;将所述至少两地址对应的数据合并而响应所述IO数据读取请求。在另一个例子中,在涉及比如镜像操作的情况下,所述至少两地址对应的数据相同,以从所述至少两地址中任一地址获取数据。·此外,优选地,所述至少两个地址与所述至少两个不同的SSD缓存设备的数量相同且分别对应。图21是本发明一个实施例的缓存管理设备的示意图。所述设备包括读取模块2110,用于读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;发起模块2120,根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。优选地,缓存管理设备包括接收模块2130,接收IO数据读取请求,以便读取模块根据所述IO数据读取请求读取所述缓存块信息。进一步优选地,所述接收模块2130包括获取模块2132,获取IO数据读取请求所请求的数据所在的地址;查找模块2134,根据所述IO数据读取请求所请求的数据所在的地址,在内存中查找所述缓存块的信息。优选地,所述缓存块信息还包括第四地址,所述第四地址为数据在磁盘中的地址;所述第三地址为数据在磁盘中的地址。优选地,所述缓存块的信息还包括数据大小信息,所述缓存管理设备包括确定模块,确定从所述至少两个不同的SSD缓存设备读取的数据大小。优选地,所述发起模块2120包括读取模块2122,读取所述至少两个SSD缓存设备中所述至少两个地址对应的数据;合并模块2124,将所述至少两个地址对应的数据合并而响应所述IO数据读取请求。优选地,所述至少两个地址对应的数据相同,所述发起模块2120从所述至少两个地址中任一地址获取数据。优选地,所述设备还包括获取模块,用于获取所有SSD缓存设备的使用以及配置信息,以根据所有SSD缓存设备的使用以及配置信息在所述所有SSD缓存设备中选取其中空闲存储空间最大的SSD缓存设备作为所述至少两个地址所指向的SSD缓存设备。优选地,所述至少两个SSD缓存设备的数据对应来自磁盘,在所述磁盘的数据被请求读取时,所述读取模块依据该请求读取缓存块信息,所述缓存管理设备通过所述至少两个地址读取所述至少两个SSD缓存设备的数据,将所述至少两个SSD缓存设备的数据对应替代所述磁盘上的数据。本发明实施例通过在缓存设备中配置缓存块条带,实现IO请求的多设备并行处理,提高缓存块读取的性能;通过对脏缓存块增加镜像副本,提高数据可靠性。此外,本发明实施例还提供了缓存空间伸缩时镜像/条带的重配置能力。在缓存空间扩展时,可以通过迁移缓存块的镜像/条带来平衡各设备的使用率,并为之后的新缓存块镜像/条带分配提供合适的空间。还可以通过配置脏数据镜像加条带的混合型配置来使缓存数据兼具高可靠性和优秀的IO性能。另外,本发明实施例在缓存块进行脏/干净切换时,将脏数据块从镜像切换成条帯,节省缓存空间;在感觉缓存变为脏时,将其切换为镜像,及时提高其可靠性。需要说明,SSD设备可以是各种SSD设备,包括但不限于flash(闪存)SSD或者PCM (相变存储器)SSD。此外,本发明不限于使用SSD作为磁盘的高速缓存,其他的非易失 性闪存介质,比如最新出现的PCM介质等,均可以作为磁盘的高速缓存介质。磁盘也可以采用PATA (并行高级技术附件)、SATA(串行高级技术附件)、SAS(串行连接SCSI接ロ)以及FC、USB (通用串行总线)接ロ的硬盘等。需要指出,虽然前文中条带或镜像操作是以缓存块为单位进行的,但是本发明同样可以以缓存地址为单位进行条带或镜像操作,換言之,条带或镜像操作并不局限于大小固定的缓存块,而是可以对任意大小的缓存地址进行。显而易见,在此描述的本发明可以有许多变化,这种变化不能认为偏离本发明的精神和范围。因此,所有对本领域技术人员显而易见的改变,都包括在本权利要求书的涵盖范围之内。
权利要求
1.一种缓存数据的处理方法,其特征在于,所述方法包括 缓存管理模块读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的固态硬盘SSD缓存设备; 所述缓存管理模块根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。
2.如权利要求I所述的方法,其特征在于,所述缓存管理模块读取缓存块信息之前,所述方法还包括所述缓存管理模块接收输入输出IO数据读取请求; 所述缓存管理模块读取缓存块信息包括根据所述IO数据读取请求读取缓存块信息。
3.如权利要求2所述的方法,其特征在于,所述缓存管理模块根据所述IO数据读取请求读取缓存块信息包括 获取IO数据读取请求所请求的数据所在的第三地址; 所述缓存管理模块根据所述IO数据读取请求所请求的数据所在的第三地址,在内存中查找所述缓存块的信息。
4.如权利要求3所述的方法,其特征在于,所述缓存块信息还包括第四地址,所述第四地址为数据在磁盘中的地址;所述第三地址为数据在磁盘中的地址。
5.如权利要求I至4任一项所述的方法,其特征在于,所述缓存块的信息还包括数据大小信息,以确定从所述至少两个不同的SSD缓存设备读取的数据大小。
6.如权利要求I至4任一项所述的方法,其特征在于,所述缓存管理模块根据所述至少两个地址向所述至少两个SSD缓存设备发起数据读取操作包括 读取所述至少两个SSD缓存设备中所述至少两个地址对应的数据; 将所述至少两个地址对应的数据合并而响应所述IO数据读取请求。
7.如权利要求I至4任一项所述的方法,其特征在于,所述至少两个地址对应的数据相同,以从所述至少两个地址中任一地址获取数据。
8.如权利要求I至4任一项所述的方法,其特征在于,所述至少两个地址与所述至少两个不同的SSD缓存设备的数量相同且分别一一对应。
9.如权利要求I至4任一项所述的方法,其特征在于,还包括获取所有SSD缓存设备的使用以及配置信息,以根据所有SSD缓存设备的使用以及配置信息在所述所有SSD缓存设备中选取其中空闲存储空间最大的SSD缓存设备作为所述至少两个地址所指向的SSD缓存设备。
10.如权利要求I至4任一项所述的方法,其特征在于,所述SSD缓存设备的存储介质类型包括闪存flash SSD和相变存储器PCM SSD中的一种或多种。
11.如权利要求I至4任一项所述的方法,其特征在于,所述至少两个SSD缓存设备的数据对应来自磁盘,所述方法包括请求读取所述磁盘的数据;所述缓存管理模块读取缓存块信息包括依据该请求读取缓存块信息;所述方法还包括在所述缓存管理模块根据所述缓存块信息中的通过所述至少两个地址向读取所述至少两个SSD缓存设备发起数据读取操作的数据之后,将所述至少两个SSD缓存设备的数据对应替代所述磁盘上的数据。
12.如权利要求I至4任一项所述的方法,其特征在于,所述缓存管理模块读取缓存块信息包括解析缓存块信息,以得到所述至少两个地址。
13.如权利要求12所述的方法,其特征在于,所述方法还包括根据缓存块信息初始化块输入输出数据,所述缓存管理模块根据缓存块信息中的至少两个地址向至少两个SSD缓存设备发起数据读取操作包括提交块输入输出数据到所述至少两个SSD缓存设备。
14.一种缓存数据的缓存管理设备,其特征在于,所述设备包括 读取模块,用于读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的固态硬盘SSD缓存设备; 发起模块,根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。
15.如权利要求14所述的缓存管理设备,其特征在于,包括 接收模块,接收输入输出IO数据读取请求,以便读取模块根据所述IO数据读取请求读取所述缓存块信息。
16.如权利要求15所述的缓存管理设备,其特征在于,所述接收模块包括获取模块,获取IO数据读取请求所请求的数据所在的第三地址;查找模块,根据所述IO数据读取请求所请求的数据所在的第三地址,在内存中查找所述缓存块的信息。
17.如权利要求16所述的缓存管理设备,其特征在于,所述缓存块信息还包括第四地址,所述第四地址为数据在磁盘中的地址;所述第三地址为数据在磁盘中的地址。
18.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述缓存块的信息还包括数据大小信息,所述缓存管理设备包括确定模块,确定从所述至少两个不同的SSD缓存设备读取的数据大小。
19.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述发起模块包括读取模块,读取所述至少两个SSD缓存设备中所述至少两个地址对应的数据; 合并模块,将所述至少两个地址对应的数据合并而响应所述IO数据读取请求。
20.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述至少两个地址对应的数据相同,所述发起模块从所述至少两个地址中任一地址获取数据。
21.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述至少两个地址与所述至少两个不同的SSD缓存设备的数量相同且分别一一对应。
22.如权利要求14至17任一项所述的缓存管理设备,其特征在于所述设备还包括获取模块,用于获取所有SSD缓存设备的使用以及配置信息,以根据所有SSD缓存设备的使用以及配置信息在所述所有SSD缓存设备中选取其中空闲存储空间最大的SSD缓存设备作为所述至少两个地址所指向的SSD缓存设备。
23.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述SSD缓存设备的存储介质类型包括flash SSD以及PCM SSD0
24.如权利要求14至17任一项所述的缓存管理设备,其特征在于,所述至少两个SSD缓存设备的数据对应来自磁盘,在所述磁盘的数据被请求读取时,所述读取模块依据该请求读取缓存块信息,所述缓存管理设备通过所述至少两个地址读取所述至少两个SSD缓存设备的数据,将所述至少两个SSD缓存设备的数据对应替代所述磁盘上的数据。
25.如权利要求14至17任一项所述的缓存管理设备,其特征在于,读取模块包括解析模块,解析缓存块信息,以得到所述至少两个地址。
26.如权利要求25所述的缓存管理设备,其特征在于,所述缓存管理设备包括初始化模块,根据缓存块信息初始化块输入输出数据bio,所述发起模块提交bio到所述至少两个SSD缓存设备。
27.一种缓存数据的处理系统,其特征在于,所述处理系统包括 多个SSD缓存设备; 缓存管理设备,读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的固态硬盘SSD缓存设备;根据所述缓存块信息中的至少两个地址向所述多个SSD缓存设备中的至少两个发起数据读取操作。
28.如权利要求27所述的处理系统,其特征在于, 缓存管理设备接收输入输出IO数据读取请求,以根据所述IO数据读取请求读取所述缓存块息。
29.如权利要求28所述的处理系统,其特征在于所述处理系统包括内存,所述缓存管理设备获取IO数据读取请求所请求的数据所在的第三地址;根据所述IO数据读取请求所请求的数据所在的第三地址,在内存中查找所述缓存块的信息。
30.如权利要求29所述的处理系统,其特征在于,所述缓存块信息还包括第四地址,所述第四地址为数据在磁盘中的地址;所述第三地址为数据在磁盘中的地址。
31.如权利要求27至30任一项所述的处理系统,其特征在于,所述缓存块的信息还包括数据大小信息,所述缓存管理设备确定从所述至少两个不同的SSD缓存设备读取的数据大小。
32.如权利要求27至30任一项所述的处理系统,其特征在于,所述缓存管理设备读取所述至少两个SSD缓存设备中所述至少两个地址对应的数据;将所述至少两个地址对应的数据合并而响应所述IO数据读取请求。
33.如权利要求27至30任一项所述的处理系统,其特征在于,所述至少两个地址对应的数据相同,所述缓存管理设备从所述至少两个地址中任一地址获取数据。
34.如权利要求27至30任一项所述的处理系统,其特征在于,所述至少两个地址与所述至少两个不同的SSD缓存设备的数量相同且分别一一对应。
35.如权利要求27至30任一项所述的处理系统,其特征在于缓存管理设备获取所有SSD缓存设备的使用以及配置信息,以根据所有SSD缓存设备的使用以及配置信息在所述所有SSD缓存设备中选取其中空闲存储空间最大的SSD缓存设备作为所述至少两个地址所指向的SSD缓存设备。
36.如权利要求27至30任一项所述的处理系统,其特征在于,所述SSD缓存设备的存储介质类型包括flash SSD和PCM SSD中的一种或多种。
37.如权利要求27至30任一项所述的处理系统,其特征在于,所述处理系统包括磁盘,而所述至少两个SSD缓存设备的数据对应来自磁盘;在所述磁盘的数据被请求读取时,所述缓存管理设备依据该请求读取缓存块信息;通过所述至少两个地址读取所述至少两SSD缓存设备的数据,将所述至少两个SSD缓存设备的数据对应替代所述磁盘上的数据。
38.如权利要求27至30任一项所述的处理系统,其特征在于缓存管理设备解析缓存块信息,以得到所述至少两个地址。
39.如权利要求27所述的处理系统,其特征在于,所述缓存管理设备根据缓存块信息初始化块输入输出数据bio,提交bio到所述至少两个SSD缓存设备。
全文摘要
本发明提供一种对多个缓存设备进行输入输出IO操作的方法、设备和系统。所述方法包括缓存管理模块读取缓存块信息,所述缓存块信息包括至少两个地址,所述至少两个地址指向至少两个不同的SSD缓存设备;所述缓存管理模块根据所述缓存块信息中的至少两个地址向所述至少两个SSD缓存设备发起数据读取操作。本发明实施例通过在缓存设备中配置缓存块条带,实现IO请求的多设备并行处理,提高缓存块读取的性能;通过对脏缓存块增加镜像副本,提高数据可靠性。
文档编号G06F13/16GK102713828SQ201180004852
公开日2012年10月3日 申请日期2011年12月21日 优先权日2011年12月21日
发明者温正湖, 秦岭, 章晓峰 申请人:华为技术有限公司