在服务器虚拟化中,硬件直通(PCIe Passthrough) 是一种将物理设备(如硬盘、显卡、网卡)直接分配给特定虚拟机(VM)的技术,绕过虚拟化层的抽象,让VM独占硬件并获得接近原生的性能。但不同设备(如硬盘和显卡)的直通实现方式和限制有所差异。以下是具体方法和注意事项:
一、硬盘直通的限制与替代方案
1. 为什么普通硬盘无法直接直通?
-
硬盘控制器共享问题:单个物理硬盘通常通过SATA/SAS控制器连接,而控制器本身可能被多个VM共享,无法直接分配给单个VM。
-
文件系统冲突:虚拟化平台(如ESXi、KVM)通常将硬盘作为虚拟磁盘文件(如.vmdk、.qcow2)管理,直接直通会导致宿主机的存储管理失效。
2. 替代方案:通过PCIe Passthrough直通整个控制器
-
适用场景:若服务器有独立的硬盘控制器(如HBA卡、NVMe SSD),可将整个控制器直通给VM。
-
操作步骤(以KVM为例):
-
查看控制器PCI设备地址:
bash
lspci | grep -i "storage\\|sata\\|nvme"
# 示例输出:01:00.0 SATA controller: Intel Corporation C610/X99 series chipset sSATA Controller -
将设备标记为直通模式(需启用IOMMU):
bash
echo "options vfio-pci ids=8086:8d02" > /etc/modprobe.d/vfio.conf
update-initramfs -u -
在VM配置文件中添加PCI设备(如virsh edit vm_name):
xml
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</hostdev> -
注意事项:
-
直通后,该控制器下的所有硬盘将由VM独占,宿主机无法访问。
-
需确保VM已安装对应硬盘控制器的驱动程序(如LSI SAS驱动)。
-
二、显卡直通的实现与常见问题
1. 显卡直通的典型场景
-
GPU计算:直通给VM运行AI训练(如NVIDIA Tesla)或3D渲染。
-
游戏/图形工作站:直通消费级显卡(如RTX 4090)给Windows VM。
2. 显卡直通步骤(以KVM + NVIDIA显卡为例)
-
前提条件:
-
服务器支持 IOMMU(Intel VT-d / AMD-Vi),并在BIOS中启用。
-
显卡支持直通(NVIDIA消费级卡需破解驱动限制,企业级卡如Tesla无需破解)。
-
-
操作流程:
-
屏蔽宿主机显卡驱动:
bash
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf -
绑定显卡到VFIO驱动:
bash
lspci -nn | grep -i nvidia
# 输出示例:01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA102 [GeForce RTX 3090] [10de:2204]
echo "options vfio-pci ids=10de:2204" > /etc/modprobe.d/vfio.conf
update-initramfs -u -
在VM配置中添加PCI设备(同硬盘控制器直通步骤)。
-
针对NVIDIA显卡的额外步骤:
-
修改VM的XML配置,隐藏虚拟化特征(绕过NVIDIA驱动限制):
<hyperv>
<vendor_id state='on' value='whatever'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
-
3. 显卡直通的限制
-
消费级显卡:NVIDIA的GeForce驱动会检测虚拟化环境并拒绝工作(需破解或使用企业级卡)。
-
多GPU冲突:若宿主机有多个GPU,直通其中一个可能导致宿主机无法使用图形界面(需无头模式运行)。
-
SR-IOV支持:部分显卡(如Intel Arc、NVIDIA Ampere)支持SR-IOV虚拟化,可分割为多个虚拟GPU(vGPU),无需独占直通。
三、通用硬件直通的必要条件
BIOS/固件支持:
-
启用 Intel VT-d 或 AMD-Vi(IOMMU)。
-
禁用 Above 4G Decoding(某些主板需关闭此选项以避免地址冲突)。
操作系统配置:
-
Linux内核需加载 vfio-pci 驱动。
-
Windows宿主机需启用Hyper-V的“离散设备分配”(DDA)。
硬件隔离性:
-
直通的设备必须属于独立的IOMMU组(检查命令:find /sys/kernel/iommu_groups/ -type l)。
四、常见问题与解决方案
-
问题1:直通后VM无法启动,提示VFIO device is already in use
解决:宿主机驱动未正确屏蔽,需确保无其他驱动(如nouveau)占用设备。 -
问题2:直通NVMe SSD后性能下降
解决:检查是否启用PCIe ACS(Access Control Services)隔离,避免总线争用。 -
问题3:NVIDIA显卡直通后报错Error 43
解决:在VM配置中添加<hidden state='on'/>并安装特定版本驱动。
总结
-
硬盘直通:通常需直通整个控制器(如HBA卡),而非单个硬盘。
-
显卡直通:需破解驱动限制(消费级卡)或使用企业级卡,并配置IOMMU/VFIO。
-
关键点:硬件直通的本质是PCIe设备的独占分配,因此必须确保设备在物理和逻辑上的隔离性。
参考视频
https://www.bilibili.com/video/BV1F14y1V7vo/?spm_id_from=333.337.search-card.all.click&vd_source=fa61a9dfb9afcda93746f7ee661258de
PVE直通原理讲解,10分钟理解直通
评论前必须登录!
注册