(云计算HCIP)HCIP全笔记(十三)本篇介绍虚拟化技术,内容包含:虚拟化资源、虚拟化过程、I/O虚拟化、虚拟化架构KVM和Xen介绍、主流虚拟化技术介绍

1. 虚拟化资源

1.1 虚拟化对象

  • CPU虚拟化:

    目标是使虚拟机上的指令能被正常执行,且效率接近物理机

  • 内存虚拟化:

    目标是能做好虚拟机内存空间之 间的隔离,使每个虚拟机都认为自己拥有了整个内存地址,且效率页能接近物理机。

  • I/O虚拟化:

    目标使不仅让虚拟机访问到他们所需 要的I/O资源,而且要做好它们之间的隔离工作,更重要的是减轻由于虚拟化所带来的开销。

1.2 虚拟化过程

  • 全虚拟化:

    使用VMM实现CPU、内存、设备I/O的虚拟化,而Guest OS和计算机系统硬件都不需要进行修改。

优点 缺点
不需要修改guest os 虚拟化层的开销大
  • 半虚拟化:

    使用VMM实现CPU和内存虚拟化,设备I/O虚拟化由Guest OS实现。

优点 缺点
虚拟化层开销小,性能好 需要修改guest os
  • 硬件辅助虚拟化:

    借助硬件(主要是处理器)的支持来实现高效的全虚拟化。

    • 该技术将逐渐消除软件虚拟化之间的差别,成为未来的发展趋势。
优点 缺点
让物理硬件直接支持虚拟化功能 能够识别敏感指令 需要CPU支持虚拟化

1.3 IO 虚拟化

  • 全虚拟化
    • VM-->Hypervisor-->QEMU(Domain0)-->IO设备
  • 半虚拟化
    • VM-->QEMU(Domain0)-->IO设备
  • 设备直通
    • VM-->IO设备

1.3.1 I/O虚拟化问题:

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

访问截获:

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

1.3.2 虚拟化

I/O虚拟化可以被看做是位于服务器组件的系统和各种可用I/O处理单元之间的硬件中间件层,使得多个Guest可用复用有限的外设资源

I/O虚拟化的过程,就是模拟设备的这些寄存器和内存,解惑Guest OS对IO端口和寄存器的访问,通过软件的方式来模拟设备行为。

在QEMU/KVM中,客户机可用使用的设备大致可分为三类:

  1. 模拟设备:完全由QEMU纯软件模拟的设备
  2. Virtio设备:实现VIRTIO API的半虚拟化设备
  3. PCI设备直接分配(PCI device assignment)
1.3.2.1 I/O虚拟化-全模拟
  • 用软件完全模拟一个特定的设备

    1. 保持一样的软件接口,如:PIO、MMIO、DMA、中断等
    2. 可用模拟出跟系统中的物理设备不一样的虚拟设备
  • 每次I/O操作需要多次上下文切换

    VM<->Hypervisor

    Qemu<->Hypervisor

  • 将模拟的设备对不影响虚拟机中的软件栈

    1. 原生驱动
1.3.2.2 I/O虚拟化-Virtio
  • 虚拟出特殊的设备

    1. 特殊的设备驱动,包括VM中的Front-end驱动和主机上的Back-end驱动
    2. Front-end和Back-end驱动之间的高效通信
  • 减少VM和主机的数据传输开销

    1. 共享内存(Virt RING)
    2. Batched I/O
    3. 异步事件通知Eventfd轻量级进程间 "等待/通知" 机制
1.3.2.3 PCI设备直接分配:
  • KVM虚拟机支持将宿主机中的PCI、PCI-E设备附加到虚拟化的客户机中,从而让客户机以独占的方式方位这个PCI设备。
  • 这样的操作不需要VMM层的参与,从而让客户机对该设备的I/O交互操作和实际的物理设备操作完全一样

KVM使用的Qeumu技术介绍:

  • QEMU是一套由法布里斯·贝拉所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。
  • Qemu有着高速度核跨平台的特性,通过KQEMU这个闭源加速器,QEMU能模拟至接近真实电脑的速度。

1.4 虚拟化架构 KVM和Xen

1.4.1 Xen

  • Domain0
    • 处于特权级别的虚拟机
    • 实现IO的虚拟化
    • 管理DomainU
    • 管理硬件
  • DomainU
    • 普通用户虚拟机

