CN114077480B - 一种主机与虚拟机共享内存方法、装置、设备及介质 - Google Patents

一种主机与虚拟机共享内存方法、装置、设备及介质 Download PDF

Info

Publication number
CN114077480B
CN114077480B CN202210057387.9A CN202210057387A CN114077480B CN 114077480 B CN114077480 B CN 114077480B CN 202210057387 A CN202210057387 A CN 202210057387A CN 114077480 B CN114077480 B CN 114077480B
Authority
CN
China
Prior art keywords
host
virtual machine
physical address
address
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.)
Active
Application number
CN202210057387.9A
Other languages
English (en)
Other versions
CN114077480A (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.)
Vita Technology Beijing Co ltd
Original Assignee
Vita Technology Beijing Co ltd
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 Vita Technology Beijing Co ltd filed Critical Vita Technology Beijing Co ltd
Priority to CN202210057387.9A priority Critical patent/CN114077480B/zh
Publication of CN114077480A publication Critical patent/CN114077480A/zh
Application granted granted Critical
Publication of CN114077480B publication Critical patent/CN114077480B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/25Mapping addresses of the same type
    • H04L61/2596Translation of addresses of the same type other than IP, e.g. translation from MAC to MAC addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Power Engineering (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种主机与虚拟机共享内存方法、装置、设备及介质。所述方法包括:建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。该方法基于建立的通信通道能够进行共享内存地址的传输和转换,并将宿主机物理地址映射到服务端进程的虚拟地址空间,能够有效避免现有技术中存在的诸多问题。

Description

一种主机与虚拟机共享内存方法、装置、设备及介质
技术领域
本发明实施例涉及虚拟机技术领域,尤其涉及一种主机与虚拟机共享内存方法、装置、设备及介质。
背景技术
目前,高性能分布式计算和存储使用越发广泛,结合云计算的成熟发展,虚拟云主机成为广大服务云服务商的首选。对于大量的客户端/服务器模型的应用,主机上的服务程序管理真实的物理设备,并为部署在虚拟机中的应用提供虚拟服务,这类服务涉及到虚拟机与主机间的高性能数据交互,通常使用共享内存来完成。
现有技术中,虚拟机和主机之间共享内存的主流的解决方案包括两种:方案一是基于virtio协议的传输通道实现虚拟机和主机之间共享内存,方案二是基于ivshmem,即宿主机与虚拟机之间或多个虚拟机之间共享内存的特殊设备,实现虚拟机和主机之间共享内存。
在方案一中I/O虚拟化的关键是为主机和虚拟机之间建立I/O请求和数据的传输通道,通过在虚拟机中呈现出一个virtio-pci设备作为虚拟磁盘或虚拟网卡,而在主机中使用用户态的virtio、vhost-user或内核态的vhost模块来提供真实的I/O服务,实现I/O虚拟化。根据协议,虚拟机和主机之间会共享一段固定大小的内存,称为vring,用于传输I/O请求和数据。但是,方案一无法直接用于共享内存服务,因为该段内存大小固定,无法灵活地进行分配和回收。且只能使用固定的协议来传输I/O信息,无法直接给虚拟机或主机任意访问。
方案二中的ivshmem在虚拟机内部表现为PCI设备,共享的内存区域则以PCI BAR的形式存在,在构建宿主机和虚拟机之间共享内存,虽然ivshmem这一技术被广泛的使用,但是仍然存在诸多缺点。首先,ivshmem消耗宿主机的内存空间来做数据传输,成本计算困难,在公有云场景中,用户往往按照虚拟机的资源配置进行付费,而ivshmem消耗的宿主机的内存空间,在虚拟机中无法体现,这样就出现了成本计算的困难;其次,ivshmem的大小受限,在大数据量场景下,虚拟机需要大块连续的内存,此情况下ivshmem无法满足用户的需求;此外,ivshmem在虚拟机内部表现为PCI设备,由于PCI插槽数量有限,这就限制了ivshmem的数量以及可能导致和其他PCI设备之间的竞争。
发明内容
本发明实施例提供了一种主机与虚拟机共享内存方法、装置、设备及介质,该方法基于建立的通信通道能够进行共享内存地址的传输和转换,并将宿主机物理地址映射到服务端进程的虚拟地址空间,能够有效避免现有技术中存在的诸多问题。
第一方面,本发明实施例提供了一种主机与虚拟机共享内存方法,包括:
建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
第二方面,本发明实施例还提供了一种主机与虚拟机共享内存装置,包括:
建立模块,用于建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
转换模块,用于在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
映射模块,用于将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备中的主机上安装有虚拟机,所述虚拟机中包括客户端程序,所述主机中包括服务端程序,所述主机内部署vhost-vsock内核模块以及地址映射内核模块;
所述计算机设备还包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器用于执行本发明任意实施例所述的主机与虚拟机共享内存方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的主机与虚拟机共享内存方法。
本发明实施例提供了一种主机与虚拟机共享内存方法、装置、设备及介质,首先建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;然后在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;最后将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。上述方法基于建立的通信通道能够进行共享内存地址的传输和转换,并将宿主机物理地址映射到服务端进程的虚拟地址空间,能够有效避免现有技术中共享内存分配、使用、释放不灵活的问题、由主机分配物理内存共享给虚拟机导致的额外资源占用以及计费困难的问题,以及使用ivshmem共享内存对虚拟机PCI插槽的占用和大小受限问题。
附图说明
图1为本发明实施例一所提供的一种主机与虚拟机共享内存方法的流程示意图;
图2为本发明实施例二所提供的一种主机与虚拟机共享内存方法中主机的软件结构示意图;
图3为本发明实施例三所提供的一种主机与虚拟机共享内存装置的结构示意图;
图4为本发明实施例四所提供的一种计算机设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明。应当理解的是,本发明的附图及实施例仅用于示例性作用,并非用于限制本发明的保护范围。
应当理解,本发明的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本发明实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
实施例一
图1为本发明实施例一所提供的一种主机与虚拟机共享内存方法的流程示意图,该方法可适用于主机与虚拟机之间进程高性能数据交互的情况,该方法可以由主机与虚拟机共享内存装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在终端设备上,在本实施例中终端设备包括但不限于计算机设备。
如图1所示,本发明实施例一提供的一种主机与虚拟机共享内存方法,包括如下步骤:
S110、建立虚拟机的客户端进程与主机的服务端进程之间的通信通道。
其中,所述主机为所述虚拟机的宿主机。
其中,主机是指计算机除去输入输出设备以外的主要机体部分,也是用于放置主板及其他主要部件的控制箱体,通常包括 CPU、内存、主板、光驱、电源、以及其他输入输出控制器和接口。其中,虚拟机是安装在主机上的,必须在主机上才能运行,在主机上安装虚拟机后,相对于虚拟机而言,主机即为虚拟机的宿主机。
其中,客户端进程可以为用于服务器端进行接口的程序,客户端可以是任意的一台电脑,只要它和服务器端存在连接,并且得到了服务器端的授权,就可以使用服务器端的服务。在虚拟机中,存在用户使用共享内存功能的用户态client程序即客户端进程。
其中,服务端是一种有针对性的服务程序,服务端是为客户端服务的,服务的内容可以包括向客户端提供资源以及保护客户端数据。
其中,通信通道可以理解为客户端进程与服务端进程之间进行数据交互的通道。在本实施例中,可以通过标准的socket API建立客户端进程与服务端进程之间的通信通道,该通信通道可以用于在虚拟机的客户端进程以及主机的服务端进程之间传输控制信号以及传输共享内存地址,并完成地址转换。
在本实施例中,通信通道的建立方式可以为通过vhost-vsock内核模块建立。
进一步的,所述虚拟机的客户端进程为客户端程序,所述主机的服务端进程为服务端程序,所述通信通道为Socket通道,相应的,建立所述虚拟机的客户端进程与主机的服务端进程之间的通信通道,包括:通过vhost-vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道。
其中,在客户端/服务器通信模式中,Socket是双方通信通道的抽象封装,用户可通过配置Socket的参数并构建Socket来完成双方的连接,并通过此通道进行网络通信。其中,vhost-vsock内核模块可以理解为一个代码模块,Vhost-vsock是一种虚拟机和主机之间的socket通信方式,类似于标准的TCP/IP协议。
在本实施例中,可以通过标准的Socket API建立Socket连接即Socket通道。具体的,Socket连接可以包括:使用标准的socket API通信接口,主机和每个虚拟机拥有一个全局唯一的cid作为标识,类似于IP地址;通常由主机的服务端进程绑定cid后进行监听,虚拟机的客户端进程连接主机的服务端进程,后者接收连接,实现三次握手,之后可以通过Socket通道进行双向的数据交互。
进一步的,所述通过vhost-vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道,包括:通过所述服务端程序建立vsock服务端;为所述vsock服务端绑定cid地址;对绑定cid地址的vsock端口进行监听;启动所述客户端程序,通过所述vhost-vsock内核模块连接所述绑定cid地址的vsock端口,以完成所述客户端程序与所述服务端程序之间Socket通道的建立。
其中,vsock服务端可以理解为vsock的服务端。其中,cid地址可以理解为一种端口地址,cid是一种内容标识符,将vsock服务端的端口绑定cid地址后,可以通过cid地址识别端口,进而可以对端口进行监听。此时,宿主机内的服务端程序处于等待连接状态,直到虚拟机内的客户端程序启动后,可以通过vhost-vsock内核模块连接vsock端口,建立Socket连接。
S120、在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换。
其中,所述共享内存页面可以理解为能够被所述虚拟机和所述宿主机共享的页面。共享内存页面还可以理解为能够被虚拟机以及宿主机同时访问的内存页面,共享内存页面内可以包括多个页对齐的匿名页面,多个匿名页的数量此处不做具体限制。其中,可以由虚拟机的客户端进程发起共享内存页面的创建。
其中,虚拟机物理地址可以理解为虚拟机的物理地址,宿主机物理地址可以理解为宿主机的物理地址。
具体的,在所述通信通道内完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换的方式可以为:在Socket通道内,通过vhost-vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换。
在本实施例中,可以在vhost-vsock内核模块中截获在Socket通道中传输的报文,以完成虚拟机物理地址到宿主机物理地址的转换。
具体的,所述在所述Socket通道内,通过所述vhost-vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换,包括:通过所述Socket通道传输虚拟内存分配报文至所述服务端程序,所述报文包括共享内存页面的大小;通过所述客户端程序分配多个页对齐的匿名页作为共享内存页面;通过所述客户端程序的地址转换接口,得到所述共享内存页面的虚拟机物理地址;通过所述Socket通道按照分配顺序传输所述共享内存页面的的虚拟机物理地址;通过vhost-vsock内核模块截获包含所述虚拟机物理地址的第一报文;接收到所述第一报文后,通过所述vhost-vsock内核模块解析所述第一报文中包含的虚拟机物理地址,并将所述虚拟机物理地址转换为宿主机物理地址。
其中,虚拟机内客户端程序可以通过Socket通道发送报文给宿主机内服务端程序,宿主机内服务端程序接收到该报文后可以知晓虚拟机内客户端程序需要分配的共享内存页面的内存大小。
其中,得到共享内存页面的虚拟机物理地址可以理解为得到共享内存页面内所有匿名页面所对应的虚拟机的物理地址。
其中,分配顺序可以为客户端程序分配多个匿名页的顺序,虚拟机内客户端程序可以通过Socket通道按照每个匿名页的分配顺序对应传输所有页面的虚拟机物理地址。
其中,第一报文可以理解为包含虚拟机物理地址的报文,vhost-vsock内核模块可以截获包含虚拟机物理地址的报文,并完成虚拟机物理地址到宿主机物理地址的转换。
S130、将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
在本实施例中,可以通过主机的服务端进程进行映射共享内存页面。
在本实施例中,所述将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间包括:通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
其中,地址映射内核模块可以为宿主机内的一个模块,地址映射内核模块可以用于将宿主机物理地址映射到虚拟地址。此处,对通过地址映射内核模块将宿主机物理地址映射到服务端进程的虚拟地址空间的具体过程不做赘述,该部分非本发明重点关注的内容。
具体的,所述通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间,包括:通过所述服务端程序获取包含宿主机物理地址的第二报文;通过所述地址映射内核模块将所述第二报文中的宿主机物理地址映射到所述服务端进程的虚拟地址空间。
其中,第二报文可以理解为包含宿主机物理地址的报文,主机的服务端进程可以获取第二报文,并通过主机内的地址映射内核模块将宿主机物理地址映射到自身虚拟地址空间。
本发明实施例一提供的一种主机与虚拟机共享内存方法,首先建立虚拟机的客户端进程与主机的服务端进程之间的通信通道;然后基于所述通信通道完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;最终将所述宿主机物理地址映射到所述虚拟机的虚拟地址空间。该方法基于建立的通信通道能够进行共享内存地址的传输;通过vhost-vsock内核模块完成共享内存地址的转换;通过地址映射内核模块将宿主机物理地址映射到服务端进程的虚拟地址空间,能够有效避免现有技术中存在的诸多问题。
实施例二
本发明实施例在上述各实施例的技术方案的基础上,提供了一种具体的实施方式。
图2为本发明实施例二所提供的一种主机与虚拟机共享内存方法中主机的软件结构示意图,如图2所示,主机106上安装有虚拟机100,虚拟机100内包括用户端程序101;主机106中包括服务端程序102以及Socket通道103,主机内还部署了vhost-vsock内核模块104以及地址映射内核模块105。
在本实施例中,通过标准的socket API可以建立用户端程序101与服务端程序102之间的Socket通道103,Socket通道103可以用于传输控制信号和共享内存地址,并完成地址转换,Socket通道103通过vhost-vsock内核模块104建立;共享内存页面107可以由用户端程序101分配得到,并通过Socket通道103由vhost-vsock内核模块104在内核态完成GPA即虚拟机物理地址到HPA即宿主机物理地址的转换;服务端程序102可以通过地址映射内核模块105将接收到的HPA映射到服务端程序102的虚拟地址空间。
在主机即宿主机内部署vhost-vsock内核模块104以及地址映射内核模块105以后,可以执行主机与虚拟机共享内存方法,该方法包括如下步骤:
步骤1、宿主机内的服务端程序102建立vsock服务端,绑定cid地址后监听vsock端口;
步骤2、虚拟机内的客户端程序101启动,通过vhost-vsock内核模块104连接vsock端口,建立Socket通道103;
步骤3、客户端程序101通过Socket通道103发送报文给服务端程序102,告知需要分配的虚拟内存的大小即共享内存页面的大小;
步骤4、客户端程序101分配页对齐的匿名页作为共享内存页面107,并通过地址转换API得到共享内存页面107的所有页面的GPA;
步骤5、客户端程序101通过Socket通道103按顺序传输每个页面的GPA;
步骤6、vhost-vsock内核模块104截获包含GPA的报文,解析GPA并进行GPA到HPA的转换;
步骤7、服务端程序102获取包含HPA的报文,通过地址映射内核模块105将HPA映射到自身虚拟地址空间。
至此,共享内存页面107可以由客户端程序101以及服务端程序102共享。
本发明实施例二所提供的一种主机与虚拟机共享内存方法,该方法弥补了传统的I/O虚拟化使用共享内存方案的灵活性问题,为虚拟机内client-宿主机内server模型的高效数据通信提供支持;共享内存由虚拟机按需分配,不会引入额外的宿主机内存占用以及导致计费困难;共享内存管理灵活,其数量和大小不受外部限制;共享内存建立后,使用方法与性能传统共享内存相同,不会引入额外的损耗。
实施例三
图3为本发明实施例三所提供的一种主机与虚拟机共享内存装置的结构示意图,该装置可适用于主机与虚拟机之间进程高性能数据交互的情况,其中该装置可由软件和/或硬件实现,并一般集成在计算机设备上。
如图3所示,该装置包括:建立模块110、转换模块120以及映射模块130。
建立模块110,用于建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
转换模块120,用于在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换,所述共享内存页面被所述虚拟机和所述宿主机共享;
映射模块130,用于将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
在本实施例中,该装置首先通过建立模块110建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;然后通过转换模块120在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;最后通过映射模130块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
本实施例提供了一种主机与虚拟机共享内存装置,该装置基于建立模块、转换模块以及映射模块,能够有效避免现有技术中共享内存分配、使用、释放不灵活的问题、由主机分配物理内存共享给虚拟机导致的额外资源占用以及计费困难的问题,以及使用ivshmem共享内存对虚拟机PCI插槽的占用和大小受限问题。
进一步的,所述虚拟机的客户端进程为客户端程序,所述主机的服务端进程为服务端程序,所述通信通道为Socket通道,相应的,建立模块110具体用于:通过vhost-vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道。
在上述优化的基础上,所述通过vhost-vsock内核模块建立所述客户端程序与所述服务端程序之间的Socket通道,包括:通过所述服务端程序建立vsock服务端;为所述vsock服务端绑定cid地址;对绑定cid地址的vsock端口进行监听;启动所述客户端程序,通过所述vhost-vsock内核模块连接所述绑定cid地址的vsock端口,以完成所述客户端程序与所述服务端程序之间Socket通道的建立。
进一步的,转换模块120具体用于:在所述Socket通道内,通过所述vhost-vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换。
基于上述技术方案,所述在所述Socket通道内,通过所述vhost-vsock内核模块完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换,包括:通过所述Socket通道传输虚拟内存分配报文至所述服务端程序,所述报文包括共享内存页面的大小;通过所述客户端程序分配多个页对齐的匿名页作为共享内存页面;通过所述客户端程序的地址转换接口,得到所述共享内存页面的虚拟机物理地址;通过所述Socket通道按照分配顺序传输所述共享内存页面的虚拟机物理地址;通过vhost-vsock内核模块截获包含所述虚拟机物理地址的第一报文;接收到所述第一报文后,通过所述vhost-vsock内核模块解析所述第一报文中包含的虚拟机物理地址,并将所述虚拟机物理地址转换为宿主机物理地址。
进一步的,映射模块130具体用于:通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
基于上述技术方案,所述通过地址映射内核模块将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间,包括:通过所述服务端进程获取包含宿主机物理地址的第二报文;通过所述地址映射内核模块将所述第二报文中的宿主机物理地址映射到所述服务端进程的虚拟地址空间。
上述主机与虚拟机共享内存装置可执行本发明任意实施例所提供的主机与虚拟机共享内存方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四所提供的一种计算机设备的结构示意图。如图4所示,本发明实施例四提供的计算机设备包括:一个或多个处理器41和存储装置42;该计算机设备中的处理器41可以是一个或多个,图4中以一个处理器41为例;存储装置42用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如本发明实施例中任一项所述的主机与虚拟机共享内存方法。
所述计算机设备中的主机45,主机45上安装有虚拟机,所述虚拟机中包括客户端程序,主机45中包括服务端程序,主机45内部署vhost-vsock内核模块以及地址映射内核模块。
所述计算机设备还可以包括:输入装置43和输出装置44。
计算机设备中的处理器41、存储装置42、输入装置43、输出装置44以及主机45可以通过总线或其他方式连接,图4中以通过总线连接为例。
该计算机设备中的存储装置42作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例一或二所提供的主机与虚拟机共享内存方法对应的程序指令/模块(例如,附图3所示的主机与虚拟机共享内存装置中的模块,包括:建立模块110、转换模块120以及映射模块130)。处理器41通过运行存储在存储装置42中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述方法实施例中的主机与虚拟机共享内存方法。
存储装置42可包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储装置42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置43可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。
并且,当上述计算机设备所包括一个或者多个程序被所述一个或者多个处理器41执行时,程序进行如下操作:
建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
实施例五
本发明实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行主机与虚拟机共享内存方法,该方法包括:
建立虚拟机的客户端进程与主机的服务端进程之间的通信通道,所述主机为所述虚拟机的宿主机;
在所述通信通道内,完成共享内存页面的虚拟机物理地址到宿主机物理地址的转换;
将所述宿主机物理地址映射到所述服务端进程的虚拟地址空间。
可选的,该程序被处理器执行时还可以用于执行本发明任意实施例所提供的主机与虚拟机共享内存方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、可擦式可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)、闪存、光纤、便携式CD-ROM、光存储器件、磁存储器件、或者上述的任意合适的组合。计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、无线电频率(Radio Frequency,RF)等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (9)

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任一项所述的主机与虚拟机共享内存方法。
CN202210057387.9A 2022-01-19 2022-01-19 一种主机与虚拟机共享内存方法、装置、设备及介质 Active CN114077480B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210057387.9A CN114077480B (zh) 2022-01-19 2022-01-19 一种主机与虚拟机共享内存方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210057387.9A CN114077480B (zh) 2022-01-19 2022-01-19 一种主机与虚拟机共享内存方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN114077480A CN114077480A (zh) 2022-02-22
CN114077480B true CN114077480B (zh) 2022-05-13

