一文分析Linux虚拟化KVM-Qemu(概念篇)

news2024/11/18 19:42:50

说明:

  1. KVM版本:5.9.1

  2. QEMU版本:5.0.0

  3. 工具:Source Insight 3.5, Visio

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架构支持的代码指令

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

2.2.2 硬件虚拟化

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

 

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

  • KVM是内核的一个Module,可以让Linux变成一个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的组合方案了;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/128429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小米裁员,我有话说

大家好,我是梦想家Alex 。好久没有为大家分享有关职场人生相关的文章了,最近阳康之后,灵感爆棚,想跟大家好好聊一聊。 如果你问我,近期互联网圈热度最高的事情,我想一定少不了小米和腾讯这两家科技巨头的身…

html实现ip输入框功能代码

伪代码&#xff1a; <style> .login-user {display: flex;color: #000;line-height: 30px; } .login-user input{height: 46px;border-radius: 4px;margin: 0px 4px; } </style><div class"layui-form-item login-user"><inp…

数据可视化②:bi解决方案之大学生就业分析

大学生就业是和我们息息相关的话题&#xff0c;每一位大学生都关注着&#xff0c;我们常常在网络上看到有关大学生就业的话题&#xff0c;比如毕业季的一些讨论。在大一的创新创业课中&#xff0c;我们也了解到自己所学的专业和以后如何就业&#xff0c;往哪方面就业。但我们了…

进程与线程的区别和联系是什么?

进程概念的引入 在多道程序的环境下&#xff0c;程序的并发执行代替了程序的顺序执行。它破坏了程序的封闭性和可再现性&#xff0c;使得程序和计算不再一一对应&#xff0c;而且由于资源共享和程序的并发执行导致在各个程序活动之间可能存在相互制约关系。总之&#xff0c;程…

MobTech秒验 I 寒冬加时,金融行业如何走出阴霾?

互联网流量红利将逝&#xff0c;企业运营重点已从“以产品为重心”转移至“以用户为导向”&#xff0c;而用户时间的碎片化及不聚焦&#xff0c;往往造成了线上运营推广投放后的石沉大海。 当下&#xff0c;迫切需要去做的是对存量数据的精细化管理&#xff0c;企业应打破数据…

Kafka的终极UI工具丨Offset Explorer功能简介

Offset Explorer&#xff08;以前称为Kafka Tool&#xff09;是一个用于管理和使Apache Kafka 集群的GUI应用程序。它提供了一个直观的UI&#xff0c;允许人们快速查看Kafka集群中的对象以及存储在集群主题中的消息。它包含面向开发人员和管理员的功能。 一些关键功能包括&…

Java 中的浅拷贝和深拷贝

开发过程中&#xff0c;有时会遇到把现有的一个对象的所有成员属性拷贝给另一个对象的需求。这个时候就会用到拷贝这个概念。把原对象定义成 A&#xff0c;拷贝后的对象定义成 B&#xff0c;如果只是单纯使用 clone 方法进行拷贝&#xff0c;你会发现&#xff1a; 对于八个基本…

基于unity物体定点移动与模拟刹车的细节 GIF 图文详解——线性差值函数以及平滑阻尼的运用和实践(Lerp AND SmoothDamp)

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 [unity常用API] ⭐相关文章&#xff1a;基础不牢&#xff0c;地动山摇系列 ------ 软硬通吃 unity常用API ⭐…

Arduino与Proteus仿真实例-TFT LCD绘制酷炫曲线图表

TFT LCD绘制酷炫曲线图表 本文将介绍如何在ILI9341 TFT LCD中绘制酷炫曲线图表仿真。 在前面的文章中,对ILI9341的驱动仿真作了详细的介绍,请参考: Arduino与Proteus仿真实例-TFT显示屏(ILI9341驱动器)SPI驱动仿真1、仿真电路原理图 2、仿真代码实现 本次实例使用到如下开…

23种设计模式(一)——单例模式【对象性能】

文章目录意图什么时候使用单例单例模式的实现1、有缺陷的懒汉式2、线程安全、内存安全的懒汉式单例 &#xff08;智能指针&#xff0c;锁&#xff09;3、最推荐的懒汉式单例([magic](https://so.csdn.net/so/search?qmagic&spm1001.2101.3001.7020) static )——局部静态变…

