aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorEric Dumazet <[email protected]>2012-05-12 03:32:13 +0000
committerDavid S. Miller <[email protected]>2012-05-12 15:50:49 -0400
commit536edd67109df5e0cdb2c4ee759e9bade7976367 (patch)
treeb253ee5ce32fdc37346120c9ebbfd1f187ad6b95 /include/linux
parent470f16c83ce5e481d50cb6da076e836b6219a57c (diff)
codel: use Newton method instead of sqrt() and divides
As Van pointed out, interval/sqrt(count) can be implemented using multiplies only. http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Iterative_methods_for_reciprocal_square_roots This patch implements the Newton method and reciprocal divide. Total cost is 15 cycles instead of 120 on my Corei5 machine (64bit kernel). There is a small 'error' for count values < 5, but we don't really care. I reuse a hole in struct codel_vars : - pack the dropping boolean into one bit - use 31bit to store the reciprocal value of sqrt(count). Suggested-by: Van Jacobson <[email protected]> Signed-off-by: Eric Dumazet <[email protected]> Cc: Dave Taht <[email protected]> Cc: Kathleen Nichols <[email protected]> Cc: Tom Herbert <[email protected]> Cc: Matt Mathis <[email protected]> Cc: Yuchung Cheng <[email protected]> Cc: Nandita Dukkipati <[email protected]> Cc: Stephen Hemminger <[email protected]> Signed-off-by: David S. Miller <[email protected]>
Diffstat (limited to 'include/linux')
0 files changed, 0 insertions, 0 deletions