vk.com

Выберите язык

FEX 2601: Выход из спячки с исправлениями для Proton, Wine

 Команда эмулятора FEX, очнувшись от праздничной зимней спячки, встречает новый год свежим релизом!

Актуализация thunks для Vulkan 1.4.337

Это очень важное обновление. Дело в том, что Proton и Mesa начали использовать новые расширения Vulkan, которые раньше не поддерживались в FEX. Если на вашей системе был свежий драйвер с этими расширениями, то dxvk/vkd3d-proton могли аварийно завершаться с ошибкой (assert). Теперь эта проблема решена, и механизм thunking снова работает как положено.

Исправление редких зависаний в механизме мьютексов Wine

Несколько месяцев назад разработчики внедрили собственную реализацию мьютексов с приоритетом для «писателей», чтобы уменьшить микроподтормаживания (stuttering) в кэше кода. Однако в реализации для Wine затаились два коварных бага, которые оставались незамеченными до сих пор.

Перед тем как передать управление реализации мьютекса в ядре, система выполняет кратковременную активную проверку (spin) с помощью эффективной ARM-инструкции «Wait-For-Event» (примерно 0.1 миллисекунды). Из-за такого короткого времени блокировки баги проявлялись крайне редко, но при определенной гонке условий (race condition) могли привести к серьёзным проблемам.

Первый баг мог полностью «усыпить» потоки-читатели. Второй же был в API функции RtlWaitOnAddress, которая по ошибке ожидала изменения только 32-битного адреса, что обычно приводило к зависанию и последующему краху процесса.

Разработчики нашли и исправили две хитрые ошибки, отладка которых была настоящим испытанием из-за их редкости.

Правки в JIT (компиляторе «на лету»)

В этом месяце масштабных изменений в JIT не так много. Была исправлена ошибка, которая мешала работе клиента Ubisoft Connect (UPlay). Также улучшили обработку самомодифицирующегося кода в реализации Wine, что может устранить некоторые спорадические зависания или некорректные инвалидации кэша.

Небольшое исправление Linux syscall

Было замечено, что Steam начал использовать новые операции системного вызова fcntl, которые FEX раньше не обрабатывал. В редких случаях, когда Steam действительно вызывал этот syscall, это могло привести к падению. Теперь эта ситуация обрабатывается, а для новых, пока неизвестных команд, реализовали «проброс» напрямую в ядро Linux для большей будущей устойчивости.

Продолжение работ над системой кэширования кода

Этой задаче посвящён самый большой объём работы в данном обновлении. Была добавлена поддержка генерации и загрузки кэша кода как со стороны Linux, так и со стороны Wine. Хотя функционал всё ещё находится в активной разработке, кэши уже начинают работать в реальном времени.

Идея в том, чтобы обменять процессорное время на дисковое пространство: если скомпилированный код уже есть в кэше, теоретически это должно снизить заикания, вызванные работой JIT. До готового решения для конечных пользователей ещё далеко, но разработчику движутся вперёд, как обычно!

Следите за обновлениями FEX — в 2026 году Вас ждёт ещё много интересного!