CPU虚拟化,内存虚拟化,IO虚拟化以及虚拟化资料链接

资料来源

注:该篇文章只是简单整合一下下面的资料;

(1) 虚拟化底层技术之——iommu技术综述_weixin_33895657的博客-CSDN博客(☆☆☆☆☆)

(2) 还是不理解IOMMU、北桥、PCI的MMIO和ioremap - 内核源码-Chinaunix

(3) CPU虚拟化、内存虚拟化、I/O虚拟化概念_仲夏宁叶香的博客-CSDN博客_内存虚拟化的概念(☆☆☆☆☆)

(4) CPU虚拟化,内存虚拟化和IO虚拟化_weixin_33747129的博客-CSDN博客(☆☆☆☆☆)

(5) 虚拟化的理论-内存和IO虚拟化【图文】_Jeff_Linux_51CTO博客

(6) 虚拟化、CPU虚拟化、内存虚拟化、设备和I/O虚拟化 - _liuxg - 博客园 (cnblogs.com)

(7) https://mp.weixin.qq.com/s/5bcXGwd_76yuxPLRP9gLzQ (公众号-老秦谈芯)

1.虚拟化的分类

服务器虚拟化的实现包括三部分:CPU虚拟化内存虚拟化IO虚拟化

1.1 CPU虚拟化(包括全虚拟化,半虚拟化,硬件虚拟化)

(1) CPU虚拟化技术的特点:可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
(2) CPU虚拟化技术与多任务以及超线程技术的对比:三者是完全不同的多任务是指在一个操作系统中多个程序同时并行运行,而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行,每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;而超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。
(3) CPU硬件虚拟化技术与软件虚拟化的对比:CPU虚拟化技术是一种硬件方案,支持虚拟技术的 CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会很容易提高性能,相比软件的虚拟实现方式会很大程度上提高性能。虚拟化技术可提供基于芯片的功能,借助兼容VMM软件能够改进纯软件解决方案。由于虚拟化硬件可提供全新的架构,支持操作系统直接在上面运行,从而无需进行二进制转换,减少了相关的性能开销,极大简化了VMM设计,进而使VMM能够按通用标准进行编写,性能更加强大。CPU的虚拟化技术除支持广泛的传统操作系统之外,还支持64位客户操作系统。
(4) 虚拟化技术是一套解决方案。完整的情况需要 CPU、主板芯片组、BIOS和软件的支持,Intel和AMD分别开发出VT-x和AMD-V技术,在硬件增加虚拟化功能后,通过CPU截获客户机操作系统对敏感指令的执行或者对敏感指令的访问,并通过异常的方式报告给VMM,VMM接收到报告后,找到对应的虚拟化模块进行模拟,并把最终结果反映在客户机运行环境中。

1.2 内存虚拟化(包括全虚拟化,半虚拟化,硬件虚拟化)

(1) 内存虚拟化的要点:VMM必须对物理内存有最终的控制权,它必须控制将客户物理地址空间映射到主机物理地址空间的操作。这样,才可以顺利的实现内存虚拟化.
(2) 内存虚拟化的方法:VMM维护一个虚拟机内存管理数据结构—镜像页表(shadow page table)。VMM通过镜像页表给不同的虚拟机分配机器的内存页,如操作系统虚拟内存一样,VMM能将虚拟机内存换页到磁盘,因此,虚拟机申请的内存可以超过机器的物理内存。VMM也可以根据每个虚拟机的要求,动态地分配相应的内存。

1.3 IO虚拟化(包括全虚拟化,半虚拟化,硬件虚拟化)

1.3.1 宿主型I/O虚拟化
(1) 用宿主型的体系结构,使用宿主操作系统的I/O设备驱动程序。
(2) 这种结构的缺点之一是大大增加了虚拟化的性能开销;另一个缺点是现代操作系统如Windows和linux并没有资源管理的支持为虚拟机×××能隔离和服务保证,而这是很多服务器环境的基本要求。
1.3.2 硬件I/O虚拟化
(1) I/O子系统的产业趋势是朝着硬件支持的方向发展。拥有足够的硬件支持,直接传送I/O设备到虚拟机中的软件是完全可能的,这将有效地消除所有I/O虚拟开销。要做到这一点, I/O装置需要了解虚拟机的情况和能够支持多个虚拟接口,以便VMM能安全地映射接口到虚拟机。
(2) Intel VT-d以及AMD的IOMMU是目前硬件I/O虚拟化的代表

2.IOMMU(I/O memory management unit)

2.1 IOMMU 主要功能

(1) 控制设备dma地址映射到机器物理地址(DMA remapping);

(2) 中断重映射(interrupt remapping)

2.2 DMA地址空间映射

(1) IOMMU的主要功能为设备dma时刻能够访问机器的物理内存区,同时保证安全性。在没有IOMMU的时候,设备通过dma可以访问到机器的全部的地址空间。

(2) IOMU硬件实现vaddr--->paddr的地址转换。

 

 

2.3 中断重映射

(1) 在虚拟化透传设备使用中,或者主机侧用户态驱动框架中还有一个问题就是msi中断的安全保护。msi的特点就是只要发起特定的pci write 消息,机器(在x86上是LAPIC)就能够将此pci write消息翻译为一次中断信号。在msi中断信息里,含有中断源信息,中断vector信息以及中断发往哪里,中断模式等等信息。

(2) ???如果设备透传到虚拟机,而虚拟机里有恶意驱动,那么恶意驱动完全可以操作一个透传设备发起dma write访问,带有msi中断信息,导致hypervisor被攻击。在用户态驱动层面也是相同的,用户态驱动可以触发dma 带有msi中断导致主机系统被攻击。

(3) 为了防止这种情况发生,Intel的iommu技术(vt-d)里实现了中断重映射技术(intremap)。设备发起的msi中断先进入iommu的intremap模块进行映射得到真正的msi中断信息。主机os会在这个中断重映射表里限定,某个设备只能发起哪种中断向量,同时会验证msi中的信息位(如此提升了恶意软件触发真实msi的难度)。

2.4 iommu cache,int remap cache和IOTLB

(1) 在2.1和2.2中提到的转换存在与之对应的转换表,这些转换表都位于物理内存中,从DRAM内存中专门开辟一些空间用于存储这些转换关系,所以在intel vt-d中设计了大量主机侧cache机制来缓存这些表的表项,提升访问效率。

(2) 设备tlb是intel vt-d中设计的设备测tlb寄存器,在设备进行dma的时候在设备一侧缓存dma地址到物理地址映射项。

3.iommu在各个厂商的分身

(1) intel vtd

(2) amd iommu

posted on 2021-11-15 19:03  知北游。。  阅读(820)  评论(0编辑  收藏  举报

导航