Table of Contents

1. 概述

2. 概念

2.1 虚拟化

2.2 软件虚拟化和硬件虚拟化

2.2.1 软件虚拟化

2.2.2 硬件虚拟化

2.3 半虚拟化和全虚拟化

2.4 Type1虚拟化和Type2虚拟化

2. kvm-qemu框架

3. 参考


KVM版本:5.9.1

QEMU版本:5.0.0

《用QEMU构建嵌入式LINUX系统》

《Linux虚拟化KVM-Qemu分析(一)》

《在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt》

1. 概述

  • 从这篇文章开始,将开始虚拟化的系列研究了,大概会涉及到ARM64虚拟化支持、KVM、QEMU等分析;

  • 虚拟化相关的实践与操作有且仅有:VMware/VirtualBox等虚拟机使用、QEMU使用、QEMU源码修改模拟IO设备;

  • Show me the code,一切从源代码出发;

本文作为开篇,从宏观方面来进行介绍,有个初步认识,不涉及到具体原理分析。

2. 概念

2.1 虚拟化

什么是虚拟化?

  • 虚拟化是一种资源管理技术,在非虚拟化系统中,单个操作系统管理和使用所有的硬件资源,而在虚拟化系统中,硬件资源可以被抽象和分割成多个虚拟的实体用于支持多个操作系统,多个操作系统可以共享所有的实体硬件资源,从而达到物理资源的最大化利用;

  • Virtual Machine Monitor(VMM),虚拟机监控器,也叫 Hypervisor,向下管理实际的物理资源,向上给不同的虚拟机提供逻辑资源;

  • Virtual Machine(VM),虚拟机可以根据自己的选择运行不同的OS(Guest OS),它会认为自己独享硬件;

  • 虚拟化的好处就是能提高资源的利用率,比如当前计算机的配置资源都很高,实际的利用率比较低,如果进行统一管理并进行虚拟化,那就可以支持更多的用户来合理利用了;

2.2 软件虚拟化和硬件虚拟化

2.2.1 软件虚拟化

通过软件模拟来实现VMM层,比如QEMU,还是以图片来举例说明下:

  • 以典型的场景为例(ARM+Linux的模拟环境):在PC机Ubuntu系统中使用Qemu来模拟ARM64处理器,并在ARM64中运行Guest OS,假设Guest OS也为Linux;

  • 在没有硬件虚拟化的支持下,QEMU本质上完成的工作是二进制的翻译,这个问题怎么来理解呢?比如Guest OS运行时,APP和OS都认为自己是运行在ARM64中,执行文件也都是交叉编译器生成的,我们都知道不同的处理器架构,指令集都不一样,ARM上运行的程序放置到X86运行是无法执行的,Qemu的出现就可以解决这个问题,硬生生转换翻译过去;

  • Qemu的翻译过程为:将Guest代码指令翻译成TCG(Tiny Code Generator)中间代码,最终翻译成Host架构支持的代码指令

2.2.2 硬件虚拟化

