kvm虚拟化原理_kvm 虚拟内存 与任何其他linux 进程的内存一样进行存储-程序员宅基地

技术标签: linux kernel  

名词描述

如果把操作系统共及其提供的系统调用作为资源,那么虚拟化就表现为操作系统虚拟化。linux容器虚拟化就是一个操作系统上,虚拟化出了多个同样的操作系统。
如果把物理平台,包括CPU,内存,外设作为资源,那么对应的虚拟化技术就是平台虚拟化。

VMM(virtual machine monitor) 虚拟机监视器,也叫hypervisor。虚拟机监视器运行的环境叫做host,而虚拟出来的虚拟机成为guest

虚拟化重要一步,就是截取计算元件对物理资源的访问,并重定向到虚拟化资源池中。如果是使用纯软件的方式实现这种截取,那么就称为软件虚拟化,如果是通过硬件方式实现,那么就称为硬件虚拟化。

我的理解

qemu+kqemu就是纯软件的虚拟化,

而qemu+kvm是利用的硬件虚拟化的技术。

利用硬件虚拟化的好处,无需进行二进制转换,减少性能开销,极大简化了VMM的设计,性能更强大。

完整的情况下需要CPU、主板芯片组、BIOS和软件的支持。即使在只有CPU支持的情况下,性能也会比不支持情况好。

intel virtualizaton Technology(IntelVT)

半虚拟化,为了解决纯软件虚拟化下,性能的问题,改动guest操作系统,使他可以自己运行在虚拟环境下。本质上,弱化了对虚拟机特殊指令的被动截取要求,将其转化为guest操作系统的主动通知。Xen是代表

全虚拟化,不需要对guest操作系统进行任何改动,理论上支持任何可在真是物理平台上运行的操作系统。随着硬件虚拟化的出现,全虚拟化的性能已经超过了半虚拟化。

linux kernel通过加载kvm模块变身成一个hypervisor

KVM是基于虚拟化扩展(intel VT或AMD-V)的X86硬件。是linux完全原生的全虚拟化解决方案。
部分的半虚拟化支持,注意是通过半虚拟网络驱动程序的形式用于linux和windowsguest系统。
每个虚拟CPU显示为一个常规的linux进程。
KVM本身不执行任何模拟,需要用户空间程序通过/dev/kvm借口设置一个guest虚拟服务器的地址空间,向他提供模拟的IO,并将它的视频显示映射回数组的显示屏,目前这个应用程序就是QEMU。

KVM原理

架构

在这里插入图片描述

内存管理

一个虚拟机的内存与任何其他linux进程的内存一样进行存储,可以以大页面的形式进行交换以实现更高的性能,也可以以磁盘文件的形式共享。NUMA(非一致性内存访问,针对多处理器的内存设计)支持允许虚拟机有效的访问大量内存。

KVM支持最新的基于硬件的内存虚拟化功能,支持Intel的扩展页表(EPT)和AMD的嵌套页表(NPT,也交快速虚拟化索引-RVI),以实现更低的CPU利用率和更高的吞吐量。

内存页面共享通过一种名为内核同页合并(kernel same-page merging,KSM)的内核功能来支持,KSM扫描每个虚拟机的内存如果虚拟拥有相同的内存页面,KSM将这些页面合并到一个虚拟机之间共享的页面,修改时在获得专享副本

存储

KVM能够使用linux支持的任何存储来存储虚拟机镜像。KVM原声磁盘格式为QCOW2,支持快照,允许多级快照,压缩和加密。

设备驱动程序

KVM支持混合虚拟化,其中准虚拟化的驱动程序安装在guest os中,允许虚拟机使用优化的IO借口而不实用模拟的设备,从而为网络和快设备提供高性能的IO。这个准虚拟化驱动程序使用IBM和ReadHat联合linux社区开发的VirtIO标准。它是一个与虚拟机管理程序独立的、构建设备驱动程序的借口,允许为多个虚拟机管理程序使用一组相同的设备驱动程序。(virtIO是安装在guest os中的模块)

性能和可伸缩性

KVM虚拟化性能在很多方面(计算能力和原生带宽)可以达到非虚拟化原生环境的95%以上。RHEL6.x系统一个KVM客户机可以支持160个虚拟CPU和多大2T内存,一个宿主机支持4096个CPU核心和多达64T内存

