[libvirt] [PATCH 9/9] virStream{Recv, Send}All: Increase client buffer

John Ferlan jferlan at redhat.com
Wed Apr 20 13:58:07 UTC 2016



On 04/15/2016 09:51 AM, Michal Privoznik wrote:
> These are wrappers over virStreamRecv and virStreamSend so that
> users have to care about nothing but writing data into / reading
> data from a sink (typically a file). Note, that these wrappers
> are used exclusively on client side as the daemon has slightly
> different approach. Anyway, the wrappers allocate this buffer and
> use it for intermediate data storage until the data is passed to
> stream to send, or to the client application. So far, we are
> using 64KB buffer. This is enough, but suboptimal because server
> can send messages up to VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX bytes
> big (262120B, roughly 256KB). So if we make the buffer this big,
> a single message containing the data is sent instead of for,
                                                          ^^^
I assume you mean, "s/for/four"

John

> which is current situation. This means lower overhead, because
> each message contains a header which needs to be processed, each
> message is processed roughly same amount of time regardless of
> its size, less bytes need to be sent through the wire, and so on.
> Note that since server will never sent us a stream message bigger
> than VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX there's no point in
> sizing up the client buffer past this threshold.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  src/libvirt-stream.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libvirt-stream.c b/src/libvirt-stream.c
> index c16f586..8384b37 100644
> --- a/src/libvirt-stream.c
> +++ b/src/libvirt-stream.c
> @@ -23,6 +23,7 @@
>  #include "datatypes.h"
>  #include "viralloc.h"
>  #include "virlog.h"
> +#include "rpc/virnetprotocol.h"
>  
>  VIR_LOG_INIT("libvirt.stream");
>  
> @@ -330,7 +331,7 @@ virStreamSendAll(virStreamPtr stream,
>                   void *opaque)
>  {
>      char *bytes = NULL;
> -    int want = 1024*64;
> +    size_t want = VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX;
>      int ret = -1;
>      VIR_DEBUG("stream=%p, handler=%p, opaque=%p", stream, handler, opaque);
>  
> @@ -423,7 +424,7 @@ virStreamRecvAll(virStreamPtr stream,
>                   void *opaque)
>  {
>      char *bytes = NULL;
> -    int want = 1024*64;
> +    size_t want = VIR_NET_MESSAGE_LEGACY_PAYLOAD_MAX;
>      int ret = -1;
>      VIR_DEBUG("stream=%p, handler=%p, opaque=%p", stream, handler, opaque);
>  
> 




More information about the libvir-list mailing list