[flow-tools] flow-capture reports PDUs out-of-sequence w/Juniper

Dave Plonka plonka@doit.wisc.edu
Wed, 12 Sep 2001 16:09:45 -0500


--wac7ysb48OaltWcw
Content-Type: text/plain; charset=us-ascii

On Wed, Sep 12, 2001 at 01:14:38PM -0400, Mark Fullmer wrote:
> I've seen an occasional out of order packet arriving from
> a GSR but nothing like what you're seeing.

Ya, I haven't figured this out yet.  I'm quite concerned with the
burstiness of the Juniper's export of flow PDUs.  We get nothing for a
while then we get slammed with lots of PDUs once per minute.  E.g., in
a recent 2 minute sample (observed with tcpdump), I saw 685 flow PDUs
received in one second, then nothing for 60 seconds, then 674 flow PDUs
in one second again.  Similarly, right now WiscNet's Juniper is sending
~800 flow PDUs in one second.  Each PDU except the last is usually 1416
bytes, which works out to about 1MB of data on the wire in 1 second.
Perhaps the socket receive buffer is being over-run?

I've been examining the flow-capture code again and comparing it with
cflowd's method of dynamically setting the SO_RCVBUF, since the two
receivers sometimes show different behavior.

For example, WiscNet, which had changed from cflowd to flow-capture,
has since changed back to cflowd as their collector and is having
better success.  See attached graph, note the vertical rule labeled
"switch back to Cflowd for testing".  When they switched back to cflowd
(and made no other changes to the exporting Ciscos and Junipers)
suddenly they were collecting 10+% more flows.  They've tried
flow-capture again once since then, and it show 10% fewer flows.  At
first I thought it was perhaps that the flow-tools-0.55 hashing/demux
code for handling multiple exporters code was too slow (causing flow
PDUs to be dropped), but it seems to behave similarly with the patricia
trie version I wrote on flow-tools-0.53, which is a very different
implementation.

This is quite weird, esp. since I'm seeing exactly the opposite when
collecting flows from just one Juniper.  When I use flow-capture I get
more data than when I use cflowd.

Some differences are:

   * WiscNet's Juniper is across the state, where-as ours is very
     near.  Still, we don't think the link is congested.

   * WiscNet's collector machine is doing a fair bit of other UDP
     traffic (mostly SNMP), where-as our campus collector does very
     little other than catching the flow PDUs.  So, the overall level
     of UDP traffic it handles could be quite a bit more than ours.

   * cflowd's recieve-buffer-setting code and process-model/code-path
     differs significantly from flow-capture.  I think the process
     model is why I see problems with cflowd, since cflowd implements
     the collector in two processes: cflowdmux and cflowd.  I get lots
     of errors having to do with mutexes between these processes when I
     restrict the two processes to run on just one processor under
     Linux.

As an aside, anyone happen to know if Linux tallies UDP overflows in
the "Udp packet receive errors" statistics that one sees with "netstat
-s"?  I poked around in the kernel sources a bit
("kernel-source-2.2.18pre21/net/ipv4/udp.c") but haven't come to a
definitive conclusion yet.

> Dealing with
> out of order exports isn't that much work to fix...

Not quite sure what you mean.  Doesn't flow-capture already doing the
Right Thing(tm) with respect to out of order PDUs?  From my perusal of
the code it seems to collect and record the flows regardless of the
sequence number, right?  From my reading, it appears to just decide
whether or not to _count_ them as out-of-sequence based on the
magnitude of the delta value betw. the expected and received sequence
number.  Did I miss something?

Thanks,
Dave

> On Tue, Sep 11, 2001 at 10:47:47AM -0500, Dave Plonka wrote:
> > 
> > We're currently running JunOS 5.0R1.4 on a Juniper M10 exporting
> > version 5 "cflowd" PDUs to flow-capture 0.53, and I'm graphing the
> > results here:
> > 
> >    http://wwwstats.net.wisc.edu/
> > 
> > The problem I've been seeing is that flow-capture keeps reporting our
> > of sequence cflow/NetFlow PDUs:
> > 
> >    ftpdu_seq_check(): fail, expecting=113448924 received=113454940 lost=6016
> 
> [...]

-- 
plonka@doit.wisc.edu  http://net.doit.wisc.edu/~plonka  ARS:N9HZF  Madison, WI

--wac7ysb48OaltWcw
Content-Type: image/png
Content-Disposition: attachment; filename="io_protocols_flows_2d.png"
Content-Transfer-Encoding: base64

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

--wac7ysb48OaltWcw--