Linux не смог разложить четыре 32-гигабайтных BAR за PCIe-коммутатором — и это починили модулем ядра

Fitting Four 32 GB Resizable Bars Behind a PCIe Switch on Linux

Linux не смог разложить четыре 32-гигабайтных BAR за PCIe-коммутатором — и это починили модулем ядра

Автор собрал в одном слоте 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 ГБ/с.
  1. dougcalobrisi

    Это мой пост. В общем, мне нужен был P2P между четырьмя R9700 для tensor parallel serving, а это значит, что на каждой карте нужен 32-гигабайтный BAR. Когда все шесть GPU были установлены, BIOS не смог их разложить, а Linux выделил окно коммутатора слишком маленьким, поэтому свои BAR получили только две карты. Модуль из поста обходит эту проблему. С выключенным P2P prefill был примерно вдвое медленнее.

  2. 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. По сути, вы пытаетесь обойти проблемы прошивки другими средствами.

  3. bombela

    Слово или аббревиатура BAR упоминается 34 раза, но ни разу не расшифровывается.

Ещё за этот день

2026-11-12