In my second year, I also did a <a href="http://www.cs.washington.edu/homes/grant/552proj.html">cool project</a> with <a href="http://www.cs.washington.edu/homes/eric">Eric Anderson</a> for the <a href="http://www.cs.washington.edu/education/courses/552/">distributed and parallel systems course</a>.  It was a general-purpose, user-programmable, kernel-resident packet processor (boy, what a mouthful!).  It was a good idea, but its performance suffered a little due to a massive, sparse switch statement that was converted to a series of tests and branches by the compiler.  We never had time to rewrite it and collect some real times, but we're sure they would have been great.  Actually, dynamic compilation would have been ideal for this application.  We also had some other ideas for optimizing the computation of which packet processors should execute on a given packet, but development on <a href="http://www.cs.washington.edu/research/projects/spin/www/papers/Usenix96/extprotarch.ps">SPIN's networking framework</a> was beginning by the end of the quarter, so we didn't bother to pursue it further.  <h3>
