aquatic/crates/udp
Joakim Frostegård b527af7195 udp: distribute announce swarm responses among socket workers
They don't have to be sent from the same worker that received the
request, so we can decrease performance loss from underutilized
threads this way.
2024-01-01 14:13:30 +01:00
..
src udp: distribute announce swarm responses among socket workers 2024-01-01 14:13:30 +01:00
templates Move all crates to new crates dir 2023-10-18 23:53:41 +02:00
tests udp: reuse response channel mem, add backpressure, faster peer extract 2023-12-10 12:07:38 +01:00
Cargo.toml udp: reuse response channel mem, add backpressure, faster peer extract 2023-12-10 12:07:38 +01:00
README.md Split README into separate files (#150) 2023-10-19 19:59:11 +02:00

aquatic_udp: high-performance open UDP BitTorrent tracker

CI

High-performance open UDP BitTorrent tracker for Unix-like operating systems.

Features at a glance:

  • Multithreaded design for handling large amounts of traffic
  • All data is stored in-memory (no database needed)
  • IPv4 and IPv6 support
  • Supports forbidding/allowing info hashes
  • Prometheus metrics
  • Automated CI testing of full file transfers

Known users:

This is the most mature implementation in the aquatic family. I consider it fully ready for production use.

Performance

UDP BitTorrent tracker throughput comparison

More benchmark details are available here.

Usage

Compiling

  • Install Rust with rustup (latest stable release is recommended)
  • Install cmake with your package manager (e.g., apt-get install cmake)
  • Clone this git repository and enter its root directory
  • Build the application:
# Recommended: tell Rust to enable support for all SIMD extensions present on
# current CPU except for those relating to AVX-512. (If you run a processor
# that doesn't clock down when using AVX-512, you can enable those instructions
# too.)
. ./scripts/env-native-cpu-without-avx-512

cargo build --release -p aquatic_udp

Configuring and running

Generate the configuration file:

./target/release/aquatic_udp -p > "aquatic-udp-config.toml"

Make necessary adjustments to the file. You will likely want to adjust address (listening address) under the network section.

Once done, start the application:

./target/release/aquatic_udp -c "aquatic-udp-config.toml"

If your server is pointed to by domain example.com and you configured the tracker to run on port 3000, people can now use it by adding the URL udp://example.com:3000 to their torrent files or magnet links.

Load testing

A load test application is available. It supports generation and loading of configuration files in a similar manner to the tracker application.

After starting the tracker, run the load tester:

./scripts/run-load-test-udp.sh

Details

Implements BEP 015 (more details) with the following exceptions:

  • Ignores IP addresses sent in announce requests. The packet source IP is always used.
  • Doesn't track the number of torrent downloads (0 is always sent).

Copyright (c) 2020-2023 Joakim Frostegård

Distributed under the terms of the Apache 2.0 license. Please refer to the LICENSE file in the repository root directory for details.