netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] changing value of NETDEV_ALIGN to cacheline size
@ 2006-05-15 12:08 Christian Borntraeger
  2006-05-15 15:02 ` Randy.Dunlap
  0 siblings, 1 reply; 8+ messages in thread
From: Christian Borntraeger @ 2006-05-15 12:08 UTC (permalink / raw)
  To: netdev

while digging through the alloc_netdev function I asked myself why there is a
fixed alignment for netdevices. Is there a special reason for choosing 32? If
yes, I suggest to add a comment to the definition. 

If not, I suspect cacheline alignment might be beneficial:
struct net_device contains several variables which are cache aligned 
(poll_list, queue_lock .....). As far as I can see, the compiler tries to 
increase the size of the structure to make that possible, but expects the
whole structure to be aligned to cache line size as well. With the current
value for NETDEV_ALIGN we dont align "struct net_device" to the cache line,
instead we align it to 32 bytes. That means that poll_list, queue_lock and 
friends are not always cache aligned, but 32 bytes aligned.

The only reason why everything worked so far is the slab allocator design, 
which gives us a page aligned struct net_device in most cases. I think we 
should not rely on the behaviour of the memory allocator and use a different 
value for NETDEV_ALIGN instead. Any comments or corrections?

cheers Christian



The patch below is compile and boot tested on s390 and x86.

Signed-off-by: Christian Borntraeger <borntrae@de.ibm.com>

include/linux/netdevice.h |    2 +-
net/core/dev.c            |    2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------

--- a/include/linux/netdevice.h	4 Apr 2006 07:25:47 -0000
+++ b/include/linux/netdevice.h	15 May 2006 11:06:05 -0000
@@ -504,7 +504,7 @@
 	struct class_device	class_dev;
 };
 
-#define	NETDEV_ALIGN		32
+#define	NETDEV_ALIGN		L1_CACHE_BYTES
 #define	NETDEV_ALIGN_CONST	(NETDEV_ALIGN - 1)
 
 static inline void *netdev_priv(struct net_device *dev)
--- a/net/core/dev.c	4 Apr 2006 07:25:50 -0000
+++ b/net/core/dev.c	15 May 2006 11:06:05 -0000
@@ -2986,7 +2986,7 @@
 	struct net_device *dev;
 	int alloc_size;
 
-	/* ensure 32-byte alignment of both the device and private area */
+	/* ensure cacheline alignment of both the device and private area */
 	alloc_size = (sizeof(*dev) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST;
 	alloc_size += sizeof_priv + NETDEV_ALIGN_CONST;
 

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2006-05-16 15:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-15 12:08 [RFC] changing value of NETDEV_ALIGN to cacheline size Christian Borntraeger
2006-05-15 15:02 ` Randy.Dunlap
2006-05-15 21:30   ` David S. Miller
2006-05-15 21:39     ` Rick Jones
2006-05-15 21:58       ` Stephen Hemminger
2006-05-15 22:49       ` David S. Miller
2006-05-15 23:01         ` Rick Jones
2006-05-16 15:16         ` Christian Borntraeger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).