Привет всем!
Недавно купил ZOTAC MagnusOne с процессором 13-го поколения Intel® Core i7-13700 (1 Socket) и видеокартой NVIDIA RTX 4070. Решил попробовать Proxmox, поэтому установил Proxmox VE 8.1 с ядром Linux 6.5.13-1-pve и попытался настроить передачу PCI устройств через GPU passthrough. Я следовал процедуре, описанной в официальной документации для текущей версии Proxmox VE (), и сделал следующее:
1. Я изменил файл `/etc/default/grub` и добавил следующую строку: `GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"`
2. Я изменил файл `/etc/modules` следующим образом:
```
vfio
vfio_iommu_type1
vfio_pci
```
3. Я обновил систему и перезагрузил её: `update-initramfs -u -k all reboot`
4. Я проверил, всё ли в порядке с помощью команды `lsmod | grep vfio`, и получил следующее:
```
vfio_pci 16384 0
vfio_pci_core 86016 1 vfio_pci
vfio_pci_core 86016 1
vfio_pci irqbypass 12288 2 vfio_pci_core,kvm
vfio_iommu_type1 49152 0
vfio 57344 3 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd 77824 1 vfio
```
5. Затем я использовал команду `dmesg | grep -e DMAR -e IOMMU -e AMD-Vi` и получил следующий результат:
```
[ 0.012839] ACPI: DMAR 0x0000000044CA1000 000088 (v02 INTEL EDK2 00000002 01000013)
[ 0.012864] ACPI: Reserving DMAR table memory at [mem 0x44ca1000-0x44ca1087]
[ 0.155636] DMAR: Host address width 39
[ 0.155637] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.155640] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 29a00f0505e
[ 0.155641] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.155645] DMAR: dmar1: reg_base_addr fed91000 ver 5:0 cap d2008c40660462 ecap f050da
[ 0.155646] DMAR: RMRR base: 0x0000004e000000 end: 0x000000523fffff
[ 0.155648] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.155648] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.155649] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.156512] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.340822] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 0.406829] DMAR: Intel® Virtualization Technology for Directed I/O
```
Документация говорит, что лучше проверить, включён ли DMAR IOMMU. Тогда я запустил команду `grep ‘remapping’` и получил:
```
[ 0.155649] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.156512] DMAR-IR: Enabled IRQ remapping in x2apic mode
```
Таким образом, кажется, что DMAR IOMMU не включён. Поэтому я добавил это: `echo "options vfio-iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf`
Затем я запустил `pvesh get /nodes/{nodename}/hardware/pci --pci-class-blacklist “"`, чтобы проверить, находятся ли устройства в отдельных группах IOMMU, и получил:
```
0x030000 │ 0x2786 │ 0000:01:00.0 │ 17 │ 0x10de │ AD104 [GeForce RTX 4070] │ │ 0x2714 │ 0x040300 │ 0x22bc │ 0000:01:00.1 │ 17 │ 0x10de │ │ │ 0x2714 │ 6
```
Теперь мне нужно зачеркнуть драйверы. Поэтому я делаю следующее:
```
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia*" >> /etc/modprobe.d/blacklist.conf
```
и перезагружаю систему.
Затем я использую команду `lspci -k | grep -A 3 “VGA”`, и получаю:
```
01:00.0 VGA compatible controller: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. AD104 [GeForce RTX 4070]
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation Device 22bc (rev a1)
```
Кажется, что зачеркивание драйверов не работает. Таким образом, основываясь на официальной документации, я проверил ROM с помощью анализатора ROM и получил:
```
Valid ROM signature found @0h, PCIR offset 170h
PCIR: type 0 (x86 PC-AT), vendor: 10de, device: 2786, class: 030000
PCIR: revision 0, vendor revision: 1
Valid ROM signature found @fc00h, PCIR offset 1ch
PCIR: type 3 (EFI), vendor: 10de, device: 2786, class: 000000
PCIR: revision 3, vendor revision: 0
EFI: Signature Valid, Subsystem: Boot, Machine: X64
Last image
```
Затем я вернулся и использовал команду `lspci -k | grep -A 3 “VGA”`, но снова получил:
```
01:00.0 VGA compatible controller: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. AD104 [GeForce RTX 4070]
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation Device 22bc (rev a1)
```
Документация говорит, что нужно добавить это: `options vfio-pci ids=Id:vendor, id:vendor` к файлу `.conf` в папке `/etc/modprob.d/`. Но если я это сделаю, система не загружается, и нет других вещей, которые можно было бы сделать, кроме как переустановить Proxmox.
Несмотря на эти результаты, я попытался создать VM с прикрепленным PCI устройством, а затем получил сообщение об ошибке; stopped: unable to read tail (got 0 bytes)
В этот момент я не знаю, что делать. Я был бы благодарен, если бы кто-нибудь мог помочь.
Спасибо заранее!
Недавно купил ZOTAC MagnusOne с процессором 13-го поколения Intel® Core i7-13700 (1 Socket) и видеокартой NVIDIA RTX 4070. Решил попробовать Proxmox, поэтому установил Proxmox VE 8.1 с ядром Linux 6.5.13-1-pve и попытался настроить передачу PCI устройств через GPU passthrough. Я следовал процедуре, описанной в официальной документации для текущей версии Proxmox VE (), и сделал следующее:
1. Я изменил файл `/etc/default/grub` и добавил следующую строку: `GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init"`
2. Я изменил файл `/etc/modules` следующим образом:
```
vfio
vfio_iommu_type1
vfio_pci
```
3. Я обновил систему и перезагрузил её: `update-initramfs -u -k all reboot`
4. Я проверил, всё ли в порядке с помощью команды `lsmod | grep vfio`, и получил следующее:
```
vfio_pci 16384 0
vfio_pci_core 86016 1 vfio_pci
vfio_pci_core 86016 1
vfio_pci irqbypass 12288 2 vfio_pci_core,kvm
vfio_iommu_type1 49152 0
vfio 57344 3 vfio_pci_core,vfio_iommu_type1,vfio_pci
iommufd 77824 1 vfio
```
5. Затем я использовал команду `dmesg | grep -e DMAR -e IOMMU -e AMD-Vi` и получил следующий результат:
```
[ 0.012839] ACPI: DMAR 0x0000000044CA1000 000088 (v02 INTEL EDK2 00000002 01000013)
[ 0.012864] ACPI: Reserving DMAR table memory at [mem 0x44ca1000-0x44ca1087]
[ 0.155636] DMAR: Host address width 39
[ 0.155637] DMAR: DRHD base: 0x000000fed90000 flags: 0x0
[ 0.155640] DMAR: dmar0: reg_base_addr fed90000 ver 4:0 cap 1c0000c40660462 ecap 29a00f0505e
[ 0.155641] DMAR: DRHD base: 0x000000fed91000 flags: 0x1
[ 0.155645] DMAR: dmar1: reg_base_addr fed91000 ver 5:0 cap d2008c40660462 ecap f050da
[ 0.155646] DMAR: RMRR base: 0x0000004e000000 end: 0x000000523fffff
[ 0.155648] DMAR-IR: IOAPIC id 2 under DRHD base 0xfed91000 IOMMU 1
[ 0.155648] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
[ 0.155649] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.156512] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 0.340822] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
[ 0.406829] DMAR: Intel® Virtualization Technology for Directed I/O
```
Документация говорит, что лучше проверить, включён ли DMAR IOMMU. Тогда я запустил команду `grep ‘remapping’` и получил:
```
[ 0.155649] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.156512] DMAR-IR: Enabled IRQ remapping in x2apic mode
```
Таким образом, кажется, что DMAR IOMMU не включён. Поэтому я добавил это: `echo "options vfio-iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf`
Затем я запустил `pvesh get /nodes/{nodename}/hardware/pci --pci-class-blacklist “"`, чтобы проверить, находятся ли устройства в отдельных группах IOMMU, и получил:
```
0x030000 │ 0x2786 │ 0000:01:00.0 │ 17 │ 0x10de │ AD104 [GeForce RTX 4070] │ │ 0x2714 │ 0x040300 │ 0x22bc │ 0000:01:00.1 │ 17 │ 0x10de │ │ │ 0x2714 │ 6
```
Теперь мне нужно зачеркнуть драйверы. Поэтому я делаю следующее:
```
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
echo "blacklist nvidia*" >> /etc/modprobe.d/blacklist.conf
```
и перезагружаю систему.
Затем я использую команду `lspci -k | grep -A 3 “VGA”`, и получаю:
```
01:00.0 VGA compatible controller: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. AD104 [GeForce RTX 4070]
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation Device 22bc (rev a1)
```
Кажется, что зачеркивание драйверов не работает. Таким образом, основываясь на официальной документации, я проверил ROM с помощью анализатора ROM и получил:
```
Valid ROM signature found @0h, PCIR offset 170h
PCIR: type 0 (x86 PC-AT), vendor: 10de, device: 2786, class: 030000
PCIR: revision 0, vendor revision: 1
Valid ROM signature found @fc00h, PCIR offset 1ch
PCIR: type 3 (EFI), vendor: 10de, device: 2786, class: 000000
PCIR: revision 3, vendor revision: 0
EFI: Signature Valid, Subsystem: Boot, Machine: X64
Last image
```
Затем я вернулся и использовал команду `lspci -k | grep -A 3 “VGA”`, но снова получил:
```
01:00.0 VGA compatible controller: NVIDIA Corporation AD104 [GeForce RTX 4070] (rev a1)
Subsystem: ZOTAC International (MCO) Ltd. AD104 [GeForce RTX 4070]
Kernel modules: nvidiafb, nouveau
01:00.1 Audio device: NVIDIA Corporation Device 22bc (rev a1)
```
Документация говорит, что нужно добавить это: `options vfio-pci ids=Id:vendor, id:vendor` к файлу `.conf` в папке `/etc/modprob.d/`. Но если я это сделаю, система не загружается, и нет других вещей, которые можно было бы сделать, кроме как переустановить Proxmox.
Несмотря на эти результаты, я попытался создать VM с прикрепленным PCI устройством, а затем получил сообщение об ошибке; stopped: unable to read tail (got 0 bytes)
В этот момент я не знаю, что делать. Я был бы благодарен, если бы кто-нибудь мог помочь.
Спасибо заранее!
