Открытый графический стек для NVIDIA продолжает своё сложное, но поступательное развитие. После того как в ядро Linux 6.19 была добавлена поддержка больших страниц памяти (large pages) в драйвере Nouveau, команда Mesa начала готовить её использование в драйвере NVK (Vulkan) для повышения производительности через сжатие текстур. Однако недавно оптимизацию пришлось временно откатить: в тестах Vulkan Conformance Test Suite (CTS) стали возникать ошибки MMU (Memory Management Unit). Разработчики нашли корень проблемы и уже предложили патч.
В чём была проблема?
После активации поддержки больших страниц (64 КБ вместо стандартных 4 КБ) в пользовательских тестах начали появляться сообщения о сбоях доступа к памяти (fault reports), хотя адрес был корректным.- Гонка условий (Race Condition): Оказалось, существует редкий сценарий «гонки» при переходе адресного пространства с 64КБ страницы обратно на 4КБ страницы. Процессы разметки (mapping) и освобождения (unmapping/unref) страниц могли конфликтовать во времени.
- Повреждение записей: Процедура освобождения 4КБ страниц могла некорректно помечать запись в таблице больших страниц (LPTE) как недействительную, даже если в это время туда уже была записана валидная 64КБ страница. Это приводило к «странному поведению» и падениям.
Исправление уже в пути
Разработчик Дэвид Эрли (David Airlie) оперативно подготовил патч для драйвера Nouveau, который решает проблему.- Суть исправления: Патч вводит дополнительное отслеживание (tracking) для записей LPTE. Теперь система будет «знать», была ли на запись ссылка (reference) после того, как она стала валидной, и не будет её бездумно сбрасывать.
- Масштаб изменений: Для корректного учёта в условиях, когда освобождение памяти может задерживаться, механизм отслеживания был расширен до 32 бит.
Что дальше? Временное отключение и перспективы
Пока патч не попадёт в основное ядро, поддержка больших страниц в пользовательской части (драйвер NVK в Mesa) будет отключена. Это — стандартная и правильная практика: лучше временно отключить функцию, чем оставлять систему нестабильной.- Сроки интеграции: С выпуском Linux 6.19 через полторы недели, маловероятно, что патч успеют включить именно в этот релиз. Однако, как отмечено в коммите, исправление уже помечено для обратного портирования (back-porting) в стабильные ветки ядра, как только оно попадёт в основную линию (mainline). Это значит, что пользователям не придётся ждать выхода Linux 6.20.
- Значение для пользователей: Эта история — отличный пример зрелости процесса разработки открытого стека. Функция была протестирована, ошибка обнаружена, исправление разработано и будет развёрнуто. Как только патч будет принят, поддержка больших страниц (а с ней и потенциальный прирост производительности за счёт сжатия) вернётся в NVK, делая открытый драйвер ещё более конкурентоспособным.
Оригинальный патч Дэвида Эрли можно найти в рассылке разработчиков Nouveau. Ждём его скорейшего принятия!