arm架构下的kvm原理分析(armv8)

一、虚拟化引入

1.何为虚拟化

虚拟化是一种计算技术,它允许在单个物理计算机上创建多个虚拟计算环境,每个环境都可以运行独立的操作系统和应用程序。这些虚拟化环境被称为虚拟机(VMs)或容器,它们模拟了独立的计算资源,包括处理器、内存、存储和网络。下面是一种典型的架构:

        对于一些人来说,可能Hypervisor(虚拟机监视器)这个词比较陌生,但是说到vmare你可能就或多或少听到过了,vmare就是一种典型的Hypervisor,他又称为VMM(Virtual Machine Monitor),主要负责分配物理资源、管理虚拟机的运行以及保证他们彼此隔离。guest os就是运行在Hypervisor管理的虚拟机上的操作系统,可以windows、linux、mac系统等等,他们互相隔离,无法感知彼此。通俗点说,Hypervisor就是虚拟机的一个管理平台。

        那么虚拟机有什么用呢?你可以将不同的应用程序划分到不同的虚拟机中,这样可以充分利用你的物理机资源。(一台电脑当多台电脑用,前提是你的电脑物理资源要足够多,你不能说本来就没多少资源你还一顿开虚拟机)

2.当前最常用的虚拟化实现方式

软件虚拟化:软件虚拟化是一种虚拟化技术,它通过在软件层面模拟硬件和操作系统的功能来创建虚拟化环境,使多个虚拟化实例(通常称为虚拟机或容器)可以在同一物理主机上并发运行。典型的是:qemu。

        qemu可在宿主机上模拟多种不同架构的虚拟机,如x86、arm、mips、ppc等,也几乎能模拟出任何的硬件设备,模拟出的是虚拟硬件设备,通过某种转换机制可以在主机硬件设备上实现,以下为其架构图:

        上面说的某种转换机制在qemu中就是二进制翻译的方式将虚拟机指令翻译为宿主机的指令,从而实现虚拟机的虚拟架构能在宿主机上正常运行。下面简单介绍一下这种二进制翻译机制:

        二进制翻译是一种开销非常大的方式,为了减少复杂度,qemu采用了一种名为TCG的中间指令格式(类似编译原理中的中间代码),再把TCG指令翻译成宿主机指令。假设宿主机是x86架构,虚拟机是arm架构,执行指令过程为:ARM指令---->TCG指令---->X86指令。这样的话,qemu的指令相比于直接运行在cpu上的指令来说效率还是很低的,因为中间需要复杂的模拟过程。但是不表示说qemu就没有任何的应用价值,比如说当我们想要使用arm架构去进行开发或者测试,我们又没有相应的物理设备的时候,使用qemu进行模拟是一种很好的方法。

硬件虚拟化:跟软件虚拟化不同的是,他的指令不再需要翻译而是直接运行在你的物理cpu上即可,这样效率是不是就比软件虚拟化高了呢。根据Hypervisor的实现不同他还分为type1 hypervisor(xen)和type2 hypervisor(kvm)两种类型。接下来分别介绍以下两种类型:

        首先是type1 hypervisor:type1方案中hypervisor直接运行在硬件上,并管理系统中所有的硬件资源和虚拟机,这种架构下是没有宿主操作系统的,其典型框图如下:

        看到这种架构,有的人可能会想,没有宿主操作系统那我怎么去控制hypervisor去管理虚拟机呢?原来hypervisor会提供管理的功能接口供程序员去管理虚拟机,可以是命令行的形式等等。但是没有操作系统这个是个硬伤,因为操作系统的功能可不仅仅是光显示一个界面而已,这种方式hypervisor除了执行虚拟机管理功能外,还需要实现系统中所有设备的驱动,因此开发工作量较大。

        这个时候type2 hypervisor的方式就应运而生。这种方式下的hypervisor就运行在宿主操作系统之上,由操作系统负责其原有的功能,hypervisor只负责管理虚拟机。其典型架构如下:

        有的人发现他跟软件虚拟化有点像欸,但是软件虚拟化毕竟是虚拟出来的一个硬件环境,而这种方式,实际上是通过宿主操作系统使用硬件资源,使用的还是实际的硬件资源。

下面浅浅比较一下这两种方式:

        对于Type 2 Hypervisor:在Type 2 Hypervisor的架构中,Hypervisor运行在一个标准的宿主操作系统之上,这个宿主操作系统运行在内核模式下。因此,Hypervisor和宿主操作系统位于不同的异常等级。当Hypervisor需要执行一些关键虚拟化功能或访问硬件资源时,它需要与宿主操作系统通过异常方式进行通信,以请求执行特权操作。这种通信机制引入了额外的开销,可能会降低性能。相对于Type 1 Hypervisor:在Type 1 Hypervisor(裸机虚拟化)中,Hypervisor运行在硬件上,不依赖于标准的宿主操作系统。这意味着Hypervisor可以直接访问硬件资源并在内核模式下运行,无需通过宿主操作系统来执行特权操作。因此,Type 1 Hypervisor通常能够更高效地执行虚拟化功能,因为它可以绕过宿主操作系统的层次。

        为了解决该问题,armv8.1增加了vhe扩展支持,使得宿主操作系统和hypervisor都可以运行在同一异常等级下。此时它们之间可以直接通过函数的方式实现功能调用,因此其效率已经与type1 hypervisor不相上下。

半虚拟化:半虚拟化是相对于全虚拟化提出的,其中全虚拟化是指运行在虚拟机上的虚拟机操作系统不需要修改任何代码,其执行方式与运行在真实硬件上完全相同。但是由于虚拟机的每次IO操作都需要返回hypervisor,这中间涉及到异常处理、上下文切换等操作,因此效率比较低。

软件虚拟化:需要hypervisor翻译

硬件虚拟化type1:需要hypervisor访问硬件

硬件虚拟化type2:需要hypervisor与操作系统通信再访问硬件

        半虚拟化方案就是为了提高虚拟机IO能力而实现的,它通过修改虚拟机操作系统中驱动的代码,实现与hypervisor之间更加高效的IO交互,从而提升虚拟机的整体性能。下图为其架构框图:

        典型的半虚拟化方案为virtio,它定义了虚拟机操作系统驱动与hypervisor中模拟设备之间的io数据通信协议,通过通道的方式管理它们之间的数据传输,从而避免了频繁的IO操作。

        以上只是引入虚拟化的概念,以及种类介绍,后续会以kvm为主来介绍,kvm只包含了内核态的实现,因此其通常会与qemu配合使用,由qemu提供用户态实现和大部分设备的模拟工作,故在后面的讨论中若涉及用户态的部分,则都以qemu为例。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张丰麟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值