How to Troubleshoot Performance Issues in osu-winello: Complete Technical Guide
Troubleshoot performance issues in osu-winello by verifying up-to-date 64-bit graphics drivers, ensuring PipeWire audio is active, enabling FSYNC/ESYNC synchronization in your configuration file, and using Mangohud to identify bottlenecks.
Osu-winello runs osu! stable inside a custom Wine-osu build wrapped by yawl, leveraging the Steam Linux runtime for Proton compatibility. When FPS drops, stuttering, or audio desync occur, systematic troubleshooting across the graphics, audio, and Wine synchronization layers typically resolves the issue. This guide walks through the diagnostic steps and configuration changes required to restore low-latency performance, referencing the actual implementation in the nellokudo/osu-winello repository.
Understanding the Performance Architecture
The performance stack consists of several interacting layers that must work in concert. In osu-winello.sh, the script exports critical environment variables and manages the Wine-osu version constants (MAJOR, MINOR, PATCH) defined at lines 10-15. The yawl wrapper injects the Steam runtime and isolates the Wine process, while DXVK handles Direct3D 11 translation. Performance degradation usually stems from misconfiguration in one of three areas: graphics drivers, the audio subsystem, or Wine synchronization primitives.
Verifying System Prerequisites
Before tuning Wine settings, confirm your base system meets the requirements documented in the README.
Graphics Driver Verification
Osu-winello requires up-to-date 64-bit drivers for Direct3D 11 via DXVK. Outdated or mismatched drivers cause low FPS, stutter, and visual glitches.
Check your current driver version:
glxinfo | grep "OpenGL version"
For NVIDIA users, also verify:
nvidia-smi
Update to the latest stable release for your distribution if the version is outdated. The specific driver requirements are detailed in the Prerequisites section of README.md (lines 37-45).
PipeWire Audio Configuration
Low-latency audio is crucial for osu!'s timing. The installation guide specifies PipeWire as the recommended audio server for optimal synchronization.
Verify your audio server status:
LANG=C pactl info | grep "Server Name"
If the output indicates PulseAudio on PipeWire, the configuration is correct. If the server name shows only PulseAudio or JACK, install PipeWire and restart the service. This requirement is documented in README.md (lines 52-65).
Optimizing Wine Synchronization
The most significant performance gains come from enabling modern Wine synchronization mechanisms. By default, osu-winello.sh exports these variables set to 0 at lines 68-70:
export WINEFSYNC="${WINEFSYNC:-0}"
export WINEESYNC="${WINEESYNC:-0}"
export WINENTSYNC="${WINENTSYNC:-0}"
Enabling FSYNC and ESYNC
FSYNC and ESYNC reduce the overhead of Wine's synchronization primitives, improving FPS on kernels that support them.
Override the defaults by editing your user configuration file:
nano ~/.local/share/osuconfig/configs/example.cfg
Add or uncomment these lines:
WINEFSYNC=1
WINEESYNC=1
WINENTSYNC=0
Apply the changes by restarting the game:
osu-wine --kill && osu-wine
The sample configuration in stuff/example.cfg (lines 30-33) demonstrates the syntax for these overrides. Enabling FSYNC typically resolves frame pacing issues, while NT SYNC remains experimental and should usually stay disabled.
Runtime Diagnostics and Monitoring
Checking Wine-osu Version
Ensure you are running the latest wine-osu-winello build, which contains patches for audio latency and alt-tab handling improvements.
Check your current version:
osu-wine --info
Compare the output against the latest release on the GitHub releases page. If the binary is corrupted or outdated, force a fresh reinstall:
osu-wine --fixprefix
Live Performance Monitoring with Mangohud
To identify bottlenecks, run the game with Mangohud enabled. Add this to your configuration or launch command:
PRE_LAUNCH_ARGS="MANGOHUD=1" osu-wine
Monitor the FPS, GPU%, and frame time metrics. High GPU utilization with low FPS indicates a driver or DXVK issue, while erratic frame times suggest synchronization primitive problems. Custom launch arguments can be added in the user config as noted in the README's Customization section.
Inspecting yawl Logs
The yawl wrapper writes diagnostic information to $XDG_DATA_HOME/osuconfig/winello.log. Check this file for errors like "failed to load" or "cannot find runtime" if the game fails to launch or exhibits frame pacing issues. The installYawl function is called during the InstallWine routine in osu-winello.sh (lines 10-13), ensuring the wrapper is properly initialized during installation.
Summary
- Verify drivers: Check
glxinfoornvidia-smiand update 64-bit graphics drivers to support DXVK properly. - Confirm PipeWire: Run
LANG=C pactl infoto ensure low-latency audio is active. - Enable synchronization: Set
WINEFSYNC=1andWINEESYNC=1in~/.local/share/osuconfig/configs/example.cfg. - Monitor performance: Use
MANGOHUD=1inPRE_LAUNCH_ARGSto visualize FPS and GPU usage in real time. - Check versions: Run
osu-wine --infoand consultwinello.logfor runtime errors.
Frequently Asked Questions
Why is osu-winello stuttering even with good hardware?
Stuttering usually indicates disabled FSYNC/ESYNC or outdated graphics drivers. Check that WINEFSYNC is set to 1 in your configuration file and verify your drivers support the Vulkan extensions required by DXVK. Also ensure your kernel supports futex2 for FSYNC to function properly.
How do I check if FSYNC is actually working?
Run osu-wine --info to see the current environment state. If the output shows WINEFSYNC=0 despite your configuration, the setting may be overridden in stuff/winello-default.cfg or your user config is not being sourced. Ensure you edited the correct file at ~/.local/share/osuconfig/configs/example.cfg and restarted the game with osu-wine --kill.
Can I use PulseAudio instead of PipeWire?
While technically possible, PipeWire is strongly recommended for the low-latency audio timing osu! requires. PulseAudio alone introduces higher latency that can cause audio desync during gameplay. The README (lines 52-65) documents PipeWire as the supported configuration for optimal performance.
What should I do if osu-wine --fixprefix doesn't resolve FPS drops?
If refreshing the Wine prefix does not help, consult the project's optimization wiki at the URL referenced in README.md (lines 121-124). Additional tweaks may include setting your CPU governor to performance, adjusting kernel parameters for scheduler latency, or disabling your desktop compositor to reduce frame latency.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →