Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux117/REPORT.md
T
Fr0zkaandClaude Opus 5.5 c2b8d39573 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
2026-10-30 03:40:37 +01:00

6.8 KiB
Raw Blame History

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/.