Changeset 1979

Show
Ignore:
Timestamp:
04/16/08 21:17:25 (7 months ago)
Author:
aturner
Message:

fix get_delta_time() to take in account of packet writing time. refs #41

Location:
features/performance/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • features/performance/src/common/timer.h

    r1977 r1979  
    191191        } while(0) 
    192192 
     193#ifdef HAVE_ABSOLUTE_TIME 
     194    typedef AbsoluteTime delta_t; 
     195#else 
     196    typedef struct timeval delta_t; 
     197#endif 
     198 
     199/* 
     200 * starts a timer so we can figure out how much time has passed 
     201 * when we call get_delta_timer() 
     202 */ 
     203static inline void 
     204start_delta_time(delta_t *ctx) 
     205{ 
     206#ifdef HAVE_ABSOLUTE_TIME 
     207    *ctx = UpTime(); 
     208#else 
     209    gettimeofday(ctx, NULL) 
     210#endif 
     211} 
    193212 
    194213/*  
    195214 * returns the amount of time that has passed since the  
    196  * last time you called this function. 
     215 * last time you called start_delta_time() 
    197216 */ 
    198217static inline void 
    199 get_delta_time(struct timespec *ret) 
     218get_delta_time(delta_t *ctx, struct timespec *ret) 
    200219{ 
    201220/* OS X has absolute time */ 
    202221#ifdef HAVE_ABSOLUTE_TIME 
    203     static AbsoluteTime last = {0, 0}; 
    204222    AbsoluteTime now, delta; 
    205223    Nanoseconds nano; 
     
    207225    now = UpTime(); 
    208226     
    209     if (! NonZero(last)) { 
     227    if (! NonZero(*ctx)) { 
    210228        timesclear(ret); 
    211229    } else { 
    212         delta = SubAbsoluteFromAbsolute(now, last); 
     230        delta = SubAbsoluteFromAbsolute(now, *ctx); 
    213231        nano = AbsoluteToNanoseconds(delta); 
    214232        NANOSEC_TO_TIMESPEC(UnsignedWideToUInt64(nano) / 10, ret); 
    215233    } 
    216  
    217     CopyAbsolute(last, now); 
    218234     
    219235/* Everyone else just uses gettimeofday */ 
    220236#else 
    221     static struct timeval last = {0, 0}; 
    222237    struct timeval now, delta; 
    223238     
    224239    gettimeofday(&now, NULL); 
    225     if (!timerisset(&last)) { 
     240 
     241    if (!timerisset(last)) { 
    226242        timesclear(ret); 
    227243    } else { 
    228         timersub(&now, &last, &delta); 
     244        timersub(&now, last, &delta); 
    229245        TIMEVAL_TO_TIMESPEC(&delta, ret); 
    230246    } 
    231     last.tv_sec = now.tv_sec; 
    232     last.tv_usec = now.tv_usec; 
    233247#endif 
    234248} 
  • features/performance/src/send_packets.c

    r1974 r1979  
    7272 
    7373static void do_sleep(struct timeval *time, struct timeval *last, int len,  
    74     int accurate, sendpacket_t *sp, COUNTER counter); 
     74    int accurate, sendpacket_t *sp, COUNTER counter, delta_t *ctx); 
    7575static const u_char *get_next_packet(pcap_t *pcap, struct pcap_pkthdr *pkthdr,  
    7676    int file_idx, packet_cache_t **prev_packet); 
     
    9696    struct pcap_pkthdr *pkthdr_ptr; 
    9797#endif 
    98  
     98    delta_t delta_ctx; 
     99     
    99100    /* register signals */ 
    100101    didsig = 0; 
     
    168169         */ 
    169170         if (options.speed.mode != SPEED_TOPSPEED) 
    170             do_sleep((struct timeval *)&pkthdr.ts, &last, pktlen, options.accurate, sp, packetnum); 
    171          
     171            do_sleep((struct timeval *)&pkthdr.ts, &last, pktlen, options.accurate, sp, packetnum, &delta_ctx); 
     172         
     173        start_delta_time(&delta_ctx); 
    172174        /* write packet out on network */ 
    173175        if (sendpacket(sp, pktdata, pktlen) < (int)pktlen) 
     
    321323static void 
    322324do_sleep(struct timeval *time, struct timeval *last, int len, int accurate,  
    323     sendpacket_t *sp, COUNTER counter) 
     325    sendpacket_t *sp, COUNTER counter, delta_t *delta_ctx) 
    324326{ 
    325327    static struct timeval didsleep = { 0, 0 }; 
     
    340342#ifdef TCPREPLAY 
    341343    adjuster.tv_nsec = OPT_VALUE_SLEEP_ACCEL * 1000; 
     344    dbgx(2, "Adjuster: " TIMEVAL_FORMAT, adjuster.tv_sec, adjuster.tv_nsec); 
    342345#else 
    343     adjuster.tv_nsec = ADJUSTER_OFFSET * 1000; 
    344 #endif 
    345  
    346     dbgx(2, "Adjuster: " TIMEVAL_FORMAT, adjuster.tv_sec, adjuster.tv_nsec); 
     346    adjuster.tv_nsec = 0; 
     347#endif 
    347348     
    348349    /* acclerator time? */ 
     
    486487 
    487488 
    488     get_delta_time(&delta_time); 
     489    get_delta_time(delta_ctx, &delta_time); 
    489490    dbgx(2, "delta: " TIMESPEC_FORMAT, delta_time.tv_sec, delta_time.tv_nsec); 
    490491 
     
    577578#endif 
    578579 
    579     get_delta_time(&delta_time); 
    580580    dbgx(2, "sleep delta: " TIMESPEC_FORMAT, delta_time.tv_sec, delta_time.tv_nsec); 
    581581