具体实施方式
当增加或者从虚拟机管理器的控制中除去虚拟机时,在客户虚拟机内的O/S内核层、驱动器层和应用层中实现的动态高速缓存共享系统将高速缓存存储区动态分配给虚拟机,以改善对主计算机上的虚拟机的不断变化的存储需求的响应性。以多个逻辑装置的形式提供单个高速缓存装置或者一群高速缓存装置,并暴露给资源分配器。核心缓存算法在客户虚拟机中执行。借助定义的接口,核心缓存算法起O/S不可知的可移植库作用。O/S栈中的过滤驱动器截取I/O请求,并通过高速缓存管理库路由I/O请求,以实现缓存功能。高速缓存管理库与过滤驱动器通信,以实现O/S特定动作和I/O路由。当在虚拟机管理器的管理下,增加新的虚拟机时,促使现有虚拟机放弃分配的供相应的现有虚拟机使用的高速缓存存储区的一部分。放弃的高速缓存被分配给新的虚拟机。类似地,如果虚拟机被关闭或者被迁移到新的主机系统,那么分配给该虚拟机的高速缓存容量在由虚拟机监视器管理的剩余的虚拟机之间被重新分配。
如图1中图解所示,在按照本发明的主计算机环境100的说明性或例证实施例中,诸如FB高速缓存卡132和FB高速缓存卡134之类的基于闪存的高速缓存装置的高速缓存群130通过相应的高速外设接口(PCIe)总线耦接到主机系统110。FB高速缓存卡132和FB高速缓存卡134是独立标识的高速缓存装置,所述高速缓存装置被管理,并且其相应的高速缓存存储区作为高速缓存群130被共享。
另外,主机系统110通过外设互连卡140耦接到一组本地存储装置145,并通过外设互连卡150,耦接到对应的一组远程数据存储装置155。本地存储装置145和远程数据存储装置155用作为复合数据存储区暴露于虚拟环境100的各组物理磁盘驱动器实现。外设互连卡140和/或外设互连卡150可利用将物理磁盘驱动器组合成单个逻辑单元的独立磁盘冗余阵列管理技术,来管理由各组物理磁盘驱动器提供的存储空间。取决于对应的数据存储区支持的应用所要求的可靠性和性能,用通常称为“RAID级”的几种方式之一,在物理驱动器之间分配数据。
如图1中所示,主机系统110是诸如具有通过总线相互耦接的处理器112和存储器120的服务器计算机之类的计算机。操作中,处理器112在应用层128、文件系统126和动态高速缓存共享系统300中执行指令,以使主机系统110上的虚拟机的托管成为可能。处理器112通过高速缓存装置驱动器121与高速缓存群130通信。处理器112通过串行连接小型计算机系统接口/高级主计算机接口(SAS/AHCI)驱动器122和外设互连卡140,与本地卷145通信。处理器112还通过存储区域网/网络接口连接器(SAN/NIC)驱动器123和外设互连卡150,与远程卷155通信。
按照本发明的主计算机环境100高度可缩放,并不局限于单个处理器112或单个存储器120。在备选实施例(未示出)中,主机系统110可包括与处理器112相似或不相似的多个处理器。另外,主机系统110可包括与存储器120相似或不相似的附加存储元件。类似地,通过产生多个实例高速缓存装置驱动器121、SAS/ACHI驱动器122和SAN/NIC驱动器123,另外的存储装置可被并入主机系统110。
操作中,动态高速缓存共享系统300动态管理由一群一个或多个基于闪存的装置(例如,高速缓存群130)和管理一组虚拟机的主机系统110支持的高速缓存存储区200。动态高速缓存共享系统300是在位于应用层128和文件系统126之下的共享装置驱动器层实现的。动态高速缓存共享系统300是与基于闪存的高速缓存装置(例如,FB高速缓存卡132和FB高速缓存卡134)和常规的数据存储系统(例如,利用诸如因特网小型计算机系统接口(iSCSI)、以太网光纤通道(FCoE)、光纤通道(FC)、SAS和串行高级技术附件(SATA)之类的各种接口实现的数据存储系统)结合的通用缓存层。动态高速缓存共享系统300在块设备层工作,对文件系统126和应用层128中的应用来说透明。动态高速缓存共享系统300标识和消耗存在于并入高速缓存群130中的FB高速缓存卡132和FB高速缓存卡134中的存储空间。另外,动态高速缓存共享系统300提供跨常规数据存储系统,比如本地卷145和远程卷155的缓存功能。利用相对于物理磁盘和高速缓存资源管理应用的定义明确的接口,核心缓存功能被实现成O/S不可知的可移植库。
高速缓存元数据管理(比如散列表、LRU、空闲列表、高速缓存分配单元管理数据结构)对极大的高速缓存存储区的设计来说重要。由于固态磁盘(SSD)高速缓存可扩展到千兆字节,并且主机系统110上的每个I/O涉及查寻散列列和高速缓存分配单元数据结构,以决定高速缓存命中/缺失,因此必要的是应考虑到性能而优化高速缓存元数据管理,元数据足迹(footprint)应小到足以保存在双倍数据速率(DDR)随机存取存储器(RAM)中,以便快速查寻。
图2是图解说明图1的高速缓存群130内的高速缓存存储区200的方框图。高速缓存存储区200被分区或分割成至少两个独立的存储区。第一部分或分区包括高速缓存元数据210。第二或数据存储部分220包括一组高速缓存窗口222。如图2中进一步图解所示,高速缓存元数据210包括关于每个高速缓存窗口222的对应条目215。高速缓存存储区300的相当大量的存储容量被分配给在例证中被标识成高速缓存窗口的区域。每个高速缓存窗口被进一步细分成期望大小的多行的高速缓存块225。
高速缓存存储区200的分配单元和高速缓存块大小相当大,从而降低元数据存储器需求。在例证实施例中,整个高速缓存数据存储部分200被分成多个大块的分配单元(称为高速缓存窗口,每个1MB)。高速缓存窗口大小是可调的参数,可根据主机系统配置和I/O工作负荷而调整。高速缓存窗口222是用于高速缓存管理的分配/解除分配单元。每个高速缓存窗口222由均为64KB多个高速缓存块组成。高速缓存块大小是可调的参数,可根据主机系统配置和I/O工作负荷而调整。整个高速缓存存储区200可被用于缓存多个块装置,每个高速缓存窗口222代表单个块装置上的空间的连续区域。
散列表、空闲高速缓存列表、最近最少使用(LRU)列表和高速缓存替换算法在高速缓存窗口级工作。这显著减小了为表示高速缓存元数据210而需要的存储器的数量,因为每个高速缓存窗口222是相当大的分配单元。高速缓存元数据210被保存在用于读缓存的内存中,以便快速查寻。高速缓存替换以需求、阈值、寿命、或许其它因素为基础,并利用基于多优先权的LRU队列。基于优先权的LRU队列利用有效高速缓存行的数目和高速缓存窗口222被访问的次数来确定高速缓存窗口222的优先权。已满并且被访问最多的高速缓存窗口222被赋予最高的优先权,并被放置在最高优先权LRU队列的结尾。一旦整个高速缓存存储区200已满,优先权最低的高速缓存窗口222将首先被替换,从而保留最频繁访问的数据。智能热图生成算法缓存被反复访问的区域。本地卷145或远程卷155中的很少被访问的数据区不被放入高速缓存存储区200中。
图3是图1的动态高速缓存共享系统300的体系结构的示意图。动态高速缓存共享系统300包括直接与主机系统硬件310通信的虚拟机管理器320,和在应用层128中工作以支持使在主机系统110上运行的虚拟环境的实时监视成为可能的各种功能的高速缓存资源管理器330。虚拟机管理器320是通常称为内核的O/S组件。虚拟机管理器320从虚拟服务器接收监视信息,并集中管理将高速缓存群130中的一个或多个基于闪存的高速缓存装置暴露给由主机系统硬件310及本地卷145和远程卷155提供的数据存储区支持的数十个或数百个虚拟机的机制。
虚拟机管理器320能够支持多个O/S,每个O/S具有与虚拟机管理器320的应用层128接口。在图解所示的实施例中,O/S A(例如,Linux、Unix)由接口350支持,接口350包括用户层中的管理API354,和通过SCSI HBA仿真器与虚拟机管理器320通信的内核层中的过滤驱动器和库352。类似地,O/S B(例如,Windows Server2008)由接口360支持,接口360包括管理API364及过滤驱动器和库362。
虚拟机管理器320布置有高速缓存资源分配器322、高速缓存装置驱动器324和CICOM提供器326,以管理和控制高速缓存存储区200,并与高速缓存资源管理器330通信。这些和其它组件在主机系统110上的客户虚拟机中执行,以提供I/O过滤、热数据分类和缓存功能。虚拟机管理器320利用SCSI HBA仿真器,向虚拟机模仿高速缓存装置。按照两种方式将装置暴露给虚拟机。在第一种方式中,原始磁盘访问模块328以原始装置的方式暴露数据存储装置。原始磁盘访问模块328装置直接向虚拟机暴露SCSI块装置。另一方面,借助集成在虚拟机管理器320中的虚拟机文件系统(VMFS)模块,通过VMFS向虚拟机暴露数据存储区。VMFS模块可保存和管理将虚拟装置逻辑块地址和物理磁盘或高速缓存存储区200联系起来的映射。VMFS还创建精简配置的逻辑存储区,以利用虚拟磁盘支持数据快照、备份和其它操作。配置VMFS的磁盘所在的物理装置被称为数据存储区。利用带有管理插件340的虚拟基础架构客户端(VIC),这些虚拟磁盘可被动态转移到动态高速缓存共享系统300中的不同数据存储区(物理磁盘),而不存在虚拟机的任何停机时间。
高速缓存资源分配器322负责标识和要求动态高速缓存共享系统300中的所有高速缓存装置,并为该系统上的被配置成与动态高速缓存共享系统300的管理组件通信的每个虚拟机分配逻辑驱动器。高速缓存资源分配器322创建的逻辑驱动器作为RAW装置被映射到客户虚拟机。高速缓存资源分配器322将整个高速缓存容量分成相同大小的多个区间或块。区间大小被调整为等于高速缓存窗口大小。高速缓存存储容量被分配给在区间边界中的不同虚拟机。
高速缓存资源分配器322提供一组定义明确的API,以便为每个虚拟机创建和破坏逻辑驱动器。高速缓存资源分配器创建的每个逻辑驱动器具有动态高速缓存共享系统300支持的最大高速缓存容量的容量,然而整个高速缓存装置只有少数区间被映射到每个虚拟机。映射信息由高速缓存资源管理器330提供。根据在资源管理器330中定义的策略,和随着时间的推移的虚拟机的增加和去除,在动态高速缓存共享系统300的使用期限内,映射信息可动态变化。
高速缓存资源分配器322通过确保对照当前的有效区间映射,证实对应于每个逻辑驱动器的I/O,强制实施由高速缓存资源管理器定义的区间映射。高速缓存资源分配器322根据区间映射,通过高速缓存装置驱动器324或其它装置(未示出),将I/O请求重定向到物理装置。
高速缓存资源管理器330是起主机系统110上的客户虚拟机作用的较小并且高效的软件模块。在虚拟机管理器320的控制下,高速缓存资源管理器324监视和管理在所有虚拟机之间的高速缓存装置利用和分配。在初始化期间,高速缓存资源管理器324连接到所有的虚拟机,分配高速缓存容量,并监视高速缓存利用。高速缓存资源管理器324还通过虚拟机管理器320的虚拟化服务API,向虚拟服务器注册和等待诸如虚拟机增加、除去、迁移之类的事件,并协调高速缓存存储容量在当前执行的虚拟机之间的重新分配。
另外,高速缓存资源管理器324执行负责以受控的方式在虚拟机间分配高速缓存的策略引擎。策略引擎可包括在所有虚拟机之间平等共享高速缓存容量,向某些虚拟机保证最小的高速缓存容量,并在其它虚拟机之间重新分配剩余的高速缓存容量,在所有虚拟机之间保持热图,并根据每个虚拟机进行的I/O活动,根据当前工作负荷重新分配高速缓存的策略。
当新的虚拟机被增加或迁移到物理机时,高速缓存资源管理器324检测该事件,并尝试通过进行以下步骤,在可用的虚拟机之间重新分配高速缓存。首先,高速缓存资源管理器324通过客户虚拟机中的管理API354、356,请求分配有高速缓存容量的当前运行的客户虚拟机放弃一定量的高速缓存。由于高速缓存分配的区间大小等于高速缓存窗口大小,因此客户虚拟机将从其LRU队列的顶部放弃最不热的数据,从而降低由减少的高速缓存分配引起的性能影响。一旦主机系统110上的所有虚拟机都放弃分配给它们的一定量的高速缓存,释放的高速缓存区间被分配给被增加或迁移的新的虚拟机。
插件340被安排成与虚拟基础架构客户端(VIC)通信,以提供在虚拟环境中管理动态高速缓存共享系统解决方案的管理能力。插件340向就数据中心群集、主机和客户机而论的管理动作提供上下文。系统管理员将能够利用插件340来监视和管理动态高速缓存共享系统解决方案。插件340利用管理API354、364和高速缓存资源管理器330与虚拟机交互,以提供上述管理功能。
虚拟机将根据在虚拟机中执行的O/S,使用过滤驱动器和库352、362。过滤驱动器和库352、362使高速缓存装置能够被配置以区间映射,并确保高速缓存装置只利用分配给它的区间。另外,过滤驱动器和库352、362使得能够在作为增加新的虚拟机、虚拟机离线或者被迁出主机系统110的结果的高速缓存重新分配期间,实现向虚拟机增加区间和从虚拟机除去区间。此外,过滤驱动器和库352、362确保暴露给虚拟机的原始装置被配置成高速缓存装置。
图4是借助平等的高速缓存分配管理策略,在一组虚拟机之间分配单个高速缓存装置的示意图。图4中图解所示的实施例是用于举例说明3个虚拟机如何平等共享基于闪存的高速缓存存储区200的高速缓存窗口222的小规模布置。
在举例说明的实施例中,基于闪存的高速缓存存储区200包括30个高速缓存窗口(用块0-29表示),高速缓存窗口0-9与虚拟机1关联,并且对虚拟机1来说被标识成逻辑磁盘1,高速缓存窗口10-19与虚拟机2关联,并且对虚拟机2来说被标识成逻辑磁盘2,高速缓存窗口20-29与虚拟机3关联,并且对虚拟机3来说被标识成逻辑磁盘3。与高速缓存资源分配器322一起工作的原始磁盘访问模块328完成逻辑驱动器和高速缓存存储区200中的指定的一组连续块之间的上述关联或链接。
图5是图解说明准备图3的动态高速缓存共享系统的方法500的流程图。方法500始于方框502,在方框502,高速缓存资源分配器标识并要求耦接到主机系统的基于闪存的高速缓存装置。在方框504,虚拟机管理器确定将由主机系统支持的虚拟机的数目。在方框506,在主计算机中运行的动态高速缓存共享系统指令高速缓存资源分配器将可用的高速缓存容量分成相等的区间或块。在方框508,进一步指令高速缓存资源分配器为将由主机系统支持的每个虚拟机创建逻辑驱动器。在方框510,指令高速缓存资源分配器按照高速缓存分配策略,创建区间映射。在方框512,资源管理器将逻辑驱动器作为相应的原始装置映射到每个虚拟机,还指令虚拟机依据区间映射,将高速缓存装置加入高速缓存群中。之后,如在方框514中所示,根据使用频度算法,缓存主机系统上的I/O操作。
图6是在引入新的虚拟机之后的区间映射的示意图。图6中图解说明的实施例是举例说明当采用平等共享基于闪存的高速缓存存储区200的高速缓存窗口222的分配策略时,如何实现第4个虚拟机的增加的小规模布置。
在举例说明的实施例中,基于闪存的高速缓存存储区200包括30个高速缓存窗口(用块0-29表示),高速缓存窗口3-9与虚拟机1关联,并且对虚拟机1来说被标识成逻辑磁盘1,高速缓存窗口13-19与虚拟机2关联,并且对虚拟机2来说被标识成逻辑磁盘2,高速缓存窗口23-29与虚拟机3关联,并且对虚拟机3来说被标识成逻辑磁盘3。用带标记的块0-2、10-12、20-22表示的释放的高速缓存窗口作为逻辑磁盘4被重新分配给虚拟机4。在重新分配之后,虚拟机1-3分别被分配总共30个高速缓存窗口中的7个高速缓存窗口,而虚拟机4被分配剩余的9个高速缓存窗口。与高速缓存资源分配器322一起工作的原始磁盘访问模块328完成逻辑驱动器和高速缓存存储区200中的指定的各组块之间的上述关联或链接。
图7是图解说明利用图3的动态高速缓存共享系统300,处理I/O操作的方法700的流程图。如图所示,方法700始于方框702,在方框702,动态高速缓存共享系统驱动器按照映射到高速缓存装置的区间,发出对于高速缓存装置的命中或高速缓存填充I/O操作。在方框704,资源分配器接收与映射到特定虚拟机的暴露的逻辑驱动器标识符相关的I/O操作。在方框706,资源分配器确认该I/O操作在区间映射中,被标识成属于指定虚拟机的区间的范围内。在方框708,高速缓存资源管理器通过适当的SCSI驱动器,将I/O重定向到物理装置。
图8A和8B包括图解说明动态管理高速缓存存储区的方法800的流程图。方法800始于方框802,在方框802,动态高速缓存共享系统关于将在主机系统上支持的虚拟机的数目的变化,来监视虚拟化服务API。如在判定框804中所示,判定是在向主机支持的虚拟机的集合中添加虚拟机,还是在从所述集合中除去虚拟机。当在增加虚拟机时(如用退出判定框804的标记“是”的流程控制箭头所示),处理继续进行方框806,在方框806,高速缓存资源分配器根据分配策略,确定待分配给新的虚拟机的高速缓存的量。否则,处理转到方框812,如用连接符B所示。在方框808,高速缓存资源管理器与每个现有的虚拟机通信,以释放适当量的高速缓存存储容量,以便重新分配给新的虚拟机。另外,更新区间映射,并传送给高速缓存资源分配器。在方框810,指令高速缓存资源分配器创建新的逻辑驱动器,并使之与最近释放的区间或高速缓存窗口相联系。另外,指令高速缓存资源分配器向该虚拟机暴露新生成的逻辑驱动器。之后,处理继续进行方框802的功能。
当虚拟机被迁离主机系统时,处理继续进行方框812,在方框812,高速缓存资源分配器确定在从离开主机系统的虚拟机释放之后,变得可供重新分配给剩余虚拟机的高速缓存容量的量。在方框814,按照分配策略,资源管理器确定应使之可供剩余的虚拟机使用的释放的存储容量的量。应注意当分配策略如此规定时,重新分配给每个虚拟机的存储容量的量可能不必相等。在方框816,指令高速缓存资源分配器除去与旧的虚拟机相联系的逻辑驱动器,和更新修正的区间映射,并利用可用的高速缓存容量的相应部分重新配置剩余的虚拟机。
应理解,图5、7、8A和8B的流程图只是用来例证或说明成为所述方法的基础的逻辑。本领域的技术人员会理解,在各个实施例中,可以按照任意各种方式设计或配置包括动态高速缓存处理系统或高速缓存控制器的数据处理系统,以实现所述方法。上面说明的步骤或动作可按任何适当的顺序或序列发生,包括并行或者彼此同步地发生。在一些实施例中,上面关于图5、7、8A和8B说明的步骤或动作可以与其它步骤或动作结合,或者被省略。尽管为了清楚起见,以图5、7、8A和8B中的流程图的形式进行了说明,不过基础的逻辑可被模块化,或者以任何适当的方式布置。本领域的技术人员能够容易地编程或配置适当的软件或适当的逻辑,比如以专用集成电路(ASIC)或者类似装置或者装置的组合的形式,以实现上面说明的方法。另外,应理解软件指令或类似逻辑与其中保存或包含这样的软件指令或类似逻辑,以便由处理器112执行的局部存储器120或其它存储器的组合包括“计算机可读介质”或“计算机程序产品”,如在专利词典中使用该术语一样。
应注意为了说明本发明的原理和概念,参考一个或多个例证实施例,说明了本发明。本发明并不局限于这些实施例。鉴于这里提供的说明,本领域的技术人员会明白,可对这里说明的实施例作出许多变化,所有这样的变化都在权利要求书中限定的本发明的范围之内。