BUG - No immediate exit when pipeing ra output

Carter Bullard carter at qosient.com
Tue May 10 17:04:37 EDT 2011


Not sure where the 288 files == 24 hours?
ra() is threaded, and may read most of the file in before it starts to write any output.  You could remove the threads and see if it picks up.
   % ./configure --without-threads; make clean; make

I'll checkout why we may be processing all the input files if the output pipe closes.
Some of the overhead relates to initializing hostname structures, port names, protocol labels, etc...  It's pretty expensive.  If you didn't have to print the records, it would go really fast.

Carter

On May 10, 2011, at 11:43 AM, elof2 at sentor.se wrote:

> 
> Hi Carter!
> 
> It seems that the bugfix to detect closure of the pipe still have issues.
> 
> In ra v2.x I was used to having the ra command terminate in 0.004s.
> With the new ra 3.0.5.8, it won't terminate as swiftly.
> 
> ra v3.0.5.8:
> time ra -nr argus.log - > /dev/null
> real    0m4.499s
> user    0m4.288s
> sys     0m0.212s
> Time to parse through 100% of this test-file is apparently ~4.5s.
> 
> 
> Now lets see the time when grep or head terminates directly on the first line:
> time ra -nr argus.log - | grep -q "."
> real    0m4.562s
> user    0m4.392s
> sys     0m0.176s
> time ra -nr argus.log - | head -1
> real    0m4.588s
> user    0m4.428s
> sys     0m0.168s
> 
> Both commands take the full 4.5s (plus a little more) to finish.
> 
> If I add another (or the same) logfile, it will double the execution time:
> time ra -nr argus.log argus.log - | head -1
> real    0m9.002s
> user    0m8.617s
> sys     0m0.392s
> 
> Conclusion:
> ra 3.0.5.8 don't immediately terminate upon pipe closure.
> 
> 
> 
> Speaking of latency and execution times...
> 
> Even when using the builtin -N1 option, ra v2 is way faster than v3:
> ra v2.x:
> time ra -N1 -nr argus.log -
> real    0m0.003s
> user    0m0.000s
> sys     0m0.000s
> 
> ra 3.0.5.8:
> real    0m0.024s
> user    0m0.000s
> sys     0m0.021s
> 
> v3 is 8 times slower than v2 when it comes to swift termination.
> Can this be improved?
> 
> 
> Also, no matter how many files I add to ra v2, it still terminates after 0.003 seconds where as ra v3 will increase its 0.024s by approx 0.002 per file:
> ra v2.x:
> time ra -N1 -nr argus.log argus.log argus.log argus.log argus.log argus.log argus.log argus.log argus.log argus.log -
> real    0m0.003s  <-  still 0.003s
> user    0m0.000s
> sys     0m0.002s
> 
> ra 3.0.5.8:
> real    0m0.032s  <-  increases more and more for every file added
> user    0m0.007s
> sys     0m0.024s
> 
> If you have 288 argus files in a log dir and use ra -nr argus*.log to do some simple processing, you will always have a noticeable lag just for the sake of the 288 files, even if you use -N1. Can this be improved to be as swift as v2?
> (288 files á 5 minutes = 24 hours)
> 
> /Elof
> 
> 
> On Fri, 29 Apr 2011, Carter Bullard wrote:
> 
>> Hey Elof,
>> I have the closed piped issue fixed now.  Its a small fix in every client, so you should wait to get a new client release.
> 
>> Carter
> 
> 
> 
>>>>> Two examples using the old ra v2.x :
>>>>> 
>>>>> 1)
>>>>> time ra -Zb -nr argus.log - ip | head -1
>>>>> 04-27-11 23:54:00.925018  s        tcp             10.10.10.10.46382 ->   20.20.20.20.1503   5467  5550  967561   2559850     PA_PA
>>>>> 
>>>>> real    0m0.004s
>>>>> user    0m0.000s
>>>>> sys     0m0.000s
>>>>> 
>>>>> 
>>>>> 2)
>>>>> time ra -Zb -nr argus-20110428.log - ip | grep -q "PA_PA$"
>>>>> 
>>>>> real    0m0.004s
>>>>> user    0m0.000s
>>>>> sys     0m0.000s
>>>>> 
>>>>> 
>>>>> Both examples only take 0.004s to execute.
>>>>> Good!
>>>>> 
>>>>> 
>>>>> 
>>>>> Now I try the same using ra v3 :
>>>>> 
>>>>> 1)
>>>>> time ra -Zb -nr argus.log - ip | head -1
>>>>> 04-27-11 23:54:00.925018  s        tcp             30.30.30.30.32451 ->   40.40.40.40.25    52  97  1151   12274     PA_PA
>>>>> 
>>>>> real    0m50.043s
>>>>> user    0m48.171s
>>>>> sys     0m1.892s
>>>>> 
>>>>> 
>>>>> 2)
>>>>> time ra -Zb -nr argus-20110429.13.log - ip | grep -q "PA_PA$"
>>>>> 
>>>>> real    0m50.161s
>>>>> user    0m48.103s
>>>>> sys     0m2.068s
>>>>> 
>>>>> 
>>>>> The commands take 50 seconds (!!!) to complete when they should have taken approx 0.004 seconds.
>>>>> 
>>>>> The argus.log file is 96 MB and hold 828 372 rows of data.
>>>>> (The larger the file, the longer I have to wait until the command terminates. If I have an old argus.log holding 24 hours of data, it will take ~30 minutes to parse it (even longer if it is bzipped))
>>>>> 
>>>>> 
>>>>> It takes 50 seconds just to parse through 100% of the file:
>>>>> time ra -nr argus.log - ip > /dev/null
>>>>> 
>>>>> real    0m50.257s
>>>>> user    0m48.599s
>>>>> sys     0m1.596s



More information about the argus mailing list