Difference between revisions of "LIME Is Mediated Emulation"

From Open-IOV
Jump to navigation Jump to search
Line 11: Line 11:


=== Win64 Subsystem ===
=== Win64 Subsystem ===
LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support. A blog post detailing the problems which lead to this work can be read [https://arccompute.com/blog/why-computers-suck-and-how-openbsd-makes-them-marginally-better/ here].
LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support. A blog post detailing the problems which lead to this work can be read [https://arccompute.com/blog/why-computers-suck-and-how-openbsd-makes-them-marginally-better/ here].  


=== Win64 Orchestration ===
=== Win64 Orchestration ===
Because LIME necessarily provisions application data, program files, and [https://openmdev.io/index.php/Glossary#NUMA_Node NUMA]-aware vGPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through LibVF.IO for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for seamless execution of guest programs similar to that of [https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-tools.md QubesOS] with hardware GPU acceleration added.
Because LIME necessarily provisions application data, program files, and [https://openmdev.io/index.php/Glossary#NUMA_Node NUMA]-aware vCPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through LibVF.IO for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for seamless execution of guest programs similar to that of [https://github.com/Qubes-Community/Contents/blob/master/docs/os/windows/windows-tools.md QubesOS] with hardware GPU acceleration added.


=== Compatibility With Other ABIs ===
=== Compatibility With Other ABIs ===

Revision as of 17:37, 22 August 2022

LIME Is Mediated Emulation is an in-development feature in LibVF.IO which enables the execution of full performance Win64 binaries with full compatibility for the existing library of all current and future software. An initial demo of this technology can be viewed here.

Design Goals

LIME aims to provide similar functionality to WINE Is Not Emulation, Valve's Proton / DXVK but with the use of graphics virtualization (vGPU/SR-IOV on consumer GPUs), a shared filesystem between host/guest, and KVM Frame Relay (high performance graphics buffer sharing via Inter-VM Shared Memory Device / IVSHMEM).

Compared to WINE, and Proton the benefits of this approach are that Win64 binaries execute without the incompatibilities introduced in new games taking advantage of the latest version of DirectX, or when changes are introduced to the latest version of the Win64 ABI.

This functionality is enabled via the use of GVM (for consumer GPU Virtualization), VirtIO-FS, Looking Glass (for host <-> guest shared frame buffer), and LibVF.IO (for orchestration).

Use-Cases

Win64 Subsystem

LIME's most immediate use case is around ABI compatibility with Win64 programs in environments without native support. A blog post detailing the problems which lead to this work can be read here.

Win64 Orchestration

Because LIME necessarily provisions application data, program files, and NUMA-aware vCPU/vGPU resources (in the context of multi-GPU, multi-socket CPU systems) through LibVF.IO for automatic execution by one or more VM guests LIME might provide an ideal architecture for orchestration of Win64 applications at scale. This could include execution of programs for game streaming in a server environment, or multiple applications in a single user environment for seamless execution of guest programs similar to that of QubesOS with hardware GPU acceleration added.

Compatibility With Other ABIs

To solve the problems of 'ABI lock-in' discussed in the "Why Computers Suck" post it may be possible to port LIME support to multiple different guest operating systems allowing seamless execution of any ABI with near indistinguishable performance compared to native execution.

Development Status

Development of this functionality is ongoing. Efforts to improve LIME are primarily focused on stabilization of shared filesystem functions.

VirtIO-FS

VirtIO-FS provides shared filesystem functionality between host and guest using FUSE which is ideal for LIME, however in the context of Windows guests the C version of virtiofsd appears unstable (seen in issue virtio-win issue 550 [closed], 723 [closed], 723 [open]). Testing has been performed by members of the OpenMdev community which have shown initial signs of increased filesystem stability under continuous read/write loads using the Rust version of virtiofsd (virtiofsd-rs).

While many programs can be stored in the VirtIO-FS shared directory some programs such as Steam don't want to install programs into the VirtIO-FS drive (seen as a secondary drive in Windows - in LibVF.IO often as driver D:/ if no additional media is attached). This game installation behaviour (which drive the user may place their programs in) may not be in common with other game stores such as the Epic Games Store, or Good Old Games (GOG).