发明名称 一种虚拟机域间通信模式的动态透明切换方法
摘要 本发明公开了一种虚拟机域间通信模式的动态透明切换方法,目的是解决现有切换方法要么不能保证用户透明性、要么通信效率较低的问题。技术方案是在客户机操作系统中构造由初始化、系统调用截获、共生VM集合维护、共生VM判定、通信优化功能注销5个子模块构成的域间通信优化内核模块;在宿主机操作系统中构造由共生VM动态发现子模块与共生VM发布子模块构成的共生VM动态发现与发布模块;由域间通信优化内核模块和共生VM动态发现与发布模块优化虚拟机域间通信,通过动态发现共生VM、截获网络请求相关的系统调用等手段实现虚拟机域间通信时本地模式与远程模式之间的透明切换,提高了通信效率,且支持VM在线迁移、无需修改操作系统内核。
申请公布号 CN104615485A 申请公布日期 2015.05.13
申请号 CN201510092457.4 申请日期 2015.03.02
申请人 中国人民解放军国防科学技术大学 发明人 任怡;吴庆波;刘仁仕;戴华东;孔金珠;管剑波;邵立松;阳国贵;高珑;史佩昌;刘晓东;吕品
分类号 G06F9/455(2006.01)I;G06F9/54(2006.01)I 主分类号 G06F9/455(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种虚拟机域间通信模式的动态透明切换方法,其特征在于包括以下步骤:第一步,在客户机操作系统中构造域间通信优化内核模块,该模块由客户机共生VM列表、本地通信连接Hash表、初始化子模块、系统调用截获子模块、共生VM集合维护子模块、共生VM判定子模块、通信优化功能注销子模块组成:初始化子模块在VM成功启动且加载域间通信优化内核模块之后被触发,负责构建并初始化客户机共生VM列表、获取系统调用表地址、备份系统调用表中网络请求相关的各个系统调用的缺省处理函数地址、用系统调用截获子模块中入口处理组件替换系统调用缺省处理函数地址,与宿主机共生VM动态发现子模块、通信优化功能注销子模块、系统调用截获子模块连接,将本客户机使用了共生VM域间通信优化功能这一消息发送给宿主机共生VM动态发现子模块,将备份的缺省处理函数地址送给通信优化功能注销子模块,从系统调用截获子模块收到入口处理组件,用入口处理组件中自定义的函数替换系统调用缺省处理函数地址;所述系统调用表是Linux系统内核中固有的数据结构,由系统调用号和处理函数地址组成,在用户程序进行系统调用时,首先会传入系统调用号和参数,系统再通过系统调用号在系统调用表中找到相应的处理函数地址,最后找到相应的处理函数对参数进行处理,系统调用表在操作系统内核中对应一段连续的内存,系统调用表地址即这段内存的起始地址;所述客户机共生VM列表存放与客户机存在共生关系的VM,每个列表项由<DomID,IP>二元组和一个Hash表指针组成,DomID是共生VM的ID,IP是共生VM的IP地址,Hash表指针指向一个本地通信连接Hash表;若系统中存在n个共生VM,则每个客户机中的共生VM列表中有n-1项,第i项代表代表第i个共生VM,表项中的Hash表指针指向客户机与VMi之间的本地通信连接Hash表;所述本地通信连接Hash表中存放的每一项代表Hash表所在的客户机与某共生VM之间的一组本地通信连接,若客户机与VMi存在n组本地通信连接,则客户机共生VM列表第i项Hash表指针所指向的Hash表就存在n项;Hash表项以通信端口号为关键字做Hash运算并存放以下数据:通信端口号;发送缓冲区地址和大小、接收缓冲区地址和大小;系统调用截获子模块由入口处理组件、本地通信连接管控组件、数据发送与接收组件组成;入口处理组件与通信优化功能注销子模块、共生VM判定子模块连接,负责触发本地通信连接管控组件或数据发送与接收组件,将备份的原缺省处理函数地址送给通信优化功能注销模块,将请求的数据发送或接收地址送给共生VM判定模块;本地通信连接管控组件与共生VM集合维护子模块、数据发送与接收组件连接,负责建立或关闭通信双方VM间的基于共享内存的连接,它从共生VM集合维护子模块中接收当前共生VM集合的变化信息,更新通信双方VM间的基于共享内存的连接状态,将基于共享内存的连接状态送给数据发送与接收组件;数据发送与接收组件与共生VM集合维护子模块、入口处理组件及本地通信连接管控组件连接,负责处理数据发送或接收请求,它从入口处理组件接收数据接收或者发送的请求地址及数据,将其送给本地通信管控组件;从共生VM集合维护子模块收到共生VM变更信息,将共生VM变更信息送给本地通信管控组件;共生VM判定子模块与共生VM集合维护子模块和系统调用截获子模块的入口处理组件相连,负责判定通信双方VM是否是共生VM;共生VM判定子模块从系统调用入口处理组件接收请求的IP信息,从共生VM集合维护子模块接收最新的客户机共生VM列表,对客户机共生VM列表执行查找操作,将查找结果送给入口处理组件;共生VM集合维护子模块与宿主机、系统调用截获子模块的本地通信连接管理组件相连,负责更新本客户机中客户机共生VM列表中共生VM集合成员信息;共生VM集合维护子模块接收来自宿主机的共生VM集合成员变更事件和对应的VM的<DomID,IP>、更新本客户机的客户机共生VM列表;通信优化功能注销子模块负责在用户卸载域间通信优化内核模块时注销当前客户机的域间通信优化功能,使得客户机与共生VM之间通信重新采用基于TCP/IP的远程模式;通信优化功能注销子模块与初始化子模块、宿主机、系统调用截获子模块的本地通信管控组件连接,从初始化子模块收到原系统调用缺省处理函数地址,将这些函数地址重写到系统调用表中,将注销消息送给宿主机的共生VM动态发现子模块,将关闭所有共生VM连接的消息发送给客户机的本地通信连接管控组件;第二步,在宿主机操作系统中构造共生VM动态发现与发布模块,该模块由共生VM动态发现子模块与共生VM发布子模块构成;共生VM动态发现子模块负责创建并维护宿主机共生VM列表,它与客户机的初始化子模块、客户机通信优化功能注销子模块连接,将该客户机的DomID和IP添加到宿主机共生VM列表中;从客户机通信优化功能注销子模块接收客户机注销了域间通信优化功能的消息,将该客户机从共生VM列表中删除;共生VM发布子模块负责将共生VM列表发布给本物理机上加载了域间通信优化内核模块的客户机,它与客户机的共生VM集合维护子模块连接,将最新共生VM列表送给客户机的共生VM集合维护子模块;第三步,采用客户机中的域间通信优化内核模块和宿主机中的共生VM动态发现与发布模块优化虚拟机域间通信,具体步骤为:3.1在客户机中加载虚拟域间通信优化内核模块:3.1.1客户机触发域间通信优化内核模块中的初始化子模块,初始化子模块进行以下初始化:3.1.1.1将本客户机“使用了共生VM域间通信优化功能”这一消息发送给宿主机;3.1.1.2构建并初始化客户机共生VM列表,即向系统申请一段内存空间,列表数目为0;3.1.1.3获取本客户机操作系统中的系统调用表地址,备份系统调用表中网络请求相关的各个系统调用的缺省处理函数地址,将系统调用表所在内存页映射到一片新的可写的虚地址空间;3.1.1.4将系统调用截获模块的入口处理组件的地址写入所映射到的内核内存页面中的系统调用表中网络通信请求相关的各表项中,以替换系统调用的原有缺省处理函数地址;3.1.1.5请求操作系统预留连续的虚地址空间,并向VMM发出请求,由其建立共享内存缓冲区,用于存放相互通信的VM的本地通信连接、待传输的数据和待处理的事件;3.2在宿主机中加载共生VM动态发现与发布模块:3.2.1宿主机触发共生VM动态发现子模块;3.2.1.1共生VM动态发现子模块初始化宿主机共生VM列表,即向系统申请一段内存空间,列表数目为0;3.2.1.2共生VM动态发现子模块请求从VMM获取宿主机共生VM列表中的相关客户机的<DomID,IP>映射关系项,以及监测客户机事件:VM创建、VM重启、VM迁入、VM迁出、VM销毁;3.2.2宿主机触发共生VM发布子模块,向所有共生VM列表中的客户机发布最新的<DomID,IP>映射关系项以及客户机事件;3.3客户机中共生VM集合维护子模块接收宿主机共生VM发布子模块发来的信息,针对客户机事件执行以下步骤:3.3.1若收到的事件是VM创建或者VM重启,将创建或重启的VM对应的<DomID,IP>插入到客户机共生VM列表中,并为该列表项初始化一张本地通信连接Hash表,即为本地通信连接Hash表申请一段内存空间,返回值是这段内存空间的首地址,此时Hash表项数目为0;3.3.2若收到的事件是VM迁入,将迁入的VM所对应的<DomID,IP>插入到客户机共生VM列表,为插入的列表项初始化一张本地通信连接Hash表,同时检测迁入前该客户机是否跟本客户机存在通信,若存在,则建立本地连接,同时关闭TCP/IP连接;3.3.3若收到的事件是VM迁出,检测迁出的客户机是否跟本客户机存在本地通信连接,若存在,则保存并处理遗留数据,建立TCP/IP连接,删除客户机共生VM列表中迁出的VM所对应的列表项;3.3.4若收到的共生VM集合成员变更事件为VM销毁,则:关闭同被销毁的VM相关的所有通信连接,删除客户机共生VM列表中对应的列表项;3.4客户机接收应用程序的系统调用和外部命令,针对系统调用或外部命令做如下处理:若是网络通信相关的系统调用,则触发系统调用截获子模块进行处理;若是卸载域间通信优化内核模块的命令,则触发通信优化内核注销子模块进行处理;若是其他系统调用或命令,域间通信优化内核模块不对其做任何处理。具体方法为:3.4.1若系统调用是建立网络连接,则:系统调用截获子模块中的本地通信连接管控组件根据参数IP地址和端口号,首先在客户机共生VM列表中查找IP地址,若得到返回值“‑1”,则说明进行非共生VM通信,交由缺省处理函数处理;若得到非负返回值,则说明是共生VM通信,对于共生VM通信,通过返回值得到IP地址所在的客户机共生VM列表项,再通过客户机共生VM列表项中Hash表指针所指向的本地通信连接Hash表中查找端口号对应的本地通信连接的位置,如果找到,则返回找到的位置值,代表已经建立,转3.4;否则,返回“‑1”,意味未建立,则创建本地通信连接并将本地通信连接插入到本地通信连接Hash表,转3.4;3.4.2若系统调用的类别是数据发送,则:触发系统调用截获子模块中的本地通信连接管控组件,本地通信连接管控组件根据参数IP地址和端口号,查找是否存在通信双方VM对应的本地通信连接,若不存在,则表明当前通信双方已不在同一台物理机上,基于TCP/IP连接发送数据,否则基于第3.4.1步所建立的本地通信连接进行本地数据发送;3.4.3若系统调用的类别是数据接收,则:触发系统调用截获子模块中的本地通信连接管控组件,本地通信连接管控组件根据参数IP地址和端口号,查找是否存在通信双方VM对应的本地通信连接,若不存在,则表明当前通信双方已不在同一台物理机上,基于TCP/IP连接接收数据,否则由系统调用截获子模块中的数据发送与接收组件进行基于共享内存的本地数据接收;3.4.4若系统调用的类别是关闭网络连接,则:触发系统调用截获子模块中的本地通信连接管控组件,本地通信连接管控组件首先根据参数IP和端口号,找到相应的本地通信连接Hash列表项,再对这个列表项执行删除操作;3.4.5若客户机中的域间通信优化内核模块接收到卸载该内核模块的调用请求或外部命令,则注销客户机的通信优化功能,其后的网络通信操作相关的系统调用请求采用常规的基于TCP/IP的通信模式来处理;第四步,卸载宿主机中的共生VM动态发现与发布模块:若共生VM动态发现与发布模块收到卸载该内核模块的调用请求或外部命令,首先通知该宿主机中中共生VM列表中VM对应的各个客户机卸载其域间通信优化内核模块,然后销毁宿主机共生VM列表,最后停止共生VM动态发现与发布模块的运行。
地址 410073 湖南省长沙市开福区德雅路109号