云计算运营—03 KVM虚拟化技术方案介绍

news2024/11/12 2:00:08

KVM虚拟化技术方案介绍

1.背景介绍

KVM(Kernel-based Virtual Machine)

开源全虚拟化方案

  • 支持体系结构
    • x86(32位,64位)、IA64、PowerPC、S390
  • 依赖x86硬件支持:Intel VT-x/ AMD-V
  • 内核模块,使得linux内核成为hypervisor

XEN架构

  • domainU:普通用户虚拟机

  • domain0:特权虚拟机

    • 唯一

    • 拥有设备驱动,可以直接认识硬件设备

    • 拥有后端驱动,可以与众多普通虚拟机交互,实现IO虚拟化

    • 最先启动。

    • 可以管理其他domainU虚拟机

早期是半虚拟化,现在是全虚拟化。性能较差,但是安全性较好。

在这里插入图片描述

KVM架构:

  • KVM:内核中的一个模块,部署在linux kernel中,使得linux kernel变为hypervisor。可以实现CPU虚拟化、内存虚拟化。无法实现IO虚拟化。运行内核态。
  • QEMU-KVM:实现IO虚拟化。运行在用户空间中,用户态。

优点:全虚拟化性能较好

QEMU:与KVM、XEN一样,也是属于虚拟化解决方案的一种,也就是说,它能够实现CPU虚拟化、内存虚拟化、IO虚拟化。轻量级,性能较差。单线程。

KVM调用QEMU实现IO虚拟化,反过来,也可以认为是QEMU调用KVM,增强CPU、内存虚拟化的性能。

KVM使用的QEMU不一样的。多线程。QEMU-KVM

在这里插入图片描述

2.KVM简介

UVP虚拟化架构中KVM架构

FusionCompute,简称FC。有2部分组成:CNA+VRM。

  • CNA又由两部分组成:UVP+VNA。UVP实现底层硬件的虚拟化,VNA实现对接VRM。
  • VRM是集群级的一个管理平台(具体是以2台虚拟机主备形式部署在2个管理节点上)。

在这里插入图片描述

libvirtd

libvirtd:统一的接口。兼容不同的虚拟化方案,统一管理。

  • 南向可以接入不同虚拟化产品。
  • 北向提供统一接口,通过不同工具(cli\图形化),管理虚拟机。
  • 通过xml文件,统一定义虚拟机。

在这里插入图片描述

CPU虚拟化

X86架构CPU拥有四种等级的指令:

  • ring0特权指令,给操作系统使用

  • ring1\2给驱动程序使用

  • ring3非特权指令,给应用程序使用

操作系统对CPU的认识与管理达成以下两点认识:

  1. CPU资源永远就绪
  2. OS对CPU具有最高权限

在这里插入图片描述

引入虚拟化后出现的问题:

  • 多个VM之间共享CPU资源
  • 部分指令只有hypervisor有权限使用
  1. 多个VM之间共享CPU资源的问题?
    将VM的vCPU调度到CPU的线程上运行,实现物理CPU资源的分时复用

  2. 虚拟机指令越级的问题?
    传统架构中,操作使用ring0,应用程序使用ring3。
    在虚拟化架构当中,VM可看作上面的应用程序,只能使用ring3。但里面实际上有OS,需要使用ring0。所以,指令越级。

    经典虚拟化:特权解除、陷入模拟。
    当虚拟机操作系统需要使用ring0指令,解除特权,由host os的ring1模拟。
    缺点:在X86架构中,遇到问题:在非特权指令中,有19条敏感指令。

解决方案

1、操作系统辅助的全虚拟化

修改host OS,接收VM全部指令进行处理。优点:解决敏感指令的问题。
缺点:1、host OS压力较大,2、host 0S需要修改,难度较大。

在这里插入图片描述

2、半虚拟化

修改guest os,VM不发出敏感指令。优点: host OS压力较小
缺点:需要修改guest 0S,只有开源可以修改,不能运行闭源操作系统。

在这里插入图片描述

3、硬件辅助的全虚拟化:

在CPU层面,引入根与非根,分别拥有ring0-3,根给host os 使用,非根给Guest os

在这里插入图片描述

全虚、半虚
区别:虚拟机操作系统是否修改。如果修改就是半虚,不修改就是全虚

KVM CPU虚拟化

  • 非根模式:客户机模式
  • 根模式ring0:内核态模式
  • 根模式ring3:用户态模式

在这里插入图片描述

vm entry:由内核态进入客户机模式

vm exit:由客户机模式进入内核态

以上两个切换,会有切换开销。本身VMM运行,也需要消耗性能。所以,虚拟化后的性能损耗,来自切换开销、VMM的性能消耗。

在这里插入图片描述

内存虚拟化

操作系统对内存的认识与管理达成以下两点认识:

  1. 内存都是从物理地址0开始的
  2. 内存都是连续的

