Commit e19dffb
diag(io): measure the engine with a reader that allocates nothing
AE#445 round 2 (cmcpherson274, tvOS 26.6): the reporter re-ran the
30-minute hold against main with the bridge pool verified present and his
footprint did not move. Slope still 1.77 MB/s, still the source mux rate,
still a silent jetsam kill. His reader preads straight into the buffer the
bridge hands it and allocates nothing per read, so the pool had nothing to
drain on his stack and could never have moved that line.
Round 1 measured the harness. customio --live read its spool with
FileHandle.readData, which strands one autoreleased Data per read on
exactly the thread the fix was about, so ratio 1.00 before the pool and
0.00 after were the harness's own retention wearing his signature. The
control that was missing is an arm that allocates nothing: it would have
been flat BEFORE the fix too, which is the reading that never happened.
So the POSIX arm becomes the default (--foundation-reader keeps the
allocating one as the control that proves the pool drains), and it is flat:
541 s at 14 Mbit/s physFP 65 -> 41 MB retention ratio -0.03
180 s, 300 s DVR physFP 79 -> 80 MB retention ratio 0.00
across 900 MB of source. The engine retains nothing when the host reader
does not.
The harness also states how far behind the live edge the engine ever
reaches back, because that is the figure a live host sizes its ring by. It
is 0.0 MB over 1 seek in both arms, DVR window included: the timeshift
lives in the segment cache on disk, not in the source, so a ring that
keeps history keeps it for a request that never arrives.
That leaves the question the instrument could not answer. Three rounds
ended on "phys_footprint climbs, every itemized bucket is flat", and that
stayed true because the buckets are either totals (vmInt/vmExt/vmCmp) or
heap-only (mallocBlocks and the size-class census). Nothing named a region
outside malloc, and his own block arithmetic points there: the byte slope
holds at the mux rate while the block rate falls from 23/s to 2.6/s across
his series, so what still strands is not one allocation per read.
VMRegionCensus walks the task's VM map with vm_region_recurse_64 and
tallies dirty plus swapped pages per user_tag, skipping file-backed dirt
because it belongs to the file. It reports GROWTH rather than a total, and
that choice is measured rather than stylistic: even the anonymous total
overshoots phys_footprint (100 MB against 56 MB) because IOSurface and
video-bitstream mappings read as anonymous here while the kernel charges
them to whoever created them. A total that cannot be checked against the
line beside it is worse than none; summed positive deltas can be held
against the rise in physFP over the same span. From a live session:
vmGrewMB=31 vmRegions=358 vmTagTop=IOSURFACE_ALT:+28MB(66),MALLOC_SMALL:+2MB(27)
It rides the existing setLargeAllocationCensusEnabled switch, so a
reporter needs no new call, and the first tick anchors the baseline itself
so the load burst is part of the anchor rather than part of the finding.
Tests: 2258 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WbciAqCSxpaiUpTumrCuA91 parent 661d079 commit e19dffb
7 files changed
Lines changed: 433 additions & 24 deletions
File tree
- Sources
- AetherEngine
- Diagnostics
- aetherctl
- Tests/AetherEngineTests
- docs
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
26 | 31 | | |
27 | 32 | | |
28 | 33 | | |
| |||
171 | 176 | | |
172 | 177 | | |
173 | 178 | | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
174 | 184 | | |
175 | 185 | | |
176 | 186 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
0 commit comments