CN101859263B - 一种支持在线迁移的虚拟机间快速通信方法 - Google Patents

一种支持在线迁移的虚拟机间快速通信方法 Download PDF

Info

Publication number
CN101859263B
CN101859263B CN2010101989709A CN201010198970A CN101859263B CN 101859263 B CN101859263 B CN 101859263B CN 2010101989709 A CN2010101989709 A CN 2010101989709A CN 201010198970 A CN201010198970 A CN 201010198970A CN 101859263 B CN101859263 B CN 101859263B
Authority
CN
China
Prior art keywords
submodule
data
migration
vmm
management
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.)
Expired - Fee Related
Application number
CN2010101989709A
Other languages
English (en)
Other versions
CN101859263A (zh
Inventor
任怡
刘晓建
吴庆波
戴华东
管剑波
谭郁松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National University of Defense Technology
Original Assignee
National University of Defense Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by National University of Defense Technology filed Critical National University of Defense Technology
Priority to CN2010101989709A priority Critical patent/CN101859263B/zh
Publication of CN101859263A publication Critical patent/CN101859263A/zh
Application granted granted Critical
Publication of CN101859263B publication Critical patent/CN101859263B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种支持在线迁移的虚拟机间快速通信方法,方案是构造支持VM迁移的基于共享内存机制的通信加速内核模块,在该模块内部添加初始化、***调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持六个子模块;扩展VMM功能,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块;由VMM和VM组成一个虚拟机***,采用虚拟机***对VM间通信进行加速:对VM进行组管理,构建VM间通信加速和***调用分析所需的软件环境,旁路掉与网络操作无关的***调用,选择与网络操作有关的***调用分类进行处理,完成同一物理计算机上的VM间的基于共享内存的快速通信。本发明在Socket与TCP/IP层实现、对应用编程透明、支持虚拟机在线迁移。

Description

一种支持在线迁移的虚拟机间快速通信方法
技术领域
本发明涉及操作***领域中的虚拟机间通信方法,尤其是同一台物理计算机上基于共享内存的多个虚拟机间的通信方法。
背景技术
随着计算机和网络技术的快速发展,用户业务的种类持续增多、规模不断增大,为满足用户不断增长的需求,通常用户会购置更多的计算机来部署运行增加的业务;而与此同时,多核处理器的出现使得计算机的处理能力快速提高,于是往往导致计算机利用率降低、计算效能低下,且造成硬件资源和电能的浪费,出于管理和成本控制的考虑,需要减少计算机的数量。另一方面,传统的操作***环境中,各组成之间耦合度较大,某个部件的失效可能导致整个***的故障或崩溃,需要有效隔离业务运行环境以提高失效范围的可控性,从而提高***的安全性和可靠性。
为了提高计算机***的效能、安全和可靠性,出现了虚拟化方法,即通过虚拟机监控器VMM(Virtual Machine Monitor)软件对物理计算机的CPU(Central Processing Unit,中央处理单元)、内存和其它硬件设备进行虚拟化,在一台物理计算机上虚拟出多个虚拟机VM(Virtual Machine),每个VM都运行一个客户操作***(Guest OS),也就是在一台物理计算机上运行多个客户操作***,用于支持客户操作***运行的底层操作***称作宿主操作***(Host OS),VMM之上的各种操作***通称为域(Domain)。传统的VMM,如Xen,主要由中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块、在线迁移(Live Migration)子模块组成。
早期的虚拟机方法主要应用于大型机和服务器领域,用于提高物理硬件利用率、支持遗留***等。近年来,随着单机硬件性能的高速发展、对服务器整合、资源管理、降低能耗、安全隔离和高可用需求的日益迫切,虚拟机方法进入了一个迅速发展的阶段。使用虚拟机技术带来的一个显著优点就是可以通过VM的在线迁移来实现高效的负载均衡或容错恢复。在线迁移是指在不中断服务的前提下,将正在运行的VM从一台物理计算机移植到另一台物理计算机上。通过将VM从负载重的物理计算机在线迁移到负载轻的物理计算机,可实现整个***的负载均衡;通过将VM从出现故障的物理计算机在线迁移到正常运行的物理计算机,无需中断用户通信,即可实现零宕机时间容错恢复。传统的VMM通过在线迁移子模块来支持VM的在线迁移。
虚拟化技术在提高服务器资源整合能力、增强***安全性和可靠性的同时,也带来了性能上的折损。对于运行在虚拟机中的诸如Web服务、高性能Grid应用、事务处理、分布式图形支持等网络密集型应用程序而言,VM间的通信效率对于应用整体性能的提高至关重要。因此,优化VM间的通信效率十分必要,尤其是对于位于同一台物理计算机上的不同虚拟机间的通信,如果仍然采用跨物理计算机的虚拟机间通信方法,则数据传输路径偏长,不利于降低通信开销。
目前,位于同一台物理计算机上不同虚拟机间的通信方法分为两类,第一类方法为普通的网络通信,它是面向TCP/IP网络协议栈实现虚拟机间通信,其所有数据传输都经过TCP/IP协议和网卡驱动程序进行处理,增加了报文传输开销。随着虚拟化技术的发展,一台物理主机上部署多个VM已成为普遍现象,若仍然通过TCP/IP协议进行同一物理计算机上不同VM间的网络通信,则性能损失较大。于是出现了第二类方法,该类方法针对通信双方位于同一台物理计算机的特点,通过共享内存的方式实现VM之间的通信和信息交换。
第二类基于共享内存的通信方法的代表性工作包括虚拟机通信接口套接字VMCISocket(Virtual Machine Communication Interface Socket)、XenSocket、XWay、IVC(Inter Virtual Machine Communication)、MNNet和XenLoop。不同于第一类虚拟机间通信方法(第一类方法是将虚拟机VM_1中send_process进程的数据缓冲区通过VMM映射到一块物理内存,将发送的数据拷贝至该缓冲区,然后将该物理内存中的数据拷贝到虚拟机VM_2中recv_process进程映射的另一块物理内存中,最后拷贝至recv_process的用户空间数据缓冲区中,这其中要进行VM与VMM之间的多次切换),数据首先被拷贝到VM_1和VM_2之间建立的共享缓冲区中,接着VM_1通知VM_2有数据存放在共享内存中待读取,VM_2接到该通知后将数据从共享缓冲区中拷贝至VM_2的用户空间,然后通知VM_1数据传输结束,如果VM_1中发送进程由于共享缓冲区空间不足的原因处于睡眠状态,在它接收到该通知后将被唤醒。与第一类方法相比,第二类方法减少了数据的拷贝次数以及VM与VMM之间的切换次数,可有效减少VM间的通信开销。
按照实现层次、对应用编程是否透明、以及是否支持虚拟机的在线迁移,可分别对第二类方法的上述代表工作进行分类:
●IP层之下、Socket和TCP/IP层、应用层三个实现层次:MNet和XenLoop方法在IP层以下实现,实现复杂度较大;IVC方法通过修改应用层的MPI库实现,通用性较低;XenSocket和XWay方法则是在Socket、TCP/IP层实现。
●应用编程的透明性:应用编程透明使得程序开发和维护更为简单,IVC、VMCI和XenSocket方法引入了新的编程接口,对应用编程不透明;XWay、MNNet、XenLoop方法对应用编程透明。
●虚拟机在线迁移的支持:是否支持VM运行时的在线迁移是衡量虚拟机间快速通信机制的一个重要指标,VMCI、XenSocket、XWay和MNNet方法不支持虚拟机的在线迁移,IVC和XenLoop方法支持虚拟机的在线迁移。
XWay方法是在IP之上的Socket与TCP/IP层实现且对应用编程透明,但该方法不支持VM的在线迁移。根据目前公布的资料来看,该方法采用以下步骤完成同一物理计算机上不同VM间的数据通信:
第一步,在客户操作***中构建VM间基于共享内存的通信支持机制。为了支持基于共享内存的VM间通信,VM中的客户操作***不仅要提供TCP Socket协议,还要提供采用共享内存的XWay通信协议。而传统的Socket应用不支持这种专有协议,为了达到对应用编程透明的目的,接收到Socket消息时需要能够在TCP Socket协议和XWay协议之间切换,因此首先构建一个XWay切换组件,XWay切换组件通过修改操作***内核网络协议栈、并打操作***内核补丁的方式实现。当有相关消息到达时,XWay切换组件根据Socket调用信息判断目标VM是在另一台物理计算机上还是在本地物理计算机上,对于前者仍然使用传统的TCP Socket协议,对于第二种情况则切换到XWay协议进行处理。XWay协议的处理由XWay协议组件完成,它接收从XWay切换组件发出的数据传输请求,并建立源VM和目标VM之间的基于共享内存的传输通道。XWay设备驱动组件控制和管理基于共享内存的传输通道。XWay切换组件、XWay协议组件和XWay设备驱动组件三者自上而下共同完成客户操作***中基于共享内存的通信支持的核心功能。
第二步,建立通信源VM和目标VM之间的连接。当XWay切换组件接收到Socket的连接请求时,首先建立一个TCP通道来传输连接建立过程中的控制信息,一旦连接建立,该通道将被销毁。接着XWay切换组件判断源VM和目标VM是否在一台物理计算机上,如果是,则向XWay设备驱动组件发送请求,后者接收到请求后,将建立基于XWay协议的一组传输通道。其中,每个传输通道由两个环形队列和一个事件通道组成,两个环形队列分别用于发送数据和接收数据,事件通道用于在源VM和目标VM之间传递“有数据放入发送队列”、“接收者读取接收队列数据”等事件。
第三步,源VM和目标VM之间的数据发送和接收。具体过程如下:
3.1数据发送。当XWay切换组件接收到发送请求时,它将该请求转发到XWay协议组件,后者通过调用XWay设备驱动组件向发送队列中写数据。当发送队列中空间不足时,在非阻塞I/O模式下返回到XWay设备驱动中,在阻塞I/O模式下XWay设备驱动通知“发送队列空间不足”消息给XWay协议组件,后者负责查看发送队列状态变化,当发送队列空间满足要求时,XWay设备驱动通知XWay协议层重发数据。
3.2数据接收。当XWay切换组件接收到数据接收请求时,将该请求转发到XWay协议组件,后者通过XWay设备驱动组件试图从相应的接收队列中读取数据。如果接收队列中有数据,XWay设备驱动和XWay协议组件立即返回其中可用数据,即使实际数据量小于请求接收的数据量。如果XWay设备驱动组件报告接收队列空,且当前为阻塞I/O模式,XWay协议组件开始等待,直到有数据存入接收队列。这时XWay设备驱动组件发送“接收队列非空”消息给XWay协议组件,后者被唤醒,通过XWay设备驱动组件唤醒。如果XWay设备驱动组件报告接收队列空,且当前为非阻塞I/O模式,XWay协议组件则不做处理直接返回。
第四步,关闭通信源VM和目标VM之间的连接。当XWay切换组件收到关闭连接请求后,首先除去接收队列到内核地址空间的映射,然后释放发送队列所占空间,最后释放事件通道。
这种基于共享内存的通信方法的主要问题是:
1)不支持VM的在线迁移
使用虚拟机技术带来的一个显著优点就是可以通过VM在不同物理计算机之上的迁移来达到负载均衡或容错恢复等目的,是否支持VM运行时的在线迁移成为衡量虚拟机间快速通信机制的一个重要指标。XWay通信方法中未提供迁移检测、迁移后数据通道重建及其它迁移相关的辅助处理方法,从而当正在进行通信的VM发生在线迁移时,将出现通信失效。
2)需要修改客户操作***内核代码
为了支持同一物理计算机上VM之间的快速通信,该方法必须实现:一个可加载的操作***内核模块,用于实现XWay切换组件、XWay协议组件和XWay设备驱动组件;操作***网络协议栈的内核补丁,用于修改部分内核代码,从而支持TCP协议和XWay协议之间的切换;一个核外用户态的守护程序,用于进行XWay通信管理和控制。这不但修改了操作***内核已有组成代码,而且实现了一个新的内核模块和一个用户态的守护程序,工作量大且需要修改客户操作***内核代码。
综上所述,支持同一物理计算机上VM间通信的两类方法中,第一类方法数据拷贝次数多,VMM和客户操作***之间的切换较为频繁,因此通信开销较大。而第二类方法的代表性方法不能同时具备以下特征:在Socket与TCP/IP层实现、对应用编程透明、支持虚拟机在线迁移。
如何提供一种在Socket与TCP/IP层实现、对应用编程透明、支持虚拟机在线迁移的虚拟机间快速通信方法是本领域急需解决的技术问题。
发明内容
本发明要解决的技术问题是:针对第二类基于共享内存的通信方法中XWay方法不支持VM的在线迁移以及需要修改客户操作***内核代码等问题,提供一种在Socket与TCP/IP层实现、对应用编程透明、支持VM在线迁移且无需为客户操作***内核打补丁的同一物理计算机上VM间的快速通信方法。
本发明的技术方案是:
第一步,构造客户操作***中的共享内存通信支持模块,扩展VMM功能,在已有计算机硬件的基础上,由扩展了的VMM和多个包括通信加速支持的VM组成一个虚拟机***。
1.1在客户操作***中构建支持VM迁移的基于共享内存机制的通信加速内核模块。方法是:不修改已有操作***内核代码,遵循标准的操作***内核模块开发接口、在Socket通信层添加一个自包含可加载的通信加速内核模块,并在该模块内部构造并添加初始化、***调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持共六个子模块。具体方法如下:
1.1.1构造并添加初始化子模块。初始化子模块在VM成功启动且加载客户操作***的通信加速内核模块之后被触发,根据下述实现流程和与其它子模块之间的接口来构造并添加该子模块:根据当前VM的组ID配置,首先调用VMM的虚拟机组管理子模块(虚拟机组管理子模块,参见第1.2.1步)来创建组或在相应的组中注册该VM;接着请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由其建立共享内存缓冲区,用于存放相互通信的VM的网络连接以及将要被收发的数据等信息;然后调用VMM的在线迁移子模块以生成VM的当前位置号(虚拟机***中每个VM唯一的位置标志信息)并更新VMM的当前位置号表(VMM的在线迁移子模块在共享内存中为其所在物理计算机上的所有VM维护一个当前位置号表,每一项为VM的ID及其对应的当前位置号)。调用VM迁移支持子模块(VM迁移支持子模块,参见第1.1.6步),通知VM迁移支持子模块获取并维护该VM的当前位置号的一个拷贝;当发生***调用时转到***调用分析器子模块(***调用分析器子模块,参见第1.1.2步)进行对应用透明的通信加速。
1.1.2构造并添加***调用分析器子模块。根据下述实现流程和与其它子模块之间的接口构造并添加该子模块:截获来自网络应用的***调用请求,首先过滤掉与网络操作无关的***调用,对于其它***调用,如果是不同物理计算机上的VM间通信,则仍采用面向TCP/IP网络协议的传统机制处理,如果是位于同一物理计算机上的VM间的通信,则调用连接管控子模块(连接管控子模块,参见第1.1.3步)或数据传输管理子模块(数据传输管理子模块,参见第1.1.5步)进行创建或关闭连接、数据传输等操作。
1.1.3构造并添加连接管控子模块。连接管控子模块负责网络连接信息的维护和管理,为网络连接信息构造连接控制块数据结构,该数据结构包含以下信息:通信的VM双方的IP地址和端口号;I/O模式标志位(阻塞式或非阻塞式);一个发送缓冲区和一个接收缓冲区(发送缓冲区和接收缓冲区对应不同的物理内存,本地接收缓冲区和远地的发送缓冲区共享同一片物理内存);等待发送的睡眠VM队列、等待接收的睡眠VM队列。在构造上述数据结构之后,将所有连接控制块组织成连接控制块表,表中每一项为一个网络连接的ID号,以及该ID对应的连接控制块。然后按照如下流程和与其它子模块之间的接口构造并添加连接管控子模块:在建立连接、关闭连接或进行数据收发时,被***调用分析器子模块、数据传输管理子模块(数据传输管理子模块,参见第1.1.5步)或VM迁移支持子模块(VM迁移支持子模块,参见第1.1.6步)调用,用于访问VMM域间共享内存子模块创建的共享内存,从而创建、注册、读取、修改或回收连接控制块,维持基于共享内存的通信连接。
1.1.4构造并添加通告处理子模块。按照如下流程和与其它子模块之间的接口构造并添加通告处理子模块:接收VMM通告管理子模块(通告管理子模块,参见第1.2.2步)和事件注入子模块转发的与当前事件对应的中断,读取事件缓冲区,获取所需事件,事件类型包括唤醒目标VM接收数据、唤醒源VM发送数据、网络连接已关闭、数据缓冲区可被释放四种;根据事件类型唤醒源VM发送或目标VM接收数据、或通知通信另一方VM网络连接已关闭、数据缓冲区可被释放。
1.1.5构造并添加数据传输管理子模块。数据传输管理子模块用于处理数据发送或接收请求,这些请求有两个来源:***调用分析器子模块和VM迁移支持子模块(VM迁移支持子模块,参见第1.1.6步),其中VM迁移支持子模块的请求是在发生在线迁移时,对已发送但尚未接收到的数据的处理请求。按照如下流程和与其它子模块之间的接口构造并添加数据传输管理子模块:首先调用VM迁移支持子模块判断是否发生了在线迁移,若发生了迁移,则可能出现数据丢失情况,需重建连接或者重传数据,若未发生迁移,则向连接管控子模块发请求获得连接控制块,从而得到共享缓冲区的位置信息,接着通过该共享缓冲区发送或接收数据。
1.1.6构造并添加VM迁移支持子模块。VM迁移支持子模块被连接管控子模块、数据传输管理子模块所调用,用以检测是否发生了迁移并进行处理。按照如下流程和与其它子模块之间的接口构造并添加VM迁移支持子模块:在进行连接关闭、数据发送/接收等操作时,判断VM迁移支持子模块维护的当前位置号拷贝与VMM在线迁移子模块(在线迁移子模块,参见第1.2.3步)中当前位置号表中的当前位置号是否相同,如果不同,则表明发生了迁移,这时首先读取VMM在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中,然后根据迁移的具体情况,重新建立TCP连接或者基于共享内存的连接,并调用连接管控子模块和数据传输管理子模块对已经发送但尚未接收的数据进行处理。
1.2扩展VMM功能,使VMM具有通信加速支持能力。方法是保留VMM已有的中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块和在线迁移子模块,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块,具体方法如下:
1.2.1构造并添加虚拟机组管理子模块。虚拟机组管理子模块将所有VM进行全局分组管理,当通信双方VM在同一虚拟机组时,采用基于共享内存的加速方法来加速通信。按照如下流程和与其它子模块之间的接口构造并添加虚拟机组管理子模块:虚拟机组管理子模块在启动VM时根据VM的组信息配置来设置VM的组ID,具有相同组ID的VM构成一个虚拟机组;在VM销毁时虚拟机组管理子模块将该VM从其虚拟组中删除,判断组内VM成员数是否为0,若是0,则删除该虚拟机组;虚拟机组管理子模块在VM启动或关闭时调用通告管理子模块为虚拟机组创建或回收事件缓冲区。
1.2.2构造并添加通告管理子模块。通告管理子模块在VM启动或关闭时被虚拟机组管理子模块调用为虚拟机组创建或回收事件缓冲区,此时通告管理子模块调用VMM的域间共享内存子模块完成事件缓冲区的内存映射。另外,通告管理子模块还登记和缓存来自VM的请求对应的事件,并通过通告处理子模块向目标VM发送事件,发送事件的步骤是:根据当前VM的网络连接信息,定位通信另一方VM对应的事件缓冲区位置;将当前事件类型和参数登记到该事件缓冲区中;向通信另一方VM注入当前事件类型对应的中断;中断处理完毕后清除事件缓冲区中的该事件。
1.2.3修改在线迁移子模块。保留VMM在线迁移子模块的在线迁移功能,添加迁移辅助处理功能。添加的迁移辅助处理功能与VMM在线迁移子模块的原有在线迁移功能以及VM的通信加速内核模块之间的接口为:在操作***加载通信加速内核模块时迁移辅助处理功能被初始化子模块调用;在接收到外部在线迁移命令并通过VMM在线迁移子模块的原有在线迁移功能完成VM的迁移后,迁移辅助处理功能被激活。迁移辅助处理的流程及其与其它子模块的接口具体如下:在通信加速内核模块被加载时,添加的迁移辅助处理功能被通信加速内核模块的初始化子模块激活,生成VM的当前位置号,并在当前VMM的当前位置号表中加入该VM的ID和当前位置号,调用通信加速内核模块的VM迁移支持子模块,使后者获取该VM当前位置号的一个拷贝,用于在数据传输和连接关闭时判断VM是否发生了迁移;在接收到外部在线迁移命令并通过原有在线迁移功能完成VM的迁移后,在线迁移子模块中添加的迁移辅助处理功能将当前VM迁移前所在物理计算机上的源VMM中保存的连接控制块、已发送和已接收字节数同步到迁移后的目标VMM中,然后通知目标VMM的在线迁移子模块生成被迁移VM的当前位置号,并更新当前位置号表中的信息。
第二步,采用第一步构建的虚拟机***对VM间通信进行加速,具体步骤为:
2.1VMM启动VM,VMM的虚拟机组管理子模块对虚拟机***中需要进行通信加速的VM进行组管理。方法为:
2.1.1根据VM配置文件中的属性值设置VM的IP为addr,其所属组ID为gid(有通信加速需求的VM被分配相同的组ID),组密钥为key;
2.1.2判断是否是首次在本VMM之上启动虚拟机组ID为gid的VM:
2.1.2.1若是,则虚拟机组管理子模块创建编号为gid的虚拟机组,其访问密钥为key;
2.1.2.2若不是,则获得gid对应的虚拟机组并判断提供的key与虚拟机组的key是否一致:如果一致,则创建编号为gid的虚拟机组,其访问密钥为key,在虚拟机组的VM链表中注册本VM,向VMM中的域间共享内存子模块发出请求,由后者为本VM创建事件缓冲区;如果不一致,则报“VM启动失败”信息。
2.2通信加速内核模块的初始化子模块构建VM间通信加速和***调用分析所需的软件环境,方法为:
2.2.1初始化子模块请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由VMM建立共享内存缓冲区,用于存放相互通信的VM的连接控制块信息、待传输的数据和待处理的事件。
2.2.2初始化子模块获取当前VM的IP地址及其所在物理计算机的MAC(Media AccessControl)地址,调用VMM的在线迁移子模块,通过函数转换,生成该虚拟机***中每个VM唯一的位置标志信息——当前位置号。VMM的在线迁移子模块在共享缓冲区中为所有VM维护一个当前位置号表,存储虚拟机***中每个VM的ID及该VM的最新当前位置号。在生成当前位置号后,初始化子模块调用在线迁移子模块将该VM的ID及其当前位置号加入当前位置号表中,并调用通信加速内核模块的VM迁移支持子模块,使得后者获取并维护该VM的当前位置号的一个拷贝。
2.3VM客户操作***中的通信加速内核模块接收应用程序或外部命令中的***调用,转发给***调用分析器子模块,***调用分析器子模块首先旁路掉与网络操作无关的***调用(按操作***常规流程处理),然后选择与网络操作有关的***调用分类进行处理,完成同一物理计算机上的VM间的基于共享内存的快速通信。方法是:
2.3.1若当前***调用的类别是建立网络连接,则:
2.3.1.1连接管控子模块首先通过VMM获得当前VM的组ID及其所在物理计算机的MAC地址,接着判断通信双方VM的虚拟组ID是否相同,如果通信双方虚拟机组ID不同,则无需进行通信加速,按操作***常规的建立TCP网络连接的流程处理;如果通信双方虚拟机组ID相同,则判断通信双方是否位于同一台物理计算机上,按以下方法处理:
2.3.1.1.1如果通信双方不位于同一台物理计算机,则按操作***常规的建立TCP网络连接的流程处理;
2.3.1.1.2如果通信双方位于同一台物理计算机,且该***调用对应的网络连接的连接控制块尚未被添加到连接管控子模块中的连接控制块表中,即通信双方位于同一台物理计算机且该***调用对应的网络连接尚未被注册到连接管控子模块中,则调用VMM的域间共享内存子模块,获取源VM和目标VM的数据缓冲区,初始化已发送和已接收的字节数为0,在第2.2.1步中VMM建立的共享内存缓冲区中创建连接控制块,设置连接控制块的初始值,分配用于数据发送或接收的共享缓冲区,最后在连接管控子模块中注册该连接,即将该连接对应的连接控制块添加到连接控制块表中。
2.3.2若当前***调用是数据发送操作,则:
2.3.2.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应当前位置号是否一致。如果一致,表明通信双方VM未发生迁移,转第2.3.2.2步进行基于共享内存的快速数据发送。如果不一致,表明在进行该发送操作前该VM发生了迁移,进行迁移辅助处理:VM迁移支持子模块读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到自身维护的当前位置号拷贝中;为了对已经发送但尚未被接收到的数据进行处理,VM迁移支持子模块查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.2.1.1如果注册了,则表明迁移前通信双方的VM位于同一台物理计算机,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收,数据传输管理子模块等待直到目标VM的接收缓冲区为空,并更新VMM中已接收的字节数,否则表明数据均被接收。由于迁移后通信双方不在同一台物理计算机上,因此回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规的基于TCP连接的数据发送流程处理。
2.3.2.1.2如果未注册,则表明迁移前通信双方的VM不在同一台物理计算机上,数据传输管理子模块等待直到网络上的数据被接收完毕。然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规的基于TCP连接的数据发送流程处理;若是,则迁移后通信双方在同一台物理计算机上。此时,判断发送数据的当前VM的组ID与目标VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据发送操作,以便在重建连接后继续本次数据发送,然后转第2.3.1.1步执行;若不相同,则无需用共享内存方式加速通信,仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来发送数据。
2.3.2.2通信加速内核模块的数据传输管理子模块进行基于共享内存的快速数据发送。数据传输管理子模块首先读取连接控制块表,判断是否存在当前发送操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,按操作***常规流程基于TCP连接来发送数据,否则判断通信双方VM的虚拟组ID相同,如果不相同,则按操作***常规流程基于TCP连接来发送数据,否则按照共享内存的方式进行快速的发送数据。设请求发送的数据长度为m,连接控制块中描述的发送缓冲区长度为n,方法是:若m不小于n,则向发送缓冲区传输n个字节,并为已发送字节数加上n,设置请求发送的数据长度m=m-n;否则向发送缓冲区传输m个字节,已发送字节数加m,请求发送的数据长度m设为0。如果本次I/O为阻塞式且m>0,将本发送任务添加到连接控制块的等待发送的睡眠VM队列,调用操作***功能进行睡眠,直至目标VM通过通信加速内核模块的通告处理子模块传递接收数据事件唤醒本任务时转至第2.3.2步,否则若m>0,直接转第2.3.2步。
2.3.3若当前***调用是数据接收操作,则:
2.3.3.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致。如果一致,表明通信双方VM未发生迁移,直接转第2.3.3.2步进行基于共享内存的快速数据接收。如果不一致,表明在进行此接收操作前该VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.3.1.1如果存在,则表明迁移前通信双方的VM位于同一台物理计算机上,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收。由于迁移后通信双方不在同一台物理计算机上,则当仍有数据未被接收时,首先请数据发送方将用于发送的数据缓冲区中的数据重发一遍,接收完网络上传输的剩余数据后,回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规流程基于TCP连接来接收数据。
2.3.3.1.2如果不存在,则表明迁移前通信双方的VM不在同一台物理计算机上,采用的是基于TCP的通信方式,数据传输管理子模块等待目标VM继续接收数据直到网络上的数据被接收完毕。然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规流程基于TCP连接来接收数据;若是,则迁移后通信双方在同一台物理计算机上。此时,判断接收数据的当前VM的组ID与源VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据接收操作,以便在重建连接后继续本次数据接收,然后转第2.3.1.1步;若不相同,则无需用共享内存方式加速通信,仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来接收数据。
2.3.3.2通信加速内核模块的数据传输管理子模块进行基于共享内存的快速数据接收。通信加速内核模块的数据传输管理子模块首先读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前接收操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,转操作***常规流程基于TCP连接来接收数据,否则判断通信双方VM的虚拟组ID是否相同,如果不相同,则转操作***常规流程基于TCP连接来接收数据,否则按照共享内存的方式接收数据:如果接收缓冲区不为空,则目标VM接收其中的数据,并将已接收数据字节数增加相应的值。若接收操作完毕,则数据接收流程结束,否则按以下方法处理:
2.3.3.2.1当本次I/O为非阻塞式时,转第2.3.3步;
2.3.3.2.2当本次I/O为阻塞式时,则将本接收任务添加到连接控制块的等待接收的睡眠VM队列,调用操作***功能进行睡眠,直至源VM通过通信加速内核模块的通告处理子模块传递发送数据事件唤醒本任务,转第2.3.3步。
2.3.4若当前***调用是关闭网络连接,则:
2.3.4.1通信加速内核模块的连接管控子模块调用VM迁移支持子模块判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致。如果一致,表明通信双方VM未发生迁移,直接转第2.3.4.2步关闭连接。如果不一致,表明在即将关闭网络连接前VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.4.1.1如果注册了,则表明迁移前通信双方的VM位于同一台物理计算机上,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明仍有数据未被接收。当仍有数据未被接收时,由于迁移后通信双方VM不在一台物理计算机上,若当前VM是源VM,则等待直到目标VM的接收缓冲区为空,若当前VM是目标VM,则请数据发送方将用于发送的数据缓冲区中的数据重发一遍,并接收网络上传输的重发数据。
2.3.4.1.2如果未注册,则表明迁移前通信双方的VM不在同一台物理计算机上,采用的是基于TCP的通信方式。则判断当前VM是源VM还是目标VM,如果当前VM为源VM,则等待直至网上传输的数据被接收完毕;如果当前VM为目标VM,则读取网络上传输的剩余数据。
2.3.4.2通信加速内核模块的数据传输管理子模块读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,转操作***常规流程关闭TCP连接,否则判断通信的另一方VM是否在睡眠,若其正在睡眠,则请求VMM的通告管理子模块通过事件缓冲区向对方发送事件,用于通知后者网络连接已经断开且可以释放数据缓冲区,通告管理子模块通过VMM的事件注入子模块向VM注入当前事件对应的中断,VM中的通信加速内核模块的通告处理子模块接收中断。
2.3.4.3调用VMM的域间共享内存子模块以释放双方的数据缓冲区,判断对方是否已经关闭连接,如果已经关闭,则通过连接管控子模块回收当前连接控制块。
2.4VMM关闭IP为addr、所属组ID为gid、组密钥为key的VM,VMM的虚拟机组管理子模块从组中删除该VM。方法为:
2.4.1虚拟机组管理子模块获得gid对应的虚拟机组;
2.4.2判断提供的key与虚拟机组的key是否一致,如果不一致,则报“权限不够,VM删除失败”信息,转至操作***常规流程;
2.4.3调用通告管理子模块处理当前VM的事件缓冲区中事件,当事件缓冲区为空时,调用域间共享内存子模块释放事件缓冲区所占内存;
2.4.4调用VMM进行常规的VM删除流程:
2.4.4.1如果删除失败,则报“VM删除失败”,转至操作***常规流程。
2.4.4.2如果删除成功,则将当前VM从本虚拟机组信息中删除,并报告“VM删除成功”;VMM判断当前虚拟机组是否为空,如果为空,则释放本虚拟机组连接控制块表所占用的内存空间,并删除组ID为gid的虚拟机组,报告“组ID为gid的虚拟机组已被删除”。
采用本发明能够达到如下的技术效果:
1.采用本发明能够极大地加速同一台物理计算机上VM间的通信效率。普通的基于网卡的通信方法对于同一台物理计算机上VM间的通信而言,VMM和客户操作***之间的切换次数以及数据拷贝次数比较多,性能损失较大。而本发明采用基于共享内存的方法,通信双方的VM共享位于同一台物理计算机上的基于共享内存的数据缓冲区,通过共享内存的方式进行数据传输,VM与客户操作***之间的切换较少,且数据拷贝次数减少,能有效提高通信效率。
2.采用本发明能够保证VM在线迁移时通信的正确性。首先,在发生迁移时支持连接控制块、当前位置号、已发送和已接收字节数的同步,为迁移检测和在线数据收发和连接重建提供了必要信息;第二,在VM迁移后,可通过通信加速内核模块中的VM迁移支持子模块检测到是否发生了迁移并根据实际情况进行处理;第三,有防止数据丢失机制,避免在共享内存的加速I/O方式和TCP常规I/O方式间转换时丢失正在传输的数据。
3.本发明对用户和编程者透明。本发明通过拦截***调用进行分流处理的方式,对同一台物理计算机上的VM间的网络操作进行基于共享内存的通信加速,底层共享内存机制的实现对用户透明,未对Socket接口以及其它网络通信接口做过任何修改,应用程序仍然可使用标准的Socket接口进行通信。因此,用户不感知底层支撑机制,且无需修改应用编程和使用模式,另外,当网络通信协议发生变化时,无需应用移植。
4.采用本发明无需修改操作***内核代码。本发明遵循标准的操作***内核模块开发接口,在Socket层实现一个自包含可加载的全新的通信加速内核模块,未对操作***内核的固有组成做出改变,因此,无需修改客户操作***和宿主操作***的代码。
附图说明
图1为背景技术中第二类通信方法中XWay的虚拟机***结构图;
图2为本发明总体流程图;
图3为本发明第一步构建的虚拟机***的结构图;
图4为本发明第1.1.3步构造的连接控制块和连接控制块表的数据结构;
图5为本发明快速通信所需的基于共享内存的数据和控制信息交互图;
图6为本发明第1.2.3步收到外部在线迁移命令时的迁移辅助处理流程;
图7为本发明第2.3.1步支持VM在线迁移的连接建立流程图;
图8为本发明第2.3.2步支持VM在线迁移的数据发送流程图;
图9为本发明第2.3.3步支持VM在线迁移的数据接收流程图;
图10为本发明第2.3.4步支持VM在线迁移的连接关闭流程图。
具体实施方式
图1是背景技术中第二类通信方法中XWay的虚拟机***结构图,该虚拟机***自下而上由三层组成:最底层是物理计算机硬件,包括CPU、内存、网卡和磁盘等硬件设备;中间层是虚拟机监控器,由中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块、在线迁移子模块组成;最上层是宿主操作***以及多个客户操作***,客户操作***包括核外用户态的Socket应用、XWay守护进程,核内的操作***内核和XWay内核模块,为了实现TCP Socket协议和XWay协议之间的透明切换,必须在操作***内核的网络协议栈中添加用于实现XWay切换组件的内核补丁,XWay内核模块由XWay协议组件和XWay设备驱动组件组成。XWay协议组件包括连接管控子模块和数据收发请求处理子模块。
当有Socket调用消息到达时,操作***内核中的XWay切换组件根据该信息判断目标VM是在另一台物理计算机上还是就在本地物理计算机上,对于前者仍然使用传统的TCP协议,而对于第二种情况则切换到XWay协议进行处理。XWay协议组件接收从XWay切换组件发出的数据传输请求,将与控制相关的请求转发给连接管控子模块处理,而与数据传输相关的请求转发给数据收发请求处理子模块,连接管控子模块和数据收发请求处理子模块进行控制管理或准备收发数据,并请求XWay设备驱动组件控制和管理基于共享内存的传输通道,由传输通道管理子模块建立或者维护源VM和目标VM之间的基于共享内存的传输通道。
图2是本发明总体流程图。第一步,首先构造支持VM迁移的基于共享内存机制的通信加速内核模块,方法是遵循标准的操作***内核模块开发接口、在Socket通信层添加一个自包含可加载的内核模块,在该模块内部添加初始化、***调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持六个子模块;然后扩展VMM功能,方法是保留VMM已有的中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块和在线迁移子模块,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块;最后在已有计算机硬件的基础上,由扩展了的VMM和多个包括通信加速支持的VM组成一个虚拟机***。第二步,采用第一步构建的虚拟机***对VM间通信进行加速。方法是:首先VMM启动VM,VMM的虚拟机组管理子模块对虚拟机***中需要进行通信加速的VM进行组管理,接着构建VM间通信加速和***调用分析所需的软件环境,然后旁路掉与网络操作无关的***调用,选择与网络操作有关的***调用分类进行处理,完成同一物理计算机上的VM间的支持在线迁移的基于共享内存的快速通信,包括建立网络连接、发送数据、接收数据和关闭网络连接,最后VMM关闭指定VM,VMM的虚拟机组管理子模块从组中删除该VM。
图3是为本发明第一步构建的虚拟机***的结构图,整个虚拟机***从下至上也被分成三个部分:最底层是物理计算机的硬件;中间层是虚拟机监控器;最上层是宿主操作***以及多个客户操作***。
虚拟机监控器由中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块、在线迁移子模块、虚拟机组管理子模块和通告管理子模块组成。其中,前五个子模块与背景技术中XWay使用的虚拟机监控机中的五个子模块完全相同;为了同时支持快速通信和VM在线迁移功能,对虚拟机监控器的在线迁移子模块做了修改,并添加了虚拟机组管理子模块和通告管理子模块。
客户操作***包括核外用户态的Socket应用、核内的操作***内核和通信加速内核模块,不同于XWay方法,本发明不对操作***内核代码进行修改,且无需核外的守护进程,另外,通信加速内核模块也与XWay内核模块不同。通信加速内核模块由初始化子模块、***调用分析器子模块、连接管控子模块、通告处理子模块、数据传输管理子模块、VM迁移支持子模块组成。连接管控子模块与XWay协议组件中的连接管控子模块在连接基本管理功能上基本相同,用于处理与控制相关的请求,但增加了在线迁移的支持;数据传输管理子模块在数据传输功能上与XWay协议组件中的数据请求收发处理子模块和XWay设备驱动组件中的传输通道管理子模块基本相同,用于处理与数据传输相关的请求,但增加了在线迁移的支持;初始化子模块、***调用分析器子模块和VM迁移支持子模块是本发明为了实现通信加速内核模块初始化、***调用过滤和分流处理和支持VM迁移而添加的子模块。添加或修改子模块的方法如下;
1)虚拟机组管理子模块。虚拟机组管理子模块将所有VM进行全局分组管理,当通信双方VM在同一虚拟机组时,采用基于共享内存的加速方法来加速通信。按照如下流程和与其它子模块之间的接口构造并添加虚拟机组管理子模块:虚拟机组管理子模块在启动VM时根据VM的组信息配置来设置VM的组ID,具有相同组ID的VM构成一个虚拟机组;在VM销毁时虚拟机组管理子模块将该VM从其虚拟组中删除,判断组内VM成员数是否为0,若是0,则删除该虚拟机组;虚拟机组管理子模块在VM启动或关闭时调用通告管理子模块为虚拟机组创建或删除事件缓冲区。
2)通告管理子模块。通告管理子模块在VM启动或关闭时被虚拟机组管理子模块调用为虚拟机组创建或回收事件缓冲区,此时通告管理子模块将调用域间共享内存子模块完成事件缓冲区的内存映射。通告管理子模块还登记和缓存来自VM的请求对应的事件,并通过通告加速模块的通告处理子模块向目标VM发送事件,发送事件的步骤是:根据当前VM的网络连接信息,定位通信另一方VM对应的事件缓冲区位置;将当前事件类型和参数登记到该事件缓冲区中;向通信另一方VM注入当前事件类型对应的中断;中断处理完毕后清除事件缓冲区中的该事件。
3)在线迁移子模块。保留VMM在线迁移子模块的在线迁移功能,并添加迁移辅助处理功能到在线迁移子模块中。添加的迁移辅助处理功能与VMM在线迁移子模块的原有在线迁移功能以及VM的通信加速内核模块之间的接口表现为:在操作***加载通信加速内核模块时迁移辅助处理功能被初始化子模块调用;在接收到外部在线迁移命令并通过VMM在线迁移子模块的原有在线迁移功能完成VM的迁移后,迁移辅助处理功能被激活。迁移辅助处理的流程及其与其它子模块的接口具体如下:在通信加速内核模块被加载时,添加的迁移辅助处理功能被通信加速内核模块的初始化子模块激活,生成VM的当前位置号,并在当前VMM的当前位置号表中加入该VM的ID和当前位置号,调用通信加速内核模块的VM迁移支持子模块,使后者获取该VM当前位置号的一个拷贝,用于在数据传输和连接关闭时判断VM是否发生了迁移;在接收到外部在线迁移命令并通过原有在线迁移功能完成VM的迁移后,在线迁移子模块将当前VM迁移前所在物理计算机上的源VMM中保存的连接控制块、已发送和已接收字节数同步到迁移后的目标VMM中,目标VMM的在线迁移子模块生成被迁移VM的当前位置号,更新当前位置号表中的信息。
通信加速内核模块中各个子模块的构造和添加方法如下:
1)初始化子模块。初始化子模块在VM成功启动且加载客户操作***的通信加速内核模块之后被触发,根据下述实现流程和与其它子模块之间的接口来构造并添加该子模块:根据当前VM的组ID配置,首先调用VMM的虚拟机组管理子模块来创建组或在相应的组中注册该VM;接着请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由其建立共享内存缓冲区,用于存放相互通信的VM的网络连接以及将要被收发的数据等信息;然后调用VMM的在线迁移子模块以生成VM的当前位置号并更新VMM的当前位置号表。调用VM迁移支持子模块,通知VM迁移支持子模块获取并维护该VM的当前位置号的一个拷贝;当发生***调用时转到***调用分析器子模块进行对应用透明的通信加速。
2)***调用分析器子模块。根据下述实现流程和与其它子模块之间的接口构造并添加该子模块:截获来自网络应用的***调用请求,首先过滤掉与网络操作无关的***调用,对于其它***调用,如果是不同物理计算机上的VM间通信,则仍采用面向TCP/IP网络协议的传统机制处理,如果是位于同一物理计算机上的VM间的通信,则调用连接管控子模块或数据传输管理子模块进行创建或关闭连接、数据传输等操作。
3)连接管控子模块。连接管控子模块负责网络连接信息的维护和管理,为网络连接信息构造连接控制块数据结构,将所有连接控制块组织成连接控制块表,表中每一项为一个网络连接的ID号,以及该ID对应的连接控制块(见图4)。然后按照如下流程和与其它子模块之间的接口构造并添加连接管控子模块:在建立连接、关闭连接或进行数据收发时,被***调用分析器子模块、数据传输管理子模块或VM迁移支持子模块调用,用于访问VMM域间共享内存子模块创建的共享内存,从而创建、注册、读取、修改或回收连接控制块,维持基于共享内存的通信连接。
4)通告处理子模块。按照如下流程和与其它子模块之间的接口构造并添加通告处理子模块:接收VMM通告管理子模块和事件注入子模块转发的与当前事件对应的中断,读取事件缓冲区,获取所需事件,根据事件类型唤醒源VM发送或目标VM接收数据、或通知通信另一方VM网络连接已关闭、数据缓冲区可被释放。
5)数据传输管理子模块。数据传输管理子模块用于处理数据发送或接收请求,这些请求有两个来源:***调用分析器子模块和VM迁移支持子模块,其中第二类请求是在发生在线迁移时,对已发送但尚未接收到的数据的处理请求。按照如下流程和与其它子模块之间的接口构造并添加数据传输管理子模块:首先调用VM迁移支持子模块判断是否发生了在线迁移,若发生了迁移,则可能出现数据丢失情况,需重建连接或者重传数据,若未发生迁移,则向连接管控子模块发请求获得连接控制块,从而得到共享缓冲区的位置信息,接着通过该共享缓冲区发送或接收数据。
6)VM迁移支持子模块。VM迁移支持子模块被连接管控子模块、数据传输管理子模块所调用,用以检测是否发生了迁移并进行处理。按照如下流程和与其它子模块之间的接口构造并添加VM迁移支持子模块:在进行连接关闭、数据发送/接收等操作时,判断VM迁移支持子模块维护的当前位置号拷贝与VMM在线迁移子模块中当前位置号表中的当前位置号是否相同,如果不同,则表明发生了迁移,这时首先读取VMM在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中,然后根据迁移的具体情况,必要时重新建立TCP连接或者基于共享内存的连接,并调用连接管控子模块和数据传输管理子模块对已经发送但尚未接收的数据进行处理。
图4为本发明第1.1.3步构造的连接控制块和连接控制块表的数据结构。该数据结构对应的连接信息由连接管控子模块维护和管理,该数据结构为一个struct类型,包括的域有:通信的VM双方的IP地址和端口号;I/O模式标志位(阻塞式或非阻塞式);一个发送缓冲区和一个接收缓冲区(发送缓冲区和接收缓冲区对应不同的物理内存,本地接收缓冲区和远地的发送缓冲区共享同一片物理内存);等待发送的睡眠VM队列、等待接收的睡眠VM队列。所有连接控制块组织成连接控制块表,表中每一项为一个网络连接的ID号,以及该ID对应的连接控制块。
图5为本发明进行快速通信的基于共享内存的数据和控制信息示意图。客户操作***VM_1和客户操作***VM_2是进行通信的两个VM,两者通过共享内存的方式交互信息,共享内存中包括连接控制块信息、数据缓冲区和事件缓冲区。
在第2.2.1步中,初始化子模块请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由VMM建立共享内存缓冲区,用于交互相互通信的VM的连接信息、数据和事件。其中,连接控制块和数据缓冲区的创建和获取在第2.3.1步建立网络连接时完成,一般情况下,连接控制块和数据缓冲区的回收在第2.3.4步关闭连接时完成。当数据发送或接收过程中发生在线迁移时,如果迁移前通信双方在同一台物理计算机上且在同一虚拟组中,而迁移后不在同一台物理计算机上或不在同一虚拟组中,则在数据发送或接收过程中回收当前控制块以及数据缓冲区(参见第2.3.2.1.1步和第2.3.3.1.1步)。数据通过数据缓冲区1和数据缓冲区2发送或接收,当VM_1为发送方、VM_2为接收方时,VM_1的发送缓冲区映射为数据缓冲区1,VM_2的接收缓冲区也映射为数据缓冲区1;当VM_2为发送方、VM_1为接收方时,VM_2的发送缓冲区映射为数据缓冲区2,VM_1的接收缓冲区也映射为数据缓冲区2。事件缓冲区用于通信双方VM间的事件通告,在VM启动或关闭时,由虚拟机组管理子模块调用通告管理子模块,后者为虚拟机组创建或回收事件缓冲区。
图6为本发明第1.2.3步收到外部在线迁移命令时的迁移辅助处理流程。在接收到外部在线迁移命令并通过原有在线迁移功能完成VM的迁移后,在线迁移子模块中添加的迁移辅助处理功能首先将当前VM迁移前所在物理计算机上的源VMM中保存的连接控制块、已发送和已接收字节数同步到迁移后的目标VMM中,然后通知目标VMM的在线迁移子模块生成被迁移VM的当前位置号,并更新当前位置号表中的信息。
以下是本发明第2.3步的流程图,分为四种情况,分别用图7、图8、图9、图10描述。
图7描述了本发明第2.3.1步源VM与目标VM建立连接的流程。连接管控子模块首先通过VMM获得当前VM的组ID及其所在物理计算机的MAC地址,接着判断通信双方VM的虚拟组ID是否相同。如果通信双方虚拟机组ID不同,则无需进行通信加速,按操作***常规的建立TCP网络连接的流程处理。如果通信双方虚拟机组ID相同,则判断通信双方是否位于同一台物理计算机上。如果通信双方不位于同一台物理计算机上,则按操作***常规的建立TCP网络连接的流程处理。如果通信双方位于同一台物理计算机,且该***调用对应的网络连接的连接控制块尚未被添加到连接管控子模块中的连接控制块表中,即通信双方位于同一台物理计算机且该***调用对应的网络连接尚未被注册到连接管控子模块中,则调用VMM的域间共享内存子模块,获取源VM和目标VM的数据缓冲区,初始化已发送和已接收的字节数为0,在第2.2.1步中VMM建立的共享内存缓冲区中创建连接控制块,设置连接控制块的初始值,分配用于数据发送或接收的共享缓冲区,最后在连接管控子模块中注册该连接,即将该连接对应的连接控制块添加到连接控制块表中。
图8描述了本发明第2.3.2步支持在线迁移的数据发送流程:
2.3.2.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应当前位置号是否一致。如果一致,表明通信双方VM未发生迁移,转第2.3.2.2步进行基于共享内存的快速数据发送。如果不一致,表明在进行该发送操作前该VM发生了迁移,进行迁移辅助处理:VM迁移支持子模块读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到自身维护的当前位置号拷贝中;为了对已经发送但尚未被接收到的数据进行处理,VM迁移支持子模块查询连接管控子模块中是否注册了该连接对应的连接控制块,即在连接控制块表中查询是否存在该连接对应的连接控制块:
2.3.2.1.1如果存在,则表明迁移前通信双方的VM位于同一台物理计算机,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收,数据传输管理子模块等待直到目标VM的接收缓冲区为空,并更新VMM中已接收的字节数,否则表明数据均被接收。由于迁移后通信双方不在同一台物理计算机上,因此回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规的基于TCP连接的数据发送流程处理。
2.3.2.1.2如果不存在,则表明迁移前通信双方的VM不在同一台物理计算机上,数据传输管理子模块等待直到网络上的数据被接收完毕。然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规的基于TCP连接的数据发送流程处理;若是,则迁移后通信双方在同一台物理计算机上。此时,判断发送数据的当前VM的组ID与目标VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据发送操作,以便在重建连接后继续本次数据发送,然后转第2.3.1.1步执行;若不相同,则无需用共享内存方式加速通信,仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来发送数据。
2.3.2.2通信加速内核模块的数据传输管理子模块进行基于共享内存的快速数据发送。数据传输管理子模块首先读取连接控制块表,判断是否存在当前发送操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,按操作***常规流程基于TCP连接来发送数据,否则判断通信双方VM的虚拟组ID相同,如果不相同,则按操作***常规流程基于TCP连接来发送数据,否则按照共享内存的方式进行快速的发送数据。设请求发送的数据长度为m,连接控制块中描述的发送缓冲区长度为n,方法是:若m不小于n,则向发送缓冲区传输n个字节,并为已发送字节数加上n,设置请求发送的数据长度m=m-n;否则向发送缓冲区传输m个字节,已发送字节数加m,请求发送的数据长度m设为0。如果本次I/O为阻塞式且m>0,将本发送任务添加到连接控制块的等待发送的睡眠VM队列,调用操作***功能进行睡眠,直至目标VM通过通信加速内核模块的通告处理子模块传递接收数据事件唤醒本任务时转至第2.3.2步,否则若m>0,直接转第2.3.2步。
图9描述了本发明第2.3.3步支持在线迁移的数据接收的流程:
2.3.3.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致。如果一致,表明通信双方VM未发生迁移,直接转第2.3.3.2步进行基于共享内存的快速数据接收。如果不一致,表明在进行此接收操作前该VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块,即在连接控制块表中查询是否存在该连接对应的连接控制块:
2.3.3.1.1如果存在,则表明迁移前通信双方的VM位于同一台物理计算机上,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收。由于迁移后通信双方不在同一台物理计算机上,则当仍有数据未被接收时,首先请数据发送方将用于发送的数据缓冲区中的数据重发一遍,接收完网络上传输的剩余数据后,回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规流程基于TCP连接来接收数据。
2.3.3.1.2如果不存在,则表明迁移前通信双方的VM不在同一台物理计算机上,采用的是基于TCP的通信方式,数据传输管理子模块等待目标VM继续接收数据直到网络上的数据被接收完毕。然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规流程基于TCP连接来接收数据;若是,则迁移后通信双方在同一台物理计算机上。此时,判断接收数据的当前VM的组ID与源VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据接收操作,以便在重建连接后继续本次数据接收,然后转第2.3.1.1步;若不相同,则无需用共享内存方式加速通信,仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来接收数据。
2.3.3.2通信加速内核模块的数据传输管理子模块进行基于共享内存的快速数据接收。通信加速内核模块的数据传输管理子模块首先读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前接收操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,转操作***常规流程基于TCP连接来接收数据,否则判断通信双方VM的虚拟组ID相同,如果不相同,则转操作***常规流程基于TCP连接来接收数据,否则按照共享内存的方式接收数据:如果接收缓冲区不为空,则目标VM接收其中的数据,并将已接收数据字节数增加相应的值。若接收操作完毕,则数据接收流程结束,否则按以下方法处理:
2.3.3.2.1当本次I/O为非阻塞式时,转第2.3.3步;
2.3.3.2.2当本次I/O为阻塞式时,则将本接收任务添加到连接控制块的等待接收的睡眠VM队列,调用操作***功能进行睡眠,直至源VM通过通信加速内核模块的通告处理子模块传递发送数据事件唤醒本任务,转第2.3.3步。
图10描述了本发明第2.3.4步支持在线迁移的连接关闭的流程:
2.3.4.1通信加速内核模块的连接管控子模块调用VM迁移支持子模块判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致。如果一致,表明通信双方VM未发生迁移,直接转第2.3.4.2步关闭连接。如果不一致,表明在即将关闭网络连接前VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块,即在连接控制块表中查询是否存在该连接对应的连接控制块:
2.3.4.1.1如果存在,则表明迁移前通信双方的VM位于同一台物理计算机上,采用的是基于共享内存的快速通信方法。读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明仍有数据未被接收。当仍有数据未被接收时,由于迁移后通信双方VM不在一台物理计算机上,若当前VM是源VM,则等待直到目标VM的接收缓冲区为空,若当前VM是目标VM,则请数据发送方将用于发送的数据缓冲区中的数据重发一遍,并接收网络上传输的重发数据。
2.3.4.1.2如果不存在,则表明迁移前通信双方的VM不在同一台物理计算机上,采用的是基于TCP的通信方式。如果当前VM为源VM,则等待直至网上传输的数据被接收完毕;如果当前VM为目标VM,则读取网络上传输的剩余数据。
2.3.4.2通信加速内核模块的数据传输管理子模块读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,转操作***常规流程关闭TCP连接,否则判断通信的另一方VM是否在睡眠,若其正在睡眠,则请求VMM的通告管理子模块通过事件缓冲区向对方发送事件,用于通知后者网络连接已经断开且可以释放数据缓冲区,通告管理子模块通过VMM的事件注入子模块向VM注入当前事件对应的中断,VM中的通信加速内核模块的通告处理子模块接收中断。
2.3.4.3调用VMM的域间共享内存子模块以释放双方的数据缓冲区,判断对方是否已经关闭连接,如果已经关闭,则通过连接管控子模块回收当前连接控制块。

