I am slowly picking up my old habits of wading through tons of junk http://www.slashdot.org/, and glean small nuggets of wisdom. I stumbled upon the Net Channels article, and I think it’s one of the most interesting new ideas I have heard in a while out of academia. Googling points to more relevant web pages with more details : on LWN, and DaveM’s blog.

Van’s slides are the only information we have right now, and according to DaveM’s post on net-dev list, he seems to have vanished without providing more details.

The basic idea is some-what easy to understand, but all the implications of this paradigm may not be evident on the first glance. I will pour in a few thoughts about it below:

Cache Behaviour: Because of ultra-fast CPUs, main memory cannot keep up with CPU, and slows the performance down. To improve performance, we want to keep as much data as possible in the cache, while it is being accesses. However, this is not always possible, and some of the things that cause problems are:

  • Context switches: Switching between processes or between kernel and use-mode, often causes poor data locality in the cache.
  • Switching between processor: is even more expensive. For example, because the process or kernel tasklet is suddenly on the other cpu, and doesn’t have any relevant data in the cache.
  • Huge data structures manipulated at different places by different tasks.
  • Locking: I don’t completely understand how cache gets affected by locking.

So, Van’s idea is to have a circular buffer for processing network packets that are accessed in a producer/consumer paradigm. There’s some code written by DaveM starting the implementation of Net Channels, but otherwise very little work has been done to implement it in Linux.

Share