Thread (19 messages) 19 messages, 4 authors, 2012-08-04

Re: [PATCH 1/2] net: Allow to create links with given ifindex

From: Eric W. Biederman <hidden>
Date: 2012-08-02 11:10:08

Eric Dumazet [off-list ref] writes:
On Tue, 2012-07-31 at 04:58 -0700, Eric W. Biederman wrote:
quoted
Making lo the particularly interesting case.

BTW, I noticed in my benchmarks, that once I remove the contention on
dst refcnt (using a percpu cache of dsts), I have a strange performance
cost accessing net->loopback_dev->ifindex in ip_route_output_key.

Strange because I see no false sharing on this ifindex location for
loopback device.

So we probably can save some cycles adding a net->loopback_ifindex
to remove one dereference.
I am going to let Pavel tackle the actual work because only migration
really cares and he is working on migration right now.

But assuming we merge the per network namespace ifindex counter we
can change net->loopback_dev->ifindex to LOOPBACK_IFINDEX and
define "#define LOOPBACK_IFINDEX 1"

Certainly that works in the initial network namespace today and might be
worth testing.
If ifindex are per network space, I guess we'll need to change
arp_hashfn() or else we'll use some slots more than others.
Darn.  I hate being right about there being a few places to fix
up.

ndisc_hashfn also has the same limitation.

Eric
quoted hunk ↗ jump to hunk
diff --git a/include/net/arp.h b/include/net/arp.h
index 7f7df93..37aac58 100644
--- a/include/net/arp.h
+++ b/include/net/arp.h
@@ -10,7 +10,7 @@ extern struct neigh_table arp_tbl;
 
 static inline u32 arp_hashfn(u32 key, const struct net_device *dev, u32 hash_rnd)
 {
-	u32 val = key ^ dev->ifindex;
+	u32 val = key ^ (u32)(unsigned long)dev;
 
 	return val * hash_rnd;
 }
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help