显卡直通技术原理

显卡直通(GPU Passthrough)的原理是通过硬件虚拟化技术,使得虚拟机能直接访问物理硬件资源,从而大大提高虚拟机的性能。

在没有直通技术的情况下,虚拟机需要通过宿主机的操作系统来访问硬件资源,这会造成一定的性能损失。而显卡直通技术则可以使虚拟机绕过宿主机操作系统,直接访问显卡硬件。

技术原理

这种技术的实现需要硬件和软件的支持。在硬件方面,需要支持IOMMU(Input/Output Memory Management Unit)的CPU和主板,以及支持SR-IOV(Single Root I/O Virtualization)的显卡。在软件方面,需要支持硬件虚拟化和显卡直通的虚拟机管理程序,如KVM、Xen等。

IOMMU

IOMMU,全称是Input/Output Memory Management Unit,即输入/输出内存管理单元。它是一种硬件技术,主要用于控制设备对物理内存的访问。

在没有IOMMU的情况下,设备(如网卡、显卡等)直接使用物理地址访问内存,这样可能会导致设备对任意内存的访问,从而带来安全问题。而有了IOMMU后,操作系统可以控制设备对哪些内存的访问,从而提高系统的安全性。

此外,IOMMU还可以实现设备的虚拟化。在虚拟化环境中,虚拟机通常不能直接访问物理硬件,而是通过宿主机操作系统的模拟。但是,这种模拟方式会带来性能损失。而有了IOMMU后,虚拟机可以直接访问硬件,从而提高性能。

IOMMU的具体实现方式因硬件厂商而异。在Intel平台上,它被称为VT-d(Virtualization Technology for Directed I/O)。在AMD平台上,它被称为AMD-Vi(AMD Virtualization technology for I/O devices)。

SR-IO

SR-IOV,全称是Single Root Input/Output Virtualization,即单根输入/输出虚拟化。这是一种硬件辅助的I/O虚拟化技术,可以让一个物理设备在虚拟环境中表现为多个虚拟设备,每个虚拟设备可以被不同的虚拟机独立使用。

SR-IOV技术的核心是引入了两种新的设备类型:Physical Function (PF) 和 Virtual Function (VF)。

PF是物理设备的完整功能表示,包括设备的所有配置和管理功能,以及一些I/O功能。每个支持SR-IOV的物理设备都至少有一个PF。

VF则是物理设备的一个轻量级表示,只包含一部分I/O功能,不包含配置和管理功能。每个PF可以有多个VF,每个VF可以被分配给一个虚拟机使用。

通过SR-IOV技术,虚拟机可以直接访问硬件设备的部分功能,从而避免了通过宿主机操作系统进行I/O操作的开销,提高了I/O性能。同时,因为每个虚拟机都有自己的VF,所以虚拟机之间的I/O操作不会相互干扰,提高了I/O的稳定性和可靠性。

SR-IOV技术广泛应用于网络设备和显卡等I/O密集型设备的虚拟化。

VFIO-PCI

VFIO-PCI是VFIO的一个子模块,专门用于PCI设备的直通。

VFIO提供了一种机制,使得用户空间的程序(如虚拟机)可以直接访问硬件设备,而无需通过内核。这种机制不仅可以提高性能,还可以提供更好的设备隔离,增强系统的安全性。

VFIO-PCI模块通过VFIO框架提供的接口,实现了对PCI设备的直通。当你把一个PCI设备分配给虚拟机时,VFIO-PCI模块会负责把设备的所有操作(如读写设备寄存器、DMA操作等)转发给硬件设备。

总的来说,VFIO-PCI是一种在Linux系统中实现PCI设备直通的技术,广泛应用于虚拟化和容器等领域。

参考

[1] Host Devices Assignment