Παρατηρήσεις για το sockbench

Περιγραφές για τις υπηρεσίες που προσφέρει το δίκτυο και οι χρήστες του
Post Reply
User avatar
sf1n4k1
Pentium IV
Posts: 2046
Joined: Thu Mar 08, 2007 9:11 am
PWMN Wind Node ID: 95
Location: Rio

Post by sf1n4k1 »

Δλδ αν βάλει turbo/nstream πόσο θα πιάσει 8ΜΒ?Μέτρια προς μούφα λέω..και τέλος.!Εσυ panoulix μη πετάγεσαι είσαι newfis.


1 2 ms 2 ms 2 ms 10.140.15.10
2 3 ms 3 ms 3 ms antirrio-rio.bb.pwmn [10.140.200.93]
3 9 ms 13 ms 11 ms 10.140.200.90
4 11 ms 5 ms 5 ms pf-agyia.bb.pwmn [10.143.254.41]
5 12 ms 6 ms 22 ms agyia-zion.bb.pwmn [10.143.254.5]
6 9 ms 5 ms 6 ms zion-liberty.bb.pwmn [10.143.254.53]
7 1446 ms 13 ms 10 ms ap.liberty.pwmn [10.143.9.1]

Έτσι τυχαία..και μη μου πεις οτι κατέβαζες σάπιε trv

:P

Στατιστικά στοιχεία Ping για 10.143.9.1 απο Ρίο:
Πακέτα: Απεσταλμένα = 41, Ληφθέντα = 41, Απολεσθέντα = 0 (απώλεια 0%),
Πλήθος διαδρομών αποστολής και επιστροφής κατά προσέγγιση σε χιλιοστά του δευτερ
ολέπτου:
Ελάχιστο = 6ms, Μέγιστο = 96ms, Μέσος όρος = 16ms


Έυγε..:-) μέχρι να σαπίσεις πάλι

Ps Το γνωστό sockbench που τρέχει στα debianakia σας απέχει πολύ απ τις "πραγματικές" (απ την πράξη ftp/p2p) ταχύτητες..αν μετρήθηκαν με αυτό. Αν πιάνεις 3.6MΒ (28Mbps) με ftp απο αγυιά-liberty με απλό 5Ghz τότε είμαι ο Πάπας της Ρώμης.
:twisted:
:twisted: :twisted:
Last edited by sf1n4k1 on Tue Dec 04, 2007 12:30 am, edited 4 times in total.

mp
AMD Athlon
Posts: 813
Joined: Sat Mar 10, 2007 12:51 pm
PWMN Wind Node ID: 320

Post by mp »

sf1n4k1 wrote:Δλδ αν βάλει turbo/nstream πόσο θα πιάσει 8ΜΒ?Μέτρια προς μούφα λέω..και τέλος.!Εσυ panoulix μη πετάγεσαι είσαι newfis.


1 2 ms 2 ms 2 ms 10.140.15.10
2 3 ms 3 ms 3 ms antirrio-rio.bb.pwmn [10.140.200.93]
3 9 ms 13 ms 11 ms 10.140.200.90
4 11 ms 5 ms 5 ms pf-agyia.bb.pwmn [10.143.254.41]
5 12 ms 6 ms 22 ms agyia-zion.bb.pwmn [10.143.254.5]
6 9 ms 5 ms 6 ms zion-liberty.bb.pwmn [10.143.254.53]
7 1446 ms 13 ms 10 ms ap.liberty.pwmn [10.143.9.1]

Έτσι τυχαία..και μη μου πεις οτι κατέβαζες σάπιε trv

:P
Θανάση, αυτό το 1446ms δε σημαίνει πως είναι καθυστέρηση μεταξύ zion και liberty. Το traceroute στέλνει ένα πακέτο icmp echo με αυξανόμενο TTL κατά 1 κάθε φορά, αλλά πάντα από το source που είσαι εσύ. Που σημαίνει πως αυτά τα 1446ms μπορεί να καθυστέρησαν οπουδήποτε μεταξύ της διαδρομής από Ρίο ως Liberty.

