Skip to content

High CPU usage due to time spent in OpenGL driver #23

@fschliem

Description

@fschliem

This may not be a cinder-vr specific thing, but it is very obvious when looking at frame timings on the SteamVR developer window.

First - my system: i7 6700, ATI R390 4Gb, 64Gb Win10.

I tried this on one of the samples - controllerIntermediate which doesn't do much in terms of rendering (i.e. nothing fancy, not too many items). This should be almost zero CPU beyond the initial setup, with minimal GPU.

The average frame breakdown for controllerIntermediate is:

CPU:
  Idle                     ~4ms
  Compositor             ~0.2ms
  Application (other)      ~6ms   <<< This should be ZERO!
  Application (scene)      ~1ms
  Late Start:               0ms

GPU:
  Idle                     ~7ms
  Other                  ~0.2ms
  Compositor               ~1ms
  Application (other)      ~3ms
  Application (scene)      ~0ms

By comparison, Google Earth does:

CPU:
  Idle                   ~8.5ms
  Compositor             ~0.2ms
  Application (other)      ~0ms
  Application (scene)    ~2.5ms
  Late Start:               0ms

GPU:
  Idle                     ~8ms
  Other                  ~0.1ms
  Compositor               ~1ms
  Application (other)      ~3ms
  Application (scene)      ~0ms

And The Lab which uses DirectX:

CPU:
  Idle                     ~9ms
  Compositor             ~0.2ms
  Application (other)      ~0ms
  Application (scene)    ~1.8ms
  Late Start:               0ms

GPU:
  Idle                     ~3ms
  Other                  ~0.1ms
  Compositor               ~1ms
  Application (other)      ~7ms
  Application (scene)      ~0ms

CodeXL (http://gpuopen.com/compute-product/codexl/) profiles show that controllerIntermediate is spending most of the CPU time on my driver (DrvPresentBuffers) while Earth spends most of its CPU time on the app itself.

Even though both The Lab and Earth use way more of the GPU, their CPU usage is minimal.

Same goes for the OpenVR hello_vr sample which uses straight up OpenGL and SDL.

CPU:
  Idle                    ~10ms
  Compositor             ~0.2ms
  Application (other)      ~0ms
  Application (scene)    ~0.8ms
  Late Start:               0ms

GPU:
  Idle                     ~7ms
  Other                  ~0.1ms
  Compositor               ~1ms
  Application (other)      ~3ms
  Application (scene)      ~0ms

For the complexity of the samples, I'd expect them to be on par with hello_vr, perhaps with a 10% perf penalty for using a convenient library like Cinder. Right now it is about 700% penalty.

Given that all this time is going to the driver, my guess is that there's some poor configuration setting somewhere that is forcing the driver down a slow path for no good reason or something along the line, which is why I'm opening this hoping that someone more familiar with the interaction between OpenGL and Cinder has a better answer.

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions