> Stalls, with the whole machine across each (each run's `machine.csv`):
>
> run 1 stall: rtorrent progress 2664 ms at 21:17:03Z; the machine: H: 100% busy, queue 12, 116 MB/s
> run 2 stall: rtorrent progress 2360 ms at 21:18:28Z; the machine: H: 100% busy, queue 7, 127 MB/s
> run 2 stall: qbittorrent progress 2098 ms at 21:18:29Z; the machine: H: 100% busy, queue 6, 79 MB/s
> run 2 stall: rtorrent progress 2467 ms at 21:18:30Z; the machine: H: 100% busy, queue 7, 191 MB/s
> run 2 stall: rtorrent progress 2746 ms at 21:18:33Z; the machine: H: 100% busy, queue 6, 146 MB/s; 3145 hard faults/s
> run 2 stall: rtorrent progress 2833 ms at 21:18:36Z; the machine: H: 100% busy, queue 10, 108 MB/s; 632 hard faults/s
> run 2 stall: rtorrent progress 3136 ms at 21:18:39Z; the machine: H: 100% busy, queue 12, 94 MB/s
> run 2 stall: rtorrent progress 4369 ms at 21:18:42Z; the machine: H: 100% busy, queue 8, 46 MB/s
> run 2 stall: rtorrent progress 4412 ms at 21:18:48Z; the machine: H: 100% busy, queue 13, 85 MB/s
> run 2 stall: rtorrent progress 4548 ms at 21:18:55Z; the machine: H: 100% busy, queue 5, 224 MB/s
> run 3 stall: rtorrent progress 9354 ms at 21:20:19Z; the machine: H: 100% busy, queue 11, 132 MB/s
> run 4 stall: qbittorrent progress 2425 ms at 21:22:00Z; the machine: H: 100% busy, queue 10, 53 MB/s
> run 4 stall: rtorrent progress 3581 ms at 21:22:36Z; the machine was quiet
> run 5 stall: qbittorrent progress 2019 ms at 21:23:32Z; the machine: H: 100% busy, queue 8, 82 MB/s
> run 5 stall: rtorrent progress 4650 ms at 21:24:08Z; the machine: H: 100% busy, queue 1, 203 MB/s
> run 5 stall: rtorrent progress 3150 ms at 21:24:13Z; the machine: H: 100% busy, queue 3, 224 MB/s
> run 5 stall: rtorrent progress 3076 ms at 21:24:16Z; the machine: H: 98% busy, queue 1, 0 MB/s
> run 5 stall: rtorrent progress 2004 ms at 21:24:19Z; the machine was quiet
> run 5 stall: rtorrent progress 3556 ms at 21:24:21Z; the machine was quiet

# Race: stock, tracker lag T = 0 s

5 runs; every cell is `median [min-max]` over the runs that produced the number, and every run's own value is in `summary.json`. 1024 MiB private-flag fixture, 2 uploaders, upload slots opened, no stated rate cap, content on H:, every racer added in the same second.

| Client | Configuration | Announce OK (s) | Announce OK after its fetch (ms) | Announces in 1st min | First peer (s) | First bytes (s) | First verified piece (s) | Complete (s) | Upload share @60 s | Upload share @end |
|---|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|
| `rbittorrent` | stock | 0.011 [0.005-0.021] | 3.82 [1.93-16.17] | 3 | 0.026 [0.02-0.034] | 0.072 [0.02-0.137] | 0.082 [0.072-0.137] | 29.4 [1.27-32.9] | 61.8% [54.4-69%] | 61.9% [54.4-69%] |
| `qbittorrent` | stock | 1.02 [0.995-1.16] | 1021.95 [985.41-1157.60] | 2 | 2.07 [2-2.15] | 2.07 [2-2.15] | 2.07 [2-2.15] | 35.2 [27.9-41.1] | 23% [13.5-28.3%] | 23% [13.5-28.3%] |
| `deluge` | stock | 0.487 [0.473-0.498] (4/5) | 481.33 [467.75-489.70] (4/5) | 1 | 0.502 [0.485-0.512] (4/5) | 0.514 [0.506-0.527] (4/5) | 0.564 [0.512-0.61] (4/5) | - | 5.7% [0-7.2%] | 5.7% [0-7.1%] |
| `rtorrent` | stock | 0.008 [0.007-0.03] | 2.19 [1.90-3.08] | 2 | 0.043 [0.036-0.062] | 0.121 [0.062-0.137] | 0.175 [0.062-0.227] | 38.6 [26.6-42.1] (3/5) | 7.7% [6.4-26.5%] | 7.7% [6.4-26.4%] |

`-` is not measured, never zero; `(n/of)` is how many runs produced the number.

Announce OK runs from the race's start, so it carries the order the racers were added in, which changes every run. Announce OK after its fetch starts each client's clock at its own `.torrent` fetch from the harness, so it compares what the clients themselves did; `-` for a client handed the file another way.

First peer, first bytes and first verified piece are read from the client's own poll, every 10 ms until the first verified piece (100 ms after), so they carry up to 10 ms of poll grid. First bytes is the first poll with any downloaded bytes. First verified piece is the first poll at which the client's OWN count of pieces past the hash check was above zero, read from the field named below; never its progress, which counts finished blocks for some clients and verified bytes for others.

- `rbittorrent`: first verified piece read from `pieces_verified`
- `qbittorrent`: first verified piece read from `torrents/properties pieces_have`
- `deluge`: first verified piece read from `pieces`
- `rtorrent`: first verified piece read from `d.completed_chunks`

## The product's add, phase by phase

Milliseconds per add, `median [min-max]` over the runs that produced the line. `Since clock start` is the time from the product's add clock to that mark; `Phase` is the stretch since the mark before it. The clock starts when `whole add` is the clock's total, the product's own time for the add, engine add included.

| Client | Path | Mark | Since clock start (ms) | Phase (ms) |
|---|---|---|---:|---:|
| `rbittorrent` | route | whole add | 0.532 [0.456-0.667] | - |
| `rbittorrent` | route | route_read | 0.031 [0.021-0.067] | 0.031 [0.021-0.067] |
| `rbittorrent` | route | fetch_asked | 0.074 [0.058-0.133] | 0.042 [0.037-0.066] |
| `rbittorrent` | route | refused_before_fetching | 0.497 [0.391-0.632] | 0.419 [0.333-0.558] |
| `rbittorrent` | route | answered_pending | 0.497 [0.391-0.633] | 0 [0-0.001] |
| `rbittorrent` | applier | whole add | 3.569 [3.324-24.701] | - |
| `rbittorrent` | applier | queued | 0.534 [0.384-0.594] | 0.534 [0.384-0.594] |
| `rbittorrent` | applier | finishing | 0.534 [0.385-0.594] | 0 [0-0.001] |
| `rbittorrent` | applier | preflight | 0.58 [0.522-0.667] | 0.073 [0.035-0.154] |
| `rbittorrent` | applier | source_read | 0.628 [0.59-0.714] | 0.059 [0.033-0.068] |
| `rbittorrent` | applier | located | 0.713 [0.645-0.783] | 0.061 [0.036-0.085] |
| `rbittorrent` | applier | room_nothing_there | 0.832 [0.762-0.879] | 0.113 [0.09-0.121] |
| `rbittorrent` | applier | room_needed | 0.832 [0.762-0.88] | 0 [0-0.001] |
| `rbittorrent` | applier | room_cached_look | 0.832 [0.762-0.88] | 0 [0-0.001] |
| `rbittorrent` | applier | room_probe_locked | 0.832 [0.762-0.88] | 0 [0-0] |
| `rbittorrent` | applier | room_probe_read | 0.935 [0.835-1.292] | 0.069 [0.065-0.53] |
| `rbittorrent` | applier | room_probed | 0.941 [0.842-1.303] | 0.006 [0.003-0.011] |
| `rbittorrent` | applier | room_checked | 0.943 [0.844-1.305] | 0.002 [0.002-0.002] |
| `rbittorrent` | applier | engine_added | 2.482 [2.199-24.026] | 1.539 [1.249-23.122] |
| `rbittorrent` | applier | started | 2.487 [2.202-24.03] | 0.005 [0.003-0.006] |
| `rbittorrent` | applier | marker | 2.491 [2.21-24.033] | 0.004 [0.003-0.008] |
| `rbittorrent` | applier | rows_written | 2.877 [2.686-24.285] | 0.419 [0.252-0.664] |
| `rbittorrent` | applier | buckets_filed | 2.953 [2.753-24.333] | 0.066 [0.047-0.076] |
| `rbittorrent` | applier | announced | 2.992 [2.826-24.366] | 0.039 [0.032-0.073] |
| `rbittorrent` | applier | published | 3.565 [3.321-24.696] | 0.391 [0.33-0.588] |


## The upload ledger, both witnesses

The tracker's last `uploaded=` per passkey against that client's own polls either side of that announce, per run (a `stopped` announce's later side is the closing poll taken just before the client is stopped, plus what the client's own reported upload rate allows since its API last changed, at most 2 s: an API that publishes a snapshot reads behind the live counter the announce carries). Agreement is the announced value inside the bracket; a disagreement is printed with its distance outside it.

| Client | Runs where they disagreed | Worst disagreement (bytes) |
|---|---:|---:|
| `rbittorrent` | 0 | 0 |
| `qbittorrent` | 0 | 0 |
| `deluge` | 0 | 0 |
| `rtorrent` | 0 | 0 |

