TCP Prague controlled RTT dependence

Implementing the Reduced RTT dependence part of the L4S Prague Requirement

Implementation

The code itself is available in the L4S Linux kernel tree, as part of the TCP Prague congestion control module, and is included in all tags following The Mar. 1 2020 testing release.

Note that you can grab pre-build kernel images in the "Actions" tab on Github, as build artifacts.

Video demonstration

Usage

You can control TCP Prague's RTT dependence using the following module parameters, either at load time e.g., ` sudo modprobe tcp_prague prague_rtt_scaling=1 ` , or through the sysfs interface e.g., ` echo 1 | sudo tee /sys/module/tcp_prague/parameters/prague_rtt_scaling
Note that those settings will only affect connections initialized after the change, thus not
existing ones.
:

Parameter

Default

prague_rtt_scaling <mode>
0

Select the desired mode of RTT dependence.:
0 disables any form of RTT independence.
1 causes Prague to behave as if it was experiencing a RTT of at least prague_rtt_target, i.e., is RTT independent up to the target RTT.
2 extends the previous mode (1) by providing a minimal bound on the frequency of CE marks in steady state (currently at least 1 every 8 RTTs).
3 causes Prague to behave as if it was experiencing a RTT of true_e2e_rtt + prague_rtt_target.

prague_rtt_target <target_us>
10000

Define the target RTT (in microseconds) that TCP Prague should aim for. Its exact meaning depends on the underlying algorithm.

prague_rtt_transition <round>
100

Delay the activation of the RTT independence algorithms by <round> RTTs after exiting slow-start.

TSVWG interim meeting presentation

The high-level approach has been described during the interim meeting that took place on Feb. 20 2020. You can also watch the recording on Youtube.

Testing

You can find the scripts used to setup the experiments and plots reported in the above slides on Github.