Proxmox - IOMMU/VT-d přemapování IRQ

Proxmox - IOMMU/VT-d přemapování IRQ
« kdy: 31. 01. 2023, 17:01:58 »
Je možné, že se to pokaždé nemusí podařit. Mám desku od Asrocku J4205-ITX (s posledním BIOSem) a na jednom přerušení (4) mám všechny zařízení, které bych potřeboval rozhodit pro jednotlivé virtuální stroje.

Kód: [Vybrat]
for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU group %s ' "$n"; lspci -nns "${d##*/}"; done
IOMMU group 0 00:00.0 Host bridge [0600]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge [8086:5af0] (rev 0b)
IOMMU group 1 00:02.0 VGA compatible controller [0300]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller [8086:5a84] (rev 0b)
IOMMU group 2 00:0f.0 Communication controller [0780]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine [8086:5a9a] (rev 0b)
IOMMU group 3 00:12.0 SATA controller [0106]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller [8086:5ae3] (rev 0b)
IOMMU group 4 00:13.0 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 [8086:5ad8] (rev fb)
IOMMU group 4 00:13.1 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #2 [8086:5ad9] (rev fb)
IOMMU group 4 00:13.2 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #3 [8086:5ada] (rev fb)
IOMMU group 4 00:13.3 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #4 [8086:5adb] (rev fb)
IOMMU group 4 01:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 11)
IOMMU group 4 02:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX200 [8086:2723] (rev 1a)
IOMMU group 4 03:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1062 Serial ATA Controller [1b21:0612] (rev 02)
IOMMU group 4 04:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
IOMMU group 5 00:15.0 USB controller [0c03]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI [8086:5aa8] (rev 0b)
IOMMU group 6 00:1f.0 ISA bridge [0601]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface [8086:5ae8] (rev 0b)
IOMMU group 6 00:1f.1 SMBus [0c05]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller [8086:5ad4] (rev 0b)


Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #1 kdy: 01. 02. 2023, 00:01:41 »
viz https://wiki.archlinux.org/title/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_(ACS_override_patch) a https://www.kernel.org/doc/html/v5.10/x86/intel-iommu.html

Můžeš jít cestou přes virtuální ovladač, ale předpokládám, že chceš pci passthrough, tam vím jen o patchování linux kernelu, viz odkaz na archu. Nevidím v datasheetu, že by ta deska to nějak uměla konfigurovat.

S rozhazováním cpu jader nemám vůbec zkušenosti, když už rozhazujeme celé sockety.

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #2 kdy: 01. 02. 2023, 09:17:45 »
Jádra rozhodit nepotřebuji a o GPU mi taky nejde. Konkrétně mi jde rozhodit síťové karty a SATA porty od sebe. Jednu LAN bych chtěl přidělit pro OPNsense, M.2 s WiFi pro OpenWrt a SATA od ASMedie pro TrueNAS, protože když přiřadím jakékoliv zařízení z té velké skupiny do jednoho virtuálu, tak tam přejde celá skupina.
Na tomhle Asrocku jsem si chtěl tyhle věci vyzkoušet, ale co si tak čtu, tak je to asi nemožné. Vše je odvislé od chipsetu a ty levnější jsou hold takové. Když pokukuji po něčem lepším od AMD, tak jsem se dočetl, že chipset B550 bude mít přerušení rozhozené podobně (mnoho zařízení na jednom) a až X570 to má jinak a lépe.

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #3 kdy: 01. 02. 2023, 10:18:20 »
Zkus ten ACS patch, me uz nekolikrat pomohl. Rozbije to IOMMU grupy na mensi.

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #4 kdy: 01. 02. 2023, 11:30:31 »
Dobře chlapi, zkusím ten patch, ale dostanu se k tomu až zítra, tak potom dám vědět. Díky


Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #5 kdy: 01. 02. 2023, 16:37:22 »
Dnes si o tom (mimo domov) ještě něco čtu a vypadá to, že v Proxmoxu je nejspíš ten patch aplikován viz. https://git.proxmox.com/?p=pve-kernel.git;a=tree;f=patches/kernel;hb=refs/heads/master a soubor '0003-pci-Enable-overrides-for-missing-ACS-capabilities-4..patch'.
Někde jsem četl, že se musí zavést 'GRUB [...EFI\proxmox\grubx64.efi]' namísto 'SYSTEMD-BOOT[...EFI\systemd\systemd-bootx64.efi]', aby to vzalo 'pcie_acs_override=downstream' z '/etc/default/grub', jenže já EFI boot vůbec nepoužívám, tak nevím, jestli to je nutná podmínka. Netušíte někdo? 

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #6 kdy: 02. 02. 2023, 12:24:37 »
Ten parametr potrebny je. Jak ho predhodis kernelu, uz je na tobe.
Vidis GRUB prompt pri bootu? Tam se da editovat.

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #7 kdy: 02. 02. 2023, 15:28:57 »
Ano 'Grub-menu' vidím, ale raději edituji rovnou '/etc/default/grub' (včetně 'update-grub').
Musel jsem v BIOSu vypnout 'Secure boot', aby Proxmox nabootoval, tak jsem si myslel, že EFI boot nepoužívá, ale používá.
Každopádně pokud budu vycházet, že patch 'pci-Enable-overrides-for-missing-ACS-capabilities' je v Proxmoxu aplikován, tak i když do '/etc/default/grub' přidám parametr 'pcie_acs_override=downstream' nebo 'pcie_acs_override=downstream, multifunction', tak stejně rozhození IOMMU skupin nedocílím, i když z 'Boot menu' základní desky přehazuji 'proxmox' nebo UEFI OS'.

