Opt-in --instrument-tile-drain records per-tile queue/dispatch/finish timelines, stage spans and counters (proof skips, X8 lanes, GradAt/midpoint memo, skirts, FI cache stats); <2% when off. Measured: SW 13.3 and FI 50.2 worker-s across LOD0-8, tails are work-saturated. FI sign-edge repair now computes in parallel and publishes in sorted serial order (exact output): sign-edge 535 -> 47 ms, FI first tile 1.28 -> 0.85 s, near ring 1.46 -> 1.04 s, whole view 6.09 -> 5.65 s. Proof block size, lane batching, SW midpoint memo and helper cap 12 measured and left off. fast/medium/full PASS, Clang and GCC. Research R24: slab + motif generator. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
102 lines
9.2 KiB
Markdown
102 lines
9.2 KiB
Markdown
# L55 Linux report
|
||
|
||
## Result
|
||
|
||
Added opt-in headless tile-drain instrumentation and measured the requested kernel A/Bs. The only enabled speed cut is deterministic parallel FI sign-edge repair. It preserves the serial output hashes. Helper cap remains 8; proof size, active-lane batching, and SW midpoint memo remain opt-in/off.
|
||
|
||
## Instrumentation
|
||
|
||
`--instrument-tile-drain` emits clearly labelled `[CpuTileInstrumentation]`, `[CpuTileTimeline]`, and `[CpuTileStages]` records. Timeline events include queued, dispatch, and finish timestamps per tile, tile/LOD key, worker, queue depth, active workers, rank, and service/wait time. Buffered events are dumped after the run. Stage records cover classification and field sampling, MC grid/cell/gradient/interpolation/dedup, connector and ground/cap work, skirts, and assembly.
|
||
|
||
Counters include proof-skipped air/solid cells and avoided samples, separate Z-band rejects, X8 calls/active lanes, `GradAt` calls/memo hits, midpoint attempts/hits, skirt edge candidates/boundary edges/probes/triangles, and FI local/shared cache hits, misses, computes, conflicts, and lock wait. With instrumentation off, paired source-vs-HEAD medians stayed within 2%; the largest observed difference was +1.98% (caves, within run noise).
|
||
|
||
## Static all-LOD drain
|
||
|
||
Clean static traces are 2,370 tiles per recipe, with no hash or camera-movement work. Worker seconds are summed across workers, not wall time.
|
||
|
||
| LOD | SW worker-s | FI worker-s |
|
||
|---:|---:|---:|
|
||
| 0 | 2.238 | 29.710 |
|
||
| 1 | 1.234 | 2.825 |
|
||
| 2 | 1.147 | 2.159 |
|
||
| 3 | 0.818 | 1.830 |
|
||
| 4 | 1.426 | 2.115 |
|
||
| 5 | 0.553 | 0.852 |
|
||
| 6 | 1.940 | 2.779 |
|
||
| 7 | 1.103 | 2.057 |
|
||
| 8 | 2.857 | 5.850 |
|
||
| **Total** | **13.316** | **50.178** |
|
||
|
||
SW’s LOD1–8 work is 11.078 worker-s, led by LOD8 (2.857), LOD6 (1.940), and LOD4 (1.426). This is why an LOD0-only cut cannot get SW to 1 s. Across all LODs, grid work is 5.503 worker-s for SW and 36.414 for FI; skirts are 1.810 and 2.787 worker-s. FI LOD0 alone is 27.610 s grid plus 1.163 s skirts.
|
||
|
||
Queue p95 wait/service by priority tier (ms):
|
||
|
||
| Recipe | Near 27 | Coarse LOD2+ | Distant LOD0/1 detail |
|
||
|---|---:|---:|---:|
|
||
| SW | 11.377 / 9.283 | 806.408 / 21.861 | 1101.381 / 8.270 |
|
||
| FI | 129.055 / 76.012 | 1576.290 / 26.440 | 4143.439 / 98.045 |
|
||
|
||
The last 20 completions are LOD1 for both; the detailed tile keys and worker IDs are in `Saved/Linux/l55/timeline-static/queue-summaries.txt`. Workers were idle while work remained queued for 9.957 ms total in SW and 45.993 ms in FI (maximum observed intervals 0.930 and 13.613 ms). The long tails are work, not a large scheduler-idle gap.
|
||
|
||
Representative LOD0 counters:
|
||
|
||
| Counter | SW | FI |
|
||
|---|---:|---:|
|
||
| Candidate / classified cells | 16,777,216 / 16,777,216 | 14,483,456 / 13,591,040 |
|
||
| Proof skips (air / solid) | 0 / 0 | 892,416 / 0 |
|
||
| X8 calls / active lanes | 3,449,600 / 21,952,000 | 862,400 / 5,488,000 |
|
||
| `GradAt` calls / memo hits | 2,061,424 / 1,502,790 | 1,128,688 / 816,926 |
|
||
| Midpoint attempts / memo hits | 244,777 / 0 | 39,108 / 0 |
|
||
| Skirt edges / boundary / probes / triangles | 1,546,335 / 44,429 / 492,056 / 179,600 | 846,714 / 30,492 / 480,053 / 198,464 |
|
||
|
||
Z-band rejects are separate from proof skips: 368,896 cells across LOD3–5 for each recipe. FI LOD0 cache counts: local 34.576M hits, 27.683M misses, 27.597M conflicts; shared 23.951M hits, 3.767M misses, 3.733M computes, 3.696M conflicts, and 150.689 ms lock wait. All-LOD per-tile spans/counters are in `Saved/Linux/l55/timeline-static/sw.log` and `fi.log`.
|
||
|
||
## Measured cuts and A/Bs
|
||
|
||
- **FI sign-edge repair:** parallel compute plus sorted serial publication reduced the five-pair median sign-edge substage from 535 ms to 47 ms (−487 ms). In the isolated A/B, shape was 0.979→0.481 s, first tile 1.336→0.815 s, near ring 1.496→0.998 s, whole view 5.898→5.462 s (−7.39%).
|
||
- **Proof block size:** FI block4 vs block8 changed whole view 6.140→6.380 s (+3.91%); block16 vs block8 was 6.166→6.322 s (+2.53%). Reject both as defaults. Their mesh/payload/topology hashes matched, but density hashes changed, so they remain experimental.
|
||
- **Active-lane batching:** FI whole view 6.206→6.173 s (−0.53%, within noise); exact hashes, no default.
|
||
- **Exact midpoint memo:** SW LOD0 memo hit 178,257 of 244,777 attempts and reduced interpolation worker time 381→156 ms, but whole view only 1.878→1.870 s (−8 ms, −0.43%); shape/first/near each regressed slightly. No default.
|
||
- **Shape helper cap 8→12:** regressed FI whole view 5.732→5.989 s (+4.48%) and SW 1.833→1.839 s (+0.33%). Restored cap 8.
|
||
|
||
## Five interleaved before/after pairs
|
||
|
||
Five pairs per recipe, baseline HEAD vs final source; table values are medians at 24 m camera steps, in seconds. Movement p50/p95 are milliseconds and are shown at both 8 m and 24 m steps.
|
||
|
||
| Recipe | Shape | First tile | Near ring | Whole view |
|
||
|---|---:|---:|---:|---:|
|
||
| SW | .459→.458 | .538→.533 | .558→.556 | 1.783→1.783 |
|
||
| FI | .951→.498 | 1.284→.854 | 1.458→1.039 | 6.090→5.653 |
|
||
| Caves | .064→.065 | .139→.134 | .204→.199 | .817→.817 |
|
||
| Periodic Hills profile | .471→.462 | .508→.501 | .532→.518 | 1.418→1.420 |
|
||
|
||
| Recipe | 8 m moving p50/p95 | 24 m moving p50/p95 |
|
||
|---|---:|---:|
|
||
| SW | 24.402/47.833→25.125/49.942 | 63.315/114.997→63.278/114.984 |
|
||
| FI | 319.059/501.971→316.029/500.346 | 589.648/977.264→594.046/984.720 |
|
||
| Caves | 1.314/1.315→1.351/1.352 | 1.382/1.386→1.399/1.401 |
|
||
| Periodic Hills profile | 25.766/51.661→26.506/51.856 | 56.703/109.455→57.792/110.586 |
|
||
|
||
## Budget to target
|
||
|
||
The clean instrumented runs measured SW at 0.404 s shape + 1.186 s tile drain (1.590 s total), and FI after sign-edge repair at 0.445 s shape + 4.454 s tile drain (4.899 s total). These are diagnostic runs; the uninstrumented paired medians above are the score.
|
||
|
||
- **SW to 1 s:** tile drain must fall to about 0.596 s. With ideal W12 balance, that permits at most 7.152 worker-s versus 13.316 measured, a cut of 6.164 worker-s (46%). Removing all LOD0 work saves at most 0.186 s of ideal drain. Removing all LOD6–8 work saves at most 0.492 s; both are ceilings and would violate the quality bar if done indiscriminately. Exact cuts must span LOD0 and the far/mid LOD kernels.
|
||
- **FI to 2 s:** tile drain must fall to about 1.555 s, or at most 18.660 worker-s at ideal W12 balance versus 50.178 measured (31.518 worker-s, 63%). LOD0 alone costs 2.476 ideal drain seconds; even deleting all LOD1–8 work would leave about 2.921 s including shape. LOD0 must also lose at least 11.05 worker-s (37%) in that impossible best case, so the practical plan needs large LOD0 grid savings plus reductions across other LODs.
|
||
|
||
## Proofs, tiers, hashes, and run accounting
|
||
|
||
- Fast, medium, and full `verify.py` tiers passed in 153.3 s, 902.8 s, and 1091.2 s. Medium covered LOD0–8, seeded SW/FI/profile at W1/W8/W12, four cave cameras at W1/W8/W12, and captures. Full passed GCC parity, random camera sweep, 30 determinism cells, and five cost pairs each for SW/FI. No visible regression was reported by capture checks.
|
||
- FI proof audit: block4 checked 225,438 blocks / 77,325,234 samples; block16 checked 3,324 / 22,799,316; zero violations. Default block8 and brute-force interval checks also passed. The parallel repair hash matrix had 9/9 Clang/GCC W1/W8/W12 comparisons exact, zero differing tiles (2,370 per run).
|
||
- No selected output change, so no recipe version bump. FI Clang/W12 parallel whole-view hashes: density `0x55f117f15cd44103`, mesh `0xd987bfc3a5888d04`, payload `0xf04ce3c0b238a8c4`, topology `0xa4601550e27a18a4`.
|
||
- Source stamp: `8ee96d6cd3fbb1cd9c3f84d52698f19671c53326b5f87172f8a34c56b5a1a5e9`. Binary SHA256: Clang headless `7bd64ef2930f69079cd8b2f2f3c5d8c21e1cb6e4f81e5b0a3071abf1aff85d11`; GCC headless `1a3326224d6dab92e7e3260a8270d9f6668365a5156b96eae7d7cc40e38b3ba0`; Clang capture `5c51ea92321280ee35ba689d486747c530c28cc20955d4b5ffc4ce5980cf7229`.
|
||
- Trial builds: **7/15**. Failed/non-result attempts: initial fast preflight stopped before build because the candidate/TMPDIR was absent; first cave timeline fixture/layout was invalid and was rerun with the canonical caves fixture; first FI block4 invocation failed before the binary started because its output directory was absent. One Clang build succeeded with the generic artifact name and was superseded by the correctly named Clang build. A final summary inspection tried `jq`, which is unavailable; the summaries were read with wrapped Python instead. One earlier read-only JSON inspection used bare `python3` outside the required wrapper; it did no build or benchmark and is recorded as a limit exception. All benchmark/build/verification processes otherwise used the required CPU, address-space, job, time, and TMPDIR limits. No installs, commit, push, or stash.
|
||
|
||
## Orchestrator review (Claude)
|
||
|
||
Accepted. The stamp matches the final Clang and GCC builds (`8ee96d6c…`); trial count 7 of 15. The instrumentation
|
||
is the lasting value: SW is 13.3 worker-s and FI 50.2 worker-s, and their long tails are work, not scheduler idle.
|
||
The parallel FI sign-edge repair is exact and moves FI's first tile from 1.28 to 0.85 s. **Lead for next:** the FI
|
||
LOD0 column cache shows 27.6 M local conflicts against 34.6 M hits, plus 3.7 M shared conflicts. That's heavy
|
||
thrashing on the 27.6 worker-s LOD0 grid path.
|