纯软件行为来翻译指令,显然是一件很低效的事情,硬件虚拟化的支持可以提高整体的性能,硬件虚拟化指处理器本身提供能力来让客户机指令独立运行。

  • KVM (Kernel-Based Virtual Machine),基于内核的虚拟机,实现对CPU和内存的虚拟化,以及硬件I/O虚拟化的拦截,Guest的I/O被KVM拦截后交给Qemu去处理;

  • KVM是内核的一个Module,可以让Linux变成一个Hypervisor(Virtual Machine Monitor(VMM),虚拟机监控器,也叫 Hypervisor

  • KVM需要Host处理器本身支持虚拟化扩展,比如intel VTAMD-V等;

2.3 半虚拟化和全虚拟化

  • 半虚拟化(Para-Virtualization:客户机操作系统知道自身运行在虚拟环境里,进行定制化修改,以配合Hypervisor进行工作,优点是半虚拟化的架构更精简,性能上有一定优势,缺点是客户机OS需要修改,用户体验偏差;

  • 典型的半虚拟化技术virtio,需要宿主机/Hypervisor和客户机都安装对应的驱动;

  • 全虚拟化(Full Virtualization:客户机操作系统不需要任何改动,使用简单,由于全虚拟化需要模拟出完整的,和物理平台一样的平台给客户机,因此也增加了Hypervisor的设计难度;

2.4 Type1虚拟化和Type2虚拟化

  • 从软件的框架角度,根据Hypervisor是直接在硬件之上,还是在宿主机操作系统之上,可以将虚拟化分成Type1和Type2;

  • Type1虚拟化native/bare-mental Hypervisor,直接控制硬件资源和客户机,典型的是Xen

  • Type2虚拟化:Hypervisor运行在宿主机操作系统之上,典型的比如:VMware WorkstationKVM等,Hypervisor只是宿主机操作系统的一个应用程序;

2. kvm-qemu框架

从上文的虚拟化分类来看,我们研究目标KVM+Qemu,是采用硬件虚拟化技术的全虚拟化方案(Type2)。

  • Qemu (Quick Emulator):是虚拟化方案的用户态组成部分,它有两种模式:1)Emulator,模拟器,模拟各种硬件,使用的是二进制翻译技术;2)Virtualiser,虚拟机,通过ioctlKVM内核模块进行交互,完成虚拟化功能;

  • Qemu为每个VM虚拟机创建一个进程,针对每个vCPU虚拟CPU创建一个线程,Guest的系统和应用运行在vCPU之上;

  • Qemu能模拟I/O功能,而这部分功能KVM可能并不是全部支持,执行流程如下:虚拟机VM中的程序执行I/O操作,VM退出进入KVM,KVM进行判断处理并将控制权交给Qemu,由Qemu来模拟I/O设备来响应程序的I/O请求;

  • KVM内核模块,依赖于底层硬件的虚拟化支持,主要的功能是初始化CPU硬件,打开虚拟化模式,将虚拟化客户机运行在虚拟机模式下,并对虚拟化客户机的运行提供一定的支持;

  • KVM内核模块,实现CPU的虚拟化、内存的虚拟化等,而外设IO的虚拟化,通常不由KVM模块负责,只有对性能要求很高的虚拟设备才需要由KVM内核模块来负责,因此也就有KVM + Qemu的组合方案了;

本文纯当扫盲贴了,至于具体技术细节的深入分析,后续会进行不定期更新。

3. 参考

《KVM实战-原理、进阶与性能调优》

Linux虚拟化KVM-Qemu分析(一)相关推荐

  1. Linux虚拟化KVM-Qemu分析(三)之KVM源码(1)kvm_init

    Table of Contents 1. 概述 2. KVM初始化 2.1 kvm_arch_init 2.1.1 init_hyp_mode 2.1.2 init_subsystems 2.2 mi ...

  2. linux 内存查看 kvm,Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    原标题:Linux虚拟化KVM-Qemu分析(五)之内存虚拟化 背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousa ...

  3. Linux虚拟化KVM-Qemu分析(十一)之virtqueue

    目录 1. 概述 2. 数据结构 3. 流程分析 3.1 发送 3.2 接收 3.3 代码分析 3.3.1 virtqueue创建 3.3.2 virtio-net驱动发送 3.3.3 Qemu vi ...

  4. Linux虚拟化KVM-Qemu分析(十)之virtio驱动

    目录 1. 概述 2. 数据结构 3. 流程分析 3.1 virtio总线创建 3.2 virtio驱动调用流程 参考 <Linux PCI驱动框架分析:(Peripheral Componen ...

  5. Linux虚拟化KVM-Qemu分析(九)之virtio设备

    目录 1. 概述 2. 流程分析 3. tap创建 - 网卡后端设备 4. virtio-net创建 4.1 数据结构 4.2 流程分析 4.2.1 class_init 4.2.2 instance ...

  6. Linux虚拟化KVM-Qemu分析(八)之virtio初探

    目录 概述 1. 网卡 1.1 网卡工作原理 1.2 Linux网卡驱动 2. 网卡全虚拟化 2.1 全虚拟化方案 2.2 弊端 3. 网卡半虚拟化 3.1 virtio 3.2 半虚拟化方案 参考 ...

  7. Linux虚拟化KVM-Qemu分析(七)之timer虚拟化

    <Linux虚拟化KVM-Qemu分析(一)> <Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化> <Linux虚拟化KVM-Qemu分析(三)之KVM源码 ...

  8. Linux虚拟化KVM-Qemu分析(六)之中断虚拟化

    <Linux虚拟化KVM-Qemu分析(一)> <Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化> <Linux虚拟化KVM-Qemu分析(三)之KVM源码 ...

  9. Linux虚拟化KVM-Qemu分析(五)之内存虚拟化

    <Linux虚拟化KVM-Qemu分析(一)> <Linux虚拟化KVM-Qemu分析(二)之ARMv8虚拟化> <Linux虚拟化KVM-Qemu分析(三)之KVM源码 ...

  10. Linux虚拟化KVM-Qemu分析(四)之CPU虚拟化(2)

    Table of Contents 1. 概述 1.1 CPU工作原理 1.2 guest模式 2. 流程分析 2.1 vcpu的创建 2.1.1 qemu中vcpu创建 2.1.2 kvm中vcpu ...

最新文章

  1. 这个AI模型用最少的训练数据学习对象之间的关系
  2. window的onresize执行多次的解决方法
  3. JSP教程(八)—— Servlet实现验证码
  4. android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作
  5. 慎用dictionaryWithObjectsAndKeys方法
  6. Tomcat的角色配置
  7. 有趣的JS 一行代码 偷取所有图片
  8. gentoo 安装php7,在Gentoo安装Wifidog Portal
  9. ViT (Vision Transformer) ---- SimpleRNN + Attention
  10. Redis的安装配置与使用
  11. RapidMiner教程
  12. 基于java的客户关系管理系统
  13. 中兴捧月营销精英挑战赛回顾
  14. matlab2014如何获得hostid,关于如何修改hostid的问题
  15. Unity中采用二进制存档与读档
  16. QAP-based Simulation-Extractable SNARK with a Single Verification及代码实现
  17. JAVAEE大项目(作业提交/管理系统)
  18. 清华水木BBS竟然被关了
  19. 电信显示isp服务器超时连不上,wifi连接超时怎么解决,网络能连上但连接超时-
  20. 使用OD加载微软符号库

热门文章

  1. matlab arctan 反函数,arctanx的导数是什么 反函数求导公式
  2. html获取location,通过定义JS窗口对象获取url地址location.search部分的参数值
  3. MongoTemplate.findById查不到数据的一种情况:由写入时未指定_id造成的
  4. 互联网行业个人精进指南
  5. vue 中 computed 计算属性 的用法
  6. 【spark】示例:连接操作
  7. 方法 -------JavaScript
  8. oracle创建数据库表空间
  9. Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(二)
  10. LeetCode 3sum 问题