1.4.2 KVM

  • KVM(Kernel-based Virtual Machine)是基于内核的虚拟机
  • 架构
    • 内核态:启用KVM.KO内核模块以实现CPU和内存的虚拟机
    • 用户态:部署QEMU以实现IO虚拟机

1.5 主流虚拟化技术介绍

1.5.1 Xen虚拟化简介

Xen的Hypervisor是服务器经过BIOS启动之后载入的首个程序,然后启动一个具有特定权限的虚拟机,称之为Domain 0(简称Dom0)。

Dom0的操作系统可以是Linux或Unix,Domain 0实现对Hypervisor控制和管理功能。

在所承载的虚拟机中,Dom0是唯一可以直接访问物理硬件(如存储和网卡)的虚拟机,它通过本身加载的物理驱动,为其它虚拟机(Domain U,简称DomU)提供访问存储和网卡的桥梁

1.5.2 KVM虚拟化简介

KVM(Kernel-based Virtual Machine)是基于内核的虚拟机。这是一款开源软件,于2007年2月被集成到Linux 2.6.20内核中。

KVM本质是Linux内核中的虚拟化功能模块kvm.ko,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。

  • KVM中,虚拟机其实就是一个Linux进程,由CPU进行调度运行。
  • KVM运行在内核空间,提供CPU、内存的虚拟化,它本身不执行任何模拟。运行在用户空间的QEMU提供硬件I/O的虚拟化模拟。
1.5.2.1 KVM与QEMU
  • 在KVM虚拟化方案中,KVM主要用于管理CPU和内存的虚拟化,IO设备的虚拟化则由QEMU来完成。
  • QEMU是一个纯软件实现的开源(模拟)软件,它能够模拟整套虚拟机的实现,包括CPU、内存、IO设备、USB、网卡等。
1.5.2.2 KVM原理

KVM是Linux Kernel的一个模块, 运行在内核空间。

  • QEMU运行在用户空间,提供硬件I/O设备的虚拟化模拟。
  • Linux系统安装KVM模块后,会有如下三种运行模式:客户模式、用户模式、内核模式。

2. 云计算与虚拟化的区别

类别 作用
云计算 一种商业模式或服务模式
虚拟化 实现云计算的重要手段之一

虚拟化技术:

  • 开源:KVM、XEN

  • 闭源:Hyper-v、vSphere、FusionCompute

3. 缩略词

VRM------------------------------虚拟机资源管理,会与cna进行对接,可以控制多台cna

KVM------------------------------虚拟机中的模块,存储在linux内核里

XEN------------------------------虚拟机中的内核模块,06年以前主流的虚拟机架构

libvirt------------------------------软件包,负责对接驱动和管理工具,它拥有多种语言的api接口,可以用根据对应语言的api直接进行管理libvirt对kvm操作

Guest Os------------------------------虚拟机操作系统

Huest Os------------------------------硬件操作系统

driver------------------------------硬件驱动

HPA------------------------------物理机的物理内存

HVA------------------------------物理机的虚拟内存

GPA------------------------------虚拟机的物理内存

GVA------------------------------虚拟机的虚拟内存

TLB------------------------------转译后备缓冲区

CAM------------------------------结合存储

4. ❤️HCIP专栏------前文链接

5. 💕👉博客专栏

相关推荐
*TQK*几秒前
线性代数——行列式⭐
笔记·学习·线性代数
brzhang6 分钟前
代码越写越乱?掌握这 5 种架构模式,小白也能搭出清晰系统!
前端·后端·架构
bxlj_jcj7 分钟前
如何实现Redis和Mysql中数据双写一致性
redis·缓存·架构
brzhang21 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
我想吃余1 小时前
Linux学习笔记(一):Linux下的基本指令
linux·笔记·学习
njsgcs1 小时前
yolov5 源码 +jupyter notebook 笔记 kaggle
笔记·yolo·jupyter
maray2 小时前
GPU 架构入门笔记
笔记
PXM的算法星球3 小时前
【算法笔记】贪心算法
笔记·算法·贪心算法
傻欣3 小时前
代码随想录学习笔记---二叉树
笔记·学习·算法
brzhang3 小时前
接口又乱又难用?老司机带你掌握 8 个 API 设计绝招,告别低效协作!
前端·后端·架构