On Sun, Jun 17, 2012 at 01:08:25AM +0200, Alexander Hall wrote:
> On 06/16/12 01:07, Christiano F. Haesbaert wrote:
> >Hi, this behaviour is really annoying, in tcp server, when the last
> >user disconnects, we don't update the status line, so it keeps showing
> >1 connected user, it would be better to show Conn: 0.
> >
> >BEFORE
> >
> >sauron:haesbaert: tcpbench -s
> >   elapsed_ms          bytes         mbps   bwidth
> >         1000      645674612     5165.397  100.00%
> >Conn:   1 Mbps:     5165.397 Peak Mbps:     5165.397 Avg Mbps:     5165.397
> >         2000      673254000     5386.032  100.00%
> >Conn:   1 Mbps:     5386.032 Peak Mbps:     5386.032 Avg Mbps:     5386.032
> >
> >
> >AFTER
> >
> >
> >gimli:obj: ./tcpbench -s
> >   elapsed_ms          bytes         mbps   bwidth
> >         1000      314833908     2518.671  100.00%
> >Conn:   1 Mbps:     2518.671 Peak Mbps:     2518.671 Avg Mbps:     2518.671
> >Conn:   0 Mbps:        0.000 Peak Mbps:     2518.671 Avg Mbps:        0.000
> 
> NAN might be more appropriate than 0.

Why is that ?

> 
> >
> >
> >
> >Also, only start timer if this is the first connection, this prevents
> >the display from not running while we have clients connecting (since
> >it always pushes the display 1 second in the future).
> 
> Are you sure about this? Looking at the code, I didn't get that
> impression (not that I claim to know much about event(3)), but
> adding a new connection every 0.5 seconds did not stop the output
> either.

You're correct, my mistake I had missed the following in
set_slice_timer():

                if (evtimer_pending(&mainstats.timer, NULL))
                        return;

Even though I think it makes more sense, no ?

> 
> You might also want sth like this, for completeness:
> 
> @@ -1208,6 +1210,7 @@ main(int argc, char **argv)
>         } else {
>                 print_tcp_header();
>                 evtimer_set(&mainstats.timer, tcp_process_slice, NULL);
> +               tcp_process_slice(0, 0, NULL);

I considered adding:
+               timerclear(&tv);
+               evtimer_add(&mainstats.timer, &tv);             

But the output looks funky since the headers don't match the output:

./tcpbench -s                                                    
  elapsed_ms          bytes         mbps   bwidth 
Conn:   0 Mbps:        0.000 Peak Mbps:        0.000 Avg Mbps:        0.000

But I'm not too strong about it.


>         }
> 
>         if (ptb->sflag)
> 
> /Alexander
> 
> >
> >
> >Index: tcpbench.c
> >===================================================================
> >RCS file: /cvs/src/usr.bin/tcpbench/tcpbench.c,v
> >retrieving revision 1.35
> >diff -d -u -p -r1.35 tcpbench.c
> >--- tcpbench.c       8 May 2012 01:39:58 -0000       1.35
> >+++ tcpbench.c       15 Jun 2012 23:04:23 -0000
> >@@ -568,7 +568,7 @@ tcp_process_slice(int fd, short event, v
> >             mainstats.peak_mbps = slice_mbps;
> >     printf("Conn: %3d Mbps: %12.3Lf Peak Mbps: %12.3Lf Avg Mbps: %12.3Lf\n",
> >         mainstats.nconns, slice_mbps, mainstats.peak_mbps,
> >-        slice_mbps / mainstats.nconns);
> >+        mainstats.nconns ? slice_mbps / mainstats.nconns : 0);
> >     mainstats.slice_bytes = 0;
> >
> >     set_slice_timer(mainstats.nconns>  0);
> >@@ -657,7 +657,6 @@ tcp_server_handle_sc(int fd, short event
> >
> >             free(sc);
> >             mainstats.nconns--;
> >-            set_slice_timer(mainstats.nconns>  0);
> >             return;
> >     }
> >     if (ptb->vflag>= 3)
> >@@ -723,7 +722,8 @@ tcp_server_accept(int fd, short event, v
> >     event_add(&sc->ev, NULL);
> >     TAILQ_INSERT_TAIL(&sc_queue, sc, entry);
> >     mainstats.nconns++;
> >-    set_slice_timer(mainstats.nconns>  0);
> >+    if (mainstats.nconns == 1)
> >+            set_slice_timer(1);
> >     if (ptb->vflag)
> >             fprintf(stderr, "Accepted connection from %s, fd = %d\n",
> >                 tmp, sc->fd);
> >@@ -934,7 +934,8 @@ client_init(struct addrinfo *aitop, int
> >             event_add(&sc->ev, NULL);
> >             TAILQ_INSERT_TAIL(&sc_queue, sc, entry);
> >             mainstats.nconns++;
> >-            set_slice_timer(mainstats.nconns>  0);
> >+            if (mainstats.nconns == 1)
> >+                    set_slice_timer(1);
> >     }
> >     freeaddrinfo(aitop);
> >     if (aib != NULL)

Reply via email to