虚拟机的设备直通方法、设备及存储介质转让专利

申请号 : CN202010621974.7

文献号 : CN113296876B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 查斌刘奖

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本申请实施例提供一种虚拟机的设备直通方法、设备及存储介质。在虚拟机设备的直通方法中,虚拟机采用第一协议访问主机上遵循第二协议的设备时,可根据第一协议和第二协议的语义对应关系,确定虚拟机的访问请求在第二协议的规范下对应的访问。基于该第二协议的规范下的访问方式,可访问遵循第二协议的设备。进而,可在主机提供的设备遵循的协议与虚拟机的驱动采用的协议不同的情况下,灵活地实现虚拟机与主机上的设备之间的直通,无需在虚拟机中增加与设备遵循的协议对应的驱动,有利于虚拟机更加精简化、轻量化。

权利要求 :

1.一种虚拟机的设备直通方法,应用于虚拟机监视器,其特征在于,所述虚拟机上运行有遵循第一协议的驱动程序;所述方法包括:接收虚拟机通过第一协议访问主机上的设备的第一请求,所述设备遵循第二协议;所述设备在所述虚拟机中呈现为遵循所述第一协议的设备;所述第一协议与所述第二协议不同;

根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式;

根据所述设备访问方式,向所述主机访问所述设备。

2.根据权利要求1所述的方法,其特征在于,根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式,包括:根据所述第一协议和所述第二协议的语义对应关系,将所述第一请求转换为与所述第二协议适配的第二访问请求;

生成与所述第二访问请求对应的访问命令,并根据所述访问命令访问所述设备。

3.根据权利要求2所述的方法,其特征在于,根据所述第一协议和所述第二协议的语义对应关系,将所述第一请求,转换为与所述第二协议适配的第二访问请求,包括:确定所述第一请求中对第一存储空间的访问操作;

根据所述第一存储空间在所述第一协议中的功能定义,在所述第二协议中,确定与所述第一存储空间的功能定义对应的第二存储空间;

将所述第一请求中对所述第一存储空间的访问操作,转换为对所述第二存储空间的访问操作,以得到所述第二访问请求。

4.根据权利要求3所述的方法,其特征在于,生成与所述第二访问请求对应的访问命令,并根据所述访问命令访问所述设备,包括:根据所述第二访问请求中对所述第二存储空间的访问操作,生成对所述第二存储空间的访问命令。

5.根据权利要求4所述的方法,其特征在于,根据所述设备访问方式,向所述主机访问所述设备,包括:

确定所述第二存储空间的访问命令对应的vfio接口;

调用所述vfio接口,向所述主机访问所述设备。

6.根据权利要求3‑5任一项所述的方法,其特征在于,所述第一协议为mmio协议,所述第二协议为pci协议;

所述第一存储空间为所述mmio协议定义的寄存器,所述第二存储空间为pci协议定义的数据数据结构的配置空间。

7.根据权利要求6所述的方法,其特征在于,根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式之前,还包括:对所述mmio协议进行语义解析,以获取所述mmio协议定义的多个寄存器和所述多个寄存器各自的功能定义;以及,

对所述pci协议进行语义解析,以获取所述pci协议定义的多个配置空间和所述多个配置空间各自的功能定义;

根据所述多个寄存器各自的功能定义以及所述多个配置空间各自的功能定义,确定功能定义对等的寄存器和配置空间,并建立所述功能定义对等的寄存器和配置空间的对应关系。

8.根据权利要求1‑5任一项所述方法,其特征在于,所述设备在所述虚拟机中呈现为遵循所述第一协议的块设备或网络设备。

9.一种虚拟机的设备直通方法,应用于虚拟机,其特征在于,所述虚拟机上运行有遵循第一协议的驱动程序;所述方法包括:确定主机提供的至少一个设备,所述至少一个设备遵循第二协议;所述至少一个设备在所述虚拟机中呈现为遵循所述第一协议的设备;所述第一协议与所述第二协议不同;

根据设备使用需求,从所述至少一个设备确定待访问的任一设备;

