Hello everyone, I'm new in this form and with Proxmox.
<little presentation on me, you can skip this>
I've got some experience with Linux and virtualization (mainly with VMWare where SSH is the first thing I enable).
I want to expertise with Proxmox because I'm a consultant, and often VMWare license are too expensive for some customers, and also free ESXi is too limitated.
</little presentation on me, you can skip this>
Since I just want to "play" with a new game, I've installed Proxmox on what will be my new home NAS.
- Asrock J4205-ITX Mainboard with 16GB RAM
- Fractal design Node 304 Case
- 2x WD Red 4TB, 1x250GB Samsung EVO SSD
The problem: I want to passthrough one of the two SATA controller to a VM.
The CPU is VT-d capable and I've already made it working with VMWare, just few clicks:
I want to pass the ASMedia controller, since it is an "added" controller, not the native Intel CPU one (that I want to keep for the SSD).
I've enabled "intel_iommu=on" but my IOMMU groups are like that:
Group 4 is a BIG group and both ASMedia controller and Realteck Ethernet Controller belongs to this Group!
When I try to pass 03:00:0 SATA Controller, my network card stop to work on my Proxmox host
Searching around I've fonud that passing a device within a big IOMMU Group, may impact other devices, and this is the case. I've also found that Group splitting is something related to ACS and that a patch is required on kernel. Proxmox already apply this patch (but there is a BUG, I'll tell you later).
I've tried using "pcie_acs_override=downstream" and also "pcie_acs_override=multifunction" but it don't make any change.
With lspci -t I've noticed that my devices are not "root-connected":
Here lspci
Here lspci -n
So I wanted to try to specify my device (and/or its parent device) using "pcie_acs_override=id:nnnn:nnnn" and discovered a BUG!
When I specify the device id I always get "PCIe ACS invalid ID" in dmesg!
This because the patch has got an error:
hxxps://git.proxmox.com/?p=pve-kernel.git;a=blob;f=override_for_missing_acs_capabilities.patch;h=7052f5a040de6e80aa4746e2caf1d4e97371604e;hb=54a9e5a210ac9494b27249c96ec07c212ad3106d
On line 123,124 you can see that the ":" is searched inside the string and than, if ";" not found, fail.
Of course the ";" on line 124 should be ":" as I've found in others version of the same patch:
hxxps://gist.github.com/ArseniyShestakov/768a426e79e2b901f9eb
SO, I've used this (hxxps://forum.proxmox.com/threads/tutorial-compile-proxmox-ve-5-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/#post-179193) tutorial and I've recompiled my kernel with the fixed patch.
I no longer receive "invalid ID" error, but the situation is still the same
Some other stuff may help: dmesg|grep -e DMAR -e IOMMU
dmesg | grep -i acs (this is just one of the various try)
As you may see I've tried to manage it myself, but it seems I need some help!
If you're curious I want to pass my ASMedia controller since my desidered configuration will have an additional SATA controller on PCI-E x1 port of the mainboard and:
Proxmox host with Intel SATA controller and one SSD
-> VM1 with one ASMedia controller + 2xWD Red 4TB - OpenMediaVault for Sharing my Movies
-> VM2 with the other ASMedia controller + 2xWD Red 1TB - FreeNAS with ZFS and dedup
I'll also try to use ZFS with dedup on Proxmox, I know it is possible... FreeNAS is just another "new" (for me) thing I'd like to try
Any help/idea is well accepted.
Remember, it is not an hardware limitation since I've got it working with VMware !!!
Also, I've successfully passed the Intel 00:12:0 controller to a VM, but it is not what I want.
Also because I want to pass two controllers to two VM. (I don't had the additional controller during "screenshots" but I've already installed it, and it was 04:00:0 just behind the other ASMedia, with the same problem in Proxmox but not in VMware)
\Jeky
P.S.
I've also tried with "vfio_iommu_type1 allow_unsafe_interrupts=1" and playing with vfio / pci_stub .. the problem is the same, if I start the VM with the ASMedia controller passthrough, the network card stop working.
<little presentation on me, you can skip this>
I've got some experience with Linux and virtualization (mainly with VMWare where SSH is the first thing I enable).
I want to expertise with Proxmox because I'm a consultant, and often VMWare license are too expensive for some customers, and also free ESXi is too limitated.
</little presentation on me, you can skip this>
Since I just want to "play" with a new game, I've installed Proxmox on what will be my new home NAS.
- Asrock J4205-ITX Mainboard with 16GB RAM
- Fractal design Node 304 Case
- 2x WD Red 4TB, 1x250GB Samsung EVO SSD
The problem: I want to passthrough one of the two SATA controller to a VM.
The CPU is VT-d capable and I've already made it working with VMWare, just few clicks:
I want to pass the ASMedia controller, since it is an "added" controller, not the native Intel CPU one (that I want to keep for the SSD).
I've enabled "intel_iommu=on" but my IOMMU groups are like that:
Code:
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 03:00.0 SATA controller [0106]: ASMedia Technology Inc. ASM1062 Serial ATA Controller [1b21:0612] (rev 02)
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)
Group 4 is a BIG group and both ASMedia controller and Realteck Ethernet Controller belongs to this Group!
When I try to pass 03:00:0 SATA Controller, my network card stop to work on my Proxmox host
Searching around I've fonud that passing a device within a big IOMMU Group, may impact other devices, and this is the case. I've also found that Group splitting is something related to ACS and that a patch is required on kernel. Proxmox already apply this patch (but there is a BUG, I'll tell you later).
I've tried using "pcie_acs_override=downstream" and also "pcie_acs_override=multifunction" but it don't make any change.
With lspci -t I've noticed that my devices are not "root-connected":
Code:
-[0000:00]-+-00.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge
+-02.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller
+-0f.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine
+-12.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller
+-13.0-[01]----00.0 Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
+-13.1-[02]--
+-13.2-[03]----00.0 ASMedia Technology Inc. ASM1062 Serial ATA Controller
+-13.3-[04]--
+-15.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI
+-1f.0 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface
\-1f.1 Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller
Here lspci
Code:
00:00.0 Host bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge (rev 0b)
00:02.0 VGA compatible controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller (rev 0b)
00:0f.0 Communication controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine (rev 0b)
00:12.0 SATA controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller (rev 0b)
00:13.0 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 (rev fb)
00:13.1 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #2 (rev fb)
00:13.2 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #3 (rev fb)
00:13.3 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #4 (rev fb)
00:15.0 USB controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI (rev 0b)
00:1f.0 ISA bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface (rev 0b)
00:1f.1 SMBus: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller (rev 0b)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)
03:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 02)
Here lspci -n
Code:
00:00.0 0600: 8086:5af0 (rev 0b)
00:02.0 0300: 8086:5a84 (rev 0b)
00:0f.0 0780: 8086:5a9a (rev 0b)
00:12.0 0106: 8086:5ae3 (rev 0b)
00:13.0 0604: 8086:5ad8 (rev fb)
00:13.1 0604: 8086:5ad9 (rev fb)
00:13.2 0604: 8086:5ada (rev fb)
00:13.3 0604: 8086:5adb (rev fb)
00:15.0 0c03: 8086:5aa8 (rev 0b)
00:1f.0 0601: 8086:5ae8 (rev 0b)
00:1f.1 0c05: 8086:5ad4 (rev 0b)
01:00.0 0200: 10ec:8168 (rev 11)
03:00.0 0106: 1b21:0612 (rev 02)
So I wanted to try to specify my device (and/or its parent device) using "pcie_acs_override=id:nnnn:nnnn" and discovered a BUG!
When I specify the device id I always get "PCIe ACS invalid ID" in dmesg!
This because the patch has got an error:
hxxps://git.proxmox.com/?p=pve-kernel.git;a=blob;f=override_for_missing_acs_capabilities.patch;h=7052f5a040de6e80aa4746e2caf1d4e97371604e;hb=54a9e5a210ac9494b27249c96ec07c212ad3106d
On line 123,124 you can see that the ":" is searched inside the string and than, if ";" not found, fail.
Of course the ";" on line 124 should be ":" as I've found in others version of the same patch:
hxxps://gist.github.com/ArseniyShestakov/768a426e79e2b901f9eb
SO, I've used this (hxxps://forum.proxmox.com/threads/tutorial-compile-proxmox-ve-5-with-patched-intel-iommu-driver-to-remove-rmrr-check.36374/#post-179193) tutorial and I've recompiled my kernel with the fixed patch.
I no longer receive "invalid ID" error, but the situation is still the same
Some other stuff may help: dmesg|grep -e DMAR -e IOMMU
Code:
[ 0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
[ 0.000000] ACPI: DMAR 0x000000006D9BB4D0 0000A8 (v01 INTEL EDK2 00000003 BRXT 0100000D)
[ 0.000000] DMAR: IOMMU enabled
[ 0.068770] DMAR: Host address width 39
[ 0.068773] DMAR: DRHD base: 0x000000fed64000 flags: 0x0
[ 0.068790] DMAR: dmar0: reg_base_addr fed64000 ver 1:0 cap 1c0000c40660462 ecap 7e3ff0505e
[ 0.068792] DMAR: DRHD base: 0x000000fed65000 flags: 0x1
[ 0.068803] DMAR: dmar1: reg_base_addr fed65000 ver 1:0 cap d2008c40660462 ecap f050da
[ 0.068806] DMAR: RMRR base: 0x0000006d592000 end: 0x0000006d5b1fff
[ 0.068808] DMAR: RMRR base: 0x0000006f800000 end: 0x0000007fffffff
[ 0.068812] DMAR-IR: IOAPIC id 1 under DRHD base 0xfed65000 IOMMU 1
[ 0.068813] DMAR-IR: HPET id 0 under DRHD base 0xfed65000
[ 0.068815] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
[ 0.070815] DMAR-IR: Enabled IRQ remapping in x2apic mode
[ 1.224690] DMAR: No ATSR found
[ 1.225561] DMAR: dmar0: Using Queued invalidation
[ 1.225569] DMAR: dmar1: Using Queued invalidation
[ 1.225663] DMAR: Setting RMRR:
[ 1.225853] DMAR: Setting identity map for device 0000:00:02.0 [0x6f800000 - 0x7fffffff]
[ 1.225916] DMAR: Setting identity map for device 0000:00:15.0 [0x6d592000 - 0x6d5b1fff]
[ 1.225927] DMAR: Prepare 0-16MiB unity mapping for LPC
[ 1.225978] DMAR: Setting identity map for device 0000:00:1f.0 [0x0 - 0xffffff]
[ 1.226060] DMAR: Intel(R) Virtualization Technology for Directed I/O
dmesg | grep -i acs (this is just one of the various try)
Code:
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.10.17-3-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on pcie_acs_override=id:8086:5ad8,id:8086:5ad9,id:8086:5ada,id:8086:5adb,id:10ec:8168,id:1b21:0612
[ 0.000000] Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA
[ 0.000000] ACPI: FACS 0x000000006D9C8080 000040
[ 0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.10.17-3-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on pcie_acs_override=id:8086:5ad8,id:8086:5ad9,id:8086:5ada,id:8086:5adb,id:10ec:8168,id:1b21:0612
As you may see I've tried to manage it myself, but it seems I need some help!
If you're curious I want to pass my ASMedia controller since my desidered configuration will have an additional SATA controller on PCI-E x1 port of the mainboard and:
Proxmox host with Intel SATA controller and one SSD
-> VM1 with one ASMedia controller + 2xWD Red 4TB - OpenMediaVault for Sharing my Movies
-> VM2 with the other ASMedia controller + 2xWD Red 1TB - FreeNAS with ZFS and dedup
I'll also try to use ZFS with dedup on Proxmox, I know it is possible... FreeNAS is just another "new" (for me) thing I'd like to try
Any help/idea is well accepted.
Remember, it is not an hardware limitation since I've got it working with VMware !!!
Also, I've successfully passed the Intel 00:12:0 controller to a VM, but it is not what I want.
Also because I want to pass two controllers to two VM. (I don't had the additional controller during "screenshots" but I've already installed it, and it was 04:00:0 just behind the other ASMedia, with the same problem in Proxmox but not in VMware)
\Jeky
P.S.
I've also tried with "vfio_iommu_type1 allow_unsafe_interrupts=1" and playing with vfio / pci_stub .. the problem is the same, if I start the VM with the ASMedia controller passthrough, the network card stop working.
Code:
pveperf
CPU BOGOMIPS: 11980.80
REGEX/SECOND: 960974
HD SIZE: 56.84 GB (/dev/mapper/pve-root)
BUFFERED READS: 508.26 MB/sec
AVERAGE SEEK TIME: 0.10 ms
FSYNCS/SECOND: 550.46
DNS EXT: 39.89 ms
DNS INT: 17.63 ms (lan)
Last edited: