Я пытаюсь настроить передачу PCI контроллера SATA onboard в VM OMV, следуя документации Proxmox . IOMMU включен в BIOS/UEFI, контроллер SATA является единственным устройством в группе IOMMU #14. Если я убираю передачу PCI из VM, всё работает отлично. При передаче SATA контроллера хост становится неотзывчивым и требуется аппаратный сброс. Пожалуйста, помогите мне понять, какие изменения необходимо внести, чтобы эта передача PCI работала.
Информация о хосте:
Код:
OS: Proxmox VE 8.2.2 x86_64
Хост: 11A4000HGE ThinkCentre M75q-1
Ядро: 6.8.4-2-pve
CPU: AMD Ryzen 5 PRO 3400GE w/ Radeon Vega Graphics (8) @ 3.300GHz
GPU: AMD ATI Radeon Vega Series / Radeon Vega Mobile Series
Информация о SATA контроллере:
Код:
~# lspci -v
05:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 61) (prog-if 01 [AHCI 1.0])
Подсистема: Lenovo FCH SATA Controller [AHCI mode]
Флаги: bus master, fast devsel, latency 0, IRQ 255, IOMMU group 14
Память на fcc00000 (32-bit, non-prefetchable) [size=2K]
Возможности: [48] Vendor Specific Information: Len=08 <?>
Возможности: [50] Power Management version 3
Возможности: [64] Express Endpoint, MSI 00
Возможности: [a0] MSI: Enable- Count=1/2 Maskable- 64bit+
Возможности: [d0] SATA HBA v1.0
Возможности: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
Возможности: [150] Advanced Error Reporting
Возможности: [270] Secondary PCI Express
Возможности: [2a0] Access Control Services
Драйвер ядра в использовании: vfio-pci
Модули ядра: ahci
Настройка хоста:
Код:
~# cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt vfio-pci.ids=1022:7901"
GRUB_CMDLINE_LINUX=""
~# cat /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
~# cat /etc/modprobe.d/pve-blacklist.conf
blacklist nvidiafb
blacklist ahci
~# cat /etc/modprobe.d/vfio_iommu.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
~# cat /etc/modprobe.d/vfio-pci.conf
options vfio-pci ids=1022:7901
Код:
~# update-grub && update-initramfs -u -k all && reboot now
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.4-2-pve
Found initrd image: /boot/initrd.img-6.8.4-2-pve
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Adding boot menu entry for UEFI Firmware Settings ...
done
update-initramfs: Generating /boot/initrd.img-6.8.4-2-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
Проверка возможности передачи PCI
Код:
~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi -e remapping
[ 0.066674] AMD-Vi: Unknown option - 'on'
[ 0.159073] AMD-Vi: Using global IVHD EFR:0x4f77ef22294ada, EFR2:0x0
[ 0.439331] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported
[ 0.440703] AMD-Vi: Extended features (0x4f77ef22294ada, 0x0): PPR NX GT IA GA PC GA_vAPIC
[ 0.440716] AMD-Vi: Interrupt remapping enabled
[ 0.440872] AMD-Vi: Virtual APIC enabled
[ 0.441003] perf/amd_iommu: Detected AMD IOMMU #0 (2 banks, 4 counters/bank). VM config:
Код:
~# cat /etc/pve/qemu-server/100.conf
balloon: 0
bios: ovmf
boot: order=scsi0;net0
cores: 6
cpu: x86-64-v2-AES
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:05:00.0
machine: q35
memory: 4096
name: OMV
net0: virtio=MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
numa: 0
rootfs: local-lvm:vm-100-disk1
scsi0: lsilogic
scsi1: lsilogic
sortorder: 100
swap: local-lvm:vm-100-swap
virtio: mac
Код:
~# cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Debian GNU/Linux"
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt vfio-pci.ids=1022:7901"
GRUB_CMDLINE_LINUX=""
~# cat /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
~# cat /etc/modprobe.d/pve-blacklist.conf
blacklist amdgpu
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
~# cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=1022:7901,1028:1102,10de:1e06
~# cat /etc/modprobe.d/vfio_iommu_type1.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
~# cat /etc/pve/virt-root.conf
machine: q35
memory: 4096
rootfs: local-lvm:vm-100-disk1
Журнал ядра:
Код:
~# cat /var/log/kern.log | grep -i vfio
[ 0.015802] vfio: loaded firmware from /lib/firmware/vfio/pci/vfio-pci.c32
[ 0.054376] vfio-pci: vfio-pci.c32:1022:7901: firmware load complete.
[ 1.233539] vfio-pci: 1022:7901: [Device already claimed, skipping VFIO-PCI driver]
~# cat /var/log/kern.log | grep -i hostpci0
~# cat /var/log/kern.log | grep -i pci
[ 0.123575] pci 0000:00:00.0: [bus 00-03.1] 0000:00:00.0
[ 0.126437] pci 0000:00:01.0: [bus 00-03.1] 0000:00:01.0
[ 0.127002] pci 0000:00:02.0: [bus 00-03.1] 0000:00:02.0
[ 0.127541] pci 0000:00:03.0: [bus 00-03.1] 0000:00:03.0
[ 0.128070] pci 0000:00:04.0: [bus 00-03.1] 0000:00:04.0
[ 0.128606] pci 0000:00:05.0: [bus 00-03.1] 0000:00:05.0
[ 0.129128] pci 0000:00:06.0: [bus 00-03.1] 0000:00:06.0
[ 0.129638] pci 0000:00:07.0: [bus 00-03.1] 0000:00:07.0
[ 0.130145] pci 0000:00:08.0: [bus 00-03.1] 0000:00:08.0
[ 0.130651] pci 0000:00:09.0: [bus 00-03.1] 0000:00:09.0
[ 0.131158] pci 0000:00:0a.0: [bus 00-03.1] 0000:00:0a.0
[ 0.131665] pci 0000:00:0b.0: [bus 00-03.1] 0000:00:0b.0
[ 0.132172] pci 0000:00:0c.0: [bus 00-03.1] 0000:00:0c.0
[ 0.132679] pci 0000:00:0d.0: [bus 00-03.1] 0000:00:0d.0
[ 0.133186] pci 0000:00:0e.0: [bus 00-03.1] 0000:00:0e.0
[ 0.133693] pci 0000:00:0f.0: [bus 00-03.1] 0000:00:0f.0
[ 0.134199] pci 0000:05:00.0: [bus 00-03.1] 0000:05:00.0
[ 0.134706] pci 0000:05:00.0: vfio-pci: added 1022:7901
[ 0.135267] vfio-pci: [1022:7901] 0000:05:00.0
[ 0.135805] vfio-pci: [1022:7901] 0000:05:00.0: [Device already claimed, skipping VFIO-PCI driver]
[ 1.233539] vfio-pci: 1022:7901: [Device already claimed, skipping VFIO-PCI driver]
Лог qemu:
Код:
~# cat /var/log/libvirt/qemu/vm-100.log
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Лог libvirt:
Код:
~# journalctl -u libvirtd
--
Oct 01 17:48:03 proxmox libvirtd[1234]: VIR_LOG_INFO: libvirt is running as user root
--
Oct 01 17:48:03 proxmox libvirtd[1234]: VIR_LOG_INFO: libvirt is running as user root
Журнал qemu:
Код:
~# journalctl -u qemu-kvm-100
--
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: Starting up
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Наблюдается ошибка в логе, сообщающая, что устройство уже заявлено. Это указывает на то, что драйвер vfio-pci пытается загрузить устройство, которое уже используется другим драйвером.
В качестве временного решения можно попробовать перезагрузить виртуальную машину, но это не устранит основную проблему.
Убедитесь, что устройство 1022:7901 не используется другим драйвером или процессом в системе.
Убедитесь, что файл конфигурации виртуальной машины правильно настроен для использования устройства 1022:7901.
Возможно, вам потребуется изменить порядок загрузки драйверов в системе.
Лог сетевой карты:
Код:
~# cat /var/log/syslog | grep -i vmbr0
Oct 17 12:43:09 proxmox systemd[1]: Started Virtual Bridge Interface.
Oct 17 12:43:09 proxmox bridge[224]: brctl show
brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.0000000000 no
--
Oct 17 12:43:09 proxmox systemd[1]: Started Virtual Bridge Interface.
Oct 17 12:43:09 proxmox bridge[224]: brctl show
brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.0000000000 no
Журнал qemu:
Код:
~# journalctl -u qemu-kvm-100
--
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: Starting up
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Предполагается, что основная проблема заключается в том, что vfio пытается захватить устройство, которое уже используется другим драйвером. В этом случае необходимо убедиться, что vfio-pci загружен после драйвера, который уже использует устройство.
Предполагается, что vmbr0 является сетью, которую использует виртуальная машина.
Пожалуйста, обратите внимание на ошибки "Device already claimed" в логах vfio-pci и попытайтесь определить, какой другой драйвер или процесс использует устройство 1022:7901. Затем можно изменить файл конфигурации виртуальной машины или порядок загрузки драйверов, чтобы vfio-pci смог захватить устройство.
Обратите внимание, что необходимо проверить все журналы, связанные с системой и виртуальной машиной, чтобы определить, есть ли какие-либо ошибки или предупреждения, которые могут указывать на причину проблемы.
Если вы не можете решить проблему самостоятельно, вам может потребоваться обратиться за помощью к опытному пользователю Linux или к службе технической поддержки Proxmox.
Пожалуйста, убедитесь, что вы понимаете риски, связанные с изменением файла конфигурации виртуальной машины или порядка загрузки драйверов.
```
В случае, если проблема не решается, сообщите мне, пожалуйста:
1. Какая версия Proxmox у вас установлена?
2. Какая модель материнской платы и видеокарты у вас установлена?
3. Какой дистрибутив Linux установлен на хосте?
4. Есть ли у вас какие-либо модифицированные файлы конфигурации?
5. Как была установлена виртуальная машина?
```
Я надеюсь, что это поможет.
Информация о хосте:
Код:
OS: Proxmox VE 8.2.2 x86_64
Хост: 11A4000HGE ThinkCentre M75q-1
Ядро: 6.8.4-2-pve
CPU: AMD Ryzen 5 PRO 3400GE w/ Radeon Vega Graphics (8) @ 3.300GHz
GPU: AMD ATI Radeon Vega Series / Radeon Vega Mobile Series
Информация о SATA контроллере:
Код:
~# lspci -v
05:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 61) (prog-if 01 [AHCI 1.0])
Подсистема: Lenovo FCH SATA Controller [AHCI mode]
Флаги: bus master, fast devsel, latency 0, IRQ 255, IOMMU group 14
Память на fcc00000 (32-bit, non-prefetchable) [size=2K]
Возможности: [48] Vendor Specific Information: Len=08 <?>
Возможности: [50] Power Management version 3
Возможности: [64] Express Endpoint, MSI 00
Возможности: [a0] MSI: Enable- Count=1/2 Maskable- 64bit+
Возможности: [d0] SATA HBA v1.0
Возможности: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
Возможности: [150] Advanced Error Reporting
Возможности: [270] Secondary PCI Express
Возможности: [2a0] Access Control Services
Драйвер ядра в использовании: vfio-pci
Модули ядра: ahci
Настройка хоста:
Код:
~# cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt vfio-pci.ids=1022:7901"
GRUB_CMDLINE_LINUX=""
~# cat /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
~# cat /etc/modprobe.d/pve-blacklist.conf
blacklist nvidiafb
blacklist ahci
~# cat /etc/modprobe.d/vfio_iommu.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
~# cat /etc/modprobe.d/vfio-pci.conf
options vfio-pci ids=1022:7901
Код:
~# update-grub && update-initramfs -u -k all && reboot now
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.4-2-pve
Found initrd image: /boot/initrd.img-6.8.4-2-pve
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Adding boot menu entry for UEFI Firmware Settings ...
done
update-initramfs: Generating /boot/initrd.img-6.8.4-2-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
Проверка возможности передачи PCI
Код:
~# dmesg | grep -e DMAR -e IOMMU -e AMD-Vi -e remapping
[ 0.066674] AMD-Vi: Unknown option - 'on'
[ 0.159073] AMD-Vi: Using global IVHD EFR:0x4f77ef22294ada, EFR2:0x0
[ 0.439331] pci 0000:00:00.2: AMD-Vi: IOMMU performance counters supported
[ 0.440703] AMD-Vi: Extended features (0x4f77ef22294ada, 0x0): PPR NX GT IA GA PC GA_vAPIC
[ 0.440716] AMD-Vi: Interrupt remapping enabled
[ 0.440872] AMD-Vi: Virtual APIC enabled
[ 0.441003] perf/amd_iommu: Detected AMD IOMMU #0 (2 banks, 4 counters/bank). VM config:
Код:
~# cat /etc/pve/qemu-server/100.conf
balloon: 0
bios: ovmf
boot: order=scsi0;net0
cores: 6
cpu: x86-64-v2-AES
efidisk0: local-lvm:vm-100-disk-0,efitype=4m,pre-enrolled-keys=1,size=4M
hostpci0: 0000:05:00.0
machine: q35
memory: 4096
name: OMV
net0: virtio=MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
numa: 0
rootfs: local-lvm:vm-100-disk1
scsi0: lsilogic
scsi1: lsilogic
sortorder: 100
swap: local-lvm:vm-100-swap
virtio: mac
Код:
~# cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Debian GNU/Linux"
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt vfio-pci.ids=1022:7901"
GRUB_CMDLINE_LINUX=""
~# cat /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
~# cat /etc/modprobe.d/pve-blacklist.conf
blacklist amdgpu
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
~# cat /etc/modprobe.d/vfio.conf
options vfio-pci ids=1022:7901,1028:1102,10de:1e06
~# cat /etc/modprobe.d/vfio_iommu_type1.conf
options vfio_iommu_type1 allow_unsafe_interrupts=1
~# cat /etc/pve/virt-root.conf
machine: q35
memory: 4096
rootfs: local-lvm:vm-100-disk1
Журнал ядра:
Код:
~# cat /var/log/kern.log | grep -i vfio
[ 0.015802] vfio: loaded firmware from /lib/firmware/vfio/pci/vfio-pci.c32
[ 0.054376] vfio-pci: vfio-pci.c32:1022:7901: firmware load complete.
[ 1.233539] vfio-pci: 1022:7901: [Device already claimed, skipping VFIO-PCI driver]
~# cat /var/log/kern.log | grep -i hostpci0
~# cat /var/log/kern.log | grep -i pci
[ 0.123575] pci 0000:00:00.0: [bus 00-03.1] 0000:00:00.0
[ 0.126437] pci 0000:00:01.0: [bus 00-03.1] 0000:00:01.0
[ 0.127002] pci 0000:00:02.0: [bus 00-03.1] 0000:00:02.0
[ 0.127541] pci 0000:00:03.0: [bus 00-03.1] 0000:00:03.0
[ 0.128070] pci 0000:00:04.0: [bus 00-03.1] 0000:00:04.0
[ 0.128606] pci 0000:00:05.0: [bus 00-03.1] 0000:00:05.0
[ 0.129128] pci 0000:00:06.0: [bus 00-03.1] 0000:00:06.0
[ 0.129638] pci 0000:00:07.0: [bus 00-03.1] 0000:00:07.0
[ 0.130145] pci 0000:00:08.0: [bus 00-03.1] 0000:00:08.0
[ 0.130651] pci 0000:00:09.0: [bus 00-03.1] 0000:00:09.0
[ 0.131158] pci 0000:00:0a.0: [bus 00-03.1] 0000:00:0a.0
[ 0.131665] pci 0000:00:0b.0: [bus 00-03.1] 0000:00:0b.0
[ 0.132172] pci 0000:00:0c.0: [bus 00-03.1] 0000:00:0c.0
[ 0.132679] pci 0000:00:0d.0: [bus 00-03.1] 0000:00:0d.0
[ 0.133186] pci 0000:00:0e.0: [bus 00-03.1] 0000:00:0e.0
[ 0.133693] pci 0000:00:0f.0: [bus 00-03.1] 0000:00:0f.0
[ 0.134199] pci 0000:05:00.0: [bus 00-03.1] 0000:05:00.0
[ 0.134706] pci 0000:05:00.0: vfio-pci: added 1022:7901
[ 0.135267] vfio-pci: [1022:7901] 0000:05:00.0
[ 0.135805] vfio-pci: [1022:7901] 0000:05:00.0: [Device already claimed, skipping VFIO-PCI driver]
[ 1.233539] vfio-pci: 1022:7901: [Device already claimed, skipping VFIO-PCI driver]
Лог qemu:
Код:
~# cat /var/log/libvirt/qemu/vm-100.log
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
qemu-kvm-100: Starting up
qemu-kvm-100: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Лог libvirt:
Код:
~# journalctl -u libvirtd
--
Oct 01 17:48:03 proxmox libvirtd[1234]: VIR_LOG_INFO: libvirt is running as user root
--
Oct 01 17:48:03 proxmox libvirtd[1234]: VIR_LOG_INFO: libvirt is running as user root
Журнал qemu:
Код:
~# journalctl -u qemu-kvm-100
--
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: Starting up
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Наблюдается ошибка в логе, сообщающая, что устройство уже заявлено. Это указывает на то, что драйвер vfio-pci пытается загрузить устройство, которое уже используется другим драйвером.
В качестве временного решения можно попробовать перезагрузить виртуальную машину, но это не устранит основную проблему.
Убедитесь, что устройство 1022:7901 не используется другим драйвером или процессом в системе.
Убедитесь, что файл конфигурации виртуальной машины правильно настроен для использования устройства 1022:7901.
Возможно, вам потребуется изменить порядок загрузки драйверов в системе.
Лог сетевой карты:
Код:
~# cat /var/log/syslog | grep -i vmbr0
Oct 17 12:43:09 proxmox systemd[1]: Started Virtual Bridge Interface.
Oct 17 12:43:09 proxmox bridge[224]: brctl show
brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.0000000000 no
--
Oct 17 12:43:09 proxmox systemd[1]: Started Virtual Bridge Interface.
Oct 17 12:43:09 proxmox bridge[224]: brctl show
brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.0000000000 no
Журнал qemu:
Код:
~# journalctl -u qemu-kvm-100
--
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: Starting up
Oct 01 17:48:03 proxmox qemu-kvm-100[1235]: virtio: MAC/00:16:3e:a1:b2:c3,bridge=vmbr0
Предполагается, что основная проблема заключается в том, что vfio пытается захватить устройство, которое уже используется другим драйвером. В этом случае необходимо убедиться, что vfio-pci загружен после драйвера, который уже использует устройство.
Предполагается, что vmbr0 является сетью, которую использует виртуальная машина.
Пожалуйста, обратите внимание на ошибки "Device already claimed" в логах vfio-pci и попытайтесь определить, какой другой драйвер или процесс использует устройство 1022:7901. Затем можно изменить файл конфигурации виртуальной машины или порядок загрузки драйверов, чтобы vfio-pci смог захватить устройство.
Обратите внимание, что необходимо проверить все журналы, связанные с системой и виртуальной машиной, чтобы определить, есть ли какие-либо ошибки или предупреждения, которые могут указывать на причину проблемы.
Если вы не можете решить проблему самостоятельно, вам может потребоваться обратиться за помощью к опытному пользователю Linux или к службе технической поддержки Proxmox.
Пожалуйста, убедитесь, что вы понимаете риски, связанные с изменением файла конфигурации виртуальной машины или порядка загрузки драйверов.
```
В случае, если проблема не решается, сообщите мне, пожалуйста:
1. Какая версия Proxmox у вас установлена?
2. Какая модель материнской платы и видеокарты у вас установлена?
3. Какой дистрибутив Linux установлен на хосте?
4. Есть ли у вас какие-либо модифицированные файлы конфигурации?
5. Как была установлена виртуальная машина?
```
Я надеюсь, что это поможет.
