Введение в мир открытых графических драйверов Linux

Пока рынок обсуждает баснословные ценники на новые флагманы, миллионы игроков продолжают запускать любимые тайтлы на проверенных временем народных видеокартах вроде Radeon RX 480. Но выбросить старое железо на свалку истории вам не дадут: прямо сейчас энтузиасты и гиганты индустрии совершают технологический прорыв, благодаря которому старые GPU получают мощный прирост производительности на ровном месте. (Правда, признайтесь, вы ведь тоже храните в шкафу старую видеокарту со словами «а вдруг еще пригодится для домашнего сервера»?). Операционная система Linux за последние годы прошла колоссальный путь в сфере гейминга. Во многом этот прорыв стал возможным благодаря инициативам компании Valve, которая активно инвестирует в развитие экосистемы открытого ПО. Выпуск портативной консоли Steam Deck и разработка слоя совместимости Proton потребовали от инженеров титанических усилий по оптимизации графического стека.

Особое внимание в сообществе привлекает работа независимого инженера Тимура Кристофа (Timur Kristóf), сотрудничающего с Valve. Его деятельность сосредоточена на улучшении поддержки графических процессоров AMD в драйверах с открытым исходным кодом. И хотя флагманские видеокарты получают максимум внимания рынка, энтузиасты старого «железа» и владельцы бюджетных систем получают не меньше пользы: оптимизации затрагивают и проверенные временем архитектуры.

В этой статье мы подробно разберем ключевые достижения разработчиков, затронем архитектурные особенности Mesa, LLVM и ядра Linux, а также поговорим о том, как эти наработки повышают производительность устаревших GPU.

Анатомия графического стека: роль Valve и Тимура Кристофа в Mesa и AMDGPU

Прежде чем старый графический чип научится играючи справляться с современными инди-хитами и требовательными портами, его нужно провести через сложнейшую цепочку открытого софта. Когда речь заходит об открытых драйверах AMD для Linux, мы имеем дело со сложной экосистемой, состоящей из трех ключевых уровней:

  • Ядро Linux (модуль amdgpu): отвечает за управление питанием, планирование задач и прямое взаимодействие с железом.
  • Компилятор шейдеров (LLVM / ACO): переводит высокоуровневый код шейдеров в машинный код видеокарты.
  • Проект Mesa (RadeonSI и RADV): реализации OpenGL и Vulkan соответственно.

Тимур Кристоф внес значительный вклад в улучшение драйвера RADV (Vulkan) и оптимизацию компиляции шейдеров. Для конечных пользователей это означает не просто формальный рост среднего FPS, а кардинальное снижение микрофризов, вызванных компиляцией шейдеров «на лету» в современных играх под Proton.

Оптимизация старых архитектур: вторая жизнь серии GCN

Представьте типичный сценарий: вы берете системник пятилетней давности с видавшей виды видеокартой на борту, накатываете свежий дистрибутив Linux и запускаете киберспортивную сессию. Раньше на этом моменте начинались просадки и капризы железа, но сегодня ситуация в корне меняется. Архитектура Graphics Core Next (GCN), представленная AMD больше десятилетия назад, до сих пор используется миллионами игроков (работает — не трогай, классика DevOps). Видеокарты серий Radeon HD 7000, RX 200, RX 300 и RX 400 (например, легендарная RX 480 на 8 ГБ) верой и правдой служат владельцам бюджетных ПК. Однако с переходом индустрии на Vulkan и DirectX 12 старые чипы начали проседать по производительности не из-за слабого кремния, а из-за ограничений старых драйверов.

Благодаря патчам Кристофа для RADV, старые поколения GCN получили улучшенную поддержку новых инструкций и оптимизацию работы с памятью. Это позволило запускать проекты, которые раньше отказывались работать из-за отсутствия необходимых аппаратных фич на уровне Vulkan API.

Пример работы с профилированием шейдеров

Для отладки и замера производительности таких видеокарт разработчики активно используют утилиты вроде RADV_DEBUG. Пример запуска игры с принудительным логированием компиляции:

RADV_DEBUG=zerovram