Wondershare 有哪些不错的办公软件呢

第一款 Wondershare UniConverter14 Wondershare UniConverter中文学习版(万兴优转)是一款国产全能视频格式转换软件.万兴格式转换器最新版具有音视频格式转换,合并视频,视频压缩,视频编辑,视频录制,视频下载,视频元数据修复,VR视频转换,字幕编辑器,GIF制作,DVD刻录等一站式视…

天线参数介绍

1.天线辐射元件种类图1-1 天线辐射元件种类如图1-1所示&#xff0c;天线辐射元件种类有&#xff1a;电镀偶极子、印刷电路偶极子、裂缝波导、凹口辐射器、矩形贴片辐射器、开口波导等。2、天线参数2.1 天线方向图天线方向图又叫辐射方向图&#xff08;radiation pattern&#x…

【MySQL基础教程】多表查询

前言 本文为 【MySQL基础教程】多表查询 相关知识&#xff0c;下边将对多表关系&#xff0c;多表查询概述&#xff0c;内连接&#xff0c;外连接&#xff0c;自连接&#xff0c;子查询&#xff0c;多表查询案例等进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的…

分布式理论协议与算法 第一弹 CAP理论

CAP 理论&#xff0c;也被称为 CAP 协议&#xff0c;指的是在一个分布式系统中&#xff0c;最多只能同时满足「一致性&#xff08;Consistency&#xff09;」、「可用性&#xff08;Availability&#xff09;」和「分区容错性&#xff08;Partition tolerance&#xff09;」这三…

Vue3 中组合式下的侦听器

目录前言&#xff1a;前置代码&#xff1a;创建侦听器停止侦听器watch侦听&#xff1a;对象中的某一个属性变化(需要提供getter函数才行)watch侦听&#xff1a;整个对象watch侦听&#xff1a;如果嵌套属性发生改变&#xff0c;默认是无法执行回调函数的?watch侦听&#xff1a;…

【实战与杂谈】如何复活一个开源网站-游戏王卡片生成器

1. 杂谈 作为一名十多年游戏王玩家&#xff0c;学生时代玩的是PSP和PS2上的游戏&#xff0c;到毕业后使用YGOPRO同步新卡片进行联网对战&#xff0c;再到现在约到线下进行实体卡片游戏。有些卡片价格太贵&#xff0c;因此我们对于这些卡在未购买之前都会自己打印出来暂时游玩…

sec5-属性

1 属性 GObject系统提供属性。属性是由实例保存的值&#xff0c;实例是GObject的后代&#xff0c;它们对其他实例开放。可以通过他们的名字访问他们。 例如&#xff0c;GtkWindow具有"title"、“default-width”、"default-height"等属性。字符串"t…

正经科普:DDos高防ip详解

白衬衫容易发黄&#xff0c; 一般洗衣液很难洗掉&#xff0c; 不少人为此感到头疼&#xff0c; 不妨在洗的时候吃点头痛药。 这边我也不多废话,大家直接看图,高防ip原理如下清洗能力 DDoS高防IP采用BGP链路对接全国各地30家运营商&#xff0c;总防御能力超4T。采用电信云堤近源…

智能优化算法:人工兔优化算法-附代码

智能优化算法&#xff1a;人工兔优化算法 摘要&#xff1a;人工兔优化算法( [Artificial rabbits optimization&#xff0c;RSO)是 Liying Wang等 于 2022 年提出的一种新型元启发式优化算法 。 该算法受来源于自然界中兔子的生存策略的启发&#xff0c;具有寻优能力强&#x…

【2.1】服务拆分--案例Demo

服务拆分--案例Demo服务拆分注意事项&#xff1a;导入服务拆分Demo测试结果&#xff1a;总结知识内容来自于黑马程序员视频教学和百度百科。博主仅作笔记整理便于回顾学习。如有侵权请私信我。 服务拆分注意事项&#xff1a; 比如现在有一个需求&#xff0c;是查询订单&#x…