Speeding up next-generation networking

An interessting talk (local copy) from Van Jacobson and Bob Felderman from the Linux.conf.au 2006 about the history and future of implementing networking stacks:

“The way we’ve always done it is not necessarily the same as the right way to do it”

The background is that the networking stacks we know today were initially created for MULTICS machines and had to had the well-known in-kernel design (networking card -> Interrupt service routine -> soft interrupt -> socket interface -> user space read()) because of the very slow paging mechanisms of MULTICS. This would not matter, if all computers would be singlecore machines. But on a multicore machines all the protocol work should be moved to the processor core that’s going to handle the data.

As a result a linear scalability on multicore systems can be achieved and everything gets a lot faster (about 6 times). Within the slides there are some measurements done by Van Jacobson on a patched linux machine supporting the benefits of this networking design.

But there is also some critisism from LWN here and here on this networking approach. Especially this detail might be of interest:

In traditional approach you also fetch all the headers on softirq,
but you do all the required work with them immediately and do not access
them when the rest of processing is done in process context. I do not
see how netchannels (without hardware classification) can improve
something here. At the first sight it makes locality worse. [...]
It is an amazing toy. But I see nothing, which could promote its status
to practical. Exokernels used to do this thing for ages, and all the
performance gains are compensated by overcomplicated classification
engine, which has to remain in kernel and essentially to do the same
work which routing/firewalling/socket hash tables do.

So more research might be neccessary to implement Van Jacobsons idea and make it a success.

Recent Entries

Leave a Reply

Enter this code