半虚拟化设备配置空间直接访问方法、装置、设备、介质与流程

文档序号:33119164发布日期:2023-02-01 03:22阅读:29来源:国知局
半虚拟化设备配置空间直接访问方法、装置、设备、介质与流程

1.本发明涉及虚拟化技术领域,具体涉及一种半虚拟化设备配置空间直接访问方法、装置、设备、介质。


背景技术:

2.kvm,全称为kernel-based virtual machine,是一种基于linux内核的硬件辅助虚拟化技术,相比于传统的纯软件模拟的虚拟化技术,kvm具有较高的性能并且能支持在相应硬件上能运行的几乎所有的操作系统。kvm目前设计为通过可加载的内核模块,支撑广泛的虚拟机操作系统,比如linux、bsd、solaris、windows、haiku、reactos和aros reserarch operation system。kvm模块与qemu共同作用,共同实现虚拟化功能,其中,kvm主要完成内存和cpu的虚拟化,qemu完成io的虚拟化。
3.virtio是kvm采用的一种半虚拟化技术,主要分为前端和后端以及虚拟队列virtqueue,前端主要位于虚拟机内部,是虚拟机内部模拟的virtio设备对应的驱动,目前常见的前端驱动主要有virtio_net,virtio_balloon,virtio_scsi等。后端驱动主要由qemu来模拟,也可以由内核来模拟,例如vhost-net。virtqueue是前端和后端进行数据共享的一个虚拟队列,主要由虚拟机前端创建。前端驱动主要用来接收用户的请求,接收到用户的请求后,会将请求信息保存到virtqueue中,然后通知后端驱动,后端驱动接收到请求信息后,会从virtqueue中获取到请求信息进行处理。
4.在虚拟机中,大部分virtio设备是基于pci实现的,也要实现自己的配置空间,virtio设备除了实现pci spec预定的配置空间外,还实现了virtio通用的配置空间。kvm在virtio设备模拟过程中需要访问virtio设备配置空间,与内存访问不同,虚拟机在访问virtio配置空间时,并不会建立ept页表,这样造成了虚拟机在每次访问virtio配置空间时都会触发vm exit,然后由后端qemu代替虚拟机完成virtio配置空间的访问,这样由于频繁的vmexit会造成虚拟机性能的下降。


技术实现要素:

5.为了减小virtio配置空间访问对虚拟机性能的影响,本文提出了一种virtio配置空间直接访问方法、装置、设备、介质,通过增加新的virtio配置空间,保存virtio配置空间的hpa,然后在virtio驱动初始化时,将virtio配置空间映射到内核虚拟空间中,然后建立虚拟内存到hpa的直接映射,可以通过访问内核虚拟地址直接访问virtio配置空间,无需后端qemu的协助处理,也无需查询ept页表,通过此方法,可以减少vm exit,提高了虚拟机的性能。
6.第一方面,本发明技术方案提供一种半虚拟化设备配置空间直接访问方法,所述半虚拟化设备为virtio设备,半虚拟化设备配置空间为virtio设备配置空间,即virtio配置空间,所述方法包括如下步骤:
7.虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设
备配置空间申请的物理地址;
8.虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;
9.建立虚拟地址到物理地址之间的映射关系;
10.虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;
11.根据计算出的实际要访问半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间。
12.通过增加新的半虚拟化设备配置空间,保存半虚拟化设备配置空间的物理地址,然后在半虚拟化设备驱动初始化时,将半虚拟化设备配置空间映射到内核虚拟空间中,然后建立虚拟地址到物理地址的直接映射关系,可以通过访问内核虚拟地址直接访问半虚拟设备配置空间,无需后端qemu的协助处理,也无需查询ept页表,通过此方法,可以减少vm exit,提高了虚拟机的性能。
13.进一步的,虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址的步骤之前包括:
14.增加用于确定是否开启半虚拟化设备配置空间直接访问的半虚拟化设备配置空间直接访问参数。
15.通过设置直接访问参数,虚拟机启动过程中通过参数值判断是否开启了配置空间的直接访问。
16.进一步的,虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址的步骤包括:
17.虚拟机启动过程中,模拟半虚拟化设备;
18.构造半虚拟化设备配置空间,并为半虚拟化设备配置空间分配内存;
19.获取半虚拟化设备配置空间直接访问参数的参数值;
20.根据获取的参数值判断是否开启配置空间直接访问功能;
21.若是,增加新的半虚拟化设备配置空间cap;
22.获取半虚拟化设备配置空间虚拟地址对应的物理地址;
23.将获取到的物理地址保存到cap中;
24.启动虚拟机;
25.若否,直接执行步骤:启动虚拟机。
26.在虚拟机启动过程中,qemu需要模拟半虚拟化设备,然后qemu会为半虚拟化设备构造配置空间,为配置空间分配内存,然后为半虚拟化设备配置空间填充信息。初始化半虚拟化设备配置空间,保存半虚拟化设备配置空间的物理地址。
27.进一步的,虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间的步骤包括:
28.虚拟机内核加载半虚拟化设备驱动;
29.半虚拟化设备驱动初始化时获取半虚拟化设备配置空间结构布局;
30.将半虚拟化设备配置空间的结构布局映射到虚拟机内核虚拟空间。
31.半虚拟化设备驱动初始化时将配置空间映射到内核虚拟空间,方便后续建立映射关系。
32.进一步的,建立虚拟地址到物理地址之间的映射关系的步骤包括:
33.读取半虚拟化设备配置空间的cap中保存的物理地址;
34.根据内核虚拟空间的虚拟地址和读取的物理地址建立虚拟地址到物理地址之间的映射关系。
35.建立虚拟地址与物理地址之间的映射关系实际上是建立页表关系。
36.进一步的,虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址的步骤包括:
37.虚拟机访问半虚拟化设备配置空间,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址;
38.计算要访问的半虚拟化设备配置空间的地址到获取的虚拟地址的偏移;
39.根据虚拟地址到物理地址之间的映射关系获取半虚拟化设备配置空间对应的物理地址;
40.根据计算的偏移和获取的物理地址计算实际要访问半虚拟化设备配置空间的地址。实现通过访问内核虚拟地址直接访问半虚拟化设备配置空间,无需后端qemu的协助处理。
41.进一步的,根据计算出的实际要访问半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间的步骤包括:
42.当要读取半虚拟化设备配置空间信息时,调用对应的read函数,根据计算出的半虚拟化设备配置空间的地址执行读操作;
43.当要要向配置空间写入信息时,调用对应的write函数,根据计算出的半虚拟化设备配置空间的地址执行写操作。
44.第二方面,本发明技术方案提供一种半虚拟化设备配置空间直接访问装置,包括设置模块、初始化模块、映射关系建立模块、访问设置模块、判断执行模块;
45.设置模块,用于虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址;
46.初始化模块,用于虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;
47.映射关系建立模块,用于建立虚拟地址到物理地址之间的映射关系;
48.访问设置模块,用于虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;
49.判断执行模块,用于判断虚拟机对半虚拟化设备配置空间的操作方式根据计算出的半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间的信息。
50.进一步的,设置模块,还用于增加用于确定是否开启半虚拟化设备配置空间直接访问的半虚拟化设备配置空间直接访问参数;
51.进一步的,该装置还包括开关模块;设置模块包括模拟单元、构造设置单元、配置空间设置单元、地址设置单元、启动单元;
52.模拟单元,用于虚拟机启动过程中,模拟半虚拟化设备;
53.构造设置单元,用于构造半虚拟化设备配置空间,并为半虚拟化设备配置空间分配内存;
54.开关模块,用于获取半虚拟化设备配置空间直接访问参数的参数值;根据获取的参数值判断是否开启配置空间直接访问功能;
55.配置空间设置单元,用于若开启配置空间直接访问功能,增加新的半虚拟化设备配置空间cap;
56.地址设置单元,用于获取半虚拟化设备配置空间虚拟地址对应的物理地址,并将获取到的物理地址保存到cap中;
57.启动单元,用于启动虚拟机。
58.进一步的,初始化模块包括加载单元、第二获取单元、映射单元;
59.加载单元,用于虚拟机内核加载半虚拟化设备驱动;
60.第二获取单元,用于半虚拟化设备驱动初始化时获取半虚拟化设备配置空间结构布局;
61.映射单元,用于将半虚拟化设备配置空间的结构布局映射到虚拟机内核虚拟空间。
62.进一步的,映射关系建立模块包括地址读取单元、映射关系建立单元;
63.地址读取单元,用于读取半虚拟化设备配置空间的cap中保存的物理地址;
64.映射关系建立单元,用于根据内核虚拟空间的虚拟地址和读取的物理地址建立虚拟地址到物理地址之间的映射关系。
65.进一步的,访问设置模块包括第三获取单元、第一计算单元、第四获取单元、第二计算单元;
66.第三获取单元,用于虚拟机访问半虚拟化设备配置空间,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址;
67.第一计算单元,用于计算要访问的半虚拟化设备配置空间的地址到获取的虚拟地址的偏移;
68.第四获取单元,用于根据虚拟地址到物理地址之间的映射关系获取半虚拟化设备配置空间对应的物理地址;
69.第二计算单元,用于根据计算的偏移和获取的物理地址计算实际要访问半虚拟化设备配置空间的地址。
70.进一步的,判断执行模块,具体用于判断要读取半虚拟化设备配置空间信息时,调用对应的read函数,根据计算出的半虚拟化设备配置空间的地址执行读操作;判断要向配置空间写入信息时,调用对应的write函数,根据计算出的半虚拟化设备配置空间的地址执行写操作。
71.第三方面,本发明技术方案还提供一种电子设备,所述电子设备包括:
72.至少一个处理器;以及,
73.与所述至少一个处理器通信连接的存储器;其中,
74.存储器存储有可被至少一个处理器执行的计算机程序指令,所述计算机程序指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面所述的半虚拟化设备配置空间直接访问方法。
75.第四方面,本发明技术方案还提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如第一方面所述的半虚拟化设备配置空间直接访问方法。
76.从以上技术方案可以看出,本发明具有以下优点:通过将virtio配置空间的hpa保存到新构造的cap中,然后在virtio驱动初始化过程中时,将virtio配置空间映射到内核虚拟空间中,建立虚拟内存到virtio配置空间hpa的直接映射,实现通过访问内核虚拟地址直接访问virtio设备配置空间,无需后端qemu的协助处理,也无需查询ept页表,通过此方法,可以减少vmexit,提高了虚拟机的性能。同时设置开关装置,实现了功能的灵活选择。
77.此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
78.由此可见,本发明与现有技术相比,具有突出的实质性特点和显著地进步,其实施的有益效果也是显而易见的。
附图说明
79.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
80.图1是本发明一个实施例的方法的示意性流程图。
81.图2是本发明一个实施例的方法的虚拟机启动逻辑示意图。
82.图3是本发明一个实施例的方法的虚拟机运行逻辑示意图。
83.图4是本发明一个实施例的方法的虚拟机访问配置空间逻辑示意图。
84.图5是本发明一个实施例的装置的示意性框图。
具体实施方式
85.为了减小virtio配置空间访问对虚拟机性能的影响,本文提出了一种virtio配置空间直接访问的装置和方法,通过增加新的virtio配置空间,保存virtio配置空间的hpa,然后在virtio驱动初始化时,将virtio配置空间映射到内核虚拟空间中,然后建立虚拟内存到hpa的直接映射,可以通过访问内核虚拟地址直接访问virtio设备配置空间,无需后端qemu的协助处理,也无需查询ept页表,通过此方法,可以减少vm exit,提高了虚拟机的性能。为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
86.需要说明的是:
87.kvm:全称kernel-based virtual machine,是一种基于linux内核的硬件辅助虚拟化技术。
88.qemu:用于虚拟化设备和io的模拟。
89.virtio:半虚拟化技术,主要分为前端和后端和虚拟队列virtqueue,前端位于虚拟机内部,用于接收用户态的请求,然后按照传输协议进行封装;后端位于host,用于接收前端驱动发送的io请求,然后对请求进行解析、模拟。本技术中半虚拟化设备为virtio设备,半虚拟化设备配置空间为virtio设备配置空间或virtio配置空间。
90.virtqueue:虚拟队列,主要用于virtio前后端通信,用于保存前端驱动程序和后端处理程序执行的信息。
91.gva:虚拟机虚拟地址,在本技术中同虚拟地址。
92.hpa:物理机物理地址,在本技术中同物理地址。
93.vm exit:为了支持kvm虚拟化,cpu增加了guest模式,在guset模式下用于执行虚拟机的代码。cpu进入guest模式叫做vm entry,退出guest模式叫做vm exit。vm exit频繁退出是影响虚拟机性能的主要原因。
94.ept页表:ept是intel为实现内存虚拟化专门增加的硬件特性,使用ept页表来维护虚拟机物理地址到宿主机物理地址之间的映射。
95.cap:capability,用于表明pci设备的一些特性。
96.如图1所示,本发明实施例提供一种半虚拟化设备配置空间直接访问方法,包括如下步骤:
97.步骤1:虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址;
98.步骤2:虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;
99.步骤3:建立虚拟地址到物理地址之间的映射关系;
100.步骤4:虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;
101.步骤5:根据计算出的实际要访问半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间。
102.在使用qemu-kvm启动虚拟机,模拟virtio设备为virtio构造配置空间时,判断是否开启配置空间直接访问功能。当开启配置空间直接访问之后,在实现virtio通用的配置空间外新增一个cap,用于保存virtio配置空间的hpa。qemu为virtio配置空间申请内存,然后将hpa保存到virtio配置空间cap中。在虚拟机内部,virtio驱动初始化时,将virtio设备的配置空间结构映射到虚拟机内核虚拟空间中;获取virtio配置空间cap中保存的hpa,建立gva到hpa之间的映射;虚拟机要访问virtio配置空间时,获取保存virtio配置空间结构的gva,然后查找gva到hpa之间的映射,可以获得对应的hpa,根据内存偏移计算实际要访问的配置空间的地址后即可访问virtio的配置空间,无需后端qemu协助处理,也无需构造ept页表。
103.在有些实施例中,虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址的步骤之前包括:
104.步骤01:增加用于确定是否开启半虚拟化设备配置空间直接访问的半虚拟化设备
配置空间直接访问参数。
105.qemu-kvm命令增加virtio配置空间直接访问参数,用于确定是否开启virtio配置空间直接访问,在启动过程中通过获取该参数值,判断是否开启virtio配置空间直接访问。
106.如图2所示,在有些实施例中,虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址的步骤包括:
107.步骤11:虚拟机启动过程中,构造virtio设备;
108.步骤12:构造virtio设备配置空间,并为virtio设备配置空间分配内存;
109.步骤13:判断是否开启配置空间直接访问功能;具体通过如下步骤实现:获取virtio设备配置空间直接访问参数的参数值;根据获取的参数值判断是否开启配置空间直接访问功能;
110.若是,执行步骤14,否则执行步骤16;
111.步骤14:新增virtio设备配置空间cap;
112.步骤15:获取virtio设备配置空间gva对应的hpa;将获取到的hpa保存到cap中;执行下一步;
113.步骤16:启动虚拟机;
114.如果虚拟机没有开启配置空间直接访问,则不做任何处理,填充默认的配置空间信息。如果虚拟机开启了配置空间直接访问,则为virtio设备构造新的cap,然后qeum获取virtio设备配置空间虚拟机地址对应的hpa,将获取到的hpa保存到cap中。
115.如图3所示,在有些实施例中,虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间,建立虚拟地址到物理地址之间的映射关系的步骤包括:
116.步骤21:虚拟机运行,虚拟机运行时虚拟机内核加载virtio设备驱动;
117.步骤22:virtio设备驱动初始化;初始化时获取半虚拟化设备配置空间结构布局;
118.步骤23:将virtio设备配置空间的结构布局映射到虚拟机内核虚拟空间;
119.步骤24:判断配置空间直接访问功能是否开启,若是,执行步骤25,否则,不做任何处理;
120.步骤25:读取virtio设备配置空间cap中保存的物理地址;
121.步骤26:根据内核虚拟空间的虚拟地址和读取的物理地址建立虚拟地址到物理地址之间的映射关系。
122.虚拟机启动之后,当虚拟机内核加载virtio驱动,执行virtio驱动初始化时,vitio驱动获取virtio配置空间结构布局,然后将virtio配置空间结构布局映射到虚拟机内核的虚拟地址空间中。
123.如图4所示,在有些实施例中,虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址的步骤包括:
124.步骤41:虚拟机访问virtio设备配置空间;
125.步骤42:获取virtio设备配置空间映射到内核虚拟空间的虚拟地址;
126.步骤43:计算要访问的virtio设备配置空间的地址到获取的虚拟地址的偏移;
127.步骤44:根据虚拟地址到物理地址之间的映射关系获取virtio设备配置空间对应
的物理地址;
128.步骤45:根据计算的偏移和获取的物理地址计算对应的存放配置信息的地址,也就是,实际要访问半虚拟化设备配置空间的地址。
129.在有些实施例中,virtio设备的操作函数中定义对virtio配置空间的操作函数,当虚拟机访问virtio配置空间时:
130.当要读取virtio设备配置空间信息时,调用对应的read函数,根据计算出的virtio设备配置空间的地址执行读操作;当要要向配置空间写入信息时,调用对应的write函数,根据计算出的virtio设备配置空间的地址执行写操作。
131.如图5所示,本发明实施例提供一种半虚拟化设备配置空间直接访问装置,包括设置模块、初始化模块、映射关系建立模块、访问设置模块、判断执行模块;
132.设置模块,用于虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址;
133.初始化模块,用于虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;
134.映射关系建立模块,用于建立虚拟地址到物理地址之间的映射关系;
135.访问设置模块,用于虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;
136.判断执行模块,用于判断虚拟机对半虚拟化设备配置空间的操作方式根据计算出的半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间的信息。
137.在有些实施例中,设置模块,还用于增加用于确定是否开启半虚拟化设备配置空间直接访问的半虚拟化设备配置空间直接访问参数;
138.在有些实施例中,该装置还包括开关模块;设置模块包括模拟单元、构造设置单元、配置空间设置单元、地址设置单元、启动单元;
139.模拟单元,用于虚拟机启动过程中,模拟半虚拟化设备;
140.构造设置单元,用于构造半虚拟化设备配置空间,并为半虚拟化设备配置空间分配内存;
141.开关模块,用于获取半虚拟化设备配置空间直接访问参数的参数值;根据获取的参数值判断是否开启配置空间直接访问功能;
142.配置空间设置单元,用于若开启配置空间直接访问功能,增加新的半虚拟化设备配置空间cap;
143.地址设置单元,用于获取半虚拟化设备配置空间虚拟地址对应的物理地址,并将获取到的物理地址保存到cap中;
144.启动单元,用于启动虚拟机。
145.进一步的需要说明的是,初始化模块包括加载单元、第二获取单元、映射单元;
146.加载单元,用于虚拟机内核加载半虚拟化设备驱动;
147.第二获取单元,用于半虚拟化设备驱动初始化时获取半虚拟化设备配置空间结构布局;
148.映射单元,用于将半虚拟化设备配置空间的结构布局映射到虚拟机内核虚拟空间。
149.映射关系建立模块包括地址读取单元、映射关系建立单元;
150.地址读取单元,用于读取半虚拟化设备配置空间的cap中保存的物理地址;
151.映射关系建立单元,用于根据内核虚拟空间的虚拟地址和读取的物理地址建立虚拟地址到物理地址之间的映射关系。
152.访问设置模块包括第三获取单元、第一计算单元、第四获取单元、第二计算单元;
153.第三获取单元,用于虚拟机访问半虚拟化设备配置空间,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址;
154.第一计算单元,用于计算要访问的半虚拟化设备配置空间的地址到获取的虚拟地址的偏移;
155.第四获取单元,用于根据虚拟地址到物理地址之间的映射关系获取半虚拟化设备配置空间对应的物理地址;
156.第二计算单元,用于根据计算的偏移和获取的物理地址计算实际要访问半虚拟化设备配置空间的地址。
157.判断执行模块,具体用于判断要读取半虚拟化设备配置空间信息时,调用对应的read函数,根据计算出的半虚拟化设备配置空间的地址执行读操作;判断要向配置空间写入信息时,调用对应的write函数,根据计算出的半虚拟化设备配置空间的地址执行写操作。
158.本发明实施例还提供一种电子设备,所述电子设备包括:处理器、通信接口、存储器和总线,其中,处理器,通信接口,存储器通过总线完成相互间的通信。总线可以用于电子设备与传感器之间的信息传输。处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤1:虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址;步骤2:虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;步骤3:建立虚拟地址到物理地址之间的映射关系;步骤4:虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;步骤5:根据计算出的实际要访问半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间。
159.在有些实施例中,处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤11:虚拟机启动过程中,构造virtio设备;步骤12:构造virtio设备配置空间,并为virtio设备配置空间分配内存;步骤13:判断是否开启配置空间直接访问功能;具体通过如下步骤实现:获取virtio设备配置空间直接访问参数的参数值;根据获取的参数值判断是否开启配置空间直接访问功能;若是,执行步骤14,否则执行步骤16;步骤14:新增virtio设备配置空间cap;步骤15:获取virtio设备配置空间gva对应的hpa;将获取到的hpa保存到cap中;执行下一步;步骤16:启动虚拟机。
160.在有些实施例中,处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤21:虚拟机运行,虚拟机运行时虚拟机内核加载virtio设备驱动;步骤22:virtio设备驱动初始化;初始化时获取半虚拟化设备配置空间结构布局;步骤23:将virtio设备配置空间的
结构布局映射到虚拟机内核虚拟空间;步骤24:判断配置空间直接访问功能是否开启,若是,执行步骤25,否则,不做任何处理;步骤25:读取virtio设备配置空间cap中保存的物理地址;步骤26:根据内核虚拟空间的虚拟地址和读取的物理地址建立虚拟地址到物理地址之间的映射关系。
161.在有些实施例中,处理器可以调用存储器中的逻辑指令,以执行如下方法:步骤41:虚拟机访问virtio设备配置空间;步骤42:获取virtio设备配置空间映射到内核虚拟空间的虚拟地址;步骤43:计算要访问的virtio设备配置空间的地址到获取的虚拟地址的偏移;步骤44:根据虚拟地址到物理地址之间的映射关系获取virtio设备配置空间对应的物理地址;步骤45:根据计算的偏移和获取的物理地址计算对应的存放配置信息的地址。
162.此外,上述的存储器中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
163.本发明实施例提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述方法实施例所提供的方法,例如包括:步骤1:虚拟机启动过程中增加新的半虚拟化设备配置空间cap,用于保存为半虚拟化设备配置空间申请的物理地址;步骤2:虚拟机内核加载半虚拟化设备驱动,半虚拟化设备驱动初始化时将半虚拟化设备配置空间的结构映射到内核虚拟空间;步骤3:建立虚拟地址到物理地址之间的映射关系;步骤4:虚拟机访问半虚拟化设备配置空间时,获取半虚拟化设备配置空间映射到内核虚拟空间的虚拟地址,根据虚拟地址到物理地址之间的映射关系计算出实际要访问半虚拟化设备配置空间的地址;步骤5:根据计算出的实际要访问半虚拟化设备配置空间的地址,调用对应的函数直接访问半虚拟化设备配置空间。
164.尽管通过参考附图并结合优选实施例的方式对本发明进行了详细描述,但本发明并不限于此。在不脱离本发明的精神和实质的前提下,本领域普通技术人员可以对本发明的实施例进行各种等效的修改或替换,而这些修改或替换都应在本发明的涵盖范围内/任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1