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:
mvgalddaemon →/usr/bin/mvgald- CLI tools →
/usr/bin/mvgal-{info,status,bench,compat,config} - Vulkan layer →
/usr/share/vulkan/implicit_layer.d/VK_LAYER_MVGAL.json - OpenCL ICD →
/etc/OpenCL/vendors/mvgal.icd - Config →
/etc/mvgal/mvgal.conf - Systemd service →
/etc/systemd/system/mvgald.service
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: