Commit 555dfa2
committed
Speedup and simplify page assembly for deeper content trees
This commit moves to a forked version go-radix (fork source has not had any updates in 3 years.), whith 2 notable changes:
* It's generic (using Go generics) and thus removes a lot of type conversions/assertions.
* It allows nodes to be replaced during walk, which allows to partition the tree for parallel processing without worrying about locking.
For this repo, this means:
* The assembly step now processes nested sections in parallel, which gives a speedup for deep content trees with a slight allocation penalty (see benchmarks below).
* Nodes that needs to be reinserted are inserted directly.
* Also, there are some drive-by fixes of some allocation issues, e.g. avoid wrapping mutexes in returned anonomous functions, a common source of hidden allocations.
```
│ master.bench │ perf-p3.bench │
│ sec/op │ sec/op vs base │
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=1/pagesPerSection=50-10 6.958m ± 3% 7.015m ± 3% ~ (p=0.589 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=100-10 14.25m ± 1% 14.56m ± 8% ~ (p=0.394 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=500-10 48.07m ± 3% 49.23m ± 3% ~ (p=0.394 n=6)
AssembleDeepSiteWithManySections/depth=2/sectionsPerLevel=6/pagesPerSection=100-10 66.66m ± 4% 66.47m ± 6% ~ (p=0.485 n=6)
AssembleDeepSiteWithManySections/depth=4/sectionsPerLevel=2/pagesPerSection=100-10 59.57m ± 4% 50.73m ± 5% -14.85% (p=0.002 n=6)
geomean 28.54m 27.92m -2.18%
│ master.bench │ perf-p3.bench │
│ B/op │ B/op vs base │
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=1/pagesPerSection=50-10 4.513Mi ± 0% 4.527Mi ± 0% +0.33% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=100-10 15.35Mi ± 0% 15.49Mi ± 0% +0.94% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=500-10 62.50Mi ± 0% 63.19Mi ± 0% +1.10% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=2/sectionsPerLevel=6/pagesPerSection=100-10 86.78Mi ± 0% 87.73Mi ± 0% +1.09% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=4/sectionsPerLevel=2/pagesPerSection=100-10 62.96Mi ± 0% 63.66Mi ± 0% +1.12% (p=0.002 n=6)
geomean 29.84Mi 30.11Mi +0.92%
│ master.bench │ perf-p3.bench │
│ allocs/op │ allocs/op vs base │
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=1/pagesPerSection=50-10 60.44k ± 0% 60.97k ± 0% +0.87% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=100-10 205.8k ± 0% 211.4k ± 0% +2.70% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=1/sectionsPerLevel=6/pagesPerSection=500-10 831.1k ± 0% 858.3k ± 0% +3.27% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=2/sectionsPerLevel=6/pagesPerSection=100-10 1.157M ± 0% 1.197M ± 0% +3.41% (p=0.002 n=6)
AssembleDeepSiteWithManySections/depth=4/sectionsPerLevel=2/pagesPerSection=100-10 839.9k ± 0% 867.8k ± 0% +3.31% (p=0.002 n=6)
geomean 398.5k 409.3k +2.71%
```1 parent 3d21b06 commit 555dfa2
File tree
20 files changed
+455
-469
lines changed- common/hstrings
- hugofs
- hugolib
- doctree
- internal/warpc
- tpl/tplimpl
20 files changed
+455
-469
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
97 | 97 | | |
98 | 98 | | |
99 | 99 | | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
100 | 110 | | |
101 | 111 | | |
102 | 112 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
8 | 7 | | |
9 | 8 | | |
10 | 9 | | |
| |||
38 | 37 | | |
39 | 38 | | |
40 | 39 | | |
| 40 | + | |
41 | 41 | | |
42 | 42 | | |
43 | 43 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
105 | | - | |
106 | | - | |
107 | 105 | | |
108 | 106 | | |
109 | 107 | | |
| |||
276 | 274 | | |
277 | 275 | | |
278 | 276 | | |
| 277 | + | |
| 278 | + | |
279 | 279 | | |
280 | 280 | | |
281 | 281 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
33 | | - | |
| 33 | + | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
46 | | - | |
| 45 | + | |
| 46 | + | |
47 | 47 | | |
48 | 48 | | |
49 | | - | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
55 | | - | |
| 49 | + | |
| 50 | + | |
56 | 51 | | |
57 | 52 | | |
58 | 53 | | |
| |||
232 | 227 | | |
233 | 228 | | |
234 | 229 | | |
235 | | - | |
236 | | - | |
| 230 | + | |
| 231 | + | |
237 | 232 | | |
238 | 233 | | |
239 | 234 | | |
| |||
279 | 274 | | |
280 | 275 | | |
281 | 276 | | |
282 | | - | |
283 | | - | |
284 | | - | |
| 277 | + | |
| 278 | + | |
285 | 279 | | |
286 | 280 | | |
287 | 281 | | |
| |||
291 | 285 | | |
292 | 286 | | |
293 | 287 | | |
294 | | - | |
295 | | - | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
296 | 291 | | |
297 | 292 | | |
298 | 293 | | |
| |||
385 | 380 | | |
386 | 381 | | |
387 | 382 | | |
388 | | - | |
| 383 | + | |
389 | 384 | | |
390 | | - | |
391 | | - | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
392 | 388 | | |
393 | 389 | | |
394 | 390 | | |
395 | 391 | | |
396 | 392 | | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
401 | | - | |
402 | | - | |
| 393 | + | |
| 394 | + | |
403 | 395 | | |
404 | 396 | | |
405 | 397 | | |
| |||
418 | 410 | | |
419 | 411 | | |
420 | 412 | | |
421 | | - | |
| 413 | + | |
422 | 414 | | |
423 | 415 | | |
424 | 416 | | |
| |||
439 | 431 | | |
440 | 432 | | |
441 | 433 | | |
442 | | - | |
443 | | - | |
444 | | - | |
445 | | - | |
446 | | - | |
| 434 | + | |
| 435 | + | |
447 | 436 | | |
448 | 437 | | |
449 | 438 | | |
450 | 439 | | |
451 | | - | |
452 | | - | |
453 | | - | |
454 | | - | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
455 | 445 | | |
456 | 446 | | |
457 | 447 | | |
458 | 448 | | |
459 | 449 | | |
460 | 450 | | |
461 | | - | |
| 451 | + | |
462 | 452 | | |
463 | 453 | | |
464 | 454 | | |
465 | | - | |
| 455 | + | |
466 | 456 | | |
467 | 457 | | |
468 | | - | |
469 | | - | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
470 | 461 | | |
471 | 462 | | |
472 | 463 | | |
| |||
593 | 584 | | |
594 | 585 | | |
595 | 586 | | |
596 | | - | |
| 587 | + | |
597 | 588 | | |
598 | 589 | | |
599 | 590 | | |
| |||
603 | 594 | | |
604 | 595 | | |
605 | 596 | | |
606 | | - | |
| 597 | + | |
607 | 598 | | |
608 | 599 | | |
609 | 600 | | |
| |||
613 | 604 | | |
614 | 605 | | |
615 | 606 | | |
616 | | - | |
| 607 | + | |
617 | 608 | | |
618 | 609 | | |
619 | | - | |
620 | 610 | | |
621 | 611 | | |
622 | 612 | | |
| |||
630 | 620 | | |
631 | 621 | | |
632 | 622 | | |
633 | | - | |
634 | | - | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
635 | 626 | | |
636 | 627 | | |
637 | 628 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
244 | | - | |
245 | | - | |
| 244 | + | |
| 245 | + | |
246 | 246 | | |
247 | 247 | | |
248 | 248 | | |
| |||
0 commit comments