虚拟机存储空间管理方法、 系统及物理主机 技术领域 本发明涉及计算机虚拟化技术领域, 具体涉及一种虚拟机存储空间管理方法、 系 统及物理主机。
背景技术 计算机虚拟化技术是一种将计算机底层硬件设备与上层操作系统、 应用程序分离 的去耦合方法, 其引入虚拟机监控器 (VMM, Virtual Machine Monitor) 层来直接管理底层 硬件资源, 并创建与底层硬件无关的虚拟机 (VM, VirtualMachine) 供上层操作系统和应 用程序使用, 相应的虚拟机架构如图 1 所示。虚拟化技术作为当前流行的云计算 (Cloud Computing) 平台的底层重要支撑技术之一, 可以大大提高物理设备的资源使用效率。与传 统的物理机相比, 虚拟机具有更好的隔离性和封装性, 其可以将整个虚拟机的信息保存到 虚拟磁盘映像 (VDI, Virtual Disk Image) 中, 从而可以方便地对虚拟机进行快照、 备份、 克 隆和分发等操作。
虚拟磁盘 (Virtual Disk) 是虚拟机监控器提供给虚拟机使用的虚拟存储设备, 其对应的物理存储空间既可以是宿主机 (Host) 的本地存储系统, 也可以是数据中心的网 络存储系统, 如网络附加存储 (NAS, Network Attached Storage) 文件服务器、 存储区域网 (SAN, Storage Area Network)、 存储集群或者云存储 (Storage Cloud) 等。其对应在宿主 机里面的存在形式可以是文件, 也可以是块设备 ( 如磁盘分区、 逻辑卷等 )。
虚拟机存储空间分配一般有两种方法 : 预先分配和动态分配。其中预先分配是为 每个虚拟机一次性分配好指定大小的存储空间, 当虚拟机数据较少时, 预先分配空间浪费 较大。 而动态分配方式的虚拟存储空间可以一定程度减少存储资源的浪费, 刚开始的时候, 虚拟存储空间占用很少的实际存储空间, 随着用户的使用, 虚拟机存储空间上会创建越来 越多的文件, 而其占有的存储空间也会变得原来越大。
虽然现有动态分配的存储空间管理方法可以按需进行分配, 但当虚拟机内部执行 文件删除操作时, 如果宿主机无法感知到此操作, 就不能释放这些虚拟机已释放的空闲空 间。比如, 一个拥有 20GB 虚拟存储设备的虚拟机, 在任务最繁忙的时候基本上用完了所有 的存储空间作为临时文件, 而当任务空闲下来以后, 这些临时文件都被删除, 系统中又出现 了 15GB 的空闲空间, 但是这 15GB 占用的宿主机的存储资源并没有被释放。
现 有 技 术 中, 虚 拟 计 算 机 软 件 VM ware Workstation 提 供 VM wareShrinking Virtual Disk 功能, 其可以对 VMDK(VM Ware Virtual Machine DiskFormat) 动态虚拟磁盘 中的空闲数据块 ( 以下将数据块简称为块 ) 进行释放, 主要步骤如下 :
虚拟机内部执行磁盘碎片整理 ( 可选 ) ;
虚拟机内部通过 VM Tools 工具将虚拟磁盘中的空闲块清 “0” ;
宿主机上配套工具扫描虚拟磁盘对应的文件或者块设备, 识别出 “0” 块, 利用动态 映像格式特性进行映像收缩, 完成空闲数据块的释放。
发明人在实现本发明的过程中, 发现 : 上述方法中, VM Tools 将虚拟磁盘中的空闲
块清 “0” 的过程, 需要对所有空闲块执行写操作 ; 宿主机上识别 “0” 块时, 需要对所有数据 块执行读操作, 即现有方法具有比较大的操作开销, 较多的磁盘读写操作浪费大量的磁盘 带宽且耗时较长 ; 而且, 现有方法中宿主机通过识别 “0” 块间接判断虚拟磁盘中每一数据 块的空间占用情况, 故无法实时获取虚拟机磁盘全局空闲数据块信息 ; 此外, 该现有方法应 用受限, 只适用于动态分配的映像格式, 对于预先分配的镜像格式则无法进行空闲块释放。 发明内容
本发明实施例提供一种虚拟机存储空间管理方法及物理主机, 以有效地进行存储 空间管理, 提高存储系统的利用率。
一种虚拟机存储空间管理方法, 应用于物理主机, 该物理主机包括 : 硬件层, 运行 在该硬件层之上的虚拟机监控单元层, 运行在该虚拟机监控单元层之上的虚拟机, 其中, 该 虚拟机部署有存储气球代理模块, 该虚拟机监控单元层部署有存储气球守护进程模块, 该 方法包括 :
该存储气球代理模块根据预定义文件占用虚拟存储空间的大小获取所占用的部 分虚拟存储块, 将该虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护进程模 块; 该存储气球守护进程模块将虚拟存储空闲块信息对应的物理存储空间进行部分 或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
一种虚拟机存储空间管理系统, 包括部署于虚拟机中的存储气球代理模块和部署 于虚拟机监控单元层中的存储气球守护进程模块 ;
该存储气球代理模块, 用于根据预定义文件占用虚拟存储空间的大小获取所占用 的部分虚拟存储块, 将该虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护进程 模块 ;
该存储气球守护进程模块, 用于将虚拟存储空闲块信息对应的物理存储空间进行 部分或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
一种物理主机, 包括 : 硬件层, 运行在该硬件层之上的虚拟机监控单元层, 运行在 该虚拟机监控单元层之上的至少一个虚拟机, 其中, 该虚拟机部署有存储气球代理模块, 该 虚拟机监控单元层部署有存储气球守护进程模块 :
该存储气球代理模块, 用于根据预定义文件占用虚拟存储空间的大小获取所占用 的部分虚拟存储块, 将该部分虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护 进程模块 ;
该存储气球守护进程模块, 用于将该虚拟存储空闲块信息对应的物理存储空间进 行部分或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
本发明实施例采用在虚拟机部署存储气球代理模块, 在虚拟机监控单元层部署存 储气球守护进程模块, 由存储气球代理模块根据预定义文件占用虚拟存储空间情况获取虚 拟存储空闲块信息, 并将该虚拟存储空闲块信息传递给存储气球守护进程模块, 由存储气 球守护进程模块将该虚拟存储空闲块信息对应的物理存储空间释放的技术方案。 采用该技 术方案, 一方面可以实时获取虚拟存储空闲块信息, 实时性好 ; 另一方面避免了大量存储系 统读写操作, 系统开销小 ; 并且该方法通过文件系统接口来获取虚拟存储空闲块信息, 无需
了解文件系统的实现细节, 通用性好, 对于动态分配的映像格式和预先分配的镜像格式都 能适用。 附图说明
图 1 是虚拟机架构示意图 ;
图 2 是本发明实施例一种虚拟机存储空间管理方法的流程示意图 ;
图 2a 是存储图 2 所示方法的步骤 100 的具体步骤流程示意图 ;
图 2b 是图 2 所示方法的步骤 200 的具体步骤流程示意图 ;
图 3 是本发明实施例一种虚拟机存储空间管理系统的逻辑结构图 ;
图 4 是本发明实施例一种物理主机的逻辑结构示意图 ;
图 5a 是本发明应用场景例一种虚拟机存储空间管理方法的流程示意图 ;
图 5b 是本发明应用场景例一种虚拟机存储空间管理方法的流程示意图。 具体实施方式
本发明实施例提供一种虚拟机存储空间管理方法, 应用于物理主机, 该物理主机 包括 : 硬件层, 运行在硬件层之上的虚拟机监控单元层 VMM, 运行在虚拟机监控单元层 VMM 之上的虚拟机, 其中, 虚拟机中部署有存储气球代理 (SBA, Storage Balloon Agent) 模块, 虚拟机监控单元层 VMM 中部署有存储气球守护进程 (SBD, Storage Balloon Daemon) 模块 ; 该方法通过部署在虚拟机中的 SBA 用直接的方法获得虚拟存储空闲块信息, 将获取的虚拟 存储空闲块信息传递给虚拟机监控单元层 VMM 里面与 SBA 配合的 SBD, SBD 在虚拟机存储格 式里标记并释放虚拟存储空闲块信息对应的物理存储空间。 本发明实施例还提供相应的虚 拟机存储空间管理系统和物理主机。以下分别进行详细说明。
如图 2 所示, 本发明实施例提供的虚拟机存储空间管理方法, 该方法可以应用于 物理主机, 该物理主机包括 : 硬件层, 运行在该硬件层之上的虚拟机监控单元层, 运行在该 虚拟机监控单元层之上的虚拟机, 其中, 该虚拟机部署有存储气球代理模块, 该虚拟机监控 单元层部署有存储气球守护进程模块, 该方法可以包括如下步骤 :
100、 存储气球代理模块根据预定义文件占用虚拟存储空间的大小获取所占用的 部分虚拟存储块, 将该虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护进程模 块。
本步骤中, 部署于虚拟机中的 SBA 根据预定义文件占用虚拟存储空间情况可以直 接获取虚拟存储空闲块信息, 无需对每一空闲块执行清 “0” 的写操作 ;
并且, 在一种实现方式下, 存储气球代理模块 SBA 可以通过共享内存的方式将虚 拟存储块对应的虚拟存储空闲块信息传递给部署于虚拟机监控器层的存储气球守护进程 模块 SBD, 从而无需对每一空闲块执行读操作。
其中, 该预定义文件可以是预先定义的任意类型的文件, 其作用是占据一定的虚 拟存储空闲空间。例如, 对于虚拟机视窗操作系统 (Windows) 的 C 盘可以为 C:\balloon. sys。 本发明实施例可以使用已有的文件作为预定义文件, 也可以创建新的文件作为预定义 文件。
200、 存储气球守护进程模块将该虚拟存储空闲块信息对应的物理存储空间进行部分或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
本步骤中, SBD 执行释放空闲块的操作。在一种实现方式下, 根据预设的策略, SBD 可以将部分或者全部标记为空闲的虚拟存储块对应的物理存储空间释放, 并将已释放的物 理存储空间对应的虚拟存储块标记为不可用。
应当理解的是, 当物理主机的存储系统为磁盘时, 预定义文件占用的是虚拟磁盘 空间, 释放和标记的物理存储空间具体为物理磁盘空间。
请参阅图 2a, 在一个优选方案中, 步骤 100 可以具体包括以下步骤 :
110、 部署于虚拟机中的 SBA 将预定义文件占用虚拟存储空间的大小与获得的限 值范围进行比较。
需要说明的是, 针对将预定义文件占用虚拟存储空间的大小与限值范围进行比较 所获得的不同结果, 将执行不同的操作。 该限值范围可以是预先设置的固定值, 也可以根据 获取的其它参数通过规定的算法来获得。在一种实现方式下, 该步骤 110 具体可以包括 :
111、 SBA 调用文件系统获取虚拟存储空闲空间的大小和预定义文件占用虚拟存储 空间的大小, 从存储气球守护进程模块获得允许预定义文件占用虚拟存储空闲空间的下限 比例和上限比例。 其中, 虚拟机通过文件系统接口获取虚拟存储空闲空间信息, 该步骤按一定周期 重复执行, 例如, 相邻两次执行的时间间隔可选 1-5 秒。
允许预定义文件占用虚拟存储空闲空间的下限比例和上限比例在存储气球守护 进程模块中预先设置。其中上限比例优选为 80 ~ 90%, 下限比例优选为 60 ~ 70%。
112、 SBA 将下限比例和上限比例分别与虚拟存储空闲空间的大小的乘积作为预先 设置的限值范围的下限值和上限值。
假定虚拟存储空闲空间的大小为 X, 下限比例为 L1%, 上限比例为 L2%, 则限值范 围的下限值为 X*L1%, 上限值为 X*L2%。
113、 虚拟机将预定义文件占用虚拟存储空间的大小分别与限值范围的下限值和 上限值进行比较。
假定预定义文件占用虚拟存储空间的大小为 S, 则分别判断 S 与 X*L1%、 X*L2%的 大小。
120、 若预定义文件占用的虚拟存储空间的大小小于限值范围的下限值, SBA 调用 文件系统扩大预定义文件, 为扩大后的预定义文件分配虚拟存储块。
需要说明的是, 预定义文件小于下限值, 说明虚拟存储的空闲空间过大, 此时有必 要将一部分空闲空间释放。 为了释放部分空闲空间, 首先需要扩大预定义文件, 增加其占用 的空闲空间, 从而将其扩大部分占用的空闲空间释放。在一种实现方式下, 该步骤 120 具体 可以包括 :
121、 SBA 调用文件系统预分配接口, 传入限值范围的中间值作为扩大后预定义文 件的大小, 中间值等于下限值和上限值的和的一半。
下限值为 X*L1%, 上限值为 X*L2%时, 中间值为 X*(L1% +L2% )/2。
122、 SBA 虚拟机文件系统为扩大后的预定义文件分配虚拟存储块。
例如, 对于大小为 X*(L1% +L2% )/2 的预定义文件, 分配虚拟存储块可以为 [b1, b2, ...bn]。
123、 SBA 调用文件系统锁 (lock) 接口, 锁定为扩大后的预定义文件分配的虚拟存 储块, 以不被存储设备碎片整理工具修改。
130、 SBA 调用文件系统获得预定义文件的扩大部分所占用的虚拟存储块。
对于预定义文件的扩大部分, 即 [S, X*(L1% +L2% )/2] 区间, 虚拟机调用文件系 统 “问价偏移 - >数据块” 映射 (bmap) 接口, 获得占用的虚拟存储块 [bs, ...bn]。
140、 SBA 将表示该虚拟存储块的第一虚拟存储空闲块信息通过共享内存的方式传 递给存储气球守护进程模块。
第一虚拟存储空闲块信息被传递给存储气球守护进程模块, 其对应的物理存储空 间作为回收释放的候选。第一虚拟存储空闲块信息的传递方式以共享内存方式进行, 该方 式简单可靠。
请参阅图 2b, 在一种实现方式下, 步骤 200 具体可以包括以下步骤 :
210、 部署于虚拟机监控单元层 VMM 中的 SBD 判断第一虚拟存储空闲块信息对应的 虚拟存储块是否可用, 若可用, 则将该虚拟存储块标记为空闲。
SBD 通过共享内存方式, 获取第一虚拟存储空闲块信息, 判断其对应的虚拟存储块 是否可用, 若可用, 则将该虚拟存储块标记为空闲 ; 若不可用, 则不作处理。 处理完毕后, SBD 应答 SBA。
220、 SBD 将部分或者全部标记为空闲的虚拟存储块对应的物理存储空间释放, 并 将已释放的物理存储空间对应的虚拟存储块标记为不可用。
本步骤中, SBD 执行释放空闲块的操作。根据预设的策略, SBD 可以将部分或者全 部标记为空闲的虚拟存储块对应的物理存储空间释放, 并将已释放的物理存储空间对应的 虚拟存储块标记为不可用。
在实际执行中, 简单起见, 可以执行一种简单的策略, 即: 对于标记为空闲的虚拟 存储块, 将该虚拟存储块对应的物理存储空间全部释放, 并将已释放的物理存储空间对应 的虚拟存储块标记为不可用。
出于提高虚拟存储管理水平的目的, 也可以执行一种优选的策略, 即: 当虚拟机内 部分配和 / 或释放存储空间的操作频率等于或者大于阈值 ( 这里的阈值可以是预先设置 的, 也可以是动态计算得到的 ) 时, SBD 减少释放空闲块的比例 ; 当虚拟机内部分配和 / 或 释放存储空间的操作较少时, SBD 增加释放空闲块的比例。具体为 : SBD 判断虚拟机内部分 配或释放存储空间的操作频率是否等于或大于预先设置的阀值, 若否, 按照预先设置的比 例释放标记为空闲的虚拟存储块对应的物理存储空间, 例如按 80%的比例释放 ; 若是, 则 按照预先设置的速率降低预先设置的比例, 按照降低后的比例释放标记为空闲的虚拟存储 块对应的物理存储空间, 例如按每秒 1%的速度降低预先设这的比例 80%, 并按降低后的 比例例如 75%或者 70%等释放。降低空闲块释放比例的原因在于, 这些空闲块在短期内很 可能被再次使用, 这样可以减少因频繁释放和再分配带来的开销。 当然, 虚拟机内部分配和 释放存储空间的操作较少时, 应适当增加释放空闲块的比例。若空闲块对应的存储空间为 文件, 则释放空闲数据块功能依赖于导出宿主机文件系统内部接口 (free_blocks(start_ block, count)) ; 若虚拟存储块对应的存储空间为块设备, 则释放空闲块时通知底层数据块 存储系统释放。
请参阅图 2a, 本发明实施例提供的方法, 在步骤 110、 SBA 将预定义文件占用虚拟存储空间的大小与获得的限值范围进行比较之后, 还可以包括 :
150、 若预定义文件占用的虚拟存储空间大于限值范围的上限值, 调用文件系统获 得预定义文件的待缩减部分所占用的虚拟存储块。
预定义文件大于上限值, 说明虚拟存储的空闲空间过小, 此时有必要将一部分预 定义文件占用的空闲空间返还给虚拟机文件系统。为了返还部分空闲空间, 就需要收缩预 定义文件, 减少其占用的空闲空间, 从而将其缩减部分占用的空闲空间释放。
SBA 获取一个目标值作为收缩后预定义文件的大小, 大于该目标值的部分是待缩 减部分, 将被截断去掉。 一种实现方式中, 预定义文件的收缩以限值范围的中间值作为目标 大小, 在预定义文件的原大小为 S, 中间值为 X*(L1% +L2% )/2 时, 预定义文件的待收缩部 分为 [X*(L1% +L2% )/2, S] 区间, 对于该区间, 虚拟机调用 “文件系统 - >数据块” 映射 (bmap) 接口, 获得对应的虚拟存储块。
160、 SBA 将表示该待缩减部分所占用的虚拟存储块的第二虚拟存储空闲块信息传 递给 SBD, 通知 SBD 禁止标记该待缩减部分所占用的虚拟存储块为空闲状态。
假若该待缩减部分所占用的虚拟存储块被标记为空闲状态, 将被 SBD 进行释放, 无法返还给虚拟机文件系统, 因而, 有必要及时通知 SBD 确保该缩减部分所占用的虚拟存 储块不被标记为空闲。在一种实现方式下, 第二虚拟存储空闲块信息的传递方式以共享内 存方式进行, 该方式简单可靠。 SBD 收到 SBA 传递的第二虚拟存储空闲块信息后, 将执行步骤 : 230、 SBD 判断第二 虚拟存储空闲块信息对应的虚拟存储块是否为空闲, 若为空闲, 则将该虚拟存储块标记为 可用。
SBD 通过共享内存方式, 获取第二虚拟存储空闲块信息, 判断该第二虚拟存储空闲 块信息对应的虚拟存储块是否为空闲, 若为空闲则标记为可用 ; 若该第二虚拟存储空闲块 信息对应的虚拟存储块为不可用, 则不作处理。需要注意, 虚拟机中分配数据块仅为虚拟 层面, 真正的物理存储空间的数据块分配是在写操作发生时进行的。处理完毕后, SBD 应答 SBA。
170、 SBA 调用文件系统收缩所述预定义文件。
SBA 调用文件系统截断 (truncate) 接口, 传入预先设置的限值范围的中间值作为 收缩后预定义文件的大小, 中间值等于下限值和上限值的和的一半 ;
将标记为可用的、 该预定义文件的待缩减部分即截断部分所占用的虚拟存储块 ( 即第二虚拟存储空闲块信息对应的虚拟存储块 ) 返还给虚拟机文件系统。
上述的方法的优选方案分别对预定义文件占用的虚拟存储空间小于限值范围的 下限值和大于限值范围的上限值时进行了处理。
需要注意的是, 在预定义文件的大小介于限值范围的下限值和上限值之间时, 说 明虚拟存储的空闲空间大小合适, 将不予处理。
本发明实施例提供的虚拟机存储空间管理方法, 是按一定周期循环执行的。在步 骤 110、 部署于虚拟机中的 SBA 将预定义文件占用虚拟存储空间的大小与获得的限值范围 进行比较之后, 针对比较的结果分别执行不同的操作, 在执行完毕后, 无论预定义文件的大 小和获得的限值范围是否发生变化, 返回重新进行下一个循环周期。
综上所述, 本发明实施例提供的虚拟机存储空间管理方法中 : 虚拟机中通过 SBA
实时获取虚拟存储空闲数据块信息, 主动向宿主机告知虚拟机存储空间使用情况, 将待释 放的空闲块信息传递给部署于虚拟机监控器层 ( 即宿主机 ) 的 SBD, 宿主机通过 SBD 进行虚 拟存储空闲块的释放和再分配, 可见, 宿主机可以实时获取虚拟机存储空间使用情况, 实时 性好 ;
以及, 本发明实施例提供的虚拟机存储空间管理方法, 避免了大量存储系统读写 操作, 从而系统开销小 ; 并且, 通过文件系统接口来获取虚拟存储空闲块, 无需了解文件系 统的实现细节, 通用性好 ;
而且, 本发明实施例提供的虚拟机存储空间管理方法, 对于动态分配的映像格式 和预先分配的镜像格式都能适用。
本发明实施例提供的虚拟机存储空间管理方法中, 通过实时识别虚拟机存储空间 使用情况 ( 即识别虚拟机存储系统中的有效数据块和空闲数据块 ), 可以释放该虚拟存储 空闲块对应的物理存储空间, 从而可以从而有效地进行存储空间管理, , 提高底层存储系统 的利用率。 此外, 通过识别有效数据块, 还可以有效提升存储在线迁移、 虚拟机克隆、 映像备 份这类 I/O 密集型操作的效率。可见, 本发明实施例提供的虚拟机存储空间管理方案可用 于存储系统自动精简部署空间管理。 如图 3 所示, 本发明实施例提供一种虚拟机存储空间管理系统, 包括部署于虚拟 机中的存储气球代理 (SBA, Storage Balloon Agent) 模块和部署于虚拟机监控单元层中的 存储气球守护进程 (SBD, Storage Balloon Daemon) 模块。该系统运行于物理主机中。
下面, 首先对运行虚拟机存储空间管理系统的物理主机的逻辑架构进行说明, 如 图 4 所示, 该物理主机包括 :
硬件层 : 硬件层是虚拟化环境运行的整个硬件平台, 可以包括处理器 ( 如 CPU)、 内 存 Memory、 存储系统 ( 如磁盘 Disk, 硬盘 Hard Disk)、 网卡和存储等高速 I/O 设备和基本输 入输出等低速设备。
宿主机 : 即虚拟机监控器 (VMM) 层, 它作为一个管理层, 完成硬件资源的管理、 分 配; 为虚拟机呈现一个虚拟硬件平台 ; 虚拟机的调度和隔离。 有些 VMM 的实现里面需要一个 特权虚拟机配合, 两者结合组成宿主机 (HOST)。虚拟硬件平台对其上的虚拟机提供各种硬 件资源, 如 VCPU、 虚拟内存、 虚拟磁盘 VDisk、 虚拟网卡等。其中虚拟磁盘对应宿主机里面的 一个文件, 或者一个逻辑块设备。 由于虚拟磁盘的连续块在宿主机中可以是离散存放的, 为 了便于组织和管理, 虚拟机磁盘映像一般通过映像格式来描述, 其中的元数据区用于存放 虚拟磁盘数据块与宿主机中数据块之间的映射关系。
虚拟机 : 虚拟机运行宿主机为其准备的虚拟平台中。大多数时间虚拟机的执行不 受宿主机的影响。
下面, 对存储气球代理模块 (SBA) 和存储气球守护进程 (SBD) 模块进行说明。其 中, SBA 部署于虚拟机中, SBD 部署于虚拟机监控器层。
存储气球代理模块 401, 用于根据预定义文件占用虚拟存储空间的大小获取所占 用的部分虚拟存储块, 将该虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护进 程模块。
存储气球守护进程模块 402, 用于将虚拟存储空闲块信息对应的物理存储空间进 行部分或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
在一种实现方式下, 存储气球代理模块 401 可以具体包括 : 比较单元, 用于将预定义文件占用虚拟存储空间的大小与获得的限值范围进行比较; 扩大单元, 用于若预定义文件占用的虚拟存储空间小于限值范围的下限值, 则调 用文件系统扩大预定义文件, 为扩大后的预定义文件分配数据块 ;
获取单元, 用于调用文件系统获取预定义文件的扩大部分所占用的虚拟存储块 ;
传递模块, 用于将表示该虚拟存储块的第一虚拟存储空闲块信息传递给存储气球 守护进程模块。
在一种实现方式下, 存储气球守护进程模块 402 可以具体包括 :
判断单元, 用于判断第一虚拟存储空闲块信息对应的虚拟存储块是否可用, 若可 用, 则将该虚拟存储块标记为空闲 ;
释放及标记单元, 用于根据策略将部分或者全部标记为空闲的虚拟存储块对应的 物理存储空间释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
综上所述, 本发明实施例提供的虚拟机存储空间管理系统中 : 虚拟机中通过 SBA 实时获取虚拟存储空闲数据块信息, 主动向宿主机告知虚拟机存储空间使用情况, 将待释 放的空闲块信息传递给部署于虚拟机监控器层 ( 即宿主机 ) 的 SBD, 宿主机通过 SBD 进行虚 拟存储空闲块的释放和再分配, 可见, 宿主机可以实时获取虚拟机存储空间使用情况, 实时 性好 ;
以及, 本发明实施例提供的虚拟机存储空间管理系统, 避免了大量存储系统读写 操作, 从而系统开销小 ; 并且, 通过文件系统接口来获取虚拟存储空闲块, 无需了解文件系 统的实现细节, 通用性好 ;
而且, 本发明实施例提供的虚拟机存储空间管理系统, 对于动态分配的映像格式 和预先分配的镜像格式都能适用。
本发明实施例提供的虚拟机存储空间管理系统中, 通过实时识别虚拟机存储空间 使用情况 ( 即识别虚拟机存储系统中的有效数据块和空闲数据块 ), 可以释放该虚拟存储 空闲块对应的物理存储空间, 从而可以从而有效地进行存储空间管理, , 提高底层存储系统 的利用率。 此外, 通过识别有效数据块, 还可以有效提升存储在线迁移、 虚拟机克隆、 映像备 份这类 I/O 密集型操作的效率。可见, 本发明实施例提供的虚拟机存储空间管理方案可用 于存储系统自动精简部署空间管理。
如图 4 所示, 本发明实施例还提供一种物理主机, 包括硬件层, 运行在硬件层之上 的虚拟机监控单元层 VMM, 运行在虚拟机监控单元层 VMM 之上的至少一个虚拟机, 其中, 该 虚拟机部署有存储气球代理, 该虚拟机监控单元层部署有存储气球守护进程 :
存储气球代理模块, 用于根据预定义文件占用虚拟存储空间的大小获取所占用的 部分虚拟存储块, 将该部分虚拟存储块对应的虚拟存储空闲块信息传递给存储气球守护进 程模块。
存储气球守护进程模块, 用于将该虚拟存储空闲块信息对应的物理存储空间进行 部分或全部释放, 并将已释放的物理存储空间对应的虚拟存储块标记为不可用。
在一种实现方式下, 该存储气球代理模块具体用于将该预定义文件占用虚拟存储 空间的大小与获得的限值范围进行比较, 若该预定义文件占用的虚拟存储空间小于限值范
围的下限值, 则调用文件系统扩大预定义文件, 为扩大后的预定义文件分配虚拟存储块, 调 用文件系统获得预定义文件的扩大部分所占用的虚拟存储块, 将表示该虚拟存储块的第一 虚拟存储空闲块信息传递给存储气球守护进程模块 ;
该存储气球守护进程模块具体用于判断第一虚拟存储空闲块信息对应的虚拟存 储块是否可用, 若可用, 则将该虚拟存储块标记为空闲, 根据策略将部分或者全部标记为空 闲的虚拟存储块对应的物理存储空间释放, 并将已释放的物理存储空间对应的虚拟存储块 标记为不可用。
在一种实现方式下, 该存储气球代理模块进一步用于 : 若预定义文件占用的虚拟 存储空间大于限值范围的上限值, 调用文件系统获得预定义文件的待缩减部分所占用的虚 拟存储块, 将表示虚拟存储块的第二虚拟存储空闲块信息传递给存储气球守护进程模块 ; 以及, 调用文件系统收缩预定义文件。
该存储气球守护进程模块进一步用于 : 判断该第二虚拟存储空闲块信息对应的虚 拟存储块是否为空闲, 若为空闲, 则将该虚拟存储块标记为可用。
综上所述, 本发明实施例提供的物理主机中 : 虚拟机中通过 SBA 实时获取虚拟存 储空闲数据块信息, 主动向宿主机告知虚拟机存储空间使用情况, 将待释放的空闲块信息 传递给部署于虚拟机监控器层 ( 即宿主机 ) 的 SBD, 宿主机通过 SBD 进行虚拟存储空闲块的 释放和再分配, 可见, 宿主机可以实时获取虚拟机存储空间使用情况, 实时性好 ;
以及, 本发明实施例提供的物理主机, 避免了大量存储系统读写操作, 从而系统开 销小 ; 并且, 通过文件系统接口来获取虚拟存储空闲块, 无需了解文件系统的实现细节, 通 用性好 ;
而且, 本发明实施例提供的物理主机, 对于动态分配的映像格式和预先分配的镜 像格式都能适用。
本发明实施例提供的物理主机中, 通过实时识别虚拟机存储空间使用情况 ( 即识 别虚拟机存储系统中的有效数据块和空闲数据块 ), 可以释放该虚拟存储空闲块对应的物 理存储空间, 从而可以从而有效地进行存储空间管理, 提高底层存储系统的利用率。此外, 通过识别有效数据块, 还可以有效提升存储在线迁移、 虚拟机克隆、 映像备份这类 I/O 密集 型操作的效率。可见, 本发明实施例提供的虚拟机存储空间管理方案可用于存储系统自动 精简部署空间管理。
为便于理解, 下面以一具体的应用场景对上述实施例中描述的虚拟机存储空间管 理方法进行详细描述。为清楚起见, 将 SBA 和 SBD 各自执行的步骤分开描述。在本实施例 中, 以底层存储系统为磁盘为例进行说明, 相应的, 物理存储空间为物理磁盘空间, 虚拟存 储空间为虚拟磁盘空间。
如图 5a 所示, 下面首先描述 SBA 执行的步骤, 包括 :
201、 如果预定义文件 (F, 比如对于 Windows 的 C 盘可以为 C:\balloon.sys) 不存 在, 则创建预定义文件。
202、 获取预定义文件 F 的文件大小 S。
203、 通过文件系统接口获得虚拟磁盘的空闲空间信息, 包括空闲空间的大小 X。
204、 从 SBD 获取允许 F 占用虚拟磁盘空闲空间的下限 (L1% ) 和上限比例 (L2% ) 的配置, 如图 4 所示。205、 将预定义文件的大小 S 与预先设置的限值范围进行比较, 如果 S < X*L1%, 说 明预定义文件 F 占用空闲空间过小, 则扩大预定义文件。
2011、 调用文件系统预分配 (fallocate) 接口, 传入 X*(L1% +L2% )/2 作为预定 义文件 F 的大小, 文件系统为该文件分配数据块 [b1, b2, ...bn]。
2022、 调用文件系统锁 (lock) 接口, 确保预定义文件 F 对应虚拟磁盘的数据块不 会被磁盘碎片整理类工具修改。
2023、 对于预定义文件的扩大部分, 即 [S, X*(L1% +L2% )/2] 区间, 调用文件系统 “文件偏移 - >数据块” 映射 (bmap) 接口, 获得对应的虚拟磁盘块组。
2024、 把该虚拟磁盘块组对应的第一虚拟磁盘空闲块信息通过共享内存的方式传 递给 SBD, 该虚拟磁盘块组将作为回收释放的候选。 如图 4 所示, 第一虚拟磁盘空闲块信息, 例如 [2, 3, 14, 15, 16, 17, 18, 19, 20, ..., 24]。同时将一个扩大消息传递给 SBD, 用于通知 SBD 进行相应的操作。
206、 如果 S > X*L2%, 说明预定义文件 F 占用空闲空间过大, 则收缩预定义文件。
2061、 系 统 将 以 X*(L1 % +L2 % )/2 作 为 收 缩 后 F 的 大 小, 因 而 对 于 [X*(L1 % +L2% )/2, S] 区间, 调用文件系统 “文件偏移 - >数据块” 映射接口 (bmap), 获得对应的虚 拟磁盘块组。
2062、 将该虚拟磁盘块组对应的第二虚拟磁盘空闲块信息通过共享内存的方式传 递给 SBD。同时将一个收缩消息传递给 SBD, 用于通知 SBD 进行相应的操作, 以及确保该虚 拟磁盘块组没有被 SBD 标记为空闲状态。
2063、 调用文件系统的截断 (truncate) 接口, 传入 X*(L1% +L2% )/2 作为收缩后 F 的大小, 把该虚拟磁盘块组返还给虚拟机文件系统。
207、 如果 X*L1%<= S <= X*L2%, 说明预定义文件 F 占用空闲空间大小适应, 无需执行扩大或收缩操作。
208、 等待适当时间后, 转到步骤 202。
需要注意的是, 当预定义文件 F 的大小受限于文件系统时, 可能需要创建多个预 定义文件 F。
如图 5b 所示, 下面描述 SBD 执行的步骤, 包括 :
301、 提供用户接口, 配置 SBA 允许预定义文件占用虚拟磁盘空闲空间的下限、 上 限比例。该上、 下限比例可以灵活设置, 比如在存储在线迁移时, 适当提高比例可以达到进 一步减少虚拟磁盘空闲空间拷贝的目的。一般可以将下限比例设置在 60%左右, 上限比例 设置在 80%~ 90%之间。
302、 处理所收到的 SBA 发出的扩大消息。该步骤中, SBD 通过共享内存方式获取 需要释放的虚拟磁盘块对应的第一虚拟磁盘空闲块信息, 对相应的虚拟磁盘块进行标记处 理, 具体包括以下步骤 :
3031、 判断该第一虚拟磁盘空闲块信息对应的虚拟磁盘块是否可用, 若可用, 则标 记为空闲 ; 若不可用, 不做处理。
3032、 在判断和标记完毕后, 应答 SBA。
3033、 根据策略, 释放部分或者全部空闲块对应的磁盘空间, 标记相应块为不可 用。一种简单的策略 : 对于所有标记为空闲的块, 全部释放并且标记为不可用。
一种更优的策略 : 当虚拟机内部分配和释放磁盘空间的操作频率等于或者大于某 个阈值时, SBD 减少释放空闲数据块的比例, 因为这些空闲数据块在短期内很可能被再次用 到, 这样可以减少因为频繁释放和再分配带来的开销 ; 当虚拟机内部分配和释放磁盘空间 的操作较少时, SBD 增加释放空闲数据块的比例。
需要注意的是, 数据块为文件方式时, 释放空闲块功能依赖于导出宿主机文件系 统内部接口 (free_blocks(st art_block, count)) ; 数据块为块接口方式时, 通知底层块存 储系统释放。
303、 处理所收到的 SBA 发出的收缩消息。该步骤中, SBD 通过共享内存方式获取 需要收回的虚拟磁盘块对应的第二虚拟磁盘空闲块信息, 对相应的虚拟磁盘块进行标记处 理, 具体包括以下步骤 :
3031、 判断虚拟磁盘格式中相应虚拟磁盘块是否为空闲, 若是, 则标记为可用。
3032、 判断虚拟磁盘格式中相应虚拟磁盘块是否为不可用, 若是则不作处理。 需要 注意, 真正的数据块分配在写操作发生时进行。
3033、 应答 SBA。 综上所述, 本发明实施例提供的虚拟机存储空间管理方案中 : 虚拟机中通过 SBA 实时获取虚拟存储空闲数据块信息, 主动向宿主机告知虚拟机存储空间使用情况, 将待释 放的空闲块信息传递给部署于虚拟机监控器层 ( 即宿主机 ) 的 SBD, 宿主机通过 SBD 进行虚 拟存储空闲块的释放和再分配, 可见, 宿主机可以实时获取虚拟机存储空间使用情况, 实时 性好 ;
以及, 本发明实施例提供的虚拟机存储空间管理方案, 避免了大量存储系统读写 操作, 从而系统开销小 ; 并且, 通过文件系统接口来获取虚拟存储空闲块, 无需了解文件系 统的实现细节, 通用性好 ;
而且, 本发明实施例提供的虚拟机存储空间管理方案, 对于动态分配的映像格式 和预先分配的镜像格式都能适用。
本发明实施例提供的虚拟机存储空间管理方案中, 通过实时识别虚拟机存储空间 使用情况 ( 即识别虚拟机存储系统中的有效数据块和空闲数据块 ), 可以释放该虚拟存储 空闲块对应的物理存储空间, 从而可以从而有效地进行存储空间管理, 提高底层存储系统 的利用率。 此外, 通过识别有效数据块, 还可以有效提升存储在线迁移、 虚拟机克隆、 映像备 份这类 I/O 密集型操作的效率。可见, 本发明实施例提供的虚拟机存储空间管理方案可用 于存储系统自动精简部署空间管理。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可 以通过程序来指令相关的硬件来完成, 该程序可以存储于一计算机可读存储介质中, 存 储介质可以包括 : 只读存储器 (ROM, Read-Only Memory)、 随机存取存储器 (RAM, random access memory)、 磁盘或光盘等。
以上对本发明实施例所提供的虚拟机存储空间管理方法、 系统以及计算机终端进 行了详细介绍, 本文中应用了具体个例对本发明的原理及实施方式进行了阐述, 以上实施 例的说明只是用于帮助理解本发明的方法及其核心思想 ; 同时, 对于本领域的一般技术人 员, 依据本发明的思想, 在具体实施方式及应用范围上均会有改变之处, 综上所述, 本说明
书内容不应理解为对本发明的限制。