Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4bc53f25e6 | |||
| 956f195ddc | |||
| 64d0e54f87 | |||
| b355d1eb50 | |||
| b651be77b3 | |||
| a6356c3297 | |||
| 97a59b6f20 | |||
| 35aa714256 |
@@ -5,8 +5,22 @@ Additionally, it is specially suited for 4G/5G cellular networks.
|
||||
|
||||
A peer-reviewed [paper on TCP ROCCET](https://opendl.ifip-tc6.org/db/conf/wons/wons2026/1571217211.pdf) was presented at the WONS 2026 conference.
|
||||
|
||||
## Install with apt
|
||||
A new performance report for the latest version of TCP ROCCET can be found under "doc/measurements/2026-07-21_performance-report.pdf".
|
||||
|
||||
### Versions
|
||||
|
||||
- latest on master branch (requires kernel version 7.1 or higher)
|
||||
- Improved min RTT probing
|
||||
- Packet pacing
|
||||
- Code refactor
|
||||
- Monitoring send and receive rate
|
||||
|
||||
- release-2026-06-12-v1
|
||||
- Adds minimum RTT probing
|
||||
|
||||
## Install with apt (requires kernel version 6.10 or higher)
|
||||
Add tcp-roccet-dkms to your source lists and install:
|
||||
|
||||
```
|
||||
echo "deb [trusted=yes] https://apt.fury.io/timfuchs/ /" | sudo tee /etc/apt/sources.list.d/tcp-roccet.list
|
||||
sudo apt update
|
||||
@@ -15,14 +29,11 @@ sudo apt install tcp-roccet-dkms
|
||||
|
||||
### Loading and using the congestion control
|
||||
Note: This change is not persistent, the module will not be loaded at boot.
|
||||
|
||||
```
|
||||
sudo modprobe tcp_roccet
|
||||
sudo sysctl net.ipv4.tcp_congestion_control=roccet
|
||||
```
|
||||
### Versions
|
||||
|
||||
- release-2026-06-12-v1
|
||||
- Adds minimum RTT probing
|
||||
|
||||
## Build from source
|
||||
|
||||
|
||||
Binary file not shown.
+925
-254
File diff suppressed because it is too large
Load Diff
+61
-28
@@ -7,43 +7,76 @@
|
||||
|
||||
#include <linux/math64.h>
|
||||
|
||||
struct ack_rate {
|
||||
u32 last_rate; /* Last ACK-rate */
|
||||
u32 last_rate_time; /* Timestamp of the last ACK-rate */
|
||||
u32 curr_rate; /* Current ACK-rate */
|
||||
u32 cnt; /* Used for counting acks */
|
||||
/* State in which roccet currently operates */
|
||||
enum roccet_state {
|
||||
LAUNCH,
|
||||
ORBITER,
|
||||
RTT_PROBE_ENTER,
|
||||
RTT_PROBE,
|
||||
RTT_PROBE_REFILL,
|
||||
DRAIN
|
||||
};
|
||||
|
||||
/* Based on the BICTCP struct with additions specific
|
||||
* for the ROCCET-Algorithm
|
||||
/* TCP ROCCET struct based on the original BICTCP struct with
|
||||
* additions specific to the ROCCET-Algorithm.
|
||||
*/
|
||||
struct roccettcp {
|
||||
u32 cnt; /* increase cwnd by 1 after ACKs */
|
||||
u32 cnt; /* increase cwnd by 1 after ACKs */
|
||||
u32 last_max_cwnd; /* last maximum snd_cwnd */
|
||||
u32 last_cwnd; /* the last snd_cwnd */
|
||||
u32 last_time; /* time when updated last_cwnd */
|
||||
u32 last_cwnd; /* the last snd_cwnd */
|
||||
u32 last_time; /* time when updated last_cwnd */
|
||||
u32 bic_origin_point; /* origin point of bic function */
|
||||
u32 bic_K; /* time to origin point from the
|
||||
* beginning of the current epoch
|
||||
*/
|
||||
u32 delay_min; /* min delay (usec) */
|
||||
u32 bic_K; /* time to origin point from the
|
||||
* beginning of the current epoch
|
||||
*/
|
||||
u32 delay_min; /* min delay (usec) */
|
||||
u32 epoch_start; /* beginning of an epoch */
|
||||
u32 ack_cnt; /* number of acks */
|
||||
u32 tcp_cwnd; /* estimated tcp cwnd */
|
||||
u32 curr_rtt; /* the minimum rtt of current round */
|
||||
u32 ack_cnt; /* number of acks */
|
||||
u32 tcp_cwnd; /* estimated tcp cwnd */
|
||||
u32 curr_rtt; /* last sample rtt of current round */
|
||||
|
||||
u32 roccet_last_event_time_us; /* The last time ROCCET was
|
||||
* triggered
|
||||
*/
|
||||
bool ece_received; /* Set to true if an ECE bit was received */
|
||||
u32 roccet_last_event_time_us; /* The last time ROCCET was triggered */
|
||||
u32 curr_min_rtt; /* The current observed minRTT */
|
||||
u32 next_min_rtt_probe; /* Next time to probe the minRTT */
|
||||
u32 probe_min_rtt_until; /* End of minRTT probing period */
|
||||
u32 cwnd_before_min_rtt_probe; /* cwnd before min RTT probeing */
|
||||
u32 curr_srrtt; /* srRTT calculated based on the latest ACK */
|
||||
u32 next_srrtt_check; /* Next check for srRTT */
|
||||
struct ack_rate ack_rate; /* The last and the current ACK rate */
|
||||
u32 last_rtt; /* Used for jitter calculation */
|
||||
u32 next_min_rtt_probe; /* Next time to probe the minRTT */
|
||||
u32 probe_min_rtt_until; /* End of minRTT probing period.
|
||||
* Set while in RTT_PROBE states
|
||||
*/
|
||||
u32 refill_until; /* End of pipe refill after minRTT probe.
|
||||
* Set while in RTT_PROBE states
|
||||
*/
|
||||
u32 cwnd_before_min_rtt_probe; /* cwnd before min RTT probing. */
|
||||
u32 curr_srrtt; /* srRTT calculated based on the latest ACK */
|
||||
u32 next_srrtt_check_ts; /* Next check for srRTT */
|
||||
u32 last_rtt; /* sample rtt of previous round.
|
||||
* Used for jitter calculation
|
||||
*/
|
||||
|
||||
u32 interval_snd_seq_start;
|
||||
u32 interval_una_seq_start;
|
||||
|
||||
u32 ack_carry_over; /* Used to carry over leftover acks from
|
||||
* LAUNCH to ORBITER
|
||||
*/
|
||||
|
||||
u32 last_ack_rate_time; /* Timestamp of the last ACK-rate */
|
||||
u16 ack_rate_last_rate; /* Last ACK-rate */
|
||||
u16 curr_ack_rate; /* Current ACK-rate */
|
||||
u16 ack_rate_cnt; /* Used for counting acks */
|
||||
|
||||
enum roccet_state state : 3; /* Current operating state of roccet */
|
||||
bool initial_limit_reached: 1; /* Set to true after the connection
|
||||
* initially gets cwnd-limited
|
||||
*/
|
||||
bool is_in_initial_launch: 1; /* true if the connection is in
|
||||
* the initial launch phase.
|
||||
*/
|
||||
bool last_event_time_set: 1; /* true if the last event time
|
||||
* has been set/initialized.
|
||||
*/
|
||||
bool rtt_probe_timers_set: 1; /* true if refill_until and
|
||||
* probe_min_rtt_until are currently
|
||||
* set.
|
||||
*/
|
||||
};
|
||||
|
||||
#endif /* __TCP_ROCCET_H */
|
||||
|
||||
Reference in New Issue
Block a user