netfilter: xt_rateest: Better struct xt_rateest layout
authorEric Dumazet <eric.dumazet@gmail.com>
Tue, 8 Jun 2010 12:11:19 +0000 (14:11 +0200)
committerPatrick McHardy <kaber@trash.net>
Tue, 8 Jun 2010 12:11:19 +0000 (14:11 +0200)
We currently dirty two cache lines in struct xt_rateest, this hurts SMP
performance.

This patch moves lock/bstats/rstats at beginning of structure so that
they share a single cache line.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>
include/net/netfilter/xt_rateest.h

index ddbf37e19616a486b73b15a7e5314c47e1ed80a8..b1d780e21ce3bf2b2089559fc1529083994d9331 100644 (file)
@@ -2,13 +2,17 @@
 #define _XT_RATEEST_H
 
 struct xt_rateest {
+       /* keep lock and bstats on same cache line to speedup xt_rateest_tg() */
+       struct gnet_stats_basic_packed  bstats;
+       spinlock_t                      lock;
+       /* keep rstats and lock on same cache line to speedup xt_rateest_mt() */
+       struct gnet_stats_rate_est      rstats;
+
+       /* following fields not accessed in hot path */
        struct hlist_node               list;
        char                            name[IFNAMSIZ];
        unsigned int                    refcnt;
-       spinlock_t                      lock;
        struct gnet_estimator           params;
-       struct gnet_stats_rate_est      rstats;
-       struct gnet_stats_basic_packed  bstats;
 };
 
 extern struct xt_rateest *xt_rateest_lookup(const char *name);