[Spice-devel] [master PATCH 2/2] server: netstat: send random data not zeros

Alon Levy alevy at redhat.com
Wed Oct 19 00:10:53 PDT 2011


On Tue, Oct 18, 2011 at 11:50:37PM +0200, Yaniv Kaul wrote:
> On 18/10/2011 19:20, Uri Lublin wrote:
> >WAN accelerators may compress the zeros which results with a
> >wrong bandwidth calculation.
> 
> Is this really the right approach? Why not calculate the latency
> based on the time it takes to send the first image?
> That image is not using the WAN feature anyway, regardless of its
> being set or not.
> A waste of 256K, and possibly several seconds on WAN. Hundreds of
> packets, for sure.
> Y.
> 

Of course it isn't the right approach. We should be accounting the
already sent bytes, including the first image and later. It's just more
work. This patch fixes the current measurement.

> >
> >The buffer is initialized once.
> >---
> >  server/main_channel.c |   32 ++++++++++++++++++++++++++++----
> >  1 files changed, 28 insertions(+), 4 deletions(-)
> >
> >diff --git a/server/main_channel.c b/server/main_channel.c
> >index a4db724..3a94066 100644
> >--- a/server/main_channel.c
> >+++ b/server/main_channel.c
> >@@ -34,6 +34,7 @@
> >  #include<fcntl.h>
> >  #include<errno.h>
> >  #include<ctype.h>
> >+#include<stdlib.h>
> >
> >  #include "server/red_common.h"
> >  #include "server/demarshallers.h"
> >@@ -44,7 +45,7 @@
> >  #include "red_channel.h"
> >  #include "generated_marshallers.h"
> >
> >-#define ZERO_BUF_SIZE 4096
> >+#define RANDOM_BUF_SIZE 4096
> >
> >  // approximate max receive message size for main channel
> >  #define RECEIVE_BUF_SIZE \
> >@@ -57,7 +58,7 @@
> >
> >  #define PING_INTERVAL (1000 * 10)
> >
> >-static uint8_t zero_page[ZERO_BUF_SIZE] = {0};
> >+static uint8_t random_page[RANDOM_BUF_SIZE];
> >
> >  typedef struct RedsOutItem RedsOutItem;
> >  struct RedsOutItem {
> >@@ -155,6 +156,28 @@ enum NetTestStage {
> >      NET_TEST_STAGE_RATE,
> >  };
> >
> >+
> >+static void random_page_init(void)
> >+{
> >+    static int done = 0; /* do it only once */
> >+    int i, n;
> >+    uint32_t *p = (uint32_t*)random_page;
> >+
> >+    if (done)
> >+        return;
> >+    done = 1;
> >+
> >+    /* assuming devides with no remainder. otherwise some zeros at the end */
> >+    n = sizeof(random_page) / sizeof(uint32_t);
> >+
> >+    srandom(time(NULL));
> >+    for (i=0; i<n; i++, p++) {
> >+        *p = random();
> >+    }
> >+
> >+}
> >+
> >+
> >  int main_channel_is_connected(MainChannel *main_chan)
> >  {
> >      return red_channel_is_connected(&main_chan->base);
> >@@ -370,9 +393,9 @@ static void main_channel_marshall_ping(SpiceMarshaller *m, int size, int ping_id
> >      spice_marshall_msg_ping(m,&ping);
> >
> >      while (size>  0) {
> >-        int now = MIN(ZERO_BUF_SIZE, size);
> >+        int now = MIN(RANDOM_BUF_SIZE, size);
> >          size -= now;
> >-        spice_marshaller_add_ref(m, zero_page, now);
> >+        spice_marshaller_add_ref(m, random_page, now);
> >      }
> >  }
> >
> >@@ -982,6 +1005,7 @@ MainChannel* main_channel_init(void)
> >      RedChannel *channel;
> >      ChannelCbs channel_cbs;
> >
> >+    random_page_init();
> >
> >      channel_cbs.config_socket = main_channel_config_socket;
> >      channel_cbs.on_disconnect = main_channel_client_on_disconnect;
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list