unreal: tile generation at BackgroundLow priority (L97); FI arrival world-tick max 93 -> 21 ms
The 50-90 ms UWorld::Tick spikes were the TG_EndPhysics barrier waiting for physics-scene completion while all 8 TaskGraph workers ran BackgroundHigh tile tasks. Near and horizon tile generation now run at ETaskPriority::BackgroundLow (helper lanes background); queue depth and the 8 workers are kept. FI: near set 2.11 s (10 runs), max UWorld::Tick 21 ms, max EndPhysics->PostPhysics gap 16 ms; SW: 1.32 s, 11 ms. A hard 7-task cap removed spikes but doubled settle time. World unchanged. Fast tier PASS; Linux UE host builds. R44 notes (exact passage restructuring: only a full-composer z-column SIMD kernel could plausibly reach 3x; smaller exact pieces ~1.1-1.2x each) attached. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
94f9aa6790
commit
9d9504ae4e
4 files changed
+600
-14
No files matched your search
@@ -0,0 +1,35 @@
|
||||
# Linux L97 — arrival tick stalls
|
||||
|
||||
## Stall
|
||||
|
||||
**Measured:** FI control runs had 54.1 ms and 93.4 ms `UWorld::Tick` spikes while `AVoxelWorld::Tick` took 1.7 ms and 1.3 ms. Eight tile workers were active. Text `tick.LogTicks` output put 52 ms and 92 ms between releasing `TG_EndPhysics` and `TG_PostPhysics`; the group 3 log names `FEndPhysicsTickFunction`.
|
||||
|
||||
**Engine source:** `LevelTick.cpp` blocks on `TG_EndPhysics`. `FEndPhysicsTickFunction` in `PhysLevel.cpp` holds its completion event on `PhysScene->GetCompletionEvents()` and then runs `FinishPhysicsSim`. Thus the measured wait is the EndPhysics barrier waiting for physics-scene completion. **Inferred cause:** near tile tasks at `BackgroundHigh`, plus their helper lanes, delay that completion work when the shared worker pool is full. Lowering helper priority alone did not remove the spikes. The exact Chaos completion task was not available: L96's `.utrace` export failed to start Insights on SDL/UDEV, so L97 used Unreal's text tick logger instead.
|
||||
|
||||
## Fix and measurements
|
||||
|
||||
Set near and horizon tile generation to `UE::Tasks::ETaskPriority::BackgroundLow`; keep Core `ParallelFor` helper lanes background-prioritized. Keep the existing refill queue (CVar 64, effective depth 32) and all 8 background workers. This changes scheduling only; generation inputs and output are unchanged.
|
||||
|
||||
| Configuration | FI: median near-set / max `UWorld::Tick` | SW: median near-set / max `UWorld::Tick` |
|
||||
|---|---:|---:|
|
||||
| Existing near-high priorities, 5 runs each | 2.338 s / 93.4 ms | 1.298 s / 11.2 ms |
|
||||
| Helper lanes background only, 5 each | 2.318 s / 71.9 ms | 1.547 s / 11.1 ms |
|
||||
| Hard cap 7 tasks, refill queue 0, 5 each | 4.169 s / 7.2 ms | 4.422 s / 10.8 ms |
|
||||
| All tile tasks `BackgroundNormal`, 5 each | 2.337 s / 240.0 ms | 1.301 s / 13.3 ms |
|
||||
| **Selected: all tile tasks `BackgroundLow`, 10 FI / 5 SW** | **2.109 s / 21.0 ms** | **1.316 s / 11.0 ms** |
|
||||
|
||||
The selected FI near-set range was 2.075–2.611 s (three of ten runs exceeded 2.3 s); SW was 1.285–1.323 s. In the selected runs, the largest EndPhysics-to-PostPhysics gap was 16 ms FI and 7 ms SW. A one-worker reserve with CVar depth 64 (effective depth 28) still ran 8 workers and reached 107.9 ms FI; setting the queue to zero enforced a true 7-task cap but caused 4.2–4.4 s settle times. The selected configuration's enclosing harness interval peaked at 37.0 ms, with 16.0 ms outside `UWorld::Tick`; the largest `UWorld::Tick` was 21.0 ms.
|
||||
|
||||
Fast tier: **PASS**, 269 passing checks and 5 diagnostic-only baseline comparisons. Final Linux UE build passed with `-NoUBA -MaxParallelActions=4`. Logs and per-run summaries are under `Saved/Linux/l97/`.
|
||||
|
||||
## Files
|
||||
|
||||
- `Source/VoxelForge/Private/VoxelWorld.cpp`
|
||||
- `Standalone/Research/WorldAssemblerM3/Linux97/RunL97UnrealArrival.py`
|
||||
- Engine references only (not modified): `Engine/Source/Runtime/Engine/Private/LevelTick.cpp`, `Engine/Source/Runtime/Engine/Private/PhysicsEngine/PhysLevel.cpp`, `Engine/Source/Runtime/Engine/Private/TickTaskManager.cpp`.
|
||||
|
||||
## Failed attempts
|
||||
|
||||
- One early repeat requested reserve 0/helper priority off, but CVar startup readback used defaults; excluded. A `--phase diagnostic` invocation was invalid and rerun with `probe`.
|
||||
- The first fast-tier attempt used the stale default `l42` executable. Rebuilt an L97 Clang headless binary and reran successfully.
|
||||
- No L97 `.utrace` decode; Insights export had the SDL/UDEV startup failure recorded in L96. No installs, commits, pushes, or stashes.
|
||||
Reference in new issue
Block a user