基于armv8的kvm实现分析(一)虚拟化介绍

news2024/10/5 21:21:28

本文基于以下软硬件假定:

架构:AARCH64

内核版本:5.14.0-rc5

1 什么是虚拟化

  虚拟化就是把一台物理计算机虚拟成多台逻辑计算机,每台逻辑计算机里面可以运行不同操作系统,而相互之间不受影响,其典型架构如下:

  其中hypervisor又被称为VMM(virtual machine monitor),它被用于管理系统全局资源。guest os为运行在虚拟机(VM)上的操作系统,每个guest os之间都无法感知对方的存在,而认为其可以独占系统资源。

理想的虚拟化方案通常包含以下几个条件:
(1)等价性:VMM需要在宿主机上为虚拟机模拟出一个本质上与物理机一致的环境
(2)高效性:虚拟机指令执行的性能与其在物理机上运行相比没有明显的损耗
(3)资源控制:VMM可以完全控制系统资源,并且协调和分配给虚拟机

  通过将业务划分到不同的VM中,可以提高系统的资源利用率、安全性和可扩展性等。如对于硬件资源有富余的物理机,通过在上面运行多个虚拟机可充分利用其空闲资源,从而提高了资源的利用率。由于虚拟机之间的资源隔离作用,通过将不同安全等级的应用运行在不同虚拟机中,可以避免其互相干扰,以提高系统的安全性。在不改变物理机资源的前提下,可以动态地调整虚拟机资源,为系统配置带来了更多的灵活性和可扩展性

2 主流虚拟化方案

  按照虚拟化实现方式的不同,其可分为软件虚拟化和硬件虚拟化。而硬件虚拟化又可以根据VMM是否运行在host os上,而被分为type 1虚拟化和type 2虚拟化。由于虚拟化方案中guest os的IO操作需要退回到VMM中处理,而引入较大的开销,为了减少这部分开销又诞生了半虚拟化方案

2.1 软件虚拟化

  软件虚拟化不需要借助特殊的硬件支持,而能完整地模拟一台虚拟机,该虚拟机可包含自己的cpu、内存、中断控制器、定时器以及外部设备等,其典型方案为qemu。

  qemu方案可在宿主机上模拟多种不同架构的虚拟机,如x86、arm、mips、ppc等,也几乎能模拟出任何的硬件设备,以下为其架构图:

  由于其模拟的架构与宿主机架构可能不同,故guest os的二进制程序无法直接在宿主机上执行。qemu通过二进制翻译的方式将VM指令翻译为宿主机指令,从而实现guest os在宿主机上的正常运行。

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! !  

  为了减少二进制翻译的复杂度,qemu引入了TCG中间指令格式,guest指令先被翻译成TCG指令,然后将TCG指令翻译成宿主机指令。如下图为在X86平台上模拟arm平台虚拟机的指令翻译流程:

  这种方式下,若系统一共支持N种指令集,则一共需要实现2 * N种指令翻译方案。而若采用直接翻译方式,由于每两种指令集之间都需要支持翻译,因此总共需要实现2^N种翻译方案。

  由于所有指令都需要在运行时执行翻译流程,因此严格意义上来说qemu只能叫做模拟器,而且相对于指令直接运行在cpu上,其效率相当低。但是qemu在很多情形下是非常有用的,如芯片开发或嵌入式开发早期缺少目标板时,可用qemu模拟的方式实现代码调试。

2.2 硬件虚拟化

  在硬件虚拟化方案中guest指令不再需要指令翻译,而是直接运行在物理cpu上,这种方式解决了软件虚拟化的效率问题。

  根据VMM实现方式的不同,硬件虚拟化方案包含type1 hypervisor和type2 hypervisor两种类型。type1方案中hypervisor直接运行在硬件上,并管理系统中所有的硬件资源和虚拟机,其典型框图如下:

  这种方式hypervisor除了执行虚拟机管理功能外,还需要实现系统中所有设备的驱动,因此开发工作量较大。

  Type 2 hypervisor会运行在一个host os上,host os负责管理和控制系统的硬件资源。而hypervisor作为host os的一个组件,执行虚拟机的管理工作。其典型框图如下:

  此时,hypervisor可以复用host os的驱动程序,而其自身只需要专注于虚拟机管理相关的工作,从而开发工作量大大降低了。

  当前比较广泛使用的hypervisor为xen(type1)和kvm(type2),在arm64架构下它们的效率如下:
(1)对于type2 hypervisor,传统方式下host os和hypervisor运行在不同的异常等级,因此它们之间需要通过异常的方式实现功能调用,相对于type1 hypervisor效率会有所降低

(2)为了解决该问题,armv8.1增加了vhe扩展支持,使得host os和hypervisor都可以运行在EL2下。此时它们之间可以直接通过函数的方式实现功能调用,因此其效率已经与type1 hypervisor不相上下

2.3 半虚拟化

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

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

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

3 后续工作

  由于kvm具有简单、高效等突出优势,因此后面我们将重点介绍arm64架构下的kvm实现方案及其代码流程。kvm只包含了内核态的实现,因此其通常会与qemu配合使用,由qemu提供用户态实现和大部分设备的模拟工作,故在后面的讨论中若涉及用户态的部分,则都以qemu为例

原文链接:https://zhuanlan.zhihu.com/p/528599297

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

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

相关文章

面试了个 985 毕业的同学,回答“性能调优”题时表情令我毕生难忘

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,面…

JavaIO流:概述

在接触 IO 流前,无论是 变量的声明、数组的创建,又或者是复杂的并发设计还是 Jvm 的性能调优,我们更多的还是和内存打交道。但我们知道计算机组成包括运算器,控制器,存储器,输入设备,输出设备。…

springcloud4:服务注册中心Eureka

