Разработчик KDE Ксавер Хугль (Xaver Hugl) представил решение, устраняющее высокую нагрузку на процессор при работе приложений с программной отрисовкой в окружении Wayland. Ключевая проблема заключалась в обработке буферов протокола wl_shm, который применяется приложениями с рендерингом на центральном процессоре (например, программами на базе QtWidgets). Telegram-канал создателя Трешбокса про технологии
Данные из общей памяти, поступавшие в композитный менеджер KWin, не могли быть напрямую переданы графическому процессору. На дисплеях с высоким разрешением это приводило к задержкам. Сам Хугл отмечал, что на ноутбуке с Ryzen 7840U курсор заметно «заикался» при наведении на файлы в KDevelop, а в энергосберегающем режиме работа системы воспринималась как замедленная.
Первоначальная попытка задействовать расширение Vulkan VK_EXT_external_memory_host не увенчалась успехом: из-за ограничений безопасности в драйверах AMD оно оказалось несовместимо с файловыми дескрипторами wl_shm. Решение было найдено в драйвере UDMABUF, который позволяет преобразовывать обычную память в объект DMA-BUF, доступный видеоадаптеру. Благодаря этому KWin получает возможность напрямую передавать разделяемый буфер в Vulkan, полностью устраняя избыточные копирования при соблюдении требований к выравниванию.
Результаты измерений в KWin при скроллинге в KDevelop выглядят следующим образом: до оптимизации одно ядро процессора загружалось на 80–90 %, после — примерно на 20 %. Движение курсора стало стабильно плавным во всех режимах. Примечательно, что для реализации улучшений на стороне Qt потребовалось добавить всего 18 строк кода.
Оптимизация войдёт в состав KDE Plasma 6.7 и фреймворка Qt 6.11.2. Разработчик также призывал авторов других тулкитов, в частности GTK, внедрить аналогичные изменения, что позволит дополнительно повысить плавность интерфейса и снизить энергопотребление на портативных устройствах.
Источник: trashbox.ru