一种基于SR-IOV的链接克隆的方法、存储设备及系统
技术领域
本发明涉及I/O虚拟化技术,具体为一种基于SR-IOV的链接克隆的方法、存储设备及系统。
背景技术
在本领域中,SR-IOV:Single Root I/O Virtualization称为单根IO虚拟化。
RAID:Redundant Array of Independent Disks,即为独立磁盘冗余阵列,或简称磁盘阵列,RAID出现的最初目的是将多个容量较小的硬盘合并成为一个大容量的“逻辑盘”,实现硬盘容量的增加性能提升。随着RAID技术的发展,现在可以选择不同的RAID阵列类型以满足硬盘容量、数据冗余、或者存储系统性能等需要。
虚拟化中利用克隆技术,管理员可以很方便地根据一个源虚拟机(模板)克隆出一个或多个克隆虚拟机,且克隆虚拟机拥有与源虚拟机完全相同的操作系统、应用系统乃至数据和文档。克隆功能给管理员在IT管理和运维上带来了极大的便利。克隆技术可分为完整克隆(完整复制)和链接克隆两种。完整克隆方式下,克隆虚拟机和源虚拟机是两个完全独立的实体,源虚拟机的修改乃至删除不会影响到克隆虚拟机的运行,但缺点是不同虚拟机需要各自占用完全独立的磁盘空间。与之相对应的是链接克隆方式,克隆虚拟机必须在源虚拟机存在的情况下才能运行,但优点是多个克隆虚拟机之间的公共部分(共同来自源虚拟机的部分)可以共用同一份磁盘空间。链接克隆是一种通过将链接克隆母卷和链接克隆差分卷组合映射为一个链接克隆卷,提供给虚拟机使用的技术;其中链接克隆母卷为只读卷,多个链接克隆虚拟机共用一份;链接克隆差分卷是读写卷,其存储是精简配置的,每个链接克隆虚拟机一份,保存了每个虚拟机差异化的数据;多个克隆虚拟机之间的公共部分可以共用同一份磁盘空间,因此在服务器主机资源相同的情况下,采用链接克隆的方式可以支持更多的虚拟机,运行更多的业务,或者运行更多的虚拟桌面,从而使企业的IT成本更低。链接克隆技术具有创建速度快、占用存储空间小的优点,非常适合于同质化用户、桌面高度标准化场景。
但是,链接克隆虽然大大节省了存储的空间开销,然而虚拟机还是需要通过IO虚拟化软件来访问存储,当大量的虚拟机在同时启动的情况下,出现频繁的IO操作,这对共享存储以及IO虚拟化软件形成了很高的压力,导致虚拟机启动速度慢。
PCIe SSD(即接口为PCIe接口的SSD)存储设备主要包括存储控制器和存储介质NAND Flash,支持SR-IOV的存储控制器将PCIe SSD中的存储介质整合为统一存储资源,将统一存储资源划分为多个存储子资源,并将上述多个存储子资源分配给PF和各个VF。
该技术虽然通过支持单根输入/输出虚拟化技术,提高存储设备的I/O性能和存储设备中存储资源的利用率,但是并没有考虑到桌面虚拟化中的空间复用问题,各资源子区间是相互隔离的。
综上,虽然通过SR-IOV技术能够为各虚拟机提供PCIE存储设备的资源共享,但是在桌面虚拟化场景,各VM的操作系统盘数据内容基本一致,存在大量的数据冗余。因此,有必要进行改进。
发明内容
为了解决上述技术问题,本发明的目的是提供一种基于SR-IOV的链接克隆的方法、存储设备及系统。
本发明所采用的技术方案是:一方面,本发明提供一种基于SR-IOV的链接克隆的方法,包括步骤:
虚拟机监视器通过物理功能驱动模块在存储设备中创建基础镜像;
存储设备中的存储控制器记录所述基础镜像的逻辑空间范围,并为所述基础镜像产生一个对应的镜像ID标识;
所述虚拟机监视器发送为虚拟机(VM0)创建链接克隆镜像的请求命令;
所述存储控制器向所述虚拟机(VM0)分配虚拟功能资源,并创建所述克隆镜像的差分镜像,且维护相应的映射关系;
所述存储控制器接收虚拟机(VM0)发送给目的虚拟功能的命令,查找对应的差分镜像,并对所述差分镜像执行相应的操作。
作为该技术方案的改进,其中,所述存储设备包括基于PCIe的固态硬盘和/或基于PCIe的磁盘扩展卡。
作为该技术方案的改进,启动虚拟机监视器,加载存储设备的物理功能驱动模块,完成所述存储设备的探测和初始化;所述初始化包括对存储设备进行分区划分以及创建文件系统;
所述存储设备通过物理功能驱动模块接收并执行所述虚拟机监视器的初始化命令;
所述虚拟机监视器通过物理功能驱动模块将数据源镜像(S0)写入所述存储设备;
所述存储设备接收并完成所述虚拟机监视器的写入命令;
所述虚拟机监视器通过物理功能驱动模块发送命令请求所述存储设备创建一个镜像源(si0);
所述存储设备接收到请求命令并分配一个唯一的镜像ID(sid0);
所述虚拟机监视器通过物理功能驱动模块为虚拟机(VM0)创建第一队列(VF0),并指定所述第一队列(VF0)绑定镜像源(sid0);
所述存储设备分配与虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
虚拟功能(VF)队列创建成功,所述虚拟机监视器为虚拟机(VM0)分配相应的DMA内存空间以及中断资源,并调用输入/输出内存管理单元完成相关的资源重映射。
作为该技术方案的改进,所述虚拟机监视器通过物理功能驱动模块发送命令请求所述存储设备设备创建一个镜像源(si0),所述镜像源的LBA地址范围为LBAs0-LBAe0。
进一步地,所述步骤存储设备接收到请求命令并分配一个唯一的镜像ID(sid0),其并记录所述镜像源的LBA地址范围LBAs0-LBAe0。
进一步地,若所述物理功能驱动模块查询到的LBA地址和所述存储设备管理的逻辑地址不是完全相同,则需要进行相应的映射转换。
另一方面,本发明还提供一种基于SR-IOV的链接克隆的存储设备,包括存储介质和存储控制器,所述存储控制器分别连接主机和存储介质;
所述存储控制器包括物理功能以及与所述物理功能关联的一个或者多个虚拟功能,所述物理功能与所述虚拟机监视器进行直接通信,每个所述虚拟功能分别与一个所述虚拟机进行直接通信;
所述存储设备用于执行:
接收并执行所述虚拟机监视器的初始化命令;
接收并完成所述虚拟机监视器发送的数据源镜像(S0)写入命令;
所述存储设备接收虚拟机监视器发出的创建一个镜像源(si0)的请求命令并分配一个唯一的镜像ID(sid0);
所述存储设备接收虚拟机监视器发送的基于镜像源(sid0)为虚拟机(VM0)创建第一队列(VF0)的命令,分配虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个关联镜像源(sid0)的差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
所述存储设备接收虚拟机(VM0)发送给目的虚拟功能队列的命令,查找对应的差分卷,并对所述差分卷执行相应的操作。
本发明还提供一种基于SR-IOV的链接克隆的系统,包括存储设备和主机,其中:
所述存储设备包括存储介质和存储控制器,所述存储控制器分别连接主机和存储介质;
所述存储控制器包括物理功能以及与所述物理功能关联的一个或者多个虚拟功能,所述物理功能与所述虚拟机监视器进行直接通信,每个所述虚拟功能分别与一个所述虚拟机进行直接通信;
所述存储设备用于执行:
接收并执行所述虚拟机监视器的初始化命令;
接收并完成所述虚拟机监视器发送的数据源镜像(S0)写入命令;
所述存储设备接收虚拟机监视器发出的创建一个镜像源(si0)的请求命令并分配一个唯一的镜像ID(sid0);
所述存储设备接收虚拟机监视器发送的基于镜像源(sid0)为虚拟机(VM0)创建第一队列(VF0)的命令,分配虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个关联镜像源(sid0)的差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
所述存储设备接收虚拟机(VM0)发送给目的虚拟功能队列的命令,查找对应的差分卷,并对所述差分卷执行相应的操作;
所述主机运行有虚拟机监视器以及一个或者多个虚拟机,并且所述主机用于执行所述的方法。
再一方面,本发明还提供一种基于SR-IOV的链接克隆的系统,包括:
第一模块,用于执行虚拟机监视器通过物理功能驱动模块在存储设备中创建基础镜像;
第二模块,用于执行存储设备中的存储控制器记录所述基础镜像的逻辑空间范围,并为所述基础镜像产生一个对应的镜像ID标识;
第三模块,用于执行所述虚拟机监视器发送为虚拟机(VM0)创建链接克隆镜像的请求命令;
第四模块,用于执行所述存储控制器向所述虚拟机(VM0)分配虚拟功能资源,并创建所述克隆镜像的差分镜像,且维护相应的映射关系;
第五模块,用于执行所述存储控制器接收虚拟机(VM0)发送给目的虚拟功能的命令,查找对应的差分镜像,并对所述差分镜像执行相应的操作。
本发明的有益效果是:本发明提供一种基于SR-IOV的链接克隆的方法、存储设备及系统,通过结合PCIE存储硬件实现了链接克隆的硬件卸载,在通过存储设备资源共享提高虚拟机IO速度的同时,大大提高了存储空间的复用效率。
附图说明
下面结合附图对本发明的具体实施方式作进一步说明:
图1是本发明一实施例的基于SR-IOV SSD的链接克隆架构示意图;
图2是本发明一实施例的基于SR-IOV SSD的虚拟化平台示意图;
图3是本发明一实施例的基于SR-IOV SAS HBA的架构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
本发明是针对SR-IOV存储设备的一种链接克隆方法。一种基于SR-IOV的链接克隆的方法,包括步骤:
虚拟机监视器通过物理功能驱动模块在存储设备中创建基础镜像;
存储设备中的存储控制器记录所述基础镜像的逻辑空间范围,并为所述基础镜像产生一个对应的镜像ID标识;
所述虚拟机监视器发送为虚拟机(VM0)创建链接克隆镜像的请求命令;
所述存储控制器向所述虚拟机(VM0)分配虚拟功能资源,并创建所述克隆镜像的差分镜像,且维护相应的映射关系;
所述存储控制器接收虚拟机(VM0)发送给目的虚拟功能的命令,查找对应的差分镜像,并对所述差分镜像执行相应的操作。
作为该技术方案的改进,其中,所述存储设备包括基于PCIe的固态硬盘和/或基于PCIe的磁盘扩展卡。
作为该技术方案的改进,启动虚拟机监视器,加载存储设备的物理功能驱动模块,完成所述存储设备的探测和初始化;所述初始化包括对存储设备进行分区划分以及创建文件系统;
所述存储设备通过物理功能驱动模块接收并执行所述虚拟机监视器的初始化命令;
所述虚拟机监视器通过物理功能驱动模块将数据源镜像(S0)写入所述存储设备;
所述存储设备接收并完成所述虚拟机监视器的写入命令;
所述虚拟机监视器通过物理功能驱动模块发送命令请求所述存储设备创建一个镜像源(si0);
所述存储设备接收到请求命令并分配一个唯一的镜像ID(sid0);
所述虚拟机监视器通过物理功能驱动模块为虚拟机(VM0)创建第一队列(VF0),并指定所述第一队列(VF0)绑定镜像源(sid0);
所述存储设备分配与虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
虚拟功能(VF)队列创建成功,所述虚拟机监视器为虚拟机(VM0)分配相应的DMA内存空间以及中断资源,并调用输入/输出内存管理单元完成相关的资源重映射。
作为该技术方案的改进,所述虚拟机监视器通过物理功能驱动模块发送命令请求所述存储设备创建一个镜像源(si0),所述镜像源的LBA地址范围为LBAs0-LBAe0。
进一步地,所述步骤存储设备接收到请求命令并分配一个唯一的镜像ID(sid0),其并记录所述镜像源的LBA地址范围LBAs0-LBAe0。
进一步地,若所述物理功能驱动模块查询到的LBA地址和所述存储设备管理的逻辑地址不是完全相同,则需要进行相应的映射转换。
一种基于SR-IOV的存储设备访问方法,由存储设备中的存储控制器执行,所述存储设备包含存储介质和存储控制器,存储控制器分别连接主机和存储介质,其中所述主机运行有虚拟机监视器以及一个或者多个虚拟机,所述存储控制器中包括物理功能PF以及与所述PF关联的一个或者多个虚拟功能VF,所述PF与所述虚拟机监视器进行直接通信,每个所述VF与一个所述虚拟机进行直接通信,所述方法包括:
虚拟机监视器通过所述PF在存储设备中创建基础镜像,存储控制器保存并记录该基础镜像的逻辑空间范围,并为该镜像产生一个镜像ID标识;
虚拟机监视器基于该镜像ID标识,发送请求命令为虚拟机VM0创建链接克隆镜像,存储控制器为虚拟机VM0分配VF资源VF0,基于该基础镜像创建该克隆镜像的差分镜像,并维护相应的映射关系。
接收所述虚拟机发送给目的VF的命令,并根据目的VF查找到对应的差分镜像,并对该差分镜像执行相应的操作。
参照图1,为支持链接克隆卸载的PCIE SSD设备基础架构。其中:镜像管理模块主要功能是接收VMM通过PF驱动发送过来的创建镜像命令,给每一个镜像分配一个唯一的镜像ID,并记录该镜像的逻辑空间地址范围。
队列映射&调度模块主要功能是记录VF队列和差分镜像的映射关系,接收各VM通过VF驱动发送的IO命令,并通过差分镜像管理模块获得该IO操作对应的逻辑地址,完成相应的IO操作。
差分镜像索引模块主要功能是为每一个VM创建与某个镜像资源关联的差分卷,并把该差分卷和分配给VM的某个VF队列进行关联。
当从队列映射&调度模块收到该VM发送读请求时,并且该读请求的数据区域没有被改写过,则让该读请求直接从镜像资源的相应位置读取该数据;
当从队列映射&调度模块收到该VM发送读请求时,并且该读请求的数据区域为脏,则为通过索引查询获得该数据区间的逻辑地址,基于该逻辑地址完成数据读操作;
当从队列映射&调度模块收到该VM发送写请求时,并且该写请求的数据区域没有被改写过,则为该写请求分配新的数据空间,记录新分配的逻辑地址,并在差分卷上标记该区域为脏,基于新分配的地址完成数据写操作;
当从队列映射&调度模块收到该VM发送写请求时,并且该写请求的数据区域为脏,则为通过索引查询获得该数据区间的逻辑地址,基于该逻辑地址完成数据写操作。
队列资源管理模块主要功能是管理各VF资源,接收VMM从PF发送的命令,为VM分配VF队列。
闪存转换层(Flash Translation Layer,FTL)主要功能是将NAND Flash映射成单一的逻辑空间(即SSD逻辑空间),用绝对逻辑区块地址(Logical Block Address,LBA)来表示。同时FTL层还需要实现Flash芯片的磨损均衡、垃圾回收等功能。
本发明还提供一种基于SR-IOV的链接克隆的存储设备,包括存储介质和存储控制器,所述存储控制器分别连接主机和存储介质;
所述存储控制器包括物理功能以及与所述物理功能关联的一个或者多个虚拟功能,所述物理功能与所述虚拟机监视器进行直接通信,每个所述虚拟功能分别与一个所述虚拟机进行直接通信;
所述存储设备用于执行:
接收并执行所述虚拟机监视器的初始化命令;
接收并完成所述虚拟机监视器发送的数据源镜像(S0)写入命令;
所述存储设备接收虚拟机监视器发出的创建一个镜像源(si0)的请求命令并分配一个唯一的镜像ID(sid0);
所述存储设备接收虚拟机监视器发送的基于镜像源(sid0)为虚拟机(VM0)创建第一队列(VF0)的命令,分配虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个关联镜像源(sid0)的差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
所述存储设备接收虚拟机(VM0)发送给目的虚拟功能队列的命令,查找对应的差分卷,并对所述差分卷执行相应的操作。
本发明还提供一种基于SR-IOV的链接克隆的系统,包括存储设备和主机,其中:
所述存储设备包括存储介质和存储控制器,所述存储控制器分别连接主机和存储介质;
所述存储控制器包括物理功能以及与所述物理功能关联的一个或者多个虚拟功能,所述物理功能与所述虚拟机监视器进行直接通信,每个所述虚拟功能分别与一个所述虚拟机进行直接通信;
所述存储设备用于执行:
接收并执行所述虚拟机监视器的初始化命令;
接收并完成所述虚拟机监视器发送的数据源镜像(S0)写入命令;
所述存储设备接收虚拟机监视器发出的创建一个镜像源(si0)的请求命令并分配一个唯一的镜像ID(sid0);
所述存储设备接收虚拟机监视器发送的基于镜像源(sid0)为虚拟机(VM0)创建第一队列(VF0)的命令,分配虚拟功能(VF)相应的第一队列(VF0)的队列资源,为所述虚拟功能(VF)创建一个关联镜像源(sid0)的差分卷,并记录所述虚拟功能(VF)队列与差分卷的映射关系;
所述存储设备接收虚拟机(VM0)发送给目的虚拟功能队列的命令,查找对应的差分卷,并对所述差分卷执行相应的操作;
所述主机运行有虚拟机监视器以及一个或者多个虚拟机,并且所述主机用于执行所述的方法。
再一方面,本发明还提供一种基于SR-IOV的链接克隆的系统,包括:
第一模块,用于执行虚拟机监视器通过物理功能驱动模块在存储设备中创建基础镜像;
第二模块,用于执行存储设备中的存储控制器记录所述基础镜像的逻辑空间范围,并为所述基础镜像产生一个对应的镜像ID标识;
第三模块,用于执行所述虚拟机监视器发送为虚拟机(VM0)创建链接克隆镜像的请求命令;
第四模块,用于执行所述存储控制器向所述虚拟机(VM0)分配虚拟功能资源,并创建所述克隆镜像的差分镜像,且维护相应的映射关系;
第五模块,用于执行所述存储控制器接收虚拟机(VM0)发送给目的虚拟功能的命令,查找对应的差分镜像,并对所述差分镜像执行相应的操作。
参照图2,是本发明一实施例的基于SR-IOV SSD的虚拟化平台示意图。虚拟机监视器(VMM)运行以后,加载SSD的PF驱动,对该SSD进行配置管理。
VMM首先通过PF驱动为数据源镜像创建存储空间,SSD控制器收到VMM的请求后为VMM分配一个对应大小的存储空间,记录该空间的逻辑地址范围,并为该存储空间产生一个唯一的镜像ID si0。VMM通过PF驱动查询获得该镜像ID。VMM通过PF驱动把数据源镜像写入所分配的存储空间。
VMM通过PF驱动为虚拟机VM0在PCIE SSD设备上创建一个VF0队列,并指定该VF队列绑定的镜像源为si0。SSD设备收到VMM的创建VF队列命令后,分配相应的VF队列资源VF0,并基于镜像源ID si0,为该VF创建一个差分卷,并记录该VF队列与差分卷的映射关系。当VF队列创建成功以后,VMM为虚拟机VM0分配相应的DMA以及中断资源。
VM0启动后,基于VF驱动通过队列VF0对该SSD设备执行相应的IO操作:
VM0通过VF驱动向该SSD设备进行IO读操作,SSD设备通过VF0队列收到该读IO请求,通过查询VF队列和差分卷的映射关系获得对应差分卷的信息。
如果该读IO请求的数据区域没有被改写过,则让直接从镜像源si0的相应位置读取该数据;
如果该读IO请求的数据区域被改写过(标记为脏),则让通过差分镜像获取该数据新的逻辑地址,从该逻辑地址读取该数据。
VM0通过VF驱动向该SSD设备进行IO写操作,SSD设备通过VF0队列收到该写IO请求,通过查询VF队列和差分卷的映射关系获得对应差分卷的信息。
如果该写IO请求的数据区域没有被改写过,则分配一个新的数据空间,从对应内存读取数据,完成该IO写操作,并且在差分卷中标记该区域为脏并记录新分配的逻辑地址;
如果该写IO请求的数据区域被改写过(标记为脏),则让通过差分卷获取该数据新的逻辑地址,把新的数据写到该逻辑区域。
本发明所述方法的一实施例的实施步骤为:
当VMM启动以后,加载PCIe SSD的PF驱动模块,主要完成该SR-IOV SSD硬件的探测和初始化。PF驱动拥有对该SSD设备的控制权,完成SR-IOV的设备探测、初始化根条目表、初始化上下文条目表、初始化IOTLB和初始化SR-IOV设备,分配MMIO(Memory Mapped IO)资源等工作。
SSD设备通过PF驱动收到VMM的初始化命令后,执行相应的初始化工作,通过闪存转换层将FLASH芯片映射成单一的逻辑地址空间,并初始化镜像管理,队列资源映射等模块。
VMM通过PF驱动,把数据源镜像S0写入SSD设备。SSD设备从PF队列收到VMM的写入命令后,完成该数据镜像的数据写入工作。当数据写入成功后,VMM获取并记录该数据镜像的LBA地址范围LBAs0-LBAe0。
VMM通过PF驱动发送命令请求SSD设备创建一个镜像源si0,该镜像源的LBA地址范围为LBAs0-LBAe0。SSD控制器收到该请求后通过镜像管理模块分配一个唯一的镜像IDsid0,并记录该镜像源的LBA地址范围LBAs0-LBAe0(其中LBA地址范围为VMM通过PF驱动查询到的逻辑地址范围,如果PF查询到的LBA地址和SSD控制器管理的逻辑地址并不是完全相同,则需要进行相应的映射转换)。VMM通过命令查询(或响应返回),获得该镜像源ID sid0。
VMM通过PF驱动为虚拟机VM0在PCIE SSD设备上创建一个VF0队列,并指定该VF队列绑定的镜像源为sid0。SSD设备收到VMM的创建VF队列命令后,分配相应的VF队列资源VF0,并基于镜像源ID si0,为该VF创建一个差分卷,并记录该VF队列与差分卷的映射关系。当VF队列创建成功以后,VMM为虚拟机VM0分配相应的DMA内存空间以及中断资源,并调用IOMMU完成相关的资源重映射(ATS)。
VM0加载并初始化VF驱动,并通过驱动配置相应的DMA内存资源。
当VM0通过VF驱动发送IO读命令给SSD设备,VF驱动把IO操作相关数据写入相应DMA内存空间,SSD设备通过VF0队列收到该读IO请求,通过队列映射&调度模块查询VF队列和差分卷的映射关系,并通过差分镜像管理模块获得对应差分卷的信息。如果该读IO请求的数据区域没有被改写过,则让直接从镜像源si0的相应位置读取该数据;如果该读IO请求的数据区域被改写过(标记为脏),则通过差分镜像管理模块获取该数据新的逻辑地址,并从该逻辑地址读取该数据。SSD控制器读取该数据并发送该IO请求的响应,并根据VM0的VF驱动分配的DMA内存地址(GPA内存地址),发起一次DMA操作,把相应的数据DMA到指定内存空间。IOMMU设备根据VMM配置的内存映射关系,把该DMA地址转换为对应的HPA内存地址。
当DMA操作完成以后,SSD控制器产生一个操作完成中断,通知该DMA操作完成。VMM捕获到该中断信号以后,转发中断信号给VM0,通知VM0DMA操作完成。VM0收到中断信号以后从对应的DMA地址空间读取该IO请求的响应数据。
VM0通过VF驱动发送IO写命令给SSD设备,VF驱动把IO操作相关数据写入相应DMA内存空间,SSD设备通过VF0队列收到该写IO请求,通过队列映射&调度模块查询VF队列和差分卷的映射关系,并通过差分镜像管理模块获得对应差分卷的信息。
如果该读IO请求的数据区域没有被改写过,则重新分配一个新的数据空间,从DMA内存空间读取该IO写数据,并基于新分配的数据空间完成该IO写操作,并且在差分卷中标记该区域为脏并记录新分配的逻辑地址;
如果该写IO请求的数据区域被改写过(标记为脏),则通过差分卷获取该数据新的逻辑地址,从DMA内存空间读取该IO写数据,并基于新的逻辑地址完成该IO写操作。
当IO写操作完成以后,SSD控制器产生一个操作完成中断,通知该IO写操作完成。VMM捕获到该中断信号以后,转发中断信号给VM0,通知VM0写IO操作完成。
当VM0需要重置VF驱动、获取SSD的状态信息时,需要通过和PF通讯访问SSD设备一些相关的全局寄存器。一种可行的解决方案是利用邮箱&门铃机制。VM0通过VF驱动把相应的请求命令放入SSD设备对应的邮箱空间,并触发SSD设备上的门铃中断,PF收到门铃中断以后,从对应邮箱空间获取请求命令,完成相应操作以后(例如查询厂商信息,SSD设备的smart信息),把响应数据放入对应邮箱,并通过门铃触发中断,通知VM0。VM0收到中断以后从对应邮箱获取该请求的响应信息。
参照图3,为本发明结合SAS HBA来实现链接克隆的硬件卸载一实施例。SAS HBA可以看作一种磁盘扩展卡,通过SAS HBA卡可以连接多个SAS磁盘,避免了服务器主板连接磁盘的端口个数和端口类型限制,同时SAS HBA卡一般具有一定的硬件/软件RAID功能,可以把磁盘以RAID方式组合,对服务器呈现出一个或者多个虚拟磁盘。
SAS HBA通过配置命令,对连接的磁盘,创建一个或者多个RAID镜像盘(R0、R1)。VMM首先通过PF驱动获取RAID镜像盘列表,并基于RAID镜像盘完成存储空间、文件系统的初始化工作。VMM通过PF驱动,把数据源镜像S0写入对应存储空间。SAS HBA设备从PF队列收到VMM的写入命令后,完成该数据镜像的数据写入工作。当数据写入成功后,VMM获取并记录该数据镜像的LBA地址范围LBAs0-LBAe0以及关联的RAID镜像盘R0。
VMM通过PF驱动发送命令请求SAS HBA设备创建一个镜像源si0,该镜像源的LBA地址范围为LBAs0-LBAe0,RAID镜像盘为R0。SAS HBA控制器收到该请求后通过镜像管理模块分配一个唯一的镜像ID sid0,并记录该镜像源的LBA地址范围LBAs0-LBAe0以及关联的RAID镜像盘为R0。VMM通过PF驱动查询获得该镜像ID。
VMM通过PF驱动为虚拟机VM0在SAS HBA设备上创建一个VF0队列,并指定该VF队列绑定的镜像源为si0。SAS HBA设备收到VMM的创建VF队列命令后,分配相应的VF队列资源VF0,并基于镜像源ID si0,为该VF创建一个差分卷,并记录该VF队列与差分卷的映射关系。当VF队列创建成功以后,VMM为虚拟机VM0分配相应的DMA以及中断资源。
VM0启动后,基于VF驱动通过队列VF0对该SAS HBA设备执行相应的IO操作:
VM0通过VF驱动向该SAS HBA设备进行IO读操作,SAS HBA设备通过VF0队列收到该读IO请求,通过查询VF队列和差分卷的映射关系获得对应差分卷的信息。
如果该读IO请求的数据区域没有被改写过,则让直接从镜像源si0的相应位置读取该数据;
如果该读IO请求的数据区域被改写过(标记为脏),则让通过差分镜像获取该数据新的逻辑地址,从该逻辑地址读取该数据。
VM0通过VF驱动向该SSD设备进行IO写操作,SAS HBA设备通过VF0队列收到该写IO请求,通过查询VF队列和差分卷的映射关系获得对应差分卷的信息。
如果该写IO请求的数据区域没有被改写过,则分配一个新的数据空间,从对应内存读取数据,完成该IO写操作,并且在差分卷中标记该区域为脏并记录新分配的逻辑地址;
如果该写IO请求的数据区域被改写过(标记为脏),则让通过差分卷获取该数据新的逻辑地址,把新的数据写到该逻辑区域。
本发明与具体的存储介质是否为SSD无关,所以理论上可以用于任何支持PCIE连接的存储设备,适用于在虚拟化环境,通过PCIE连接的存储设备,以硬件offload的形式实现链接克隆。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。