[OpenWrt-Devel] Introducing "fastpath" - Kernel module for speeding up IP forwarding

Tomer Eliyahu tomereliyahu1 at gmail.com
Mon Dec 22 09:06:09 EST 2014


We are software developers, part of Marvell's cellular platform
infrastructure team.

Our team has been working on a project named "fastpath" for speeding
up IP forwarding in embedded systems.
The initial version (fastpath v1) has already been successfully
deployed in our latest pxa1801 (cellular modem) based products.

We are in the final stages of fastpath v2 development, which is
completely hardware independent and requires minimal changes in the
generic networking code (the project consists of a kernel module and a
single kernel patch); despite being hardware independent, fastpath v2
already achieved the same level of performance (as fastpath v1) and
even increased stability.

Our development platform is running openwrt Barrier Breaker (r43694),
so naturally we chose to suggest this to the openwrt development
community first.

You can find a brief description of our fastpath solution below.

We are anxious to hear your thoughts/comments and will gladly share the code.

Best Regards,

Ram Marzin ramm at marvell.com
Tomer Eliyahu tomere at marvell.com

Fastpath in a nutshell

The basic concept of fastpath is to optimize the data-plane while
keeping the control-plane in the generic networking stack.
This is a known concept in the industry which is commonly used in
embedded systems [1], but so far we couldn't find any open source
implementation for it.

Fast path implements an optimized data-plane, which replaces the
generic data-plane forwarding code for selected connections. The
data-plane implementation includes a straight forward optimized packet
processing engine which handles all the required packet manipulation
for IP forwarding, such as decrement ttl/hop count, checksum
adjustment, MAC header encapsulation and "dummy NAT" (TCP/UDP traffic
which does not carry any L3/L4 information in the packet payload).

As noted above, the control-plane is handled by the generic networking
stack, with the only exception of learning new connections and marking
the valid ones as fastpath - some connections can't participate in
fastpath, such as any "non-dummy NAT" connections (e.g. FTP control
port), local traffic, and any protocol which is not supported (e.g.
IPv6 extensions, IPSec, IPv4 fragmanted packets, etc.).
Needless to say that ALL non-fastpath connections / protocols will
work as is, i.e. they simply won't go through fastpath.

As a rule of thumb, it is safe to assume that in most of the cases,
90% of the data will go through fastpath. In our experiments on
pxa1801, fastpath alone *almost doubled* the performance (both
Throughput and MIPS consumption) for TCP/UDP IPv4/IPv6 forwarding.

[1] http://www.embedded.com/design/operating-systems/4403058/Accelerating-network-packet-processing-in-Linux
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org

More information about the openwrt-devel mailing list