通过所述遵循第一协议的驱动程序,向虚拟机监视器发送访问所述设备的第一请求,以使所述虚拟机监视器根据所述第一协议和所述第二协议的语义对应关系确定所述第一请求在所述第二协议的规范下对应的设备访问方式并根据所述设备访问方式向所述主机访问所述设备。

10.一种电子设备,其特征在于,包括:存储器和处理器;

所述存储器用于存储一条或多条计算机指令;

所述处理器用于执行所述一条或多条计算机指令以用于:执行权利要求1‑9任一项所述的虚拟机的设备直通方法。

11.一种存储有计算机程序的计算机可读存储介质,其特征在于,计算机程序被处理器执行时能够实现权利要求1‑9任一项所述的虚拟机的设备直通方法。

说明书 :

虚拟机的设备直通方法、设备及存储介质

技术领域

[0001] 本申请涉及计算机视觉技术领域,尤其涉及一种虚拟机的设备直通方法、设备及存储介质。

背景技术

[0002] 在云原生的发展过程中,安全容器逐渐成为被关注的焦点,安全沙箱(sandbox)得到了广泛的应用。安全沙箱可满足云原生的容器标准,为用户提供安全的运行时环境。与此
同时,安全沙箱占用的资源少,具有较快的启动速度。
[0003] 现有的一些安全沙箱中,虚拟机无法灵活地与主机提供的设备实现直通,进而使得虚拟机无法达到与物理设备等同的性能。因此,有待提出一种解决方案。

发明内容

[0004] 本申请的多个方面提供一种虚拟机的设备直通方法、设备及存储介质,用以在安全沙箱中,灵活地实现虚拟机与主机上的设备进行直通,提升安全沙箱的性能。
[0005] 本申请实施例提供一种虚拟机设备的直通方法,包括:接收虚拟机通过第一协议访问主机上的设备的第一请求,所述设备遵循第二协议;根据所述第一协议和所述第二协
议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式;根
据所述设备访问方式,向所述主机访问所述设备。
[0006] 本申请实施例提供一种虚拟机设备的直通方法,包括:确定主机提供的至少一个设备,所述至少一个设备遵循第二协议;根据设备使用需求,从所述至少一个设备确定待访
问的任一设备;通过所述遵循第一协议的驱动程序,向虚拟机监视器发送访问所述设备的
请求,以使所述虚拟机监视器根据所述第一协议和所述第二协议的语义对应关系访问所述
设备。
[0007] 本申请实施例还提供一种电子设备,包括:存储器和处理器;所述存储器用于存储一条或多条计算机指令;所述处理器用于执行所述一条或多条计算机指令以用于:执行本
申请实施例提供的虚拟机的设备直通方法。
[0008] 本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被处理器执行时能够实现本申请实施例提供的虚拟机的设备直通方法。
[0009] 本申请实施例中,虚拟机采用第一协议访问主机上遵循第二协议的设备时,可根据第一协议和第二协议的语义对应关系,确定虚拟机的访问请求在第二协议的规范下对应
的访问。基于该第二协议的规范下的访问方式,可访问遵循第二协议的设备。进而,可在主
机提供的设备遵循的协议与虚拟机的驱动采用的协议不同的情况下,灵活地实现虚拟机与
主机上的设备之间的直通,无需在虚拟机中增加与设备遵循的协议对应的驱动,有利于虚
拟机更加精简化、轻量化。

附图说明

[0010] 此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
[0011] 图1为传统的virtio–pci安全沙箱的结构示意图;
[0012] 图2为本申请一示例性实施例提供的虚拟机的设备直通方法的流程示意图;
[0013] 图3为本申请一示例性实施例提供的安全沙箱的结构示意图;
[0014] 图4为本申请另一示例性实施例提供的虚拟机的设备直通方法的流程示意图;
[0015] 图5为本申请另一示例性实施例提供的virtio–pci安全沙箱的结构示意图;
[0016] 图6为本申请又一示例性实施例提供的虚拟机的设备直通方法的流程示意图;
[0017] 图7本申请一示例性实施例提供的电子设备的结构示意图。

具体实施方式

