@@ -96,7 +96,7 @@ Announce responses per info hash:
96
96
- p100: 361
97
97
```
98
98
99
- > IMPORTANT: The performance of th Torrust UDP Tracker is drastically decreased with these log levels: ` info ` , ` debug ` , ` trace ` .
99
+ > IMPORTANT: The performance of the Torrust UDP Tracker is drastically decreased with these log levels: ` info ` , ` debug ` , ` trace ` .
100
100
101
101
``` output
102
102
Requests out: 40719.21/second
@@ -226,46 +226,76 @@ Using a PC with:
226
226
227
227
## Repository benchmarking
228
228
229
+ ### Requirements
230
+
231
+ You need to install the ` gnuplot ` package.
232
+
233
+ ``` console
234
+ sudo apt install gnuplot
235
+ ```
236
+
237
+ ### Run
238
+
229
239
You can run it with:
230
240
231
241
``` console
232
- cargo run --release - p torrust-torrent-repository-benchmarks -- --threads 4 --sleep 0 --compare true
242
+ cargo bench - p torrust-tracker- torrent-repository
233
243
```
234
244
235
- It tests the different implementation for the internal torrent storage.
245
+ It tests the different implementations for the internal torrent storage. The output should be something like this:
236
246
237
247
``` output
238
- tokio::sync::RwLock<std::collections::BTreeMap<InfoHash, Entry>>
239
- add_one_torrent: Avg/AdjAvg: (60ns, 59ns)
240
- update_one_torrent_in_parallel: Avg/AdjAvg: (10.909457ms, 0ns)
241
- add_multiple_torrents_in_parallel: Avg/AdjAvg: (13.88879ms, 0ns)
242
- update_multiple_torrents_in_parallel: Avg/AdjAvg: (7.772484ms, 7.782535ms)
243
-
244
- std::sync::RwLock<std::collections::BTreeMap<InfoHash, Entry>>
245
- add_one_torrent: Avg/AdjAvg: (43ns, 39ns)
246
- update_one_torrent_in_parallel: Avg/AdjAvg: (4.020937ms, 4.020937ms)
247
- add_multiple_torrents_in_parallel: Avg/AdjAvg: (5.896177ms, 5.768448ms)
248
- update_multiple_torrents_in_parallel: Avg/AdjAvg: (3.883823ms, 3.883823ms)
249
-
250
- std::sync::RwLock<std::collections::BTreeMap<InfoHash, Arc<std::sync::Mutex<Entry>>>>
251
- add_one_torrent: Avg/AdjAvg: (51ns, 49ns)
252
- update_one_torrent_in_parallel: Avg/AdjAvg: (3.252314ms, 3.149109ms)
253
- add_multiple_torrents_in_parallel: Avg/AdjAvg: (8.411094ms, 8.411094ms)
254
- update_multiple_torrents_in_parallel: Avg/AdjAvg: (4.106086ms, 4.106086ms)
255
-
256
- tokio::sync::RwLock<std::collections::BTreeMap<InfoHash, Arc<std::sync::Mutex<Entry>>>>
257
- add_one_torrent: Avg/AdjAvg: (91ns, 90ns)
258
- update_one_torrent_in_parallel: Avg/AdjAvg: (3.542378ms, 3.435695ms)
259
- add_multiple_torrents_in_parallel: Avg/AdjAvg: (15.651172ms, 15.651172ms)
260
- update_multiple_torrents_in_parallel: Avg/AdjAvg: (4.368189ms, 4.257572ms)
261
-
262
- tokio::sync::RwLock<std::collections::BTreeMap<InfoHash, Arc<tokio::sync::Mutex<Entry>>>>
263
- add_one_torrent: Avg/AdjAvg: (111ns, 109ns)
264
- update_one_torrent_in_parallel: Avg/AdjAvg: (6.590677ms, 6.808535ms)
265
- add_multiple_torrents_in_parallel: Avg/AdjAvg: (16.572217ms, 16.30488ms)
266
- update_multiple_torrents_in_parallel: Avg/AdjAvg: (4.073221ms, 4.000122ms)
248
+ Running benches/repository_benchmark.rs (target/release/deps/repository_benchmark-2f7830898bbdfba4)
249
+ add_one_torrent/RwLockStd
250
+ time: [60.936 ns 61.383 ns 61.764 ns]
251
+ Found 24 outliers among 100 measurements (24.00%)
252
+ 15 (15.00%) high mild
253
+ 9 (9.00%) high severe
254
+ add_one_torrent/RwLockStdMutexStd
255
+ time: [60.829 ns 60.937 ns 61.053 ns]
256
+ Found 1 outliers among 100 measurements (1.00%)
257
+ 1 (1.00%) high severe
258
+ add_one_torrent/RwLockStdMutexTokio
259
+ time: [96.034 ns 96.243 ns 96.545 ns]
260
+ Found 6 outliers among 100 measurements (6.00%)
261
+ 4 (4.00%) high mild
262
+ 2 (2.00%) high severe
263
+ add_one_torrent/RwLockTokio
264
+ time: [108.25 ns 108.66 ns 109.06 ns]
265
+ Found 2 outliers among 100 measurements (2.00%)
266
+ 2 (2.00%) low mild
267
+ add_one_torrent/RwLockTokioMutexStd
268
+ time: [109.03 ns 109.11 ns 109.19 ns]
269
+ Found 4 outliers among 100 measurements (4.00%)
270
+ 1 (1.00%) low mild
271
+ 1 (1.00%) high mild
272
+ 2 (2.00%) high severe
273
+ Benchmarking add_one_torrent/RwLockTokioMutexTokio: Collecting 100 samples in estimated 1.0003 s (7.1M iterationsadd_one_torrent/RwLockTokioMutexTokio
274
+ time: [139.64 ns 140.11 ns 140.62 ns]
275
+ ```
276
+
277
+ After running it you should have a new directory containing the criterion reports:
278
+
279
+ ``` console
280
+ target/criterion/
281
+ ├── add_multiple_torrents_in_parallel
282
+ ├── add_one_torrent
283
+ ├── report
284
+ ├── update_multiple_torrents_in_parallel
285
+ └── update_one_torrent_in_parallel
267
286
```
268
287
288
+ You can see one report for each of the operations we are considering for benchmarking:
289
+
290
+ - Add multiple torrents in parallel.
291
+ - Add one torrent.
292
+ - Update multiple torrents in parallel.
293
+ - Update one torrent in parallel.
294
+
295
+ Each report look like the following:
296
+
297
+ ![ Torrent repository implementations benchmarking report] ( ./media/torrent-repository-implementations-benchmarking-report.png )
298
+
269
299
## Other considerations
270
300
271
- We are testing new repository implementations that allow concurrent writes. See < https://github.com/torrust/torrust-tracker/issues/565 > .
301
+ If you are interested in knowing more about the tracker performance or contribute to improve its performance you ca join the [ performance optimizations discussion ] ( https://github.com/torrust/torrust-tracker/discussions/774 ) .
0 commit comments