aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/net.h
diff options
context:
space:
mode:
authorEric Dumazet <dada1@cosmosbay.com>2009-03-15 22:59:13 -0400
committerDavid S. Miller <davem@davemloft.net>2009-03-15 22:59:13 -0400
commit8bdd663aba341c15cd2fa9dbd7061b8b387964dc (patch)
tree9b80e3490f43477dbf42602cfc6b6d198bffc669 /include/linux/net.h
parentff4fbd43fe82de28710761f2cc2ed122d716483a (diff)
net: reorder fields of struct socket
On x86_64, its rather unfortunate that "wait_queue_head_t wait" field of "struct socket" spans two cache lines (assuming a 64 bytes cache line in current cpus) offsetof(struct socket, wait)=0x30 sizeof(wait_queue_head_t)=0x18 This might explain why Kenny Chang noticed that his multicast workload was performing bad with 64 bit kernels, since more cache lines ping pongs were involved. This litle patch moves "wait" field next "fasync_list" so that both fields share a single cache line, to speedup sock_def_readable() Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/net.h')
-rw-r--r--include/linux/net.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/linux/net.h b/include/linux/net.h
index 4515efae4c39..4fc2ffd527f9 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -129,11 +129,15 @@ struct socket {
129 socket_state state; 129 socket_state state;
130 short type; 130 short type;
131 unsigned long flags; 131 unsigned long flags;
132 const struct proto_ops *ops; 132 /*
133 * Please keep fasync_list & wait fields in the same cache line
134 */
133 struct fasync_struct *fasync_list; 135 struct fasync_struct *fasync_list;
136 wait_queue_head_t wait;
137
134 struct file *file; 138 struct file *file;
135 struct sock *sk; 139 struct sock *sk;
136 wait_queue_head_t wait; 140 const struct proto_ops *ops;
137}; 141};
138 142
139struct vm_area_struct; 143struct vm_area_struct;