Логотип

FEX-Emu позволяет запускать ваши любимые приложения для x86 и x86-64 на устройствах ARM64 с Linux

FEX-Emu позволяет запускать ваши любимые приложения для x86 и x86-64 на устройствах ARM64 с Linux

Вычислительные устройства постоянно совершенствуются, и теперь мощные устройства на базе ARM работают под управлением Linux лучше, чем когда-либо прежде. Но многим ключевым приложениям по-прежнему требуются более старые наборы инструкций x86 или x86-64. FEX-Emu — это инновационное решение, которое устраняет этот пробел. Оно позволяет быстро запускать программы x86 на системах ARM64 Linux.

В этой статье мы расскажем, как работает FEX и почему он быстро становится важным инструментом для будущих игр и повышения производительности в Linux.

 

Что такое FEX?

FEX — это эмулятор пользовательского пространства x86 и x86-64, созданный специально для ARM64 Linux. Это означает, что он помогает программам, разработанным для чипов Intel или AMD, успешно работать на оборудовании с чипами ARM.

Представьте, что FEX — это специализированный переводчик, работающий в режиме реального времени. Он переводит инструкции с одной архитектуры (x86) так, чтобы их могла понять хост-система (ARM64). Он поддерживает совместимость как с 32-битными, так и с 64-битными двоичными файлами x86.

FEX-Emu представляет собой альтернативу другим инструментам, таким как QEMU-user и Box64. Box64 также позволяет запускать программы x86_64 для Linux в системах Linux, отличных от x86, включая RiSC-V или LoongArch.

 

Как FEX обеспечивает высокую скорость?

FEX ориентирован на скорость, чтобы пользователи могли наслаждаться реальной игровой производительностью. Поэтому он использует несколько передовых технологий для снижения нагрузки и задержек:

1. Двоичная перекомпиляция и пользовательский промежуточный код

FEX использует усовершенствованный двоичный рекомпилятор. Этот компилятор поддерживает современные расширения x86, включая SSE4.1, и планируется его поддержка AVX и AVX2.

В основе этой технологии лежит пользовательское промежуточное представление (Intermediate Representation, IR). Использование этого пользовательского IR позволяет FEX генерировать более оптимизированный код, чем старые традиционные JIT-компиляторы (Just-in-Time).

FEX также использует кэширование JIT-кода и кэширование IR. Этот экспериментальный кэш кода максимально снижает задержки в игре.

2. Переадресация библиотек (Thunking)

Эмуляция каждой отдельной инструкции требует больших затрат. Поэтому FEX не эмулирует стандартные системные задачи. Это достигается за счёт поддержки переадресации вызовов API.

Система перенаправляет запросы на графику (например, Vulkan или OpenGL) в собственные системные библиотеки хоста. Поскольку графический процессор не является процессором x86-64, код графического процессора выполняется нативно. Эмуляции подвергается только код центрального процессора. Этот эффективный процесс значительно снижает нагрузку на эмуляцию.

3. Системный вызов

FEX включает в себя комплексный уровень трансляции системных вызовов. Этот уровень обрабатывает различия между эмулируемой операционной системой и системой хоста. Он даже реализует специализированные функции, такие как seccomp. Однако большинство системных вызовов и функций ioctl() могут выполняться напрямую.

Читать  В Wine 10.16 добавлена поддержка быстрой синхронизации NTSync

 

FEX для игр и индустрии

FEX — это не просто нишевый проект, он играет важную роль в крупных отраслевых стратегиях, особенно в игровой индустрии.

Интеграция с Wine/Proton

FEX-Emu работает вместе с Wine и/или Proton. Эта комбинация позволяет пользователям играть в игры для Windows на ARM64 Linux.

CodeWeavers, компания, стоящая за CrossOver (коммерческой версией Wine), начала внедрять FEX в свои предварительные версии для ARM.

Кроме того, модульная структура FEX позволяет использовать его в качестве бэкенда WoW64/ARM64EC в средах Wine.

 

Спонсорство Valve и Steam Frame

