Update the README file to reflect the current state of the project.
This commit is contained in:
62
README.md
62
README.md
@@ -1,34 +1,40 @@
|
|||||||
# TCP ROCCET :rocket: (RTT Oriented CUBIC Congestion control ExTension)
|
# TCP ROCCET :rocket: (RTT Oriented CUBIC Congestion control ExTension)
|
||||||
|
|
||||||
TCP ROCCET is a new TCP congestion control
|
TCP ROCCET is a new TCP congestion control algorithm that reduces latency by detecting queuing.
|
||||||
algorithm suited for current cellular 5G NR beyond networks.
|
Additionally, it is specially suited for 4G/5G cellular 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.
|
|
||||||
|
|
||||||
A peer-reviewed paper on TCP ROCCET will be presented at the WONS 2026 conference.
|
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 draft of the paper is available here:
|
|
||||||
https://arxiv.org/abs/2510.25281
|
|
||||||
|
|
||||||
|
## 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`
|
* Debian: `sudo apt install linux-headers-generic`
|
||||||
* Fedora: `sudo dnf install kernel-devel`
|
* Fedora: `sudo dnf install kernel-devel`
|
||||||
(`sudo reboot`)
|
(`sudo reboot`)
|
||||||
|
|
||||||
## Build
|
### Build
|
||||||
`make`
|
`make`
|
||||||
|
|
||||||
|
|
||||||
## Loading & Unloading the Module
|
## Loading & Unloading the Module
|
||||||
**1.** Insert into Kernel: `sudo insmod tcp_roccet.ko`
|
**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:
|
**2.** Use the Algorithm:
|
||||||
* Either via globally loading it: `sudo sysctl net.ipv4.tcp_congestion_control=roccet`
|
* 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)
|
## 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**
|
**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:
|
For Example:
|
||||||
```
|
```
|
||||||
@@ -68,7 +74,7 @@ Required files for this are:
|
|||||||
* `tcp_roccet.c` (Optional; Need to remove corresponding entry in Makefile if missing)
|
* `tcp_roccet.c` (Optional; Need to remove corresponding entry in Makefile if missing)
|
||||||
|
|
||||||
**3. Load Kprobe module**
|
**3. Load Kprobe module**
|
||||||
To then load the Module use
|
To then load the module use
|
||||||
`sudo insmod roccet_kprobe.ko`
|
`sudo insmod roccet_kprobe.ko`
|
||||||
If you are seeing the error "Unknown symbol in module" you need to first load the roccet algorithm.
|
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`
|
`sudo cat /sys/kernel/tracing/trace_pipe`
|
||||||
|
|
||||||
**5. Unload Kprobe module**
|
**5. Unload Kprobe module**
|
||||||
To remove the module again use
|
To remove the module again, use
|
||||||
`sudo rmmod roccet_kprobe`
|
`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
|
_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
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user