Claims (4)

1.一种支持在线迁移的虚拟机间快速通信方法,其特征在于包括以下步骤:
第一步,构造客户操作***中的共享内存通信支持模块,扩展虚拟机监控器VMM功能,在已有计算机硬件的基础上,由扩展了的VMM和多个包括通信加速支持的虚拟机VM组成一个虚拟机***,方法是:
1.1在客户操作***中构建支持VM迁移的基于共享内存机制的通信加速内核模块,方法是:不修改已有操作***内核代码,遵循标准的操作***内核模块开发接口、在Socket通信层添加一个自包含可加载的通信加速内核模块,并在该模块内部构造并添加初始化、***调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持共六个子模块,方法是:
1.1.1构造并添加初始化子模块:根据当前VM的组ID配置,首先调用VMM的虚拟机组管理子模块来创建组或在相应的组中注册该VM;接着请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由其建立共享内存缓冲区;然后调用VMM的在线迁移子模块以生成VM的当前位置号并更新VMM的当前位置号表,当前位置号表的每一项为VM的ID及其对应的当前位置号;调用VM迁移支持子模块,通知VM迁移支持子模块获取并维护该VM的当前位置号的一个拷贝;当发生***调用时转到***调用分析器子模块进行对应用透明的通信加速;
1.1.2构造并添加***调用分析器子模块:截获来自网络应用的***调用请求,首先过滤掉与网络操作无关的***调用,对于其它***调用,如果是不同物理计算机上的VM间通信,则仍采用面向TCP/IP网络协议的传统机制处理,如果是位于同一物理计算机上的VM间的通信,则调用连接管控子模块或数据传输管理子模块进行创建或关闭连接、数据传输;
1.1.3构造并添加连接管控子模块,连接管控子模块负责网络连接信息的维护和管理,为网络连接信息构造连接控制块数据结构,该数据结构包含以下信息:通信的VM双方的IP地址和端口号;I/O模式标志位;一个发送缓冲区和一个接收缓冲区;等待发送的睡眠VM队列、等待接收的睡眠VM队列;在构造上述数据结构之后,将所有连接控制块组织成连接控制块表,表中每一项为一个网络连接的ID号,以及该ID对应的连接控制块;然后按照如下流程和与其它子模块之间的接口构造并添加连接管控子模块:在建立连接、关闭连接或进行数据收发时,被***调用分析器子模块、数据传输管理子模块或VM迁移支持子模块调用,用于访问VMM域间共享内存子模块创建的共享内存,从而创建、注册、读取、修改或回收连接控制块,维持基于共享内存的通信连接;
1.1.4构造并添加通告处理子模块:接收VMM通告管理子模块和事件注入子模块转发的与当前事件对应的中断,读取事件缓冲区,获取所需事件,事件类型包括唤醒目标VM接收数据、唤醒源VM发送数据、网络连接已关闭、数据缓冲区可被释放四种;根据事件类型唤醒源VM发送或目标VM接收数据、或通知通信另一方VM网络连接已关闭、数据缓冲区可被释放;
1.1.5构造并添加数据传输管理子模块:首先调用VM迁移支持子模块判断是否发生了在线迁移,若发生了迁移,则可能出现数据丢失情况,需重建连接或者重传数据,若未发生迁移,则向连接管控子模块发请求获得连接控制块,从而得到共享缓冲区的位置信息,接着通过该共享缓冲区发送或接收数据;
1.1.6构造并添加VM迁移支持子模块:在进行连接关闭、数据发送/接收时,判断VM迁移支持子模块维护的当前位置号拷贝与VMM在线迁移子模块中当前位置号表中的当前位置号是否相同,如果不同,则表明发生了迁移,这时首先读取VMM在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中,然后根据迁移的具体情况重新建立TCP连接或者基于共享内存的连接,并调用连接管控子模块和数据传输管理子模块对已经发送但尚未接收的数据进行处理;
1.2扩展VMM功能,使VMM具有通信加速支持能力,方法是保留VMM已有的中断处理子模块、CPU指令虚拟化子模块、MMU虚拟化子模块、事件注入子模块、域间共享内存子模块和在线迁移子模块,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块,具体方法如下:
1.2.1构造并添加虚拟机组管理子模块:虚拟机组管理子模块在启动VM时根据VM的组信息配置来设置VM的组ID,具有相同组ID的VM构成一个虚拟机组;在VM销毁时虚拟机组管理子模块将该VM从其虚拟组中删除,判断组内VM成员数是否为0,若是0,则删除该虚拟机组;虚拟机组管理子模块在VM启动或关闭时调用通告管理子模块为虚拟机组创建或回收事件缓冲区;
1.2.2构造并添加通告管理子模块,通告管理子模块在VM启动或关闭时被虚拟机组管理子模块调用为虚拟机组创建或回收事件缓冲区,此时通告管理子模块调用VMM的域间共享内存子模块完成事件缓冲区的内存映射;通告管理子模块还登记和缓存来自VM的请求对应的事件,并通过通告处理子模块向目标VM发送事件,发送事件的步骤是:根据当前VM的网络连接信息,定位通信另一方VM对应的事件缓冲区位置;将当前事件类型和参数登记到该事件缓冲区中;向通信另一方VM注入当前事件类型对应的中断;中断处理完毕后清除事件缓冲区中的该事件;
1.2.3修改在线迁移子模块,保留VMM在线迁移子模块的在线迁移功能,添加迁移辅助处理功能,迁移辅助处理功能与在线迁移功能以及VM的通信加速内核模块之间的接口为:在操作***加载通信加速内核模块时迁移辅助处理功能被初始化子模块调用;在接收到外部在线迁移命令并通过VMM在线迁移子模块的原有在线迁移功能完成VM的迁移后,迁移辅助处理功能被激活;迁移辅助处理的流程及其与其它子模块的接口具体如下:在通信加速内核模块被加载时,添加的迁移辅助处理功能被通信加速内核模块的初始化子模块激活,生成VM的当前位置号,并在当前VMM的当前位置号表中加入该VM的ID和当前位置号,调用通信加速内核模块的VM迁移支持子模块,使后者获取该VM当前位置号的一个拷贝,用于在数据传输和连接关闭时判断VM是否发生了迁移;在接收到外部在线迁移命令并通过原有在线迁移功能完成VM的迁移后,在线迁移子模块中添加的迁移辅助处理功能将当前VM迁移前所在物理计算机上的源VMM中保存的连接控制块、已发送和已接收字节数同步到迁移后的目标VMM中,然后通知目标VMM的在线迁移子模块生成被迁移VM的当前位置号,并更新当前位置号表中的信息;
第二步,采用虚拟机***对VM间通信进行加速,具体步骤为:
2.1VMM启动VM,VMM的虚拟机组管理子模块对虚拟机***中需要进行通信加速的VM进行组管理;
2.2通信加速内核模块的初始化子模块构建VM间通信加速和***调用分析所需的软件环境,方法是:
2.2.1初始化子模块请求操作***保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由VMM建立共享内存缓冲区,用于存放相互通信的VM的连接控制块信息、待传输的数据和待处理的事件;
2.2.2初始化子模块获取当前VM的IP地址及其所在物理计算机的MAC地址,调用VMM的在线迁移子模块,通过函数转换,生成该虚拟机***中每个VM唯一的位置标志信息——当前位置号;VMM的在线迁移子模块在共享缓冲区中为所有VM维护一个当前位置号表,存储虚拟机***中每个VM的ID及该VM的最新当前位置号;在生成当前位置号后,初始化子模块调用在线迁移子模块将该VM的ID及其当前位置号加入当前位置号表中,并调用通信加速内核模块的VM迁移支持子模块,使得后者获取并维护该VM的当前位置号的一个拷贝;
2.3VM客户操作***中的通信加速内核模块接收应用程序或外部命令中的***调用,转发给***调用分析器子模块,***调用分析器子模块首先旁路掉与网络操作无关的***调用,然后选择与网络操作有关的***调用分类进行处理,完成同一物理计算机上的VM间的基于共享内存的快速通信,方法是:
2.3.1若当前***调用的类别是建立网络连接,则:
2.3.1.1连接管控子模块首先通过VMM获得当前VM的组ID及其所在物理计算机的MAC地址,接着判断通信双方VM的虚拟组ID是否相同,如果通信双方虚拟机组ID不同,则无需进行通信加速,按操作***常规的建立TCP网络连接的流程处理;如果通信双方虚拟机组ID相同,则判断通信双方是否位于同一台物理计算机上,按以下方法处理:
2.3.1.1.1如果通信双方不位于同一台物理计算机,则按操作***常规的建立TCP网络连接的流程处理;
2.3.1.1.2如果通信双方位于同一台物理计算机,且该***调用对应的网络连接的连接控制块尚未被添加到连接管控子模块中的连接控制块表中,则调用VMM的域间共享内存子模块,获取源VM和目标VM的数据缓冲区,初始化已发送和已接收的字节数为0,在第2.2.1步中VMM建立的共享内存缓冲区中创建连接控制块,设置连接控制块的初始值,分配用于数据发送或接收的共享缓冲区,最后在连接管控子模块中注册该连接,即将该连接对应的连接控制块添加到连接控制块表中;
2.3.2若当前***调用是数据发送操作,则:
2.3.2.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应当前位置号是否一致;如果一致,表明通信双方VM未发生迁移,转第2.3.2.2步进行基于共享内存的快速数据发送;如果不一致,表明在进行该发送操作前该VM发生了迁移,进行迁移辅助处理:VM迁移支持子模块读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到自身维护的当前位置号拷贝中;为了对已经发送但尚未被接收到的数据进行处理,VM迁移支持子模块查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.2.1.1如果注册了,读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收,数据传输管理子模块等待直到目标VM的接收缓冲区为空,并更新VMM中已接收的字节数,否则表明数据均被接收;回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规的基于TCP连接的数据发送流程处理;
2.3.2.1.2如果未注册,数据传输管理子模块等待直到网络上的数据被接收完毕,然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规的基于TCP连接的数据发送流程处理;若是,则迁移后通信双方在同一台物理计算机上;判断发送数据的当前VM的组ID与目标VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据发送操作,转第2.3.1.1步执行;若不相同,则仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来发送数据;
2.3.3若当前***调用是数据接收操作,则:
2.3.3.1通信加速内核模块的数据传输管理子模块调用VM迁移支持子模块,判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致;如果一致,表明通信双方VM未发生迁移,直接转第2.3.3.2步进行基于共享内存的快速数据接收;如果不一致,表明在进行此接收操作前该VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.3.1.1如果注册了,读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明第2.3.1.1.2步所分配的数据缓冲区中仍有数据未被目标VM所接收;由于迁移后通信双方不在同一台物理计算机上,则当仍有数据未被接收时,首先请数据发送方将用于发送的数据缓冲区中的数据重发一遍,接收完网络上传输的剩余数据后,回收当前连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于TCP协议的方式,按操作***常规流程基于TCP连接来接收数据;
2.3.3.1.2如果未注册,数据传输管理子模块等待目标VM继续接收数据直到网络上的数据被接收完毕;然后判断迁移后通信双方是否在同一台物理计算机上,若不是,则仍然采用基于TCP协议的方式发送数据,按操作***常规流程基于TCP连接来接收数据;若是,则迁移后通信双方在同一台物理计算机上;判断接收数据的当前VM的组ID与源VM的组ID是否相同:如果相同,则表明迁移后源VM和目标VM位于同一物理计算机上且应采用共享内存方式对其通信进行加速,需要建立基于共享内存的连接,于是将当前***调用设置为该数据接收操作,以便在重建连接后继续本次数据接收,然后转第2.3.1.1步;若不相同,则无需用共享内存方式加速通信,仍然采用基于TCP协议的方式,按照操作***常规流程基于TCP连接来接收数据;
2.3.3.2通信加速内核模块的数据传输管理子模块进行基于共享内存的快速数据接收;通信加速内核模块的数据传输管理子模块首先读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前接收操作对应的连接,若不存在,则表明通信双方VM不在同一台物理计算机上,转操作***常规流程基于TCP连接来接收数据,否则判断通信双方VM的虚拟组ID是否相同,如果不相同,则转操作***常规流程基于TCP连接来接收数据,否则按照共享内存的方式接收数据:如果接收缓冲区不为空,则目标VM接收其中的数据,并将已接收数据字节数增加相应的值;若接收操作完毕,则数据接收流程结束,否则按以下方法处理:
2.3.3.2.1当本次I/O为非阻塞式时,转第2.3.3步;
2.3.3.2.2当本次I/O为阻塞式时,则将本接收任务添加到连接控制块的等待接收的睡眠VM队列,调用操作***功能进行睡眠,直至源VM通过通信加速内核模块的通告处理子模块传递发送数据事件唤醒本任务,转第2.3.3步;
2.3.4若当前***调用是关闭网络连接,则:
2.3.4.1通信加速内核模块的连接管控子模块调用VM迁移支持子模块判断其维护的该VM当前位置号拷贝与VMM当前位置号表中的对应值是否一致;如果一致,表明通信双方VM未发生迁移,直接转第2.3.4.2步关闭连接;如果不一致,表明在即将关闭网络连接前VM发生了迁移,进行迁移辅助处理:首先读取VMM的在线迁移子模块维护的当前位置号表中的当前位置号,并将其更新到该VM的VM迁移支持子模块维护的拷贝中;为了对已经发送但尚未被接收到的数据进行处理,查询连接管控子模块中是否注册了该连接对应的连接控制块:
2.3.4.1.1如果注册了,读取VMM中的已发送和已接收的字节数,若前者大于后者,则表明仍有数据未被接收;当仍有数据未被接收时,由于迁移后通信双方VM不在一台物理计算机上,若当前VM是源VM,则等待直到目标VM的接收缓冲区为空,若当前VM是目标VM,则请数据发送方将用于发送的数据缓冲区中的数据重发一遍,并接收网络上传输的重发数据;
2.3.4.1.2如果未注册,则判断当前VM是源VM还是目标VM,如果为源VM,则等待直至网上传输的数据被接收完毕;如果当前VM为目标VM,则读取网络上传输的剩余数据;
2.3.4.2通信加速内核模块的数据传输管理子模块读取连接管控子模块维护和管理的连接控制块表,判断是否存在当前操作对应的连接,若不存在,则转操作***常规流程关闭TCP连接,否则判断通信的另一方VM是否在睡眠,若其正在睡眠,则请求VMM的通告管理子模块通过事件缓冲区向对方发送事件,用于通知后者网络连接已经断开且可以释放数据缓冲区,通告管理子模块通过VMM的事件注入子模块向VM注入当前事件对应的中断,VM中的通信加速内核模块的通告处理子模块接收中断;
2.3.4.3调用VMM的域间共享内存子模块以释放双方的数据缓冲区,判断对方是否已经关闭连接,如果已经关闭,则通过连接管控子模块回收当前连接控制块;
2.4VMM关闭IP为addr、所属组ID为gid、组密钥为key的VM,VMM的虚拟机组管理子模块从组中删除该VM。
2.如权利要求1所述的支持在线迁移的虚拟机间快速通信方法,其特征在于所述连接控制块数据结构包含以下信息:通信的VM双方的IP地址和端口号;I/O模式标志位;一个发送缓冲区和一个接收缓冲区,发送缓冲区和接收缓冲区对应不同的物理内存,本地接收缓冲区和远地的发送缓冲区共享同一片物理内存。
3.如权利要求1所述的支持在线迁移的虚拟机间快速通信方法,其特征在于所述虚拟机组管理子模块对虚拟机***中需要进行通信加速的VM进行组管理的方法为:
3.1根据VM配置文件中的属性值设置VM的IP为addr,其所属组ID为gid,有通信加速需求的VM被分配相同的组ID,组密钥为key;
3.2判断是否是首次在本VMM之上启动虚拟机组ID为gid的VM:
3.2.1若是,则虚拟机组管理子模块创建编号为gid的虚拟机组,其访问密钥为key;
3.2.2若不是,则获得gid对应的虚拟机组并判断提供的key与虚拟机组的key是否一致:如果一致,则创建编号为gid的虚拟机组,其访问密钥为key,在虚拟机组的VM链表中注册本VM,向VMM中的域间共享内存子模块发出请求,由后者为本VM创建事件缓冲区;如果不一致,则报“VM启动失败”信息。
4.如权利要求1所述的支持在线迁移的虚拟机间快速通信方法,其特征在于所述虚拟机组管理子模块从组中删除IP为addr、所属组ID为gid、组密钥为key的VM的方法为:
4.1虚拟机组管理子模块获得gid对应的虚拟机组;
4.2判断提供的key与虚拟机组的key是否一致,如果不一致,则报“权限不够,VM删除失败”信息,转至操作***常规流程;
4.3调用通告管理子模块处理当前VM的事件缓冲区中事件,当事件缓冲区为空时,调用域间共享内存子模块释放事件缓冲区所占内存;
4.4调用VMM进行常规的VM删除流程:
4.4.1如果删除失败,则报“VM删除失败”,转至操作***常规流程;
4.4.2如果删除成功,则将当前VM从本虚拟机组信息中删除,并报告“VM删除成功”;VMM判断当前虚拟机组是否为空,如果为空,则释放本虚拟机组连接控制块表所占用的内存空间,并删除组ID为gid的虚拟机组,报告“组ID为gid的虚拟机组已被删除”。
CN2010101989709A 2010-06-12 2010-06-12 一种支持在线迁移的虚拟机间快速通信方法 Expired - Fee Related CN101859263B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010101989709A CN101859263B (zh) 2010-06-12 2010-06-12 一种支持在线迁移的虚拟机间快速通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101989709A CN101859263B (zh) 2010-06-12 2010-06-12 一种支持在线迁移的虚拟机间快速通信方法

