MVGAL Quick Start

Get MVGAL running in 5 minutes.


1. Check your GPUs

# See what GPUs the system sees
ls /sys/class/drm/card*/device/vendor 2>/dev/null | xargs -I{} sh -c 'echo {} && cat {}'

You need at least 2 GPUs. MVGAL supports AMD, NVIDIA, Intel, and Moore Threads in any combination.


2. Install dependencies

No manual build dependencies are needed — the COPR package pulls in all runtime dependencies automatically. Just make sure your GPU drivers are installed (see Hardware Compatibility).


3. Install from COPR

MVGAL is available as a pre-built package via Fedora COPR — no need to compile from source.

sudo dnf copr enable axogm/mvgal
sudo dnf install mvgal

Supported targets: Fedora 40+ · RHEL/AlmaLinux/Rocky 9 & 10 · CentOS Stream 9 & 10 · openSUSE Tumbleweed · Amazon Linux 2023

This installs:


4. Start the daemon

pkexec systemctl start mvgald
pkexec systemctl enable mvgald   # auto-start on boot

5. Verify

mvgal-info
========================================================================
  MVGAL — Multi-Vendor GPU Aggregation Layer  |  mvgal-info
========================================================================
  Kernel : Linux 6.19.10-300.fc44.x86_64
  mvgal.ko: not loaded
  /dev/mvgal0: absent

  Detected 2 GPU(s):

  GPU 0 — AMD GPU [1002:743f]
  ------------------------------------------------------------
    PCI slot   : 0000:03:00.0
    Vendor ID  : 0x1002  (AMD)
    VRAM       : 3.98 GiB total, 0.79 GiB used (20%)
    Temperature: 56 °C
    Utilization: 12 %

  GPU 1 — NVIDIA GPU [10de:2584]
  ------------------------------------------------------------
    PCI slot   : 0000:04:00.0
    Vendor ID  : 0x10DE  (NVIDIA)
    VRAM       : 8.00 GiB total

========================================================================
  Logical MVGAL Device
========================================================================
  Physical GPUs aggregated : 2
  Vendors present          : AMD NVIDIA
  Capability tier          : Mixed (heterogeneous)
  Vulkan layer registered  : yes
  Daemon socket            : /run/mvgal/mvgal.sock (present)

Expected output:


6. Use with applications

Any Vulkan application

The Vulkan layer is implicit — it activates automatically for all Vulkan apps. No changes needed.

# Verify the layer is in the chain
vulkaninfo 2>/dev/null | grep MVGAL

Steam games

ENABLE_MVGAL=1 MVGAL_STRATEGY=afr %command%

Add to Steam launch options (Properties → Launch Options):

OpenCL applications

# Check MVGAL platform is visible
clinfo | grep -A3 MVGAL

CUDA applications

LD_PRELOAD=/usr/lib/libmvgal_cuda.so your_cuda_app

OpenGL applications (via Zink)

MESA_LOADER_DRIVER_OVERRIDE=zink ENABLE_MVGAL=1 glxgears

7. Monitor in real time

# One-shot status
mvgal-status

# Continuous refresh every 500ms
mvgal-status --watch --interval 500

# Run benchmarks
mvgal-bench all

# Check app compatibility
mvgal-compat "doom"
mvgal-compat --system

8. Change scheduling strategy

# Alternate Frame Rendering (best for gaming)
mvgal-config set-strategy afr

# Compute offload (best for AI/HPC)
mvgal-config set-strategy compute_offload

# Show current config
mvgal-config show-config

9. Load the kernel module (optional)

The kernel module enables deeper integration (DMA-BUF at kernel level, /dev/mvgal0). It is optional — MVGAL works without it via user-space interception. The module ships pre-built with the COPR package.

pkexec modprobe mvgal
pkexec insmod /lib/modules/$(uname -r)/extra/mvgal/mvgal.ko 2>/dev/null || true
dmesg | grep MVGAL

Troubleshooting

# Check DRM devices exist
ls /sys/class/drm/card*/device/vendor
# Check GPU drivers are loaded
lsmod | grep -E 'amdgpu|nvidia|i915|xe|mtgpu'

No GPUs detected:

pkexec journalctl -u mvgald -n 50
# Or run in foreground
mvgald --no-daemon

Daemon not starting:

ls /usr/share/vulkan/implicit_layer.d/VK_LAYER_MVGAL.json
# If missing, reinstall:
sudo dnf reinstall mvgal

Vulkan layer not active:

# Add yourself to the video group
pkexec usermod -aG video $USER
# Log out and back in

Permission denied on socket: