How to speed up Unity Gaming Performance
Diving into details, there is a 9-10% drop in performance between compiz 0.9.7 and compiz 0.9.8 where FBO rendering is enabled (check our benchmarks). Unfortunately, there were reports (back in September, when 12.10 was in beta phase) saying that glmark and glxgears report 80-96% lower frame rates!!! This regression was allowed in compiz 0.9.8.0 because it is generally only visible in benchmark results. Meanwhile, physical compiz rendering performance (as reported by the compiz Benchmark plugin) is higher in compiz 0.9.8.0 than previous versions, in most cases. However, if you edit the OpenGL plugin to explicitly disable the FBO code and buffer swapping then it is fast again (since I have the fix for bug 1037411).
Additionally, comparing graphics performance in a two-monitor configuration, the gles2 branch is 25-40% slower than trunk. This would not normally be surprising, however the slowdown REMAINS even when you turn off the new rendering features in the gles2 branch: framebuffer_object, vertex_buffer_object, always_swap_buffers
But... the problems don't seem to have an end for Ubuntu 12.10 and Gaming, due to recent critical (high) bug found in nVIDIA drivers. As a result, currently the usage of XSync is very inefficient, and on drivers which likely send the command queue over the protocol, this can kill performance. Neutering XSync usage throughout compiz had the effect of lifting framerates from 30fps to 50fps. Obviously we require synchronous operation for certain things, for example:
- Updating clients on new window positions and stack positions if they are reparented
- Ensuring tear-free window pixmap updates
- Ensuring tear-free damage repair.
Anyway, let's focus on the first and main bug that affects all Ubuntu 12.10 users.
The main fix for this problem is to turn off compositing for fullscreen windows. That's a feature that is already present, but it's not reliable enough to recommend anyone try until Compiz 0.9.8.4 has been released (Update: Done!).
The feature can be enabled here:
[highlight color="yellow"]CCSM > General > Unredirect Fullscreen Windows[/highlight]
It's not enabled by default because:
- It's not yet tested across all the major graphics drivers; and
- It's still not as seamless as it should be.
The driver bugs are all listed here:
The compiz bugs are all listed here:
It is likely the "Unredirect Fullscreen Windows" option will be usable for most people when Ubuntu 12.10 is released, but unlikely to be enabled as default by then, due to the above issues. The fixes can be backported to Ubuntu 12.04 LTS in the future.
[toggle title="Performance changes for raring"]
- - Compiz unredirect fullscreen: ON by default, OFF automatically for nouveau and intel (override by the gsettings key)
- - Unity: paging of results from the dash search results
- - Unity: UBUS enhancements (already in)
- - Unity: full screen dash window to detect the click out. Solution for not doing it and just querying the window manager for focused window
- - Nux: Texturing all the components in just one spot, not a draw call for every components, every time. (Launcher first, then panel). Texture harness. (like css sprites)
- - Nux automatically queuing and relayouting parents when it’s just needed.
- - Previews transition on dash on big screens: inefficient.
- - Automated measurement/benchmark of precise interactions -> Rick mentioned QA team for it.
- - BAMF synchronous calls to check that they are in UI-drawing thread safe
Could compiz be consuming gl resources before the game launches into full screen? If unredirect is on this isn't a big issue. We hope that new Ubuntu Gaming Launchpad team will eventually save the day before Valve's Steam release. If you are interested in Benchmarking, then join the team and help us !