[PATCH] tcp_cubic: use 32 bit math

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Stephen Hemminger
Date: Wednesday, March 7, 2007 - 6:07 pm

The basic calculation has to be done in 32 bits to avoid
doing 64 bit divide by 3. The value x is only 22bits max
so only need full 64 bits only for x^2.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>

---
 net/ipv4/tcp_cubic.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

--- net-2.6.22.orig/net/ipv4/tcp_cubic.c	2007-03-07 15:51:37.000000000 -0800
+++ net-2.6.22/net/ipv4/tcp_cubic.c	2007-03-07 17:06:02.000000000 -0800
@@ -96,7 +96,7 @@
  */
 static u32 cubic_root(u64 a)
 {
-	u64 x;
+	u32 x;
 
 	/* Initial estimate is based on:
 	 * cbrt(x) = exp(log(x) / 3)
@@ -104,9 +104,9 @@
 	x = 1u << (fls64(a)/3);
 
 	/* converges to 32 bits in 3 iterations */
-	x = (2 * x + div64_64(a, x*x)) / 3;
-	x = (2 * x + div64_64(a, x*x)) / 3;
-	x = (2 * x + div64_64(a, x*x)) / 3;
+	x = (2 * x + (u32)div64_64(a, (u64)x*(u64)x)) / 3;
+	x = (2 * x + (u32)div64_64(a, (u64)x*(u64)x)) / 3;
+	x = (2 * x + (u32)div64_64(a, (u64)x*(u64)x)) / 3;
 
 	return x;
 }
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] div64_64 support, Stephen Hemminger, (Fri Feb 23, 6:05 pm)
Re: [RFC] div64_64 support, Sami Farin, (Sat Feb 24, 9:19 am)
Re: [RFC] div64_64 support, Jan Engelhardt, (Mon Feb 26, 1:09 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Mon Feb 26, 2:28 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Mon Feb 26, 3:31 pm)
Re: [RFC] div64_64 support, Jan Engelhardt, (Mon Feb 26, 4:02 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Mon Feb 26, 4:44 pm)
Re: [RFC] div64_64 support, Jan Engelhardt, (Mon Feb 26, 5:05 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Mon Feb 26, 5:07 pm)
Re: [RFC] div64_64 support, Jan Engelhardt, (Mon Feb 26, 5:14 pm)
Re: [RFC] div64_64 support, H. Peter Anvin, (Mon Feb 26, 6:20 pm)
Re: [RFC] div64_64 support, Segher Boessenkool, (Mon Feb 26, 8:45 pm)
Re: [RFC] div64_64 support, Dan Williams, (Mon Feb 26, 11:21 pm)
Re: [RFC] div64_64 support, Andi Kleen, (Fri Mar 2, 7:31 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Mon Mar 5, 4:57 pm)
Re: [RFC] div64_64 support, David Miller, (Mon Mar 5, 5:25 pm)
Re: [RFC] div64_64 support, Andi Kleen, (Tue Mar 6, 6:34 am)
Re: [RFC] div64_64 support, Andi Kleen, (Tue Mar 6, 6:36 am)
Re: [RFC] div64_64 support II, Andi Kleen, (Tue Mar 6, 7:04 am)
Re: [RFC] div64_64 support, Eric Dumazet, (Tue Mar 6, 7:19 am)
Re: [RFC] div64_64 support, Andi Kleen, (Tue Mar 6, 7:45 am)
Re: [RFC] div64_64 support, Roland Kuhn, (Tue Mar 6, 8:10 am)
Re: [RFC] div64_64 support II, Dagfinn Ilmari , (Tue Mar 6, 10:43 am)
Re: [RFC] div64_64 support II, David Miller, (Tue Mar 6, 11:25 am)
Re: [RFC] div64_64 support, Stephen Hemminger, (Tue Mar 6, 11:29 am)
Re: [RFC] div64_64 support II, H. Peter Anvin, (Tue Mar 6, 11:48 am)
Re: [RFC] div64_64 support, H. Peter Anvin, (Tue Mar 6, 11:50 am)
Re: [RFC] div64_64 support, Andi Kleen, (Tue Mar 6, 12:48 pm)
Re: [RFC] div64_64 support, Stephen Hemminger, (Tue Mar 6, 1:04 pm)
Re: [RFC] div64_64 support, Sami Farin, (Tue Mar 6, 2:53 pm)
Re: [RFC] div64_64 support, David Miller, (Tue Mar 6, 2:58 pm)
Re: [RFC] div64_64 support, Sami Farin, (Tue Mar 6, 3:24 pm)
[PATCH] tcp_cubic: faster cube root, Stephen Hemminger, (Tue Mar 6, 3:47 pm)
cube root benchmark code, Stephen Hemminger, (Tue Mar 6, 3:58 pm)
Re: [PATCH] tcp_cubic: faster cube root, David Miller, (Tue Mar 6, 9:20 pm)
Update to cube root benchmark code, Willy Tarreau, (Tue Mar 6, 11:08 pm)
Re: [PATCH] tcp_cubic: faster cube root, Andi Kleen, (Wed Mar 7, 5:12 am)
Re: [RFC] div64_64 support, Chuck Ebbert, (Wed Mar 7, 9:11 am)
Re: [RFC] div64_64 support, Sami Farin, (Wed Mar 7, 11:32 am)
Re: [PATCH] tcp_cubic: faster cube root, David Miller, (Wed Mar 7, 12:33 pm)
[PATCH] tcp_cubic: use 32 bit math, Stephen Hemminger, (Wed Mar 7, 6:07 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, David Miller, (Wed Mar 7, 7:55 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Stephen Hemminger, (Wed Mar 7, 8:10 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, David Miller, (Wed Mar 7, 8:51 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Willy Tarreau, (Wed Mar 7, 9:16 pm)
Re: asm volatile [Was: [RFC] div64_64 support], Sami Farin, (Thu Mar 8, 11:23 am)
Re: asm volatile, David Miller, (Thu Mar 8, 3:01 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Willy Tarreau, (Sat Mar 10, 4:48 am)
Re: [PATCH] tcp_cubic: use 32 bit math, Stephen Hemminger, (Mon Mar 12, 2:11 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Willy Tarreau, (Tue Mar 13, 1:50 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Stephen Hemminger, (Wed Mar 21, 11:54 am)
Re: [PATCH] tcp_cubic: use 32 bit math, Willy Tarreau, (Wed Mar 21, 12:15 pm)
Re: [PATCH] tcp_cubic: use 32 bit math, Stephen Hemminger, (Wed Mar 21, 12:58 pm)
[PATCH 1/2] div64_64 optimization, Stephen Hemminger, (Wed Mar 21, 1:15 pm)
[PATCH 2/2] tcp: cubic optimization, Stephen Hemminger, (Wed Mar 21, 1:17 pm)
Re: [PATCH 1/2] div64_64 optimization, David Miller, (Thu Mar 22, 12:11 pm)
Re: [PATCH 2/2] tcp: cubic optimization, David Miller, (Thu Mar 22, 12:11 pm)