void print_stats() { double deltaMillisec, currentThpt, avgThpt, currentThptBytes, avgThptBytes; struct timeval now; char buf1[64], buf2[64], buf3[64], buf4[64], buf5[64]; gettimeofday(&now, NULL); deltaMillisec = delta_time(&now, &lastTime); currentThpt = (double)((num_pkt_good_sent-last_num_pkt_good_sent) * 1000)/deltaMillisec; currentThptBytes = (double)((num_bytes_good_sent-last_num_bytes_good_sent) * 1000)/deltaMillisec; currentThptBytes /= (1000*1000*1000)/8; deltaMillisec = delta_time(&now, &startTime); avgThpt = (double)(num_pkt_good_sent * 1000)/deltaMillisec; avgThptBytes = (double)(num_bytes_good_sent * 1000)/deltaMillisec; avgThptBytes /= (1000*1000*1000)/8; fprintf(stdout, "TX rate: [current %s pps/%s Gbps][average %s pps/%s Gbps][total %s pkts]\n", pfring_format_numbers(currentThpt, buf1, sizeof(buf1), 1), pfring_format_numbers(currentThptBytes, buf2, sizeof(buf2), 1), pfring_format_numbers(avgThpt, buf3, sizeof(buf3), 1), pfring_format_numbers(avgThptBytes, buf4, sizeof(buf4), 1), pfring_format_numbers(num_pkt_good_sent, buf5, sizeof(buf5), 1)); memcpy(&lastTime, &now, sizeof(now)); last_num_pkt_good_sent = num_pkt_good_sent, last_num_bytes_good_sent = num_bytes_good_sent; }
void print_stats() { static u_int8_t print_all = 0; static struct timeval lastTime; static u_int64_t lastPkts = 0, lastBytes = 0, lastDrops = 0, lastSlavePkts = 0, lastSlaveDrops = 0; unsigned long long nBytes = 0, nPkts = 0, nDrops = 0, nSlavePkts = 0, nSlaveDrops = 0; struct timeval endTime; char buf1[64], buf2[64], buf3[64], buf4[64], buf5[64]; pfring_zc_stat stats; int i; if(startTime.tv_sec == 0) gettimeofday(&startTime, NULL); else print_all = 1; gettimeofday(&endTime, NULL); nPkts = globals->numPkts; nBytes = globals->numBytes; if (pfring_zc_stats(inzq, &stats) == 0) nDrops = stats.drop; nSlavePkts = globals->sentPkts; for (i = 0; i < num_slaves; i++) if (pfring_zc_stats(outzq[i], &stats) == 0) nSlaveDrops += stats.drop; fprintf(stderr, "=========================\n" "Absolute Stats: Recv %s pkts (%s drops) %s bytes - Forwarded %s pkts (%s drops)\n", pfring_format_numbers((double)nPkts, buf1, sizeof(buf1), 0), pfring_format_numbers((double)nDrops, buf2, sizeof(buf2), 0), pfring_format_numbers((double)nBytes, buf3, sizeof(buf3), 0), pfring_format_numbers((double)nSlavePkts, buf4, sizeof(buf4), 0), pfring_format_numbers((double)nSlaveDrops, buf5, sizeof(buf5), 0)); if(print_all && lastTime.tv_sec > 0) { double deltaMillisec = delta_time(&endTime, &lastTime); double bytesDiff = ((double) (nBytes - lastBytes) * 8) / (1000*1000*1000); unsigned long long pktsDiff = nPkts-lastPkts; unsigned long long dropsDiff = nDrops - lastDrops; unsigned long long slavePktsDiff = nSlavePkts - lastSlavePkts; unsigned long long slaveDropsDiff = nSlaveDrops - lastSlaveDrops; fprintf(stderr, "Actual Stats: Recv %s pps (%s drops) %s Gbps - Forwarded %s pps (%s drops)\n", pfring_format_numbers(((double)pktsDiff/(double)(deltaMillisec/1000)), buf1, sizeof(buf1), 1), pfring_format_numbers(((double)dropsDiff/(double)(deltaMillisec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)bytesDiff/(double)(deltaMillisec/1000)), buf3, sizeof(buf3), 1), pfring_format_numbers(((double)slavePktsDiff/(double)(deltaMillisec/1000)), buf4, sizeof(buf4), 1), pfring_format_numbers(((double)slaveDropsDiff/(double)(deltaMillisec/1000)), buf5, sizeof(buf5), 1)); } fprintf(stderr, "=========================\n\n"); lastPkts = nPkts, lastBytes = nBytes, lastDrops = nDrops; lastSlavePkts = nSlavePkts, lastSlaveDrops = nSlaveDrops; lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; }
void print_stats() { struct timeval endTime; double deltaMillisec; static u_int8_t print_all; static u_int64_t lastPkts = 0; static u_int64_t lastBytes = 0; double diff, bytesDiff; static struct timeval lastTime; char buf1[64], buf2[64], buf3[64]; unsigned long long nBytes = 0, nPkts = 0; int i; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); print_all = 0; } else print_all = 1; gettimeofday(&endTime, NULL); deltaMillisec = delta_time(&endTime, &startTime); for (i = 0; i < 1 + bidirectional; i++) { nBytes = dir[i].numBytes; nPkts = dir[i].numPkts; } fprintf(stderr, "=========================\n" "Absolute Stats: %s pkts - %s bytes\n", pfring_format_numbers((double)nPkts, buf1, sizeof(buf1), 0), pfring_format_numbers((double)nBytes, buf2, sizeof(buf2), 0)); if(print_all && (lastTime.tv_sec > 0)) { char buf[256]; deltaMillisec = delta_time(&endTime, &lastTime); diff = nPkts-lastPkts; bytesDiff = nBytes - lastBytes; bytesDiff /= (1000*1000*1000)/8; snprintf(buf, sizeof(buf), "Actual Stats: %s pps - %s Gbps", pfring_format_numbers(((double)diff/(double)(deltaMillisec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)bytesDiff/(double)(deltaMillisec/1000)), buf3, sizeof(buf3), 1)); fprintf(stderr, "%s\n", buf); } fprintf(stderr, "=========================\n\n"); lastPkts = nPkts, lastBytes = nBytes; lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; }
void my_sigalarm(int sig) { char buf[32]; pfring_format_numbers((double)num_sent, buf, sizeof(buf), 0), printf("%s pps\n", buf); num_sent = 0; alarm(1); signal(SIGALRM, my_sigalarm); }
void print_stats() { struct timeval endTime; double deltaMillisec; static u_int8_t print_all; static u_int64_t lastPkts = 0; static u_int64_t lastDrops = 0; static u_int64_t lastBytes = 0; double pktsDiff, dropsDiff, bytesDiff; static struct timeval lastTime; char buf1[64], buf2[64], buf3[64]; unsigned long long nBytes = 0, nPkts = 0, nDrops = 0; pfring_zc_stat stats; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); print_all = 0; } else print_all = 1; gettimeofday(&endTime, NULL); deltaMillisec = delta_time(&endTime, &startTime); nBytes = globals->numBytes; nPkts = globals->numPkts; if (pfring_zc_stats(zq, &stats) == 0) nDrops = stats.drop; else printf("Error reading drop stats\n"); fprintf(stderr, "=========================\n" "Absolute Stats: %s pkts (%s drops) - %s bytes\n", pfring_format_numbers((double)nPkts, buf1, sizeof(buf1), 0), pfring_format_numbers((double)nDrops, buf2, sizeof(buf2), 0), pfring_format_numbers((double)nBytes, buf3, sizeof(buf3), 0)); if(print_all && (lastTime.tv_sec > 0)) { char buf[256]; deltaMillisec = delta_time(&endTime, &lastTime); pktsDiff = nPkts-lastPkts; dropsDiff = nDrops-lastDrops; bytesDiff = nBytes - lastBytes; bytesDiff /= (1000*1000*1000)/8; snprintf(buf, sizeof(buf), "Actual Stats: %s pps (%s drops) - %s Gbps", pfring_format_numbers(((double)pktsDiff/(double)(deltaMillisec/1000)), buf1, sizeof(buf1), 1), pfring_format_numbers(((double)dropsDiff/(double)(deltaMillisec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)bytesDiff/(double)(deltaMillisec/1000)), buf3, sizeof(buf3), 1)); fprintf(stderr, "%s\n", buf); } fprintf(stderr, "=========================\n\n"); lastPkts = nPkts, lastDrops = nDrops, lastBytes = nBytes; lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; }
void print_stats() { pfring_stat pfringStat; struct timeval endTime; double deltaMillisec; static u_int8_t print_all; static u_int64_t lastPkts = 0; static u_int64_t lastBytes = 0; u_int64_t diff, bytesDiff; static struct timeval lastTime; char buf1[64], buf2[64], buf3[64]; unsigned long long nBytes = 0, nPkts = 0; double thpt; int i = 0; unsigned long long absolute_recv = 0, absolute_drop = 0; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); print_all = 0; } else print_all = 1; gettimeofday(&endTime, NULL); deltaMillisec = delta_time(&endTime, &startTime); for(i=0; i<num_devs; i++) { if(pfring_stats(pd[i], &pfringStat) >= 0) { absolute_recv = pfringStat.recv; absolute_drop = pfringStat.drop; } } nBytes = numBytes; nPkts = numPkts; { thpt = ((double)8*nBytes)/(deltaMillisec*1000); fprintf(stderr, "=========================\n" "Absolute Stats: [%u pkts rcvd][%u pkts dropped]\n" "Total Pkts=%u/Dropped=%.1f %%\n", (unsigned int)absolute_recv, (unsigned int)absolute_drop, (unsigned int)(absolute_recv+absolute_drop), absolute_recv == 0 ? 0 : (double)(absolute_drop*100)/(double)(absolute_recv+absolute_drop)); fprintf(stderr, "%s pkts - %s bytes", pfring_format_numbers((double)nPkts, buf1, sizeof(buf1), 0), pfring_format_numbers((double)nBytes, buf2, sizeof(buf2), 0)); if(print_all) fprintf(stderr, " [%s pkt/sec - %s Mbit/sec]\n", pfring_format_numbers((double)(nPkts*1000)/deltaMillisec, buf1, sizeof(buf1), 1), pfring_format_numbers(thpt, buf2, sizeof(buf2), 1)); else fprintf(stderr, "\n"); if(print_all && (lastTime.tv_sec > 0)) { deltaMillisec = delta_time(&endTime, &lastTime); diff = nPkts-lastPkts; bytesDiff = nBytes - lastBytes; bytesDiff /= (1000*1000*1000)/8; fprintf(stderr, "=========================\n" "Actual Stats: %llu pkts [%s ms][%s pps/%s Gbps]\n", (long long unsigned int)diff, pfring_format_numbers(deltaMillisec, buf1, sizeof(buf1), 1), pfring_format_numbers(((double)diff/(double)(deltaMillisec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)bytesDiff/(double)(deltaMillisec/1000)), buf3, sizeof(buf3), 1) ); } lastPkts = nPkts, lastBytes = nBytes; } lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; fprintf(stderr, "=========================\n\n"); }
void print_stats() { pfring_stat pfringStat; struct timeval endTime; double deltaMillisec; static u_int8_t print_all; static u_int64_t lastPkts = 0; static u_int64_t lastBytes = 0; double diff, bytesDiff; static struct timeval lastTime; char buf[256], buf1[64], buf2[64], buf3[64], timebuf[128]; u_int64_t deltaMillisecStart; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); print_all = 0; } else print_all = 1; gettimeofday(&endTime, NULL); deltaMillisec = delta_time(&endTime, &startTime); if(pfring_stats(pd, &pfringStat) >= 0) { double thpt; int i; unsigned long long nBytes = 0, nPkts = 0, nMatches = 0; for(i=0; i < num_threads; i++) { nBytes += stats->numBytes[i]; nPkts += stats->numPkts[i]; nMatches += stats->numStringMatches[i]; } deltaMillisecStart = delta_time(&endTime, &startTime); snprintf(buf, sizeof(buf), "Duration: %s\n" "Packets: %lu\n" "Dropped: %lu\n" "Bytes: %lu\n", msec2dhmsm(deltaMillisecStart, timebuf, sizeof(timebuf)), (long unsigned int) pfringStat.recv, (long unsigned int) pfringStat.drop, (long unsigned int) nBytes); pfring_set_application_stats(pd, buf); thpt = ((double)8*nBytes)/(deltaMillisec*1000); fprintf(stderr, "=========================\n" "Absolute Stats: [%u pkts rcvd]" "[%u pkts dropped]\n" "Total Pkts=%u/Dropped=%.1f %%\n", (unsigned int)pfringStat.recv, (unsigned int)pfringStat.drop, (unsigned int)(pfringStat.recv+pfringStat.drop), pfringStat.drop == 0 ? 0 : (double)(pfringStat.drop*100)/(double)(pfringStat.recv+pfringStat.drop)); fprintf(stderr, "%s pkts - %s bytes", pfring_format_numbers((double)nPkts, buf1, sizeof(buf1), 0), pfring_format_numbers((double)nBytes, buf2, sizeof(buf2), 0)); if(print_all) fprintf(stderr, " [%s pkt/sec - %s Mbit/sec]\n", pfring_format_numbers((double)(nPkts*1000)/deltaMillisec, buf1, sizeof(buf1), 1), pfring_format_numbers(thpt, buf2, sizeof(buf2), 1)); else fprintf(stderr, "\n"); if(automa != NULL) fprintf(stderr, "String matched: %llu\n", nMatches); if(print_all && (lastTime.tv_sec > 0)) { deltaMillisec = delta_time(&endTime, &lastTime); diff = nPkts-lastPkts; bytesDiff = nBytes - lastBytes; bytesDiff /= (1000*1000*1000)/8; snprintf(buf, sizeof(buf), "Actual Stats: %llu pkts [%s ms][%s pps/%s Gbps]", (long long unsigned int)diff, pfring_format_numbers(deltaMillisec, buf1, sizeof(buf1), 1), pfring_format_numbers(((double)diff/(double)(deltaMillisec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)bytesDiff/(double)(deltaMillisec/1000)), buf3, sizeof(buf3), 1)); fprintf(stderr, "=========================\n%s\n", buf); } lastPkts = nPkts, lastBytes = nBytes; } lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; fprintf(stderr, "=========================\n\n"); }
void print_stats() { static u_int64_t lastPkts[MAX_NUM_THREADS] = { 0 }; static u_int64_t lastRXPkts = 0, lastTXPkts = 0, lastRXProcPkts = 0; static struct timeval lastTime; pfring_stat pfringStat; struct timeval endTime; double delta, deltaABS; u_int64_t diff; u_int64_t RXdiff, TXdiff, RXProcdiff; pfring_dna_cluster_stat cluster_stats; char buf1[32], buf2[32], buf3[32]; int i; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); return; } gettimeofday(&endTime, NULL); deltaABS = delta_time(&endTime, &startTime); delta = delta_time(&endTime, &lastTime); for(i=0; i < num_threads; i++) { if(pfring_stats(thread_stats[i].ring, &pfringStat) >= 0) { double thpt = ((double)8*thread_stats[i].numBytes)/(deltaABS*1000); fprintf(stderr, "=========================\n" "Thread %d\n" "Absolute Stats: [%u pkts rcvd][%lu bytes rcvd]\n" " [%u total pkts][%u pkts dropped (%.1f %%)]\n" " [%s pkt/sec][%.2f Mbit/sec]\n", i, (unsigned int) thread_stats[i].numPkts, (long unsigned int)thread_stats[i].numBytes, (unsigned int) (thread_stats[i].numPkts+pfringStat.drop), (unsigned int) pfringStat.drop, thread_stats[i].numPkts == 0 ? 0 : (double)(pfringStat.drop*100)/(double)(thread_stats[i].numPkts+pfringStat.drop), pfring_format_numbers(((double)(thread_stats[i].numPkts*1000)/deltaABS), buf1, sizeof(buf1), 1), thpt); if(lastTime.tv_sec > 0) { // double pps; diff = thread_stats[i].numPkts-lastPkts[i]; // pps = ((double)diff/(double)(delta/1000)); fprintf(stderr, "Actual Stats: [%llu pkts][%.1f ms][%s pkt/sec]\n", (long long unsigned int) diff, delta, pfring_format_numbers(((double)diff/(double)(delta/1000)), buf1, sizeof(buf1), 1)); } lastPkts[i] = thread_stats[i].numPkts; } } if(dna_cluster_stats(dna_cluster_handle, &cluster_stats) == 0) { if(lastTime.tv_sec > 0) { RXdiff = cluster_stats.tot_rx_packets - lastRXPkts; RXProcdiff = cluster_stats.tot_rx_processed - lastRXProcPkts; TXdiff = cluster_stats.tot_tx_packets - lastTXPkts; fprintf(stderr, "=========================\n" "Aggregate Actual Stats: [Captured %s pkt/sec][Processed %s pkt/sec][Sent %s pkt/sec]\n", pfring_format_numbers(((double)RXdiff/(double)(delta/1000)), buf1, sizeof(buf1), 1), pfring_format_numbers(((double)RXProcdiff/(double)(delta/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)TXdiff/(double)(delta/1000)), buf3, sizeof(buf3), 1)); } lastRXPkts = cluster_stats.tot_rx_packets; lastRXProcPkts = cluster_stats.tot_rx_processed; lastTXPkts = cluster_stats.tot_tx_packets; } if (print_interface_stats) { pfring_stat if_stats; fprintf(stderr, "=========================\nInterface Absolute Stats\n"); for (i = 0; i < num_dev; i++) if (pfring_stats(pd[i], &if_stats) >= 0) fprintf(stderr, "%s RX [%" PRIu64 " pkts rcvd][%" PRIu64 " pkts dropped (%.1f %%)]\n", pd[i]->device_name, if_stats.recv, if_stats.drop, if_stats.recv == 0 ? 0 : ((double)(if_stats.drop*100)/(double)(if_stats.recv + if_stats.drop))); } fprintf(stderr, "=========================\n\n"); lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; }
void print_stats() { static u_int8_t print_all = 0; static struct timeval last_time; static unsigned long long last_tot_recv = 0, last_tot_queues_recv = 0; unsigned long long tot_recv = 0, tot_drop = 0, tot_queues_recv = 0, tot_queues_drop = 0; struct timeval end_time; char buf1[64], buf2[64]; pfring_zc_stat stats; int i; if(start_time.tv_sec == 0) gettimeofday(&start_time, NULL); else print_all = 1; gettimeofday(&end_time, NULL); fprintf(stderr, "=========================\nAbsolute Stats: "); if (in_device != NULL) { if (pfring_zc_stats(forwarder[RX_FWDR].inzq, &stats) == 0) tot_recv += stats.recv, tot_drop += stats.drop; fprintf(stderr, "Recv %s pkts [Drop %s pkts] ", pfring_format_numbers((double)tot_recv, buf1, sizeof(buf1), 0), pfring_format_numbers((double)tot_drop, buf2, sizeof(buf2), 0) ); } fprintf(stderr, "Processed "); for (i = 0; i < num_ipc_queues; i++) { if (pfring_zc_stats(ipczqs[i], &stats) == 0) { fprintf(stderr, "Q%u %s pkts ", i, pfring_format_numbers((double) stats.recv, buf1, sizeof(buf1), 0)); tot_queues_recv += stats.recv, tot_queues_drop += stats.drop; } } /* Average */ tot_queues_recv /= num_ipc_queues; tot_queues_drop /= num_ipc_queues; fprintf(stderr, "AVG %s pkts [Drop %s pkts]\n", pfring_format_numbers((double)tot_queues_recv, buf1, sizeof(buf1), 0), pfring_format_numbers((double)tot_queues_drop, buf2, sizeof(buf2), 0) ); if(print_all && last_time.tv_sec > 0) { double delta_msec = delta_time(&end_time, &last_time); unsigned long long diff_recv = tot_recv - last_tot_recv; unsigned long long diff_queues_recv = tot_queues_recv - last_tot_queues_recv; fprintf(stderr, "Actual Stats: Recv %s pps Processed AVG %s pps\n", pfring_format_numbers(((double)diff_recv/(double)(delta_msec/1000)), buf1, sizeof(buf1), 1), pfring_format_numbers(((double)diff_queues_recv/(double)(delta_msec/1000)), buf2, sizeof(buf2), 1) ); } fprintf(stderr, "=========================\n\n"); last_tot_recv = tot_recv, last_tot_queues_recv = tot_queues_recv; last_time.tv_sec = end_time.tv_sec, last_time.tv_usec = end_time.tv_usec; }
void print_stats() { static u_int8_t print_all = 0; static struct timeval last_time; static unsigned long long last_tot_recv = 0, last_tot_sent = 0, last_tot_drop = 0; unsigned long long tot_recv = 0, tot_drop = 0, tot_sent = 0; struct timeval end_time; char buf1[64], buf2[64], buf3[64]; pfring_zc_stat stats; char stats_buf[1024] = { '\0' }; int i; u_int64_t tot_if_recv = 0, tot_if_drop = 0; if(start_time.tv_sec == 0) gettimeofday(&start_time, NULL); else print_all = 1; gettimeofday(&end_time, NULL); for(i = 0; i < num_in_devices; i++) if(pfring_zc_stats(inzqs[i], &stats) == 0) tot_recv += stats.recv, tot_drop += stats.drop; for(i = 0; i < num_out_devices; i++) if(pfring_zc_stats(outzqs[i], &stats) == 0) tot_sent += stats.sent; fprintf(stderr, "=========================\n" "Absolute Stats: Recv %s pkts (%s drops) - Forwarded %s pkts\n", pfring_format_numbers((double)tot_recv, buf1, sizeof(buf1), 0), pfring_format_numbers((double)tot_drop, buf2, sizeof(buf2), 0), pfring_format_numbers((double)tot_sent, buf3, sizeof(buf3), 0) ); for(i = 0; i < num_in_devices; i++) { if(pfring_zc_stats(inzqs[i], &stats) == 0) { tot_if_recv += stats.recv, tot_if_drop += stats.drop; fprintf(stderr, " %s RX %lu pkts Dropped %lu pkts (%.1f %%)\n", in_devices[i], (long unsigned int)stats.recv, (long unsigned int)stats.drop, stats.recv == 0 ? 0 : ((double)(stats.drop*100)/(double)(stats.recv + stats.drop))); } } snprintf(&stats_buf[strlen(stats_buf)], sizeof(stats_buf)-strlen(stats_buf), "IFPackets: %lu\n" "tot_if_dropped: %lu\n", (long unsigned int)tot_if_recv, (long unsigned int)tot_if_drop); pfring_zc_set_proc_stats(zc, stats_buf); if(print_all && last_time.tv_sec > 0) { double delta_msec = delta_time(&end_time, &last_time); unsigned long long diff_recv = tot_recv - last_tot_recv; unsigned long long diff_drop = tot_drop - last_tot_drop; unsigned long long diff_sent = tot_sent - last_tot_sent; fprintf(stderr, "Actual Stats: Recv %s pps (%s drops) - Forwarded %s pps\n", pfring_format_numbers(((double)diff_recv/(double)(delta_msec/1000)), buf1, sizeof(buf1), 1), pfring_format_numbers(((double)diff_drop/(double)(delta_msec/1000)), buf2, sizeof(buf2), 1), pfring_format_numbers(((double)diff_sent/(double)(delta_msec/1000)), buf3, sizeof(buf3), 1) ); } fprintf(stderr, "=========================\n\n"); last_tot_recv = tot_recv, last_tot_drop = tot_drop, last_tot_sent = tot_sent; last_time.tv_sec = end_time.tv_sec, last_time.tv_usec = end_time.tv_usec; }