直接调用即可,为什么用Eureka什么是服务治理? 多个服务调用,需要有依赖中心管理什么是服务注册? 有一个注册中心,当服务器启动时,会把自己的信息注册到注册中心上什么是服务发现? Client通过注册…

electron打包ffi-napi报错 npm ERR! gyp reason: read ECONNRESET

问题描述 这个问题用了我两天的时间,所以记录一下。 我们项目是使用electronvue,做支付功能的时候需要使用到ffi-napi依赖包。 最后打包的时候ffi-napi报错了,在package.json中去掉ffi-napi就可以打包,但是打包运行后提示缺少ff…

re:Invent 2022,探秘亚马逊云科技的重量级计算创新——Nitro

诞生于16年前的亚马逊云科技,开创了一个全新的云计算领域。秉持着创新与探索精神,自2012年开始,在每年一度的re:Invent全球大会上,亚马逊云科技都会发布最新的云计算技术。对IT产业演进产生了革命性的影响,Nitro系统就…

Java笔记(工厂模式、动态代理、XML)

一、工厂模式 软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的复用性。 什么…

代码随想录算法训练营第四十三天| LeetCode1049. 最后一块石头的重量 II、LeetCode494. 目标和、LeetCode474. 一和零

一、LeetCode1049. 最后一块石头的重量 II 1:题目描述(1049. 最后一块石头的重量 II) 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将…

让你快速高效的掌握linux内核编译过程

Linux内核编译 一、linux内核的配置与编译: 1.配置内核 1)导入默认配置: make xxxx_defconfig 注1:xxxx表示内核支持的芯片的名称 比如make exynos_defconfig 注2:内核源码中对每个支持的芯片都有默认的配置,默认配置很…

【博学谷学习记录】超强总结,用心分享|架构师-RabbitMQ消息可靠性保障

文章目录一、生产者保证1.1 失败通知1.2 发送方确认1.3 Broker丢失消息二、消费方消息可靠性2.1 消费者手动确认消息依靠三个对象:生产者、消费者、broker一、生产者保证 生产者发送消息到broker时,要保证消息的可靠性,主要的方案有&#xf…

5.28 综合案例2.0-简易起夜灯

HaaS506 - 简易起夜灯简介准备硬件连接图功能实现1.继电器使用说明2. 5.8G雷达感应传感器模块说明3.简易代码3.1测试log简介 案例为了解决晚上起床找不到灯的问题。当你从床上起来时,雷达感应传感器检测到你的活动后自动打开电灯。省去了寻找电灯开关的麻烦。 准备…

java学习笔记 day07-Java基础-综合练习

练习一:飞机票 需求: ​ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 ​ 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来…

表白墙(web版)

文章目录前言一、需求分析1.表白墙页面设计2.表白墙功能二、实现1.客户端2.服务器端3.连接数据库前言 前面前端部分写过一个表白墙页面,但是它不能存储提交信息,为了能够让它在提交信息后可以保存其信息,页面刷新后信息依然存在,…

itk配准整理(1)

示例地址: itk\ITK\Examples\RegistrationITKv4\ImageRegistration7.cxx 说明:itk二维图像的配准:平移旋转缩放 效果图: 运行结果: 52 53.6213 [0.8333298229719548, -0.17450270771316403, -12.806452097490313, -1…

在Win10中使用YAMAHA S-YXG50软波表

曾经非常经典的一款软波表YAMAHA S-YXG50我个人非常的喜欢。在XP系统的时代,是我必装的软件,用来听一些MIDI音质和效果很好。而如今玩MIDI的人越来越少了,软波表的时代也被人渐渐的遗忘了。 如今想要怀旧的话,只能够找一台老电脑…

LINUX的XEN和KVM到底区别在什么地方?

本文调研的是 Completely Fair Scheduler 算法, 它当前是 Linux 中 SCHED_NORMAL(非实时任务) 一类 task 的默认调度器. 实际上, 运行在 Guest OS 中的应用程序线程还受到 Guest OS 的调度, 分时运行在 vCPU 上, 但这不在本文调研范围内. 本文仅调研 vCPU 被如何调度到 pCPU 上…

WebDAV之葫芦儿·派盘+无聊笔记

无聊笔记 支持webdav方式连接葫芦儿派盘。 无聊笔记是一款深受用户认可的系统工具,随时都可以进行软件的操作,也可以在线进行笔记的记录,系统会进行智能的保存,满足了用户日常中的需求,可以把软件作为备忘录,笔记本,摘抄录等。 无聊笔记是一个功能强大的记录工具,您…

代码随想录算法训练营第四十二天| LeetCode416. 分割等和子集

一、LeetCode416. 分割等和子集 1:题目描述(416. 分割等和子集) 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 2:解题思路 本题需要使用01背包的…

合作动态 | 方正璞华与日立签订战略合作协议,加快推进数字化管理变革!

2022年10月27日,方正璞华PLM事业部负责人王志起先生与日立方代表正式签订“方正璞华PLM产品销售合作框架协议”。 根据协议,双方将围绕璞华PLM产品推广、客户拓展、全生命周期运营服务等领域,开展多元化、多层级的深度融合合作,共…

HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

CV:计算机视觉技最强学习路线之CV简介(传统视觉技术/相关概念)、早期/中期/近期应用领域(偏具体应用)、经典CNN架构(偏具体算法)概述、常用工具/库/框架/产品、环境安装、常用数据集、编程技巧

CV:计算机视觉技最强学习路线之CV简介(传统视觉技术/相关概念)、早期/中期/近期应用领域(偏具体应用)、经典CNN架构(偏具体算法)概述、常用工具/库/框架/产品、环境安装、常用数据集、编程技巧 导读:计算机视觉技最强学习路线,博主花了三个晚…