[Spice-devel] 答复: how to let spice-server send all the rendering work to the client side

Zhicheng Li(Emmannel) zhichengli at hengtiansoft.com
Tue May 6 04:07:00 PDT 2014


Then, I got another question. If all the commands are sent to client gennerally as long as the network is not so bad,  does spice need to evaluate 
client resource in advance, or it just checks network congestion situation?

For now, I know that file spice/server/red_worker.c and spice/server/red_dispatcher.c does the job getting the qxl commands, putting commands
into a ring, a tree, a queue, packing them into spice message and sending them to spice client, but which part of code is responsible for the corresponding
functions? There are so much lines in these source code files, and I am not good enough to master this at once, but I want to. Could you show me some 
source code with their specification related with the "dynamically adjust" module?

What's unique and birlliant in spice, I think, is its ablility to transmit and handle 2D graphic commands, not like other remote desktop solutions using frame buffer updates. This is a great leap, I want to comprehend it, how it fulfill its duty, how it complete its job.
________________________________________
发件人: Marc-André Lureau [mlureau at redhat.com]
发送时间: 2014年5月6日 18:11
收件人: Zhicheng Li(Emmannel)
Cc: spice-devel at lists.freedesktop.org
主题: Re: [Spice-devel] how to let spice-server send all the rendering work to the client side

Hi

----- Original Message -----
> Hi all,
>
> During the past days, I was dedicated to build, configure the spice source
> code to achieve the desired performance. But several questions, or you can
> call them suggestions, occurred to me when the remote desktop did as they
> were expected.
>
> spice is claimed to be able to "intelligently assess the system resources
> available on the user's client device versus the host  virtualization
> server. And as a result of this assessment, the protocol dynamically decides
> whether to render the desktop application on the client device or the host
> server". Here comes my question, could we  disable this "dynamic" part, cut
> off the other alternative option which is doing the rendering work on server
> side and sending client the image using some kind of compression algorithm,
> just always send client those qxl commands, because I was always furnished
> with such a powerful client that I can deal with all kinds of graphic
> commands on the client side.
>
> If my assumption can be achieved, then the client is not very much so "thin".
> But I don't care, I just want spice server to send client the graphic
> command every time, then network overload can be reduced, massively, maybe.
>
> If I want to get what I want, how do I modify the source code? Are there some
> if ... else ... or switch sentences to choose which side to do the rendering
> work? At this time, I am submerged in the source code overview, but there is
> nothing exciting to be found.
>

This is not as simple as it may seem. The server code has to render the display for the host.

The server has logic to do so lazily, some commands may not be render (overlapping regions etc)

In general, all the commands are sent to the client, until the client "pipe" exceeds some limits
due to slower network. In this case, the server starts to render partially
for the client to reduce bandwidth, the number of commands, and keep latency low enough.

But if you have fast enough network (or on localhost), mostly, all the rendering will be
done on client side already.


More information about the Spice-devel mailing list