sf1n4k1 wrote:Ps Το γνωστό sockbench που τρέχει στα debianakia σας απέχει πολύ απ τις "πραγματικές" (απ την πράξη ftp/p2p) ταχύτητες..αν μετρήθηκαν με αυτό. Αν πιάνεις 3.6MΒ (28Mbps) με ftp απο αγυιά-liberty με απλό 5Ghz τότε είμαι ο Πάπας της Ρώμης.
:twisted:
:twisted: :twisted:
Το sockbench στέλνει ένα stream από data που μπορούν να συμπιεστούν από το compression της atheros, αν αυτό είναι ενεργοποιημένο. Αυτό είναι το μόνο σημείο που μπορεί να "ξεγελάσει" τη μέτρηση. Δε ξέρουμε όμως αν το compression είναι ενεργοποιημένο στα links του zion. Αν θυμάμαι καλά είναι ενεργοποιημένο με Αγυιά αλλά όχι με liberty.

Οι atheros δίνουν μέχρι 4,2MB/sec ασυμπίεστα στα 54Mbit, αν το SNR είναι πάνω από 30db σταθερά. Οπότε είναι πολύ πιθανό τα νούμερα να είναι πραγματικά.

Μπορώ να κάνω build μία έκδοση του sockbench που να στέλνει pseudo-random data για να μην επηρεάζεται από τυχόν συμπίεση.

mp

edit: Τελικά τα data του sockbench είναι σχετικά "τυχαία". Συγκεκριμένα χρησιμοποιείται η εξής ρουτίνα για randomize:

Code: Select all

void randomize_data(void)
{
   int i;
   
   for (i=0;i<DATA_BUFFER_LENGTH;i++) buffer[i]=(i*i+i);
}
το οποίο αντιστοιχεί σε ένα κομμάτι των 16ΚΒ. Κάθε κομμάτι των 16KB είναι ίδιο, αλλά αυτό δεν επηρεάζει τη συμπίεση των atheros που είναι per frame. Άρα, μπορεί να μην είναι πραγματικά τυχαία αλλά σίγουρα δεν είναι συμπιέσιμα σε μεγάλο βαθμό. Παρ' ολ' αυτά, αν θέλουμε περισσότερο random data, αντικαταστήστε στον παραπάνω κώδικα με buffer=random(); και είστε OK.

mp

User avatar
sf1n4k1
Pentium IV
Posts: 2046
Joined: Thu Mar 08, 2007 9:11 am
PWMN Wind Node ID: 95
Location: Rio

Post by sf1n4k1 »

Nice:-)

Τα παραπάνω που είπα τα είδα στην πράξη γι αυτό και το ανέφερα..px το sockbench να λέει 3MB και στην πραγματικότητα να μη περνάει πάνω απο 2.4ΜΒ σε ftp..δεν ξέρω τι αλλαγές έκανε ο pf στον κώδικα..αλλά το δικό του sockbench είναι πιο κοντά στην πραγματικότητα.

Ps Για το traceroute χαβαλέ έκανα..αν και νόμιζα οτι μετράει απο hop σε hop τα ms..και όχι απ τον αρχικό προορισμό. Επίσης αν δείς είναι στο 9.1 που είναι το Cisco-AP και όχι στο 9.2 που είναι το router..άρα μπορεί να παίχτηκε και κάτι εκεί..είχε κάτι σκαλώματα απο παλιά το router-cisco connection:-)

User avatar
korkakak
AMD Athlon
Posts: 992
Joined: Wed Mar 07, 2007 11:52 pm
PWMN Wind Node ID: 87
Location: Πλατεία Όλγας

Post by korkakak »

mp wrote:

Code: Select all

void randomize_data(void)
{
   int i;
   
   for (i=0;i<DATA_BUFFER_LENGTH;i++) buffer[i]=(i*i+i);
}
Μια που το έχει πρόχειρο, το buffer πως ορίζεται?
Το DATA_BUFFER_LENGTH είναι 2^16 ?
Voilà! In view, a humble vaudevillian veteran, cast vicariously as both victim and villain by the vicissitudes of Fate. This visage, no mere veneer of vanity, is a vestige of the vox populi, now vacant, vanished. However, this valorous visitation of a by-gone vexation, stands vivified and has vowed to vanquish these venal and virulent vermin van-guarding vice and vouchsafing the violently vicious and voracious violation of volition.

ΠΡΟΣΦΕΡΕΤΕ ΕΝΕΡΓΑ ΣΤΗΝ ΚΟΙΝΟΤΗΤΑ! ΕΜΠΛΟΥΤΙΣΤΕ ΤΟ wiki

:arrow: my blog

