一种主机与虚拟机共享内存方法、装置、设备及介质转让专利
申请号 : CN202210057387.9
文献号 : CN114077480B
文献日 : 2022-05-13
发明人 : 张伟韬 , 傅唯威 , 邹懋 , 陈飞 , 王鲲
申请人 : 维塔科技(北京)有限公司
摘要 :
权利要求 :
1.一种主机与虚拟机共享内存方法,其特征在于,所述方法包括:建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间;
其中,所述通信通道为Socket通道,相应的,所述在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换,包括:在所述Socket通道内,通过vhost‑vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换。
2.根据权利要求1所述的方法,其特征在于,所述虚拟机的客户端进程为客户端程序,所述主机的服务端进程为服务端程序,相应的,建立所述虚拟机的客户端进程与主机的服务端进程之间的通信通道,包括:通过vhost‑vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道。
3.根据权利要求2所述的方法,其特征在于,所述通过vhost‑vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道,包括:通过所述服务端程序建立vsock服务端;
为所述vsock服务端绑定cid地址;
对绑定cid地址的vsock端口进行监听;
启动所述客户端程序,通过所述vhost‑vsock内核模块连接所述绑定cid地址的vsock端口,以完成所述客户端程序与所述服务端程序之间Socket通道的建立。
4.根据权利要求1所述的方法,其特征在于,所述在所述Socket通道内,通过所述vhost‑vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换,包括:
通过所述Socket通道传输虚拟内存分配报文至服务端程序,所述报文包括共享内存页面的大小;
通过客户端程序分配多个页对齐的匿名页作为共享内存页面;
通过所述客户端程序的地址转换接口,得到所述共享内存页面的虚拟机物理地址;
通过所述Socket通道按照分配顺序传输所述共享内存页面的虚拟机物理地址;
通过vhost‑vsock内核模块截获包含所述虚拟机物理地址的第一报文;
接收到所述第一报文后,通过所述vhost‑vsock内核模块解析所述第一报文中包含的虚拟机物理地址,并将所述虚拟机物理地址转换为宿主机物理地址。
5.根据权利要求1所述的方法,其特征在于,所述将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间,包括:通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
6.根据权利要求5所述的方法,其特征在于,所述通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间,包括:通过所述服务端进程获取包含宿主机物理地址的第二报文;
通过所述地址映射内核模块将所述第二报文中的宿主机物理地址映射到所述服务端进程的虚拟地址空间。
7.一种主机与虚拟机共享内存装置,其特征在于,所述装置包括:建立模块,用于建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
转换模块,用于在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
映射模块,用于将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间;
其中,所述通信通道为Socket通道,相应的,转换模块具体用于:在所述Socket通道内,通过vhost‑vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换。
8.一种计算机设备,其特征在于,所述计算机设备中的主机上安装有虚拟机,所述虚拟机中包括客户端程序,所述主机中包括服务端程序,所述主机内部署vhost‑vsock内核模块以及地址映射内核模块;
所述计算机设备还包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器用于执行权利要求1‑6任一项所述的主机与虚拟机共享内存方法。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1‑6任一项所述的主机与虚拟机共享内存方法。
说明书 :
一种主机与虚拟机共享内存方法、装置、设备及介质
技术领域
背景技术
序管理真实的物理设备,并为部署在虚拟机中的应用提供虚拟服务,这类服务涉及到虚拟
机与主机间的高性能数据交互,通常使用共享内存来完成。
主机与虚拟机之间或多个虚拟机之间共享内存的特殊设备,实现虚拟机和主机之间共享内
存。
使用用户态的virtio、vhost‑user或内核态的vhost模块来提供真实的I/O服务,实现I/O虚
拟化。根据协议,虚拟机和主机之间会共享一段固定大小的内存,称为vring,用于传输I/O
请求和数据。但是,方案一无法直接用于共享内存服务,因为该段内存大小固定,无法灵活
地进行分配和回收。且只能使用固定的协议来传输I/O信息,无法直接给虚拟机或主机任意
访问。
但是仍然存在诸多缺点。首先,ivshmem消耗宿主机的内存空间来做数据传输,成本计算困
难,在公有云场景中,用户往往按照虚拟机的资源配置进行付费,而ivshmem消耗的宿主机
的内存空间,在虚拟机中无法体现,这样就出现了成本计算的困难;其次,ivshmem的大小受
限,在大数据量场景下,虚拟机需要大块连续的内存,此情况下ivshmem无法满足用户的需
求;此外,ivshmem在虚拟机内部表现为PCI设备,由于PCI插槽数量有限,这就限制了
ivshmem的数量以及可能导致和其他PCI设备之间的竞争。
发明内容
务端进程的虚拟地址空间,能够有效避免现有技术中存在的诸多问题。
署vhost‑vsock内核模块以及地址映射内核模块;
法。
主机;然后在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的
转换;最后将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。上述方法基于
建立的通信通道能够进行共享内存地址的传输和转换,并将宿主机物理地址映射到服务端
进程的虚拟地址空间,能够有效避免现有技术中共享内存分配、使用、释放不灵活的问题、
由主机分配物理内存共享给虚拟机导致的额外资源占用以及计费困难的问题,以及使用
ivshmem共享内存对虚拟机PCI插槽的占用和大小受限问题。
附图说明
具体实施方式
里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的
是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。
明的范围在此方面不受限制。
“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定
义将在下文描述中给出。
机共享内存装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在终端设备上,
在本实施例中终端设备包括但不限于计算机设备。
控制器和接口。其中,虚拟机是安装在主机上的,必须在主机上才能运行,在主机上安装虚
拟机后,相对于虚拟机而言,主机即为虚拟机的宿主机。
服务。在虚拟机中,存在用户使用共享内存功能的用户态client程序即客户端进程。
道,该通信通道可以用于在虚拟机的客户端进程以及主机的服务端进程之间传输控制信号
以及传输共享内存地址,并完成地址转换。
务端进程之间的通信通道,包括:通过vhost‑vsock内核模块建立所述客户端程序与所述服
务端程序之间的Socket通道。
中,vhost‑vsock内核模块可以理解为一个代码模块,Vhost‑vsock是一种虚拟机和主机之
间的socket通信方式,类似于标准的TCP/IP协议。
局唯一的cid作为标识,类似于IP地址;通常由主机的服务端进程绑定cid后进行监听,虚拟
机的客户端进程连接主机的服务端进程,后者接收连接,实现三次握手,之后可以通过
Socket通道进行双向的数据交互。
定cid地址;对绑定cid地址的vsock端口进行监听;启动所述客户端程序,通过所述vhost‑
vsock内核模块连接所述绑定cid地址的vsock端口,以完成所述客户端程序与所述服务端
程序之间Socket通道的建立。
别端口,进而可以对端口进行监听。此时,宿主机内的服务端程序处于等待连接状态,直到
虚拟机内的客户端程序启动后,可以通过vhost‑vsock内核模块连接vsock端口,建立
Socket连接。
页面内可以包括多个页对齐的匿名页面,多个匿名页的数量此处不做具体限制。其中,可以
由虚拟机的客户端进程发起共享内存页面的创建。
虚拟机物理地址到宿主机物理地址的转换。
存分配报文至所述服务端程序,所述报文包括共享内存页面的大小;通过所述客户端程序
分配多个页对齐的匿名页作为共享内存页面;通过所述客户端程序的地址转换接口,得到
所述共享内存页面的虚拟机物理地址;通过所述Socket通道按照分配顺序传输所述共享内
存页面的的虚拟机物理地址;通过vhost‑vsock内核模块截获包含所述虚拟机物理地址的
第一报文;接收到所述第一报文后,通过所述vhost‑vsock内核模块解析所述第一报文中包
含的虚拟机物理地址,并将所述虚拟机物理地址转换为宿主机物理地址。
存页面的内存大小。
空间。
映射到服务端进程的虚拟地址空间的具体过程不做赘述,该部分非本发明重点关注的内
容。
所述地址映射内核模块将所述第二报文中的宿主机物理地址映射到所述服务端进程的虚
拟地址空间。
空间。
虚拟机物理地址到宿主机物理地址的转换;最终将所述宿主机物理地址映射到所述虚拟机
的虚拟地址空间。该方法基于建立的通信通道能够进行共享内存地址的传输;通过vhost‑
vsock内核模块完成共享内存地址的转换;通过地址映射内核模块将宿主机物理地址映射
到服务端进程的虚拟地址空间,能够有效避免现有技术中存在的诸多问题。
106中包括服务端程序102以及Socket通道103,主机内还部署了vhost‑vsock内核模块104
以及地址映射内核模块105。
址转换,Socket通道103通过vhost‑vsock内核模块104建立;共享内存页面107可以由用户
端程序101分配得到,并通过Socket通道103由vhost‑vsock内核模块104在内核态完成GPA
即虚拟机物理地址到HPA即宿主机物理地址的转换;服务端程序102可以通过地址映射内核
模块105将接收到的HPA映射到服务端程序102的虚拟地址空间。
效数据通信提供支持;共享内存由虚拟机按需分配,不会引入额外的宿主机内存占用以及
导致计费困难;共享内存管理灵活,其数量和大小不受外部限制;共享内存建立后,使用方
法与性能传统共享内存相同,不会引入额外的损耗。
或硬件实现,并一般集成在计算机设备上。
述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;最后通过
映射模130块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
机分配物理内存共享给虚拟机导致的额外资源占用以及计费困难的问题,以及使用
ivshmem共享内存对虚拟机PCI插槽的占用和大小受限问题。
内核模块建立所述客户端程序与所述服务端程序之间的Socket通道。
vsock服务端绑定cid地址;对绑定cid地址的vsock端口进行监听;启动所述客户端程序,通
过所述vhost‑vsock内核模块连接所述绑定cid地址的vsock端口,以完成所述客户端程序
与所述服务端程序之间Socket通道的建立。
传输虚拟内存分配报文至所述服务端程序,所述报文包括共享内存页面的大小;通过所述
客户端程序分配多个页对齐的匿名页作为共享内存页面;通过所述客户端程序的地址转换
接口,得到所述共享内存页面的虚拟机物理地址;通过所述Socket通道按照分配顺序传输
所述共享内存页面的虚拟机物理地址;通过vhost‑vsock内核模块截获包含所述虚拟机物
理地址的第一报文;接收到所述第一报文后,通过所述vhost‑vsock内核模块解析所述第一
报文中包含的虚拟机物理地址,并将所述虚拟机物理地址转换为宿主机物理地址。
二报文;通过所述地址映射内核模块将所述第二报文中的宿主机物理地址映射到所述服务
端进程的虚拟地址空间。
的处理器41可以是一个或多个,图4中以一个处理器41为例;存储装置42用于存储一个或多
个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理
器41实现如本发明实施例中任一项所述的主机与虚拟机共享内存方法。
块。
所提供的主机与虚拟机共享内存方法对应的程序指令/模块(例如,附图3所示的主机与虚
拟机共享内存装置中的模块,包括:建立模块110、转换模块120以及映射模块130)。处理器
41通过运行存储在存储装置42中的软件程序、指令以及模块,从而执行计算机设备的各种
功能应用以及数据处理,即实现上述方法实施例中的主机与虚拟机共享内存方法。
等。此外,存储装置42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至
少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置
42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至
设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或
者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个
或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(Random Access Memory,
RAM)、只读存储器(Read Only Memory,ROM)、可擦式可编程只读存储器(Erasable
Programmable Read Only Memory,EPROM)、闪存、光纤、便携式CD‑ROM、光存储器件、磁存储
器件、或者上述的任意合适的组合。计算机可读存储介质可以是任何包含或存储程序的有
形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
于:电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可
读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于
由指令执行系统、装置或者器件使用或者与其结合使用的程序。
包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全
地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在
用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及
远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网
(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通
过因特网连接)。
重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行
了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还
可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。