В мире современных графических вычислений и драйверов для GPU происходят значительные изменения, причем одним из наиболее примечательных проектов последних лет стал Tyr — Rust базированный DRM драйвер для CSF-ориентированных Arm Mali GPU. Этот драйвер является результатом совместной работы ведущих технологических компаний, таких как Collabora, Arm и Google, и представляет собой новый шаг в эволюции программного обеспечения ядра Linux в области графики. Основная идея проекта — обеспечить безопасную, эффективную и удобную платформу для управления GPU Mali, используя преимущества современного языка программирования Rust. Исторически драйвер Panthor на языке C был основным решением для поддержки CSF-ориентированных Arm Mali GPU. Он зарекомендовал себя как надежный и зрелый продукт, широко используемый в экосистеме.
Однако, Panthor, как и многие другие драйверы, написанные на C, подвержен потенциальным ошибкам, связанным с управлением памятью и безопасностью, что свойственно низкоуровневым языкам без встроенных механизмов защиты. Именно ради повышения устойчивости к ошибкам и обеспечения более высокого уровня безопасности и надежности было принято решение о разработке новой версии драйвера — Tyr — на языке Rust. Rust известен как язык программирования, обеспечивающий безопасность памяти на этапе компиляции без необходимости использования сборщика мусора, что делает его идеальным кандидатом для написания системного ПО, особенно такого критичного, как драйверы устройств в ядре операционной системы. Внедрение Rust в ядро Linux уже набирает обороты благодаря инициативе Rust-for-Linux, и Tyr стал одним из первых реальных тестовых кейсов инноваций, демонстрируя возможности языка в высоконагруженных и чувствительных к стабильности средах. На данный момент Tyr находится на ранней стадии разработки, но уже достиг значительного прогресса.
Важной вехой стало добавление возможности запуска GPU и начального опроса устройства на платформе RK3588. Это позволяет читать данные из нескольких областей ROM графического процессора и предоставлять их пользователям через специальный вызов DRM_IOCTL_PANTHOR_DEV_QUERY. Несмотря на то, что полноценная работа с микроконтроллером GPU (MCU), являющимся центральным компонентом архитектуры Arm Mali, пока не реализована, такой прогресс свидетельствует о движении в правильном направлении. Одним из ключевых аспектов разработки Tyr является желание сделать новый драйвер совместимым с существующим API, используемым Panthor, чтобы обеспечить плавный переход и возможность бесшовной замены без нарушения работы верхнего пользовательского программного обеспечения. Vulkan драйвер PanVK, обеспечивающий поддержку Vulkan для Mali GPU, останется совместимым, что значительно облегчит применение Tyr в различных системах.
Почему же Rust, а не продолжать работу с зрелым кодом Panthor на C? Многие могут задаться этим вопросом, учитывая объем и стабильность существующего драйвера. Ответ кроется в фундаментальных преимуществах, которые предоставляет Rust. Во-первых, Rust значительно снижает вероятность ошибок, связанных с некорректным управлением памятью, что традиционно привело к многочисленным уязвимостям в коде на C. Во-вторых, язык предлагает мощные средства, позволяющие более четко выражать архитектуру программы и жизненные циклы ресурсов, что облегчает сопровождение и развитие кода на длительные сроки. В-третьих, внедрение Rust расширяет круг разработчиков и способствует более инклюзивному сообществу, поскольку многие современные инженеры предпочитают работать с языками, обеспечивающими безопасность и понятную архитектуру.
Разработка Tyr ведется с учетом того, что Panthor продолжит существовать и поддерживаться еще длительное время. Это связано с тем, что у Panthor большая база пользователей и значительный объем аппаратных вариантов, которые необходимо поддерживать. Тем не менее, Tyr — это инвестиция в будущее: проект создается с учетом возможности более высокой адаптивности, удобства сопровождения и расширения функциональности, что нельзя обеспечить столь же эффективно на языке C. Этот подход гарантирует, что драйверы ARM Mali GPU останутся актуальными и конкурентоспособными в течение многих лет. Инфраструктурные изменения, необходимые для поддержки таких драйверов, также немаловажны.
Исходная базовая платформа ядра Linux нуждается в изменениях для полноценной поддержки разработок на Rust, особенно в критичных подсистемах, таких как DRM (Direct Rendering Manager). Tyr демонстрирует эти изменения, выступая реальным примером и поощряя коммьюнити к развитию необходимых абстракций, интерфейсов и средств отладки. Создание реальных драйверов, использующих эти абстракции, мотивирует более широкое и плотное сотрудничество между разработчиками ядра и вспомогательными сообществами. При открытом и итеративном подходе разработки Tyr регулярно публикуются обновления, а команда делает упор на постепенное включение функционала в основной поток разработки ядра Linux (upstream). Такая стратегия направлена на избегание расхождения кода и потери синергии с другими проектами, такими как Nova (драйвер для GSP-ориентированных NVIDIA GPU) и Rvkms (Rust драйвер для виртуальных GPU).
Вебинары, серии блогов и подробные объяснения внутренностей драйвера помогают сообществу лучше понимать и принимать нововведения, снижая барьеры для внедрения Rust в ядро Linux. Одним из вызовов для Tyr является сложность поддержки центрального микроконтроллера (MCU) в архитектуре Arm Mali, который управляет большим количеством задач GPU и часто требует низкоуровневого программирования. Без должной поддержки MCU невозможно раскрыть весь потенциал GPU, и именно над этим сейчас работает команда Tyr. Разработка необходимых компонентов требует глубокого понимания архитектуры и тесного сотрудничества с производителем оборудования — Arm. Такой подход позволяет создавать драйвер, максимально соответствующий текущим и будущим аппаратным требованиям.
Преимуществом Tyr также станет возможность для организации кода и архитектуры драйвера в том виде, который учитывает современные требования к безопасности, расширяемости и надежности. В Rust легко реализовывать безопасные паттерны параллелизма и уменьшать ошибки гонок, что критично для высокопроизводительных многопоточных графических драйверов. Кроме того, язык позволяет создавать более понятный и поддерживаемый код, что важно в условиях постоянно изменяющейся аппаратной базы. Коллаборация Collabora, Arm и Google обеспечивает высокий уровень экспертизы и ресурсов, необходимых для развития Tyr. Помимо технической реализации драйвера, эта команда способствует формированию новых стандартов разработки GPU-драйверов, интеграции Rust в ядро Linux и расширению сообщества разработчиков новых поколений.
Такой консорциум дает уверенность в том, что Tyr не останется экспериментальным проектом, а станет значимым элементом драйверного стека Linux на долгие годы. Нельзя не отметить и образовательную составляющую инициативы Tyr. Ведется активная серия публикаций, из которых специалисты смогут разобраться в базовых принципах работы GPU-драйверов, особенностях архитектуры CSF Arm Mali и подходах программирования с использованием Rust. Для желающих доступны рекомендации по подготовке и запуску примеров, что помогает быстрее вникнуть в сложные темы и способствует расширению экспертизы. В контексте общего развития экосистемы драйверов для видеоускорения решение о переносе ядра драйвера на Rust резонирует с глобальной тенденцией повышения безопасности и структурированности системного программного обеспечения.