引入虚拟化后出现的问题:

  • 从物理地址0开始的:物理地址0只有一个,无法同时满足所有客户机从0开始的要求;
  • 地址连续:虽然可以分配连续的物理地址,但是内存使用效率不高,缺乏灵活性。

在这里插入图片描述

GVA: Guest virtual Address客户机虚拟地址客户机给应用程序分配地址,可能是真实内存,也可能是硬盘
GPA: Guest Physical Address客户机物理地址客户机以为真实内存
HVA: Host Virtual Address宿主机虚拟地址宿主机给应用程序(VM)分配地址,可能是真实内存,也可能是硬盘
HPA: Host Physical Address宿主机物理地址实际上就是服务器真实内存

HPA-》 HVA-》GPA-》GVA

HPA-》HVA 本身OS具有MMU,就可以实现
HVA-》GPA MMU虚拟化
GPA-》GVA VM本身OS也具有MMU,也可以实现

MMU虚拟化**(MMU本质是是内存管理模块)**

  • 软件 XEN 可以是半虚、全虚

    • 直接模式:半虚化,知道自己是处于虚拟化环境当中,可以直接在hypervisor当中实现HVA-》GVA的转化。(宿主机虚拟地址-》客户机虚拟地址)

    • 影子列表:全虚化,不知道自己运行··在物理服务器或虚拟化环境中,可以在hypervisor当中实现HVA-》GPA的转化。再由虚拟机本身实现GPA-》GVA的转化。(宿主机虚拟地址-》客户机物理地址-》客户机虚拟地址)

  • 硬件:由CPU直接实现HVA-》GPA的转化。

    • EPT: intel
    • NPT: amd

大页内存

MMU

会拥有内存映射表,记录物理地址—》虚拟地址(包含真实内存、硬盘)

该表,一般存在于内存当中

为了配置大页内存把MMU表存放在CPU寄存器上

配置主机大页内存,优化主机内存访问效率,从而提升性能。大页虚拟机不支持计算资源调度,无法给出正确的调度策略,建议将大页虚拟机部署到独立集群,所在集群无需开启计算资源调度。

在这里插入图片描述

I/O虚拟化

软件与软件、硬件的通信:

需要CPU)——》数据拷进去写入在拷出来

  • Port IO 使用专门的IO空间,由CPU拷贝
  • MMIO 使用内存空间,由CPU拷贝

(服务器里面专门负责)——》数据拷进去写入在拷出来

  • DMA 由DMA控制器拷贝

在这里插入图片描述

I/0虚拟化需要解决两个问题

设备发现:
需要控制各虚拟机能够访问的设备

访问截获:

  1. 通过I/0端口或者MMIO对设备的访问
  2. 设备通过DMA与内存进行数据交换

全模拟(完全由软件实现)

原理:

  1. VM中的APP进行IO,通过VM中驱动发送虚拟设备
  2. 虚拟设备往外发送
  3. KVM拦截
  4. KVM发送IO共享环,告诉QEMU,完成操作
  5. QEMU从IO共享环中取出
  6. 通过真实设备驱动,发送设备

优点:兼容很好

缺点:IO路径长,需要上下文切换,开销大。性能差

在这里插入图片描述

virtio(主流)

在这里插入图片描述

原理:

  1. VM中的APP进行I0,通过前端驱动发送出去
  2. 发送IO共享环,告诉后端驱动,完成操作
  3. QEMU从IO共享环中取出
  4. 通过真实设备驱动,发送设备

优点:相比全模拟,路径较短,性能较好

缺点:某些操作系统不支持,比如windows默认不支持,需要额外的驱动

在这里插入图片描述

vhost

相比virtio,路径更短,不需要经过qemu,直接由kernel的vhost模块处理。

缺点:兼容性更差。

对比virtio

Virtio

HW=> Host Kernel

Host Kerne=>qemu

Qemu=>guest

Vhost

HW=> Host Kernel(内核)

Host Kernel=> Guest

在这里插入图片描述

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

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

相关文章

《B-树》

tips:B-树读成b树,并不是b减树 【一】基本搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索树无要求O(N)二叉平衡树(AVL和红黑树)无要求,最后随机O(log2N)哈希无要求O(1)位图无要求O…

linux系统中SPI驱动框架的基本原理与实现

大家好,今天主要和大家聊一聊,如何使用linux系统中SPI驱动ICM-20608六轴传感器的操作。 目录 第一:linux系统下SPI驱动框架简介 第二:SPI设备驱动编写 第三:SPI设备和驱动匹配过程 第一:linux系统下SPI驱…

MySQL数据库高级面试题(1)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java面试题…

CSDN年度征文 | 你好,2023

祝大家新年快乐~🧧🧧🧧⭐过去的2022⭐2022已成过去,2023慢步向我们走来。回首2022,这一年不是平凡的一年。这一年,有苦也有乐。冬奥会的成功举办、香港回归25周年、二十大胜利召开、航天任务圆满成功等等都…

设计 | 分享5个好用的PPT模板网站

第一PPT 这个老牌的模板网站了,全站都是免费下载,还是不错的 但是素材质量嘛,免费所以不太高。 第一PPT下载https://www.1ppt.com/ 模板狗 这个是最近发现的一个网站,其中内容比较精美。 而且不用开会员也能单独购买&#x…

【Android】APT

引言: 安卓中APT又叫Annotation Processing Tool,即注解处理器。Java中注解分为编译时注解和运行时注解,编译时注解无法通过反射的方式进行获取和处理,所以我们可以利用APT处理编译时注解。比如常见的三方库ButterKnife、ARouter…

mysql删除重复记录并且只保留一条

准备的测试表结构及数据 插入的数据中A,B,E存在重复数据,C没有重复记录 CREATE TABLE tab ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(20) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT13 DEFAULT CHARSETutf8; -- --------------------…

使用root用户和普通用户完成分配任务案例 ansible(1)

目录 案例一: 控制主机和受控主机通过root用户通过免密验证方式远程控制受控主机实施对应任务。 案例二: 控制主机连接受控主机通过普通用户以免密验证远程控制受控主机实施特权指定操作。 案例一: 控制主机和受控主机通过root用户通过免…

<网络概述>——《计算机网络》

目录 1.网络基础 1.1 计算机网络背景 1.2 网络发展 1.3 软件分层 1.4 网络和操作系统的关系 1.5 局域网通信的原理 2. 网络协议 2.1 网络协议初识 2.1.1 协议分层 2.2 OSI七层模型 2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程 3.1 网络传输流程图 3.2 数据包…

密码技术扫盲,Part 3:认证

个人博客 密码技术扫盲,Part 1:对称加密密码技术扫盲,Part 2:非对称加密🎯 密码技术扫盲,Part 3:认证 除了加密,还有一类用法是对信息的认证,主要包括 4 个技术 单向散…

PostgreSQL JIT 实现query性能加速的一些补充

文章目录背景Executor 本身做的一些优化LLVM JIT 的优化本地以及全局优化执行 query 时的优化JIT调度优化 过程背景 之前介绍过一次 PostgreSQL JIT with LLVM 实现,因为有一些细节没有介绍得很清楚,需要额外做一些补充。 关于LLVM 的IR 以及 如何 用LL…

11.HTML颜色、HTML脚本、字符实体、URL

1.HTML颜色 1)HTML 颜色由红色、绿色、蓝色混合而成。 2)HTML 颜色由一个十六进制符号来定义,这个符号由红色、绿色和蓝色的值组成(RGB)。 3)每种颜色的最小值是0(十六进制:#00&…

性能优化系列之怎么让图片加载得更快?

文章の目录一、压缩png1、优势2、说明文档3、安装4、使用4.1、环境4.2、示例4.3、API4.4、还有一个第三库是对当前库的封装,叫jdf-png-native【版本1.1.0,环境同node-pngquant-native】,使用方法和node-pngquant-native差不多二、压缩jpg1、优…

分享68个PHP源码,总有一款适合您

链接:https://pan.baidu.com/s/1QB61EsIl70vXx1yrJkiesA?pwdbup1 提取码:bup1 PHP源码 分享68个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载…

【树莓派不吃灰】IO篇① GPIO 开发环境

目录1. 前言1.1 4B GPIO引脚排列2. Python GPIO安装3. 基于C语言的wiringPi安装❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-01 ❤️❤️ 本篇更新记录 2023-01-01 ❤️🎉 欢迎关注 🔎点赞 &…

vivo 服务端监控体系建设实践

作者:vivo 互联网服务器团队- Chen Ningning 本文根据“2022 vivo开发者大会"现场演讲内容整理而成。 经过几年的平台建设,vivo监控平台产品矩阵日趋完善,在vivo终端庞大的用户群体下,承载业务运行的服务数量众多&#xff0c…

Modbus-RTU通讯协议中CRC校验

MODBUS协议中的CRC校验_RobotWoods的博客-CSDN博客_modbus crc 以下面这段收发数据为例: 发送的数据是工控机发送给plc的,他们的通信是modbus通信,前面的01。。。。。0f是实际使用的数据,具体意义可以查,后面的4位数87…

对模板类型推演的一个小Bug

在写vector的代码时遇到了这样一个错误 以下是代码书写内容以及我的测试代码 测试代码的目的就是想测试一下我写的vector构造方法 vector(size_t n, const T& val T()); 可是却发生了上述的报错 vector(size_t n, const T& val T()){// 法一&#xff1a…

【云原生】springcloud13——Config分布式配置中心

前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:深入、全面、系统的介绍springcloud与springcloud Alibaba微服务常用技术栈 🌰 文章简介:本文…

JUC并发编程学习笔记(三)集合线程安全及多线程锁

4 集合的线程安全 4.1 集合操作 Demo 创建集合使用string的泛型 for (int i 0; i <30; i) {new Thread(()->{//向集合添加内容list.add(UUID.randomUUID().toString().substring(0,8));//从集合获取内容System.out.println(list);},String.valueOf(i)).start(); }查看…