CN116401020A - Kvm虚拟机i/o过滤框架实现方法、***及存储介质 - Google Patents
Kvm虚拟机i/o过滤框架实现方法、***及存储介质 Download PDFInfo
- Publication number
- CN116401020A CN116401020A CN202310666900.9A CN202310666900A CN116401020A CN 116401020 A CN116401020 A CN 116401020A CN 202310666900 A CN202310666900 A CN 202310666900A CN 116401020 A CN116401020 A CN 116401020A
- Authority
- CN
- China
- Prior art keywords
- filter
- virtual machine
- framework
- qemu
- kvm virtual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 53
- 238000001914 filtration Methods 0.000 claims abstract description 57
- 230000006870 function Effects 0.000 claims description 101
- 230000015654 memory Effects 0.000 claims description 48
- 230000008569 process Effects 0.000 claims description 20
- 238000006243 chemical reaction Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 3
- 230000000977 initiatory effect Effects 0.000 claims 1
- 238000009434 installation Methods 0.000 claims 1
- 238000010586 diagram Methods 0.000 description 8
- 239000000243 solution Substances 0.000 description 7
- 238000013461 design Methods 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 3
- 239000013598 vector Substances 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000002715 modification method Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45562—Creating, deleting, cloning virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45575—Starting, stopping, suspending or resuming virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及一种KVM虚拟机I/O过滤框架实现方法、***及存储介质。所述方法包括:搭建I/O过滤框架步骤、启动参数判断步骤、注册I/O过滤器步骤、生成raw格式磁盘镜像文件步骤、截获I/O请求步骤、调用API接口步骤。所述***包括:搭建I/O过滤框架模块、I/O过滤框架启动判断模块、生成raw格式磁盘镜像文件模块、截获I/O请求模块、调用API接口模块。本发明通过修改QEMU源代码在QEMU模拟的KVM虚拟机I/O堆栈中搭建一个I/O过滤框架,该框架能够截获并保存虚拟机的I/O请求,三方开发者可以通过调用框架的API接口开发特定逻辑的I/O过滤器,提高了KVM虚拟机I/O数据处理的灵活性。
Description
技术领域
本发明属于计算机软件开发领域,涉及一种KVM虚拟机I/O过滤框架实现方法、***及存储介质。
背景技术
近十年来,以虚拟化技术为核心的云计算技术得到了广泛的应用和发展,其中KVM(Kernel-based Virtual Machine)虚拟化技术是当下最受欢迎的开源虚拟化技术。QEMU(Quick Emulator)是一种模拟软件,对虚拟机的所有硬件操作都有完整的模拟方案,其中包括了I/O虚拟化,而KVM只实现了CPU虚拟化和内存虚拟化,故KVM一般和QEMU结合使用。随着数据安全法的出台,数据安全越来越得到人们的重视。在云计算领域中,数据主要来源于KVM虚拟机,所以如何以更安全和更高效的方式管理KVM虚拟机I/O数据是当下的热门研究问题。
目前,如何管理KVM虚拟机I/O数据只有外部方向的解决方案,该方向主要采取从外部进行内存注入从而修改虚拟机内存的方式来拦截I/O请求和不受支持的内核级方法拦截虚拟机I/O数据,但该方向比较冒进,安全风险较大,并且需要安装代理软件。针对虚拟机内部方向的解决方案,部分虚拟化厂商推出了自己的解决方案,比如VMware推出了VAIO(VMware vSphere APIs for I/O Filtering)方案,该方案是一组API(ApplicationProgramming Interface)接口,该接口用于在VMware vSphere环境中开发和部署I/O过滤器,以实现数据备份、数据加密和数据缓存等功能。另外,由于KVM和VMware架构完全不同,并且VMware的VAIO方案未开源,故VMware的VAIO方案并不适用于KVM虚拟机,针对KVM虚拟机的内部方向解决方案几乎是一片空白。
因此,如何在QEMU源码内部开发一个以更安全和更高效的方式管理KVM虚拟机I/O数据的I/O过滤框架是急需解决的技术问题。
发明内容
本发明为了解决上述背景技术中的技术问题,提供一种KVM虚拟机I/O过滤框架实现方法、***及存储介质,所述方案如下:
第一个方面,提供了一种KVM虚拟机I/O过滤框架实现方法,包括步骤:
通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间;
通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;
所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;
所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织;
所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
在其中一个实施例中,所述通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间步骤,包括:
编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
在其中一个实施例中,所述编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录的步骤,还包括:
所述I/O过滤框架源代码提供所述API接口,其中所述API接口为三方开发者提供控制KVM虚拟机I/O请求和磁盘文件的操作方法;
所述I/O过滤框架源代码针对KVM虚拟机的I/O请求数据采取自定义内存池和队列数据结构进行管理;
将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录。
在其中一个实施例中,所述通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间步骤,包括:
判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则做以下操作:
所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
在其中一个实施例中,所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件步骤,包括:
所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
第二个方面,还提供了一种KVM虚拟机I/O过滤框架***,所述***包括:
搭建I/O过滤框架模块,用于通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间;
I/O过滤框架启动判断模块,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;
生成raw格式磁盘镜像文件模块,用于所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;
截获I/O请求模块,用于所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织;
调用API接口模块,用于所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
在其中一个实施例中,所述搭建I/O过滤框架模块,包括:
添加I/O过滤框架源代码单元,用于编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
增加I/O过滤框架启动参数单元,用于在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
修改读写函数单元,用于在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
在其中一个实施例中,所述I/O过滤框架启动判断模块,包括:
启动参数判断单元,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则执行注册I/O过滤器单元和注册API接口地址单元;
注册I/O过滤器单元,用于所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
注册API接口地址单元,用于所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
在其中一个实施例中,所述生成raw格式磁盘镜像文件模块,包括:
创建外部快照单元,用于所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
磁盘格式转换单元,用于所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
第三个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述KVM虚拟机I/O过滤框架实现方法。
本发明的有益效果是:
1.本发明通过修改QEMU源代码暴露API接口给三方开发者,三方开发者可以通过调用该API接口截获I/O数据,与其他截获I/O的方法比较,本发明安全风险性较低;
2.本发明可以截获所有类型的磁盘文件的I/O数据,具有普遍性;
3.本发明不需要在宿主机和KVM虚拟机安装任何代理软件来截获I/O,实现了无代理;
4.本发明开发的I/O过滤框架灵活性高,三方开发者可以通过调用API接口实现自己的I/O控制逻辑,比如利用写I/O可以实现连续数据保护功能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中KVM虚拟机I/O过滤框架实现方法流程示意图。
图2为本发明实施例1中QEMU模拟的KVM虚拟机I/O堆栈图。
图3为本发明实施例1中加入I/O过滤框架后的KVM虚拟机I/O堆栈图。
图4为本发明实施例1中自定义内存池设计图。
图5为本发明实施例1中QEMU的I/O向量结构示意图。
图6为本发明实施例2中KVM虚拟机I/O过滤框架***结构图示意图。
图7为本发明实施例2中搭建I/O过滤框架模块结构示意图。
图8为本发明实施例2中I/O过滤框架启动判断模块结构示意图。
图9为本发明实施例2中生成raw格式磁盘镜像文件模块结构示意图。
附图中,各标号所代表的部件列表如下:
1001、搭建I/O过滤框架模块,1002、I/O过滤框架启动判断模块,1003、生成raw格式磁盘镜像文件模块,1004、截获I/O请求模块,1005、调用API接口模块,10011、添加I/O过滤框架源代码单元,10012、增加I/O过滤框架启动参数单元,10013、修改读写函数单元,10021、启动参数判断单元,10022、注册I/O过滤器单元,10023、注册API接口地址单元,10031、创建外部快照单元,10032、磁盘格式转换单元。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供的方法,可应用于KVM虚拟机I/O过滤框架所示的***架构中。
实施例1
在本实施例中,如图1所示,提供一种KVM虚拟机I/O过滤框架实现方法,该方法包括:
步骤S1. 通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间。
可选的,所述步骤S1,包括:
步骤S11. 编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
步骤S12.在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
步骤S13.在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
还可选的,所述步骤S11,还包括:
S111. 所述I/O过滤框架源代码提供所述API接口,其中所述API接口为三方开发者提供控制KVM虚拟机I/O请求和磁盘文件的操作方法;
S112.所述I/O过滤框架源代码针对KVM虚拟机的I/O请求数据采取自定义内存池和队列数据结构进行管理;
S113.将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录。
值得说明的是,QEMU是一个模拟软件,其中包括对KVM虚拟机的I/O模拟,其模拟的I/O堆栈如图2所示。首先,宿主机内核的KVM模块截获并转发KVM虚拟机的I/O请求到QEMU模拟的设备接口,常见的设备接口有virtio接口、ide接口和scsi接口等;其次,设备接口将I/O请求转发到QEMU模拟的后端块设备,QEMU针对该设备设计了一个结构体BlockBackend,该结构体与块设备类型无关,其对应的BlockBackend结构体变量为blk;再次,后端块设备将I/O请求转发到QEMU模拟的块设备驱动,QEMU针对该驱动设计了一个结构体BlockDriver,该结构体与块设备类型有关,比如raw格式的磁盘对应的BlockDriver结构体变量为bdrv_raw,若是本地块设备就在QEMU模拟的线程池异步执行I/O操作,若是网络块设备,比如ceph的rbd块设备,就通过特定的协议和读写接口执行I/O操作;最后,QEMU通过调用***读写函数读写磁盘文件。
还值得说明的是,若在上述模拟的I/O堆栈中搭建一个I/O过滤框架,只有选择在设备接口层次和后端块设备层次之间,加入I/O过滤框架之后的KVM虚拟机I/O堆栈如图3所示。若选择KVM虚拟机层次和KVM模块层次之间,需要修改每一台KVM虚拟机操作***内核,代价较大;若选择KVM模块层次和设备接口层次之间,需要修改宿主机的KVM模块,该修改方法会涉及宿主机内核,风险较大;若选择后端块设备层次和块设备驱动层次之间,需要对含有元数据的磁盘文件进行I/O请求偏移量转换,比如qcow2格式的磁盘文件;若选择块设备驱动层次和读写磁盘文件层次之间,则会出现无法拦截到网络块设备的I/O请求的情况。
本发明设计的I/O过滤框架命名为QEMU I/O Filter Framework,简称是QIOF。I/O过滤框架将虚拟机的I/O请求封装成自定义的QIOF_DiskIO结构体,将虚拟机磁盘文件封装成原QEMU源码中的BlockDriverState结构体,其中QIOF_DiskIO包含的数据元素如表1所示。
表1 QIOF_DiskIO结构体信息
偏移量 | 名称 | 含义 |
0-7byte | timestamp | 时间戳 |
8-11byte | type | I/O操作类型:读或者写 |
12-15byte | fd | 本地磁盘文件描述符 |
16-23byte | offset | I/O请求偏移量 |
24-31byte | bytes | I/O请求长度 |
32-35byte | buf | 写I/O请求内容 |
I/O过滤框架针对磁盘文件操作和I/O请求操作分别设计了对应的API接口,其含义如表2所示。
表2 API接口函数
操作类型 | 函数名 | 含义 |
磁盘 | QIOF_Img_Snapshot | 创建外部快照 |
磁盘 | QIOF_Img_ConvertToRaw | 转换成raw格式磁盘文件 |
磁盘 | QIOF_Img_Open | 打开磁盘文件 |
磁盘 | QIOF_Img_Close | 关闭磁盘文件 |
磁盘 | QIOF_Img_Create | 创建磁盘文件 |
磁盘 | QIOF_Img_GetInfo | 获取磁盘文件信息 |
磁盘 | QIOF_Img_GetMirrorFile | 获取磁盘镜像文件 |
读I/O请求 | QIOF_GetReadIO | 获取读I/O请求 |
写I/O请求 | QIOF_GetWriteIO | 获取写I/O请求 |
读I/O请求 | QIOF_GetReadQueueSize | 获取读请求队列大小 |
写I/O请求 | QIOF_GetWriteQueueSize | 获取写请求队列大小 |
读I/O请求 | QIOF_DeleteReadIO | 删除读I/O请求 |
写I/O请求 | QIOF_DeleteWriteIO | 删除写I/O请求 |
I/O过滤框架使用自定义的内存池来存放I/O请求,内存池设计如图4所示。因为框架将I/O请求封装成QIOF_DiskIO结构体,该结构体大小固定为36字节,并且框架在运行过程中需要频繁分配和释放内存来存放和销毁该结构体,若采取自定义内存池方式,则只需要在框架初始化的时候预分配一块足够大的内存,之后框架重复使用内存池中的内存来存放截获的I/O请求,该方式大大减少了内存分配和释放的开销,提高了内存分配效率,减少了内存碎片。内存池分为三部分:第一部分为一个内存池结构体mem_pool,通过该结构体可以控制整个内存池;第二部分为内存块映射表,该映射表反映了待分配内存块的使用情况,其中每一个表项为一个36字节大小的内存块的信息,表的大小等于待分配的内存块数量;第三个部分为待分配的内存块,该区域是实际上可供框架分配的内存区域。
在KVM虚拟机中,QEMU模拟的I/O设备都是块设备,每个块的大小为512字节,由于写IO请求数据内容大小不固定且大小都是以4096字节为单元,使用内存池并不能提高效率,故框架结合可用的***内存和磁盘来存放该数据内容,若框架运行过程中发现***内存无法满足,则将内存中的写I/O请求数据内容写入磁盘文件并释放内存,以此循环。
I/O过滤框架使用双向队列dequeue来管理内存池中的I/O请求,该队列采取双向链表来实现,并且只允许在队列尾部***数据。对于读I/O请求和写I/O请求,框架分别创建了读I/O请求队列和写I/O请求队列。
在设计好I/O过滤框架之后,需要对原QMEU源码中的后端块设备的读写函数进行修改,使得后端块设备在将I/O请求转发给块设备驱动之前调用框架的QIOF_blk_submit函数将I/O请求拷贝一份存放在框架的内存池,其中QIOF_blk_submit函数只是框架供QEMU内部使用的函数,并不是API接口。
为了便于理解,提供了一个操作实例:
本发明使用的QEMU版本为2.5.0,硬件使用x86_64架构。首先,在KVM虚拟机启动参数中加入I/O过滤框架启动参数,具体启动参数为:qemu-system-x86_64 -m 2048 -enable-kvm -drive file=test.img,format=raw,if=virtio -filter path=/usr/lib/libQIOF.so。其中,filter参数就是所述I/O过滤框架启动参数,I/O过滤器路径为/usr/lib/libQIOF.so。其次,框架进行必要的初始化。最后,在每一次I/O请求到达后端块设备之前,后端块设备的blk_aio_writev函数和blk_aio_readv函数将调用框架的QIOF_blk_submit函数将I/O请求拷贝一份存放在框架的内存池。
步骤S2. 通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则执行步骤S3。
步骤S3.所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间。
可选的,所述步骤S3,包括:
步骤S31.所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
步骤S32.所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
值得说明的是,KVM虚拟机只能运行在Linux环境中,故所述I/O过滤器实际上为Linux下的so动态链接库文件,对于该文件,在Linux中可以在目标QEMU进程中直接调用dlopen函数将其加载到目标QEMU进程的地址空间。
还值得说明的是,在加载完I/O过滤器之后,还需要唤醒该I/O过滤器。首先,I/O过滤框架需要将API接口地址传递给I/O过滤器。一般来说,若一个so动态链接库文件需要调用其加载程序中实现的函数,无法直接通过引用头文件调用加载程序中的函数,而需要加载程序主动将函数地址传递给so动态链接库文件,故在I/O过滤器中,必须定义一个注册API接口地址函数QIOF_register,参数为函数指针和函数名。框架通过调用dlsym函数获取I/O过滤器中的QIOF_register函数地址,之后反复调用QIOF_register函数将表2中所有的API接口地址传递给I/O过滤器。最后,框架会再次调用dlsym函数获取I/O过滤器的主函数main地址,然后创建一个线程去运行该main函数。
步骤S4. 所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件。
可选的,所述步骤S4,包括:
步骤S41.所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
步骤S42.所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
可以理解的是,磁盘镜像文件选择raw格式的原因为raw格式的磁盘文件无任何元数据,不需要进行偏移量转换,具有很好的读写性能。若用户在过滤器中想实现虚拟机的连续数据保护,那么该raw格式的磁盘镜像文件可作为同步文件使用。
生成raw格式的磁盘镜像文件需要消耗一定的时间,为了不影响KVM虚拟机的运行,框架为该操作创建一个线程,该线程执行raw格式的磁盘镜像文件生成过程。
步骤S5. 所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织。
在QEMU中,I/O请求的数据内容并没有存放在一块连续的内存中,相反,QEMU使用I/O向量来存放I/O数据,换句话说,也就是把KVM虚拟机的I/O数据拆分成4096字节大小的数据块,并存放在不连续的内存中,这些不连续的内存使用iovec结构体进行组织管理,最后将这些iovec结构体封装进QEMUIOVector结构体,两个结构体的联系如图5所示。QEMUIOVector结构体中的iov指针指向iovec结构体数组的第一个元素,每一个iovec数组元素的iov_base指针指向该数据块所在的内存地址,iov_len字段为该数据块的大小。QEMUIOVector结构体中的niov字段为拆分后的数据块数量,nalloc字段为已经分配的数据块数量,size字段为所有数据块的大小。在I/O过滤框架中,必须将上述I/O向量转换成连续的内存,框架通过遍历iovec结构体数组将拆分后的数据块依次进行拷贝拼接。一般来说,上述拷贝拼接操作只针对写I/O请求。
步骤S6. 所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
I/O过滤器和I/O过滤框架对读I/O请求队列和写I/O请求队列的操作采取了操作***的生产者消费者模型,在源代码内部使用互斥量mutex和条件变量cond实现。
为了便于理解,提供了一个操作实例:
若I/O过滤器想要实现连续数据保护功能,需要调用磁盘类型和写I/O请求类型的API接口。首先,调用QIOF_Img_GetMirrorFile函数获取同步磁盘镜像文件,经过压缩后通过网络传输到远程备份服务器;其次,不断调用QIOF_GetWriteIO函数获取写I/O请求,然后将写I/O请求中的数据内容加上时间戳通过网络传输到远程备份服务器。
本实施例的技术方案,通过修改QEMU源代码添加一个自定义的I/O过滤框架代码,三方开发者可以通过调用框架暴露的API接口实现自己的I/O过滤器,具有很好的灵活性。
实施例2
在本实施例中,如图6所示,提供了一种KVM虚拟机I/O过滤框架***,该***包括:
搭建I/O过滤框架模块1001,用于通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间;
I/O过滤框架启动判断模块1002,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;
生成raw格式磁盘镜像文件模块1003,用于所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;
截获I/O请求模块1004,用于所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织;
调用API接口模块1005,用于所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
可选的,如图7所示,所述搭建I/O过滤框架模块1001,包括:
添加I/O过滤框架源代码单元10011,用于编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
增加I/O过滤框架启动参数单元10012,用于在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
修改读写函数单元10013,用于在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
可选的,如图8所示,所述I/O过滤框架启动判断模块1002,包括:
启动参数判断单元10021,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则执行注册I/O过滤器单元和注册API接口地址单元;
注册I/O过滤器单元10022,用于所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
注册API接口地址单元10023,用于所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
可选的,如图9所示,所述生成raw格式磁盘镜像文件模块1003,包括:
创建外部快照单元10031,用于所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
磁盘格式转换单元10032,用于所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
本实施例的技术方案,搭建I/O过滤框架模块1001,用于通过修改QEMU源代码搭建有API接口的I/O过滤框架;I/O过滤框架启动判断模块1002,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;生成raw格式磁盘镜像文件模块1003,用于所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;截获I/O请求模块1004,用于所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池;调用API接口模块1005,用于所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。本实施例中的I/O过滤框架不需要通过在虚拟机和宿主机安装任何代理软件来截获I/O,也不需要通过内核级方法和内存注入方法截获I/O,具有无代理性和极低的风险性。
实施例3
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现实施例1所述KVM虚拟机I/O过滤框架实现方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种KVM虚拟机I/O过滤框架实现方法,其特征在于,所述方法包括步骤:
通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间;
通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;
所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;
所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织;
所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
2.根据权利要求1所述KVM虚拟机I/O过滤框架实现方法,其特征在于,所述通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间步骤,包括:
编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
3.根据权利要求2所述KVM虚拟机I/O过滤框架实现方法,其特征在于,所述编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录的步骤,还包括:
所述I/O过滤框架源代码提供所述API接口,其中所述API接口为三方开发者提供控制KVM虚拟机I/O请求和磁盘文件的操作方法;
所述I/O过滤框架源代码针对KVM虚拟机的I/O请求数据采取自定义内存池和队列数据结构进行管理;
将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录。
4.根据权利要求1所述KVM虚拟机I/O过滤框架实现方法,其特征在于,所述通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间步骤,包括:
判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则做以下操作:
所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
5.根据权利要求1所述KVM虚拟机I/O过滤框架实现方法,其特征在于,所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件步骤,包括:
所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
6.一种KVM虚拟机I/O过滤框架***,其特征在于,所述***包括:
搭建I/O过滤框架模块,用于通过修改QEMU源代码搭建有API接口的I/O过滤框架,其中所述I/O过滤框架的搭建位置选择在QEMU模拟的KVM虚拟机I/O堆栈中的设备接口层次和后端块设备层次之间;
I/O过滤框架启动判断模块,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则所述I/O过滤框架通过加载动态链接库的方式注册三方开发者自定义的I/O过滤器到目标QEMU进程的地址空间;
生成raw格式磁盘镜像文件模块,用于所述I/O过滤框架通过调用原QEMU源码的函数生成raw格式的磁盘镜像文件;
截获I/O请求模块,用于所述I/O过滤框架在所述后端块设备层次收到I/O请求之前截获KVM虚拟机的I/O请求,并拷贝一份所述I/O请求存放在自定义的内存池,其中所述I/O请求使用队列数据结构进行组织;
调用API接口模块,用于所述I/O过滤器通过调用所述I/O过滤框架的API接口对KVM虚拟机的I/O请求和磁盘文件进行操作。
7.根据权利要求6所述的KVM虚拟机I/O过滤框架***,其特征在于,搭建I/O过滤框架模块,包括:
添加I/O过滤框架源代码单元,用于编写I/O过滤框架源代码,将所述I/O过滤框架源代码加入所述QEMU源代码根目录下的I/O过滤框架目录;
增加I/O过滤框架启动参数单元,用于在所述QEMU源代码中增加一个KVM虚拟机的I/O过滤框架启动参数,所述I/O过滤框架启动参数的内容为I/O过滤器所在路径;
修改读写函数单元,用于在所述QEMU源代码中修改所述后端块设备的读写函数,所述读写函数包括:blk_aio_readv和blk_aio_writev。
8.根据权利要求6所述的KVM虚拟机I/O过滤框架***,其特征在于,I/O过滤框架启动判断模块,包括:
启动参数判断单元,用于通过KVM虚拟机启动参数判断用户是否选择在启动KVM虚拟机时开启所述I/O过滤框架,若不是,则不做任何操作;若是,则执行注册I/O过滤器单元和注册API接口地址单元;
注册I/O过滤器单元,用于所述I/O过滤框架调用dlopen函数将所述I/O过滤器注册到目标QEMU进程的地址空间;
注册API接口地址单元,用于所述I/O过滤框架通过调用dlsym函数调用所述I/O过滤器的注册API接口地址函数和主函数,其中所述注册API接口地址函数用于将所述I/O过滤框架的API接口地址传递给所述I/O过滤器,其中所述主函数用于启动所述I/O过滤器的入口程序代码。
9.根据权利要求6所述的KVM虚拟机I/O过滤框架***,其特征在于,生成raw格式磁盘文件模块,包括:
创建外部快照单元,用于所述I/O过滤框架调用原QEMU源码的hmp_snapshot_blkdev函数对KVM虚拟机创建一个外部快照,使得原磁盘文件变为可读状态,其中所述外部快照采取写时拷贝方式;
磁盘格式转换单元,用于所述I/O过滤框架调用原QEMU源码的img_convert函数对所述原磁盘文件进行raw格式转换,得到raw格式的磁盘镜像文件。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5任一所述的KVM虚拟机I/O过滤框架实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310666900.9A CN116401020B (zh) | 2023-06-07 | 2023-06-07 | Kvm虚拟机i/o过滤框架实现方法、***及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310666900.9A CN116401020B (zh) | 2023-06-07 | 2023-06-07 | Kvm虚拟机i/o过滤框架实现方法、***及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116401020A true CN116401020A (zh) | 2023-07-07 |
CN116401020B CN116401020B (zh) | 2023-08-11 |
Family
ID=87009078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310666900.9A Active CN116401020B (zh) | 2023-06-07 | 2023-06-07 | Kvm虚拟机i/o过滤框架实现方法、***及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116401020B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101465863A (zh) * | 2009-01-14 | 2009-06-24 | 北京航空航天大学 | 一种内核虚拟机环境下高效网络i/o的实现方法 |
CN101894047A (zh) * | 2010-06-24 | 2010-11-24 | 北京航空航天大学 | 一种基于内核虚拟机调度策略的实现方法 |
CN101976200A (zh) * | 2010-10-15 | 2011-02-16 | 浙江大学 | 在虚拟机监控器外进行输入输出设备虚拟化的虚拟机*** |
US20110296411A1 (en) * | 2010-05-25 | 2011-12-01 | Transoft | Kernel Bus System to Build Virtual Machine Monitor and the Performance Service Framework and Method Therefor |
US20120304171A1 (en) * | 2011-05-23 | 2012-11-29 | IO Turbine, Inc. | Managing Data Input/Output Operations |
WO2017121273A1 (zh) * | 2016-01-12 | 2017-07-20 | 阿里巴巴集团控股有限公司 | 一种kvm虚拟化下处理i/o请求的方法和装置 |
CN111124620A (zh) * | 2019-12-26 | 2020-05-08 | 航天壹进制(南京)数据科技有限公司 | 一种用于io过滤的应用程序编程接口的持续数据保护方法 |
CN112532701A (zh) * | 2020-11-19 | 2021-03-19 | 苏州浪潮智能科技有限公司 | 一种基于模拟处理器qemu的分布式加速存储方法及*** |
CN114416431A (zh) * | 2022-03-28 | 2022-04-29 | 成都云祺科技有限公司 | 基于kvm的无代理持续性数据保护方法、***及存储介质 |
CN116149800A (zh) * | 2023-04-18 | 2023-05-23 | 成都云祺科技有限公司 | Kvm虚拟机应用层无代理cdp方法、***及存储介质 |
-
2023
- 2023-06-07 CN CN202310666900.9A patent/CN116401020B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101465863A (zh) * | 2009-01-14 | 2009-06-24 | 北京航空航天大学 | 一种内核虚拟机环境下高效网络i/o的实现方法 |
US20110296411A1 (en) * | 2010-05-25 | 2011-12-01 | Transoft | Kernel Bus System to Build Virtual Machine Monitor and the Performance Service Framework and Method Therefor |
CN101894047A (zh) * | 2010-06-24 | 2010-11-24 | 北京航空航天大学 | 一种基于内核虚拟机调度策略的实现方法 |
CN101976200A (zh) * | 2010-10-15 | 2011-02-16 | 浙江大学 | 在虚拟机监控器外进行输入输出设备虚拟化的虚拟机*** |
US20120304171A1 (en) * | 2011-05-23 | 2012-11-29 | IO Turbine, Inc. | Managing Data Input/Output Operations |
WO2017121273A1 (zh) * | 2016-01-12 | 2017-07-20 | 阿里巴巴集团控股有限公司 | 一种kvm虚拟化下处理i/o请求的方法和装置 |
CN111124620A (zh) * | 2019-12-26 | 2020-05-08 | 航天壹进制(南京)数据科技有限公司 | 一种用于io过滤的应用程序编程接口的持续数据保护方法 |
CN112532701A (zh) * | 2020-11-19 | 2021-03-19 | 苏州浪潮智能科技有限公司 | 一种基于模拟处理器qemu的分布式加速存储方法及*** |
CN114416431A (zh) * | 2022-03-28 | 2022-04-29 | 成都云祺科技有限公司 | 基于kvm的无代理持续性数据保护方法、***及存储介质 |
CN116149800A (zh) * | 2023-04-18 | 2023-05-23 | 成都云祺科技有限公司 | Kvm虚拟机应用层无代理cdp方法、***及存储介质 |
Non-Patent Citations (3)
Title |
---|
JUNYA OGASAWARA等: "Nioh:Hardening The Hypervisor by Filtering Illegal I/O Requests to Virtual Devices", 《ACSAC‘17:PROCEEDINGS OF THE 33RD ANNUAL COMPUTER SECURITY APPLICATIONS CONFERENCE》, pages 542 - 552 * |
丁圣阁等: "半虚拟化I/O模型的KVM虚拟机域间通信优化方法", 《计算机科学与探索》, vol. 5, no. 12, pages 1114 - 1120 * |
龙星澧等: "基于KVM的持续性数据保护设计与研究", 《现代计算机》, vol. 28, no. 07, pages 65 - 69 * |
Also Published As
Publication number | Publication date |
---|---|
CN116401020B (zh) | 2023-08-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11543983B2 (en) | System and method for providing enhancements of block-level storage | |
US10481984B1 (en) | Backup of virtual machines from storage snapshot | |
KR102236522B1 (ko) | 정보를 처리하기 위한 방법 및 장치 | |
US8074231B2 (en) | Configuration of isolated extensions and device drivers | |
US9235474B1 (en) | Systems and methods for maintaining a virtual failover volume of a target computing system | |
US9003412B1 (en) | Performing identified repeatable computations in a changing computing environment | |
US11010355B2 (en) | Layer-based file access method and apparatus of virtualization instance | |
US10228993B2 (en) | Data dump for a memory in a data processing system | |
US11061695B2 (en) | Unikernel provisioning | |
JP2022545012A (ja) | メモリー・アパーチャのフラッシュ・オーダーを使用したデーター保存 | |
WO2012010419A1 (en) | A string cache file for optimizing memory usage in a java virtual machine | |
WO2022148390A1 (zh) | 一种在区块链中部署、更新、调用智能合约的方法 | |
US7200705B2 (en) | Method of checkpointing state of virtual memory for process | |
US7552434B2 (en) | Method of performing kernel task upon initial execution of process at user level | |
US20170242602A1 (en) | Data processing method | |
US10185573B2 (en) | Caching based operating system installation | |
US7546600B2 (en) | Method of assigning virtual process identifier to process within process domain | |
Srouji et al. | A transparent checkpoint facility on NT | |
WO2022110775A1 (zh) | 一种无服务容器启动方法及相关设备 | |
WO2010027665A2 (en) | Type descriptor management for frozen objects | |
CN116401020B (zh) | Kvm虚拟机i/o过滤框架实现方法、***及存储介质 | |
CN112583794B (zh) | 接口调用方法、装置、计算机设备和存储介质 | |
Caldwell et al. | Fluidmem: Memory as a service for the datacenter | |
US20190213045A1 (en) | Method and electronic device for executing data reading/writing in volume migration | |
US11526358B2 (en) | Deterministic execution replay for multicore systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |