一种半虚拟化实现方法、装置、设备及介质与流程

文档序号:34687778发布日期:2023-07-05 23:23阅读:22来源:国知局
一种半虚拟化实现方法、装置、设备及介质与流程

本发明涉及虚拟化领域,尤其涉及一种半虚拟化实现方法、装置、设备及介质。


背景技术:

1、随着服务器的单机性能提升,如果一台服务器只部署一个业务,会极大的浪费服务器资源;如果部署多个相似业务,又会造成彼此冲突。半虚拟化技术的诞生解决了这个问题,其既能充分发挥服务器性能、共享使用服务器的硬件设备,又能解决业务之间的冲突问题,并且在性能上,比全虚拟化技术要强很多。目前,现有成熟的半虚拟化技术大多是基于virtio框架,在guest端(指运行在物理机上的虚拟机系统)的前端驱动里,模拟设备的功能,当用户层的应用程序访问驱动的接口时,前端驱动通过解析,把数据与请求加入到virt队列中,然后通知qemu程序,qemu程序读取virt队列中的请求与数据,根据请求和数据再去访问物理服务器的驱动接口,从而实现对硬件设备的io读写。

2、请参照图1所示,现有技术基于virtio框架实现半虚拟化主要分为三部分:(1)虚拟机系统里的virtio前端驱动,用来接收与转化虚拟机apps的请求与数据;(2)virtqueue队列,主要用来传输数据,属于qemu应用程序与虚拟机系统的数据桥梁;(3)基于qemu的virtio后端驱动,用来处理虚拟机系统发送过来的数据,并转化为host端用户态的数据,最终调用host端ioctl接口完成读写硬件设备。基于virtio框架实现半虚拟化整体流程为:虚拟机的apps通过用户态访问内核态的virtio前端驱动接口,virtio前端驱动接收到请求与数据后,写入到virtqueue中,并通知qemu数据写入完毕;qemu的virtio后端驱动根据virtio框架协议,从virtqueue队列中读取数据,由于qemu是服务器端运行的应用程序,把从virtqueue读取的数据转化为服务器端用户态的数据后,再调用服务器的驱动接口,完成设备读写。最后,qemu把请求结果,写入到virtqueue中,返回给虚拟机系统。

3、然而,由于现有技术是基于virtio框架,而virtio框架作为一种通用的半虚拟化io设备的协议,因为是通用框架,并不完全适合所有虚拟化设备,有它本身的局限性。主要表现有以下几点:一方面,数据需要转化成virtqueue结构体,即数据需要额外的组装与打包,会有额外的时间与空间成本。另一方面,数据只能通过队列传输,不够灵活,多任务并发时,会有性能上的问题,例如技术成熟的virtio-net使用了两个virtqueue队列,一个用于收数据,一个用于发数据。


技术实现思路

1、有鉴于此,有必要针对以上技术问题,提供一种半虚拟化实现方法、装置、设备及介质。

2、根据本发明的第一方面,提供了一种半虚拟化实现方法,所述方法包括:

3、在物理服务器的用户态中运行若干qemu应用程序;

4、利用每个qemu应用程序在进程空间中启动一个虚拟机,并在虚拟机启动时创建共享内存;

5、响应于虚拟机中的应用程序请求访问物理服务器挂载的硬件设备时,则通过所述共享内存完成qemu应用程序与虚拟机之间的数据交互。

6、在一些实施例中,所述方法还包括:

7、在每个虚拟机的内核态中运行设备前端驱动,其中,所述设备前端驱动用于将数据转换成内核态数据;

8、在每个qemu应用程序中运行设备驱动,其中,所述设备驱动用于将内核态数据转换成用户态数据;

9、在物理服务器的内核态中运行设备后端驱动,所述设备后端驱动用于将用户态数据转换成内核态数据。

10、在一些实施例中,所述方法还包括:

11、需要访问物理服务器挂载的硬件设备时,虚拟机中的应用程序通过ioctl接口从用户态访问内核态的所述设备前端驱动,以向所述设备前端驱动发送调用请求。

12、在一些实施例中,通过所述共享内存完成qemu应用程序与虚拟机之间的数据交互,包括:

13、利用所述设备前端驱动将与调用请求相关的数据转换成内核态数据后写入到所述共享内存中,并通知所述qemu应用程序去共享内存读取;

14、响应于qemu应用程序读取完与调用请求相关的数据,则利用所述设备驱动将读取的数据转换为物理服务器上的用户态数据,并调用物理服务器上的ioctl接口将用户态的数据传递给物理服务器的所述设备后端驱动;

15、所述设备后端驱动接收到用户态的数据后转换成内核态数据,以使物理服务器根据转换后的内核态数据读写硬件设备的寄存器;

16、响应于物理服务器完成对硬件设备的寄存器的读写,由物理服务器将访问结果返回给对应的qemu应用程序,再由对应的qemu应用程序将所述访问结果返回给虚拟机中的应用程序。

17、根据本发明的第二方面,提供了一种半虚拟化实现装置,所述装置包括:

18、运行模块,所述运行模块配置用于在物理服务器的用户态中运行若干qemu应用程序;

19、内存创建模块,所述内存创建模块配置用于利用每个qemu应用程序在进程空间中启动一个虚拟机,并在虚拟机启动时创建共享内存;

20、数据交互模块,所述数据交互模块配置用于响应于虚拟机中的应用程序请求访问物理服务器挂载的硬件设备时,则通过所述共享内存完成qemu应用程序与虚拟机之间的数据交互。

21、在一些实施例中,所述装置还包括驱动模块,所述驱动模块配置用于:

22、在每个虚拟机的内核态中运行设备前端驱动,其中,所述设备前端驱动用于将数据转换成内核态数据;

23、在每个qemu应用程序中运行设备驱动,其中,所述设备驱动用于将内核态数据转换成用户态数据;

24、在物理服务器的内核态中运行设备后端驱动,所述设备后端驱动用于将用户态数据转换成内核态数据。

25、在一些实施例中,所述装置还包括调用模块,所述调用模块配置用于:

26、需要访问物理服务器挂载的硬件设备时,虚拟机中的应用程序通过ioctl接口从用户态访问内核态的所述设备前端驱动,以向所述设备前端驱动发送调用请求。

27、在一些实施例中,所述数据交互模块进一步配置用于:

28、利用所述设备前端驱动将与调用请求相关的数据转换成内核态数据后写入到所述共享内存中,并通知所述qemu应用程序去共享内存读取;

29、响应于qemu应用程序读取完与调用请求相关的数据,则利用所述设备驱动将读取的数据转换为物理服务器上的用户态数据,并调用物理服务器上的ioctl接口将用户态的数据传递给物理服务器的所述设备后端驱动;

30、所述设备后端驱动接收到用户态的数据后转换成内核态数据,以使物理服务器根据转换后的内核态数据读写硬件设备的寄存器;

31、响应于物理服务器完成对硬件设备的寄存器的读写,由物理服务器将访问结果返回给对应的qemu应用程序,再由对应的qemu应用程序将所述访问结果返回给虚拟机中的应用程序。

32、根据本发明的第三方面,还提供了一种计算机设备,该计算机设备包括:

33、至少一个处理器;以及

34、存储器,存储器存储有可在处理器上运行的计算机程序,处理器执行程序时执行前述的半虚拟化实现方法。

35、根据本发明的第四方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时执行前述的半虚拟化实现方法。

36、上述一种半虚拟化实现方法,不再依赖于virtio框架,而是基于qemu和共享内存实现了半虚拟化术,在模拟不同的硬件设备时更具灵活性;此外以共享内存的方式传递数据在处理多任务并发时有一定性能优势。

37、此外,本发明还提供了一种半虚拟化实现装置、一种计算机设备和一种计算机可读存储介质,同样能实现上述技术效果,这里不再赘述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1