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

文档序号:7751266阅读:124来源:国知局
专利名称:一种支持在线迁移的虚拟机间快速通信方法
技术领域
本发明涉及操作系统领域中的虚拟机间通信方法,尤其是同一台物理计算机上基 于共享内存的多个虚拟机间的通信方法。
背景技术
随着计算机和网络技术的快速发展,用户业务的种类持续增多、规模不断增大,为 满足用户不断增长的需求,通常用户会购置更多的计算机来部署运行增加的业务;而与此 同时,多核处理器的出现使得计算机的处理能力快速提高,于是往往导致计算机利用率降 低、计算效能低下,且造成硬件资源和电能的浪费,出于管理和成本控制的考虑,需要减少 计算机的数量。另一方面,传统的操作系统环境中,各组成之间耦合度较大,某个部件的失 效可能导致整个系统的故障或崩溃,需要有效隔离业务运行环境以提高失效范围的可控 性,从而提高系统的安全性和可靠性。为了提高计算机系统的效能、安全和可靠性,出现了虚拟化方法,即通过虚拟机 监控器 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_pr0cess进程的数据缓冲区通过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、XenS0Cket、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通信管理和控制。这不但修改了操作系
10统内核已有组成代码,而且实现了一个新的内核模块和一个用户态的守护程序,工作量大 且需要修改客户操作系统内核代码。综上所述,支持同一物理计算机上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虚拟化子模块、事件注入子模块、域间共享内存子模 块和在线迁移子模块,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块, 具体方法如下
12\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. 1 VMM启动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. 3 VM客户操作系统中的通信加速内核模块接收应用程序或外部命令中的系统 调用,转发给系统调用分析器子模块,系统调用分析器子模块首先旁路掉与网络操作无关 的系统调用(按操作系统常规流程处理),然后选择与网络操作有关的系统调用分类进行 处理,完成同一物理计算机上的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所接收。由于 迁移后通信双方不在同一台物理计算机上,则当仍有数据未被接收时,首先请数据发送方 将用于发送的数据缓冲区中的数据重发一遍,接收完网络上传输的剩余数据后,回收当前
15连接控制块和数据缓冲区,将数据发送从基于共享内存的方式转为基于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. 4 VMM关闭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连接来接收数据;若是,
23则迁移后通信双方在同一台物理计算机上。此时,判断接收数据的当前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的域间共享内存子模块以释放双方的数据缓冲区,判断对方是 否已经关闭连接,如果已经关闭,则通过连接管控子模块回收当前连接控制块。
2权利要求
一种支持在线迁移的虚拟机间快速通信方法,其特征在于包括以下步骤第一步,构造客户操作系统中的共享内存通信支持模块,扩展虚拟机监控器VMM功能,在已有计算机硬件的基础上,由扩展了的VMM和多个包括通信加速支持的虚拟机VM组成一个虚拟机系统,方法是1.1在客户操作系统中构建支持VM迁移的基于共享内存机制的通信加速内核模块,方法是不修改已有操作系统内核代码,遵循标准的操作系统内核模块开发接口、在Socket通信层添加一个自包含可加载的通信加速内核模块,并在该模块内部构造并添加初始化、系统调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持共六个子模块,方法是1.1.1构造并添加初始化子模块根据当前VM的组ID配置,首先调用VMM的虚拟机组管理子模块来创建组或在相应的组中注册该VM;接着请求操作系统保留连续的虚地址空间,并向VMM的域间共享内存子模块发出请求,由其建立共享内存缓冲区;然后调用VMM的在线迁移子模块以生成VM当前位置号并更新VMM的当前位置号表(VMM的在线迁移子模块在共享内存中为其所在物理计算机上的所有VM维护一个当前位置号表,每一项为VM的ID及其对应的当前位置号);调用VM迁移支持子模块,通知VM迁移支持子模块获取并维护该VM的当前位置号的一个拷贝;当发生系统调用时转到系统调用分析器子模块进行对应用透明的通信加速;1.1.2构造并添加系统调用分析器子模块截获来自网络应用的系统调用请求,首先过滤掉与网络操作无关的系统调用,对于其它系统调用,如果是不同物理计算机上的VM间通信,则仍采用面向TCP/IP网络协议的传统机制处理,如果是位于同一物理计算机上的VM间的通信,则调用连接管控子模块或数据传输管理子模块进行创建或关闭连接、数据传输;1.1.3构造并添加连接管控子模块,连接管控子模块负责网络连接信息的维护和管理,为网络连接信息构造连接控制块;等待发送的睡眠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.1 VMM启动VM,VMM的虚拟机组管理子模块对虚拟机系统中需要进行通信加速的VM进行组管理;2.2通信加速内核模块的初始化子模块构建VM间通信加速和系统调用分析所需的软件环境;2.3 VM客户操作系统中的通信加速内核模块接收应用程序或外部命令中的系统调用,转发给系统调用分析器子模块,系统调用分析器子模块首先旁路掉与网络操作无关的系统调用,然后选择与网络操作有关的系统调用分类进行处理,完成同一物理计算机上的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.4 VMM关闭IP为addr、所属组ID为gid、组密钥为key的VM,VMM的虚拟机组管理子模块从组中删除该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. 4 VMM关闭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所述的支持在线迁移的虚拟机间快速通信方法,其特征在于所述初始 化子模块构建VM间通信加速和系统调用分析所需的软件环境的方法为4. 1初始化子模块请求操作系统保留连续的虚地址空间,并向VMM的域间共享内存子 模块发出请求,由VMM建立共享内存缓冲区,用于存放相互通信的VM的连接控制块信息、待 传输的数据和待处理的事件;4.2初始化子模块获取当前VM的IP地址及其所在物理计算机的MAC地址,调用VMM的 在线迁移子模块,通过函数转换,生成该虚拟机系统中每个VM唯一的位置标志信息——当 前位置号;VMM的在线迁移子模块在共享缓冲区中为所有VM维护一个当前位置号表,存储 虚拟机系统中每个VM的ID及该VM的最新当前位置号;在生成当前位置号后,初始化子模 块调用在线迁移子模块将该VM的ID及其当前位置号加入表中,并调用通信加速内核模块 的VM迁移支持子模块,使得后者获取并维护该VM的当前位置号的一个拷贝。
5.如权利要求1所述的支持在线迁移的虚拟机间快速通信方法,其特征在于所述虚拟 机组管理子模块从组中删除IP为addr、所属组ID为gid、组密钥为key的VM的方法为5. 1虚拟机组管理子模块获得gid对应的虚拟机组;5. 2判断提供的key与虚拟机组的key是否一致,如果不一致,则报“权限不够,VM删 除失败”信息,转至操作系统常规流程;5. 3调用通告管理子模块处理当前VM的事件缓冲区中事件,当事件缓冲区为空时,调 用域间共享内存子模块释放事件缓冲区所占内存;5. 4调用VMM进行常规的VM删除流程5. 4. 1如果删除失败,则报“VM删除失败”,转至操作系统常规流程;5. 4. 2如果删除成功,则将当前VM从本虚拟机组信息中删除,并报告“VM删除成功”; VMM判断当前虚拟机组是否为空,如果为空,则释放本虚拟机组连接控制块表所占用的内存 空间,并删除组ID为gid的虚拟机组,报告“组ID为gid的虚拟机组已被删除”。
全文摘要
本发明公开了一种支持在线迁移的虚拟机间快速通信方法,方案是构造支持VM迁移的基于共享内存机制的通信加速内核模块,在该模块内部添加初始化、系统调用分析器、连接管控、通告处理、数据传输管理、VM迁移支持六个子模块;扩展VMM功能,添加虚拟机组管理和通告管理两个子模块,并修改在线迁移子模块;由VMM和VM组成一个虚拟机系统,采用虚拟机系统对VM间通信进行加速对VM进行组管理,构建VM间通信加速和系统调用分析所需的软件环境,旁路掉与网络操作无关的系统调用,选择与网络操作有关的系统调用分类进行处理,完成同一物理计算机上的VM间的基于共享内存的快速通信。本发明在Socket与TCP/IP层实现、对应用编程透明、支持虚拟机在线迁移。
文档编号H04L29/08GK101859263SQ201010198970
公开日2010年10月13日 申请日期2010年6月12日 优先权日2010年6月12日
发明者任怡, 刘晓建, 吴庆波, 戴华东, 管剑波, 谭郁松 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1