Compare commits
1 Commits
ac8787ed10
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
96fed81e57 |
64
README.md
64
README.md
@@ -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 CUBIC’s 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
|
||||
|
||||
_See more info at_ https://docs.kernel.org/trace/kprobes.html and https://www.kernel.org/doc/Documentation/trace/kprobetrace.rst
|
||||
Reference in New Issue
Block a user