Valve, компания, которая управляет Steam, выделила значительные ресурсы на разработку FEX. Они спонсируют проект. FEX также используется в новом Steam Frame — устройстве на базе ARM64 Snapdragon 8 Gen 3, предназначенном для запуска игр для ПК и ПК VR.

Это обязательство свидетельствует о долгосрочной заинтересованности Valve в переносе игр для Linux на архитектуру ARM.

Обратите внимание, что FEX предназначен для запуска всех программ и приложений x86 и x86-64 на устройствах ARM64 с Linux, не только игр. Однако при его разработке приоритет отдавался высокой производительности и низкой задержке, необходимым для ресурсоёмких приложений, таких как игры.

 

Начало работы с FEX

Для работы FEX требуется оборудование ARMv8.0+. Настройка FEX в поддерживаемых дистрибутивах проста, но для этого требуется несколько компонентов:

1. Требования к корневой файловой системе

RootFS x86-64 обязательна на хостах AArch64. RootFS обеспечивает необходимую структуру файловой системы для эмулируемых программ. Вы можете скачать готовые образы x86 с помощью инструмента FEXRootFSFetcher.

2. Конфигурация среды выполнения (FEXConfig)

FEX предоставляет удобный графический интерфейс на основе Qt под названием FEXConfig. С помощью этого приложения вы можете управлять настройками. Эта система позволяет настраивать параметры для каждого приложения. Пользователи могут изменять параметры производительности для конкретных игр.

Параметры конфигурации, которые необходимо настроить:

  • Путь к RootFS.
  • Ядро: JIT.
  • Беззвучная запись логов (помогает избавиться от информационного спама).
  • Размер блока (500 — хороший вариант по умолчанию).

 

3. Сложности при работе: модели памяти

При настройке FEX вы столкнетесь со сложной моделью памяти x86 Total Store Ordering (TSO).

В системах ARM используется более слабая модель памяти. По умолчанию FEX выполняет консервативную эмуляцию TSO, которая может требовать больших вычислительных ресурсов. Однако в FEX есть настройки, позволяющие ослабить или отключить TSO.

Читать  Выпущен Armbian 25.8.1 с ядром 6.16 и поддержкой Debian 13

Отключение TSO повышает производительность, но вы можете столкнуться с ошибками, которые приведут к сбою игры. Новые двоичные файлы Windows x86, скомпилированные с помощью компилятора Microsoft Visual Studio 2019+, могут содержать полезные метаданные, которые сообщают эмулятору, когда действительно требуется TSO.

Подробнее об этом можно прочитать по ссылке ниже:

 

Быстрая установка (Ubuntu)

Для версий Ubuntu 22.04, 24.04, 24.10 и 25.04 разработчики FEX предусмотрели быстрый способ установки с помощью скрипта на Python.

Чтобы установить FEX этим способом, выполните в терминале следующую команду:

curl --silent https://raw.githubusercontent.com/FEX-Emu/FEX/main/Scripts/InstallFEX.py | python3

 

Этот скрипт выполнит за вас следующие действия:

  1. Установка FEX через PPA.
  2. Загрузка RootFS, необходимой для использования с FEX. (Инструмент FEXRootFSFetcher можно использовать для установки различных образов x86).

 

Если вы используете дистрибутив, отличный от указанных версий Ubuntu, или предпочитаете собирать FEX-Emu из исходного кода, следуйте руководству по установке Fex на официальной вики-странице FEX-Emu.

 

Часто задаваемые вопросы (FAQ)

Вопрос: Что такое FEX и какую проблему он решает?

A: FEX-Emu — это быстрый эмулятор пользовательского пространства x86 и x86-64, разработанный для устройств ARM64 Linux. Он решает проблему совместимости, позволяя запускать компьютерные программы, созданные для традиционных процессоров Intel или AMD (архитектура x86), на современных системах на базе ARM.

FEX обеспечивает обратную совместимость с AArch64, широкую совместимость с 32- и 64-битными двоичными файлами и достаточно высокую производительность для настоящих игр.

