mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
tcp: Add TCP ROCCET congestion control module.
TCP ROCCET is a new congestion control algorithm based on TCP CUBIC that improves its overall performance in cellular networks. By its mode of function, CUBIC causes bufferbloat while it tries to detect the available throughput of a network path. This is particularly a problem with large buffers in mobile networks. A more detailed description and analysis of this problem caused by TCP CUBIC can be found in [1]. TCP ROCCET's main method of addressing the bufferbloat problem is by adding two additional metrics. The first metric is the relative increase in RTT from its minimum, the srRTT. Here, bufferbloat can be detected when RTTs increase due to buffer filling. The second metric is the acknowledgment arrival rate sampled over 100ms intervals and the bytes sent and received over 5 RTTs. If CUBIC increases the send rate or congestion window, and the acknowledgment arrival rate stays at the same level, the connection is limited by the bottleneck link's capacity. In such cases, ROCCET reduces the send rate to prevent bufferbloat. ROCCET uses a modified version of slow start rather than HyStart because HyStart is known to enter the congestion avoidance phase too early when used in cellular networks [2]. Therefore, ROCCET uses a combination of srRTT and the acknowledgment arrival rate to determine when to exit slow start. For the congestion avoidance phase, ROCCET relies on the srRTT and monitoring the sent and received bytes to detect the filling of the bottleneck buffer. To keep the minimum RTT updated, ROCCET performs minimum RTT probing if no new minimum RTT was found in the last 5 seconds. To this end ROCCET halves the cwnd and probes for 200ms but at least for one RTT, for a new minimum RTT. After probing, ROCCET refills the pipe carefully. In addition, ROCCET reacts to packet loss by adapting CUBIC's behavior. ECNs are handled as ROCCET congestion event, where the cwnd gets reduced and ROCCET enters a buffer drain state. In real-world mobile 5G NR measurements, TCP ROCCET achieves better performance than CUBIC, by maintaining similar throughput while reducing the latency. More information about TCP ROCCET and measurement evaluations can be found here [3]. For the version (2026-07-21), we provide additional performance evaluation regarding throughput, latency, and bandwidth share [4]. [1] https://doi.org/10.1109/VTC2023-Fall60731.2023.10333357 [2] https://doi.org/10.1109/WMNC.2016.7543932 [3] https://doi.org/10.23919/WONS68803.2026.11501781 [4] http://go.lu-h.de/roccet-2026-07-21 Co-developed-by: Lukas Prause <lukas.prause@ikt.uni-hannover.de> Signed-off-by: Lukas Prause <lukas.prause@ikt.uni-hannover.de> Signed-off-by: Tim Fuechsel <t.fuechsel@gmx.de> Link: https://patch.msgid.link/asdfdDIQb7Nhm692@volt-roccet-vm Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
6f1edcae05
commit
819d596387
|
|
@ -663,6 +663,18 @@ config TCP_CONG_CDG
|
|||
delay gradients." In Networking 2011. Preprint:
|
||||
http://caia.swin.edu.au/cv/dahayes/content/networking2011-cdg-preprint.pdf
|
||||
|
||||
config TCP_CONG_ROCCET
|
||||
tristate "ROCCET TCP"
|
||||
default n
|
||||
help
|
||||
TCP ROCCET (RTT oriented CUBIC congestion control exTension) is a
|
||||
sender-side-only congestion control algorithm based on the TCP CUBIC
|
||||
protocol stack/TCP CUBIC congestion control algorithm that optimizes
|
||||
its performance. Especially for networks with large buffers
|
||||
(wireless, cellular networks), TCP ROCCET has improved performance by
|
||||
maintaining a similar throughput as CUBIC while reducing latency.
|
||||
For more information, see: https://arxiv.org/abs/2510.25281
|
||||
|
||||
config TCP_CONG_BBR
|
||||
tristate "BBR TCP"
|
||||
default n
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ obj-$(CONFIG_INET_TCP_DIAG) += tcp_diag.o
|
|||
obj-$(CONFIG_INET_UDP_DIAG) += udp_diag.o
|
||||
obj-$(CONFIG_INET_RAW_DIAG) += raw_diag.o
|
||||
obj-$(CONFIG_TCP_CONG_BBR) += tcp_bbr.o
|
||||
obj-$(CONFIG_TCP_CONG_ROCCET) += tcp_roccet.o
|
||||
obj-$(CONFIG_TCP_CONG_BIC) += tcp_bic.o
|
||||
obj-$(CONFIG_TCP_CONG_CDG) += tcp_cdg.o
|
||||
obj-$(CONFIG_TCP_CONG_CUBIC) += tcp_cubic.o
|
||||
|
|
|
|||
1408
net/ipv4/tcp_roccet.c
Normal file
1408
net/ipv4/tcp_roccet.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user