research: smooth-tunnel regression census L109 vs L115 (L117, measurement only)
Near +18..+32% is ~95% in passage-feature tiles (12-17% of tiles): sweep pairs 2.3-2.6x, exact fallbacks +71..+101%, segment visits 3-4x, plus an untagged cache/prepare/smooth-min bucket (+0.47 s/view). Skips, triangle counts (-0.1..-1.4%), skirts, normals, far shells ruled out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
89504ecc97
commit
c2b8d39573
1 file changed
+69
@@ -0,0 +1,69 @@
|
|||||||
|
# L117 — L109 vs L115 smooth tunnel
|
||||||
|
|
||||||
|
## Run and closure
|
||||||
|
|
||||||
|
Compared snapshot binaries from L109 commit `5ea01988` and L115 commit `f403af1f`; the worktree remained on `wip/l111-halfpipe-spline` at `89504ecc`. Direct readiness used five interleaved measured runs per camera, binary, and worker setting (8 and 12 workers), after one warm-up. L77 sampling was off during these runs; direct LOD timers and mesh coverage were on. Four fixed cameras were reused throughout.
|
||||||
|
|
||||||
|
The L77 route-by-phase census used one worker so its grid-fill estimate could close against direct `mc_grid_ms` timers. Each binary has 16 SW runs and 4 runs per other stratum. Pooled closure was 99.87–104.44%:
|
||||||
|
|
||||||
|
| L77 grid-fill closure | SW | FI | TN | VS |
|
||||||
|
| --- | ---: | ---: | ---: | ---: |
|
||||||
|
| L109 | 100.66% | 104.44% | 102.31% | 102.24% |
|
||||||
|
| L115 | 100.89% | 101.19% | 100.57% | 99.87% |
|
||||||
|
|
||||||
|
The W8 L77 sampler passed its health check, but its grid-fill closure missed 99% in FI, TN, and VS, plus one SW/L109 replicate at 98.6%, because helper grid-fill threads were not tagged. I use the closed W1 census for phase seconds and the W8 runs for direct per-tile timers and the L87 tile timeline. Timeline events were present in all 16 W8 profiles. Start gates recorded one-minute load below 0.9 and about 97–99% CPU idle; snapshots are in `Saved/Linux/l117`. Every headless command used `taskset -c 0-11 prlimit --as=6442450944` and a 29-minute timeout. No run reached the timeout.
|
||||||
|
|
||||||
|
## Readiness
|
||||||
|
|
||||||
|
Five-run medians, in seconds. Near is LOD0–2 readiness; whole is full-view readiness.
|
||||||
|
|
||||||
|
| Stratum | W8 near | W8 whole | W12 near | W12 whole |
|
||||||
|
| --- | --- | --- | --- | --- |
|
||||||
|
| SW | 0.705→0.864 (+22.6%) | 1.666→1.882 (+13.0%) | 0.729→0.886 (+21.4%) | 1.664→1.838 (+10.5%) |
|
||||||
|
| FI | 0.951→1.256 (+32.1%) | 1.844→2.154 (+16.8%) | 0.938→1.186 (+26.5%) | 1.812→2.077 (+14.6%) |
|
||||||
|
| TN | 1.013→1.256 (+24.0%) | 1.916→2.189 (+14.2%) | 1.003→1.178 (+17.5%) | 1.828→2.038 (+11.5%) |
|
||||||
|
| VS | 0.854→1.031 (+20.8%) | 1.818→2.016 (+10.9%) | 0.788→0.930 (+18.0%) | 1.665→1.824 (+9.6%) |
|
||||||
|
|
||||||
|
## Where the extra worker time lands
|
||||||
|
|
||||||
|
The closed W1 census measured a mean LOD0–2 worker-CPU increase of **0.873 s/view**. The three largest, disjoint L77 route×phase buckets are:
|
||||||
|
|
||||||
|
| Route | Phase | Added worker CPU | Share of net increase | Evidence and best next fix |
|
||||||
|
| --- | --- | ---: | ---: | --- |
|
||||||
|
| `unknown` | `other` | +0.473 s/view | 54% | This is the largest unresolved bucket. Samples include cache `TryRead`, `prepareSweptTubeBase`, `SmoothMinDistance`, `CachedColumn`, and `Heightfield2D::point`. Add finer timers/tags around those calls, then optimize the confirmed hot path. |
|
||||||
|
| `packed_scalar` | `passages` | +0.296 s/view | 34% | Mostly FI (+0.634 s) and TN (+0.481 s). Target sweep misses and costly exact route fallbacks/segment visits; pair pruning alone was not enough in L116. |
|
||||||
|
| `native` | `passages` | +0.095 s/view | 11% | Concentrated in SW (+0.382 s). Check native-route sweep coverage and avoid repeated exact segment visits on misses. |
|
||||||
|
|
||||||
|
`analytic_scalar|passages` adds another 0.079 s/view, while other phase changes mostly offset it. At phase level, `passages` is +0.470 s/view and `other` is +0.473; `base_field` is −0.018, dispatch is −0.052, composition bands are +0.001, and support is exactly zero in both builds. The top-three shares are rounded; do not add these to the separate tile-region measurements below.
|
||||||
|
|
||||||
|
W8 passage-composer counters support the route-sweep diagnosis. Values are mean counts per view for LOD0–2, averaged over two profiles:
|
||||||
|
|
||||||
|
| Stratum | Sweep pairs L109→L115 | Exact fallbacks | Segment visits |
|
||||||
|
| --- | ---: | ---: | ---: |
|
||||||
|
| SW | 3.36M→7.56M (2.25×) | 0.241M→0.413M | 1.19M→3.41M |
|
||||||
|
| FI | 6.19M→16.22M (2.62×) | 0.369M→0.719M | 1.91M→7.60M |
|
||||||
|
| TN | 6.15M→15.52M (2.52×) | 0.315M→0.634M | 1.66M→6.88M |
|
||||||
|
| VS | 4.09M→9.63M (2.35×) | 0.074M→0.131M | 0.48M→1.41M |
|
||||||
|
|
||||||
|
Exact fallbacks rose 71–101% and segment visits 185–314%. By comparison, detail/shell samples stayed within −4% to +4%, base samples fell 11–26%, and grid samples ranged from −2% to +3%. The `sweep_lookups` counter is prepared-sweep cache access, not an h(s) lookup count; it fell 3–27%. L77 does not separately count or time floor-profile h(s) lookups, nor does it time the half-pipe shell terms. Detail-shell sample counts were flat while `relief_field_calls` rose 15–49%, so their seconds cannot be separated here.
|
||||||
|
|
||||||
|
## Tile, meshing, and bounds checks
|
||||||
|
|
||||||
|
The W8 tile timeline localizes the slowdown. Passage/route-feature tiles are 174/212/200/182 of 1,408/1,216/1,344/1,344 matched LOD0–2 tiles (SW/FI/TN/VS). Their summed worker time rose by **1.087/1.902/1.678/0.937 s/view**; the non-passage tiles rose only **0.075/0.063/0.035/0.109 s/view**. Across strata, passage-feature tiles account for about 95% of the +1.47 s/view W8 tile-worker delta. Direct `mc_grid_ms` rose by 0.543 s/view on average, about 91% of that increase landing in passage-feature tiles. Cell-class time was flat, gradient/normal time fell by about 0.094 s/view, interpolation rose about 0.069 s/view, and skirt time rose about 0.036 s/view on average.
|
||||||
|
|
||||||
|
Uniform-proof skip counts changed little (LOD0: SW 367→374, FI 255→265, TN 276→286, VS 233→223; LOD1: 295→295, 229→229, 298→297, 296→291; LOD2 unchanged at 266, 106, 152, 128). There is no across-the-board shift to more fully sampled tiles. L77's separate W1 stage estimate shows grid fill +0.355 worker-s/view, marching cubes −0.009, skirts +0.022, and refine +0.020.
|
||||||
|
|
||||||
|
Triangle counts also rule out extra output work. Each cell is L109→L115:
|
||||||
|
|
||||||
|
| Stratum | LOD0 triangles | LOD1 triangles | LOD2 triangles | All-LOD triangles |
|
||||||
|
| --- | ---: | ---: | ---: | ---: |
|
||||||
|
| SW | 389,676→360,833 | 364,242→341,110 | 131,750→131,194 | 3,890,601→3,837,772 (−1.36%) |
|
||||||
|
| FI | 834,490→794,062 | 359,970→342,432 | 71,166→70,830 | 4,186,439→4,127,159 (−1.42%) |
|
||||||
|
| TN | 822,010→792,156 | 340,124→333,178 | 152,672→152,636 | 4,089,688→4,052,874 (−0.90%) |
|
||||||
|
| VS | 670,794→668,454 | 304,140→304,164 | 170,766→170,442 | 3,779,040→3,776,400 (−0.07%) |
|
||||||
|
|
||||||
|
LOD0–2 skirt triangles fell in every stratum: SW 196,602→162,004; FI 141,980→97,126; TN 133,534→101,044; VS 85,132→82,414. In the max-level-8 cost pass, LOD3–8 far-shell triangles were 9,274 in both versions for every camera; shell timer changes ranged from −22 to +17 ms with no consistent increase.
|
||||||
|
|
||||||
|
**Conclusion:** the 20–30% near-readiness regression is concentrated in passage-feature tile field work. The strongest internal signal is more exact fallback and segment-visit work, plus a large unresolved cache/preparation bucket. Skips, surface/ skirt output, normals, and far shells do not account for it. No generation code was changed in L117; the suggested work above is diagnostic/fix direction only.
|
||||||
|
|
||||||
|
Logs, profiles, and summaries are under `Saved/Linux/l117/`.
|
||||||
Reference in new issue
Block a user