Skip to content

Commit cd395c7

Browse files
authored
Merge pull request #1 from douglaz/fixed_estimates
chore: improving estimates
2 parents e226474 + 50c0ef3 commit cd395c7

File tree

2 files changed

+117
-100
lines changed

2 files changed

+117
-100
lines changed

README.md

Lines changed: 82 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -147,37 +147,37 @@ The table below shows realistic scenarios:
147147
* 🖥️ **16 threads** (e.g. 16-core/64GB RAM desktop machine)
148148
* 🏭 **2048 threads** (e.g. 64×32-core/128GB RAM machines on some cloud provider)
149149

150-
| Bits | 16 threads 🖥️<br>(**systematic search**) | 2048 threads 🏭<br>(**systematic search**) | 2048 threads 🏭<br>(**random search**) | | |
151-
|------|------------------------------------------|---------------------------------------------|----------------------------------------|-------------------|---------------------|
152-
| | Worst-case time | Worst-case time | Expected time | 99th percentile | 99.9th percentile |
153-
| 15 | 30 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
154-
| 6 | 1 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
155-
| 7 | 2 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
156-
| 8 | 4 min 8 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
157-
| 9 | 8 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
158-
| 10 | 16 min 30 s | 30 s | 31 s | 2 min 23 s | 3 min 33 s |
159-
| 11 | 33 min 1 s | 30 s | 35 s | 2 min 41 s | 4 min 1 s |
160-
| 12 | 1 h 6 min | 30 s | 47 s | 3 min 36 s | 5 min 24 s |
161-
| 13 | 2 h 12 min | 1 min 0 s | 1 min 17 s | 5 min 55 s | 8 min 53 s |
162-
| 14 | 4 h 24 min | 2 min 0 s | 2 min 17 s | 10 min 31 s | 15 min 47 s |
163-
| 15 | 8 h 48 min | 4 min 0 s | 4 min 17 s | 19 min 44 s | 29 min 36 s |
164-
| 16 | 17 h 36 min | 8 min 0 s | 8 min 20 s | 38 min 24 s | 57 min 36 s |
165-
| 17 | 1 d 11 h | 16 min 0 s | 16 min 19 s | 1 h 15 m | 1 h 52 m |
166-
| 18 | 2 d 22 h | 32 min 0 s | 32 min 20 s | 2 h 29 m | 3 h 43 m |
167-
| 19 | 5 d 21 h | 1 h 4 m | 1 h 4 m | 4 h 55 m | 7 h 22 m |
168-
| 20 | 11 d 9 h | 2 h 8 m | 2 h 8 m | 9 h 52 m | 14 h 48 m |
169-
| 21 | 23 d 11 h | 4 h 16 m | 4 h 16 m | 19 h 44 m | 1 d 5 h |
170-
| 22 | 46 d 23 h | 8 h 32 m | 8 h 32 m | 1 d 15 h | 2 d 11 h |
171-
| 23 | 91 d 1 h | 17 h 4 m | 17 h 4 m | 3 d 6 h | 4 d 21 h |
172-
| 24 | 182 d 1 h | 1 d 10 h | 1 d 10 h | 6 d 13 h | 9 d 18 h |
173-
| 25 | 364 d 2 h | 2 d 20 h | 2 d 20 h | 13 d 2 h | 19 d 12 h |
174-
| 26 | 728 d 4 h | 5 d 17 h | 5 d 17 h | 26 d 1 h | 39 d 1 h |
175-
| 27 | 1456 d 8 h | 11 d 9 h | 11 d 9 h | 52 d 4 h | 78 d 6 h |
176-
| 28 | 8 y 83 d | 22 d 18 h | 22 d 18 h | 104 d 8 h | 156 d 12 h |
177-
| 29 | 16 y 165 d | 45 d 12 h | 45 d 12 h | 208 d 16 h | 312 d 24 h |
178-
| 30 | 32 y 331 d | 91 d | 91 d | 417 d 8 h | 1 y 261 d |
179-
| 31 | 65 y 297 d | 182 d | 182 d | 2 y 105 d | 3 y 157 d |
180-
| 32 | 131 y 228 d | 364 d | 364 d | 4 y 212 d | 6 y 318 d |
150+
| Bits | 16 threads 🖥️<br>(**systematic search**) | 2048 threads 🏭<br>(**systematic search**) | 2048 threads 🏭<br>(**random search**) | | |
151+
|------|------------------------------------------|---------------------------------------------|----------------------------------------|-----------------------|-----------------------|
152+
| | Worst-case time | Worst-case time | Expected time | 99th percentile | 99.9th percentile |
153+
| 1-5 | 30 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
154+
| 6 | 1 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
155+
| 7 | 2 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
156+
| 8 | 4 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
157+
| 9 | 8 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
158+
| 10 | 16 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
159+
| 11 | 32 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
160+
| 12 | 1 h 4 min | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
161+
| 13 | 2 h 8 min | 1 min 0 s | 1 min 0 s | 4 min 36 s | 6 min 54 s |
162+
| 14 | 4 h 16 min | 2 min 0 s | 2 min 0 s | 9 min 13 s | 13 min 49 s |
163+
| 15 | 8 h 32 min | 4 min 0 s | 4 min 0 s | 18 min 25 s | 27 min 38 s |
164+
| 16 | 17 h 4 min | 8 min 0 s | 8 min 0 s | 36 min 50 s | 55 min 16 s |
165+
| 17 | 1 d 10 h | 16 min 0 s | 16 min 0 s | 1 h 14 min | 1 h 51 min |
166+
| 18 | 2 d 20 h | 32 min 0 s | 32 min 0 s | 2 h 27 min | 3 h 41 min |
167+
| 19 | 5 d 17 h | 1 h 4 min | 1 h 4 min | 4 h 55 min | 7 h 22 min |
168+
| 20 | 11 d 9 h | 2 h 8 min | 2 h 8 min | 9 h 49 min | 14 h 44 min |
169+
| 21 | 22 d 18 h | 4 h 16 min | 4 h 16 min | 19 h 39 min | 1 d 5 h |
170+
| 22 | 45 d 12 h | 8 h 32 min | 8 h 32 min | 1 d 15 h | 2 d 11 h |
171+
| 23 | 91 d 0 h | 17 h 4 min | 17 h 4 min | 3 d 7 h | 4 d 22 h |
172+
| 24 | 182 d 0 h | 1 d 10 h | 1 d 10 h | 6 d 13 h | 9 d 20 h |
173+
| 25 | 364 d 0 h | 2 d 20 h | 2 d 20 h | 13 d 2 h | 19 d 16 h |
174+
| 26 | 1 y 363 d | 5 d 17 h | 5 d 17 h | 26 d 5 h | 39 d 7 h |
175+
| 27 | 3 y 361 d | 11 d 9 h | 11 d 9 h | 52 d 10 h | 78 d 14 h |
176+
| 28 | 7 y 358 d | 22 d 18 h | 22 d 18 h | 104 d 19 h | 157 d 5 h |
177+
| 29 | 15 y 351 d | 45 d 12 h | 45 d 12 h | 209 d 14 h | 314 d 9 h |
178+
| 30 | 31 y 338 d | 91 d 1 h | 91 d 1 h | 1 y 54 d | 1 y 264 d |
179+
| 31 | 63 y 311 d | 182 d 1 h | 182 d 1 h | 2 y 108 d | 3 y 163 d |
180+
| 32 | 127 y 257 d | 364 d 2 h | 364 d 2 h | 4 y 217 d | 6 y 325 d |
181181

