Найти в Дзене
Games4Linux

Оптимизация Открытого Графического Драйвера Nouveau: Замена Интерфейса "ioctl"

После неожиданного ухода Бена Скеггса с поста главного разработчика ядра Nouveau в Red Hat, сообщество Linux было насторожено и озабочено дальнейшим развитием этого ключевого открытого графического драйвера для видеокарт NVIDIA. Однако, вместо того чтобы уйти в тень, Бен Скеггс продолжил свою миссию в развитии открытых графических технологий, присоединившись к NVIDIA.

Сразу после своего перехода, Бен начал активную работу над серией патчей для подсистемы DRM/Nouveau. Эта серия патчей представляет собой всестороннее усилие, направленное на упрощение интерфейса между NVKM и драйвером Nouveau DRM. Основная цель - заменить существующий интерфейс, напоминающий ioctl, более прямыми вызовами функций, тем самым уменьшив сложность и накладные расходы, связанные с цепочкой вызовов.

Ключевой момент в работе Бена Скеггса заключается в создании механизма, при котором NVKM возвращает структуры, содержащие информацию и указатели на функции, специфичные для каждого класса, а также непрозрачный указатель на его закрытые данные. Затем эти структуры используются в структурах NVIF для обеспечения прямых вызовов в реализацию без необходимости поиска дескрипторов или многократных уровней косвенности.

Перед тем как начать переносить классы в дереве объектов, Бен провел очистку некоторых интерфейсов внутри драйвера DRM и повторную реализацию подмножества интерфейсов ioctl, необходимых прямо пользовательскому пространству. Это позволило удалить неиспользуемые интерфейсы и аргументы функций, упрощая процесс переноса и подготавливая базу для реализации пользовательских объектов NVKM.

Серия патчей затем систематически прошла через каждый класс в дереве объектов, начиная с корня, и итеративно переносила конструкторы объектов, деструкторы, определения sclass/map и методы класса. В ходе этого процесса объекты оставались доступными через интерфейс ioctl до их окончательного использования, после чего они полностью удалялись из красно-черного дерева объектов.

Завершение серии патчей Бена Скеггса произошло с окончательной очисткой драйвера DRM, обеспечивая плавную интеграцию изменений и создавая основу для потенциальных будущих улучшений API и дальнейших очисток. Эти усилия представляют собой значительное улучшение эффективности и поддерживаемости подсистемы Nouveau DRM, а также продолжают подтверждать важность открытых графических технологий в индустрии.

Подробнее по ссылке: https://lore.kernel.org/nouveau/CAPM=9tyW=YuDQrRwrYK_ayuvEnp+9irTuze=MP-zkowm3CFJ9A@mail.gmail.com/T/