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

74 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.