Re: Possible bug in perfmonitor: pkt_drop_percent

Dheeraj Gupta <[email protected]>
Newsgroups gmane.comp.security.ids.snort.devel
Message-ID <CAOsL98Ow3AT2XYNimQAecws5iXAirH3cWM_wiUD6XOS=R2B3Vw@mail.gmail.com>
In continuation, here's an untested partial patch which assumes drops are
calculated based on packets received by hardware.


On Thu, Aug 25, 2016 at 4:29 PM, Dheeraj Gupta <[email protected]>
wrote:

> Hi,
>
> I had earlier written to this list to report large packet drops in 2.9.8.x
> (https://sourceforge.net/p/snort/mailman/snort-devel/thread/
> CAOsL98NEqzDEXVH6d2Cu8cbrD-i6MWJ_fHcYZdL9ZS6w3PKMYw%
> 40mail.gmail.com/#msg34692462)
>
> I got hit with this again after upgrade to 2.9.8.3 from 2.9.7.6 in one of
> my heavier sensors. The pkt drops as reported in snort.stats file (by
> perfmonitor) is a mind boggling 70-80%. Despite putting BPF filters (which
> reduced the packets snort sees), the drop rate did not reduce a bit.
>
> Here is the end of session totals seen in snort when filter is in effect
>
> Snort processed 4225228 packets.
> Snort ran for 0 days 0 hours 8 minutes 37 seconds
>    Pkts/min:       528153
>    Pkts/sec:         8172
>
> ========================================================
> Packet I/O Totals:
>    Received:     35543908
>    Analyzed:      4225228 ( 11.887%)
>     Dropped:     13258753 ( 27.168%)
>    Filtered:     30643474 ( 86.213%)
> Outstanding:       675206 (  1.900%)
>    Injected:            0
> =========================================================
>
> However, this is what is logged in the stats file (I write it to a DB)
>
> +---------------------+------------------------------+------
> -----------------+-------------------------+
> | timestamp           | round(kpackets_wire_per_sec) |
> round(wire_traf_rate) | round(pkt_drop_percent) |
> +---------------------+------------------------------+------
> -----------------+-------------------------+
> | 2016-08-25 16:00:00 |                            8 |
> 38 |                      78 |
> | 2016-08-25 15:55:00 |                            1 |
> 4 |                      61 |
>
> While the effective drop rate is around 28%, stats file shows it as
> 75-80%!!
>
> Looking at the code, the problem becomes clearer
> - End Stats - (src/util.c:DropStats)
>   Dropped packets is hw_packets_dropeed/(hw_packets_dropped +
> hw_packets_received)*100.0
>   This means this is totally derived from hardware and Snort doesn't come
> into picture. Seems legit.
>
> - PerfMonitor - (src/preprocessors/perf-base.c:GetPktDropStats)
>   Dropped packets is calculated as hw_pkts_drop/(pkts_recv +
> hw_packets_drop)
>   Here pkts_recv is packets received by snort.
>   As large number of packets are filtered, the number of packets actually
> received by snort is less and so reported % drops are higher.
>   I think it would be better if perfmonitor also computes drop percent
> based on hw_packets_received and NOT packets_received_by_snort because
> filtered packets are not drops.
>
> Note: The gripe with slower performance in 2.9.8.x is still there. here
> are the reference stats for 2.9.7.6 for the same sensor about an hour
> earlier
>
> Snort processed 9984264 packets.
> Snort ran for 0 days 0 hours 12 minutes 52 seconds
>    Pkts/min:       832022
>    Pkts/sec:        12932
>
> =======================================================
> Packet I/O Totals:
>    Received:     52933119
>    Analyzed:      9984264 ( 18.862%)
>     Dropped:            0 (  0.000%)
>    Filtered:     42951276 ( 81.143%)
> Outstanding:            0 (  0.000%)
>    Injected:            0
> =======================================================
>
> Regards,
> Dheeraj
>

------------------------------------------------------------------------------

_______________________________________________
Snort-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/snort-devel
Archive:
http://sourceforge.net/mailarchive/forum.php?forum_name=snort-devel

Please visit http://blog.snort.org for the latest news about Snort!
pkt_drop_percent.patch (text/x-patch, 737 B)
diff -crB b/snort-2.9.8.3/src/preprocessors/perf-base.c a/snort-2.9.8.3/src/preprocessors/perf-base.c
*** b/snort-2.9.8.3/src/preprocessors/perf-base.c	2016-03-18 19:24:32.000000000 +0530
--- a/snort-2.9.8.3/src/preprocessors/perf-base.c	2016-08-25 16:41:32.327602342 +0530
***************
*** 1162,1168 ****
      else
      {
          const DAQ_Stats_t* ps = DAQ_GetStats();
!         recv = ps->packets_received;
          drop = ps->hw_packets_dropped;
          if (perfmon_config->base_reset)
          {
--- 1162,1168 ----
      else
      {
          const DAQ_Stats_t* ps = DAQ_GetStats();
!         recv = ps->hw_packets_received;
          drop = ps->hw_packets_dropped;
          if (perfmon_config->base_reset)
          {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.