[0018] 为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一
部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做
出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0019] 为便于后续理解和描述,对本申请各实施例涉及到的部分名词作如下解释:
[0020] 虚拟机(virtual machine),指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
[0021] 沙箱(sandbox),是一个虚拟系统程序,创造了一个独立、相对隔离的作业环境,允许在其中运行浏览器或其他程序。
[0022] host:主机,指的是虚拟机运行的环境或者载体;guest:客户机,指的是运行的虚拟机。
[0023] virtio:一种虚拟化创建的传输协议,用于虚拟机(virtual machine,vm)与主机(host)之间交互时使用。
[0024] pci(peripheral component Interconnect),是一种定义局部总线的标准。
[0025] pci设备:符合pci总线标准的设备就被称为pci设备,pci总线架构中可以包含多个pci设备。
[0026] pcie(peripheral component interconnect express),高速串行计算机扩展总线标准)。
[0027] mmio(Memory‑mapped I/O),内存映射I/O,是pci规范的一部分,其中,I/O表示输入(input)/输出(output)。
[0028] virtio‑mmio:是一种基于virtio协议的传输层功能,主要采用基于内存访问的方式。
[0029] vmm(virtual machine monitor),虚拟机监视器,主要用于管理虚拟机的资源。
[0030] vfio(virtual vunction I/O),虚拟功能I/O,是linux内核将设备I/O、中断、DMA(Direct Memory Access,直接存储器访问)等安全地暴露到用户空间设备驱动框架。
[0031] 在云原生的发展过程中,安全容器逐渐成为被关注的焦点,安全沙箱(sandbox)得到了广泛的应用。安全沙箱可满足云原生的容器标准,为用户提供安全的运行时环境。
[0032] 虚拟机的设备直通(device passthrough),指的是允许虚拟机排他使用主机上的某个设备,以达到将该设备物理连接到虚拟机供虚拟机使用上的效果。
[0033] 在传统的方案中,如图1所示,若需要在安全沙箱内实现virtio‑pci设备的直通,需要在vmm中模拟出pci设备并进行pci设备的配置,然后将pci设备上报至虚拟机内核。在
虚拟机内核中,可通过virtio‑pci driver(pci设备的驱动)来驱动pci设备。但是这种方式
中,pci设备模型较为繁重,且virtio‑pci driver的驱动代码也较为复杂,不利于将安全沙
箱精简化。
[0034] 为精简化安全沙箱,存在一种基于virtio‑mmio实现的安全沙箱。这种安全沙箱使用了精简的设备模型,在保证基本功能需求的情况下,去除了在传统vm场景下不使用的设
备或代码,例如传统vm中具有的pcie设备、键盘鼠标等设备,使用了遵循virtio协议的mmio
设备。基于virtio‑mmio实现的安全沙箱较为简单、安全,它将所有控制流相关的操作下放
到vmm中来实现,在容器内部的虚拟机内核中只保留数据流相关的操作,实现了沙箱的精简
化。
[0035] 但是,这种安全沙箱不能支持底层pci设备的直通,因为pci设备需要vmm与和虚拟机内核支持pci设备模型。也就是说,当安全沙箱使用virtio‑mmio协议以及mmio设备模型
时,无法通过pci设备直通来达到与物理设备等同的性能。
[0036] 为解决上述技术问题,本申请实施例提供了一种新的虚拟机设备直通方法,以下将结合附图进行示例性说明。
[0037] 图2为本申请一示例性实施例提供的虚拟机的设备直通方法的流程示意图,如图2所示,该方法包括:
[0038] 步骤201、接收虚拟机通过第一协议访问主机上的设备的第一请求;所述设备遵循第二协议。
[0039] 步骤202、根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式。
[0040] 步骤203、根据所述设备访问方式,向所述主机访问所述设备。
[0041] 本实施例的执行主体可以是虚拟机监视器(虚拟机监视器),虚拟机监视器可在安全沙箱中管理虚拟机使用的各种资源,并作为虚拟机和主机之间的沟通桥梁。一种典型的
安全沙箱的结构可如图3所示,从上到下依次是:虚拟机内核、虚拟机监视器以及主机。
[0042] 其中,主机可提供多种设备,该设备可以是外部的物理设备,例如块设备、网卡、视频采集卡、电话录音卡等等,上述设备遵循第二协议。
[0043] 虚拟机的内核中,运行有遵循第一协议的驱动,可用于驱动遵循第一协议的设备。为使得虚拟机可以灵活访问遵循第二协议的设备,在本实施例中,虚拟机监视器可执行本
实施例,使得主机上遵循第二协议的设备在虚拟机中可呈现为遵循第一协议的设备,并且,
虚拟机可基于第一协议对该遵循第二协议的设备进行驱动。
[0044] 其中,第一协议和第二协议是虚拟化框架下的两种不同的传输协议,第一协议和第二协议可以属于同一种协议框架,因此,第一协议和第二协议具有一定的语义对应关系。
[0045] 第一协议和第二协议,各自约定了通信传输应当遵守的规则,第一协议和第二协议的语义对应关系,可表现在:语义含义对等的协议规则之间的对应关系。例如,第一协议
和第二协议中,具有相同语义含义的不同字段之间的对应关系、具有相同语义含义的不同
结构之间的对应关系、具有相同功能定义的不同存储空间之间的对应关系、具有相同功能
定义的不同接口之间的对应关系等等,本实施例包含但不限于此。
[0046] 主机提供的设备在虚拟机中呈现为遵循第一协议的设备时,虚拟机中可使用遵循第一协议的设备驱动来访问主机上的设备。其中,该访问操作可包括针对设备的读操作或
者写操作,本实施例不做限制。
[0047] 虚拟机监视器接收到的第一请求符合第一协议的规范,可对该第一请求进行语义解析,并根据第一协议和第二协议的语义对应关系,确定第一请求在第二协议的规范下对
应的访问命令。基于该访问命令,可在主机上访问遵循第二协议的设备。
[0048] 本实施例中,虚拟机采用第一协议访问主机上遵循第二协议的设备时,可根据第一协议和第二协议的语义对应关系,确定虚拟机的访问请求在第二协议的规范下对应的访
问。基于该第二协议的规范下的访问方式,可访问遵循第二协议的设备。进而,可在主机提
供的设备遵循的协议与虚拟机的驱动采用的协议不同的情况下,灵活地实现虚拟机与主机
上的设备之间的直通,无需在虚拟机中增加与设备遵循的协议对应的驱动,有利于虚拟机
更加精简化、轻量化。
[0049] 在一些场景下,虚拟机对主机上的设备进行访问的操作,主要包括读取设备的存储空间以获取设备的相关信息的操作,或者向设备的存储空间中写入特定信息的操作。基
于此,可在虚拟机通过第一协议访问主机上遵循第二协议的设备时,根据虚拟机的访问请
求中的存储空间的语义含义,将该存储空间映射到设备的存储空间,以实现设备的驱动。以
下将结合图4以及图5进行示例性说明。
[0050] 图4为本申请另一示例性实施例提供的虚拟机的设备直通方法的流程示意图,如图4所示,该方法在虚拟机监视器一侧执行时,可包括如下的步骤:
[0051] 步骤401、接收虚拟机通过第一协议访问主机上的设备的第一请求,所述设备遵循第二协议。
[0052] 步骤402、确定所述第一请求中对第一存储空间的访问操作。
[0053] 步骤403、根据所述第一存储空间在所述第一协议中的功能定义,在所述第二协议中,确定与所述第一存储空间的功能定义对应的第二存储空间。
[0054] 步骤404、将所述第一请求中对所述第一存储空间的访问操作,转换为对所述第二存储空间的访问操作,以得到所述第二访问请求。
[0055] 步骤405、根据所述第二访问请求中对所述第二存储空间的访问操作,生成对所述第二存储空间的访问命令。
[0056] 步骤406、确定所述第二存储空间的访问命令对应的vfio接口。
[0057] 步骤407、调用所述vfio接口,向所述主机访问所述设备。
[0058] 本实施例的执行主体为虚拟机监视器,虚拟机监视器位于虚拟机以及主机之间。虚拟机中运行有遵循第一协议的设备驱动,主机上安装有遵循第二协议的设备。在步骤401
中,虚拟机使用主机上的设备时,可向虚拟机监视器发送设备访问请求。
[0059] 在步骤402中,虚拟机监视器接收到虚拟机的第一请求时,可对第一请求进行解析,以获取第一请求对存储空间的访问操作。在本实施例中,为便于描述和区分,将虚拟机
采用第一协议请求访问的存储空间描述为第一空间。
[0060] 其中,对第一存储空间的访问操作,可包括对第一存储空间的读操作或者对第一存储空间的写操作。例如,在一种情况下,虚拟机在对设备进行配置时,可向虚拟机监视器
请求将指定的配置信息写入设备的第一存储空间中。又例如,在另一些情况下,虚拟机可向
虚拟机监视器请求读取设备的当前配置信息,例如设备的IO地址信息、队列信息等等,不再
赘述。
[0061] 在步骤403中,虚拟机监视器中存有第一协议和第二协议在存储空间上的对应关系,该存储空间上的对应关系,可根据第一协议对存储空间的功能定义和第二协议对存储
空间的功能定义确定。其中,确定两种协议该存储空间上的对应关系的实施方式可基于对
两种协议进行语义分析实现,将在后续进行介绍。
[0062] 基于该存储空间上的对应关系,虚拟机监视器可在第二协议的存储空间中,确定与第一存储空间对应的存储空间,为便于描述和区分,将确定得到的与第一存储空间对应
的存储空间描述为第二存储空间。
[0063] 确定第二存储空间后,在步骤404中,可将对第一存储空间的访问操作,翻译为对第二存储空间的访问操作。该对第二存储空间的访问操作遵循第二协议的规范,因此是主
机上的设备可以识别的操作。
[0064] 上述“第一存储空间”和“第二存储空间”,仅用于区分两种不同协议下的存储空间,并不对存储空间的排序、地址等构成任何限定。
[0065] 在本实施例中,虚拟机监视器对主机上的设备的访问操作,可通过调用vfio接口实现。其中,vfio是一套用户态驱动框架,可向用户态提供设备访问接口,在虚拟化场景中,
可实现高效的设备驱动。
[0066] 在步骤405可基于对第二存储空间的访问操作,生成对第二空间的访问命令,并在步骤406以及步骤407中,基于该访问命令调用对应的vfio接口,以实现对主机上的设备的
访问操作。当虚拟机基于上述方式灵活访问主机上的设备时,虚拟机的性能可以得到极大
提升,甚至可达到与物理机同等的性能。
[0067] 以下将结合具体的协议对上述实施例进行进一步说明。
[0068] 在一些可选的实施例中,第一协议实现为mmio协议,第二协议实现为pci协议,一种安全沙箱的结构可如图5所示。在图5中,虚拟机中运行的设备驱动为virtio‑mmio‑
driver,主机提供的设备为pci设备。其中,pci设备可包括:网卡(network card)、块设备
(block device)、内存膨胀设备(memory ballooning)、控制台(console)、小型计算机系统
接口主机设备(Small Computer System Interface host,SCSI host)、熵源(entropy 
source)、9P传输设备(9P transport)等等。上述pci设备在虚拟机中可呈现为mmio模型中
的块存储设备和/或网络设备。
[0069] 由于mmio协议和pci协议均遵循virtio协议的框架规范,因此,mmio协议和pci协议中,存在部分协议内容表达对等的语义含义。基于此,在实现虚拟机与pci设备的直通之
前,虚拟机监视器可基于mmio协议和pci协议各自表达的协议内容,建立mmio协议和pci协
议的语义对应关系,以供后续使用。
[0070] 可选地,虚拟机监视器可对mmio协议进行语义解析,以获取mmio协议定义的多个寄存器和该多个寄存器各自的功能定义。与此同时,虚拟机监视器可对pci协议进行语义解
析,以获取pci协议定义的多个配置空间和该多个配置空间各自的功能定义。接下来,可根
据该多个寄存器各自的功能定义以及该多个配置空间各自的功能定义,确定功能定义对等
的寄存器和配置空间。
[0071] 其中,语义解析操作可基于自然语言处理算法实现,本实施例不做赘述。
[0072] 例如,可在mmio协议中获取功能定义为厂商标识(Vendor ID)的寄存器A1,在pce协议中获取功能定义为厂商标识(Vendor ID)的配置空间B1,并建立寄存器A1和配置空间
B1的对应关系;可在mmio协议中获取功能定义为设备标识(Device ID)的寄存器A2,在pce
协议中获取功能定义为设备标识(Device ID)的配置空间B2,并建立寄存器A2和配置空间
B2的对应关系;可在mmio协议中获取功能定义为设备状态字(Status)的寄存器A3,在pce协
议中获取功能定义为设备状态字(Status)的配置空间B3,并建立寄存器A3和配置空间B3的
对应关系;可在mmio协议中获取功能定义为设备命令(Command)的寄存器A4,在pce协议中
获取功能定义为设备命令(Command)的配置空间B4,并建立寄存器A4和配置空间B4的对应
关系;同理,可获取mmio协议中的其他寄存器与pci协议中的其他配置空间的对应关系,不
再一一进行赘述。
[0073] 基于上述方式获取到的部分存储空间的对应关系可如以下表格所示:
[0074] mmio寄存器 pci配置空间 功能定义0x00c 0x1AF4 Vendor ID
0x008 0x1000~0x107F Device ID
[0075] 相应地,在步骤402‑步骤404中,虚拟机监视器可从第一请求中,确定虚拟机访问的寄存器,并基于该寄存器在mmio协议中的功能定义,在pci协议中确定具有同样功能定义
的配置空间。并将虚拟机基于mmio协议访问寄存器的操作,转换为基于pci协议访问配置空
间的操作。
[0076] 应当理解,建立mmio协议和pci协议的语义对应关系的操作也可以由其他设备,例如服务器执行,并由服务器写入虚拟机监视器;或者,可以由用户手动建立上述两种协议的
语义对应关系,并由用户写入虚拟机监视器,本实施例不做限制。
[0077] 相应地,在步骤405中,承接上述例子,第一存储空间实现为mmio协议定义的寄存器,第二存储空间实现为pci协议定义的配置空间时,在本步骤中,可根据对pci的配置空的
访问操作,生成对应的访问命令。该访问命令可以是读pci设备的配置空间的命令,或者可
以是写pci设备的配置空间的命令,根据实际需求而定,本实施例不做限制。
[0078] 基于上述实施方式,guest kernel(客户机内核)中呈现的不是pci设备,而是mmio设备,即guest kernel可使用virtio‑mmio driver来驱动此设备。mmio设备模型相对pci设
备模型较为精简,可节省guest对资源的占用。例如,在一实例中,通过对比virtio‑pci方案
与virtio‑mmio方案,得到如下对比结果:virtio‑pci方案的代码文件数量是161个文件,代
码行78K左右,virtio‑mmio方案的代码文件数量1个文件,代码500行左右。基于上述对比结
果可知,本方案实现了代码的大幅度精简,减少了许多设备的驱动,在加固了安全性的同
时,使得编译后的guest kernel也实现轻量化。
[0079] 除此之外,在虚拟机监视器中,guest kernel中呈现的是virtio‑mmio设备,因此不需要在虚拟机监视器中去模拟复杂的pci设备模型。虚拟机监视器中,模拟pci设备需要
的数据量为8‑9K,而模拟机mmio设备需要的数据量则小于1K。因此,可同时实现虚拟机监视
器的精简化、轻量化。
[0080] 在虚拟机监视器中,采用协议转换,将virtio‑mmio转换为virtio‑pci,并通过调用vfio接口来实现设备驱动,极大增加了虚拟机和主机上的设备之间进行直通的灵活性。
例如,在一种场景下,主机提供有mmio设备以及pci设备,guest kernel中运行有virtio‑
mmio驱动。基于本实施例提供的技术方案,guest kernel可使用一种精简的驱动,同时实现
mmio设备的直通以及pci设备的直通。在实际运行中,guest kernel可根据需求,选择使用
mmio设备或pci设备,极大提升了虚拟机的性能,使其性能更加接近物理机。
[0081] 图6为本申请又一示例性实施例提供的虚拟机的设备直通方法的流程示意图,该方法可由虚拟机执行,如图6所示,该方法虚拟机一侧执行时,可包括以下的步骤:
[0082] 步骤601、虚拟机确定主机提供的至少一个设备;其中,虚拟机中运行有遵循第一协议的驱动程序,该至少一个设备遵循第二协议。
[0083] 步骤602、虚拟机根据设备使用需求,从该至少一个设备确定待访问的任一设备。
[0084] 步骤603、虚拟机通过该遵循第一协议的驱动程序,向虚拟机监视器发送访问该设备的请求,以使虚拟机监视器根据第一协议和第二协议的语义对应关系访问该设备。
[0085] 在本实施例中,对于虚拟机而言,主机提供的遵循第二协议的设备可被感知为遵循第一协议的设备,例如遵循第一协议的块设备或者网络设备等等。进而,虚拟机可基于遵
循第一协议的驱动程序对主机提供的设备进行驱动。在这种方式中,虚拟机中不再需要对
应地新增遵循第二协议的驱动程序,有利于虚拟机的精简化。
[0086] 其中,虚拟机监视器根据第一协议和第二协议的语义对应关系访问该设备的可选实施方式可参考前述实施例的记载,此处不再赘述。
[0087] 在一些实施例中,第一协议可实现为mmio协议,第二协议可实现为pci协议。也就是说,当主机提供pci设备时,这些pci设备在虚拟机内核中呈现的不是pci设备,而是mmio
设备。基于此,虚拟机可基于遵循mmio协议的驱动程(例如virtio‑mmio驱动)序来驱动主机
上的pci设备。
[0088] 相对于virtio‑pci驱动而言,virtio‑mmio驱动的代码更加精简。因此,当虚拟机中不需要运行遵循pci协议的驱动程序即可实现与主机上的pci设备实现直通时,虚拟机内
核可进一步精简化、轻量化。
[0089] 基于上述各实施例记载的实施方式,将传统的virtio‑pci设备以virtio‑mmio设备的形式直通到guest中。利用virtio‑mmio本身精简的设备模型,可将本方案应用到多种
安全沙箱与serverless(无服务器)产品中。例如,可用于搭建微虚拟机(micro‑vm)、可应用
于弹性容器实例ECI(Elastic Container Instance,弹性容器实例)产品中,或者用于服务
serverless的容器编排场景中,不再赘述。
[0090] 需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤201至步骤203的执行主体可以为设备
A;又比如,步骤201和202的执行主体可以为设备A,步骤203的执行主体可以为设备B;等等。
[0091] 另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行
执行,操作的序号如201、202等,仅仅是用于区分开各个不同的操作,序号本身不代表任何
的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或
并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、
模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
[0092] 图7是本申请一示例性实施例提供的电子设备的结构示意图,如图7所示,该电子设备包括:存储器701以及处理器702。
[0093] 存储器701,用于存储计算机程序,并可被配置为存储其它各种数据以支持在电子设备上的操作。这些数据的示例包括用于在电子设备上操作的任何应用程序或方法的指
令,联系人数据,电话簿数据,消息,图片,视频等。
[0094] 其中,存储器701可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程
只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,
磁盘或光盘。
[0095] 处理器702,与存储器701耦合,用于执行存储器701中的计算机程序,以用于:接收虚拟机通过第一协议访问主机上的设备的第一请求,所述设备遵循第二协议;根据所述第
一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应
的设备访问方式;根据所述设备访问方式,向所述主机访问所述设备。
[0096] 进一步可选地,处理器702在根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式时,具体用于:根据所述
第一协议和所述第二协议的语义对应关系,将所述第一请求,转换为与所述第二协议适配
的第二访问请求;生成与所述第二访问请求对应的访问命令,并根据所述访问命令访问所
述设备。
[0097] 进一步可选地,处理器702在根据所述第一协议和所述第二协议的语义对应关系,将所述第一请求,转换为与所述第二协议适配的第二访问请求时,具体用于:确定所述第一
请求中对第一存储空间的访问操作;根据所述第一存储空间在所述第一协议中的功能定
义,在所述第二协议中,确定与所述第一存储空间的功能定义对应的第二存储空间;将所述
第一请求中对所述第一存储空间的访问操作,转换为对所述第二存储空间的访问操作,以
得到所述第二访问请求。
[0098] 进一步可选地,处理器702在生成与所述第二访问请求对应的访问命令,并根据所述访问命令访问所述设备时,具体用于:根据所述第二访问请求中对所述第二存储空间的
访问操作,生成对所述第二存储空间的访问命令。
[0099] 进一步可选地,处理器702在根据所述设备访问方式,向所述主机访问所述设备时,具体用于:确定所述第二存储空间的访问命令对应的vfio接口;调用所述vfio接口,向
所述主机访问所述设备。
[0100] 进一步可选地,所述第一协议为mmio协议,所述第二协议为pci协议;所述第一存储空间为所述mmio协议定义的寄存器,所述第二存储空间为pci协议定义的数据数据结构
的配置空间。
[0101] 进一步可选地,处理器702在根据所述第一协议和所述第二协议的语义对应关系,确定所述第一请求在所述第二协议的规范下对应的设备访问方式之前,还用于:对所述
mmio协议进行语义解析,以获取所述mmio协议定义的多个寄存器和所述多个寄存器各自的
功能定义;以及,对所述pci协议进行语义解析,以获取所述pci协议定义的多个配置空间和
所述多个配置空间各自的功能定义;根据所述多个寄存器各自的功能定义以及所述多个配
置空间各自的功能定义,确定功能定义对等的寄存器和配置空间,并建立所述功能定义对
等的寄存器和配置空间的对应关系。
[0102] 进一步可选地,所述设备在所述虚拟机中呈现为遵循所述第一协议的块设备或网络设备。
[0103] 进一步,如图7所示,该电子设备还包括:通信组件703、显示组件704、电源组件705、音频组件706等其它组件。图7中仅示意性给出部分组件,并不意味着电子设备只包括
图7所示组件。
[0104] 其中,通信组件703被配置为便于通信组件所在设备和其他设备之间有线或无线方式的通信。通信组件所在设备可以接入基于通信标准的无线网络,如WiFi,2G、3G、4G或
5G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理
系统的广播信号或广播相关信息。在一个示例性实施例中,通信组件可基于近场通信(NFC)
技术、射频识别(RFID)技术、红外数据协会(IrDA)技术、超宽带(UWB)技术、蓝牙(BT)技术和
其他技术来实现。
[0105] 其中,显示组件704包括屏幕,其屏幕可以包括液晶显示组件(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触
摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感
器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时
间和压力。
[0106] 其中,电源组件705,为电源组件所在设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所在设备生成、管理和分配电力相
关联的组件。
[0107] 本实施例中,虚拟机采用第一协议访问主机上遵循第二协议的设备时,可根据第一协议和第二协议的语义对应关系,确定虚拟机的访问请求在第二协议的规范下对应的访
问。基于该第二协议的规范下的访问方式,可访问遵循第二协议的设备。进而,可在主机提
供的设备遵循的协议与虚拟机的驱动采用的协议不同的情况下,灵活地实现虚拟机与主机
上的设备之间的直通,无需在虚拟机中增加与设备遵循的协议对应的驱动,有利于虚拟机
更加精简化、轻量化。
[0108] 除上述实施例记载的执行逻辑之外,图7所示的电子设备还可执行如下的处理逻辑:处理器702确定主机提供的至少一个设备,所述至少一个设备遵循第二协议;根据设备
使用需求,从所述至少一个设备确定待访问的任一设备;通过所述遵循第一协议的驱动程
序,向虚拟机监视器发送访问所述设备的请求,以使所述虚拟机监视器根据所述第一协议
和所述第二协议的语义对应关系访问所述设备。具体可参考前述实施例的记载,此处不再
赘述。
[0109] 相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,计算机程序被执行时能够实现上述方法实施例中可由电子设备执行的各步骤。
[0110] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机
可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产
品的形式。
[0111] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流
程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产
生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实
现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0112] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或
多个方框中指定的功能。
[0113] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或
其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一
个方框或多个方框中指定的功能的步骤。
[0114] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0115] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的
示例。
[0116] 计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动
态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除
可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、
数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备
或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算
机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0117] 还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包
括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要
素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要
素的过程、方法、商品或者设备中还存在另外的相同要素。
[0118] 以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同
替换、改进等,均应包含在本申请的权利要求范围之内。