原理

虚拟化模型

VMM或Hypervisor的主要职能:管理真是的物理硬件平台,并为每个虚拟guest提供对应虚拟硬件平台。
guest任然可以作为自己的VMM,称为嵌套虚拟化。KVM支持嵌套虚拟化。
在这里插入图片描述

KVM架构

两种架构,类型一,系统上电之后首先加载运行虚拟机监控程序,传统的操作系统运行在其创建的虚拟机中,可以视为一个特别为虚拟化而剪裁过的操作系统内核。一般会提供一个具有一定特权的特殊虚拟机。由这个特权虚拟机提供用户日常操作和管理使用的操作系统环境。代表Xen,VMware ESX/ESXi和微软Hyper-V。类型二,上电后仍然运行一般意义上的操作系统,VMM作为特殊的应用程序,视为操作系统功能的扩展。其最大优势在于可以充分利用现有操作系统,不必实现物理资源管理和调度算法。但是会收到诉诸操作系统的一些限制。无法仅仅为了虚拟机优化,而对操作系统做出修改。

在这里插入图片描述

qemu通过/dev/kvm借口设置一个虚拟客户机的地址空间,向他提供墨迹IO设备,并将显示映射回宿主机显示屏。

KVM模块

主要功能,初始化CPU硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚拟客户机的运行提供一定的支持。
为了软件简洁,KVM仅支持硬件虚拟化。

KVM先初始化内部数据结构
KVM打开CPU控制寄存器CR4中的虚拟化模式开关,通过执行VMXON指令将host操作系统置于虚拟化模式中的根模式
KVM模块创建/dev/kvm并等待用户空间命令。
KVM和qemu通过对/dev/kvm的ioctl系统调用来通信。
针对虚拟处理器的最重要的IOCTL调用就是执行“虚拟处理器”。通过它,用户空间准备好的虚拟机在KVM模块支持下,被置于虚拟化模式中的非根模式下,并开始执行二进制指令。在非根模式下,所有敏感的二进制指令都会被处理器捕获到,处理器在保存现场之后自动切换到根模式,由KVM决定如何进一步处理(要么由KVM模块直接处理,要么反悔用户空间交由用户空间程序处理)。
内存虚拟化,在硬件支持二维地址翻译之前是最复杂的部分。在虚拟机模式下,内存管理单元的页表必须在一次查询的时候完成两次地址转换。除了要将客户机虚拟地址转换为客户机物理地址,还需要再转为host的物理地址。使用影子页表机制。通过硬件支持,二维分页机制。
处理器对设备的访问主要通过IO指令和MMIO,其中IO指令会被处理器直接接货,MMIO会通过配置内存虚拟化来捕获。对性能要求较高的虚拟设备才会由KVM内核模块直接负责,比如虚拟终端控制器和虚拟始终,这样可以大量减少处理器的模式切换开销。

Qemu设备模型

大部分输入输出都交给qemu来负责

qemu虚拟机是一个纯软件的实现,性能底下。qemu的代码中有整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及KVM使用到的虚拟设备模拟(网卡,下卡,存储控制器和硬盘等)。

KVM在qemu基础上进行了修改,虚拟机运行期间,qemu会通过KVM模块提供的系统调用进入内核,由KVM模块负责将虚拟机置于处理器的特殊模式运行。遇到虚拟机进行输入输出操作,kvm从上次的系统调用出口处反悔qemu,由qemu来负责解析和模拟这些设备(是不是可以理解为,从创建虚拟机后,就交由kvm负责,运行在特殊模式,直到发生了IO操作,切换到用户态,交由qemu负责)。
从qemu角度来看,使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化的枷锁,极大的提升了虚拟机性能。除此之外,虚拟机的配置和创建,虚拟机运行以来的虚拟设备,虚拟机运行时用户操作环境和交互,以及一些针对虚拟机的特殊技术(诸如动态歉意),都是由qemu自己实现的。

kvm和qemu都可以选择其他虚拟机或技术来枷锁,比如qemu可以选择xen或者kqemu,而kvm也可以选择其他应用程序,只要它按照kvm提供的API来设计。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oscube/article/details/106740164

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线