P140 turns P139’s audit into a policy experiment. Every foreground I-cache fill may start background repair, but the descriptor gets only one adjacent-word budget before it stops.
| check | result |
|---|---|
| Verilator build | PASS |
BusyBox shell workload reaches P140-FILE-OK | PASS |
| Aux-load queue full drops | PASS |
| Aux response errors/cancels | PASS |
| Hardened layout | NOT RUN |
| metric | P134 | P139 | P140 |
|---|---|---|---|
| post-load cycles | 218,247,567 | 220,650,157 | 220,083,644 |
| shell window cycles | 64,221,642 | 65,708,764 | 65,035,481 |
| retired instructions | 86,139,760 | 86,400,649 | 86,226,717 |
| CPI | 2.5336 | 2.5538 | 2.5524 |
| S_FETCH cycles | 7,617,695 | 7,633,229 | 7,623,290 |
| S_MEM cycles | 27,799,343 | 29,450,021 | 29,353,267 |
P140 is a previous-rung speed PASS: 673,283 cycles faster than P139. It is still a speed FAIL versus P134 and P138.
| repair-usefulness counter | P139 | P140 |
|---|---|---|
| background repair word fills | 52,847,191 | 32,047,006 |
| first later fetch hits | 1,926,219 | 1,319,114 |
| repeat later fetch hits | 829,627 | 552,003 |
| first-hit usefulness ratio | 3.64% | 4.12% |
| first + repeat fetch-hit ratio | 5.22% | 5.84% |
| P140 policy bucket | count |
|---|---|
| repair starts | 58,754,125 |
| budget stops | 32,047,006 |
| already-valid word skips | 149,554 |
| budget at end | 0 |
The one-word budget cuts repair fills by 20.80M, about 39.4%, and the usefulness ratio rises. That is the good part.
The bad part is absolute instruction locality. I-cache hits fall from 43.0M to 29.1M and miss refills rise from 43.2M to 48.8M. P140 stops wasting as much repair bandwidth, but it also starves useful line fill.
The next rung should keep the value-aware direction but loosen the fixed budget: grant a second repair word only when the line has evidence of fetch reuse or the frontend is instruction-starved.
- kernel banner to /init 117,336,084 53.5%
- /init to shell banner 1,096,714 0.5%
- shell banner to first command 35,986,532 16.4%
- echo command 1,649 0%
- uname -a 2,448,396 1.1%
- ls /bin /usr/share 31,867,764 14.5%
- cat sample file 2,881,587 1.3%
- touch/write/cat/rm /tmp file 11,472,669 5.2%
- 8x ash loop with file I/O 16,362,736 7.5%
- final marker 680 0%
- fetch 3.5% 7,623,290
- execute 39.2% 86,251,519
- mem 13.5% 29,632,483
- walker 1.2% 2,683,038
- writeback 39.2% 86,226,717
- mul/div 3.5% 7,664,881