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
74 lines
5.9 KiB
Markdown
74 lines
5.9 KiB
Markdown
# 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.
|