[Spice-devel] [PATCH spice-server v2 1/4] spicevmc: Do not use RedCharDevice pipe items handling
Frediano Ziglio
fziglio at redhat.com
Fri Aug 30 13:54:18 UTC 2019
ping
>
> ping
>
> >
> > ping
> >
> > >
> > > ping
> > >
> > > >
> > > > ping
> > > >
> > > > >
> > > > > ping the series
> > > > >
> > > > > >
> > > > > > As we don't use any token there's no reason to not queue directly
> > > > > > instead
> > > > > > of passing through RedCharDevice.
> > > > > > This will make easier to limit the queue which currently is
> > > > > > unlimited.
> > > > > >
> > > > > > RedCharDevice flow control has some problems:
> > > > > > - it's really designed with VDI in mind. This for SpiceVMC would
> > > > > > cause
> > > > > > code implementation to be confusing having to satisfy the agent
> > > > > > token
> > > > > > handling;
> > > > > > - it's using items as unit not allowing counting bytes;
> > > > > > - it duplicates some queue management between RedChannelClient;
> > > > > > - it's broken (see comments in char-device.h);
> > > > > > - it forces "clients" to behave in some way not altering for
> > > > > > instance
> > > > > > the
> > > > > > queued items (which is very useful if items can be collapsed
> > > > > > together);
> > > > > > - it replicates the token handling on the device queue too. This
> > > > > > could
> > > > > > seems right but is not that if you have a network card going @ 1
> > > > > > GBit/s
> > > > > > you are able to upload more than 1 Gbit/s just using multiple
> > > > > > connections. The kernel will use a single queue for the network
> > > > > > interface
> > > > > > limiting and sharing de facto the various buffers between the
> > > > > > multiple
> > > > > > connections.
> > > > > >
> > > > > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > > > > > ---
> > > > > > Changes in v2:
> > > > > > - more commit message comments
> > > > > > ---
> > > > > > server/spicevmc.c | 15 +++++----------
> > > > > > 1 file changed, 5 insertions(+), 10 deletions(-)
> > > > > >
> > > > > > diff --git a/server/spicevmc.c b/server/spicevmc.c
> > > > > > index 84bbb73c2..8c41573ae 100644
> > > > > > --- a/server/spicevmc.c
> > > > > > +++ b/server/spicevmc.c
> > > > > > @@ -360,29 +360,24 @@ static RedPipeItem
> > > > > > *spicevmc_chardev_read_msg_from_dev(RedCharDevice *self,
> > > > > >
> > > > > > msg_item_compressed = try_compress_lz4(channel, n,
> > > > > > msg_item);
> > > > > > if (msg_item_compressed != NULL) {
> > > > > > - return &msg_item_compressed->base;
> > > > > > + red_channel_client_pipe_add_push(channel->rcc,
> > > > > > &msg_item_compressed->base);
> > > > > > + return NULL;
> > > > > > }
> > > > > > #endif
> > > > > > stat_inc_counter(channel->out_data, n);
> > > > > > msg_item->uncompressed_data_size = n;
> > > > > > msg_item->buf_used = n;
> > > > > > - return &msg_item->base;
> > > > > > - } else {
> > > > > > - channel->pipe_item = msg_item;
> > > > > > + red_channel_client_pipe_add_push(channel->rcc,
> > > > > > &msg_item->base);
> > > > > > return NULL;
> > > > > > }
> > > > > > + channel->pipe_item = msg_item;
> > > > > > + return NULL;
> > > > > > }
> > > > > >
> > > > > > static void spicevmc_chardev_send_msg_to_client(RedCharDevice
> > > > > > *self,
> > > > > > RedPipeItem *msg,
> > > > > > RedClient *client)
> > > > > > {
> > > > > > - RedCharDeviceSpiceVmc *vmc = RED_CHAR_DEVICE_SPICEVMC(self);
> > > > > > - RedVmcChannel *channel = RED_VMC_CHANNEL(vmc->channel);
> > > > > > -
> > > > > > - spice_assert(red_channel_client_get_client(channel->rcc) ==
> > > > > > client);
> > > > > > - red_pipe_item_ref(msg);
> > > > > > - red_channel_client_pipe_add_push(channel->rcc, msg);
> > > > > > }
> > > > > >
> > > > > > static void red_port_init_item_free(struct RedPipeItem *base)
More information about the Spice-devel
mailing list