Netmap: a novel framework for fast packet I/O
Although in the case of pfSense the bottleneck is the pf packet filter, I thought some of you might find this upcoming USENIX 2012 paper interesting.
The full paper is at http://info.iet.unipi.it/~luigi/papers/20120503-netmap-atc12.pdf
netmap: a novel framework for fast packet I/O
Many applications (routers, trafﬁc monitors, ﬁrewalls, etc.) need to send and receive packets at line rate even on very fast links. In this paper we present netmap, a novel framework that enables commodity operating systems to handle the millions of packets per seconds traversing 1..10 Gbit/s links, without requiring custom hardware or changes to applications.
In building netmap, we identiﬁed and successfully reduced or removed three main packet processing costs: per-packet dynamic memory allocations, removed by preallocating resources; system call overheads, amortized over large batches; and memory copies, eliminated by sharing buffers and metadata between kernel and userspace, while still protecting access to device registers and other kernel memory areas. Separately, some of these techniques have been used in the past. The novelty in our proposal is not only that we exceed the performance of most of previous work, but also that we provide an architecture that is tightly integrated with existing operating system primitives, not tied to speciﬁc hardware, and easy to use and maintain.
netmap has been implemented in FreeBSD and Linux for several 1 and 10 Gbit/s network adapters. In our prototype, a single core running at 900 MHz can send or receive 14.88 Mpps (the peak packet rate on 10 Gbit/s links). This is more than 20 times faster than conventional APIs. Large speedups (5x and more) are also achieved on user-space Click and other packet forwarding applications using a libpcap emulation library running on top of netmap.
Thank you, dhatz. I do find these sorts of papers very interesting.
There's nothing quite like challenging "the way we've always done it" and providing a significant benefit as a result.