Вопрос: Какие технические особенности обеспечивают быструю работу FEX и снижают задержки?

О: FEX-Emu использует несколько передовых методов для минимизации нагрузки на производительность.

1Двоичная перекомпиляция: в нём используется усовершенствованный двоичный рекомпилятор, который преобразует инструкции x86 для хоста ARM64.

2Пользовательский IR: рекомпилятор использует пользовательское промежуточное представление (IR), которое позволяет ему генерировать более оптимизированный код, чем традиционный JIT-компилятор (Just-in-Time).

3Кэширование: экспериментальный кэш кода и кэширование IR-кода помогают максимально снизить задержки в игре.

4Переадресация библиотек (тханкинг): чтобы избежать ненужной эмуляции распространённых задач, FEX поддерживает переадресацию вызовов API непосредственно в собственные системные библиотеки хоста, такие как Vulkan или OpenGL, что значительно снижает нагрузку на эмуляцию при обработке графики.

Читать  Вышла OBS Studio 31.1 с поддержкой Windows на архитектуре Arm
Вопрос: может ли FEX запускать игры для Windows на устройствах с ARM Linux?

О: Да, FEX можно использовать вместе с Wine/Proton для запуска игр для Windows. Его модульное ядро позволяет FEX эффективно функционировать в качестве бэкенда WoW64/ARM64EC в средах Wine.

Кроме того, система настройки для каждого приложения позволяет пользователям изменять параметры производительности для конкретных игр.

Вопрос: пользуется ли FEX поддержкой крупных компаний?

О: Да, FEX пользуется значительной поддержкой в отрасли, особенно в игровом секторе.

1Спонсорство Valve: Valve спонсирует FEX. Эта технология имеет решающее значение для нового Steam Frame — устройства на базе ARM64 Snapdragon 8 Gen 3, предназначенного для запуска игр для ПК и ПК VR.

2CodeWeavers: CodeWeavers, главный корпоративный спонсор Wine и разработчик CrossOver, начал внедрять FEX в свои предварительные версии для ARM, чтобы обеспечить возможность запуска таких игр, как Cyberpunk 2077.

Вопрос: Каковы основные требования для использования FEX?

О: Для запуска FEX необходимо соответствовать двум основным требованиям к аппаратному и программному обеспечению:

Аппаратное обеспечение: для FEX требуется аппаратное обеспечение ARMv8.0+.

RootFS: На хостах AArch64 для запуска приложений обязателен путь к RootFS x86-64. Пользователи могут устанавливать различные образы x86 с помощью инструмента FEXRootFSFetcher .

Вопрос: чем FEX отличается от аналогичных инструментов, таких как Box64 или QEMU-User?

Ответ: FEX-Emu, QEMU-user и Box64 преследуют одну и ту же основную цель — обеспечить возможность запуска программ x86 на устройствах ARM64 под управлением Linux.

FEX ориентирован на высокую производительность благодаря усовершенствованному двоичному рекомпилятору и пользовательскому промежуточному представлению, которое предназначено для генерации высокооптимизированного кода.

Box64 позволяет запускать программы x86_64 для Linux на 64-битных системах, отличных от x86, таких как ARM, RiSC-V или LoongArch.

QEMU-user также выполняет эмуляцию пользовательского пространства, преобразуя системные вызовы, настраивая параметры и обрабатывая перенаправление сигналов POSIX, подобно FEX.

Однако при выборе архитектуры FEX особое внимание уделялось снижению накладных расходов при выполнении игровых задач.

 

Заключение

FEX-Emu предлагает мощную эмуляцию x86 в пользовательском пространстве, открывая широкие возможности для обеспечения совместимости с системами ARM64 Linux.

Благодаря использованию специальной технологии рекомпиляции и агрессивной переадресации библиотек FEX обеспечивает производительность, достаточную для запуска реальных игр.

Спонсорство со стороны Valve подтверждает роль FEX как важного компонента в будущем кроссплатформенных игр.

Более подробную информацию можно найти в репозитории FEX-Emu на GitHub.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала