linux/net/decnet
David S. Miller 62fa8a846d net: Implement read-only protection and COW'ing of metrics.
Routing metrics are now copy-on-write.

Initially a route entry points it's metrics at a read-only location.
If a routing table entry exists, it will point there.  Else it will
point at the all zero metric place-holder called 'dst_default_metrics'.

The writeability state of the metrics is stored in the low bits of the
metrics pointer, we have two bits left to spare if we want to store
more states.

For the initial implementation, COW is implemented simply via kmalloc.
However future enhancements will change this to place the writable
metrics somewhere else, in order to increase sharing.  Very likely
this "somewhere else" will be the inetpeer cache.

Note also that this means that metrics updates may transiently fail
if we cannot COW the metrics successfully.

But even by itself, this patch should decrease memory usage and
increase cache locality especially for routing workloads.  In those
cases the read-only metric copies stay in place and never get written
to.

TCP workloads where metrics get updated, and those rare cases where
PMTU triggers occur, will take a very slight performance hit.  But
that hit will be alleviated when the long-term writable metrics
move to a more sharable location.

Since the metrics storage went from a u32 array of RTAX_MAX entries to
what is essentially a pointer, some retooling of the dst_entry layout
was necessary.

Most importantly, we need to preserve the alignment of the reference
count so that it doesn't share cache lines with the read-mostly state,
as per Eric Dumazet's alignment assertion checks.

The only non-trivial bit here is the move of the 'flags' member into
the writeable cacheline.  This is OK since we are always accessing the
flags around the same moment when we made a modification to the
reference count.

Signed-off-by: David S. Miller <davem@davemloft.net>
2011-01-26 20:51:05 -08:00
..
netfilter include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
Kconfig [NET]: Rethink mark field in struct flowi 2006-12-02 21:21:39 -08:00
Makefile Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
README Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
TODO Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
af_decnet.c net: Abstract default ADVMSS behind an accessor. 2010-12-13 12:52:14 -08:00
dn_dev.c Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2011-01-13 10:05:56 -08:00
dn_fib.c decnet: RCU conversion and get rid of dev_base_lock 2010-11-08 13:50:08 -08:00
dn_neigh.c decnet: RCU conversion and get rid of dev_base_lock 2010-11-08 13:50:08 -08:00
dn_nsp_in.c Merge branch 'master' of /repos/git/net-next-2.6 2010-04-20 16:02:01 +02:00
dn_nsp_out.c net/decnet: Adjust confusing if indentation 2010-08-16 21:06:30 -07:00
dn_route.c net: Implement read-only protection and COW'ing of metrics. 2011-01-26 20:51:05 -08:00
dn_rules.c net: use the macros defined for the members of flowi 2010-11-17 12:27:45 -08:00
dn_table.c net: cleanup unused macros in net directory 2011-01-19 23:20:04 -08:00
dn_timer.c Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sysctl_net_decnet.c net: avoid limits overflow 2010-11-10 12:12:00 -08:00

README

                       Linux DECnet Project
                      ======================

The documentation for this kernel subsystem is available in the
Documentation/networking subdirectory of this distribution and also
on line at http://www.chygwyn.com/DECnet/

Steve Whitehouse <SteveW@ACM.org>