ticks praeziser herausholen, wie?



  • Hallo Zusammen,

    Ich schicke ein bestimmmtes Mal Daten von Client zu Server hintereinander.
    Auf der Server Seite wird eine Zeitmessung gemacht, wie lange fuer jedes
    empfangenen Element gebraucht wird, zu parsen. Nun ich habe
    das Problem, dass die gemessenen Ticks mit 10000er erhoeht werden(dadurch
    unpraezis).

    In dem Log datei stehen "0" ticks fuer erste 456 Elemente und ploetzlich
    bei 457.te element steht der tick auf "10000" Wert. Bis zum 569.te Element
    steht der Tick-Wert noch auf dasselbe "10000", ploetzlich wird der Wert beim
    570.te Element zu "20000" inkrementiert.

    Aus der Log datei (vierte spalte ist Ticks):

    0       17      17      0
    1       17      34      0
    2       17      51      0
    ....
    455     17      7752    0
    456     17      7769    0
    457     17      7786    10000
    458     17      7803    10000
    ...
    568     17      9673    10000
    569     17      9690    10000
    570     17      9707    20000
    571     17      9724    20000
    ...
    

    Und mit solcher hohen Inkrementierung geht es immer weiter in der Log datei...
    Der Code wo Zeitmessung stattfindet:

    /* .. */ 
    clock_t start, finish ;
    signal(SIGINT,proc2cont) ; /* sig handler fuer ausgabe der gespeicherten elem */
    /* .. */
    
     start = clock() ; /* zeit auf 0 gesetzt */ 
        while( (received = recvfrom(sockfd, buffer, BIN_BUF_LEN-1 , 0, 
    (struct sockaddr *) &client, &sin_size )) > -1){ /*standard udp receive */
    
            ptr = buffer ;
            if(!parse_raw_data(&proc_list[counter], ptr, BIN_BUF_LEN-1)){
                fprintf(stderr,"%ldth proc has no valid packet\n",counter) ;
            }
            finish = clock() ; 
            proc_list[counter].cumulative_time = finish - start ; /* differenz gespeichert */ 
              /* finish-start wird als %ld bei proc2cont in datei ausgegeben. */ 
        counter++ ;
        }
    

    Was ich nicht verstehe ist, dass die Inkrementierung anstatt 10er, 100er ticks
    mit 10000er stattfindet. Ok, die Groesse jedes Element, die vom Client
    geschickt wird, schwankt zwischen 17 und 160 byte.Also nicht gross...
    Trotzdem sollte es moeglich sein, mit clock() bessere Aufloesung zu erzielen.
    Gibt clock() nicht die ticks aus, die ein Prozessor gemacht hat? Wie komme ich
    auf ne bessere Aufloesung?

    Gruss,



  • weiss auch nicht, warum 'clock()' bei dir so schlecht auflöst, aber versuch's doch mal mit 'gettimeofday()'
    🙂



  • Hallo freak,

    timer-freak schrieb:

    weiss auch nicht, warum 'clock()' bei dir so schlecht auflöst, aber versuch's doch mal mit 'gettimeofday()'
    🙂

    danke fuer die Posting. ja also, bin mittlerweile bissl' weitergekommen.

    clock_gettime(CLOCK_REALTIME, &start)
    

    liefert mir schon die ticks aber irgendwie die Werte schwanken.. Meine Erwartung
    waere dass die ticks staetig steigen.. Steht ne kurze Ausgabe hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-211175.html
    Irgendeine Idee?

    Gruss,


Anmelden zum Antworten