FEX-2506 released

Published by

The newly released FEX-2506 version of FEX-EMU introduces major improvements for executing x86 and x86-64 binaries on AArch64 hosts. A significant highlight is a 25% reduction in Just-In-Time (JIT) compilation time, primarily achieved through the implementation of shared code buffers that allow multiple threads to access JITed code. This enhancement addresses the inefficiencies of the previous system, where JIT compilation was done independently by each thread, leading to excessive memory consumption and CPU usage.

The updated approach consolidates JIT code into a shared buffer, enabling threads to reuse JITed code, which reduces memory usage and improves CPU efficiency. This consolidation also facilitates future capabilities, such as caching JITed code to the filesystem for shared access across multiple application instances. The performance benefits are evident, with specific games like RUINER seeing frame rate improvements from 30 FPS to 60 FPS due to reduced JIT overhead.

In addition to the shared code buffers, the release includes various optimizations that enhance the JIT process and the performance of generated code. These include direct register assignment in SSA IR, elimination of hashmaps in the Dead-Code-Elimination step, and improvements to stack operations and register clearing techniques.

FEX-2506 also tackles critical bugs, notably a race condition that affected memory tracking during multi-threaded operations, particularly when Steam updated its memory allocator. This issue was resolved by restructuring mutex locking to ensure accurate tracking of memory operations, resulting in improved stability during game downloads.

Furthermore, minor bugs in FEXServer were fixed to enhance performance, including preventing early exits of the server while applications are running. Also, users are now alerted about deprecated or misspelled configuration options, improving the overall user experience.

Overall, the FEX-2506 release emphasizes performance enhancements, stability improvements, and user-friendly updates, paving the way for more efficient execution of applications in emulated environments.

In future versions, the development team may focus on further optimizing JIT compilation processes, increasing compatibility with a broader range of applications, and exploring advanced caching techniques to enhance performance across various gaming platforms. The ongoing collaboration with the community to identify bugs and optimize performance will also be crucial for the continual evolution of FEX-EMU

FEX-2506 released

A new version of the FEX-EMU, which allows the execution of x86 and x86-64 binaries on an AArch64 host, has been released. The FEX Release FEX-2506 introduces significant enhancements, including a 25% reduction in JIT time due to the implementation of shared code buffers that can be accessed by multiple threads. This modification represents a notable enhancement over the prior JIT system, which operated independently for each guest application, leading to increased memory and CPU usage. The updated system consolidates all JIT code within a shared code buffer region, enabling all threads to utilize it if any single thread has JITed the code. This minimizes memory consumption, decreases the overall time utilized in the JIT, and positions FEX to initiate code caching to the filesystem for shared access across multiple instances of an application.

The updated system includes better JIT improvements, such as assigning registers directly in SSA IR, removing hashmap use in the Dead-Code-Elimination step, simplifying constants as needed, improving how stack push and pop work together, optimizing Xor operations with -1, adding more ways to clear registers, enhancing X87 FTWTag generation using bit manipulation, optimizing CDQ, fixing thunk callbacks that might damage registers, and correcting a race condition that caused memory tracking issues.

FEX-2506 released @ Linux Compatible