[Bro-Dev] 0MQ security considerations

Gilbert Clark gc355804 at ohio.edu
Thu Jul 28 19:04:28 PDT 2011


Matthias Vallentin wrote:
>> That said, keep in mind that some libraries (e.g. DataSeries) actually 
>> spawn additional worker threads.  
>>     
>
> Is it possible to configure the number of threads DataSeries uses?
>   
Yes, to some extent; DataSeries will always spawn at least two threads 
(one output thread and one compression / worker thread). 

The number of worker threads DataSeries spawns can be controlled by 
tweaking a variable in dataseries.bro, but this brings up a more general 
problem: what if we use a library that doesn't offer us the ability to 
do this?

Then again, if the library doesn't let us do this, maybe we just 
shouldn't be using that particular library...?

>> I don't understand this bit.  Say we have 10 things to log: {A, B, C, 
>> ... J}, and we queue 8 messages before we flush + rotate (for the sake 
>> of argument)
>>
>> Log+Flush+Rotate task = {A, B, C, D}      ---> Thread 1
>> Log+Flush task = {E, F, G, H}   ---> Thread 2
>> Log+Flush+Finish task = {I, J}   ---> Thread 3
>>
>> In this case, it seems possible that thread 3 could complete before 
>> threads 1 and 2, unless we forced tasks to lock the log file upon 
>> execution. . . but if we did that, I think the locking order would 
>> become less predictable as the system's load increased, leading to oddly 
>> placed chunks of log data and / or dropped messages if the file were to 
>> be closed before a previous rotate message made it to the logger.
>>     
>
> This is a good example of hot to not use task-based parallelism. As
> there exist inter-task dependencies, they have to be processed
> sequentially. For example, say these 10 things to log are generated for
> 18 http_reply events. What I was saying is that you have one task for
> all dependent actions/messages/steps:
>
>     Event  1: Log+Flush+Rotate+Log+Flush+Finish task = {A, ..., J}
>     ...
>     Event 18: Log+Flush+Rotate+Log+Flush+Finish task = {A, ..., J}
>
> Say the Log Manager component has 3 threads associated, then each thread
> would process 6 events, assuming a simple uniform scheduling strategy.
>
>   

Sure.  In this case, though, A-J essentially compose the entire log 
file, which is what's giving me some trouble; even if the LogManager has 
3 threads associated, it still has to pass entire LogWriters around 
between those threads and make sure no two threads are using the same 
LogWriter (assuming nothing was using e.g. thread-local storage, which 
might stipulate that thread assignments would need to be made at 
initialization and, once made, could never change).

So, I suppose it might be good to spawn a finite number of Bro worker 
threads and assign LogWriters to those (rather than spawning one bro 
worker thread per logwriter), but I don't see a way around binding an 
entire logwriter to a thread.  What I don't like about this is that it 
means any scheduling the task manager does would be coarse-grained at best.

>> Kind of.  Let me throw together a diagram and send it out; it's 
>> something that should probably end up in the documentation anyway :)
>>     
>
> Sounds good. This stuff is much better to comprehend with a visual aid!
>   
Rough cut of a general overview is attached.  Probably going to change 
quite a bit, but I think it might help illustrate the way the system 
works overall.

The architecture, at the moment, is geared toward supporting transparent 
replacement of threaded log writers with writers that work across 
sockets and / or IPC; anything the implements QueueInterface can be used 
to pass messages back and forth.  Before this would actually work in a 
network / IPC context, though, the messages would need to support 
serialization; haven't done that yet because it hasn't really been a 
priority.

Feedback / corrections / "THAT'S A STUPID MODEL!" are always appreciated.

--Gilbert

-------------- next part --------------
A non-text attachment was scrubbed...
Name: LogSystemOverview.pdf.bz2
Type: application/x-bzip
Size: 897244 bytes
Desc: not available
Url : http://mailman.icsi.berkeley.edu/pipermail/bro-dev/attachments/20110728/4403b3d7/attachment-0001.bin 


More information about the bro-dev mailing list