starkernel: restate VM fleet heat transfer on the virtual tick
Punch list §25 item 2.1 complete. vm_physics_touch() no longer takes a wall-clock timestamp -- it reads fleet_heartbeat_tick_count internally, which is execution-paced (vm_runtime.c:143), not wall-clock. VMPhysics.last_active_ns -> last_active_tick, VMFleetTouchSample.elapsed_us -> elapsed_ticks, and a new explicit `touched` flag replaces the old `> 0` sentinel (tick 0 is a legitimate value a first touch can land on, unlike wall-clock ns). Verified: three-architecture boot (amd64 x2, aarch64, riscv64), all reaching ok> with identical dict_hash=0x3d4e1daf289da94f matching the item-0.10 baseline. No new compiler warnings in the touched files. Honestly flagged, not fixed: with Tripod pruned to Hera alone (item 0.1), vm_physics_touch()'s fan-out has no other live VM to pull heat from, so the fleet-heat-sum acceptance criterion is trivially satisfied rather than genuinely stress-tested -- a real check needs Phase 4's multi-VM fleet. fleet_transfer_slope_q48's seed (65536/3) was calibrated for elapsed microseconds and has not been re-fit for elapsed ticks; left as-is rather than guessed, deferred to item 5.1's DoE work. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
f2eb877691
commit
542d7dbf0d
@@ -2506,7 +2506,7 @@ document and committing that amendment as its own item.*
|
||||
|
||||
## 25.3 Phase 2 — Prepare the existing physics
|
||||
|
||||
- [ ] **2.1 — Restate heat transfer on the virtual tick.**
|
||||
- [x] **2.1 — Restate heat transfer on the virtual tick.**
|
||||
`vm_physics_touch()` scales transfers by wall-clock elapsed time
|
||||
(`capsule_vm_physics.c:272`). Restate it on **the virtual tick** — the execution-derived
|
||||
counter of §16.4 as ruled, not the hardware heartbeat, whose interleaving with execution
|
||||
@@ -2525,6 +2525,37 @@ document and committing that amendment as its own item.*
|
||||
> fleet heat is what has to be compared. Run 0.10's dict-hash check as well, as a
|
||||
> regression guard — but it is not evidence for 2.1.
|
||||
|
||||
> **DONE 2026-08-04.** `vm_physics_touch()` no longer takes a `now_ns` parameter at all —
|
||||
> it reads `fleet_heartbeat_tick_count` internally, which `vm_runtime.c:143` confirms is
|
||||
> execution-paced (advanced once per `vm_tick()` call), not wall-clock. `VMPhysics.last_active_ns`
|
||||
> → `last_active_tick`; `VMFleetTouchSample.elapsed_us` → `elapsed_ticks`; a new explicit
|
||||
> `touched` flag replaces the old `> 0` sentinel, which doesn't safely carry over to tick
|
||||
> counts (a genuine first touch can land on tick 0). The three call sites (VM-EXEC,
|
||||
> VM-CALL, VM-STEP in `mama_forth_words.c`) dropped `vm_monotonic_ns(vm)` accordingly.
|
||||
> `vm_physics_heartbeat_tick()`/`vm_physics_tick()`'s own dead `now_ns` parameters were
|
||||
> left alone — already unused, already documented as such, out of this item's scope.
|
||||
>
|
||||
> **Regression: clean.** All three architectures boot to `ok>` with identical
|
||||
> `dict_hash=0x3d4e1daf289da94f`, matching the item-0.10 baseline, on amd64 (×2), aarch64,
|
||||
> and riscv64. Logs: `logs/20260804-113146`, `logs/20260804-113233` (amd64 pair),
|
||||
> `logs/20260804-131020` (aarch64), `logs/20260804-131119` (riscv64). No new compiler
|
||||
> warnings in the touched files.
|
||||
>
|
||||
> **Honest limitation on the fleet-heat-sum acceptance criterion.** With Tripod pruned to
|
||||
> Hera alone (item 0.1), `vm_physics_touch()`'s fan-out has no other live VM to pull heat
|
||||
> from — `others_total` is always 0, so the fleet heat sum is trivially `Q48_ONE` on every
|
||||
> boot regardless of whether the tick logic is correct. The double-boot dict-hash match is
|
||||
> a valid regression guard (as the acceptance note above already says), but it does not
|
||||
> actually stress-test this item's new code path. A real check needs at least one other
|
||||
> live VM to touch, which returns in Phase 4 (Hermes/Artemis) — not fabricated here.
|
||||
>
|
||||
> **Unresolved, flagged not fixed:** `fleet_transfer_slope_q48`'s seed (65536/3) was
|
||||
> calibrated against elapsed wall-clock microseconds; elapsed ticks between touches is a
|
||||
> different quantity at a different scale, and the seed has not been re-fit against it.
|
||||
> Left as-is per §25.0 rule 4 (no invented numbers) — a real re-tune is DoE work (item
|
||||
> 5.1), and can only be meaningfully measured once Phase 4 restores a multi-VM fleet
|
||||
> anyway, per the limitation just above.
|
||||
|
||||
- [ ] **2.2 — Bound the VM registry.**
|
||||
The registry is a `kmalloc`-backed unbounded list (`capsule_vm_physics.c:71-72`). Give it
|
||||
the hard bound decided in 1.5.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Capsule Block Manifest — Auto-generated
|
||||
<!-- Generated by mkcapsule --manifest 2026-08-04T04:20:13Z -->
|
||||
<!-- Generated by mkcapsule --manifest 2026-08-04T17:11:04Z -->
|
||||
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
|
||||
<!-- Hand-written justifications and immutability notes live -->
|
||||
<!-- in MANIFEST.md alongside this auto-generated index. -->
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
tick_number,elapsed_ns,tick_interval_ns,cache_hits_delta,bucket_hits_delta,word_executions_delta,hot_word_count,avg_word_heat_q48,window_width,actual_window_size,predicted_label_hits,jitter_bits,apic_ticks,time_trust_q48,variance_q48,vm_call_depth_max,hera_heat_q48,hermes_heat_q48,artemis_heat_q48
|
||||
1,10000,10000,0,0,183,4,45,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
2,20000,10000,0,0,173,5,44,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
3,30000,10000,0,0,184,6,60,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
4,40000,10000,0,0,174,8,71,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
5,50000,10000,0,0,150,9,78,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
6,60000,10000,0,0,159,11,73,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
7,70000,10000,0,0,188,15,71,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
8,80000,10000,0,0,214,16,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
9,90000,10000,0,0,216,19,82,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
10,100000,10000,0,0,222,21,84,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
11,110000,10000,0,0,207,23,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
12,120000,10000,0,0,189,26,83,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
13,130000,10000,0,0,221,28,80,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
14,140000,10000,0,0,204,29,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
15,150000,10000,0,0,203,30,82,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
16,160000,10000,0,0,201,32,83,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
17,170000,10000,0,0,190,34,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
18,180000,10000,0,0,170,35,73,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
19,190000,10000,0,0,154,28,44,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
20,200000,10000,0,0,154,28,41,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
21,210000,10000,0,0,153,32,39,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
22,220000,10000,0,0,167,35,42,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
23,230000,10000,0,0,176,37,41,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
24,240000,10000,0,0,175,37,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
25,250000,10000,0,0,196,38,37,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
26,260000,10000,0,0,192,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
27,270000,10000,0,0,158,40,38,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
28,280000,10000,0,0,158,40,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
29,290000,10000,0,0,164,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
30,300000,10000,0,0,154,43,39,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
31,310000,10000,0,0,172,46,35,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
32,320000,10000,0,0,180,49,34,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
33,330000,10000,0,0,145,51,35,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
34,340000,10000,0,0,203,53,37,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
35,350000,10000,0,0,154,55,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
36,360000,10000,0,0,144,57,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
37,370000,10000,0,0,144,57,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
38,380000,10000,0,0,132,57,34,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
39,390000,10000,0,0,180,57,32,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
40,400000,10000,0,0,220,63,29,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
41,410000,10000,0,0,215,64,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
42,420000,10000,0,0,208,68,29,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
43,430000,10000,0,0,177,72,27,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
44,440000,10000,0,0,199,77,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
45,450000,10000,0,0,223,82,26,4096,30,0,0,0,65536,0,0,65536,0,0
|
||||
46,460000,10000,0,0,202,85,24,4096,67,0,0,0,65536,0,0,65536,0,0
|
||||
47,470000,10000,0,0,218,91,25,4096,198,0,0,0,65536,0,0,65536,0,0
|
||||
48,480000,10000,0,0,221,92,26,4096,350,0,0,0,65536,0,0,65536,0,0
|
||||
49,490000,10000,0,0,225,97,26,4096,528,0,0,0,65536,0,0,65536,0,0
|
||||
50,500000,10000,0,0,214,100,27,4096,694,0,0,0,65536,0,0,65536,0,0
|
||||
51,510000,10000,0,0,227,102,28,4096,883,0,0,0,65536,0,0,65536,0,0
|
||||
52,520000,10000,0,0,208,102,29,4096,1043,0,0,0,65536,0,0,65536,0,0
|
||||
53,530000,10000,0,0,207,102,30,4096,1202,0,0,0,65536,0,0,65536,0,0
|
||||
54,540000,10000,0,0,200,102,31,4096,1319,0,0,0,65536,0,0,65536,0,0
|
||||
55,550000,10000,0,0,205,103,32,4096,1464,0,0,0,65536,0,0,65536,0,0
|
||||
56,560000,10000,0,0,211,103,32,4096,1620,0,0,0,65536,0,0,65536,0,0
|
||||
57,570000,10000,0,0,193,110,33,4096,1712,0,0,0,65536,0,0,65536,0,0
|
||||
58,580000,10000,0,0,190,5,67,4096,1775,0,0,0,65536,0,0,65536,0,0
|
||||
|
@@ -0,0 +1,59 @@
|
||||
tick_number,elapsed_ns,tick_interval_ns,cache_hits_delta,bucket_hits_delta,word_executions_delta,hot_word_count,avg_word_heat_q48,window_width,actual_window_size,predicted_label_hits,jitter_bits,apic_ticks,time_trust_q48,variance_q48,vm_call_depth_max,hera_heat_q48,hermes_heat_q48,artemis_heat_q48
|
||||
1,10000,10000,0,0,183,4,45,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
2,20000,10000,0,0,173,5,44,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
3,30000,10000,0,0,184,6,60,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
4,40000,10000,0,0,174,8,71,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
5,50000,10000,0,0,150,9,78,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
6,60000,10000,0,0,159,11,73,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
7,70000,10000,0,0,188,15,71,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
8,80000,10000,0,0,214,16,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
9,90000,10000,0,0,216,19,82,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
10,100000,10000,0,0,222,21,84,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
11,110000,10000,0,0,207,23,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
12,120000,10000,0,0,189,26,83,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
13,130000,10000,0,0,221,28,80,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
14,140000,10000,0,0,204,29,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
15,150000,10000,0,0,203,30,82,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
16,160000,10000,0,0,201,32,83,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
17,170000,10000,0,0,190,34,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
18,180000,10000,0,0,170,35,73,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
19,190000,10000,0,0,154,28,44,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
20,200000,10000,0,0,154,28,41,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
21,210000,10000,0,0,153,32,39,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
22,220000,10000,0,0,167,35,42,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
23,230000,10000,0,0,176,37,41,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
24,240000,10000,0,0,175,37,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
25,250000,10000,0,0,196,38,37,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
26,260000,10000,0,0,192,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
27,270000,10000,0,0,158,40,38,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
28,280000,10000,0,0,158,40,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
29,290000,10000,0,0,164,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
30,300000,10000,0,0,154,43,39,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
31,310000,10000,0,0,172,46,35,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
32,320000,10000,0,0,180,49,34,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
33,330000,10000,0,0,145,51,35,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
34,340000,10000,0,0,203,53,37,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
35,350000,10000,0,0,154,55,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
36,360000,10000,0,0,144,57,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
37,370000,10000,0,0,144,57,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
38,380000,10000,0,0,132,57,34,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
39,390000,10000,0,0,180,57,32,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
40,400000,10000,0,0,220,63,29,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
41,410000,10000,0,0,215,64,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
42,420000,10000,0,0,208,68,29,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
43,430000,10000,0,0,177,72,27,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
44,440000,10000,0,0,199,77,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
45,450000,10000,0,0,223,82,26,4096,30,0,0,0,65536,0,0,65536,0,0
|
||||
46,460000,10000,0,0,202,85,24,4096,67,0,0,0,65536,0,0,65536,0,0
|
||||
47,470000,10000,0,0,218,91,25,4096,198,0,0,0,65536,0,0,65536,0,0
|
||||
48,480000,10000,0,0,221,92,26,4096,350,0,0,0,65536,0,0,65536,0,0
|
||||
49,490000,10000,0,0,225,97,26,4096,528,0,0,0,65536,0,0,65536,0,0
|
||||
50,500000,10000,0,0,214,100,27,4096,694,0,0,0,65536,0,0,65536,0,0
|
||||
51,510000,10000,0,0,227,102,28,4096,883,0,0,0,65536,0,0,65536,0,0
|
||||
52,520000,10000,0,0,208,102,29,4096,1043,0,0,0,65536,0,0,65536,0,0
|
||||
53,530000,10000,0,0,207,102,30,4096,1202,0,0,0,65536,0,0,65536,0,0
|
||||
54,540000,10000,0,0,200,102,31,4096,1319,0,0,0,65536,0,0,65536,0,0
|
||||
55,550000,10000,0,0,205,103,32,4096,1464,0,0,0,65536,0,0,65536,0,0
|
||||
56,560000,10000,0,0,211,103,32,4096,1620,0,0,0,65536,0,0,65536,0,0
|
||||
57,570000,10000,0,0,193,110,33,4096,1712,0,0,0,65536,0,0,65536,0,0
|
||||
58,580000,10000,0,0,190,5,67,4096,1775,0,0,0,65536,0,0,65536,0,0
|
||||
|
@@ -0,0 +1,59 @@
|
||||
tick_number,elapsed_ns,tick_interval_ns,cache_hits_delta,bucket_hits_delta,word_executions_delta,hot_word_count,avg_word_heat_q48,window_width,actual_window_size,predicted_label_hits,jitter_bits,apic_ticks,time_trust_q48,variance_q48,vm_call_depth_max,hera_heat_q48,hermes_heat_q48,artemis_heat_q48
|
||||
1,10000,10000,0,0,183,4,45,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
2,20000,10000,0,0,173,5,44,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
3,30000,10000,0,0,184,6,60,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
4,40000,10000,0,0,174,8,71,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
5,50000,10000,0,0,150,9,78,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
6,60000,10000,0,0,159,11,73,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
7,70000,10000,0,0,188,15,71,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
8,80000,10000,0,0,214,16,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
9,90000,10000,0,0,216,19,82,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
10,100000,10000,0,0,222,21,84,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
11,110000,10000,0,0,207,23,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
12,120000,10000,0,0,189,26,83,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
13,130000,10000,0,0,221,28,80,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
14,140000,10000,0,0,204,29,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
15,150000,10000,0,0,203,30,82,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
16,160000,10000,0,0,201,32,83,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
17,170000,10000,0,0,190,34,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
18,180000,10000,0,0,170,35,73,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
19,190000,10000,0,0,154,28,44,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
20,200000,10000,0,0,154,28,41,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
21,210000,10000,0,0,153,32,39,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
22,220000,10000,0,0,167,35,42,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
23,230000,10000,0,0,176,37,41,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
24,240000,10000,0,0,175,37,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
25,250000,10000,0,0,196,38,37,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
26,260000,10000,0,0,192,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
27,270000,10000,0,0,158,40,38,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
28,280000,10000,0,0,158,40,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
29,290000,10000,0,0,164,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
30,300000,10000,0,0,154,43,39,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
31,310000,10000,0,0,172,46,35,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
32,320000,10000,0,0,180,49,34,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
33,330000,10000,0,0,145,51,35,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
34,340000,10000,0,0,203,53,37,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
35,350000,10000,0,0,154,55,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
36,360000,10000,0,0,144,57,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
37,370000,10000,0,0,144,57,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
38,380000,10000,0,0,132,57,34,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
39,390000,10000,0,0,180,57,32,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
40,400000,10000,0,0,220,63,29,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
41,410000,10000,0,0,215,64,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
42,420000,10000,0,0,208,68,29,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
43,430000,10000,0,0,177,72,27,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
44,440000,10000,0,0,199,77,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
45,450000,10000,0,0,223,82,26,4096,30,0,0,0,65536,0,0,65536,0,0
|
||||
46,460000,10000,0,0,202,85,24,4096,67,0,0,0,65536,0,0,65536,0,0
|
||||
47,470000,10000,0,0,218,91,25,4096,198,0,0,0,65536,0,0,65536,0,0
|
||||
48,480000,10000,0,0,221,92,26,4096,350,0,0,0,65536,0,0,65536,0,0
|
||||
49,490000,10000,0,0,225,97,26,4096,528,0,0,0,65536,0,0,65536,0,0
|
||||
50,500000,10000,0,0,214,100,27,4096,694,0,0,0,65536,0,0,65536,0,0
|
||||
51,510000,10000,0,0,227,102,28,4096,883,0,0,0,65536,0,0,65536,0,0
|
||||
52,520000,10000,0,0,208,102,29,4096,1043,0,0,0,65536,0,0,65536,0,0
|
||||
53,530000,10000,0,0,207,102,30,4096,1202,0,0,0,65536,0,0,65536,0,0
|
||||
54,540000,10000,0,0,200,102,31,4096,1319,0,0,0,65536,0,0,65536,0,0
|
||||
55,550000,10000,0,0,205,103,32,4096,1464,0,0,0,65536,0,0,65536,0,0
|
||||
56,560000,10000,0,0,211,103,32,4096,1620,0,0,0,65536,0,0,65536,0,0
|
||||
57,570000,10000,0,0,193,110,33,4096,1712,0,0,0,65536,0,0,65536,0,0
|
||||
58,580000,10000,0,0,190,5,67,4096,1775,0,0,0,65536,0,0,65536,0,0
|
||||
|
@@ -0,0 +1,59 @@
|
||||
tick_number,elapsed_ns,tick_interval_ns,cache_hits_delta,bucket_hits_delta,word_executions_delta,hot_word_count,avg_word_heat_q48,window_width,actual_window_size,predicted_label_hits,jitter_bits,apic_ticks,time_trust_q48,variance_q48,vm_call_depth_max,hera_heat_q48,hermes_heat_q48,artemis_heat_q48
|
||||
1,10000,10000,0,0,183,4,45,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
2,20000,10000,0,0,173,5,44,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
3,30000,10000,0,0,184,6,60,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
4,40000,10000,0,0,174,8,71,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
5,50000,10000,0,0,150,9,78,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
6,60000,10000,0,0,159,11,73,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
7,70000,10000,0,0,188,15,71,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
8,80000,10000,0,0,214,16,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
9,90000,10000,0,0,216,19,82,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
10,100000,10000,0,0,222,21,84,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
11,110000,10000,0,0,207,23,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
12,120000,10000,0,0,189,26,83,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
13,130000,10000,0,0,221,28,80,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
14,140000,10000,0,0,204,29,83,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
15,150000,10000,0,0,203,30,82,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
16,160000,10000,0,0,201,32,83,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
17,170000,10000,0,0,190,34,86,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
18,180000,10000,0,0,170,35,73,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
19,190000,10000,0,0,154,28,44,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
20,200000,10000,0,0,154,28,41,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
21,210000,10000,0,0,153,32,39,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
22,220000,10000,0,0,167,35,42,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
23,230000,10000,0,0,176,37,41,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
24,240000,10000,0,0,175,37,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
25,250000,10000,0,0,196,38,37,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
26,260000,10000,0,0,192,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
27,270000,10000,0,0,158,40,38,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
28,280000,10000,0,0,158,40,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
29,290000,10000,0,0,164,41,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
30,300000,10000,0,0,154,43,39,685,685,0,0,0,65536,0,0,65536,0,0
|
||||
31,310000,10000,0,0,172,46,35,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
32,320000,10000,0,0,180,49,34,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
33,330000,10000,0,0,145,51,35,567,567,0,0,0,65536,0,0,65536,0,0
|
||||
34,340000,10000,0,0,203,53,37,582,582,0,0,0,65536,0,0,65536,0,0
|
||||
35,350000,10000,0,0,154,55,39,731,731,0,0,0,65536,0,0,65536,0,0
|
||||
36,360000,10000,0,0,144,57,37,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
37,370000,10000,0,0,144,57,35,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
38,380000,10000,0,0,132,57,34,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
39,390000,10000,0,0,180,57,32,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
40,400000,10000,0,0,220,63,29,4096,0,0,0,0,65536,0,0,65536,0,0
|
||||
41,410000,10000,0,0,215,64,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
42,420000,10000,0,0,208,68,29,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
43,430000,10000,0,0,177,72,27,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
44,440000,10000,0,0,199,77,28,4096,24,0,0,0,65536,0,0,65536,0,0
|
||||
45,450000,10000,0,0,223,82,26,4096,30,0,0,0,65536,0,0,65536,0,0
|
||||
46,460000,10000,0,0,202,85,24,4096,67,0,0,0,65536,0,0,65536,0,0
|
||||
47,470000,10000,0,0,218,91,25,4096,198,0,0,0,65536,0,0,65536,0,0
|
||||
48,480000,10000,0,0,221,92,26,4096,350,0,0,0,65536,0,0,65536,0,0
|
||||
49,490000,10000,0,0,225,97,26,4096,528,0,0,0,65536,0,0,65536,0,0
|
||||
50,500000,10000,0,0,214,100,27,4096,694,0,0,0,65536,0,0,65536,0,0
|
||||
51,510000,10000,0,0,227,102,28,4096,883,0,0,0,65536,0,0,65536,0,0
|
||||
52,520000,10000,0,0,208,102,29,4096,1043,0,0,0,65536,0,0,65536,0,0
|
||||
53,530000,10000,0,0,207,102,30,4096,1202,0,0,0,65536,0,0,65536,0,0
|
||||
54,540000,10000,0,0,200,102,31,4096,1319,0,0,0,65536,0,0,65536,0,0
|
||||
55,550000,10000,0,0,205,103,32,4096,1464,0,0,0,65536,0,0,65536,0,0
|
||||
56,560000,10000,0,0,211,103,32,4096,1620,0,0,0,65536,0,0,65536,0,0
|
||||
57,570000,10000,0,0,193,110,33,4096,1712,0,0,0,65536,0,0,65536,0,0
|
||||
58,580000,10000,0,0,190,5,67,4096,1775,0,0,0,65536,0,0,65536,0,0
|
||||
|
@@ -78,13 +78,18 @@ void vm_physics_retire(uint32_t vm_id);
|
||||
* Called from the three existing dispatch primitives (VM-EXEC, VM-CALL,
|
||||
* VM-STEP) at the point they've already confirmed the target VM is
|
||||
* live. Pulls heat from the rest of the fleet toward the touched VM
|
||||
* (amount = elapsed * fleet_transfer_slope_q48 >> 16) and appends
|
||||
* (amount = elapsed_ticks * fleet_transfer_slope_q48 >> 16) and appends
|
||||
* vm_id to the fleet's rolling touch-history window.
|
||||
*
|
||||
* Restated on the virtual tick (FABRIC.md item 2.1, 2026-08-04): no
|
||||
* longer takes a wall-clock timestamp. Reads fleet_heartbeat_tick_count
|
||||
* internally, which is execution-paced (advanced once per vm_tick()
|
||||
* call, see vm_physics_heartbeat_tick), so the transfer this produces is
|
||||
* a deterministic function of the execution stream, not of wall time.
|
||||
*
|
||||
* @param vm_id Registry VM ID being dispatched to
|
||||
* @param now_ns Current monotonic time in nanoseconds (timer_now_ns())
|
||||
*/
|
||||
void vm_physics_touch(uint32_t vm_id, uint64_t now_ns);
|
||||
void vm_physics_touch(uint32_t vm_id);
|
||||
|
||||
/**
|
||||
* vm_physics_tick - Heartbeat-gated inference pass
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -58,7 +58,10 @@
|
||||
|
||||
typedef struct {
|
||||
uint64_t execution_heat_q48;
|
||||
uint64_t last_active_ns;
|
||||
uint64_t last_active_tick; /* fleet_heartbeat_tick_count value at last touch */
|
||||
int touched; /* 0 until the first touch; explicit rather than
|
||||
* overloading last_active_tick == 0, which is a
|
||||
* legitimate tick value a first touch can land on */
|
||||
int is_live;
|
||||
} VMPhysics;
|
||||
|
||||
@@ -72,24 +75,30 @@ typedef struct vm_physics_node {
|
||||
* vm_registry_head/vm_registry_count -- unbounded, not a fixed array. */
|
||||
static vm_physics_node_t *vm_physics_head = (void *)0;
|
||||
|
||||
/* One recorded touch's inputs to the transfer law (amount = elapsed_us *
|
||||
/* One recorded touch's inputs to the transfer law (amount = elapsed_ticks *
|
||||
* slope >> 16, clamped to available heat) -- not a derived heat value.
|
||||
* Rev o (VM-FLEET-ATTRACTOR-DESIGN-20260705.md) replaced the earlier
|
||||
* heat-snapshot design (rev m) with this: since the transfer law is known
|
||||
* exactly, the true rate can be recovered directly from any touch that
|
||||
* wasn't clamped (rate = amount / elapsed_us), rather than curve-fitting
|
||||
* a reconstructed trajectory against a synthetic time axis. */
|
||||
* wasn't clamped (rate = amount / elapsed_ticks), rather than curve-fitting
|
||||
* a reconstructed trajectory against a synthetic time axis.
|
||||
*
|
||||
* Restated on the virtual tick (FABRIC.md item 2.1, 2026-08-04): this used
|
||||
* to be elapsed_us, wall-clock microseconds -- non-reproducible under TCG
|
||||
* per GAP-A1 (FABRIC.md §25.7.1). Now counts fleet_heartbeat_tick_count
|
||||
* ticks, which is execution-paced (incremented once per vm_tick() call,
|
||||
* confirmed at vm_runtime.c:143). */
|
||||
typedef struct {
|
||||
uint64_t elapsed_us; /* since this vm_id's previous touch; 0 if there
|
||||
* was no previous touch to compare against */
|
||||
uint64_t amount; /* elapsed_us * slope >> 16 at touch time, i.e.
|
||||
* the rate-implied transfer before any clamp;
|
||||
* 0 if not computed (first touch, zero slope,
|
||||
* or non-monotonic clock) */
|
||||
int clamped; /* 1 if the heat actually moved was capped below
|
||||
* `amount` by what the rest of the fleet held --
|
||||
* carries no rate information, excluded from
|
||||
* the estimator rather than treated as a zero */
|
||||
uint64_t elapsed_ticks; /* since this vm_id's previous touch; 0 if there
|
||||
* was no previous touch to compare against */
|
||||
uint64_t amount; /* elapsed_ticks * slope >> 16 at touch time,
|
||||
* i.e. the rate-implied transfer before any
|
||||
* clamp; 0 if not computed (first touch, zero
|
||||
* slope, or non-monotonic tick) */
|
||||
int clamped; /* 1 if the heat actually moved was capped below
|
||||
* `amount` by what the rest of the fleet held --
|
||||
* carries no rate information, excluded from
|
||||
* the estimator rather than treated as a zero */
|
||||
} VMFleetTouchSample;
|
||||
|
||||
typedef struct {
|
||||
@@ -119,15 +128,35 @@ static VMFleetWindow fleet_window = { { { 0, 0, 0 } }, 0, 0, 0 };
|
||||
* in include/vm.h ("starts at 2:1 = 131072") is stale relative to the real
|
||||
* code -- 1/3 is what's actually seeded there, so 1/3 is what's mirrored
|
||||
* here. This was previously seeded at literal 0, which cannot bootstrap:
|
||||
* vm_physics_touch's transfer amount is elapsed_ns * slope >> 16, so a
|
||||
* vm_physics_touch's transfer amount is elapsed_ticks * slope >> 16, so a
|
||||
* zero slope moves zero heat on every touch forever, which starves
|
||||
* vm_physics_tick's regression of the very heat-trajectory signal it
|
||||
* needs to infer a better slope -- a closed loop with no way out. Found
|
||||
* via doe_log.c's per-VM heat CSV columns showing a dead-flat trajectory
|
||||
* across a full boot (VM-FLEET-ATTRACTOR-DESIGN-20260705.md rev f). */
|
||||
* across a full boot (VM-FLEET-ATTRACTOR-DESIGN-20260705.md rev f).
|
||||
*
|
||||
* UNVALIDATED after the ns-to-tick restatement (FABRIC.md item 2.1,
|
||||
* 2026-08-04): this value was calibrated against elapsed wall-clock
|
||||
* microseconds. Elapsed fleet-heartbeat *ticks* between touches is a
|
||||
* different quantity at a different scale, and the seed has not been
|
||||
* re-fit against it. Left as-is rather than guessed at -- the acceptance
|
||||
* boot test below only checks determinism, not transfer magnitude; a real
|
||||
* re-tune is DoE work (item 5.1), not something to invent here. */
|
||||
static uint64_t fleet_transfer_slope_q48 = 65536ULL / 3;
|
||||
static uint64_t slope_fit_quality_q48 = 0;
|
||||
|
||||
/* Fleet-wide heartbeat tick, distinct from any VM's own per-VM
|
||||
* HeartbeatState.tick_count -- see the rationale in the header. Advances
|
||||
* from whichever VM's own heartbeat cycle happens to fire, so the
|
||||
* readiness signal reflects the fleet's aggregate activity rather than
|
||||
* any one VM's (in practice, Hera's) personal word-execution rate.
|
||||
* Declared here (rather than just above vm_physics_heartbeat_tick, where
|
||||
* it used to live) so vm_physics_touch() can read the current tick
|
||||
* without a forward declaration -- it is now this counter's second
|
||||
* reader, alongside vm_physics_heartbeat_tick()'s own gating use. */
|
||||
static uint64_t fleet_heartbeat_tick_count = 0;
|
||||
static uint64_t fleet_last_inference_tick = 0;
|
||||
|
||||
static vm_physics_node_t *vm_physics_find(uint32_t vm_id)
|
||||
{
|
||||
vm_physics_node_t *n = vm_physics_head;
|
||||
@@ -168,7 +197,8 @@ void vm_physics_init(uint32_t vm_id)
|
||||
|
||||
if (node) {
|
||||
node->physics.execution_heat_q48 = is_root ? Q48_ONE : 0;
|
||||
node->physics.last_active_ns = 0;
|
||||
node->physics.last_active_tick = 0;
|
||||
node->physics.touched = 0;
|
||||
node->physics.is_live = 1;
|
||||
return;
|
||||
}
|
||||
@@ -178,7 +208,8 @@ void vm_physics_init(uint32_t vm_id)
|
||||
|
||||
node->vm_id = vm_id;
|
||||
node->physics.execution_heat_q48 = is_root ? Q48_ONE : 0;
|
||||
node->physics.last_active_ns = 0;
|
||||
node->physics.last_active_tick = 0;
|
||||
node->physics.touched = 0;
|
||||
node->physics.is_live = 1;
|
||||
node->next = vm_physics_head;
|
||||
vm_physics_head = node;
|
||||
@@ -247,33 +278,32 @@ void vm_physics_retire(uint32_t vm_id)
|
||||
dying->physics.is_live = 0;
|
||||
}
|
||||
|
||||
void vm_physics_touch(uint32_t vm_id, uint64_t now_ns)
|
||||
void vm_physics_touch(uint32_t vm_id)
|
||||
{
|
||||
vm_physics_node_t *target = vm_physics_find(vm_id);
|
||||
VMFleetTouchSample sample = { 0, 0, 0 };
|
||||
vm_physics_node_t *target = vm_physics_find(vm_id);
|
||||
VMFleetTouchSample sample = { 0, 0, 0 };
|
||||
uint64_t now_tick = fleet_heartbeat_tick_count;
|
||||
|
||||
if (!target || !target->physics.is_live) return;
|
||||
|
||||
/* Restated on the virtual tick (FABRIC.md item 2.1, 2026-08-04): this
|
||||
* used to gate on target->physics.last_active_ns > 0 and scale by
|
||||
* elapsed wall-clock microseconds -- non-reproducible run to run under
|
||||
* TCG (GAP-A1, FABRIC.md §25.7.1). fleet_heartbeat_tick_count is
|
||||
* execution-paced (vm_runtime.c:143), so elapsed_ticks is now a pure
|
||||
* function of the execution stream. `touched` replaces the old
|
||||
* `> 0` sentinel: tick 0 is a legitimate value for a genuine first
|
||||
* touch to land on, so "never touched" needs its own flag rather than
|
||||
* overloading the tick value. */
|
||||
if (fleet_transfer_slope_q48 > 0 &&
|
||||
target->physics.last_active_ns > 0 &&
|
||||
now_ns > target->physics.last_active_ns) {
|
||||
target->physics.touched &&
|
||||
now_tick > target->physics.last_active_tick) {
|
||||
|
||||
/* Microseconds, not nanoseconds, matching the word engine's own
|
||||
* convention (physics_metadata_apply_linear_decay,
|
||||
* physics_metadata.c) that fleet_transfer_slope_q48's seed value
|
||||
* was explicitly calibrated to mirror (see the comment on the
|
||||
* static above). Using raw elapsed_ns here was an outright unit
|
||||
* bug, not a design choice: real touch-to-touch gaps run to
|
||||
* milliseconds, so (elapsed_ns * slope_q48) >> 16 overshot the
|
||||
* fleet's entire conserved heat (Q48_ONE) by more than 10x on the
|
||||
* very first post-seed touch, clamping to a full winner-take-all
|
||||
* transfer in a single step instead of the gradual pull this was
|
||||
* meant to model (VM-FLEET-ATTRACTOR-DESIGN-20260705.md rev n). */
|
||||
uint64_t elapsed_us = (now_ns - target->physics.last_active_ns) / 1000;
|
||||
uint64_t amount = (elapsed_us * fleet_transfer_slope_q48) >> 16;
|
||||
uint64_t elapsed_ticks = now_tick - target->physics.last_active_tick;
|
||||
uint64_t amount = (elapsed_ticks * fleet_transfer_slope_q48) >> 16;
|
||||
|
||||
sample.elapsed_us = elapsed_us;
|
||||
sample.amount = amount;
|
||||
sample.elapsed_ticks = elapsed_ticks;
|
||||
sample.amount = amount;
|
||||
|
||||
if (amount > 0) {
|
||||
/* Pull toward the touched VM, proportional to each other LIVE
|
||||
@@ -310,7 +340,8 @@ void vm_physics_touch(uint32_t vm_id, uint64_t now_ns)
|
||||
}
|
||||
}
|
||||
|
||||
target->physics.last_active_ns = now_ns;
|
||||
target->physics.last_active_tick = now_tick;
|
||||
target->physics.touched = 1;
|
||||
|
||||
/* Record this touch's transfer-law inputs, not a derived heat value
|
||||
* (rev o, VM-FLEET-ATTRACTOR-DESIGN-20260705.md) -- see
|
||||
@@ -371,7 +402,7 @@ void vm_physics_tick(uint64_t now_ns)
|
||||
|
||||
(void)now_ns; /* Unlike the log-linear regression this replaced, the
|
||||
* estimator below needs no external time reference --
|
||||
* each sample already carries its own elapsed_us. */
|
||||
* each sample already carries its own elapsed_ticks. */
|
||||
|
||||
/* Mirrors vm_tick_inference_engine's is_warm gate: skip rather than
|
||||
* substitute a default slope. Expected to stay unwarmed (or warm
|
||||
@@ -382,17 +413,17 @@ void vm_physics_tick(uint64_t now_ns)
|
||||
/* Direct rate recovery, not curve-fitting (rev o,
|
||||
* VM-FLEET-ATTRACTOR-DESIGN-20260705.md, superseding the log-linear
|
||||
* OLS approach of rev b-n): the transfer law is known exactly
|
||||
* (amount = elapsed_us * slope >> 16), so any unclamped touch can be
|
||||
* inverted directly for an exact per-sample rate. Order doesn't
|
||||
* (amount = elapsed_ticks * slope >> 16), so any unclamped touch can
|
||||
* be inverted directly for an exact per-sample rate. Order doesn't
|
||||
* matter here -- a median over the observation window, not a
|
||||
* time-indexed fit -- so this walks the fixed-size array directly
|
||||
* rather than replaying ring order from fleet_window.head. */
|
||||
for (i = 0; i < VM_FLEET_WINDOW_DEPTH; i++) {
|
||||
VMFleetTouchSample *s = &fleet_window.touch_samples[i];
|
||||
|
||||
if (s->clamped || s->amount == 0 || s->elapsed_us == 0) continue;
|
||||
if (s->clamped || s->amount == 0 || s->elapsed_ticks == 0) continue;
|
||||
|
||||
rates[rate_count++] = (s->amount << 16) / s->elapsed_us;
|
||||
rates[rate_count++] = (s->amount << 16) / s->elapsed_ticks;
|
||||
}
|
||||
|
||||
/* slope_fit_quality_q48 as the informative fraction of the window --
|
||||
@@ -423,14 +454,6 @@ void vm_physics_tick(uint64_t now_ns)
|
||||
fleet_transfer_slope_q48 = (rates[rate_count / 2] * l8_regime_modulation_q16()) >> 16;
|
||||
}
|
||||
|
||||
/* Fleet-wide heartbeat tick, distinct from any VM's own per-VM
|
||||
* HeartbeatState.tick_count -- see the rationale in the header. Advances
|
||||
* from whichever VM's own heartbeat cycle happens to fire, so the
|
||||
* readiness signal reflects the fleet's aggregate activity rather than
|
||||
* any one VM's (in practice, Hera's) personal word-execution rate. */
|
||||
static uint64_t fleet_heartbeat_tick_count = 0;
|
||||
static uint64_t fleet_last_inference_tick = 0;
|
||||
|
||||
void vm_physics_heartbeat_tick(uint64_t now_ns)
|
||||
{
|
||||
fleet_heartbeat_tick_count++;
|
||||
|
||||
@@ -579,7 +579,7 @@ static void mama_word_vm_step(VM *vm)
|
||||
return;
|
||||
}
|
||||
|
||||
vm_physics_touch(entry.vm_id, vm_monotonic_ns(vm));
|
||||
vm_physics_touch(entry.vm_id);
|
||||
|
||||
saved_name = console_get_vm_name();
|
||||
console_set_vm_name(entry.name);
|
||||
@@ -655,7 +655,7 @@ static void mama_word_vm_exec(VM *vm)
|
||||
return;
|
||||
}
|
||||
|
||||
vm_physics_touch(entry.vm_id, vm_monotonic_ns(vm));
|
||||
vm_physics_touch(entry.vm_id);
|
||||
|
||||
log_message(LOG_INFO, "VM-EXEC: '%s' -> '%s'", cmd_buf, vm_name);
|
||||
saved_name = console_get_vm_name();
|
||||
@@ -736,7 +736,7 @@ static void mama_word_vm_call(VM *vm)
|
||||
vm_push(vm, 0); return;
|
||||
}
|
||||
|
||||
vm_physics_touch(entry.vm_id, vm_monotonic_ns(vm));
|
||||
vm_physics_touch(entry.vm_id);
|
||||
|
||||
log_message(LOG_DEBUG, "VM-CALL: '%s' -> '%s'", cmd_buf, vm_name);
|
||||
saved_name = console_get_vm_name();
|
||||
|
||||
Reference in New Issue
Block a user