В нативных Half-Life 2 и Left 4 Dead 2 (Steam, 32-битный OpenGL, слой ToGL) на RX 9070 XT FPS падает до ~5 в сценах с большим числом объектов (много draw call'ов). В сценах с небом или пустым пространством FPS нормальный. Через Proton (DXVK/Vulkan, RADV) проблемы нет. На Fedora 44 на том же ПК (Mesa 26.2.3) проблемы нет. В Flatpak Steam (runtime org.freedesktop.Platform 26.08, Mesa 26.2.2) на том же ПК с ALT HL2 работает в несколько раз быстрее и плавнее. Значит, регрессия или проблема именно в сборке Mesa 26.1.8 из p11 (32-битный radeonsi/OpenGL), а не в железе, ядре, звуке, диске или кодеках. ## Окружение - ALT Workstation K 11.4 (Nemorosa), ядро 6.18.52-6.18-alt1, KDE Plasma, сессия Wayland (игры через XWayland) - CPU: 16 потоков, 31 ГБ ОЗУ - GPU: AMD Radeon RX 9070 XT (gfx1201, RDNA4), драйвер amdgpu - Mesa 26.1.8-alt1 (mesa-dri-drivers, libGLX-mesa, i586-libGLX-mesa, i586-libEGL-mesa), LLVM 21.1.5 - Steam: i586-steam 1.0.0.87-alt3, игры запускаются в Steam Linux Runtime - gamemode 1.8.2, mangohud 0.7.2 (на результат не влияют) ## Шаги воспроизведения 1. Установить Steam и Half-Life 2 (или Left 4 Dead 2), запустить нативную версию (не Proton). 2. Параметры запуска: `+fps_max 180`. 3. Загрузить уровень и посмотреть на место с большим числом объектов в кадре. ## Фактический результат FPS около 5. Ни CPU в целом (около 7 %), ни GPU (9–26 %, частота ядра прыгает 0–1660 МГц) не загружены. ## Ожидаемый результат Плавный FPS, как в Mesa 26.2.x / Fedora 44. ## Диагностика - Мониторинг потоков процесса `hl2_linux`: поток **`gl0`** (рабочий поток glthread драйвера Mesa) занят на 66–94 %, в худших сценах почти упирается в 100 %. Рядом `MatQueue0` на 40–60 %. GPU простаивает, ждёт команд. Общая загрузка CPU мала, потому что узкое место — один поток. - `mesa_glthread=false` делает хуже, `mesa_glthread=true` лучше, но проблема остаётся. - Не помогают: `MESA_NO_ERROR=1`, отключение шейдерного кэша, `-vulkan`, переход на X11-сессию, отключение gamemode/mangohud. - Исключены: звук, диск (iowait 0 %), media-кодеки (openh264). - Признаков отладочной сборки (assertions) в libgallium не найдено. ## Что хотелось бы Обновить Mesa в p11 до 26.2.x (в Sisyphus уже 26.2.4-alt1), либо найти и бэкпортировать исправление, устраняющее эту регрессию в 32-битном OpenGL-пути radeonsi. Если нужны логи, `perf`/gdb-трассы потока gl0 или проверка конкретных патчей, готов протестировать.
Скорее всего, та же причина, что и в https://bugzilla.altlinux.org/60851
## Итог проверки: Doom Eternal исправлен в задаче 435943, просадки HL2 остались (нужна Mesa 26.2.x) Проверил предположение о том, что проблема связана с игрой, и тестовую сборку из задачи 435943. Получилось две отдельные проблемы. ### 1. Вылет Doom Eternal (Vulkan, Proton 11.0): причина найдена и исправлена в alt2 На Mesa 26.1.8-alt1 игра закрывалась сама через несколько секунд-минут после старта. Перед вылетом в консоли Steam было: ``` ../src/vulkan/runtime/vk_buffer.h:90: vk_buffer_range: Assertion `range + offset <= buffer->size' failed. ``` Сообщений ядра нет (нет сброса GPU, нет OOM), память в норме (VRAM ~9,4 из 16 ГБ, свободной RAM ~21 ГБ). Строка условия присутствовала в бинарниках, то есть пакет был собран с включёнными assert: ``` grep -a -c "range + offset <= buffer->size" /usr/lib64/libvulkan_radeon.so -> 1 grep -a -c "range + offset <= buffer->size" /usr/lib/libvulkan_radeon.so -> 1 (i586) ``` Установил пакеты из задачи 435943 (Mesa 26.1.8-alt2: `mesa-dri-drivers`, `libEGL-mesa`, `libGLX-mesa`, `libgbm`, `xorg-dri-*` и их i586-версии). Результат: - строки с assert в `libvulkan_radeon.so` больше нет (`0` и для x86_64, и для i586); - Doom Eternal отработал около двух минут без вылета и без ассерта в консоли, закрыт мной вручную. То есть alt2 устраняет вылет Doom Eternal. ### 2. Просадки FPS в нативных HL2 / L4D2 (OpenGL, 32-битные): в alt2 НЕ исправлены На Mesa 26.1.8-alt2 (в том числе i586) HL2 по-прежнему падает до ~5 FPS в сценах с большим числом объектов. Значит, проблема не связана с assert (видимо и не связана с debug, не известно отключен он в сборке или нет). Вывод: регрессия или проблема именно в серии Mesa 26.1.x (32-битный OpenGL/radeonsi на RDNA4), в 26.2.x её нет. ### Окружение - ALT Workstation K 11.4 (Nemorosa), ядро 6.18.52-6.18-alt1, KDE Plasma (Wayland) - AMD Radeon RX 9070 XT (RDNA4, gfx1201), 31 ГБ ОЗУ - Mesa 26.1.8-alt1 -> 26.1.8-alt2 (задача 435943), LLVM 21.1.5 - Откат до Mesa 26.1.8-alt1 выполнил после теста с Doom: Ethernal PS: Готов протестировать и предоставить нужные логи :)
## Итог: просадки HL2 вызваны не Mesa, а i586-`memcpy` в 32-битной glibc; вылет Doom Eternal исправлен в Mesa 26.1.8-alt2 Дополняю предыдущий комментарий (Doom Eternal с alt2). После дальнейшей проверки картина такая: ### 1. Doom Eternal (Vulkan, Proton): исправлено Вылет с `vk_buffer_range: Assertion 'range + offset <= buffer->size' failed` происходил из-за включённых assert в сборке alt1. В сборке alt2 (задача 435943) используется `-Db_ndebug=true` (видно в логе сборки); игра работает без вылета. По этому пункту Mesa больше ничего не требуется. Для справки: проверка наличия строки условия assert в `libvulkan_radeon.so`: | Сборка | `grep -a -c "range + offset <= buffer->size" libvulkan_radeon.so` | | ALT p11, Mesa 26.1.8-alt1 | **1** (assert включён) | | ALT p11, Mesa 26.1.8-alt2 / 26.2.4-alt2 | 0 | | Fedora 44, Mesa 26.2.3 (x86_64 и i686) | 0 | | Flatpak runtime freedesktop 26.08, Mesa 26.2.2 | 0 | То есть другие дистрибутивы собирают Mesa без assert; alt2 приведён к тому же виду. ### 2. Просадки FPS в нативном HL2 (OpenGL, 32-бит): к Mesa не относятся Я ранее считал причиной Mesa. Это неверно, прошу не учитывать мои прежние предположения про Mesa 26.1.x и «нужно обновление до 26.2.x»: - Mesa 26.2.4-alt2 (задача 435925) просадок не убрала (20–30 FPS остались), как и 26.1.8-alt1/alt2. - На том же ПК и ядре ALT: Flatpak Steam и контейнер Fedora 44 дают стабильные 180 FPS. - Профиль потоков (gdb, 600 снимков) в «плохом» месте: на ALT поток драйвера `gl0` проводит 68–83 % времени в одной инструкции `libc.so.6` = `memcpy+0x2c`, код Mesa занимает 2–3 %; в Fedora `memcpy` в профиле отсутствует. - Подмена только `memcpy`/`memmove` через `LD_PRELOAD` убирает просадки полностью (FPS как в Fedora) на неизменённой Mesa 26.1.8-alt1. Причина — реализация `memcpy` в `i586-glibc-core-2.38.0.223.f053ff-alt1.p11.1` (классический код для Pentium, читающий приёмник; в этом libc `memcpy/memmove/memset/strlen` — обычные `FUNC`, а не `IFUNC`, как в Fedora и Flatpak). Подробности вынесены в *отдельный баг на пакет glibc-core* (https://bugzilla.altlinux.org/60883). ### Что требуется от Mesa Ничего. По Doom Eternal исправлено, проблема в сущестововании assert и фикс есть в alt2, а вот проблема FPS в HL2 относится к glibc. Спасибо за помощь.