- Вопрос или проблема
- Ответ или решение
- Предотвращение инициализации iGPU и его привязка к виртуальной машине в Proxmox
- 1. Проверка текущей конфигурации
- 2. Корректировка параметров загрузки ядра
- 3. Установка IOMMU и использование VFIO
- 4. Установка конфигурации виртуальной машины
- 5. Дополнительные меры
- Заключение
Вопрос или проблема
У меня есть встроенный графический процессор AMD (интегрированный в процессор AMD Ryzen 9 9950x), который я хочу использовать в качестве видеовыхода для Windows VM в Proxmox (у меня нет других установленных графических процессоров). Я обнаружил, что у него отсутствует возможность сброса уровня функции, поэтому, насколько я понимаю, я не могу отсоединить его от операционной системы хоста и снова присоединить к VM. Я пытался использовать vendor-reset, но он несовместим с моим iGPU. Затем я попытался предотвратить инициализацию iGPU операционной системой хоста, заблокировав драйвера GPU (amdgpu и radeon), создав файл конфигурации в /etc/modprobe.d/
, который выглядит следующим образом:
blacklist amdgpu
blacklist radeon
blacklist vgaarb
blacklist efifb
blacklist vesafb
install amdgpu /bin/false
install radeon /bin/false
install vgaarb /bin/false
Я попытался указать каждое возможное ограничение на любой кадровый буфер или драйвер GPU, а также предоставить полный контроль над GPU драйверу vfio. Я надеялся, что это предотвратит любое взаимодействие ОС с iGPU, но vgaarb все равно устанавливает его как загрузочное VGA устройство, чтобы затем отключить его, как показывается в dmesg:
[ 0.472763] pci 0000:72:00.0: vgaarb: setting as boot VGA device
[ 0.472763] pci 0000:72:00.0: vgaarb: bridge control possible
[ 0.472763] pci 0000:72:00.0: vgaarb: VGA device added: decodes=io+mem,owns=none,locks=none
[ 0.490408] pci 0000:72:00.1: D0 power state depends on 0000:72:00.0
[ 0.491001] pci 0000:72:00.0: Adding to iommu group 35
[ 2.052946] vfio-pci 0000:72:00.0: vgaarb: deactivate vga console
Моя полная командная строка ядра (как отображается в dmesg) следующая:
BOOT_IMAGE=/vmlinuz-6.8.12-5-pve root=ZFS=/ROOT/pve-1 ro root=ZFS=rpool/ROOT/pve-1 boot=zfs quiet amd_iommu=on iommu=pt nofb pcie_aspm=off nomodeset video=vesafb:off video=efifb:off video=vesa:off video=simplefb:off disable_vga=1 vga=none vgaarb=off video=off vfio-pci.ids=1002:13c0,1002:1640 vfio-pci.disable_vga=1 initcall_blacklist=sysfb_init,amd_iommu_v2_init modprobe.blacklist=amdgpu,radeon,snd_hda_intel,r8169 module_blacklist=amdgpu,radeon vgaarb.multi_gpu_switch=0 video.ignore_edd=1 vfio_iommu_type1.allow_unsafe_interrupts=1 kvm.ignore_msrs=1 rd.driver.blacklist=amdgpu rd.driver.blacklist=radeon rd.driver.pre=vfio-pci pcie_acs_override=downstream,multifunction radeon.modeset=0 amdgpu.modeset=0 amdgpu.aspm=0
Я могу подтвердить, что в конечном итоге GPU использует vfio в качестве своего драйвера, но он уже был инициализирован операционной системой хоста, и запуск VM возвращает ошибку устройство уже подключено
Вывод lspci -nnk
:
72:00.0 VGA совместимый контроллер [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Устройство [1002:13c0] (rev c1)
Подсистема: Gigabyte Technology Co., Ltd Устройство [1458:d000]
Драйвер ядра в использовании: vfio-pci
Модули ядра: amdgpu
Конфигурационный файл VM:
bios: ovmf
boot: order=ide2;net0
cores: 8
cpu: host
efidisk0: local-zfs:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=1M
hostpci0: 0000:72:00,pcie=1,x-vga=1
ide2: local:iso/windows-11.iso,media=cdrom,size=5695402K
machine: pc-q35-9.0
memory: 16384
meta: creation-qemu=9.0.2,ctime=1733853637
name: windows11
net0: virtio=BC:24:11:2B:1A:A2,bridge=vmbr0,firewall=1
numa: 0
ostype: win11
scsi0: local-zfs:vm-100-disk-1,aio=native,iothread=1,size=128G,ssd=1
scsihw: virtio-scsi-single
smbios1: uuid=e73054d1-f03b-4b84-8cdc-9115d85676fa
sockets: 1
tpmstate0: local-zfs:vm-100-disk-2,size=4M,version=v2.0
vmgenid: e16f7ba2-2469-4495-ab4f-7480c7f89041
args: -device vfio-pci,host=72:00.0,multifunction=on,x-vga=on,rombar=0 -device vfio-pci,host=72:00.1
Что еще я могу попробовать? Заранее спасибо!
Ответ или решение
Предотвращение инициализации iGPU и его привязка к виртуальной машине в Proxmox
Вы столкнулись с проблемой использования интегрированного графического процессора (iGPU) в AMD Ryzen 9 9950X для вывода видео в Windows ВМ на платформе Proxmox. Поскольку ваш iGPU не поддерживает возможность сброса на уровне функции, процесс его отвязки от хост-системы и повторной привязки к ВМ становится критически важным.
Для решения этой задачи давайте рассмотрим детальный подход к предотвращению инициализации iGPU, шаги настройки Proxmox и возможные дополнительные меры.
1. Проверка текущей конфигурации
Согласно вашему описанию, вы уже предприняли меры по черному списку драйверов amdgpu, radeon и других, чтобы избежать инициализации iGPU хост-системой:
blacklist amdgpu
blacklist radeon
blacklist vgaarb
blacklist efifb
blacklist vesafb
install amdgpu /bin/false
install radeon /bin/false
install vgaarb /bin/false
Эти шаги, безусловно, являются важными. Однако существует несколько дополнительных рекомендаций, которые могут помочь.
2. Корректировка параметров загрузки ядра
Для улучшения конфигурации попробуйте изменить параметры вашей загрузки ядра, особенно те, которые связаны с vfio и vga-шиной. Обратите внимание на следующие параметры:
- Убедитесь, что ваши параметры загрузки ядра содержат
pci=noaer
иvideo=efifb:off
. - Рассмотрите возможность использования
vfio-pci.ids=
с указанием всех соответствующих ID вашей карты (что, кстати, вы уже сделали). - Попробуйте использовать
nomodeset
и исключитьdisable_vga=1
на случай, если это мешает изоляции устройства.
Ваши параметры могут выглядеть так:
intel_iommu=on amd_iommu=on pci=noaer video=efifb:off nomodeset
3. Установка IOMMU и использование VFIO
Убедитесь, что протокол IOMMU правильно настроен. Проверьте, что:
- Включены настройки IOMMU в BIOS вашей системы.
- Используется правильный драйвер для VFIO в Proxmox.
Вы можете также попробовать обновить настройки группы IOMMU, например, добавив pcie_acs_override=downstream,multifunction
в параметры загрузки ядра, чтобы улучшить изоляцию.
4. Установка конфигурации виртуальной машины
Проверьте конфигурацию вашей виртуальной машины в Proxmox. Убедитесь, что вы правильно указали необходимость проброса iGPU. Например, в конфигурации, вы указали:
args: -device vfio-pci,host=72:00.0,multifunction=on,x-vga=on,rombar=0 -device vfio-pci,host=72:00.1
Обратите внимание на правильность указания multifunction=on
для iGPU.
5. Дополнительные меры
- Проверка работоспособности: После изменения параметров, пересоберите initramfs с помощью стандартных команд для Ubuntu/Debian:
update-initramfs -u
- Обновление системы: Убедитесь, что у вас установлены последние обновления для Proxmox и используемого ядра, так как совместимость может часто обновляться.
- Логирование: Используйте
dmesg
иjournalctl
для отслеживания любых ошибок при загрузке и инициализации.
Заключение
Хотя ваша ситуация может показаться сложной, следуя вышеизложенным рекомендациям, вы увеличите шанс успешной интеграции вашего iGPU в систему виртуализации Proxmox. Важно помнить о тестировании каждой изменения и корректировке параметров в соответствии с их результатами, что позволит вам точно настроить систему для необходимого применения.