Одной из замечательных новых возможностей Linux 6.14 является драйвер NTSYNC, который был доработан для лучшей эмуляции примитивов синхронизации Microsoft Windows NT, чтобы такие программы, как Wine и Proton (Steam Play), могли обеспечить лучшую производительность при запуске игр Windows на Linux. Но, как оказалось, из-за недосмотра до сих пор на практике он не слишком пригоден для использования из коробки.
В чем проблема NTSYNC
Проблема с правами доступа привела к тому, что драйвер NTSYNC по умолчанию не раскрывает пользователям свое устройство /dev/ntsync char для чтения/записи. В результате NTSYNC из коробки не может быть сразу использован, если только вручную не изменить права на устройство NTSYNC или не иметь скрипт udev или аналогичный для внесения изменений, чтобы пользователи, не являющиеся root, могли читать/писать и взаимодействовать с этим программным устройством.
Был опубликован запрос на внесение изменений в systemd для udev, чтобы добавить группу устройств NTSYNC и права доступа. Но этот запрос был отклонён как более подходящий для ядра upstream. Были подняты вопросы о возможности записи и чтения, что должно быть нормально, поскольку это не настоящее аппаратное устройство, и для каждого файлового дескриптора, открытого на устройстве, только объекты, созданные этим экземпляром, могут быть использованы с другими объектами этого же экземпляра.
В списке рассылки ядра Linux был опубликован патч для драйвера ядра NTSYNC, устанавливающий разрешения устройства /dev/ntsync на 0666 по умолчанию, так что оно будет работать по умолчанию для процессов, не являющихся корневыми.
На что Грег Кроа-Хартман немедленно прокомментировал:
«Вы уверены, что вам это нужно? Если да, то почему? Как существующее тестирование не обнаружило этого?».
В свою очередь Элизабет Фигура прокомментировала:
«Привет, извините, это, конечно, моя ошибка.
Нам действительно нужно, чтобы /dev/ntsync можно было открыть из пространства пользователя, чтобы это было полезно. Я не уверена, какие самые «правильные» разрешения должны быть в этом случае (когда нам не требуется чтение или запись), но я не думаю, что вижу причину не установить 666 или 444.
Изначально я предполагала, что правильный способ сделать это — установить режим не в файле ядра, а через udev; я полагаю, что использовал код для /dev/loop-control или /dev/fuse в качестве примера, которые оба делают это. Поэтому я (и другие участники тестирования) просто вручную настроила правила udev для этого, намереваясь в конечном итоге добавить правило по умолчанию в systemd, как и другие. Я только недавно поняла, что сделать что-то вроде этого патча возможно и прецедентно.
Я не знаю, какой способ решения этой проблемы лучше, но этот, безусловно, самый простой».
В свою очередь Грег готов принять подписанный патч, вносящий это изменение по умолчанию в драйвер NTSYNC. Так что если все пойдет хорошо, то, скорее всего, в ближайшие дни мы увидим, как драйвер NTSYNC будет адаптирован в Linux 6.14 Git для более открытых разрешений чтения/записи по умолчанию, так что он будет доступен из коробки для геймеров Linux.
Поддержка NTSYNC в WINE
Еще одним препятствием для немедленного использования драйвера NTSYNC является запрос на слияние Wine, над которым все еще работают для использования этого нового драйвера ядра.
Теперь, когда полнофункциональный драйвер NTSYNC готов для Linux 6.14 для лучшей эмуляции примитивов синхронизации Windows NT в Linux, был открыт запрос на слияние, чтобы апстримовый Wine запустил интеграцию NTSYNC на своей стороне для внутрипроцессной синхронизации.
Элизабет Фигура из CodeWeavers, возглавлявшая работу над драйвером ядра NTSYNC, сегодня открыла запрос на слияние для поддержки в Wine использования драйвера ядра NTSYNC Linux для синхронизации внутри процесса.
В своем запросе на слияние Figura прокомментировала интеграцию NTSYNC следующим образом:
«Это обеспечивает более быструю реализацию сигнальных и ждущих операций над событиями NT, семафорами и мьютексами, что повышает производительность до «родного» уровня для широкого спектра игр и других приложений».
Цель аналогична давно существующим внедеревовым наборам патчей «esync» и «fsync», но без тех недостатков, из-за которых эти наборы патчей не могут быть использованы в upstream.
Драйвер Linux «ntsync» в настоящее время не выпущен. Он был принят в дерево Linux для версии 6.14, так что, если не возникнет никаких чрезвычайных обстоятельств, API будет заморожен, и он будет выпущен в текущей форме этой весной. Поскольку он прошел всех соответствующих рецензентов со стороны ядра, а API уже выпущен, похоже, больше нет причин не представлять Wine
на согласование».
Очень жаль, что драйвер NTSYNC не был завершен для Linux v6.13, так как интеграция с Wine пропустила недавний стабильный релиз Wine 10.0, в котором функции были отключены в начале декабря. Но, по крайней мере, эта интеграция, как мы надеемся, скоро появится в Wine, чтобы облегчить тем, кто раз в две недели выпускает релизы разработки Wine, возможность опробовать поддержку NTSYNC при использовании Linux 6.14 Git. Аналогично, NTSYNC, предположительно, скоро будет готов к работе в будущем обновлении Valve Steam Play (Proton).
Этот запрос на слияние — место, где код интеграции с Wine ожидает рассмотрения. Он состоит из двух тысяч строк нового кода в 25 патчах.
Один мальчик подписался на телеграм-канал Игры в Linux и получил бесплатную игру в Steam! Новости из мира игр в Linux, свежие обзоры игр и полезные инструкции всегда под рукой!
![]()