182182

183183
## Understanding Random Search Variance
@@ -203,65 +203,66 @@ For planning purposes, consider the 99th percentile times shown in the table abo
203203

204204

205205
### Real world example using the `benchmark` command
206+
The following is an **example output**. Run this command on your own hardware to get accurate time estimates for your machine.
206207
```bash
207208
$ cargo run --release -F alkali -- benchmark -i 1 -t 16
208209
Using 16 threads for benchmark
209210
Starting benchmark with 1 iterations across 16 threads...
210211

211212
Benchmark results:
212213
Threads: 16
213-
Total time: 35.48s
214+
Total time: 29.63s
214215
Total iterations: 16
215-
Global average time per derivation: 2217.33ms
216-
Global derivations per second: 0.45
217-
Thread average time per derivation: 35.48s
216+
Global average time per derivation: 1851.87ms
217+
Global derivations per second: 0.54
218+
Thread average time per derivation: 29.63s
218219
Thread derivations per second: 0.03
219220

220-
Estimated time to brute-force one preimage/key pair:
221-
Note: This benchmark uses 16 threads with systematic search
222-
For comparison with random search percentiles, see README table
223-
224-
bits │ systematic (worst) │ systematic (expected)
225-
-----┼--------------------┼-------------------
226-
1 │ 35s │ 35s
227-
2 35s 35s
228-
3 35s 35s
229-
4 35s 35s
230-
5 35s 35s
231-
61min 11s 35s
232-
72min 22s1min 11s
233-
84min 44s 2min 22s
234-
9 9min 28s │ 4min 44s
235-
10 18min 55s │ 9min 28s
236-
11 37min 51s │ 18min 55s
237-
12 1h 16min │ 37min 51s
238-
13 2h 31min 1h 16min
239-
14 5h 3min 2h 31min
240-
15 10h 5min 5h 3min
241-
16 20h 11min 10h 5min
242-
17 1d 16h 20h 11min
243-
18 3d 9h 1d 16h
244-
19 6d 17h 3d 9h
245-
20 13d 11h 6d 17h
246-
21 26d 22h 13d 11h
247-
22 53d 20h 26d 22h
248-
23 107d 15h 53d 20h
249-
24 215d 7h 107d 15h
250-
25 1y 66d 215d 7h
251-
26 2y 131d 1y 66d
252-
27 4y 262d 2y 131d
253-
28 9y 159d 4y 262d
254-
29 18y 319d 9y 159d
255-
30 37y 273d │ 18y 319d
256-
31 75y 181d │ 37y 273d
257-
32 150y 362d │ 75y 181d
258-
259-
Systematic search explanation:
260-
• Worst-case: One thread gets unlucky and searches entire partition
261-
Expected case: Threads find target halfway through their partitions on average
262-
No variance: Deterministic partitioning means predictable bounds
263-
264-
For random search with percentiles, see the README table comparing
265-
systematic (16 threads) vs random search (2048 threads)
221+
Estimated time to brute-force with measured derivation time:
222+
Average derivation time: 29.63s
223+
Thread count: 16
224+
225+
bits │ systematic-16t │ systematic-16t │ random-16t │ random-16t │ random-16t
226+
│ (expected) │ (worst case) │ (expected)│ (99th %) │ (99.9th %)
227+
-----┼----------------┼----------------┼-----------┼-----------┼------------
228+
130s │ 30s 30s │ 2min 16s │ 3min 25s
229+
230s │ 30s 30s │ 2min 16s │ 3min 25s
230+
330s │ 30s 30s │ 2min 16s │ 3min 25s
231+
430s │ 30s 30s │ 2min 16s │ 3min 25s
232+
5 30s30s │ 30s │ 2min 16s │ 3min 25s
233+
6 30s 59s │ 59s │ 4min 33s │ 6min 49s
234+
7 59s1min 59s │ 1min 59s │ 9min 6s │ 13min 39s
235+
81min 59s │ 3min 57s │ 3min 57s │ 18min 12s │ 27min 17s
236+
9 3min 57s │ 7min 54s │ 7min 54s │ 36min 23s │ 54min 35s
237+
107min 54s │ 15min 48s │ 15min 48s │ 1h 13min │ 1h 49min
238+
1115min 48s │ 31min 36s │ 31min 36s │ 2h 26min │ 3h 38min
239+
1231min 36s │ 1h 3min 1h 3min │ 4h 51min │ 7h 17min
240+
131h 3min │ 2h 6min 2h 6min │ 9h 42min │ 14h 33min
241+
142h 6min │ 4h 13min 4h 13min │ 19h 24min │ 1d 5h
242+
154h 13min │ 8h 26min 8h 26min │ 1d 15h │ 2d 10h
243+
168h 26min │ 16h 51min │ 16h 51min │ 3d 6h │ 4d 20h
244+
1716h 51min │ 1d 10h 1d 10h │ 6d 11h │ 9d 17h
245+
181d 10h │ 2d 19h 2d 19h │ 12d 23h │ 19d 10h
246+
192d 19h │ 5d 15h 5d 15h │ 25d 21h │ 38d 20h
247+
205d 15h │ 11d 6h 11d 6h │ 51d 18h │ 77d 15h
248+
2111d 6h │ 22d 11h 22d 11h │ 103d 12h │ 155d 6h
249+
2222d 11h │ 44d 23h 44d 23h │ 207d 0h │ 310d 12h
250+
2344d 23h │ 89d 22h 89d 22h │ 1y 49d │ 1y 256d
251+
2489d 22h │ 179d 19h 179d 19h │ 2y 98d │ 3y 147d
252+
25179d 19h │ 359d 14h 359d 14h │ 4y 196d │ 6y 294d
253+
26359d 14h │ 1y 354d 1y 354d │ 9y 27d │ 13y 223d
254+
271y 354d │ 3y 343d 3y 343d │ 18y 54d │ 27y 81d
255+
283y 343d │ 7y 322d 7y 322d │ 36y 108d │ 54y 162d
256+
297y 322d │ 15y 279d │ 15y 279d │ 72y 216d │ 108y 324d
257+
3015y 279d │ 31y 192d │ 31y 192d │ 145y 67d │ 217y 283d
258+
3131y 192d │ 63y 19d │ 63y 19d │ 290y 135d │ 435y 202d
259+
32 │ 63y 19d │ 126y 38d │ 126y 38d │ 580y 269d │ 871y 39d
260+
261+
Explanation:
262+
Systematic (expected): Average case with 16 threads, each searching half their partition
263+
Systematic (worst): One thread searches entire partition of 2^(n-1) / 16 candidates
264+
• Random (expected): 16 threads with expected 2^(n-1) / 16 trials per thread
265+
• Random (99th %): 99% chance completion is faster than this
266+
• Random (99.9th %): 99.9% chance completion is faster than this
266267
```
267268
---

0 commit comments

Comments
 (0)