P139 keeps P138’s debt-limited aux-load policy and adds an audit: every I-cache word filled by background repair is tagged, then normal fetch counts whether that word becomes a first later fetch hit or a repeat later fetch hit.
| check | result |
|---|---|
| Verilator build | PASS |
BusyBox shell workload reaches P139-FILE-OK | PASS |
| Aux-load queue full drops | PASS |
| Aux response errors/cancels | PASS |
| Hardened layout | NOT RUN |
| metric | P134 | P138 | P139 |
|---|---|---|---|
| post-load cycles | 218,247,567 | 219,659,138 | 220,650,157 |
| shell window cycles | 64,221,642 | 64,637,761 | 65,708,764 |
| retired instructions | 86,139,760 | 86,082,907 | 86,400,649 |
| CPI | 2.5336 | 2.5517 | 2.5538 |
| S_FETCH cycles | 7,617,695 | 7,617,168 | 7,633,229 |
| S_MEM cycles | 27,799,343 | 29,317,924 | 29,450,021 |
P139 is not a speed win. It is 1,071,003 shell-window cycles slower than P138 and 1,487,122 cycles slower than P134. The useful result is the repair-attribution data.
| repair-usefulness counter | count |
|---|---|
| background repair word fills tagged | 52,847,191 |
| first later fetch hits on tagged words | 1,926,219 |
| repeat later fetch hits on tagged words | 829,627 |
| first-hit usefulness ratio | 3.64% |
| first + repeat fetch-hit ratio | 5.22% |
That is the uncomfortable result in one table. The I-cache background repair engine is consuming a lot of lower-memory service, but only a small slice of those repaired words become fetch data before replacement or irrelevance.
| P139 policy bucket | count |
|---|---|
| total aux-load candidates | 5,254,140 |
| issued aux loads | 1,684,851 |
| frontend prefetch not safe/useful | 1,584,084 |
| frontend-ready candidates | 3,670,056 |
| background quiet candidates / issued | 172,707 |
| issued while preempting I-cache background | 1,512,144 |
| deferred by I-cache debt limit | 68,133 |
| I-cache debt paydowns | 1,512,144 |
| I-cache debt saturations | 0 |
| debt at end | 0 |
The debt arbiter is still balanced: preemptions and paydowns match, and the aux-load path still completes 1.68M loads without queue drops, errors, or cancels. The new fact is that fair repair service is not the same as valuable repair service.
The next rung should make policy use this fact. A repair-aware arbiter could protect only current/near fetch-line repair, age out repair streams that have not paid off, or stop spending bandwidth on background words that repeatedly fail the first-use audit.
- kernel banner to /init 117,349,770 53.3%
- /init to shell banner 1,082,285 0.5%
- shell banner to first command 35,880,486 16.3%
- echo command 1,649 0%
- uname -a 1,985,750 0.9%
- ls /bin /usr/share 32,868,818 14.9%
- cat sample file 3,358,740 1.5%
- touch/write/cat/rm /tmp file 11,079,526 5%
- 8x ash loop with file I/O 16,413,601 7.5%
- final marker 680 0%
- fetch 3.5% 7,633,229
- execute 39.2% 86,425,615
- mem 13.5% 29,729,857
- walker 1.2% 2,695,250
- writeback 39.2% 86,400,649
- mul/div 3.5% 7,763,841