当前位置:首页 > 虚拟机 > 正文

给虚拟机模拟dma设备


一、深入理解SR-IOV和IO虚拟化


深入探讨SR-IOV:PCIe虚拟化的革命性技术

SR-IOV是PCIe标准的扩展,为虚拟化领域带来了革命性的突破。。通过巧妙地将物理设备分解为多个独立的虚拟设备,为虚拟机(VM)提供专用资源。硬件架构的核心是PF(全功能)和VF(轻量级功能)。VF中的BAR空间就像连接系统内存和虚拟设备的桥梁。在Linux环境中,PF配置包括设置SR-IOV控制的开关数量,drivers/pci/iov.c是实现这一切的关键接口。


在QEMU/KVM的PCIe直通架构中,完整的直通生态系统包括:


基础组件:SR-IOV支持PCIe设备的硬件、输入/输出内存管理单元(IOMMU),例如IntelVT-d、虚拟功能I/O(VFIO)和虚拟化引擎,例如QEMU/KVM。
IOMMU的神奇之处:IOMMU是地址和中断重定向的守护者。调整DMA地址映射,确保设备的访问范围与系统内存隔离。同时,它利用VT-d的中断重映射机制将拟机中断转发到物理CPU。
VFIO干预:这是HostOS和PCIe设备之间的桥梁。vfio_iommu_type1_driver和vfio-pci驱动程序在用户空间和设备配置空间以及DMA访问之间提供直接通道。
QEMU的传递魔法:QEMU负责将寄存器和DMA信息从物理设备无缝集成到虚拟机中。透传过程包括vfio-pci的注册和初始化以及数据级加速。在虚拟机中,QEMU负责将DMA操作从GuestOS通过VFIO映射回物理设备,IOMMU负责将它们映射到主机上的物理内存地址。

具体来说,GPA到HPA的映射机制如下。创建虚拟机时,QEMU将访客虚拟地址(GVA)设置为全局虚拟地址(GPA),然后设置为HPA。(主机物理地址)桥接。当虚拟设备驱动程序对虚拟机进行操作时,GPA与VFIO和IOMMU配合,最终准确地找到物理设备的HPA,以保证数据的高效传输。



二、硬科技:x86虚拟化由内到外还是继续难搞(下)

第一个总和。所谓“x86虚拟化”并不意味着它只是一个完整的处理器。毕竟计算机还有很多外围设备,尤其是I/O、网络,以及日益重要的图形核心,这些都需要“高”性能。——性能虚拟化。”“重点项目。

I/O虚拟化:IntelVT-d、AMDVi

想要进一步虚拟化I/O系统,让虚拟机可以使用直接内存访问(DMA)和中断(InterruptRemapping)来直接访问各种I/O对于外设,硬件必须使用BIOS和UEFI等固件支持来控制来自所有外设I/O设备的虚拟内存和中断载体的DMA地址。

Cripsea北桥Q35首创了Intel于2007年中推出的VT-d技术(IntelVirtualizationTechnologyForDirectedI/O)功能。I/O设备使用的内存地址。未来,VT-d将逐渐成为从服务器到台式机到笔记本电脑所有Intelx86平台的“标准武器”。

AMD最近一直在开发I/O虚拟化。2009年下半年的SR5690/SR5670系统芯片组引入了IOMMU(I/OMemoryManagementUnit),其功能与VT-d类似,后来被称为VT-d。AMDVi。

虚拟化开发可编程中断控制器:AMDAVIC、IntelAPICv

定位并组织各个I/O外围设备的访问进程需求,并了解哪个进程负责执行中断(Interrupt),条件是必要的。针对现代多处理环境,高级可编程中断控制器(APIC,ProgrammableProgrammableInterruptController)是Pentium公司于1993年开发的,作为其技术的核心。然而,与内存虚拟化一样,允许VMM创建模拟软件,“ShadowAPIC”不仅消耗处理器性能,还会导致虚拟机频繁进入和退出执行环境。

AMD在2012年发布了AVIC(AdvancedVirtualInterruptController),但直到2016年才出现在CarrizoAPU上。Intel于2013年发布了APICv(APIC虚拟化),应用于2013年IvyBridge的XeonE5-2600v2微架构。它基于Broadwell一代更复杂、更精确的硬件。

网卡虚拟化:IntelVT-c

作为以太网最重要的品牌之一Intel,网络芯片一直是他们最重要的业务,所以让网卡跟上虚拟化的趋势是很重要的当然是一件事。其VT-c由2部分组成:

VMDq:网络芯片内置的文件分类器,转发不同虚拟机的文件,以减少处理负载。

VMDc:使用PCI-SIG指定的SR-IOV(SingleRootI/OVirtualization)技术,许多虚拟机可以直接访问网卡(或其他I/O设备),而无需使用VMM分配资源的麻烦。

GPU虚拟化:IntelGVT、AMDMxGPU

Intel在2014年的Haswell中集成了IrisPro图形心三种类型的GPU虚拟化:GVT-d分配给单个虚拟机,标准实现驱动程序允许多个GVT-虚拟机。g,使用分时机制(分片),GVT-s,使用专用于虚拟化的驱动程序来实现“单用通信”。但从市场上得到的消息这里就不说了。

AMD在2016年发布了基于SR-IOV的MxGPU,第一款是FireProS7150x2。当然,有人记得nVidia之前就有vGPU,但我不想在这里介绍这一点,因为“GPU虚拟化”是一个非常复杂且庞大的话题,值得单独写一篇文章。控制“服务质量”L3缓存和主内存:IntelRDT、AMDQoS命令

但最后,我们来谈谈“痴迷”的x86技术。

Intel的2013Haswell和2014Broadwell几代微架构仍然实现了非常精细的控制机制(Broadwell中的ResouceDirectorTechnology)来控制几乎不同设备占用的L3缓存和内存空间,并实现“L3单元级QoS(Quality-Of-Service)防止系统被少数虚拟机消耗或者需要VMM资源考古冒险王硬技术