Update the README file to reflect the current state of the project.

This commit is contained in:
Lukas Prause
2026-03-27 14:52:29 +01:00
parent ac8787ed10
commit 96fed81e57

View File

@@ -1,34 +1,40 @@
# TCP ROCCET :rocket: (RTT Oriented CUBIC Congestion control ExTension)
TCP ROCCET is a new TCP congestion control
algorithm suited for current cellular 5G NR beyond networks.
It extends the kernel default congestion control CUBIC
and improves its performance, and additionally solves
unwanted side effects of CUBICs implementation.
ROCCET uses its own Slow Start, called LAUNCH, where loss
is not considered as a congestion event.
The congestion avoidance phase, called ORBITER, uses
CUBIC's window growth function and adds, based on RTT
and ACK rate, congestion events.
TCP ROCCET is a new TCP congestion control algorithm that reduces latency by detecting queuing.
Additionally, it is specially suited for 4G/5G cellular networks.
A peer-reviewed paper on TCP ROCCET will be presented at the WONS 2026 conference.
A draft of the paper is available here:
https://arxiv.org/abs/2510.25281
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
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
```
## Setup
### 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
Kernel headers are required:
* Debian: `sudo apt install linux-headers-generic`
* Fedora: `sudo dnf install kernel-devel`
(`sudo reboot`)
## Build
### Build
`make`
## Loading & Unloading the Module
**1.** Insert into Kernel: `sudo insmod tcp_roccet.ko`
In case you get the "Invalid module Format" error, it can help reinstalling the kernel-headers.
In case you get the "Invalid module Format" error, it can help to reinstall the kernel-headers.
**2.** Use the Algorithm:
* Either via globally loading it: `sudo sysctl net.ipv4.tcp_congestion_control=roccet`
@@ -38,12 +44,12 @@ In case you get the "Invalid module Format" error, it can help reinstalling the
## Debugging (Using kprobe)
In order to debug the `tcp_roccet` congestion control algorithm, there exists a Kprobe module (`roccet_kprobe.c`). Using this it is possible to inspect events generated by the algorithm.
In order to debug the `tcp_roccet` congestion control algorithm, there exists a Kprobe module (`roccet_kprobe.c`). Using this, it is possible to inspect events generated by the algorithm.
In order to use the Kprobe module the following steps are necessary:
In order to use the Kprobe module, the following steps are necessary:
**1. Specify the event to inspect**
For this head into the `tcp_roccet.c` source code and find the function the Kprobe should attach to.
For this, head into the `tcp_roccet.c` source code and find the function the Kprobe should attach to.
For Example:
```
@@ -68,7 +74,7 @@ Required files for this are:
* `tcp_roccet.c` (Optional; Need to remove corresponding entry in Makefile if missing)
**3. Load Kprobe module**
To then load the Module use
To then load the module use
`sudo insmod roccet_kprobe.ko`
If you are seeing the error "Unknown symbol in module" you need to first load the roccet algorithm.
@@ -77,21 +83,7 @@ To see the trace output use
`sudo cat /sys/kernel/tracing/trace_pipe`
**5. Unload Kprobe module**
To remove the module again use
To remove the module again, use
`sudo rmmod roccet_kprobe`
_See more info at_ https://docs.kernel.org/trace/kprobes.html and https://www.kernel.org/doc/Documentation/trace/kprobetrace.rst
## Further Info
* On TCP-CC Ops:
* https://www.yonch.com/tech/linux-tcp-congestion-control-internals
* https://docs.ebpf.io/linux/program-type/BPF_PROG_TYPE_STRUCT_OPS/tcp_congestion_ops/
# Setup Development Environment
For specific Kernel:
1. Download linux source (the version you want to develop for)
2. Create Config via `make defconfig`
3. Compile kernel via `make`
4. Generate clangd Config via `python scripts/clang-tools/gen_compile_commands.py`
5. Copy `compile_commands.json` to development directory