Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 64d0e54f87 | |||
| b355d1eb50 | |||
| b651be77b3 |
@@ -5,9 +5,11 @@ 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.
|
||||
|
||||
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
|
||||
- latest on master branch (requires kernel version 7.1 or higher)
|
||||
- Improved min RTT probing
|
||||
- Packet pacing
|
||||
- Code refactor
|
||||
@@ -16,6 +18,23 @@ A peer-reviewed [paper on TCP ROCCET](https://opendl.ifip-tc6.org/db/conf/wons/w
|
||||
- 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
|
||||
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
|
||||
```
|
||||
|
||||
## Build from source
|
||||
|
||||
### Setup
|
||||
|
||||
Binary file not shown.
+609
-342
File diff suppressed because it is too large
Load Diff
+31
-19
@@ -7,23 +7,16 @@
|
||||
|
||||
#include <linux/math64.h>
|
||||
|
||||
/* State in which roccet currently opperates */
|
||||
/* State in which roccet currently operates */
|
||||
enum roccet_state {
|
||||
LAUNCH,
|
||||
ORBITER,
|
||||
RTT_PROBE_ENTER,
|
||||
RTT_PROBE,
|
||||
RTT_PROBE_REFILL,
|
||||
DRAIN
|
||||
};
|
||||
|
||||
/* TCP ROCCET helper type, storing data related to ack counting */
|
||||
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 */
|
||||
};
|
||||
|
||||
/* TCP ROCCET struct based on the original BICTCP struct with
|
||||
* additions specific to the ROCCET-Algorithm.
|
||||
*/
|
||||
@@ -42,24 +35,43 @@ struct roccettcp {
|
||||
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 refill_until; /* End of pipe refill after minRTT probe */
|
||||
u32 cwnd_before_min_rtt_probe; /* cwnd before min RTT probeing */
|
||||
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; /* Next check for srRTT */
|
||||
struct ack_rate ack_rate; /* The last and the current ACK rate */
|
||||
u32 next_srrtt_check_ts; /* Next check for srRTT */
|
||||
u32 last_rtt; /* sample rtt of previous round.
|
||||
* Used for jitter calculation
|
||||
*/
|
||||
enum roccet_state state; /* State in which roccet currently opperates */
|
||||
|
||||
u32 interval_snd_seq_start;
|
||||
u32 interval_una_seq_start;
|
||||
|
||||
u32 ack_rate_last_rate_time; /* Timestamp of the last ACK-rate */
|
||||
u16 ack_rate_last_rate; /* Last ACK-rate */
|
||||
u16 ack_rate_curr_rate; /* Current ACK-rate */
|
||||
u16 ack_rate_cnt; /* Used for counting acks */
|
||||
|
||||
enum roccet_state state : 3; /* Current operating state of roccet */
|
||||
bool was_idle : 1; /* Tracks whether the connection was idle
|
||||
* (had no in-flight packets)
|
||||
*/
|
||||
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.
|
||||
*/
|
||||
u32 ack_carry_over; /* Used to carry over leftover acks from
|
||||
* LAUNCH to ORBITER
|
||||
*/
|
||||
};
|
||||
|
||||
#endif /* __TCP_ROCCET_H */
|
||||
|
||||
Reference in New Issue
Block a user