[Bro-Dev] help Reading the backtrace

Aashish Sharma asharma at lbl.gov
Thu Jan 19 17:54:33 PST 2017


SO this doesn't (at the moment) seem to be related to table expiration. My table is maintained on manager and expire_func only runs on manager.  

But, I see 'a' worker stall with 99-100% CPU for a good while while all other workers go down to 5-6% CPU. conn.log continues to grow though

GDB points to : Get() in install/bro-2.5/src/threading/Queue.h : 

template<typename T>
inline T Queue<T>::Get()
        {
        safe_lock(&mutex[read_ptr]);

        int old_read_ptr = read_ptr;

        if ( messages[read_ptr].empty() && ! ((reader && reader->Killed()) || (writer && writer->Killed())) )
                {
                struct timespec ts;
                ts.tv_sec = time(0) + 5;
                ts.tv_nsec = 0;

----->          pthread_cond_timedwait(&has_data[read_ptr], &mutex[read_ptr], &ts);


On a side note, Well, why is this on bro-dev ? Not entirely sure. :) I think eventually this might go into what my script is messing up and whats a better way to script the code, I suppose. 

Aashish 


On Thu, Jan 19, 2017 at 09:55:40AM -0800, Robin Sommer wrote:
> 
> 
> On Thu, Jan 19, 2017 at 09:44 -0800, you wrote:
> 
> > Still, to clearify, there might be a possibility that because at
> > present table_incremental_step=5000, somehow expiring >> 5000 entries
> > continiously every moment might cause cause Queue to deadlock
> > resulting in BRO to stop packets processing ?
> 
> It shouldn't deadlock. What I can see happening, depending on load and
> these parameters, is Bro spending most of its time going through the
> table to expire entries and only getting to few packets in between (so
> not complete stop of processing, but not getting much done either)
> 
> Robin
> 
> -- 
> Robin Sommer * ICSI/LBNL * robin at icir.org * www.icir.org/robin


More information about the bro-dev mailing list