static int update_hw_stats(Pfring_Context_t *context) { pfring_stat ps; int i; for (i = 0; i < context->num_devices; i++) if (context->ring_handles[i] == NULL) /* daq stopped - using last available stats */ return DAQ_SUCCESS; context->stats.hw_packets_received = 0; context->stats.hw_packets_dropped = 0; for (i = 0; i < context->num_devices; i++) { memset(&ps, 0, sizeof(pfring_stat)); if(pfring_stats(context->ring_handles[i], &ps) < 0) { DPE(context->errbuf, "%s: pfring_stats error [ring_idx = %d]", __FUNCTION__, i); return DAQ_ERROR; } context->stats.hw_packets_received += (ps.recv - context->base_recv[i]); context->stats.hw_packets_dropped += (ps.drop - context->base_drop[i]); } return DAQ_SUCCESS; }
int reader_pfring_stats(MolochReaderStats_t *stats) { pfring_stat pfstats; stats->dropped = 0; stats->total = 0; int i; for (i = 0; i < MAX_INTERFACES && config.interface[i]; i++) { pfring_stats(rings[i], &pfstats); stats->dropped += pfstats.drop; stats->total += pfstats.recv; } return 0; }
static inline void PfringDumpCounters(PfringThreadVars *ptv) { pfring_stat pfring_s; if (likely((pfring_stats(ptv->pd, &pfring_s) >= 0))) { /* pfring counter is per socket and is not cleared after read. * So to get the number of packet on the interface we can add * the newly seen packets and drops for this thread and add it * to the interface counter */ uint64_t th_pkts = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_packets); uint64_t th_drops = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_drops); SC_ATOMIC_ADD(ptv->livedev->pkts, pfring_s.recv - th_pkts); SC_ATOMIC_ADD(ptv->livedev->drop, pfring_s.drop - th_drops); StatsSetUI64(ptv->tv, ptv->capture_kernel_packets, pfring_s.recv); StatsSetUI64(ptv->tv, ptv->capture_kernel_drops, pfring_s.drop); } }
void print_stats() { pfring_stat pfringStat; static u_int64_t lastPkts = 0; static u_int64_t lastBytes = 0; static unsigned long long numLine = 0; static unsigned long long lastDrop = 0; if(pfring_stats(pd, &pfringStat) >= 0) { /* 1-line stats */ printf("%llu sec pkts %llu drop %llu bytes %llu | pkts %llu bytes %llu drop %llu\n", ++numLine, numPkts-lastPkts, pfringStat.drop-lastDrop, numBytes-lastBytes, numPkts, numBytes, (unsigned long long int)pfringStat.drop ); lastPkts = numPkts, lastBytes = numBytes, lastDrop = pfringStat.drop; } }
void PfRingDevice::getThreadStatistics(SystemCore core, pcap_stat& stats) { pfring* ring = NULL; uint8_t coreId = core.Id; ring = m_CoreConfiguration[coreId].Channel; if (ring != NULL) { pfring_stat tempStats; if (pfring_stats(ring, &tempStats) < 0) { LOG_ERROR("Can't retrieve statistics for core [%d], pfring_stats failed", coreId); return; } stats.ps_drop = (u_int)tempStats.drop; stats.ps_ifdrop = (u_int)tempStats.drop; stats.ps_recv = (u_int)tempStats.recv; } else { LOG_ERROR("Core [%d] is not in use, can't retrieve statistics", coreId); } }
static inline void PfringDumpCounters(PfringThreadVars *ptv) { pfring_stat pfring_s; if (likely((pfring_stats(ptv->pd, &pfring_s) >= 0))) { /* pfring counter is per socket and is not cleared after read. * So to get the number of packet on the interface we can add * the newly seen packets and drops for this thread and add it * to the interface counter */ uint64_t th_pkts = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_packets); uint64_t th_drops = StatsGetLocalCounterValue(ptv->tv, ptv->capture_kernel_drops); SC_ATOMIC_ADD(ptv->livedev->pkts, pfring_s.recv - th_pkts); SC_ATOMIC_ADD(ptv->livedev->drop, pfring_s.drop - th_drops); StatsSetUI64(ptv->tv, ptv->capture_kernel_packets, pfring_s.recv); StatsSetUI64(ptv->tv, ptv->capture_kernel_drops, pfring_s.drop); #ifdef HAVE_PF_RING_FLOW_OFFLOAD if (ptv->flags & PFRING_FLAGS_BYPASS) { uint64_t th_bypassed = StatsGetLocalCounterValue(ptv->tv, ptv->capture_bypassed); SC_ATOMIC_ADD(ptv->livedev->bypassed, pfring_s.shunt - th_bypassed); StatsSetUI64(ptv->tv, ptv->capture_bypassed, pfring_s.shunt); } #endif } }
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() { pfring_stat pfringStat; struct timeval endTime; double deltaMillisec; static u_int64_t lastPkts[MAX_NUM_THREADS] = { 0 }; u_int64_t diff; static struct timeval lastTime; int i; unsigned long long nBytes = 0, nPkts = 0, pkt_dropped = 0; unsigned long long nPktsLast = 0; double pkt_thpt = 0, tot_thpt = 0, delta; if(startTime.tv_sec == 0) { gettimeofday(&startTime, NULL); return; } gettimeofday(&endTime, NULL); deltaMillisec = delta_time(&endTime, &startTime); delta = delta_time(&endTime, &lastTime); for(i=0; i < num_channels; i++) { nBytes += numBytes[i], nPkts += numPkts[i]; if(pfring_stats(ring[i], &pfringStat) >= 0) { double thpt = ((double)8*numBytes[i])/(deltaMillisec*1000); fprintf(stderr, "=========================\n" "Absolute Stats: [channel=%d][%u pkts rcvd][%u pkts dropped]\n" "Total Pkts=%u/Dropped=%.1f %%\n", i, (unsigned int)numPkts[i], (unsigned int)pfringStat.drop, (unsigned int)(numPkts[i]+pfringStat.drop), numPkts[i] == 0 ? 0 : (double)(pfringStat.drop*100)/(double)(numPkts[i]+pfringStat.drop)); fprintf(stderr, "%llu pkts - %llu bytes", numPkts[i], numBytes[i]); fprintf(stderr, " [%.1f pkt/sec - %.2f Mbit/sec]\n", (double)(numPkts[i]*1000)/deltaMillisec, thpt); pkt_dropped += pfringStat.drop; if(lastTime.tv_sec > 0) { double pps; diff = numPkts[i]-lastPkts[i]; nPktsLast += diff; tot_thpt += thpt; pps = ((double)diff/(double)(delta/1000)); fprintf(stderr, "=========================\n" "Actual Stats: [channel=%d][%llu pkts][%.1f ms][%.1f pkt/sec]\n", i, (long long unsigned int)diff, delta, pps); pkt_thpt += pps; } lastPkts[i] = numPkts[i]; } } lastTime.tv_sec = endTime.tv_sec, lastTime.tv_usec = endTime.tv_usec; fprintf(stderr, "=========================\n"); fprintf(stderr, "Aggregate stats (all channels): [%.1f pkt/sec][%.2f Mbit/sec][%llu pkts dropped]\n", (double)(nPktsLast*1000)/(double)delta, tot_thpt, pkt_dropped); fprintf(stderr, "=========================\n\n"); }