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