Family

ID=80284557

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210057387.9A Active CN114077480B (zh) 2022-01-19 2022-01-19 一种主机与虚拟机共享内存方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN114077480B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114625481B (zh) * 2022-03-22 2024-04-05 北京有竹居网络技术有限公司 数据处理方法、装置、可读介质及电子设备
CN115033339A (zh) * 2022-05-09 2022-09-09 阿里巴巴(中国)有限公司 地址映射方法、装置、设备和存储介质
CN115190167B (zh) * 2022-06-29 2024-04-09 深圳市联软科技股份有限公司 一种基于共享内存通信的代理***及方法
CN115686889B (zh) * 2023-01-04 2023-03-28 麒麟软件有限公司 Jailhouse基于ACPI使用Ivshmem的方法
CN116662037B (zh) * 2023-07-24 2023-10-20 杭州鉴智机器人科技有限公司 一种共享内存的处理方法、装置、电子设备及存储介质
CN116991543B (zh) * 2023-09-26 2024-02-02 阿里云计算有限公司 宿主机、虚拟化实例自省方法及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10078528B2 (en) * 2015-10-06 2018-09-18 Centurylink Intellectual Property Llc Virtual machine-to-port peripheral device driver for implementing communications between virtual machines and client devices
CN106874128B (zh) * 2017-01-22 2020-11-20 广州华多网络科技有限公司 数据传输方法及装置
CN108932170A (zh) * 2018-06-06 2018-12-04 华东师范大学 一种同驻虚拟机间高效共享内存文件***的机制
CN111813584A (zh) * 2020-08-05 2020-10-23 Oppo广东移动通信有限公司 内存共享方法、装置、电子设备及存储介质
CN112532585A (zh) * 2020-11-02 2021-03-19 杭州迪普科技股份有限公司 一种进程间报文传输的方法、设备及介质
CN113867993B (zh) * 2021-12-03 2022-03-04 维塔科技(北京)有限公司 虚拟化的rdma方法、***、存储介质及电子设备

