Performance

Performance #

A word on antialiasing #

Antialiasing should be avoided when possible and the compositor scale should be increased in monado to smooth out edges. In general AA is found to increase the latency of delivered frames quite noticably and the GPU utilization far more than simple super sample of the actual VR session or app.

Set AMD GPU power profile mode #

AMD GPUs will attempt to power save in between rendering frames, for flatscreen games this is helpful, but for VR this is quite negatively impactful on the VR compositor’s ability to timewarp frames so the user’s viewport does not stutter or cause sickness.

This is step is modestly important to avoid stutter on newer kernels, if you experience stutters under large graphical load please attempt to set this up.

Graphical Programs #

⚠️BE CAREFUL⚠️

These are overclocking utilities. Overclocking your GPU is potentially dangerous and if done without care it could permanently damage your hardware.

Do not use multiple overclocking tools at the same time, they will conflict with each other.

If you limit yourself to setting the power profile you should be fine, but don’t just crank up the sliders.

Linux GPU Configuration And Monitoring Tool (LACT) #

This application allows you to control your AMD, Nvidia or Intel GPU on a Linux system.

  • Installation docs
  • Enable and start the service (otherwise you won’t be able to change any settings): sudo systemctl enable --now lactd
  • Select your GPU in the top-left dropdown menu, make sure you picked your dedicated GPU and not your integrated one
  • Create a new profile for VR gaming
  • (Optional): You can set rules for automatically switching to the VR profile by clicking on the ☰ menu then Edit Rules
  • Go to the overclocking (OC) tab and change Performance Level to Manual
  • Change Power Profile Mode to VR
  • Click Apply at the bottom

CoreCtrl #

CoreCtrl is in maintenance mode. This means no new features or hardware support will be added, and development will focus solely on bug fixes and maintenance-related changes.

It supports AMD GPUs up to the RX 9000 series, though some series may have limitations due to long-standing and unresolved driver or firmware issues. Partial or full functionality on newer hardware is possible but not guaranteed.

  • Installation docs
  • Select your GPU on the top
  • Set Performance mode to Advanced
  • Set Power profile to VR

Do note that corectrl version 1.4 was not able to separately adjust the GPU performance profile from the speeds. Your GPU will downclock to absolute minimums after changing your power profile. To set them back where they should be, adjust the core and memory sliders all the way to the right to obtain your default performance clocks.

If they present as minimums and maximums in a vertical fashion leave them alone, you are fine.

Switching profiles manually using the terminal #

Here are some basic scripts to change the power profile quickly.

Do not run these scripts while using any of the above programs.

Enable VR profile using a script #

#!/usr/bin/env bash

# Enable manual override
echo "manual" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level

# Translate "VR" into profile number
vr_profile=$(cat /sys/class/drm/card0/device/pp_power_profile_mode | grep ' VR ' | awk '{ print $1; }')

# Set profile to VR
echo $vr_profile | sudo tee /sys/class/drm/card0/device/pp_power_profile_mode

Disable VR profile using a script #

#!/usr/bin/env bash

# Disable manual override
echo "auto" | sudo tee /sys/class/drm/card0/device/power_dpm_force_performance_level

# Set profile to DEFAULT
echo 0 | sudo tee /sys/class/drm/card0/device/pp_power_profile_mode

Did all of this and still suffering stuttering issues, discomfort, or sickness? #

You may need to increase the overhead of your compositor timewarp. Some GPUs cannot effectively meet the demands of realtime reprojection on the default value of 4 miliseconds so a safer value of 8 can be recommended if your symptoms are accompanied by 100% GPU usage:

U_PACING_COMP_MIN_TIME_MS=8

Insert this enviornment variable into your monado-service launch or into your envision profile and simply start the runtime without a rebuild. Bump the value up, as appropriate, based on the absolute power of your GPU.

Lower spec users such as iGPUs and more should consider radically higher values here, experiment in the double digits to arrive at a number that works well from your perspective.