Hi all,

I've been dabbling in reducing Mir's lag for about a year now. It's something that only gets limited attention in my spare time so might benefit from other people getting involved...

End-to-end, Mir's (Unity8's) lag is about 6 frames. This is the sum of:
  Client: 2 frames lag (triple buffered)
  Nested server: 2 frames lag (triple buffered)
  Physical server: 2 frames lag (triple buffered)

One frame is usually about 16.6ms so we're talking about 100ms of lag in Unity8 right now. But there are some efforts under way to resolve this:

Physical server:
Short term: Reduce lag from 2 to 1 frame. Merge proposal up for review:
  https://code.launchpad.net/~vanvugt/mir/mesa-double/+merge/245723
Long term: Try experimentally reducing lag from 1 to almost-0 frames. This would be achievable only on systems fast enough to do their whole render during or just before the vblank period. Sounds far-fetched but this is how many of us got started in graphics so it's definitely possible.

Nested server:
For optimal lag, ideally we wouldn't have nesting. However we can get the nesting overhead down from 2 frames lag to 1 in the next paragraph. Because a nested server is really just a client.

Client:
All clients are triple buffered right now, making the visible lag 2 frames before it even gets to the nested server. But most clients don't need this many buffers. I'm working on an adaptive approach that (instead of actually reducing the queue size) just throttles the producer (client) in a way that it's never more than one frame away from the consumer (nested server). This still needs work but lives here:
  https://code.launchpad.net/~vanvugt/mir/ddouble

Realistically, I expect us to get Unity8's lag down from 6 frames to around 3 this year. However that's still more than extreme cases like Oculus Rift requires.

Oculus have repeatedly said their magic threshold is 20ms, so to meet that standard we'd have to get lag down to 1 frame end-to-end. And it is theoretically possible for Mir too, if compositing got to 0, nesting was eliminated, and client lag only 1 (double buffered). Actually nesting wouldn't need to be eliminated if we could somehow pass-through overlays asynchronously and make nested servers almost zero lag.

- Daniel

--
Mir-devel mailing list
Mir-devel@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/mir-devel

Reply via email to