Publications (2)

Publication Number Publication Date
CN101859263A CN101859263A (zh) 2010-10-13
CN101859263B true CN101859263B (zh) 2012-07-25

Family

ID=42945184

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101989709A Expired - Fee Related CN101859263B (zh) 2010-06-12 2010-06-12 一种支持在线迁移的虚拟机间快速通信方法

Country Status (1)

Country Link
CN (1) CN101859263B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108694092A (zh) * 2018-05-11 2018-10-23 华中科技大学 一种面向并行应用的容器通信方法和***

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8707301B2 (en) * 2010-11-08 2014-04-22 Microsoft Corporation Insertion of management agents during machine deployment
CN102122255B (zh) * 2011-03-15 2012-09-05 合肥华云通信技术有限公司 利用虚拟字符设备和genetlink实现Linux***中进程间通信的方法
CN102185774A (zh) * 2011-05-10 2011-09-14 中兴通讯股份有限公司 虚拟机无缝迁移的方法、管理器及***
EP2675127B1 (en) 2011-08-29 2015-07-15 Huawei Technologies Co., Ltd. Method and device for automatically migrating system configuration item
CN103064733A (zh) * 2011-10-20 2013-04-24 电子科技大学 云计算虚拟机热迁移技术
CN102333037A (zh) * 2011-10-20 2012-01-25 中兴通讯股份有限公司 虚拟机迁移方法及装置
CN102768629B (zh) * 2012-04-16 2017-02-08 中兴通讯股份有限公司 基于调度层实现虚拟机间通讯的方法和装置
CN103425500B (zh) * 2012-05-14 2018-02-16 腾讯科技(深圳)有限公司 便携设备应用程序的加载运行方法和装置
CN103294958B (zh) * 2013-05-21 2015-07-22 中国人民解放军国防科学技术大学 面向类Linux***的内核级虚拟聚合并行加密方法
CN103729233A (zh) * 2013-12-20 2014-04-16 中电长城网际***应用有限公司 一种多虚拟机管理方法和装置
CN104951357B (zh) * 2014-03-28 2018-06-26 华为技术有限公司 并行用户态协议栈的管理方法和协议栈***
CN104184729B (zh) * 2014-08-20 2018-05-08 新华三技术有限公司 一种报文处理方法和装置
CN104615485B (zh) * 2015-03-02 2017-07-14 中国人民解放军国防科学技术大学 一种虚拟机域间通信模式的动态透明切换方法
CN106326044B (zh) * 2015-06-30 2019-09-03 华为技术有限公司 一种网卡故障注入方法及装置
CN105119993B (zh) * 2015-08-24 2019-02-26 华为技术有限公司 虚拟机部署方法及装置
CN106997306B (zh) * 2016-01-26 2021-03-09 阿里巴巴集团控股有限公司 物理机数据迁移至云端的方法、装置和***
EP3223456B1 (en) * 2016-03-24 2018-12-19 Alcatel Lucent Method for migration of virtual network function
CN109426547B (zh) * 2017-09-04 2022-05-17 华为技术有限公司 一种虚拟机的热迁移方法、装置和***
JP7017650B2 (ja) * 2018-06-12 2022-02-08 華為技術有限公司 メモリ管理の方法、装置、およびシステム
CN108848098B (zh) * 2018-06-26 2021-02-23 宿州学院 一种嵌入式终端设备的通信通道管理方法及***
CN109101319B (zh) * 2018-08-09 2021-07-27 郑州云海信息技术有限公司 一种在qemu上实现tpcm全虚拟化的平台的工作方法
CN109361693B (zh) * 2018-11-21 2020-11-24 南京中孚信息技术有限公司 虚拟设备通信方法和装置
US20200244772A1 (en) * 2019-01-30 2020-07-30 Huawei Technologies Co., Ltd. Method and system for cloud application and service integration using pattern-based discovery
CN111796902B (zh) * 2019-04-08 2024-03-19 维塔科技(北京)有限公司 切换共享内存区的方法和装置、存储介质和电子设备
CN110262875B (zh) * 2019-06-25 2021-04-27 苏州浪潮智能科技有限公司 基于补丁机制的Windows虚拟机与KVM宿主机的通信方法及***
EP4008090A1 (en) 2019-08-06 2022-06-08 Huawei Technologies Co., Ltd. Method and apparatus for processing data in a network
CN111488247B (zh) * 2020-04-08 2023-07-25 上海云轴信息科技有限公司 一种管控节点多次容错的高可用方法及设备
CN113301004B (zh) * 2020-06-17 2023-05-09 阿里巴巴集团控股有限公司 数据处理方法、装置、通信方法和单网卡虚拟机
CN112351089B (zh) * 2020-10-29 2022-05-13 苏州浪潮智能科技有限公司 一种虚拟机与加速器间的数据传输方法、***及装置
CN114237818B (zh) * 2021-12-01 2022-11-11 科东(广州)软件科技有限公司 虚拟机间共享资源的方法、***、计算设备及存储介质
CN116049096B (zh) * 2022-05-05 2024-04-16 荣耀终端有限公司 一种数据迁移方法、电子设备及存储介质
CN116149820B (zh) * 2023-02-20 2024-02-06 亿咖通(湖北)技术有限公司 基于Xen的域间通信方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101383781A (zh) * 2008-10-30 2009-03-11 中国人民解放军国防科学技术大学 虚拟域间短信息通讯方法
CN101430674A (zh) * 2008-12-23 2009-05-13 北京航空航天大学 一种分布式虚拟机监控器内连通信方法
CN101436966A (zh) * 2008-12-23 2009-05-20 北京航空航天大学 虚拟机环境下的网络监控与分析***
CN101493797A (zh) * 2009-03-12 2009-07-29 华为技术有限公司 数据动态迁移的方法和装置
CN101561769A (zh) * 2009-05-25 2009-10-21 北京航空航天大学 一种基于多核平台虚拟机的进程迁移跟踪方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8479194B2 (en) * 2007-04-25 2013-07-02 Microsoft Corporation Virtual machine migration
US9715401B2 (en) * 2008-09-15 2017-07-25 International Business Machines Corporation Securing live migration of a virtual machine from a secure virtualized computing environment, over an unsecured network, to a different virtualized computing environment

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101383781A (zh) * 2008-10-30 2009-03-11 中国人民解放军国防科学技术大学 虚拟域间短信息通讯方法
CN101430674A (zh) * 2008-12-23 2009-05-13 北京航空航天大学 一种分布式虚拟机监控器内连通信方法
CN101436966A (zh) * 2008-12-23 2009-05-20 北京航空航天大学 虚拟机环境下的网络监控与分析***
CN101493797A (zh) * 2009-03-12 2009-07-29 华为技术有限公司 数据动态迁移的方法和装置
CN101561769A (zh) * 2009-05-25 2009-10-21 北京航空航天大学 一种基于多核平台虚拟机的进程迁移跟踪方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李志伟,吴庆波,谭郁松.基于设备代理机制的虚拟机动态迁移技术研究.《计算机应用研究》.2009,第26卷(第4期), *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108694092A (zh) * 2018-05-11 2018-10-23 华中科技大学 一种面向并行应用的容器通信方法和***

Also Published As

Publication number Publication date
CN101859263A (zh) 2010-10-13

Similar Documents

Publication Publication Date Title
CN101859263B (zh) 一种支持在线迁移的虚拟机间快速通信方法
CN101465863B (zh) 一种内核虚拟机环境下高效网络i/o的实现方法
CN101354693B (zh) 一种异构多核处理器的核间通信调度***及方法
CN104094231B (zh) 用于支持无限带网络中的虚拟机的动态迁移的***和方法
CN110710168B (zh) 跨隔离的网络堆栈的智能线程管理
CN101436966B (zh) 虚拟机环境下的网络监控与分析***
US7149832B2 (en) System and method for interrupt handling
CN100399273C (zh) 一种虚拟机***及其硬件配置方法
CN101901207B (zh) 异构共享存储多处理机***的操作***及其工作方法
CN102609298B (zh) 基于硬件队列扩展的网卡虚拟化***及其方法
CN101430674B (zh) 一种分布式虚拟机监控器内连通信方法
US20080189432A1 (en) Method and system for vm migration in an infiniband network
CN101765225A (zh) 一种虚拟化的集群管理方法和集群节点
CN101968746A (zh) 一种内核虚拟机组织架构模式的实现方法
CN101535965A (zh) 用于提高存储管理***的可伸缩性和可移植性的技术
CN101211271A (zh) 根据活动性状态控制虚拟机
CN103593189A (zh) 一种嵌入式Linux下用户态驱动程序的实现方法
CN102541616A (zh) 一种嵌入式操作***虚拟机及其实现方法
CN102073501A (zh) 一种基于逻辑功能块的网络设备中央控制器的实现方法
CN109918230A (zh) 一种业务板卡异常恢复方法及***
CN101290590A (zh) 一种嵌入式操作***中切换任务的方法和单元
CN106339257A (zh) 使客户机操作***轻量化的方法及***和虚拟化操作***
Abrossimov et al. Virtual memory management in Chorus
CN102147840B (zh) 一种通过虚拟机实现网络控制的方法
WO2024007934A1 (zh) 中断处理方法、电子设备和存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120725

Termination date: 20190612

CF01 Termination of patent right due to non-payment of annual fee