High-performance open BitTorrent tracker (UDP, HTTP, WebTorrent)
Find a file
2020-04-19 19:27:20 +02:00
aquatic aquatic: improve comment for NetworkConfig.socket_recv_buffer_size 2020-04-19 10:34:01 +02:00
aquatic_bench aquatic_bench: fix progress bar min width for request type info 2020-04-19 10:38:59 +02:00
aquatic_load_test load test: fix report bug 2020-04-19 11:00:43 +02:00
bittorrent_udp bittorrent_udp: response_to_bytes: return Result<(), io:Error> 2020-04-11 15:03:50 +02:00
cli_helpers cli_helpers: run_with_cli_and_config: rename function and "f" argument 2020-04-11 14:19:46 +02:00
scripts Add scripts for setting up benchmarks on linux 2020-04-19 10:31:33 +02:00
.gitignore aquatic_bench: enable loading configuration from file 2020-04-11 14:31:21 +02:00
Cargo.lock add aquatic_load_test for benchmarking aquatic over the network 2020-04-19 10:21:12 +02:00
Cargo.toml add aquatic_load_test for benchmarking aquatic over the network 2020-04-19 10:21:12 +02:00
README.md Add benchmarks to README; update TODO 2020-04-19 19:27:20 +02:00
TODO.md Add benchmarks to README; update TODO 2020-04-19 19:27:20 +02:00

aquatic

Fast, multi-threaded UDP BitTorrent tracker written in Rust.

Aims to implements the UDP BitTorrent protocol, except that it:

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

Supports IPv4 and IPv6.

There is currently no support for a info hash black- or whilelist.

Benchmarks

Performance was compared to opentracker using aquatic_load_test.

Results (server responses per second), fastest in bold

workers aquatic  opentracker
1 n/a 177k
2 168k 98k
3 187k 118k
4 216k 127k
6 309k 109k
8 408k 96k

Details

  • System: Hetzner CCX41 VPS (16 dedicated vCPUs, Skylake)
  • OS: Debian 10, kernel 4.19.0-8-amd64
  • aquatic commit: 61841fff
  • opentracker also has a single threaded event mode. It didn't perform as well (143k responses/second) as blocking single-threaded mode.

Default settings were used, except that:

  • load test duration = 120 seconds
  • load test multiple_client_ips = true
  • load test worker settings were tuned for best results for each trackers
  • aquatic request_workers was always = 1, only socket_workers setting was raised. Number in table corresponds to sum of both values

Trivia

The tracker is called aquatic because it thrives under a torrent of bits ;-)