В рамках дискуссий, прошедших на конференции Linux Plumbers в прошлом году, было предложено внедрить в ядро Linux драйвер синхронизации Windows NT. Этот драйвер предоставит новое символьное устройство /dev/ntsync, которое позволит реализовать некоторые примитивы синхронизации Windows NT непосредственно в ядре Linux. Это, в свою очередь, улучшит производительность некоторых игр и приложений Windows, запущенных на Linux через Wine, и в некоторых случаях может значительно повысить производительность.
Повышение производительности
- Предложенный драйвер синхронизации направлен на устранение проблем, связанных с использованием RPC (удаленного вызова процедур) в проекте Wine, который эмулирует Windows API в пользовательском пространстве.
- Примитивы синхронизации NT слишком сложны для реализации на основе существующих примитивов без ущерба для корректности. Некоторые операции, такие как NtPulseEvent() или режим "ожидания всех" в NtWaitForMultipleObjects(), требуют прямого контроля над базовой очередью ожидания.
Элизабет Фигура из CodeWeavers, опубликовавшая «запрос на комментарии» (RFC) в различных списках рассылки ядра Linux, объяснила мотивы использования этого драйвера синхронизации:
«Проект Wine эмулирует Windows API в пользовательском пространстве. Одна конкретная часть этого API, а именно примитивы синхронизации NT, исторически реализовывалась через RPC для выделенного процесса «ядра». Однако более поздние приложения используют эти API более интенсивно, и накладные расходы RPC стали проблемным местом.
API-интерфейсы синхронизации NT слишком сложны, чтобы их можно было реализовать поверх существующих примитивов без ущерба для корректности. Некоторые операции, такие как NtPulseEvent() или режим «ожидания всех» NtWaitForMultipleObjects(), требуют прямого контроля над базовой очередью ожидания, и реализация очереди ожидания, достаточно устойчивой для Wine, в пользовательском пространстве невозможна. Таким образом, предлагаемый драйвер реализует интерфейсы непосредственно в ядре Linux».
Предложенные изменения
- Первоначальный предложенный набор патчей состоит из 32 патчей, из которых 17 относятся к реализации.
- С патчами драйвера ядра "NTSYNC" наблюдаются улучшения производительности различных игр на Wine от 21% для Metro 2033 до 678% для DiRT 3! Обычно это помогает играм улучшить производительность более чем на 100%.
Предложенная концепция синхронизации является не совсем новой концепцией, поскольку еще несколько лет назад разработчики Wine искали новый API синхронизации ядра Linux, который был бы лучше, чем esync/fsync, чтобы справиться с потребностями API объектов синхронизации Windows NT.
Влияние на пользователей Linux и Wine
Это предложение может значительно улучшить производительность приложений Windows, запущенных на Linux через Wine, особенно для игр и программ, которые интенсивно используют примитивы синхронизации NT. Однако, поскольку этот ряд патчей помечен как "RFC" (запрос на комментарии) и имеет некоторые открытые элементы дизайна, может потребоваться несколько ревизий, прежде чем он будет принят в основную ветку ядра Linux.
Linux: обзоры и обновления
• Wine 10.0-rc3: Исправлена 16-летняя ошибка многопоточности в играх World of Warcraft и Starcraft 2
• DXVK 2.5.2: Исправления для Alpha Protocol, The Sims 2, Borderlands 2 и других игр на Linux и Steam Deck
• OpenSUSE представляет YQPkg - новый графический менеджер пакетов на базе Qt
• Обновление Proton Experimental: Исправления для Final Fantasy XIV, Nioh и других игр на Steam Deck и Linux
• Обновления Linux за неделю: 9 – 15 декабря 2024 года
• Lenovo может представить портативное устройство Legion Go S на базе SteamOS