Commit b871a51
authored
SimpleSeq.Seek: fast-path for
`SimpleSequence.search` is read on `erigon snapshots
check-commitment-hist-at-blk-range` profiler
```
// Real data lengths:
// - 70% len=1
// - 15% len=2
// - ...
//
// Real data return `idx`:
// - 85% return idx=0 (first element)
// - 10% return "not found"
// - 5% other lengths
//
// As a result: early-check for `max` + full-scan search instead of `sort.Search`
```
Add fast-path for `len=1`:
```
│ old0.txt │ new.txt │
│ sec/op │ sec/op vs base │
SimpleSequenceSeek/n=1/hit_first-16 2.975n ± 0% 2.381n ± 0% -19.97% (p=0.000 n=10)
SimpleSequenceSeek/n=1/hit_mid-16 2.970n ± 0% 2.387n ± 1% -19.63% (p=0.000 n=10)
SimpleSequenceSeek/n=1/hit_last-16 2.999n ± 3% 2.391n ± 0% -20.29% (p=0.000 n=10)
SimpleSequenceSeek/n=1/miss-16 2.772n ± 0% 2.371n ± 0% -14.48% (p=0.000 n=10)
SimpleSequenceSeek/n=2/hit_first-16 3.570n ± 0% 2.405n ± 1% -32.62% (p=0.000 n=10)
SimpleSequenceSeek/n=2/hit_mid-16 3.762n ± 0% 4.088n ± 0% +8.68% (p=0.000 n=10)
SimpleSequenceSeek/n=2/hit_last-16 3.765n ± 0% 4.081n ± 0% +8.38% (p=0.000 n=10)
SimpleSequenceSeek/n=2/miss-16 2.772n ± 0% 2.970n ± 0% +7.16% (p=0.000 n=10)
SimpleSequenceSeek/n=4/hit_first-16 4.351n ± 0% 2.389n ± 1% -45.08% (p=0.000 n=10)
SimpleSequenceSeek/n=4/hit_mid-16 3.768n ± 0% 4.037n ± 0% +7.15% (p=0.000 n=10)
SimpleSequenceSeek/n=4/hit_last-16 3.766n ± 0% 4.010n ± 0% +6.48% (p=0.000 n=10)
SimpleSequenceSeek/n=4/miss-16 3.364n ± 0% 3.748n ± 0% +11.40% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_first-16 6.281n ± 1% 2.394n ± 0% -61.89% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_mid-16 5.774n ± 0% 5.665n ± 0% -1.89% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_last-16 5.915n ± 1% 5.755n ± 0% -2.70% (p=0.000 n=10)
SimpleSequenceSeek/n=16/miss-16 5.531n ± 0% 5.221n ± 0% -5.61% (p=0.000 n=10)
geomean 3.871n 3.328n -14.01%
│ old0.txt │ new.txt │
```
----
Brude-Force search (decided to not go for it):
```
SimpleSequenceSeek/n=4/hit_first-16 4.758n ± 0% 1.883n ± 2% -60.42% (p=0.000 n=10)
SimpleSequenceSeek/n=4/hit_mid-16 4.000n ± 0% 2.865n ± 1% -28.36% (p=0.000 n=10)
SimpleSequenceSeek/n=4/hit_last-16 4.163n ± 0% 3.523n ± 2% -15.38% (p=0.000 n=10)
SimpleSequenceSeek/n=4/miss-16 1.991n ± 10% 1.321n ± 4% -33.64% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_first-16 6.138n ± 0% 1.889n ± 2% -69.22% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_mid-16 5.742n ± 0% 6.240n ± 2% +8.66% (p=0.000 n=10)
SimpleSequenceSeek/n=16/hit_last-16 5.814n ± 0% 10.425n ± 3% +79.29% (p=0.000 n=10)
SimpleSequenceSeek/n=16/miss-16 2.000n ± 9% 1.336n ± 8% -33.22% (p=0.000 n=10)
```
also i did take a look real data distribution on mainnet:
```
// Real data lengths:
// - 70% len=1
// - 15% len=2
// - ...
//
// Real data return `idx`:
// - 85% return idx=0 (first element)
// - 10% return "not found"
// - 5% other lengths
//
// As a result: early-check for `max` + full-scan search instead of `sort.Search`
```count=1 case (#19101)1 parent 0e65d31 commit b871a51
File tree
2 files changed
+106
-23
lines changed- db/recsplit/simpleseq
2 files changed
+106
-23
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| 28 | + | |
27 | 29 | | |
28 | 30 | | |
29 | 31 | | |
| |||
37 | 39 | | |
38 | 40 | | |
39 | 41 | | |
40 | | - | |
41 | | - | |
42 | | - | |
| 42 | + | |
| 43 | + | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
46 | | - | |
| 47 | + | |
| 48 | + | |
47 | 49 | | |
48 | 50 | | |
49 | 51 | | |
50 | | - | |
| 52 | + | |
| 53 | + | |
51 | 54 | | |
52 | 55 | | |
53 | 56 | | |
54 | | - | |
| 57 | + | |
55 | 58 | | |
| 59 | + | |
56 | 60 | | |
57 | 61 | | |
58 | | - | |
| 62 | + | |
59 | 63 | | |
60 | 64 | | |
61 | 65 | | |
62 | 66 | | |
63 | 67 | | |
64 | 68 | | |
65 | 69 | | |
| 70 | + | |
66 | 71 | | |
67 | 72 | | |
68 | 73 | | |
69 | 74 | | |
70 | 75 | | |
71 | 76 | | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
79 | 91 | | |
80 | 92 | | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
| 93 | + | |
| 94 | + | |
88 | 95 | | |
| 96 | + | |
| 97 | + | |
89 | 98 | | |
90 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
91 | 104 | | |
92 | 105 | | |
93 | | - | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
94 | 110 | | |
95 | 111 | | |
96 | 112 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
282 | 283 | | |
283 | 284 | | |
284 | 285 | | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
0 commit comments