mp
AMD Athlon
Posts: 813
Joined: Sat Mar 10, 2007 12:51 pm
PWMN Wind Node ID: 320

Post by mp »

sockbench_linux.c source. Copyright jnk

Code: Select all

#include <stdio.h>
#include <errno.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>


#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <netdb.h>


#define MODE_LISTEN 1
#define MODE_CONNECT 2

int mode=MODE_LISTEN;
int port=5623;
char host[1024]={"localhost"};

#define DATA_LENGTH (1024*1024*1024)
#define DATA_BUFFER_LENGTH (1024*16)
char buffer[DATA_BUFFER_LENGTH];

void usage(void);
void randomize_data(void);
void do_listen(void);
void do_connect(void);
void do_bench_host(int fh);
void do_bench_client(int fh);


main(int argc, char * argv[])
{
   char * v;
   
   if (!--argc) usage();
   while (argc)
   {
      v=*++argv;argc--;
      if (*v!='-') usage();
      switch (*++v)
      {
         case 'l':
            mode=MODE_LISTEN;
            break;
            
         case 'c':
            mode=MODE_CONNECT;
            if (*++v) strcpy(host, v);
            else {
               if (!argc) usage();
               v=*++argv;argc--;
               if (*v=='-') usage();
               strcpy(host,v);
            }
            break;
            
         case 'p':
            if (*++v) port=atoi(v);
            else {
               if (!argc) usage();
               v=*++argv;argc--;
               if (*v=='-') usage();
               port=atoi(v);
            }
            if (!port) usage();
            break;
         default:
            usage();
         
      }
   }
   
   randomize_data();
   
   mode == MODE_LISTEN ? do_listen() : do_connect();
   
}


void usage(void)
{
   printf("sockbench version 0.1\n\
Usage:   sockbench -l [-p port]\n\
   sockbench -c host [-p port]\n\
\n\
");
exit(0);
}


void randomize_data(void)
{
   int i;
   
   for (i=0;i<DATA_BUFFER_LENGTH;i++) buffer[i]=(i*i+i);
}


void do_listen(void)
{
   int fh, fhl;
   struct protoent * pprotoent;
   struct sockaddr_in sockaddr_in;
   struct sockaddr_in remote_sockaddr_in;
   socklen_t addrlen;

   if (!(pprotoent = getprotobyname("tcp"))) {perror("getprotobyname");exit(0);}
   if ( (fhl = socket(AF_INET, SOCK_STREAM, pprotoent->p_proto)) == -1) {perror("socket");exit(0);}
   sockaddr_in.sin_family = AF_INET;
   memset(&sockaddr_in.sin_addr.s_addr, 0, sizeof(struct in_addr));
   sockaddr_in.sin_port = htons(port);

   if ( bind(fhl, (struct sockaddr *) &sockaddr_in, sizeof(struct sockaddr)) == -1 ) {perror("bind");exit(0);}
   if ( listen(fhl, 10) == -1 ) {perror("listen");exit(0);}
   
   printf("waiting for data\n");
   while (1)
   {
      if ( ( fh = accept(fhl, (struct sockaddr *) &remote_sockaddr_in, &addrlen)) != -1 ) break;
      if (errno!=EAGAIN) {perror("accept");exit(0);}
   }

   printf("connected\n");
   
   close(fhl);

   do_bench_host(fh);
}


void do_connect(void)
{
   int fh;
   struct protoent * pprotoent;
   struct in_addr in_addr;
   struct sockaddr_in sockaddr_in;
   struct hostent * phostent;
                               
   if (!inet_aton(host, &in_addr))
   {
      if ( (phostent=gethostbyname(host)) == NULL )
      {
         switch (h_errno)
         {
            case HOST_NOT_FOUND:
               fprintf(stderr, "%s: host not found", host);
               break;
            case NO_ADDRESS:
               fprintf(stderr, "%s: no address for host",host);
               break;
            default:
               fprintf(stderr, "%s: name server error",host);
               break;
         }
         exit(0);
      }
      else
      {
         memcpy(&in_addr.s_addr, phostent->h_addr_list[0], phostent->h_length);
      }
   }
   
   if (!(pprotoent = getprotobyname("tcp"))) {perror("pprotoent");exit(0);}
   
   if ( (fh = socket(AF_INET, SOCK_STREAM, pprotoent->p_proto)) == -1) {perror("socket");exit(0);}
   
   sockaddr_in.sin_family = AF_INET;
        memcpy(&sockaddr_in.sin_addr.s_addr, &in_addr, sizeof(in_addr));
        sockaddr_in.sin_port = htons(port);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
        if (connect(fh, (struct sockaddr *) &sockaddr_in, sizeof(struct sockaddr))) {perror("connect");exit(0);}
       
        printf("connected\n");
       
        do_bench_client(fh);
}


