虚拟化技术对象

虚拟化技术对象分类

  1. CPU虚拟化
  2. 内存虚拟化
  3. I/O虚拟化 --- 其中I/O虚拟化还可以引申出两个分支
    1. 存储虚拟化
    2. 网络虚拟化

CPU虚拟化技术

CPU虚拟化是一种技术,它允许单个物理CPU模拟多个独立的虚拟CPU(vcpu)。

CPU虚拟化的关键在于虚拟机监控器(Hypervisor),它负责管理物理CPU资源,将这些资源分配给各个虚拟机,Hypervisor会为每个虚拟机创建一个或多个vcpu。

1. 资源时间虚拟化

Hypervisor 通过时间分片技术对 CPU 资源进行调度,并将这些资源以 vCPU 的形式分配给虚拟机(VM)。虚拟机内的操作系统(guest OS)会感知到连续的 CPU 使用时间,但实际上它所获得的是经过调度的、分时的 CPU 资源。这种机制确保了多个 VM 能够公平且有效地共享物理 CPU。

2. 指令虚拟化

cpu指令集架构:CISC 复杂类型 | RISC 精简类型

cpu指令级别分类:

  • Ring0:最高特权级别,内核态进程,可以执行特权指令。
  • Ring1:默认情况无人执行。
  • Ring2:默认情况无人执行。
  • Ring3:这是最低的特权级别,由用户应用程序运行。

指令分为:

  • 敏感指令:影响计算机全局状态的指令
  • 非敏感指令:指的不会影响计算机全局状态

如果虚拟机在内核层面,如果可以直接执行ring0,那么整个虚拟化平台全局状态都会造成影响

为了解决这个问题,采用了一种称 “陷入-模拟” 的技术(经典虚拟化解决方案-RISC)

  1. 特权降级 - Hypervisor将guest OS内核的执行权限限制在Ring 1,尽管它仍然可以发出Ring 0级别的指令。
  2. 陷入:当 guest OS kernel 发出 Ring 0 级别的指令时,Hypervisor会收到一个告警,并介入处理。
  3. 模拟:一旦 hypervisor 收到告警消息之后,立即知道 guest OS kernel 发送的是 ring0 指令,由 hypervisor 进行翻译后,模拟执行

但是在 x86 服务器虚拟化解决方案中,不能使用该方案,因为在该方案中,ring3 指令不模拟。

在 RISC 架构中,所有 Ring3 / 用户态指令都是非敏感指令

在x86架构中,有一部分指令称为临界指令,这一部分属于敏感指令

x86架构虚拟化漏洞解决办法

  1. 全虚拟化
  2. 半虚拟化
  3. 硬件辅助虚拟化

CPU全虚拟化

当在x86架构中,如果使用全虚拟化,这意味着当前系统os,无论是 用户态 / 内核态 发送的指令,全都要被 hypervisor 捕捉。
捕捉之后再由 hypervisor 进行模拟 ring1与 ring3(敏感指令)。
这也意味着 hypervisor 需要不断主动监控 VM 发送的指令,判断该指令是否为敏感指令,如果敏感则需要模拟。

优点:不需要修改虚拟机 OS-kernel,可以模拟安装 windows,linux
缺点:hypervisor 不断判断指令类型,性能损失大

CPU半虚拟化

经典代表技术 xen (由hypervisor软件实现的半虚拟化)

半虚拟化技术打破了同质原则,因为它要求对 OS-kernel 进行修改以适应虚拟化环境。与全虚拟化不同,半虚拟化不需要完全模拟硬件,而是通过修改操作系统内核来实现与VMM或Hypervisor的协作。

优点:效率高,开销小
缺点:打破了原则,需要修改 OS-kernel(windows 不可以,linux 可以)

CPU硬件辅助虚拟化

提升指令翻译效率,虚拟机接近物理机性能,又不需要修改虚拟机 OS-kernel,不打破同质原则。

通过硬件实现 CPU 虚拟化,对 CPU 进行指令调整 / 引入了额外的层次

与全虚拟化和半虚拟化不同的是,硬件辅助虚拟化是由 CPU 进行捕捉指令而不是由hypervisor,这样减少了Hypervisor在软件层面进行的模拟和中介操作,从而提高了虚拟机的性能。

硬件辅助虚拟化技术,尤其是Intel的VT-x和AMD的AMD-V,已经被广泛应用于多种虚拟化架构中。
使用硬件辅助虚拟化架构的有:KVM(必须使用)| xen | VMware esxi

内存虚拟化

内存虚拟化可以分为两种:

  1. 操作系统级别的内存虚拟化
  2. Hypervisor级别的内存虚拟化
操作系统级别的内存虚拟化

重点:如何将内核识别到的内存 - 分配给用户态进程

操作系统首先识别并管理物理内存,然后将其分页,并通过页表将这些物理页映射到每个程序的虚拟地址空间,实现内存的虚拟化和隔离。

Hypervisor 级别的内存虚拟化

重点:如何将 hypervisor 识别的内存 - 分配给虚拟机

Hypervisor 识别宿主的物理内存,并为虚拟机分配独立的内存资源,通过映射表映射实现内存隔离,同时支持动态内存管理和过分配,以提高资源效率并保障虚拟机的独立性。

在内存虚拟化中,需要完成两次内存映射:
  1. 物理内存到虚拟化内存的映射:Hypervisor 首先识别并管理宿主机器上的物理内存(通常称为物理地址空间)。在虚拟化环境中,这部分内存被称为HPA。
    1. HPA 描述在虚拟化环境中,由 hypervisor 创建和管理的虚拟地址空间中的地址。
  2. 虚拟化内存到虚拟机的映射:Hypervisor通过虚拟化层将物理内存映射到虚拟地址空间,形成HVA。这些虚拟化后的内存被分配给虚拟机,其中虚拟机操作系统内核识别的内存地址为GPA,而虚拟机中的应用则通过虚拟地址访问这些内存。
    1. GPA 指的是虚拟机操作系统内核用来引用虚拟机内存的地址。

I/O虚拟化

在虚拟机里哪些设备用到了I/O虚拟化:

  1. 虚拟网卡
  2. 虚拟磁盘
  3. 虚拟USB

I/O虚拟化需要解决的问题:

设备识别:确保每个虚拟机能够识别到分配给它的虚拟 I/O 设备,并且可以正常的驱动

访问截获:Hypervisor 负责监控并截获虚拟机发出的所有I/O请求,并且能够进行正确地翻译

存储虚拟化

每个虚拟机允许需要有操作系统,操作系统需要安装到磁盘中。每个 VM 都需要有自己独立的(虚拟)磁盘用来承载虚拟机内的数据。

存储虚拟化:Hypervisor 是如何将物理磁盘空间划分成多个虚拟磁盘空间 - 磁盘空间资源虚拟化

  • 虚拟机首先将数据写入其独立的虚拟磁盘,这些虚拟磁盘之间保持隔离,确保数据互不干扰。

虚拟磁盘实现方法:

  1. 文件系统映射(最为普遍-几乎所有虚拟化平台都能支持)
  2. 分区映射(部分虚拟化平台支持)
  3. 裸设备映射(几乎所有虚拟化平台都能支持)

这些方法提供了不同的性能和灵活性选项,适用于不同的虚拟化场景和需求。

网络虚拟化

网络虚拟化是一种使网络资源更加灵活和可管理的技术。它通过软件手段在现有的物理网络基础上创建多个逻辑网络,这些逻辑网络可以独立配置、管理和优化,而不受物理网络结构的限制。

物理网络构成:

  • 硬件:
    • 网卡(NIC):安装在计算机或其他设备上,用于连接网络。
    • 网线:如光纤、电缆等
    • 交换机:负责数据包的转发和网络间的连接。
  • 软件:
    • 网卡驱动:操作系统中的软件,用于控制和管理网卡硬件。
    • 网络协议栈:如TCP/IP

虚拟网络构成:

  • 硬件(需要通过 hypervisor 进行虚拟化):
    • 虚拟网卡(NIC)
    • 网线:在虚拟网络中,取消了虚拟网线。
    • 虚拟交换机:虚拟交换机软件(VMware-Vmnet、Linux-Bridge、OpenVSwitch)
  • 软件(安装在虚拟机中):
    • 网卡驱动
    • TCP/IP协议
虚拟机中没有了网线,虚拟网卡如何与虚拟交换机连在一块呢?

在虚拟机中,虚拟网卡(vNIC)与虚拟交换机(vSwitch)的连接是通过软件定义的方式实现的。也可以理解为在虚拟网络中网卡与端口“焊在一块的”,因为它们是紧密关联且不可分割的。这样就能使虚拟机能够像使用物理网络设备进行网络通信。

  • 36
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值