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]