09 May, 2011
1 commit
-
TCP Cubic keeps a metric that estimates the amount of delayed
acknowledgements to use in adjusting the window. If an abnormally
large number of packets are acknowledged at once, then the update
could wrap and reach zero. This kind of ACK could only
happen when there was a large window and huge number of
ACK's were lost.This patch limits the value of delayed ack ratio. The choice of 32
is just a conservative value since normally it should be range of
1 to 4 packets.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
16 Mar, 2011
1 commit
15 Mar, 2011
6 commits
-
HyStart sets the initial exit point of slow start.
Suppose that HyStart exits at 0.5BDP in a BDP network and no history exists.
If the BDP of a network is large, CUBIC's initial cwnd growth may be
too conservative to utilize the link.
CUBIC increases the cwnd 20% per RTT in this case.Signed-off-by: Sangtae Ha
Acked-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Make HyStart less sensitive to abrupt delay variations due to buffer bloat.
Signed-off-by: Sangtae Ha
Acked-by: Stephen Hemminger
Reported-by: Lucas Nussbaum
Signed-off-by: David S. Miller -
This is a refined version of an earlier patch by Lucas Nussbaum.
Cubic needs RTT values in milliseconds. If HZ < 1000 then
the values will be too coarse.Signed-off-by: Stephen Hemminger
Reported-by: Lucas Nussbaum
Signed-off-by: David S. Miller -
The hystart code was written with assumption that HZ=1000.
Replace the use of jiffies with bictcp_clock as a millisecond
real time clock.Signed-off-by: Stephen Hemminger
Reported-by: Lucas Nussbaum
Signed-off-by: David S. Miller -
Make the spacing between ACK's that indicates a train a tuneable
value like other hystart values.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Jiffies wraps around therefore the correct way to compare is
to use cast to signed value.Note: cubic is not using full jiffies value on 64 bit arch
because using full unsigned long makes struct bictcp grow too
large for the available ca_priv area.Includes correction from Sangtae Ha to improve ack train detection.
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
10 Mar, 2011
1 commit
-
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
02 Mar, 2009
1 commit
-
It seems that implementation in yeah was inconsistent to what
other did as it would increase cwnd one ack earlier than the
others do.Size benefits:
bictcp_cong_avoid | -36
tcp_cong_avoid_ai | +52
bictcp_cong_avoid | -34
tcp_scalable_cong_avoid | -36
tcp_veno_cong_avoid | -12
tcp_yeah_cong_avoid | -38= -104 bytes total
Signed-off-by: Ilpo Järvinen
Signed-off-by: David S. Miller
02 Nov, 2008
1 commit
-
Signed-off-by: Sangtae Ha
Signed-off-by: David S. Miller
01 May, 2008
1 commit
-
Rename div64_64 to div64_u64 to make it consistent with the other divide
functions, so it clearly includes the type of the divide. Move its definition
to math64.h as currently no architecture overrides the generic implementation.
They can still override it of course, but the duplicated declarations are
avoided.Signed-off-by: Roman Zippel
Cc: Avi Kivity
Cc: Russell King
Cc: Geert Uytterhoeven
Cc: Ralf Baechle
Cc: David Howells
Cc: Jeff Dike
Cc: Ingo Molnar
Cc: "David S. Miller"
Cc: Patrick McHardy
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds
05 Mar, 2008
1 commit
-
We have updated CUBIC to fix some issues with slow increase in large
BDP networks. We also improved its convergence speed. The fix is in
fact very simple -- the window increase limit of smax during the
window probing phase (i.e., convex growth phase) is removed. We found
that this does not affect TCP friendliness, but only improves its
scalability. We have run some tests in our lab and also over the
Internet path from NCSU to Japan. These results can be seen from the
following page:http://netsrv.csc.ncsu.edu/wiki/index.php/Intra_protocol_fairness_testing_with_linux-2.6.23.9
http://netsrv.csc.ncsu.edu/wiki/index.php/RTT_fairness_testing_with_linux-2.6.23.9
http://netsrv.csc.ncsu.edu/wiki/index.php/TCP_friendliness_testing_with_linux-2.6.23.9Signed-off-by: Sangtae Ha
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
29 Jan, 2008
1 commit
-
Signed-off-by: Ilpo Järvinen
Signed-off-by: Herbert Xu
Signed-off-by: David S. Miller
11 Oct, 2007
1 commit
-
There is no need for such check in pkts_acked because the
callback is not invoked unless at least one segment got fully
ACKed (i.e., the snd_una moved past skb's end_seq) by the
cumulative ACK's snd_una advancement.Signed-off-by: Ilpo Järvinen
Signed-off-by: David S. Miller
31 Jul, 2007
2 commits
-
Remove use of received timestamp option value from RTT calculation in Cubic.
A hostile receiver may be returning a larger timestamp option than the original
value. This would cause the sender to believe the malevolent receiver had
a larger RTT and because Cubic tries to provide some RTT friendliness, the
sender would then favor the liar.Instead, use the jiffie resolutionRTT value already computed and
passed back after ack.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
This patch changes the API for the callback that is done after an ACK is
received. It solves a couple of issues:* Some congestion controls want higher resolution value of RTT
(controlled by TCP_CONG_RTT_SAMPLE flag). These don't really want a ktime, but
all compute a RTT in microseconds.* Other congestion control could use RTT at jiffies resolution.
To keep API consistent the units should be the same for both cases, just the
resolution should change.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
18 Jul, 2007
1 commit
-
None of the existing TCP congestion controls use the rtt value pased
in the ca_ops->cong_avoid interface. Which is lucky because seq_rtt
could have been -1 when handling a duplicate ack.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
13 Jun, 2007
1 commit
-
Because of the current default of 100, Cubic and BIC perform very
poorly compared to standard Reno.In the worst case, this change makes Cubic and BIC as aggressive as
Reno. So this change should be very safe.Signed-off-by: David S. Miller
26 Apr, 2007
5 commits
-
Do some simple changes to make congestion control API faster/cleaner.
* use ktime_t rather than timeval
* merge rtt sampling into existing ack callback
this means one indirect call versus two per ack.
* use flags bits to store options/settingsSigned-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
The following update received from Injong updates TCP cubic to the latest
version. I am running more complete tests and will have results after 4/1.According to Injong: the new version improves on its scalability,
fairness and stability. So in all properties, we confirmed it shows better
performance.NCSU results (for 2.6.18 and 2.6.20) available:
http://netsrv.csc.ncsu.edu/wiki/index.php/TCP_TestingThis version is described in a new Internet draft for CUBIC.
http://www.ietf.org/internet-drafts/draft-rhee-tcp-cubic-00.txtSigned-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Use willy's work in optimizing cube root by having table for small values.
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
The Newton-Raphson method is quadratically convergent so
only a small fixed number of steps are necessary.
Therefore it is faster to unroll the loop. Since div64_64 is no longer
inline it won't cause code explosion.Also fixes a bug that can occur if x^2 was bigger than 32 bits.
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Here is the current version of the 64 bit divide common code.
Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
13 Feb, 2007
1 commit
-
These module parameters should be in the read mostly area to avoid
cache pollution.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
11 Feb, 2007
1 commit
-
Signed-off-by: YOSHIFUJI Hideaki
Signed-off-by: David S. Miller
26 Oct, 2006
1 commit
-
Doug Leith observed a discrepancy between the version of CUBIC described
in the papers and the version in 2.6.18. A math error related to scaling
causes Cubic to grow too slowly.Patch is from "Sangtae Ha" . I validated that
it does fix the problems.See the following to show behavior over 500ms 100 Mbit link.
Sender (2.6.19-rc3) --- Bridge (2.6.18-rt7) ------- Receiver (2.6.19-rc3)
1G [netem] 100Mhttp://developer.osdl.org/shemminger/tcp/2.6.19-rc3/cubic-orig.png
http://developer.osdl.org/shemminger/tcp/2.6.19-rc3/cubic-fix.pngSigned-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
23 Sep, 2006
1 commit
-
Signed-off-by: Alexey Dobriyan
Signed-off-by: David S. Miller
01 Jul, 2006
1 commit
-
Signed-off-by: Jörn Engel
Signed-off-by: Adrian Bunk
18 Jun, 2006
1 commit
-
Many of the TCP congestion methods all just use ssthresh
as the minimum congestion window on decrease. Rather than
duplicating the code, just have that be the default if that
handle in the ops structure is not set.Minor behaviour change to TCP compound. It probably wants
to use this (ssthresh) as lower bound, rather than ssthresh/2
because the latter causes undershoot on loss.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller
04 Jan, 2006
3 commits
-
Replace cube root algorithim with a faster version using Newton-Raphson.
Surprisingly, doing the scaled div64_64 is faster than a true 64 bit
division on 64 bit CPU's.Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Revised version of patch to pre-compute values for TCP cubic.
* d32,d64 replaced with descriptive names
* cube_factor replaces
srtt[scaled by count] / HZ * ((1 << (10+2*BICTCP_HZ)) / bic_scale)
* beta_scale replaces
8*(BICTCP_BETA_SCALE+beta)/3/(BICTCP_BETA_SCALE-beta);Signed-off-by: Stephen Hemminger
Signed-off-by: David S. Miller -
Replace existing BIC version 1.1 with new version 2.0.
The main change is to replace the window growth function
with a cubic function as described in:
http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/cubic-paper.pdfSigned-off-by: Stephen Hemminger
Signed-off-by: David S. Miller