Thinlinc - XRDP VirtualGL Performance

Currently on Build 5 of the AlmaLinux 9.8 VM. When running the Unigine Heaven and Valley benchmarks, there is a noticeable difference between the reported benchmark results and what is actually seen on screen.

Visually:

  • XRDP + VGL: Significant stuttering throughout both benchmarks.
  • ThinLinc + VGL: Little to no stuttering; the benchmarks appear smooth and to the eye looks to be running at roughly 2× the perceived frame rate and thus total frames of XRDP.

The reported FPS alone doesn’t capture the difference in the actual user experience. ThinLinc is noticeably smoother despite the benchmark reporting around 25% fewer frames for Valley and 15% fewer for Heaven. Interestingly, XRDP Valley’s Min FPS is 4 FPS higher and Max FPS is 8 FPS higher than ThinLinc.

The low benchmark scores appear to be down to the NVIDIA driver failing to push the P4000 beyond around 25–30% GPU utilisation in these workloads, regardless of whether the session is XRDP or ThinLinc. Blender, when rendering any scene on the other hand, can push the same GPU to 100% utilisation.

XRDP Benchmark results**

XRDP - Valley Benchmark:
Time: 188.781
Frames: 3702
Min FPS: 11.6698
Max FPS: 26.2446
Score: 820.485
CPU load: 3.88 3.00 2.06
Avg GPU: 30%

XRDP - Heaven Benchmark
Time: 260.699
Frames: 7904
Min FPS: 11.8607
Max FPS: 42.5412
Score: 763.722
CPU load: 3.76 3.02 2.09
Avg GPU: 30%

Thinlinc Benchmark results

TL - Valley Benchmark:
Time: 188.781
Frames: 2790
Min FPS: 7.12
Max FPS: 18.55
Score: 620
CPU load: 1.94 1.42 1.00
Avg GPU: 30%

TL - Heaven Benchmark
Time: 260.3
Frames: 6722
Min FPS: 10.7
Max FPS: 41.6
Score: 588
CPU load: 1.91 1.39 0.86
Avg GPU: 30%

For comparison, I setup a windows 2025 server VM, P4000 with pass through

RDP - Heaven Benchmark (W2025 Server .. P4000 580.x RTX driver)
Time:260.5
Frames: 23426
Min FPS: 15.6
Max FPS: 162.5
Score : 2265
CPU: 51% overall - @ 2.7GHz. on all 8 cores = hovering @ 70% + load
GPU util : 78-99%

Settings are exactly the same between Thinlinc and XRDP and @ 1080p window mode.

AlmaLinux 9.8
8vCPU Intel Xeon @ 2.8Ghz
36 GB RAM
300 GB SSD
Nvidia P4000 passthrough (580.x drivers)
VirtualGL 3.1.4

Update:

Build 6 (WIP) - upgraded too TigerVNC 1.16.2 and VirtualGL 3.1.5 - hence the new version.

A couple of performance tweaks applied to XRDP - which has helped a little in reducing stutter. However, no change in the inconsistent NV driver behaviour. I’ve only tested Blender on build 6, and it will happily render the class room scene (Cycles 300 samples) in 2min 17s using the NV GPU at 99-100% utilisation.

An update on this:

I’ve improved overall GPU performance by giving the GPU and server a really good clean and replacing the thermal paste on the GPU etc.

The P4000’s nvidia drivers are set to throttle performance @ 93C but perf was tanking a lot earlier at approx 83C. Post cleanup, this is now significantly improved with temps only reaching 75-82C even during Blender rendering. The GPU is now able to maintain stable memory and GFX clocks although GPU util is not consistent.

Build 7 of the TL VDA (latest updates inc. CUDA tooklit) - Blender classroom with 5.1.2 and 5.2.2 is 2mins04s with the P4000 @ 100% utilisation, stable max GFX clocks and Powerstate P0.

Other apps inc. DJV, OpenRV, Paraview, Grass GIS etc the performance is still inconsistent with the GPU util hovering around the 40% and the powerstate never switching to P0.

Looking to improve the airflow further if possible to help keep the GPU cool and prevent thermal throttling.