Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux80/REPORT.md
T
Fr0zkaandClaude Opus 5.5 b06397df9c streaming: speed-aware scheduler with hysteresis (L80); arrival near-first, fast travel keeps the horizon
Policy 3 (headless + Unreal): walkable ring always first; at rest/arrival LOD0-2 before far;
walking interleaves near:far ~4:1 toward heading; fast travel admits far coarse tiles right after
the walkable ring. Hysteresis: walking 0.75/0.35 m/s, fast 12/8 m/s.
Headless, far holes while moving 30 m/s: L77 9.0% / L79 77.2% / L80 8.9%. Cold LOD0-2 ready
(one clean protocol, medians): SW 1.30, FI 3.61, TN 3.07, VS 1.43 s.
Unreal 30 m/s traces end 2,233/2,237 loaded (commandlet readiness exit 1) for all policies.
Passage zero-padding cut: ~50% fewer passage iterations on active tiles, max 6.6 cm surface
displacement, no sign flips; not adopted yet (padding sweep next). World unchanged (v213).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-27 21:39:21 +01:00

5.9 KiB
Raw Blame History

Linux80

Scheduler policy

Policy 3 is speed aware. The walkable LOD0 ring always leads. On arrival and at rest, LOD0–2 run before far work; far generation continues after the near queue drains. While walking, near and far tiles interleave at about 4:1, with near tiles ordered toward travel. At fast speed, far coarse tiles follow the walkable ring. Headless and Unreal use matching hysteresis: walking enters at 0.75 m/s and exits at 0.35 m/s; fast travel enters at 12 m/s and exits at 8 m/s.

Headless moving runs used 12 s of motion, 5 s of dwell, 69 samples per run, and had zero generation failures. Values are moving means; dwell is final far holes / near readiness.

Speed Policy Far holes Near ready Dwell end
1.4 m/s L77 7.70% 75.74% 0% / 100%
1.4 m/s L79 32.84% 82.08% 0% / 100%
1.4 m/s L80 26.62% 81.54% 0% / 100%
30 m/s L77 8.96% 49.40% 0% / 100%
30 m/s L79 77.21% 56.96% 0% / 100%
30 m/s L80 8.94% 46.50% 0% / 100%

Unreal null-RHI runs used the same 12 s + 5 s route, with no address-space cap. Values are moving means; each dwell ended with 0% far holes and 99.7–99.9% near readiness.

Speed Policy Far holes Near ready Commandlet
1.4 m/s L77 5.46% 99.12% pass
1.4 m/s L79 7.49% 99.08% pass
1.4 m/s L80 9.23% 99.13% pass
30 m/s L77 24.89% 20.79% exit 1*
30 m/s L79 13.42% 20.41% exit 1*
30 m/s L80 10.51% 20.52% exit 1*

*All fast traces completed their movement and dwell samples, but the commandlet readiness check exited 1: desired=2,237, loaded=2,233, pending/cooks/active=0. Their trace data is usable for the table; the initial-readiness check remains a failed run. L80’s first walking attempt similarly exited with 2,235/2,237 loaded; its complete rerun passed.

Cold arrival and timing

Seconds to LOD0–2 ready / whole view ready; three measured runs per policy and stratum, reported as medians.

Stratum L77 L79 L80 (HEAD)
S0 2.798 / 2.798 1.488 / 2.730 1.298 / 2.917
S1 4.577 / 4.577 3.672 / 4.904 3.607 / 5.119
S2 4.501 / 4.501 3.691 / 4.720 3.068 / 4.318
S3 2.624 / 2.624 1.579 / 2.451 1.429 / 2.476

Protocol: rebuilt clean clang headless binary, 8 workers, identical data/flags, no external sampler; one unrecorded warm-up per stratum and policy, then three interleaved triplets in rotating policy order. Every headless process used taskset -c 0-11, prlimit --as=6442450944, and a 1,740 s timeout. L77/L79 are control policy IDs in the same final binary. L78’s 5.26 s and its L79 re-measure at 3.39 s are not comparable to these timings; neither used this binary and protocol. The older moving-camera values are likewise context only; this report reruns all three policies under one binary.

Passage-cut audit

The L77 census profiled 1,602 tile visits. I selected the highest measured LOD0/1 segment-activity tiles across all four strates: 17 stratum records (14 unique tile keys), covering mouths, route body and support columns. L77’s census attributes 63% of near-LOD FI/TN CPU to passage work. On these active records, a zero-padding bound projected skips of 50.76% of passage iterations, 61.50% of carve visits, 49.76% of support visits and 51.72% of relief calls. That justified testing it.

The zero-padding candidate changed these samples:

Stratum Changed samples Sign flips Max absolute density delta location Max surface displacement location
S0 19,434 0 54.329 at tile (-1,-2,-24), LOD1, sample (-34,-98,-1538) 0 cm; no displaced crossing edge
S1 63 0 2.198 at tile (-1,1,-43), LOD1, sample (-2,118,-2748) 1.014 cm at edge start (-2,116,-2748), axis 1
S2 86 0 2.619 at tile (-1,1,-45), LOD1, sample (0,114,-2854) 6.641 cm at edge start (0,112,-2854), axis 1
S3 21 0 0.455 at tile (1,-1,-55), LOD1, sample (80,-2,-3484) 0 cm; no displaced crossing edge

Per-sample base/candidate density, delta and sign-flip rows are in Saved/Linux/l80/passage-census/deltas/strate{0..3}-candidate.csv; the per-tile logs give individual counts and surface-edge details. The matching *-candidate-pad48.csv files contain headers only because there were no changed samples.

Padding to 48 voxels made all selected output samples identical: zero changes, zero sign flips and 0 cm displacement in every stratum. It also reduced projected skips to 0.226% of iterations, 0.098% of carve visits, 0.196% of support visits and 0.138% of relief calls; paired tile timings were mixed, with no consistent speedup. The useful cut therefore loses passage influence; the safe cut does not save meaningful CPU. The candidate was removed, with no field/version change, captures or peer-determinism run.

Build, failures and files

The final Linux host build succeeded after timing with -MaxParallelActions=4 using UBT’s local executor. An earlier UBA attempt made no action progress and was stopped before 30 minutes. The first local build caught an out-of-scope MaxDesiredLevel reference in the new Unreal coverage trace; that was fixed before the successful build. A first UBT attempt also failed before compilation when it tried to rotate a log in the read-only user config directory; the project config was temporarily redirected and restored.

Changed Source/ files:

  • Source/VoxelForge/Private/VoxelWorld.cpp — Unreal scheduler, hysteresis, movement test and coverage trace.
  • Source/VoxelForge/Public/VoxelWorld.h — movement-test duration state.
  • Standalone/Source/StreamingWorld.h — headless speed-aware order and matching hysteresis.
  • Standalone/Source/StreamBenchmarkHeadless.cpp — forwards route speed to the scheduler.
  • Standalone/Source/StreamBenchmarkPipeline.h — surface-delta location reporting.

Logs and runner scripts are under Saved/Linux/l80/ and this directory. No commit, push or stash was made.