searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

虚机化基础概念(虚拟机)

2023-10-27 06:59:07
8
0

问题:容器、虚机两种虚拟化技术的本质区别是什么?

虚拟化的概念最早在1959年,由牛津大学的计算机Christopher Strachey教授提出

1960 年IBM进行 M44/44X 计算机研究项目,实现世界第一个支持虚拟机的系统

该研究项目首次提出了两个概念:VM(Virtual Machine )和VMM(Virtual Machine Monitor,虚拟机监控器,也称为Hypervisor

VMM向下掌控实际的物理资源,向上呈现给虚拟机N份虚拟的逻辑资源


全虚拟化(Full-Vritralization)

  • VMM模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等
  • GuestOS完全不做任何修改就可以在虚拟机中运行,甚至无法区分自身是否运行在虚拟机中

基于二进制翻译实现的全虚拟化

  • 纯软件模拟来实现VMM层,VMM将GuestOS的指令翻译成HostOS的指令
  • 实现非常复杂
  • 所有指令都需要翻译,性能较差
  • 支持跨平台

半虚拟化(Para-Vritralization)

  • 需要针对性修改GuestOS内核源码,对闭源的GuestOS不友好
  • 修改过的GuestOS内核遇到敏感指令,会自动替换为Hypercall向VMM发起调用
  • 效率接近原生系统

硬件辅助的全虚拟化

  • 硬件本身提供能力,区分不同的运行环境(譬如x86架构CPU,提供了root/non-root两种模式)
  • 效率接近原生系统
  • 跨平台能力较差

直通(passthrough)

  • 将GuestOS上虚拟设备的访问地址映射到HostOS的相同地址
  • 需要芯片组和CPU支持
  • 性能与原生系统几乎一致

CPU虚拟化

以Intel的x86架构CPU为例,提供了ring0-ring3共4个特权级别

常见的操作系统只用到ring0(内核态)和ring3(用户态)


Intel和AMD分别提供了硬件虚拟化技术VT-x和AMD-V,提供了root mode和non-root mode两种运行模式

内存虚拟化

Linux系统下,进程操作内存需要进行地址转换VA(虚拟地址)→PA(物理地址),转换过程依赖MMU(Memory Management Unit)和页表来完成

而在GuestOS中,则需要多一次转换GVA(Guest VA)→GPA(Guest PA)→HPA(Host PA)

软件实现的全虚拟化很复杂,转换过程也是通过VMM提供的来影子页表(Shadow Page Table)完成

容易出现高频率的VM Exit,还需要考虑影子页表的同步,缓存影子页表的内存开销大

因此厂商也推出了各自的硬件辅助技术,比如Intel的EPT(Extended Page Table)和AMD的NPT(Nested Page Table)

够从硬件上同时支持GVA→GPA→HPA的转换,大幅减少了因为页表更新带来的VM Exit

IO虚拟化

QEMU(Quick Emulator)

  • 纯软件实现的虚拟化系统,功能强大
  • 可以模拟整套的虚拟机包括处理器虚拟化,内存虚拟化,以及各种IO设备
  • 限制于软件模拟,性能较为低下

KVM(Kernel-based Virtual Machine)

  • 基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的全虚拟化解决方案
  • 从Linux 2.6.20开始整合到Linux内核版本中
  • 在原有的用户模式和内核模式中新增了客户模式,客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中

QEMU-KVM(软件模拟的IO全虚拟化方案)

  • KVM可以实现高性能的CPU、内存虚拟化,补全了QEMU的性能短板
  • KVM提供了虚拟化内核运行环境,用户无法直接控制内核去做任何事情,需要类似QEMU这种运行在用户态工具来管理虚拟机
  • KVM只负责CPU和内存的虚拟化工作,其他IO设备的模拟化交给QEMU来负责
  • QEMU 1.3之后的主干代码中已经包含了KVM相关功能

virtio(半虚拟化方案)

  • 前端驱动:Frontend Driver,是位于客户机内核中的驱动程序模块,如virtio_blk、virtio_net等
  • 后端驱动:Backend Driver,在宿主机用户空间的 QEMU 中实现
  • virtio内部将所有设备都抽象为PCI设备,统一了transport层的传输方式
  • virtio提高效率的方式主要是减少了核心态/用户态的切换次数

PCIe设备直通

常见技术:Intel VT-d(Virtualization Technology for Directed I/O)或 AMD IOMMU(Input/Output Memory Management Unit)

  • 允许将某些PCI设备的管辖权直接移交给GuestOS,GuestOS会以独占的方式直接操作设备
  • 硬件上引入重定向单元,用于对I/O子系统的DMA操作和中断传递进行重定向
  • 需要芯片组支持此特性
  • 性能基本与原生系统一致


SR-IOV(Single Root Input/Output Virtualization

  • 在PCIe直通技术上实现的网卡虚拟化技术,在保证高性能的同时允许网卡设备共享
  • Physical Functions:物理网卡所支持的一项PCI功能,一个PF可以扩展出若干个VF
  • Virtual Functions:支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现
  • Host主机需要支持PCIe设备直通,网卡也需要支持SRIOV特性,并且VMM上安装好相应驱动
0条评论
作者已关闭评论
王****成
1文章数
0粉丝数
王****成
1 文章 | 0 粉丝
王****成
1文章数
0粉丝数
王****成
1 文章 | 0 粉丝
原创

虚机化基础概念(虚拟机)

2023-10-27 06:59:07
8
0

问题:容器、虚机两种虚拟化技术的本质区别是什么?

虚拟化的概念最早在1959年,由牛津大学的计算机Christopher Strachey教授提出

1960 年IBM进行 M44/44X 计算机研究项目,实现世界第一个支持虚拟机的系统

该研究项目首次提出了两个概念:VM(Virtual Machine )和VMM(Virtual Machine Monitor,虚拟机监控器,也称为Hypervisor

VMM向下掌控实际的物理资源,向上呈现给虚拟机N份虚拟的逻辑资源


全虚拟化(Full-Vritralization)

  • VMM模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等
  • GuestOS完全不做任何修改就可以在虚拟机中运行,甚至无法区分自身是否运行在虚拟机中

基于二进制翻译实现的全虚拟化

  • 纯软件模拟来实现VMM层,VMM将GuestOS的指令翻译成HostOS的指令
  • 实现非常复杂
  • 所有指令都需要翻译,性能较差
  • 支持跨平台

半虚拟化(Para-Vritralization)

  • 需要针对性修改GuestOS内核源码,对闭源的GuestOS不友好
  • 修改过的GuestOS内核遇到敏感指令,会自动替换为Hypercall向VMM发起调用
  • 效率接近原生系统

硬件辅助的全虚拟化

  • 硬件本身提供能力,区分不同的运行环境(譬如x86架构CPU,提供了root/non-root两种模式)
  • 效率接近原生系统
  • 跨平台能力较差

直通(passthrough)

  • 将GuestOS上虚拟设备的访问地址映射到HostOS的相同地址
  • 需要芯片组和CPU支持
  • 性能与原生系统几乎一致

CPU虚拟化

以Intel的x86架构CPU为例,提供了ring0-ring3共4个特权级别

常见的操作系统只用到ring0(内核态)和ring3(用户态)


Intel和AMD分别提供了硬件虚拟化技术VT-x和AMD-V,提供了root mode和non-root mode两种运行模式

内存虚拟化

Linux系统下,进程操作内存需要进行地址转换VA(虚拟地址)→PA(物理地址),转换过程依赖MMU(Memory Management Unit)和页表来完成

而在GuestOS中,则需要多一次转换GVA(Guest VA)→GPA(Guest PA)→HPA(Host PA)

软件实现的全虚拟化很复杂,转换过程也是通过VMM提供的来影子页表(Shadow Page Table)完成

容易出现高频率的VM Exit,还需要考虑影子页表的同步,缓存影子页表的内存开销大

因此厂商也推出了各自的硬件辅助技术,比如Intel的EPT(Extended Page Table)和AMD的NPT(Nested Page Table)

够从硬件上同时支持GVA→GPA→HPA的转换,大幅减少了因为页表更新带来的VM Exit

IO虚拟化

QEMU(Quick Emulator)

  • 纯软件实现的虚拟化系统,功能强大
  • 可以模拟整套的虚拟机包括处理器虚拟化,内存虚拟化,以及各种IO设备
  • 限制于软件模拟,性能较为低下

KVM(Kernel-based Virtual Machine)

  • 基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的全虚拟化解决方案
  • 从Linux 2.6.20开始整合到Linux内核版本中
  • 在原有的用户模式和内核模式中新增了客户模式,客户模式也拥有自己的内核模式和用户模式,虚拟机就是运行在客户模式中

QEMU-KVM(软件模拟的IO全虚拟化方案)

  • KVM可以实现高性能的CPU、内存虚拟化,补全了QEMU的性能短板
  • KVM提供了虚拟化内核运行环境,用户无法直接控制内核去做任何事情,需要类似QEMU这种运行在用户态工具来管理虚拟机
  • KVM只负责CPU和内存的虚拟化工作,其他IO设备的模拟化交给QEMU来负责
  • QEMU 1.3之后的主干代码中已经包含了KVM相关功能

virtio(半虚拟化方案)

  • 前端驱动:Frontend Driver,是位于客户机内核中的驱动程序模块,如virtio_blk、virtio_net等
  • 后端驱动:Backend Driver,在宿主机用户空间的 QEMU 中实现
  • virtio内部将所有设备都抽象为PCI设备,统一了transport层的传输方式
  • virtio提高效率的方式主要是减少了核心态/用户态的切换次数

PCIe设备直通

常见技术:Intel VT-d(Virtualization Technology for Directed I/O)或 AMD IOMMU(Input/Output Memory Management Unit)

  • 允许将某些PCI设备的管辖权直接移交给GuestOS,GuestOS会以独占的方式直接操作设备
  • 硬件上引入重定向单元,用于对I/O子系统的DMA操作和中断传递进行重定向
  • 需要芯片组支持此特性
  • 性能基本与原生系统一致


SR-IOV(Single Root Input/Output Virtualization

  • 在PCIe直通技术上实现的网卡虚拟化技术,在保证高性能的同时允许网卡设备共享
  • Physical Functions:物理网卡所支持的一项PCI功能,一个PF可以扩展出若干个VF
  • Virtual Functions:支持SR-IOV的物理网卡虚拟出来的实例,以一个独立网卡的形式呈现
  • Host主机需要支持PCIe设备直通,网卡也需要支持SRIOV特性,并且VMM上安装好相应驱动
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0