tcp: Cache align tcp_stats
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 22 Mar 2013 04:58:53 +0000 (12:58 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 22 Mar 2013 05:00:10 +0000 (13:00 +0800)
- tcp_stats is padded to multiple cache line size; add comment about it
- Cache align the per-cpu tcp_stats array

sys/netinet/tcp_subr.c
sys/netinet/tcp_var.h

index 6d0cac3..8166f8a 100644 (file)
@@ -277,7 +277,7 @@ static struct malloc_pipe tcptemp_mpipe;
 static void tcp_willblock(void);
 static void tcp_notify (struct inpcb *, int);
 
-struct tcp_stats tcpstats_percpu[MAXCPU];
+struct tcp_stats tcpstats_percpu[MAXCPU] __cachealign;
 
 static int
 sysctl_tcpstats(SYSCTL_HANDLER_ARGS)
index ce3d2fe..7b0821e 100644 (file)
@@ -327,6 +327,8 @@ struct tcpcb {
 
 /*
  * TCP statistics.
+ *
+ * NOTE: Make sure this struct's size is multiple cache line size.
  */
 struct tcp_stats {
        u_long  tcps_connattempt;       /* connections initiated */
@@ -440,6 +442,8 @@ struct tcp_stats {
        u_long  tcps_sc_zonefail;       /* zalloc() failed */
        u_long  tcps_sc_sendcookie;     /* SYN cookie sent */
        u_long  tcps_sc_recvcookie;     /* SYN cookie received */
+
+       u_long  tcps_pad[6];            /* pad to cache line size (64B) */
 };
 
 #ifdef _KERNEL