On 9/7/26 10:51 PM, Chris Boschert via user wrote:
Hello,

After upgrading guacamole-server from 1.2.0 to 1.6.0, we are seeing a substantial performance regression on RDP connections, on identical hardware, against the same RDP server, with the same on-screen content:

  *
    *guacd CPU usage is ~2× higher*, and
  * *network traffic to the client is 3–5× higher.*


First, though interesting, this is too large a gap in versions to be an actionable comparison. Much has changed in the 6 years since 1.2.0, including in third-party libraries. To narrow what you're seeing to guac_display, you would need to test against just prior to the introduction of guac_display, which would be 1.5.5.

The resource consumption you're seeing doesn't necessarily indicate a problem or a regression. The new guac_display is more capable of making use of available CPU and network capacity, and will use more when available and beneficial (ie: it should use available power to deliver more frames and higher quality). Bottlenecks that would previously have resulted in slower framerates despite available power have been removed, so more data can be processed per unit of time, but things should still gracefully degrade to what you were seeing before if that level of throughput is all that's achievable for a particular level of load.

If you are seeing that the subjective quality of the connection decreases below where things were before, then that could be a problem.

...
Our understanding is that the regression stems from the |guac_display| rendering model (rasterize everything, then diff and re-encode changed regions), which no longer benefits from persistent, cache-driven tile reuse: its copy detection compares only against the previous frame, with no persistent cache of previously transmitted tiles equivalent to the RDP bitmap cache used in 1.2.0.

The RDP bitmap cache has seen decreasing use, so I'm surprised if this is the case, but if it's true that this does impact performance in practice with specific known RDP servers: yes.

The main change in guac_display with respect to scrolling is that automatic search. It's still capable of handling hinting for what should be cached, just as before - this is still done for mouse pointer images, for example.

In-progress changes for guac_display are mainly:

* SIMD optimizations for image processing and encoding.
* Predictive frame scheduling (we estimate connected client timing vs. frame size, fit a function to that data, predict how long it will take clients to process any outstanding data, and then take that into account when deciding when to flush the next set of changes). * Further reducing contention/latency around input events and the rendering pipeline.
* Better parallelization across worker threads.

In general, with things performing ideally, you should see:

* Interaction is responsive and smooth.
* Subjective performance of connections themselves is not less than before, even when under resource constraints that prevent CPU/network from exceeding previous levels.

If, given the same amount of available CPU and network, subjective connection performance is decreased, then that should be investigated.

- Mike

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to