[PATCH net-next] Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Jarek Poplawski
Date: Tuesday, July 14, 2009 - 12:41 pm

On Thu, Jul 09, 2009 at 10:34:17PM +0200, Paweł Staszewski wrote:
...

So it looks like the patch tested earlier could be still useful; after
changing the inflate_threshold_root it seems these warnings should be
very rare but there is no reason to alarm users with something they
can't fix optimally, anyway.

Thanks,
Jarek P.
--------------------->
ipv4: Fix inflate_threshold_root automatically

During large updates there could be triggered warnings like: "Fix
inflate_threshold_root. Now=25 size=11 bits" if inflate() of the root
node isn't finished in 10 loops. It should be much rarer now, after
changing the threshold from 15 to 25, and a temporary problem, so
this patch tries to handle it automatically using a fix variable to
increase by one inflate threshold for next root resizes (up to the 35
limit, max fix = 10). The fix variable is decreased when root's
inflate() finishes below 7 loops (even if some other, smaller table/
trie is updated -- for simplicity the fix variable is global for now).

Reported-by: Pawel Staszewski <pstaszewski@itcare.pl>
Reported-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Tested-by: Pawel Staszewski <pstaszewski@itcare.pl>
Signed-off-by: Jarek Poplawski <jarkao2@gmail.com>
---

diff -Nurp a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
--- a/net/ipv4/fib_trie.c	2009-07-13 13:32:53.000000000 +0200
+++ b/net/ipv4/fib_trie.c	2009-07-13 15:16:18.000000000 +0200
@@ -327,6 +327,8 @@ static const int inflate_threshold = 50;
 static const int halve_threshold_root = 15;
 static const int inflate_threshold_root = 25;
 
+static int inflate_threshold_root_fix;
+#define INFLATE_FIX_MAX 10	/* a comment in resize() */
 
 static void __alias_free_mem(struct rcu_head *head)
 {
@@ -617,7 +619,8 @@ static struct node *resize(struct trie *
 	/* Keep root node larger  */
 
 	if (!tn->parent)
-		inflate_threshold_use = inflate_threshold_root;
+		inflate_threshold_use = inflate_threshold_root +
+					inflate_threshold_root_fix;
 	else
 		inflate_threshold_use = inflate_threshold;
 
@@ -641,15 +644,27 @@ static struct node *resize(struct trie *
 	}
 
 	if (max_resize < 0) {
-		if (!tn->parent)
-			pr_warning("Fix inflate_threshold_root."
-				   " Now=%d size=%d bits\n",
-				   inflate_threshold_root, tn->bits);
-		else
+		if (!tn->parent) {
+			/*
+			 * It was observed that during large updates even
+			 * inflate_threshold_root = 35 might be needed to avoid
+			 * this warning; but it should be temporary, so let's
+			 * try to handle this automatically.
+			 */
+			if (inflate_threshold_root_fix < INFLATE_FIX_MAX)
+				inflate_threshold_root_fix++;
+			else
+				pr_warning("Fix inflate_threshold_root."
+					   " Now=%d size=%d bits fix=%d\n",
+					   inflate_threshold_root, tn->bits,
+					   inflate_threshold_root_fix);
+		} else {
 			pr_warning("Fix inflate_threshold."
 				   " Now=%d size=%d bits\n",
 				   inflate_threshold, tn->bits);
-	}
+		}
+	} else if (max_resize > 3 && !tn->parent && inflate_threshold_root_fix)
+		inflate_threshold_root_fix--;
 
 	check_tnode(tn);
 
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Thu Jun 25, 8:48 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Thu Jun 25, 2:52 pm)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Fri Jun 26, 3:06 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Jorge Boncompte [DTI2], (Fri Jun 26, 3:26 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Fri Jun 26, 3:47 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paul E. McKenney, (Fri Jun 26, 10:05 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Fri Jun 26, 10:26 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paul E. McKenney, (Fri Jun 26, 11:21 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Sat Jun 27, 5:28 pm)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Sun Jun 28, 8:32 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Sun Jun 28, 8:48 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Mon Jun 29, 12:57 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Mon Jun 29, 1:08 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Mon Jun 29, 1:47 am)
Re: rib_trie / Fix inflate_threshold_root. Now=15 size=11 bits, Paweł Staszewski, (Mon Jun 29, 2:43 am)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Paweł Staszewski, (Mon Jun 29, 2:51 am)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Paweł Staszewski, (Mon Jun 29, 9:24 am)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Paweł Staszewski, (Tue Jun 30, 1:16 pm)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Paweł Staszewski, (Tue Jun 30, 4:31 pm)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Paweł Staszewski, (Wed Jul 1, 10:43 pm)
Re: [PATCH net-2.6] Re: rib_trie / Fix inflate_threshold_r ..., Stephen Hemminger, (Fri Jul 10, 8:29 am)
[PATCH net-next] Re: rib_trie / Fix inflate_threshold_root ..., Jarek Poplawski, (Tue Jul 14, 12:41 pm)