Hi everyone,

I was thinking about doing a project on StreamIT, and I need some advice 
about whether this is the right tool for the job.

Basically, I want to do high-speed packet processing, somewhat like the Click 
Modular Router does, but with more general-purpose programmability on the 
reassembled flows.  I'd like to be able to take a stream of packets in, 
reassemble it using a (or several) StreamIT element(s), and then push the 
reassembled flows off to other elements for further analysis, in a data-
dependent way.

I'm very interested in this platform due to the amount of backend work that's 
already been done.  In particular, I really like how the compiler and runtime 
automatically figure out scheduling, and that there's been some work done in 
optimizing the cache behavior of streaming applications.  Both of these can be 
quite fiddly to get right using native pthreads; it's great to have this 
handled by 
the environment.

My concerns are several:
(1) What type of data can be passed in a stream?  I'd like to be able to pass 
very 
low-level things, basically thinly-encapsulated void*'s (probably inside a 
struct) 
that hold packet/event data.  Looking at the 2.1.1 README, I see written that  
"The compiler does not support passing structures or complex numbers as 
stream parameters."  Is the README accurate?

(2) Does the runtime support work-stealing?  That is, if I have several copies 
of 
an element set up (perhaps in round-robin fashion) and one has too much 
work, can the runtime migrate work off of one queue to another dynamically?  
Most of the earlier publications talk about static scheduling due to the 
predictable nature of the StreamIT computation elements, but I'm not sure this 
approach is best for a workload characterized by wide variance in compute 
times (depending on the type of data) and time-varying data rates.

(3) Is there any support for per-element affinity when routing data through the 
element graph?  Unfortunately, I'm going to need to keep some state around, 
and I'm afraid that if I can't "suggest" to the runtime that certain work units 
should be processed by certain elements, I'm going to tear up my cache 
performance.

Any help would be appreciated.

Thanks,
DA

-- 
David R. Albrecht
Research Assistant, Hatswitch Group
U. Illinois Urbana-Champaign
+1 (312) 445-0883
[email protected]

_______________________________________________
StreamIt-users mailing list
[email protected]
https://lists.csail.mit.edu/mailman/listinfo/streamit-users

Reply via email to