OpenWrt Source Repository
Go to file
Felix Fietkau 8eb57d0cd7 kernel: align the skb padding to power of two
The skb is usually started by a padding which allows the protocols in the
network stack to add their headers in front of the payload. The skb can be
reallocated in case the preallocated padding is not large enough. This can for
example happen in the function __skb_cow which will check the requested extra
headroom and allocate more buffer when the requested headroom is bigger than
the available one. The extra buffer is aligned again to the multiple of the
NET_SKB_PAD of the target architecture.

The macro used to create the multiple of the NET_SKB_PAD is written in a way
which allows only values power two as alignment parameter. The currently used
value of 48 bytes can not be written as n ** 2 but as 2 ** 4 + 2 ** 5. The
extra buffer is therefore not always the multiple of 48 but can be 16, 64, 80,
128, 144 and so on. The generated values are also not monotonic (48 requested
bytes are mapped to 80 allocated bytes and 49 requested bytes are mapped to 64
allocated bytes).

These unexpected small values result in more reallocations of the buffer. This
was noticed prominently during tests between two QCA9558 720 MHz devices which
were connected via ethernet to PCs and had a HT40 802.11n 3x3 link between each
other. The throughput PC-to-PC during iperf TCP runs increased reliable from
186 Mibit/s to 214 Mibit/s in one direction and from 195 Mibit/s to 220 Mibit/s
in the other direction. This is a performance increase of ~14% just by reducing
the amount of reallocations.

Signed-off-by: Sven Eckelmann <sven@open-mesh.com>

SVN-Revision: 37948
2013-09-11 14:30:15 +00:00
docs docs: update remaining references to functions.sh 2012-12-20 15:29:33 +00:00
include Fix IPv6 NAT breaking older kernels 2013-09-03 06:29:46 +00:00
package rpcd: update to git head 2013-09-11 12:13:33 +00:00
scripts scripts/feeds: ensure that --ff is enabled 2013-09-02 18:25:10 +00:00
target kernel: align the skb padding to power of two 2013-09-11 14:30:15 +00:00
toolchain toolchain/gcc: upgrade linaro gcc 4.6 to 4.6-2013.05 2013-09-11 14:29:44 +00:00
tools tools/cmake: disable qt related checks to fix build issues 2013-09-07 18:33:07 +00:00
.gitattributes
.gitignore
BSDmakefile
Config.in build: enable MIPS16 again, but make it depend on !gcc-4.6 2013-09-10 14:40:06 +00:00
feeds.conf.default feeds.conf.default: switch packages feed to git (#13818) 2013-07-05 02:04:40 +00:00
LICENSE
Makefile build: it is no longer necessary to call make target/linux/clean as part of make clean 2012-12-02 15:26:28 +00:00
README build: BSD compile fixes 2013-03-07 17:32:29 +00:00
rules.mk build: decouple the mips16 support flag from the toolchain 2013-08-14 13:02:29 +00:00

This is the buildsystem for the OpenWrt Linux distribution.

Please use "make menuconfig" to configure your appreciated
configuration for the toolchain and firmware.

You need to have installed gcc, binutils, bzip2, flex, python, perl
make, find, grep, diff, unzip, gawk, getopt, libz-dev and libc headers.

Run "./scripts/feeds update -a" to get all the latest package definitions
defined in feeds.conf / feeds.conf.default respectively
and "./scripts/feeds install -a" to install symlinks of all of them into
package/feeds/.

Use "make menuconfig" to configure your image.

Simply running "make" will build your firmware.
It will download all sources, build the cross-compile toolchain, 
the kernel and all choosen applications.

You can use "scripts/flashing/flash.sh" for remotely updating your embedded
system via tftp.

The OpenWrt system is documented in docs/. You will need a LaTeX distribution
and the tex4ht package to build the documentation. Type "make -C docs/" to build it.

To build your own firmware you need to have access to a Linux, BSD or MacOSX system
(case-sensitive filesystem required). Cygwin will not be supported because of
the lack of case sensitiveness in the file system.


Sunshine!
	Your OpenWrt Project
	http://openwrt.org