Re: Kernel panic: Route cache, RCU, possibly FIB trie.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jesper Dangaard Brouer writes:

 > > It is almost certainly the cause of your crashes, that code
 > > is still extremely raw and that's why it is listed as "EXPERIMENTAL".
 > 
 > It seems your are right :-) (and I'll take more care of using experimental 
 > code on production again). The machine, has now been running for 34 hours 
 > without crashing.  The strange thing is that I'm running the same kernel 
 > on 30 other (similar) machines, which have not crashed.  (I do suspect the 
 > specific traffic load pattern to influence this)

  Sounds good... seems like Dave did the the correct analysis.

 > BUT, I do think I have noticed another problem in the garbage collection 
 > code (route.c), that causes the garbage collector (almost) never to 
 > garbage collect.

  We're trying to avoid most/all periodic GC in hi-flow systems and just to 
  do GC as new entries are created. We use the patch below to create et another 
  (unfortunately) /proc entry to better control this. ip_rt_gc_max_chain_length 
  it also decreases the threshhold for this from 8 to 4 for this.

 Cheers.
						--ro

 
--- linux-2.6.14.5/net/ipv4/route.c.orig	2006-01-02 14:24:00.000000000 +0100
+++ linux-2.6.14.5/net/ipv4/route.c	2006-01-02 15:26:29.000000000 +0100
@@ -126,6 +126,7 @@
 static int ip_rt_error_cost		= HZ;
 static int ip_rt_error_burst		= 5 * HZ;
 static int ip_rt_gc_elasticity		= 8;
+static int ip_rt_gc_max_chain_length	= 4;
 static int ip_rt_mtu_expires		= 10 * 60 * HZ;
 static int ip_rt_min_pmtu		= 512 + 20 + 20;
 static int ip_rt_min_advmss		= 256;
@@ -977,7 +978,7 @@
 		 * The second limit is less certain. At the moment it allows
 		 * only 2 entries per bucket. We will see.
 		 */
-		if (chain_length > ip_rt_gc_elasticity) {
+		if (chain_length > ip_rt_gc_max_chain_length) {
 			*candp = cand->u.rt_next;
 			rt_free(cand);
 		}
@@ -3017,6 +3018,14 @@
 		.proc_handler	= &proc_dointvec,
 	},
 	{
+		.ctl_name	= NET_IPV4_ROUTE_GC_MAX_CHAIN_LENGTH,
+		.procname	= "gc_max_chain_length",
+		.data		= &ip_rt_gc_max_chain_length,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
 		.ctl_name	= NET_IPV4_ROUTE_MTU_EXPIRES,
 		.procname	= "mtu_expires",
 		.data		= &ip_rt_mtu_expires,
--- linux-2.6.14.5/include/linux/sysctl.h.orig	2006-01-02 14:46:55.000000000 +0100
+++ linux-2.6.14.5/include/linux/sysctl.h	2006-01-02 14:47:01.000000000 +0100
@@ -375,6 +375,7 @@
 	NET_IPV4_ROUTE_MIN_ADVMSS=17,
 	NET_IPV4_ROUTE_SECRET_INTERVAL=18,
 	NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS=19,
+	NET_IPV4_ROUTE_GC_MAX_CHAIN_LENGTH=20,
 };
 
 enum


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux