[SOLVED] Grundsätzlich: Kurze Erklärung zu IOMMU und ACS

El_Don

New Member
Sep 13, 2020
19
0
1
53
Hallo zusammen,

im Zusammenhang mit meinem Latenzproblem bei Audiowiedergabe (USB Soundkarte in einer Windows 10 VM), habe ich bermerkt, dass ich scheinbar irgendwo ein grundsätzliches Verständnisproblem zu IOMMU und ACS habe. VIelleicht kann mir das einer in knappen Worten kurz erklären.

Ganz konkret:

Meine IOMMU Gruppen sind


IOMMU Group 0 00:00.0 Host bridge [0600]: Intel Corporation Device [8086:9b53] (rev 03) IOMMU Group 1 00:01.0 PCI bridge [0604]: Intel Corporation Skylake PCIe Controller (x16) [8086:1901] (rev 03) IOMMU Group 1 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1f06] (rev a1) IOMMU Group 1 01:00.1 Audio device [0403]: NVIDIA Corporation TU106 High Definition Audio Controller [10de:10f9] (rev a1) IOMMU Group 1 01:00.2 USB controller [0c03]: NVIDIA Corporation TU106 USB 3.1 Host Controller [10de:1ada] (rev a1) IOMMU Group 1 01:00.3 Serial bus controller [0c80]: NVIDIA Corporation TU106 USB Type-C Port Policy Controller [10de:1adb] (rev a1) IOMMU Group 2 00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:9bc8] (rev 03) IOMMU Group 3 00:12.0 Signal processing controller [1180]: Intel Corporation Device [8086:06f9] IOMMU Group 4 00:14.0 USB controller [0c03]: Intel Corporation Device [8086:06ed] IOMMU Group 4 00:14.2 RAM memory [0500]: Intel Corporation Device [8086:06ef] IOMMU Group 5 00:16.0 Communication controller [0780]: Intel Corporation Device [8086:06e0] IOMMU Group 6 00:17.0 SATA controller [0106]: Intel Corporation Device [8086:06d2] IOMMU Group 7 00:1b.0 PCI bridge [0604]: Intel Corporation Device [8086:06ac] (rev f0) IOMMU Group 7 02:00.0 Non-Volatile memory controller [0108]: Seagate Technology PLC Device [1bb1:5012] (rev 01) IOMMU Group 8 00:1f.0 ISA bridge [0601]: Intel Corporation Device [8086:0685] IOMMU Group 8 00:1f.3 Audio device [0403]: Intel Corporation Device [8086:06c8] IOMMU Group 8 00:1f.4 SMBus [0c05]: Intel Corporation Device [8086:06a3] IOMMU Group 8 00:1f.5 Serial bus controller [0c80]: Intel Corporation Device [8086:06a4] IOMMU Group 8 00:1f.6 Ethernet controller [0200]: Intel Corporation Device [8086:0d4d]

Interessant in diesem Fall ist für mich die Gruppe 4. Proxmox bietet mir auf der Weboberfläche als PCI Device die 00:14. Klar, ich kann ja nur die IOMMU Gruppe insgesamt nehmen. Das führt aber natürlich dazu, dass auch RAM memory [500] in der VM steckt. Das will ich ja nicht. In der conf-Datei der VM habe ich dann trotzdem die 00:14.0 nur für USB eingetragen.

Jetzt die Fragen:
- Geht das überhaupt? Die VM startet immerhin, scheint aber irgendwie nicht viel zu bringen, da ich die Klicks im Sound immer noch habe.
- Benötige ich in diesem Fall den ACS Patch pcie_acs_override=downstream im Kernel boot um die beiden Geräte der IOMMU Gruppe 4 zu trennen?
Oder geht das gar nicht so wie ich mir das vorstelle?

Danke für Eure Hilfe
 
Falls der Thread absichtlich auf [SOLVED] steht, wäre es natürlich hilfreich für den Rest der community auch zu erwähnen was denn die Lösung war :)

Ansonsten:

Das führt aber natürlich dazu, dass auch RAM memory [500] in der VM steckt.
Was nicht unbedingt ein Problem sein muss - "RAM memory" meint hier natürlich nicht den tatsächlichen Arbeitsspeicher, der hängt ja nicht über PCIe, sondern eher einen (normalerweise) optionalen Zusatzcontroller. Oft macht das gar nichts solche Geräte durchzureichen, besonders toll ist es aber natürlich trotzdem nicht.

- Geht das überhaupt? Die VM startet immerhin, scheint aber irgendwie nicht viel zu bringen, da ich die Klicks im Sound immer noch habe.
Gehen sollte das schon so - verwende ich auch selbst so, das Audio läuft da ganz ohne Probleme auch auf hohen bit- und sampleraten. Wenn die VM mit dem controller einmal läuft, sollten Geräte die daran angeschlossen sind mit nativem speed laufen. Man muss hierzu natürlich jedwedes "USB passthrough" abschalten, und stattdessen das Gerät and die zum durchgereichten controller gehörenden Ports anschließen.

Und nur der Vollständigkeit halber, die Soundkarte funktioniert getestet unter Linux/Windows direkt gut?

- Benötige ich in diesem Fall den ACS Patch pcie_acs_override=downstream im Kernel boot um die beiden Geräte der IOMMU Gruppe 4 zu trennen?
Das wäre dann die Möglichkeit alle Geräte in eine eigene IOMMU-Gruppe zu packen - oder zumindest tut der kernel dann so. Es sei aber an dieser Stelle erwähnt, dass das ein workaround ist, der nach Möglichkeit vermieden werden sollte, da er unter Umständen die Stabilität und Sicherheit gefährden kann, Geräte die physisch in einer gemeinsamen Gruppe sind können sich dann theoretisch beliebig selbstständig Nachrichten zuschicken, und auch auf Gast-memory zugreifen.
 
Ich hatte den Post auf "solved" gestellt, weil ich den Eindruck hatte, dass die Frage für die Linux Cracks in ihrer Einfachheit hier wahrscheinlich etwas zu profan war. ;-)

Aber ich korrigere mich da gern und kann mittlerweile einen Teil meiner Fragen selbst beantworten:

  • Man muss/sollte immer die gesamt IOMMU Gruppe durchreichen.
    Keine Rolle spielt es für den in der IOMMU Gruppe befindlichen PCI Controller, welchen man ignorieren darf.
  • Sollten mehrere Devices in einer IOMMU Gruppe sein und dazu führen, dass man dem Betriebssystem bzw. dem Board
    lebenswichtige Funktionen im Falle des Passthrough nimmt, dann kommt der pcie_acs_override=downstream im ACS Patch zum Einsatz,
    der die IOMMU Gruppen splittet und die Devices "rootet". Laut Foren könnte das aber auch nach hinten losgehen.
Jetzt aber noch einmal konkret zu meinem Problem:

Was nicht unbedingt ein Problem sein muss - "RAM memory" meint hier natürlich nicht den tatsächlichen Arbeitsspeicher, der hängt ja nicht über PCIe, sondern eher einen (normalerweise) optionalen Zusatzcontroller.

Das ist richtig. Wenn ich richtig nachgeforscht habe, dann ist das RAM memory unter anderem für das Management der (virtuellen) DMA und Interrupts verantwortlich. Ist er nicht mit dem Server verbunden, so kann das zwar funktionieren, aber es führt dazu, dass die CPU sozusagen eine "Extrarunde" im Rahmen der Taktung gehen muss. Das führt bei sehr anspruchsvollen Aufgaben zur Verlangsamung der Prozesse (bei mir z.B. zu hören duch digitale Knackser in der Audiowiedergabe). Zu bemerken ist das z.B. auch bei der GPU Clock auf meiner NVIDIA Grafikkarte im MS Flugsimulator, wo plötzlich die GPU Clock heruntergefahren wird. In sofern ist Deine Aussage richtig. Das System funktionert generell, aber eben nicht ideal.
Sprich: Das Durchleiten der gesammten IOMMU 14 Gruppe kommt für mich nicht in Frage.
Und nur der Vollständigkeit halber, die Soundkarte funktioniert getestet unter Linux/Windows direkt gut?
Unter dem Proxmox OS habe ich sie natürlich nicht ausprobiert. Ohne es wirklich zu wissen, gehe ich aber bei einem brandneuen Device (Focusrite Solo2 3. Generation) davon aus, dass da erstmal alles okay ist. Die Karte funktioniert ja generell, nur wenn sie in der DAW mit mehreren Spuren richtig was zu tun bekommt, dann fangen die Klicks an obwohl die eigentlich Auslastung in der Cubase ASIO Engine bei max. 20% liegt.

Meine "Lösung" war es eine weitere PCIe Controller Karte zu installieren, die jetzt zwar in einer anderen IOMMU Gruppe als einziges Device (neben dem PCI Controller läuft), die sich aber a) nicht blacklisten und in den VFIO-PCI Treiber bringen lässt (außer händisch über unbind/bind) b) in der VM nicht richtig erkannt wird und c) beim Herunterfahren der VM den kompletten Server einfrieren lässt...und zwar so, dass noch nicht einmal der Reset Button funktionert.

Das Problem habe ich aber in diesen Thread separat behandelt: USB PCIe Karte lässt sich nicht blacklisten

Von daher würde ich diesen speziellen Thread, der sich erstmal nur um mein Verständnis drehte, als "solved" betrachten.
Danke für die Antwort.
 
Last edited:

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!