Kód: [Vybrat]
Boot0000* proxmox       HD.../File(\EFI\PROXMOX\GRUBX64.EFI)
Boot0001* UEFI OS       HD.../File(\EFI\BOOT\BOOTX64.EFI)

Asi to opravdu nepůjde, CPU J4205 má jen 6 PCIE linek, chipset má jen 2x SATA, zbylé 2X SATA jsou pomocí externího chipsetu od ASMedie, takže plno kompromisů.

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #8 kdy: 02. 02. 2023, 16:20:23 »
Na zacatku vypisu (cca 2. nebo 3.radek) dmesg je Command line.
Vidite v ni ten parametr?
Zmenilo se rozdeleni na IOMMU grupy alespon trosku?

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #9 kdy: 02. 02. 2023, 17:32:57 »
Na zacatku vypisu (cca 2. nebo 3.radek) dmesg je Command line.
Vidite v ni ten parametr?
Zmenilo se rozdeleni na IOMMU grupy alespon trosku?

Viz též
Kód: [Vybrat]
cat /proc/cmdline

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #10 kdy: 02. 02. 2023, 18:49:33 »
Ano, cílené příkazy tam jsou, akorát nyní jsou ty zařízení v 'IOMMU group 5', protože předtím jsem měl v BIOSu schválně vypnutou zvukovku.
Kód: [Vybrat]
cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.15.83-1-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt rd.driver.pre=vfio-pci pcie_acs_override=downstream,multifunction

for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU group %s ' "$n"; lspci -nns "${d##*/}"; done
IOMMU group 0 00:00.0 Host bridge [0600]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge [8086:5af0] (rev 0b)
IOMMU group 1 00:02.0 VGA compatible controller [0300]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller [8086:5a84] (rev 0b)
IOMMU group 2 00:0e.0 Audio device [0403]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster [8086:5a98] (rev 0b)
IOMMU group 3 00:0f.0 Communication controller [0780]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine [8086:5a9a] (rev 0b)
IOMMU group 4 00:12.0 SATA controller [0106]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller [8086:5ae3] (rev 0b)
IOMMU group 5 00:13.0 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 [8086:5ad8] (rev fb)
IOMMU group 5 00:13.1 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #2 [8086:5ad9] (rev fb)
IOMMU group 5 00:13.2 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #3 [8086:5ada] (rev fb)
IOMMU group 5 00:13.3 PCI bridge [0604]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #4 [8086:5adb] (rev fb)
IOMMU group 5 01:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 11)
IOMMU group 5 02:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX200 [8086:2723] (rev 1a)
IOMMU group 5 03:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1062 Serial ATA Controller [1b21:0612] (rev 02)
IOMMU group 5 04:00.0 Ethernet controller [0200]: Intel Corporation 82574L Gigabit Network Connection [8086:10d3]
IOMMU group 6 00:15.0 USB controller [0c03]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI [8086:5aa8] (rev 0b)
IOMMU group 7 00:1f.0 ISA bridge [0601]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface [8086:5ae8] (rev 0b)
IOMMU group 7 00:1f.1 SMBus [0c05]: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller [8086:5ad4] (rev 0b)

Re:Proxmox - IOMMU/VT-d přemapování IRQ
« Odpověď #11 kdy: 02. 02. 2023, 19:03:57 »
Opustím tuto mini-ITX desku, protože jsem byl obdarován starou deskou s chipsetem Z77. Tam je snad každé zařízení ve vlastní skupině a to jsem do desky nastrkal další LAN + 2x WiFi a NVMe disk v redukci do PCIE slotu, protože M.2 slot ta deska nemá. Jen jsem musel nahrát patchnutý BIOS, který podporuje boot z NVMe disku v PCIE slotu. Budu se hrát s tímto, než se rozhodnu do něčeho finálního.
Kód: [Vybrat]
for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%%/*}; printf 'IOMMU group %s ' "$n"; lspci -nns "${d##*/}"; done
IOMMU group 0 00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller [8086:0150] (rev 09)
IOMMU group 10 00:1c.4 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 5 [8086:1e18] (rev c4)
IOMMU group 11 00:1c.5 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 6 [8086:1e1a] (rev c4)
IOMMU group 12 00:1c.6 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 7 [8086:1e1c] (rev c4)
IOMMU group 13 00:1c.7 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 8 [8086:1e1e] (rev c4)
IOMMU group 14 00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)
IOMMU group 15 00:1f.0 ISA bridge [0601]: Intel Corporation Z77 Express Chipset LPC Controller [8086:1e44] (rev 04)
IOMMU group 15 00:1f.2 SATA controller [0106]: Intel Corporation 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] [8086:1e02] (rev 04)
IOMMU group 15 00:1f.3 SMBus [0c05]: Intel Corporation 7 Series/C216 Chipset Family SMBus Controller [8086:1e22] (rev 04)
IOMMU group 16 04:00.0 Network controller [0280]: Qualcomm Atheros QCA986x/988x 802.11ac Wireless Network Adapter [168c:003c]
IOMMU group 17 05:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 07)
IOMMU group 18 06:00.0 Network controller [0280]: Intel Corporation Wi-Fi 6 AX200 [8086:2723] (rev 1a)
IOMMU group 19 07:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1062 Serial ATA Controller [1b21:0612] (rev 01)
IOMMU group 1 00:01.0 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0151] (rev 09)
IOMMU group 1 00:01.2 PCI bridge [0604]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor PCI Express Root Port [8086:0159] (rev 09)
IOMMU group 1 02:00.0 Non-Volatile memory controller [0108]: Phison Electronics Corporation PS5013 E13 NVMe Controller [1987:5013] (rev 01)
IOMMU group 20 08:00.0 FireWire (IEEE 1394) [0c00]: VIA Technologies, Inc. VT6315 Series Firewire Controller [1106:3403] (rev 01)
IOMMU group 2 00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller [8086:0152] (rev 09)
IOMMU group 3 00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)
IOMMU group 4 00:16.0 Communication controller [0780]: Intel Corporation 7 Series/C216 Chipset Family MEI Controller #1 [8086:1e3a] (rev 04)
IOMMU group 5 00:19.0 Ethernet controller [0200]: Intel Corporation 82579V Gigabit Network Connection [8086:1503] (rev 04)
IOMMU group 6 00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)
IOMMU group 7 00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)
IOMMU group 8 00:1c.0 PCI bridge [0604]: Intel Corporation 7 Series/C216 Chipset Family PCI Express Root Port 1 [8086:1e10] (rev c4)
IOMMU group 9 00:1c.2 PCI bridge [0604]: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 [8086:1e14] (rev c4)