void do_bench_host(int fh)
{
   int i=0, bytesread, t1, t2;
   
   printf("receiving data\n");
   
   t1=t2=time(NULL);
   while (i<DATA_LENGTH)
   {
      while ( (bytesread=read(fh, buffer, DATA_BUFFER_LENGTH)) == -1 && errno == EAGAIN ) ;
      if (bytesread==-1) {perror("read");exit(0);}
      if (bytesread==0) {fprintf(stderr, "eof");exit(0);}
      i+=bytesread;

      if (time(NULL)>t2)
      {
         t2=time(NULL);      
         fprintf(stdout, "%i (%i bytes/sec)   \r", i, i/(t2-t1));
         fflush(stdout);
      }
      

   }
   close(fh);
   
   
   printf("\ndone\n");
   exit(0);
}


void do_bench_client(int fh)
{
   int i=0, towrite, t1, t2;
   
   printf("sending data\n");
   
   t1=t2=time(NULL);
   while (i<DATA_LENGTH)
   {
      towrite = DATA_LENGTH-i > DATA_BUFFER_LENGTH ? DATA_BUFFER_LENGTH : DATA_LENGTH-i;
      if ( write(fh, buffer, towrite) != towrite ) {perror("write");exit(0);}
      i+=towrite;
      
      if (time(NULL)>t2)
      {
         t2=time(NULL);      
         fprintf(stdout, "%i (%i bytes/sec)   \r", i, i/(t2-t1));
         fflush(stdout);
      }
   }
   close(fh);
   
   printf("\ndone\n");
   exit(0);
} 
mp

User avatar
korkakak
AMD Athlon
Posts: 992
Joined: Wed Mar 07, 2007 11:52 pm
PWMN Wind Node ID: 87
Location: Πλατεία Όλγας

Post by korkakak »

H randomize εκ πρώτης οψεως δείχνει καλά αποτελέσματα με πολύ καλή κατανομή της cdf. Στον χ είναι τα σύμβολα (byte represented sto 10diko) Στον y η η πιθανότητα P(X<=x) .

Μάλλον κάτι άλλο φταίει για την ασυνέπεια πραγματικών και sockbench based αποτελεσμάτων.

Image
Voilà! In view, a humble vaudevillian veteran, cast vicariously as both victim and villain by the vicissitudes of Fate. This visage, no mere veneer of vanity, is a vestige of the vox populi, now vacant, vanished. However, this valorous visitation of a by-gone vexation, stands vivified and has vowed to vanquish these venal and virulent vermin van-guarding vice and vouchsafing the violently vicious and voracious violation of volition.

ΠΡΟΣΦΕΡΕΤΕ ΕΝΕΡΓΑ ΣΤΗΝ ΚΟΙΝΟΤΗΤΑ! ΕΜΠΛΟΥΤΙΣΤΕ ΤΟ wiki

:arrow: my blog

mp
AMD Athlon
Posts: 813
Joined: Sat Mar 10, 2007 12:51 pm
PWMN Wind Node ID: 320

Post by mp »

@korki: Εγώ έκανα κάτι πιο πρακτικό. Ένα file με 1 block 16KB με data generated από την randomise του sockbench συμπιέζεται με gzip στα 600 bytes. Αντίθετα, αν χρησιμοποιηθεί η random(), το ίδιο block δε συμπιέζεται καθόλου.

mp

edit: Για να μη χαλάμε το παρόν thread, μπορούν να μεταφερθούν σε ένα νέο thread "Περί sockbench"

trv
486
Posts: 291
Joined: Mon Mar 12, 2007 2:47 pm
PWMN Wind Node ID: 0

Post by trv »

korkakak wrote:Μάλλον κάτι άλλο φταίει για την ασυνέπεια πραγματικών και sockbench based αποτελεσμάτων.
Εγω παντως τετοια ασυνεπεια δεν εχω παρατηρησει μεχρι τωρα ποτε.

Το απογευμα αν υπαρξει χρονος απο μενα και sostim θα κανουμε ftp test.

Post Reply