Я использую PCI passthrough на хосте Proxmox 3.4, и всегда работало без сбоев. Попытался обновиться до Proxmox 4.0 — возникла куча проблем, поэтому откатился назад и отдельно установил чистую версию 4.0 для теста.
Код:
~# pveversion -v
proxmox-ve: 4.0-16 (используемое ядро: 4.2.2-1-pve)
pve-manager: 4.0-50 (текущая версия: 4.0-50/d3a6b7e5)
pve-kernel-4.2.2-1-pve: 4.2.2-16
lvm2: 2.02.116-pve1
corosync-pve: 2.3.5-1
libqb0: 0.17.2-1
pve-cluster: 4.0-23
qemu-server: 4.0-31
pve-firmware: 1.1-7
libpve-common-perl: 4.0-32
libpve-access-control: 4.0-9
libpve-storage-perl: 4.0-27
pve-libspice-server1: 0.12.5-1
vncterm: 1.2-1
pve-qemu-kvm: 2.4-10
pve-container: 1.0-10
pve-firewall: 2.0-12
pve-ha-manager: 1.0-10
ksm-control-daemon: 1.2-1
glusterfs-client: 3.5.2-2+deb8u1
lxc-pve: 1.1.3-1
lxcfs: 0.9-pve2
cgmanager: 0.37-pve2
criu: 1.6.0-1
zfsutils: 0.6.5-pve4~jessie
Симптом 1: виртуальные машины грузятся очень медленно
В версии 4.0, если гость использует PCI passthrough, загрузка занимает очень много времени. Например, pfSense VM грузится меньше, чем за 2 минуты без passthrough, а с ним — больше 3 минут только на загрузку ядра. После загрузки ядра остальная часть загрузочного процесса проходит нормально. Похожая картина с FreeNAS VM, если я передаю SAS HBA карту напрямую.
Симптом 2: В IOMMU группе оказывается сразу несколько PCI-устройств
В версии 3.4 я передавал один порт с Intel Pro/1000 VT четырёхпортовой сетевой карты на FreeNAS VM и при этом использовал соседний порт на самом хосте. В версии 4.0, если я передаю тот же порт, соседний порт исчезает на хосте. Похоже, дело в том, что оба порта находятся в одной IOMMU группе (раньше, с ядром 2.6, такого понятия как IOMMU группы не было).
Код:
# lspci
<отсечено>
05:00.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
06:02.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
06:04.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
07:00.0 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
07:00.1 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
08:00.0 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
08:00.1 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
# find /sys/kernel/iommu_groups/ -type l
<отсечено>
/sys/kernel/iommu_groups/13/devices/0000:05:00.0
/sys/kernel/iommu_groups/14/devices/0000:06:02.0
/sys/kernel/iommu_groups/14/devices/0000:07:00.0
/sys/kernel/iommu_groups/14/devices/0000:07:00.1
/sys/kernel/iommu_groups/15/devices/0000:06:04.0
/sys/kernel/iommu_groups/15/devices/0000:08:00.0
/sys/kernel/iommu_groups/15/devices/0000:08:00.1
Обсуждения в сети скорее всего указывают на причину медленной загрузки — это именно ядро 4.2 (bbs.archlinux.org/viewtopic.php?id=203240). При использовании собственного ядра Debian 3.16 на новой установке Proxmox 4.0 проблема с медленной загрузкой пропадает, но проблема с IOMMU группами остаётся (в том же обсуждении упоминается патчированное ядро, решающее вопрос с группировкой IOMMU).
Код:
~# pveversion -v
proxmox-ve: 4.0-16 (используемое ядро: 4.2.2-1-pve)
pve-manager: 4.0-50 (текущая версия: 4.0-50/d3a6b7e5)
pve-kernel-4.2.2-1-pve: 4.2.2-16
lvm2: 2.02.116-pve1
corosync-pve: 2.3.5-1
libqb0: 0.17.2-1
pve-cluster: 4.0-23
qemu-server: 4.0-31
pve-firmware: 1.1-7
libpve-common-perl: 4.0-32
libpve-access-control: 4.0-9
libpve-storage-perl: 4.0-27
pve-libspice-server1: 0.12.5-1
vncterm: 1.2-1
pve-qemu-kvm: 2.4-10
pve-container: 1.0-10
pve-firewall: 2.0-12
pve-ha-manager: 1.0-10
ksm-control-daemon: 1.2-1
glusterfs-client: 3.5.2-2+deb8u1
lxc-pve: 1.1.3-1
lxcfs: 0.9-pve2
cgmanager: 0.37-pve2
criu: 1.6.0-1
zfsutils: 0.6.5-pve4~jessie
Симптом 1: виртуальные машины грузятся очень медленно
В версии 4.0, если гость использует PCI passthrough, загрузка занимает очень много времени. Например, pfSense VM грузится меньше, чем за 2 минуты без passthrough, а с ним — больше 3 минут только на загрузку ядра. После загрузки ядра остальная часть загрузочного процесса проходит нормально. Похожая картина с FreeNAS VM, если я передаю SAS HBA карту напрямую.
Симптом 2: В IOMMU группе оказывается сразу несколько PCI-устройств
В версии 3.4 я передавал один порт с Intel Pro/1000 VT четырёхпортовой сетевой карты на FreeNAS VM и при этом использовал соседний порт на самом хосте. В версии 4.0, если я передаю тот же порт, соседний порт исчезает на хосте. Похоже, дело в том, что оба порта находятся в одной IOMMU группе (раньше, с ядром 2.6, такого понятия как IOMMU группы не было).
Код:
# lspci
<отсечено>
05:00.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
06:02.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
06:04.0 PCI bridge: Integrated Device Technology, Inc. [IDT] PES12N3A PCI Express Switch (rev 0e)
07:00.0 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
07:00.1 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
08:00.0 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
08:00.1 Ethernet controller: Intel Corporation 82575GB Gigabit Network Connection (rev 02)
# find /sys/kernel/iommu_groups/ -type l
<отсечено>
/sys/kernel/iommu_groups/13/devices/0000:05:00.0
/sys/kernel/iommu_groups/14/devices/0000:06:02.0
/sys/kernel/iommu_groups/14/devices/0000:07:00.0
/sys/kernel/iommu_groups/14/devices/0000:07:00.1
/sys/kernel/iommu_groups/15/devices/0000:06:04.0
/sys/kernel/iommu_groups/15/devices/0000:08:00.0
/sys/kernel/iommu_groups/15/devices/0000:08:00.1
Обсуждения в сети скорее всего указывают на причину медленной загрузки — это именно ядро 4.2 (bbs.archlinux.org/viewtopic.php?id=203240). При использовании собственного ядра Debian 3.16 на новой установке Proxmox 4.0 проблема с медленной загрузкой пропадает, но проблема с IOMMU группами остаётся (в том же обсуждении упоминается патчированное ядро, решающее вопрос с группировкой IOMMU).
