Linux не смог разложить четыре 32-гигабайтных BAR за PCIe-коммутатором — и это починили модулем ядра
Fitting Four 32 GB Resizable Bars Behind a PCIe Switch on Linux

Автор собрал в одном слоте x16 четыре AMD Radeon AI PRO R9700 и две RTX 3090 за коммутатором Broadcom PEX88096. Для P2P в ROCm каждой карте нужен Resizable BAR на все 32 ГБ, но BIOS не может разметить шесть таких окон, а в Linux 7.0 обнаружился баг: pbus_size_mem() складывает размеры дочерних окон без зазора, и коммутатору не хватает места. Патч Ilpo Järvinen это исправляет, но разметку всё равно делает модуль gpu-rebar-layout из initramfs.
С модулем все четыре R9700 получают свои 32 ГБ, а P2P между ними идёт на 14,0 ГБ/с для каждой пары — ровно столько даёт восьмиполосный линк gen4 на практике, а при копировании всех четырёх по кольцу сразу прокачивается 54,7 ГБ/с.
- dougcalobrisi
Это мой пост. В общем, мне нужен был P2P между четырьмя R9700 для tensor parallel serving, а это значит, что на каждой карте нужен 32-гигабайтный BAR. Когда все шесть GPU были установлены, BIOS не смог их разложить, а Linux выделил окно коммутатора слишком маленьким, поэтому свои BAR получили только две карты. Модуль из поста обходит эту проблему. С выключенным P2P prefill был примерно вдвое медленнее.
- zir_blazer
Такие вещи должно быть интересно тестировать в Coreboot. Когда Dasharo вышел для MSI PRO Z690-A DDR4 более четырёх лет назад, у меня были проблемы с двумя установленными Radeon 5600XT, которые исправились после того, как разработчик подкрутил некоторые параметры, связанные с MMIO: https://github.com/Dasharo/dasharo-issues/issues/245
Сколько PCIe-коммутаторов можно выстроить в цепочку и сколько карт с абсурдными требованиями к MMIO можно заставить работать — это был бы интересный эксперимент.
За последнее десятилетие я видел множество проблем с MMIO, связанных с прошивкой. Помню, некоторые сетевые карты с поддержкой SR-IOV (обычно Intel, такие как i350 и другие корпоративные компоненты) не могли зарезервировать достаточно MMIO, чтобы создать все поддерживаемые виртуальные функции SR-IOV на потребительских материнских платах; во многих случаях SR-IOV удавалось запустить, но создавать можно было только около 4 VF, даже если аппаратно поддерживалось 16, потому что именно столько помещалось. По сути, это была проблема прошивки, а не аппаратного обеспечения, но мало у кого есть нужные навыки для модификации BIOS, чтобы исправить такие запутанные вещи, как распределение MMIO. По сути, вы пытаетесь обойти проблемы прошивки другими средствами.
- bombela
Слово или аббревиатура BAR упоминается 34 раза, но ни разу не расшифровывается.