Also Published As

Publication number Publication date
CN114077480A (zh) 2022-02-22

Similar Documents

Publication Publication Date Title
CN114077480B (zh) 一种主机与虚拟机共享内存方法、装置、设备及介质
CN107566541B (zh) 容器网络资源分配方法、***、存储介质和电子设备
CN109561171B (zh) 虚拟私有云服务的配置方法和装置
CN110149388B (zh) Httpdns服务器的连接方法、装置及设备
CN113688072A (zh) 数据处理方法及设备
CN107547474A (zh) 一种异构型双***的图形显示方法和设备
US20190007339A1 (en) Method and device for managing stateful application on server
WO2023174013A1 (zh) 显存分配方法、装置、介质及电子设备
CN115686875A (zh) 用于在多个进程之间传输数据的方法、设备和程序产品
CN114201317B (zh) 数据传输方法、装置、存储介质及电子设备
CN115981845A (zh) 一种云端多人协同及ar实时协同方法、装置、介质及设备
CN108551477B (zh) 数据传输通道建立***、网络存储设备、服务器及方法
CN102761545A (zh) 服务处理方法、服务处理器及服务处理***
CN110430478B (zh) 组网通信方法、装置、终端设备及存储介质
CN109981778B (zh) 内容分发网络的服务实现方法、装置、设备及存储介质
CN109218371B (zh) 一种调用数据的方法和设备
EP3913488A1 (en) Data processing method and device
CN109240602B (zh) 数据存取方法
CN112367362A (zh) 一种数据处理方法、装置、设备及计算机存储介质
CN113328874B (zh) 一种应用于nfv***的数据加速方法、装置和***
CN113626160B (zh) 一种基于cavium处理器的网络数据包高并发处理方法与***
CN111107663B (zh) 数据的传输方法及装置、存储介质、电子装置
CN116383127B (zh) 节点间通信方法、装置、电子设备及存储介质
CN117215730B (zh) 数据传输方法、装置、设备及存储介质
CN111782268B (zh) 分配硬件资源的方法、装置、设备和计算机可读介质

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