Rookparcel

Benchmarks

Rookparcel's daemon beside qBittorrent, Transmission, Deluge and rTorrent: the same machine, the same torrents, every client at its own defaults. The harness, the method and the raw numbers are public, so you can run it yourself.

In short

  • A big library stays small. With 10,000 torrents Rookparcel used 60 MB after a restart, a tenth of qBittorrent's 612 MB, and listed all of them 0.19 s after it started. Right after adding them it used 319 MB, about as much as Transmission: Rookparcel keeps a torrent's metadata in memory only while the torrent is active, and the next start leaves out the rest.
  • Fast and frugal with one peer. Downloading 2 GiB from one peer on the same machine, Rookparcel reached a median 3,592 MiB/s and used 1.04 seconds of CPU per GiB, half as much as qBittorrent and Deluge. rTorrent used less CPU per GiB (0.85 s) but slowed down near the end of every download.
  • Quiet when idle. Every client stayed under 1.3% of one core with 10,000 torrents; Rookparcel and qBittorrent used the least, under 0.1%.

10,000 torrents

Every client got the same 10,000 generated torrents (10 MB to 20 GB, about 1,500 pieces each, three in five with several files), added started, with no data on disk and a tracker that refuses connections. Memory is the resident memory (RSS) of the client's processes after 60 seconds of settling.

Memory with 10,000 torrents, after a restart RSS, lower is better
  • Rookparcel60 MB
  • qBittorrent612 MB
  • Transmission327 MB
  • Deluge701 MB
  • rTorrent2,142 MB
Memory right after adding 10,000 torrents RSS, lower is better
  • Rookparcel319 MB
  • qBittorrent636 MB
  • Transmission328 MB
  • Deluge905 MB
  • rTorrent2,101 MB

Then each client was stopped and started again; the time is from starting the program until its API lists all 10,000 torrents.

Start until all 10,000 are listed seconds, lower is better
  • Rookparcel0.19 s
  • qBittorrent0.86 s
  • Transmission1.00 s
  • Deluge5.76 s
  • rTorrent22.62 s

All the numbers

Add is from the first add request until all are listed, through each client's own API (Deluge's daemon takes them in batches of 100 over its RPC). PSS divides shared libraries among the processes using them. Idle CPU is 60 seconds without any API call, as a percentage of one core. Empty is the client with no torrents.

10,000 torrents

ClientAdd (s)Start with all listed (s)Memory, RSS (MB)PSS (MB)Idle CPU (%)Empty RSS (MB)
Rookparcel1.30.1960.256.10.079.5
qBittorrent1.20.866125970.0753.5
Transmission4.91.003273150.7720.8
Deluge5175.767016860.2868.4
rTorrent24.722.622,1422,1321.2516.4

1,000 torrents

ClientAdd (s)Start with all listed (s)Memory, RSS (MB)PSS (MB)Idle CPU (%)Empty RSS (MB)
Rookparcel0.10.0715.110.90.059.5
qBittorrent0.10.1810590.10.0753.6
Transmission0.50.0952.440.40.2020.9
Deluge51.60.911351200.2268.5
rTorrent1.10.552302190.1016.5

Downloading

One 2 GiB file of random data, seeded by a reference qBittorrent on the same machine, downloaded five times by each client with a fresh profile. Speed and CPU time are taken between 10% and 80% of the file, from the kernel's own byte counts; every downloaded file was checked against the original.

Download speed from one peer MiB/s, median of 5, higher is better
  • Rookparcel3,592 MiB/s
  • qBittorrent1,471 MiB/s
  • Transmission62 MiB/s
  • Deluge1,566 MiB/s
  • rTorrent1,924 MiB/s
CPU time per GiB downloaded seconds, median of 5, lower is better
  • Rookparcel1.04 s
  • qBittorrent2.14 s
  • Transmission2.66 s
  • Deluge2.11 s
  • rTorrent0.85 s

Transmission held exactly 62.4 MiB/s in every run, which looks like the limit of how many requests it keeps open to a single peer rather than of its engine; with many peers it spreads out. rTorrent was fast until about 1.7 GiB and then flushed its memory-mapped pieces at about 32 MB/s, which is why its downloads took two minutes from the first byte to the last.

ClientVersionRunsThroughput (MiB/s)rangeCPU s per GiBrangeFirst byte to done (s)
Rookparcelrookparcel-nox 1.0.15 of 53,5922,124–3,6051.040.94–1.161.6
qBittorrentv5.1.45 of 51,4711,380–1,6622.142.06–2.222.5
TransmissionTransmission 4.1.1 (56442e2929)5 of 562.462.4–62.52.662.66–2.7241.2
DelugeDeluge 2.2.1.dev0+20250824 (libtorrent 2.0.12.0)5 of 51,5661,217–1,6702.111.97–2.222.0
rTorrentrTorrent 0.9.8 (libtorrent 0.13.8)5 of 51,9241,721–2,0560.850.81–0.94126

How it was measured

  • Machine: a VMware Workstation virtual machine with 8 vCPUs and 8 GB of RAM on an Intel Core i9-13900K, running Ubuntu 26.04.1.
  • Clients: Rookparcel 1.0.1, the published Linux release checked against its SHA256SUMS; qBittorrent 5.1.4, Transmission 4.1.1, Deluge 2.2.1 (libtorrent 2.0.12) and rTorrent 0.9.8 (libtorrent 0.13.8), Ubuntu's own packages. All ran as headless daemons.
  • Settings: a fresh profile each time, DHT, local peer discovery, peer exchange and port mapping off so no outside peer takes part, everything else at each client's defaults (queueing, caches, connection limits, encryption). Nothing was tuned for Rookparcel.
  • CPU time is user plus system time of all the client's threads, from /proc. Data for the downloads lived on a RAM disk, so no hard disk was measured.
  • Transmission is confined by Ubuntu's AppArmor profile to its service user's folders, so it ran as that user, as the packaged service does.

The harness is tools/bench (Python, standard library), the full method and how to run it again are in BENCHMARKS.md, and every run's raw results, with per-thread CPU and a trace of each download, are in docs/benchmarks. If you get different numbers, please tell us.

Limits

  • A virtual machine does not see when its host is busy, and counts that time as the guest's CPU time. The downloads were repeated five times in a changing order and the medians are shown; single runs varied (Rookparcel's slowest was 2,124 MiB/s).
  • Two programs on one machine have no latency, no packet loss and no swarm. The downloads show the cost of each client's code, not internet speeds.
  • The seed took TCP only, so that every client used the same transport. Clients that try uTP first waited for that attempt to fail before they connected; that wait is left out of the comparison.
  • The 10,000 torrents had no data and no reachable tracker, so the clients held them without transferring anything. Each client's defaults decide how many of them are active at once.
  • rTorrent 0.9.8 is the version Ubuntu ships; newer rTorrent releases exist. The GUIs (Rookparcel's Windows and GTK programs, qBittorrent's desktop app) were not measured here.