Автор одержим задержками в играх на Linux и решил померить их «железно». Он спаял тестовый стенд на микроконтроллере Teensy: тот притворяется USB-мышью, а световой датчик на экране ловит вспышку от клика. Так он замерял click-to-photon latency на двух ПК с Nvidia Ada и Zen 4 под управлением NixOS и Windows 11.
Синтетические тесты на Chromium показали странное: десктоп почему-то тормозил на 3 мс больше, чем ноутбук, хотя железо и софт идентичны. Виновником оказался... редактор Zed. Просто открытое окно Zed в фоне добавляло задержку всем остальным приложениям в KDE Wayland, пока KWin не успевал обрабатывать запросы на отрисовку. В полноэкранных играх это не проявлялось.
Дальше он прогнал три игры. Doom Eternal (Vulkan) показал разницу только в «хвосте» задержек на Linux. Borderlands 3 (DX11 и DX12) — Windows стабильно быстрее, особенно с V-Sync, но флаг PROTON_ENABLE_WAYLAND=1 и принудительное ограничение FPS ниже частоты обновления ситуацию улучшали. Hades 2 (DX12) подтвердила тренд: лучшие настройки — wine_wayland, VKD3D_SWAPCHAIN_LATENCY_FRAMES=1 и VRR.
Тестирование игр по сети через Moonlight и USB/IP показало, что задержка ввода на Linux и Windows почти одинакова, если не считать энкодер. Но полный цикл Moonlight-Sunshine-Moonlight всё же чуть быстрее на Windows.
Главная находка — в недрах KWin. Композитор постоянно завышал время, нужное на композитинг. В коде был жёсткий запас в 1 мс на «неточность таймера», но Qt под Linux округлял длительности до миллисекунды. Автор переписал таймер на timerfd и добился точности в 51 микросекунду на p99. Плюс он нашёл «запас прочности» в DRM Commit thread (s_safetyMarginMinimum), который по умолчанию равен 1 мс — его можно было уменьшить до -150 микросекунд без сбоев на свежих драйверах Nvidia. И третий косяк: RenderJournal искусственно занижал предсказание времени рендера до 2 мс. Автор заменил эту константу на скользящий p95 из последних 512 кадров.
Результат патча: минимальная задержка input→present упала до ~3 мс (примерно как расчётная нижняя граница). Честность между клиентами вернулась — фоновые окна больше не крадут кадры. Выигрыш в оконных приложениях — существенный, в полноэкранных играх с V-Sync — около 1 мс. До полного паритета с Windows (разрыв ~4 мс) ещё далеко, но направление верное. Автор собирается отправить патчи в апстрим KWin.