Запуск Windows VM под Linux в окне с нативной производительностью

ddtm7oum7iqhtz0bjbm0_7b65io.jpeg
Looking Glass на домашнем компьютере разработчика

У многих пользователей под Linux иногда возникает необходимость запустить ОС Windows. Например, для некоторых нативных приложений или игр. Windows можно запустить обычной в виртуальной машине, но за это приходится платить производительностью.

Разработчик по имени Джеффри МакРэй (gnif) не готов с этим мириться — и поэтому вместе с несколькими единомышленниками несколько лет назад создал приложение Looking Glass для запуска Windows VM под Linux в окне с нативной производительностью. 17 июля 2021 года вышла четвёртая стабильная версия хоста (B4). Если вкратце, Looking Glass позволяет использовать KVM (Kernel-based Virtual Machine), настроенный на сквозной проход сигнала VGA PCI (GPU passthrough) без подключённого физического монитора, клавиатуры или мыши.
Программа Looking Glass предназначена для использование на локальном компьютере с минимальной задержкой, программа не предназначена для потоковой передачи по сети, а скорее через блок общей памяти. В текущих тестах на частоте монитора 60 Гц можно получить в гостевой системе задержку 16 или менее миллисекунд. Если пользователь не заботится о VSYNC, её можно уменьшить до нескольких (!) миллисекунд.

В данном случае в роли «Windows host application» выступает дисплейный сервер, который работает в гостевой виртуальной машине. Единственное, что должно быть запущено в ОС Linux — это приложение looking-glass-client, вот инструкция по установке клиента.

Здесь инструкции по сборке хоста. Как вариант, можно скачать собранный бинарник.

Хост захватывает кадры с гостевой ОС через API, и отправляет их клиенту. Хост может быть на гипервизоре или другой виртуальной машине. Кадры отправляются по протоколу с низкой задержкой через общую память.

Через виртуальное устройство IVSHMEM захватывает кадры, а также форму курсора и события движения мыши, передавая их обратно клиенту для рендеринга. Фактически курсор заново рендерится на стороне клиента, независимо от захвата кадров.

В отличие от сетевых потоковых приложений, Looking Glass не использует никаких форм сжатия или преобразования цветового пространства, все кадры передаются клиентскому приложению в 32-битном RGBA без каких-либо преобразований или модификаций. Это возможно благодаря использованию разделяемого сегмента памяти, который обеспечивает высокую пропускную способность при низкой задержке обмена данными между гостем и хостом.

На данный момент система загружает Windows 10 с любой видеокартой, поддерживающей DXGI Desktop Duplication или NVIDIA Capture API (только профессиональные карты, такие как Quadro).

На самом деле почти все современные видеокарты поддерживают DXGI. Это можно проверить через DxDiag, проверив наличие поддержки WDDM 1.2 или выше.

Видеопоток Looking Glass можно добавить как видеоисточник OBS через плагин OBS, который действует как другой клиент Looking Glass. Инструкции по установке см. здесь.

image-loader.svg

Looking Glass не поддерживает маршрутизацию аудио. Предпочтительным решением является передача звука через QEMU в аудиосистему хоста. Другим популярным решением является использование Scream, виртуальной звуковой карты, которая передаёт звук по сети. Руководство по настройке scream см. здесь.

Программа выпущена под лицензией GPL 2.0, исходный код открыт.


Поговорить с разработчиком можно в канале Discord.

P.S. По отзывам пользователей, первоначально настроить виртуальную машину сложновато, но потом всё действительно работает с нативной производительностью (разница не более 5%) без сбоев, включая Windows Update, обновления драйверов, почти все онлайновые игры и т. д. В виртуальной машине нормально работают античиты PUBG, Battlefield ⅓/4/5, Titanfall 1&2, Arma 3, 7 Days to Die, Ark, Fortnite, Apex, Halo: The Master Chief Collection, Star Wars Squadrons и др.

© Habrahabr.ru