Re: [Spice-devel] [PATCH spice-server 3/3] common-graphics-channel: use manual flushing on stream to decrease packet fragmentation
On Tue, Jan 16, 2018 at 02:18:15PM +, Frediano Ziglio wrote: > In order to use new TCP_CORK feature disable auto flush. 'the new TCP_CORK feature, disable auto flush' Might be worth explaining in the commit log why you disable auto_flush only for RedCommonGraphicsChannel. > > Signed-off-by: Frediano Ziglio> --- > server/common-graphics-channel.c | 17 + > server/red-channel-client.c | 1 + > 2 files changed, 10 insertions(+), 8 deletions(-) > > diff --git a/server/common-graphics-channel.c > b/server/common-graphics-channel.c > index ce6b5e57..083ab3eb 100644 > --- a/server/common-graphics-channel.c > +++ b/server/common-graphics-channel.c > @@ -83,14 +83,15 @@ bool common_channel_client_config_socket(RedChannelClient > *rcc) > > // TODO - this should be dynamic, not one time at channel creation > is_low_bandwidth = main_channel_client_is_low_bandwidth(mcc); > -/* FIXME: Using Nagle's Algorithm can lead to apparent delays, depending > - * on the delayed ack timeout on the other side. > - * Instead of using Nagle's, we need to implement message buffering on > - * the application level. > - * see: http://www.stuartcheshire.org/papers/NagleDelayedAck/ > - */ > -red_stream_set_no_delay(stream, !is_low_bandwidth); > - > +if (!red_stream_set_auto_flush(stream, false)) { > +/* FIXME: Using Nagle's Algorithm can lead to apparent delays, > depending > + * on the delayed ack timeout on the other side. > + * Instead of using Nagle's, we need to implement message buffering > on > + * the application level. > + * see: http://www.stuartcheshire.org/papers/NagleDelayedAck/ > + */ > +red_stream_set_no_delay(stream, !is_low_bandwidth); > +} > // TODO: move wide/narrow ack setting to red_channel. > red_channel_client_ack_set_client_window(rcc, > is_low_bandwidth ? > diff --git a/server/red-channel-client.c b/server/red-channel-client.c > index f154c5c6..32ac30d1 100644 > --- a/server/red-channel-client.c > +++ b/server/red-channel-client.c > @@ -1328,6 +1328,7 @@ void red_channel_client_push(RedChannelClient *rcc) > if ((red_channel_client_no_item_being_sent(rcc) && > g_queue_is_empty(>priv->pipe)) || > red_channel_client_waiting_for_ack(rcc)) { > red_channel_client_watch_update_mask(rcc, SPICE_WATCH_EVENT_READ); > +red_stream_flush(rcc->priv->stream); I would add a rationale in the commit log regarding why the red_stream_flush() is in this specific place. Christophe signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH spice-server 2/3] stream: implements flush using TCP_CORK
On Tue, Jan 16, 2018 at 02:18:14PM +, Frediano Ziglio wrote: > Cork is a system interface implemented by Linux and some *BSD systems to > tell the system that other data are expected to be written to a socket. > This allows the system to reduce network fragmentation waiting a network 'waiting for network packets to be complete' I think. > packet to be complete. > > Using some replay capture and some instrumentation resulted in a > bandwith reduction of 11% and a packet reduction of 56%. I would add a link to https://lists.freedesktop.org/archives/spice-devel/2017-February/035577.html and maybe even copy the data you put in there. > > Signed-off-by: Frediano Ziglio> --- > server/red-stream.c | 34 +- > 1 file changed, 33 insertions(+), 1 deletion(-) > > diff --git a/server/red-stream.c b/server/red-stream.c > index 4812d8e4..4833077c 100644 > --- a/server/red-stream.c > +++ b/server/red-stream.c > @@ -24,6 +24,7 @@ > #include > #include > #include > +#include > > #include > > @@ -83,6 +84,8 @@ struct RedStreamPrivate { > * deallocated when main_dispatcher handles the > SPICE_CHANNEL_EVENT_DISCONNECTED > * event, either from same thread or by call back from main thread. */ > SpiceChannelEventInfo* info; > +bool use_cork; > +bool corked; > > ssize_t (*read)(RedStream *s, void *buf, size_t nbyte); > ssize_t (*write)(RedStream *s, const void *buf, size_t nbyte); > @@ -92,6 +95,15 @@ struct RedStreamPrivate { > SpiceCoreInterfaceInternal *core; > }; > > +/** > + * Set TCP_CORK on socket > + */ > +/* NOTE: enabled must be int */ Maybe verify(sizeof(socket) == sizeof(int))? > +static inline int socket_set_cork(int socket, int enabled) I'd drop the 'inline' > +{ > +return setsockopt(socket, IPPROTO_TCP, TCP_CORK, , > sizeof(enabled)); I suspect we'll need to add a configure check for this? It seems to be called TCP_NOPUSH in OpenBSD? https://man.openbsd.org/tcp > +} > + > static ssize_t stream_write_cb(RedStream *s, const void *buf, size_t size) > { > return write(s->socket, buf, size); > @@ -205,11 +217,31 @@ bool red_stream_write_all(RedStream *stream, const void > *in_buf, size_t n) > > bool red_stream_set_auto_flush(RedStream *s, bool enable) > { > -return enable; > +if (s->priv->use_cork == !enable) { Might be slightly more readable if 'enable' is renamed to 'auto_flush' Acked-by: Christophe Fergeau signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [PATCH spice-server 1/3] stream: implement interface for manual flush
Hey, I would just squash this with the next commit. On Tue, Jan 16, 2018 at 02:18:13PM +, Frediano Ziglio wrote: > The writing to network was always immediate. > Every write in the stream cause a write to the OS. 'causes' > This can have some penalty if you don't write large data as network > packets can be more fragmented or you encrypt data in smaller chunks > (when data are encrypted some padding is added then data is split in > multiple of encryption block which is usually the size of encryption > key and this is done for every write). > Define an interface to allow higher levels code to tell low level when > data should be sent to remote or when can wait more data. > > Signed-off-by: Frediano Ziglio> --- > server/red-stream.c | 9 + > server/red-stream.h | 20 > 2 files changed, 29 insertions(+) > > diff --git a/server/red-stream.c b/server/red-stream.c > index 8f2c9d32..4812d8e4 100644 > --- a/server/red-stream.c > +++ b/server/red-stream.c > @@ -203,6 +203,15 @@ bool red_stream_write_all(RedStream *stream, const void > *in_buf, size_t n) > return true; > } > > +bool red_stream_set_auto_flush(RedStream *s, bool enable) > +{ > +return enable; > +} > + > +void red_stream_flush(RedStream *s) > +{ > +} > + > #if HAVE_SASL > static ssize_t red_stream_sasl_write(RedStream *s, const void *buf, size_t > nbyte); > #endif > diff --git a/server/red-stream.h b/server/red-stream.h > index 4d5075ed..7338c75b 100644 > --- a/server/red-stream.h > +++ b/server/red-stream.h > @@ -69,6 +69,26 @@ bool red_stream_set_no_delay(RedStream *stream, bool > no_delay); > int red_stream_get_no_delay(RedStream *stream); > int red_stream_send_msgfd(RedStream *stream, int fd); > > +/** > + * Set auto flush flags. 'flag' > + * If set stream will send data to the underlying socket as 'If set, the stream will ...' > + * soon as data are written. This is the default. > + * If not set you should call red_stream_flush to force 'If not set, you should ...' > + * data to be sent. Failing to call red_stream_flush on a > + * manual flush stream could lead to latency. > + * Disabling auto flush can fail while enabling cannot. > + * > + * Returns true if success or false on failure. 'on success' maybe Acked-by: Christophe Fergeau > + */ > +bool red_stream_set_auto_flush(RedStream *stream, bool enable); > + > +/** > + * Flush data to the underlying socket. > + * Calling this function on a stream with auto flush set has > + * no result. > + */ > +void red_stream_flush(RedStream *stream); > + > typedef enum { > RED_SASL_ERROR_OK, > RED_SASL_ERROR_GENERIC, > -- > 2.14.3 > > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/spice-devel signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [qxl-wddm-dod] Prevent installation on OSes earlier than Windows 8
Hi, We received a bug report: https://github.com/virtio-win/kvm-guest-drivers-windows/issues/244 (BZ - Bug 1542909), regarding BSOD on Windows 7 when letting windows automatically choose the driver from virtio-win iso. After debugging the issue, we found out that Windows was falsely installing wddm drivers for Windows 7 instaed of xddm drivers, after discussing the issue, we decided to limit the installation of wddm drivers for Windows OSes starting from Windows 8 as a fix to this issue. Thanks, Basil Salman Basil Salman (1): Prevent installation on OSes earlier than Windows 8 qxldod/qxldod.inx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -- 2.7.0.windows.1 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] [qxl-wddm-dod] Prevent installation on OSes earlier than Windows 8
Limited the installation of the driver to Windows 8 and up in order to prevent false driver installation on unsupported OSes which lead to BSODs. Signed-off-by: Basil SalmanSigned-off-by: Sameeh Jubran --- qxldod/qxldod.inx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qxldod/qxldod.inx b/qxldod/qxldod.inx index 180275d..5c08305 100755 --- a/qxldod/qxldod.inx +++ b/qxldod/qxldod.inx @@ -35,9 +35,9 @@ QxlDod_Files_Driver = 12 ; [Manufacturer] -%RHEL%=RHEL,NT$ARCH$ +%RHEL%=RHEL,NT$ARCH$.6.2 -[RHEL.NT$ARCH$] +[RHEL.NT$ARCH$.6.2] %RHELQxl.DeviceDesc% = QxlDod_Inst, PCI\VEN_1B36_0100_11001AF4 [QxlDod_Files_Driver] -- 2.7.0.windows.1 ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [spice-server 1/2] cursor: Delay release of QXL guest cursor resources
> > On Thu, Apr 12, 2018 at 05:50:12AM -0400, Frediano Ziglio wrote: > > > > > > On Wed, Apr 11, 2018 at 01:24:59PM -0400, Frediano Ziglio wrote: > > > > > > > > > > There's an implicit API/ABI contract between QEMU and SPICE that > > > > > SPICE > > > > > will keep the guest QXL resources alive as long as QEMU can hold a > > > > > pointer to them. This implicit contract was broken in 1c6e7cf7 > > > > > "Release > > > > > cursor as soon as possible", causing crashes at migration time. > > > > > While the proper fix would be in QEMU so that spice-server does not > > > > > need > > > > > to have that kind of knowledge regarding QEMU internal > > > > > implementation, > > > > > this commit reverts to the pre-1c6e7cf7 behaviour to avoid a > > > > > regression > > > > > while QEMU is being fixed. > > > > > > > > > > This version of the fix is based on a suggestion from Frediano > > > > > Ziglio. > > > > > > > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1540919 > > > > > > > > > > Signed-off-by: Christophe Fergeau> > > > > --- > > > > > server/red-parse-qxl.c | 3 +++ > > > > > server/red-parse-qxl.h | 1 + > > > > > server/red-worker.c| 2 +- > > > > > 3 files changed, 5 insertions(+), 1 deletion(-) > > > > > > > > > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > > > > > index d0e7eb718..ebd7dcee7 100644 > > > > > --- a/server/red-parse-qxl.c > > > > > +++ b/server/red-parse-qxl.c > > > > > @@ -1497,4 +1497,7 @@ void red_put_cursor_cmd(RedCursorCmd *red) > > > > > red_put_cursor(>u.set.shape); > > > > > break; > > > > > } > > > > > +if (red->qxl) { > > > > > +red_qxl_release_resource(red->qxl, red->release_info_ext); > > > > > +} > > > > > } > > > > > > > > Yes, fix of my code is correct. > > > > However I cannot compile without the include! > > > > Why is compiling for you? Maybe you have another commit in? > > > > > > Yep, my bad, I did not test it independantly of other commits, I > > > squashed the missing #include in this commit. > > > > > > Christophe > > > > > > > Should not be #include "red-qxl.h" ? > > Yes, that, which is what I had squashed in ;) > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > index d0e7eb718..9f1303da3 100644 > --- a/server/red-parse-qxl.c > +++ b/server/red-parse-qxl.c > @@ -24,6 +24,7 @@ > #include > #include "spice-bitmap-utils.h" > #include "red-common.h" > +#include "red-qxl.h" > #include "memslot.h" > #include "red-parse-qxl.h" > > With that change: Acked-by: Frediano Ziglio Frediano ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [spice-server 1/2] cursor: Delay release of QXL guest cursor resources
On Thu, Apr 12, 2018 at 05:50:12AM -0400, Frediano Ziglio wrote: > > > > On Wed, Apr 11, 2018 at 01:24:59PM -0400, Frediano Ziglio wrote: > > > > > > > > There's an implicit API/ABI contract between QEMU and SPICE that SPICE > > > > will keep the guest QXL resources alive as long as QEMU can hold a > > > > pointer to them. This implicit contract was broken in 1c6e7cf7 "Release > > > > cursor as soon as possible", causing crashes at migration time. > > > > While the proper fix would be in QEMU so that spice-server does not need > > > > to have that kind of knowledge regarding QEMU internal implementation, > > > > this commit reverts to the pre-1c6e7cf7 behaviour to avoid a regression > > > > while QEMU is being fixed. > > > > > > > > This version of the fix is based on a suggestion from Frediano Ziglio. > > > > > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1540919 > > > > > > > > Signed-off-by: Christophe Fergeau> > > > --- > > > > server/red-parse-qxl.c | 3 +++ > > > > server/red-parse-qxl.h | 1 + > > > > server/red-worker.c| 2 +- > > > > 3 files changed, 5 insertions(+), 1 deletion(-) > > > > > > > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > > > > index d0e7eb718..ebd7dcee7 100644 > > > > --- a/server/red-parse-qxl.c > > > > +++ b/server/red-parse-qxl.c > > > > @@ -1497,4 +1497,7 @@ void red_put_cursor_cmd(RedCursorCmd *red) > > > > red_put_cursor(>u.set.shape); > > > > break; > > > > } > > > > +if (red->qxl) { > > > > +red_qxl_release_resource(red->qxl, red->release_info_ext); > > > > +} > > > > } > > > > > > Yes, fix of my code is correct. > > > However I cannot compile without the include! > > > Why is compiling for you? Maybe you have another commit in? > > > > Yep, my bad, I did not test it independantly of other commits, I > > squashed the missing #include in this commit. > > > > Christophe > > > > Should not be #include "red-qxl.h" ? Yes, that, which is what I had squashed in ;) diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c index d0e7eb718..9f1303da3 100644 --- a/server/red-parse-qxl.c +++ b/server/red-parse-qxl.c @@ -24,6 +24,7 @@ #include #include "spice-bitmap-utils.h" #include "red-common.h" +#include "red-qxl.h" #include "memslot.h" #include "red-parse-qxl.h" signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [spice-server 1/2] cursor: Delay release of QXL guest cursor resources
> > On Wed, Apr 11, 2018 at 01:24:59PM -0400, Frediano Ziglio wrote: > > > > > > There's an implicit API/ABI contract between QEMU and SPICE that SPICE > > > will keep the guest QXL resources alive as long as QEMU can hold a > > > pointer to them. This implicit contract was broken in 1c6e7cf7 "Release > > > cursor as soon as possible", causing crashes at migration time. > > > While the proper fix would be in QEMU so that spice-server does not need > > > to have that kind of knowledge regarding QEMU internal implementation, > > > this commit reverts to the pre-1c6e7cf7 behaviour to avoid a regression > > > while QEMU is being fixed. > > > > > > This version of the fix is based on a suggestion from Frediano Ziglio. > > > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1540919 > > > > > > Signed-off-by: Christophe Fergeau> > > --- > > > server/red-parse-qxl.c | 3 +++ > > > server/red-parse-qxl.h | 1 + > > > server/red-worker.c| 2 +- > > > 3 files changed, 5 insertions(+), 1 deletion(-) > > > > > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > > > index d0e7eb718..ebd7dcee7 100644 > > > --- a/server/red-parse-qxl.c > > > +++ b/server/red-parse-qxl.c > > > @@ -1497,4 +1497,7 @@ void red_put_cursor_cmd(RedCursorCmd *red) > > > red_put_cursor(>u.set.shape); > > > break; > > > } > > > +if (red->qxl) { > > > +red_qxl_release_resource(red->qxl, red->release_info_ext); > > > +} > > > } > > > > Yes, fix of my code is correct. > > However I cannot compile without the include! > > Why is compiling for you? Maybe you have another commit in? > > Yep, my bad, I did not test it independantly of other commits, I > squashed the missing #include in this commit. > > Christophe > Should not be #include "red-qxl.h" ? Frediano ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [spice-server 2/2] cursor: Rename cursor_marshall to red_marshall_cursor_command
On Wed, Apr 11, 2018 at 01:16:57PM -0400, Frediano Ziglio wrote: > > > > The name is more consistent with red_marshall_cursor_init. > > --- > > server/cursor-channel.c | 8 > > 1 file changed, 4 insertions(+), 4 deletions(-) > > > > Why command (so red_marshall_cursor) ? > The item is RED_PIPE_ITEM_TYPE_CURSOR. I find red_marshall_cursor misleading, especially with red_marshall_cursor_init. It might make sense it this was always setting the cursor shape, but this is not even the case, this might cause cursor to move, or to be hidden, This pipe item really wraps a RedCursorCommand. I can rename it too. Christophe > > > diff --git a/server/cursor-channel.c b/server/cursor-channel.c > > index 522261e3f..a549c5fe0 100644 > > --- a/server/cursor-channel.c > > +++ b/server/cursor-channel.c > > @@ -142,9 +142,9 @@ static void red_marshall_cursor_init(CursorChannelClient > > *ccc, SpiceMarshaller * > > spice_marshall_msg_cursor_init(base_marshaller, ); > > } > > > > -static void cursor_marshall(CursorChannelClient *ccc, > > -SpiceMarshaller *m, > > -RedCursorPipeItem *cursor_pipe_item) > > +static void red_marshall_cursor_command(CursorChannelClient *ccc, > > +SpiceMarshaller *m, > > +RedCursorPipeItem > > *cursor_pipe_item) > > { > > RedChannelClient *rcc = RED_CHANNEL_CLIENT(ccc); > > CursorChannel *cursor_channel = > > CURSOR_CHANNEL(red_channel_client_get_channel(rcc)); > > @@ -212,7 +212,7 @@ static void cursor_channel_send_item(RedChannelClient > > *rcc, RedPipeItem *pipe_it > > > > switch (pipe_item->type) { > > case RED_PIPE_ITEM_TYPE_CURSOR: > > -cursor_marshall(ccc, m, SPICE_UPCAST(RedCursorPipeItem, > > pipe_item)); > > +red_marshall_cursor_command(ccc, m, SPICE_UPCAST(RedCursorPipeItem, > > pipe_item)); > > break; > > case RED_PIPE_ITEM_TYPE_INVAL_ONE: > > red_marshall_inval(rcc, m, SPICE_CONTAINEROF(pipe_item, > > RedCacheItem, u.pipe_data)); > > Frediano > ___ > Spice-devel mailing list > Spice-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/spice-devel signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
Re: [Spice-devel] [spice-server 1/2] cursor: Delay release of QXL guest cursor resources
On Wed, Apr 11, 2018 at 01:24:59PM -0400, Frediano Ziglio wrote: > > > > There's an implicit API/ABI contract between QEMU and SPICE that SPICE > > will keep the guest QXL resources alive as long as QEMU can hold a > > pointer to them. This implicit contract was broken in 1c6e7cf7 "Release > > cursor as soon as possible", causing crashes at migration time. > > While the proper fix would be in QEMU so that spice-server does not need > > to have that kind of knowledge regarding QEMU internal implementation, > > this commit reverts to the pre-1c6e7cf7 behaviour to avoid a regression > > while QEMU is being fixed. > > > > This version of the fix is based on a suggestion from Frediano Ziglio. > > > > https://bugzilla.redhat.com/show_bug.cgi?id=1540919 > > > > Signed-off-by: Christophe Fergeau> > --- > > server/red-parse-qxl.c | 3 +++ > > server/red-parse-qxl.h | 1 + > > server/red-worker.c| 2 +- > > 3 files changed, 5 insertions(+), 1 deletion(-) > > > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c > > index d0e7eb718..ebd7dcee7 100644 > > --- a/server/red-parse-qxl.c > > +++ b/server/red-parse-qxl.c > > @@ -1497,4 +1497,7 @@ void red_put_cursor_cmd(RedCursorCmd *red) > > red_put_cursor(>u.set.shape); > > break; > > } > > +if (red->qxl) { > > +red_qxl_release_resource(red->qxl, red->release_info_ext); > > +} > > } > > Yes, fix of my code is correct. > However I cannot compile without the include! > Why is compiling for you? Maybe you have another commit in? Yep, my bad, I did not test it independantly of other commits, I squashed the missing #include in this commit. Christophe signature.asc Description: PGP signature ___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel
[Spice-devel] not clear how to use streaming agent
hi, I use spice for remote view, I want to captures the guest video output, encodes it and send through, so I choose streaming agent, how to build and run it is not clear, can you help me? 1.host environment and Software version: centOS(Mini install) GVT-g kernel: https://github.com/intel/gvt-linux/ (branch: topic/dmabuf) QEMU: https://github.com/intel/igvtg-qemu (branch: qa/dma_buf) streming agent:https://gitlab.com/spice/spice-streaming-agent spice-server version:0.13.3 spice-protocol version:0.12.12 2.build info kernel: make -j 8 make modules_install && make install reboot qemu: ./configure --prefix=/usr --enable-kvm --disable-xen --enable-debug-info --enable-debug --enable-sdl --enable-vhost-net --enable-spice --disable-debug-tcg --enable-numa --enable-libusb --enable-curl --enable-usb-redir --enable-linux-aio --target-list=x86_64-softmmu --enable-gtk --with-gtkabi=3.0 make -j 8 cd roms/seabios make -j 8 cd - make install cp roms/seabios/out/bios.bin /usr/bin/bios.bin spice-protocol: ./configure --prefix=/usr make -j 8 make install spice-service: ./configure --prefix=/usr --enable-manual=no --disable-silent-rules --disable-smartcard --disable-celt051 --enable-client CFLAGS="-g -O0" CXXFLAGS="-g -O0" make -j 8 make install streming agent ./autogen.sh make -j 8 make install 3.run qemu /usr/bin/qemu-system-x86_64 \ -m 8192 \ -smp 4,sockets=1,cores=4,threads=1 \ -M pc \ -name win71 \ -hda /Image/vm/win7_base.img \ -bios /usr/bin/bios.bin -enable-kvm \ -k en-us \ -vga none \ -display egl-headless \ -spice disable-ticketing,port=6901,streaming-video=off \ -machine kernel_irqchip=on,usb=on \ -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 \ -cpu host -device usb-tablet \ -device vfio-pci,sysfsdev=/sys/bus/pci/devices/:00:02.0/5b8d581a-2dc9-11e8-8238-000906258002,x-display=on,x-igd-opregion=on -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel1,id=channel1,name=org.spice-space.stream.0 -chardev spiceport,name=org.spice-space.stream.0,id=charchannel1 questions: I am not clear How to use streaming agent and validate it, can you help me? thank you!___ Spice-devel mailing list Spice-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/spice-devel