DSP benchmark on Ubuntu with different kernels and Wine versions

I tried to benchmark various kernels available as binary packages for Ubuntu as well as to check if fsync/futex2 makes a noticeable difference for Wine. The Bitwig project used for the benchmark consists of 4 VST synths running in parallel, and 3 VST effects on a master chain. All plugins are non-native and running with yabridge. CPU is AMD Ryzen 3 1200 (8-core version) running at 3700 MHz, and RAM is DDR4 running at 3200 MHz with 16-18-18-36 timings.

Results

5.4.0-generic 5.8.0-lowlatency 5.11.0-liquorix 5.11.11-xanmod
Wine Staging 6.5 2.221 ms 2.301 ms 1.868 ms 2.215 ms
Wine Staging 6.5 TkG 2.215 ms 2.268 ms 1.852 ms 1.734 ms
5.4.0-generic + Wine Staging 6.5 5.8.0-lowlatency + Wine Staging 6.5 5.11.0-liquorix + Wine Staging 6.5 5.11.11-xanmod + Wine Staging 6.5 5.4.0-generic + Wine Staging 6.5 TkG 5.8.0-lowlatency + Wine Staging 6.5 TkG 5.11.0-liquorix + Wine Staging 6.5 TkG + futex2 5.11.11-xanmod + Wine Staging 6.5 TkG + futex2

Liquorix kernel

The Liquorix kernel shows surprisingly good results even without fsync/futex2 enabled.

XanMod kernel

The XanMod kernel (STABLE, non-rt version, without CacULE) makes things better if you use it with fsync/futex2-enabled Wine version. It performs a bit better than Liquorix and gives me about 3%-5% higher efficiency.

fsync/futex2

Enabling fsync on the supported kernels gives me a feel that spikes are less likely to occur, but I can't prove it yet so you will have to check it yourself. Obviously, it has to be enabled on XanMod kernel to make an advantage out of it.

How to get system-wide Wine with TkG patches on Ubuntu easily

There is a repo by Kron4ek which provides various binary Wine builds.

  1. Install the stock Wine provided by Ubuntu or Wine Staging. It's an easy way to get all dependencies needed for every other Wine version.
  2. Navigate to the Releases section and download a .tar.xz archive for your architecture (it's most probably an amd64). The archive should have a "tkg" in its name. Example: wine-6.5-staging-tkg-amd64.tar.xz
  3. Unpack the archive you downloaded and find a bin folder inside it – path to that folder will be used as an override for the $PATH environment variable.
  4. Make changes to your shell's environment by editing its profile. Please refer to the yabridge manual to find out which file is used by your shell. Most of the time it's one of ~/.profile, ~/.bash_profile or ~/.zprofile:
    • Add the next construction to the end of file:
      if [ -d "$HOME/Downloads/wine-6.5-staging-tkg-amd64/bin" ] ; then
          PATH="$HOME/Downloads/wine-6.5-staging-tkg-amd64/bin:$PATH"
      fi
      Where $HOME/Downloads/wine-6.5-staging-tkg-amd64/bin is a path to the bin folder from previous step. Prepending it to the $PATH variable gives it higher priority when system searches for executables, so wine, winecfg and other Wine executables will be picked from that folder instead of system one.
    • Explicitly enable fsync/futex2 by adding the next line to the file:
      export WINEFSYNC=1
  5. Relogin to your account.