Vier 32-GB-Resizable-BARs hinter einem PCIe-Switch: Linux-Kernel-Modul umgeht Größenfehler
Fitting Four 32 GB Resizable Bars Behind a PCIe Switch on Linux

Doug Calobrisi betreibt vier AMD Radeon AI PRO R9700 und zwei RTX 3090 hinter einem Broadcom PEX88096 im einzigen x16-Slot. Damit ROCm P2P aktiviert, braucht jede Karte ein volles 32-GB-Resizable-BAR. Doch Linux 7.0 berechnet die Switch-Fenster als schlichte Summe der Kindgrößen und ignoriert die Lücke zwischen Doorbell und nächster Karte – zwei R9700 bekommen nichts. Ein Out-of-tree-Modul aus der initramfs setzt die BAR-Größen und richtet die Ausrichtung auf, bevor amdgpu lädt.
Mit dem ACS-Redirect-Setting lief P2P zwischen den R9700 bei 14,0 GB/s für jedes Paar, und alle vier gleichzeitig im Ring kopierend bewegten 54,7 GB/s.
- dougcalobrisi
Das ist mein Beitrag. Im Grunde brauchte ich P2P zwischen vier R9700s für Tensor-Parallel-Serving, was bedeutet, dass jede Karte eine 32-GB-BAR braucht. Mit allen sechs GPUs drin konnte das BIOS sie nicht mappen, und Linux hat das Fenster des Switches zu klein dimensioniert, sodass nur zwei Karten ihre BARs bekamen. Das Modul im Beitrag umgeht das. Mit ausgeschaltetem P2P war der Prefill etwa halb so schnell.
- zir_blazer
Solche Sachen dürften Spaß machen, sie in Coreboot zu testen. Als Dasharo für das MSI PRO Z690-A DDR4 vor mehr als vier Jahren veröffentlicht wurde, hatte ich Probleme mit zwei installierten Radeon 5600XT, die behoben wurden, nachdem ein Entwickler einige MMIO-bezogene Parameter angepasst hatte: https://github.com/Dasharo/dasharo-issues/issues/245
Wie viele PCIe-Switches man aneinanderreihen kann und wie viele Karten mit absurden MMIO-Anforderungen man zum Laufen bringt, wäre ein interessantes Experiment.
Im letzten Jahrzehnt oder so habe ich reichlich Firmware-MMIO-bezogene Probleme gesehen. Ich erinnere mich an bestimmte SR-IOV-fähige NICs (normalerweise Intel-Teile wie i350 und andere Enterprise-Komponenten), die nicht genug MMIO reservieren konnten, um alle unterstützten SR-IOV-Virtual Functions auf Consumer-Mainboards zu erstellen; in vielen Fällen konnte man SR-IOV zum Laufen bringen, war aber darauf beschränkt, so etwa 4 VFs zu erstellen, selbst wenn die Hardware 16 unterstützte, weil das eben alles war, was reinpasste. Das war im Wesentlichen alles ein Firmware-Problem, kein Hardware-Problem, aber nur wenige Leute haben die nötigen Fähigkeiten, um BIOS-Modding zu betreiben und so ziemlich verworrene Dinge wie die MMIO-Zuweisung zu reparieren. Im Grunde versucht man, Firmware-Probleme woanders zu umgehen.
- bombela
Das Wort bzw. Akronym BAR wird 34 Mal erwähnt, aber nie definiert.