博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenStack设计与实现3——KVM和QEMU浅析
阅读量:5752 次
发布时间:2019-06-18

本文共 1354 字,大约阅读时间需要 4 分钟。

OpenStack设计与实现3——KVM和QEMU浅析

Tips:文章为拜读@xingjiarong 后有感而做的分享,先对作者表示感谢,附原文地址:

1. KVM概述

  • KVM是Kernel-based Virtual Machine的缩写,即基于linux内核的虚拟机,是一种的完全虚拟化的解决方案,也就是说普通的操作系统不需经过修改就可以在KVM上运行。它使用linux自身的调度器进行管理,所以相对于xen,其核心源码很少。KVM的虚拟化需要硬件的支持(如intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。

  • 准确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,就可以使用KVM模块创建虚拟机,实现虚拟内存的分配,虚拟CPU寄存器的读写以及管理虚拟CPU的运行。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去作事情,所以还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU,使用它来模拟PC硬件的用户空间组件,模拟I/O设备模型以及提供访问外设的途径。后边会详细的介绍QEMU,这里先知道它用了QEMU就好了。

  • KVM基本架构如下图所示。

    KVM架构

  • 其中KVM被加入到标准的Linux内核中,被组织成Linux中标准的字符设备(/dev/kvm)。Qemu利用KVM提供的LibKvm应用程序接口,通过ioctl系统调用创建和运行虚拟机。KVM Driver使得整个Linux成为一个虚拟机监控器。并且在原有的Linux两种执行模式(内核模式和用户模式)的基础上,新增加了客户模式,客户模式拥有自己的内核模式和用户模式。在虚拟机运行下,三种模式的分工如下:

    1. 客户模式:执行非I/O的客户代码,虚拟机运行在客户模式下。

    2. 内核模式:实现到客户模式的切换,处理因为I/O或者其它指令引起的从客户模式的退出,KVM Driver工作在这种模式下。

    3. 用户模式:代表客户执行I/O指令Qemu运行在这种模式下。

  • KVM的具体工作流程如下:

  • 用户模式的qemu利用libkvm通过ioctl进入内核模式,kvm模块未虚拟机创建虚拟内存,虚拟CPU后执行VMLAUCH指令进入客户模式。加载Guest OS并执行。如果Guest OS 发生外部中断或者影子页表缺页之类的情况,会暂停Guest OS的执行,退出客户模式出行异常处理,之后重新进入客户模式,执行客户代码。如果发生I/O事件或者信号队列中有信号到达,就会进入用户模式处理。

    KVM的具体工作流程

2. QEMU概述

  • QEMU(Quick Emulator)是一个独立的开源虚拟机软件,它是通过纯软件来仿真X86平台处理器的取指、解码和执行,虚拟客户机的指令并不在物理平台上直接执行。

  • 它利用其中的微型代码生成器模块进行动态翻译,将需要模拟的客户机的代码架构转换成主机代码架构并最终执行。QEMU虚拟机是一个纯软件的实现(KVM需要硬件虚拟化技术支持),所以性能低下。但是,其优点是虚拟机可以与宿主机并不是同一个架构。

  • 与KVM不同的是,QEMU的代码中有整套的虚拟机实现,包括处理器虚拟化、内存虚拟化,以及KVM使用到的虚拟设备模拟(比如网卡、显卡、存储控制器和硬盘等)。

转载地址:http://kcukx.baihongyu.com/

你可能感兴趣的文章
Netty源码分析之一次请求是如何到达channelRead的?
查看>>
大数据量与高并发情况下的数据库优化
查看>>
精美待办软件安利
查看>>
火绒安全警报:疑似方正集团子公司签名泄露 遭黑客利用盗取Steam账号
查看>>
自定义有多个按钮节点的SliderView
查看>>
Node.js Buffer(缓冲区)
查看>>
架构师的工作
查看>>
iOS一键打包自动改build并输入更新日志上传发布应用到Fir,Pgyer
查看>>
css清除浮动float的七种常用方法总结
查看>>
一步一步搭建 springboot-2.1.3+dubbo-2.7.1 项目
查看>>
Solr
查看>>
springboot mybatis 后台框架平台 集成代码生成器 shiro 权限
查看>>
Java效率工具Lombok使用及原理
查看>>
nginx的location优化
查看>>
13、Flutter Widget - FadeInImage;
查看>>
java 进销存 销售报表 库存管理 商户管理 springmvc SSM crm 项目
查看>>
Android 9.0 正式发布,来看看有什么新特性
查看>>
Carthage 安装与使用
查看>>
Vue多组件仓库开发与发布
查看>>
[译] 关于 React Motion 的简要介绍
查看>>