Fix extract_doe_region.py SLOT_FMT drift; regenerate report with real data
Build / build-amd64-iso (push) Canceled after 0s
Build / build-aarch64-iso (push) Canceled after 0s
Build / build-riscv64-img (push) Canceled after 0s

FABRIC-3.md §XXXV.15. §XXXV.12 added an explicit _align_pad field to
doe_trial_slot_t to fix a struct-alignment bug, but never updated the
Python extractor's SLOT_FMT/SLOT_CRC_SPAN to match -- every field after
isa was read from the wrong byte offset, so slot_crc read wrong bytes
entirely and every legitimate record (including the real, live
campaign's own first two clean trials) was flagged as CRC-corrupt.
Fixed; SLOT_SIZE assertion tightened from <= to == to catch this drift
immediately next time.

Regenerated multiuser_doe_report.pdf against the real campaign's actual
first two trials: run=0 (cfg=0, nw=2, uniform, fail=0) and run=1 (cfg=5,
nw=8, heterogeneous, fail=0), both fleet_conserved=1 at exactly Q48.16
1.0. Real report, real data, first time this has happened for this
campaign. disk/artemis.img itself and the live campaign's log directory
are deliberately left uncommitted -- still being written by the running
campaign.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
This commit is contained in:
Robert Allan James
2026-09-17 23:28:50 -04:00
co-authored by Claude Sonnet 5
parent 553ca9163d
commit 9aebbb224b
15 changed files with 244 additions and 44 deletions
+14
View File
@@ -5855,3 +5855,17 @@ That is the natural mechanism a real fix would hook, not something to build from
with the workflow") -- find and log these live, keep the campaign running, don't stop to fix with the workflow") -- find and log these live, keep the campaign running, don't stop to fix
each one as found. Real feature, real gap, deliberately deferred. each one as found. Real feature, real gap, deliberately deferred.
### XXXV.15 -- Extractor bug: SLOT_FMT never updated after §XXXV.12's alignment fix
Found checking the real, live campaign's first two trials against the console log. Both slots
read back as "CRC mismatch" in `extract_doe_region.py` even though the kernel-side write path
was correct and the console log showed clean trials. Root cause: §XXXV.12's struct-alignment fix
added an explicit `_align_pad` `uint32_t` field to `doe_trial_slot_t` (`doe_region.h`), but
`extract_doe_region.py`'s `SLOT_FMT`/`SLOT_CRC_SPAN` were never updated to match -- every field
after `isa` was being read from the wrong byte offset, so `slot_crc` itself was read from the
wrong bytes entirely. Fixed (`SLOT_FMT = "<QQIIIIIII8sIQ"`, `assert SLOT_SIZE == DOE_SLOT_SIZE`
tightened from `<=` to catch exactly this kind of drift next time). Re-extracted the real
campaign's first two trials correctly: `run=0 cfg=0 rep=14 nw=2 mode=uniform fail=0`,
`run=1 cfg=5 rep=8 nw=8 mode=heterogeneous fail=0`, both `fleet_conserved=1`,
`fleet_k_q48=65536` (exactly Q48.16 1.0) -- clean so far.
@@ -0,0 +1,68 @@
<?xml version='1.0' encoding='UTF-8' ?>
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='576.00pt' height='432.00pt' viewBox='0 0 576.00 432.00'>
<g class='svglite'>
<defs>
<style type='text/css'><![CDATA[
.svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
fill: none;
stroke: #000000;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 10.00;
}
.svglite text {
white-space: pre;
}
.svglite g.glyphgroup path {
fill: inherit;
stroke: none;
}
]]></style>
</defs>
<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
<defs>
<clipPath id='cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA='>
<rect x='0.00' y='0.00' width='576.00' height='432.00' />
</clipPath>
</defs>
<g clip-path='url(#cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA=)'>
<rect x='0.00' y='0.000000000000057' width='576.00' height='432.00' style='stroke-width: 1.07; stroke: none; fill: #FFFFFF;' />
</g>
<defs>
<clipPath id='cpMzguNjR8NTcwLjUyfDI0LjI5fDM2MS45Mg=='>
<rect x='38.64' y='24.29' width='531.88' height='337.63' />
</clipPath>
</defs>
<g clip-path='url(#cpMzguNjR8NTcwLjUyfDI0LjI5fDM2MS45Mg==)'>
<polyline points='38.64,361.92 570.52,361.92 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='38.64,277.51 570.52,277.51 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='38.64,193.10 570.52,193.10 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='38.64,108.69 570.52,108.69 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='38.64,24.29 570.52,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='183.70,361.92 183.70,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='425.46,361.92 425.46,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<rect x='74.91' y='193.10' width='217.59' height='0.00' style='stroke-width: 1.07; stroke: none; stroke-linecap: butt; stroke-linejoin: miter; fill: #4A90D9; fill-opacity: 0.85;' />
<rect x='316.67' y='193.10' width='217.59' height='0.00' style='stroke-width: 1.07; stroke: none; stroke-linecap: butt; stroke-linejoin: miter; fill: #E07B39; fill-opacity: 0.85;' />
<text x='183.70' y='190.75' text-anchor='middle' style='font-size: 8.54px; font-family: "Liberation Sans";' textLength='11.88px' lengthAdjust='spacingAndGlyphs'>0/1</text>
<text x='425.46' y='190.75' text-anchor='middle' style='font-size: 8.54px; font-family: "Liberation Sans";' textLength='11.88px' lengthAdjust='spacingAndGlyphs'>0/1</text>
</g>
<g clip-path='url(#cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA=)'>
<text x='33.71' y='364.95' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='15.64px' lengthAdjust='spacingAndGlyphs'>-5%</text>
<text x='33.71' y='280.54' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='15.64px' lengthAdjust='spacingAndGlyphs'>-2%</text>
<text x='33.71' y='196.13' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='12.72px' lengthAdjust='spacingAndGlyphs'>0%</text>
<text x='33.71' y='111.72' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='12.72px' lengthAdjust='spacingAndGlyphs'>3%</text>
<text x='33.71' y='27.31' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='12.72px' lengthAdjust='spacingAndGlyphs'>5%</text>
<text x='183.70' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='4.89px' lengthAdjust='spacingAndGlyphs'>2</text>
<text x='425.46' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='4.89px' lengthAdjust='spacingAndGlyphs'>8</text>
<text x='304.58' y='385.04' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='96.00px' lengthAdjust='spacingAndGlyphs'>Concurrent workers</text>
<text transform='translate(13.05,193.10) rotate(-90)' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='169.77px' lengthAdjust='spacingAndGlyphs'>Fraction of trials with fail_count &gt; 0</text>
<text x='218.58' y='416.18' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='27.53px' lengthAdjust='spacingAndGlyphs'>mode</text>
<rect x='252.30' y='404.47' width='15.86' height='15.86' style='stroke-width: 1.07; stroke: none; stroke-linecap: butt; stroke-linejoin: miter; fill: #4A90D9; fill-opacity: 0.85;' />
<rect x='309.85' y='404.47' width='15.86' height='15.86' style='stroke-width: 1.07; stroke: none; stroke-linecap: butt; stroke-linejoin: miter; fill: #E07B39; fill-opacity: 0.85;' />
<text x='274.35' y='415.43' style='font-size: 8.80px; font-family: "Liberation Sans";' textLength='29.31px' lengthAdjust='spacingAndGlyphs'>uniform</text>
<text x='331.91' y='415.43' style='font-size: 8.80px; font-family: "Liberation Sans";' textLength='58.67px' lengthAdjust='spacingAndGlyphs'>heterogeneous</text>
<text x='304.58' y='23.35' text-anchor='middle' style='font-size: 9.00px;fill: #666666; font-family: "Liberation Sans";' textLength='26.50px' lengthAdjust='spacingAndGlyphs'>2 trials</text>
<text x='304.58' y='14.98' text-anchor='middle' style='font-size: 12.00px; font-weight: bold; font-family: "Liberation Sans";' textLength='309.09px' lengthAdjust='spacingAndGlyphs'>Trial Fail Rate by Concurrency Level x Workload Mode</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

@@ -0,0 +1,73 @@
<?xml version='1.0' encoding='UTF-8' ?>
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='720.00pt' height='432.00pt' viewBox='0 0 720.00 432.00'>
<g class='svglite'>
<defs>
<style type='text/css'><![CDATA[
.svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
fill: none;
stroke: #000000;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 10.00;
}
.svglite text {
white-space: pre;
}
.svglite g.glyphgroup path {
fill: inherit;
stroke: none;
}
]]></style>
</defs>
<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
<defs>
<clipPath id='cpMC4wMHw3MjAuMDB8MC4wMHw0MzIuMDA='>
<rect x='0.00' y='0.00' width='720.00' height='432.00' />
</clipPath>
</defs>
<g clip-path='url(#cpMC4wMHw3MjAuMDB8MC4wMHw0MzIuMDA=)'>
<rect x='0.00' y='0.000000000000057' width='720.00' height='432.00' style='stroke-width: 1.07; stroke: none; fill: #FFFFFF;' />
</g>
<defs>
<clipPath id='cpNDUuMDB8NzE0LjUyfDI0LjI5fDM2MS45Mg=='>
<rect x='45.00' y='24.29' width='669.52' height='337.63' />
</clipPath>
</defs>
<g clip-path='url(#cpNDUuMDB8NzE0LjUyfDI0LjI5fDM2MS45Mg==)'>
<polyline points='45.00,361.92 714.52,361.92 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='45.00,277.51 714.52,277.51 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='45.00,193.10 714.52,193.10 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='45.00,108.69 714.52,108.69 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='45.00,24.29 714.52,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='75.43,361.92 75.43,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='227.60,361.92 227.60,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='379.76,361.92 379.76,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='531.92,361.92 531.92,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='684.09,361.92 684.09,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<circle cx='75.43' cy='193.10' r='1.95' style='stroke-width: 0.71; stroke: #4A90D9; stroke-opacity: 0.60; fill: #4A90D9; fill-opacity: 0.60;' />
<circle cx='684.09' cy='193.10' r='1.95' style='stroke-width: 0.71; stroke: #E07B39; stroke-opacity: 0.60; fill: #E07B39; fill-opacity: 0.60;' />
<line x1='45.00' y1='193.10' x2='714.52' y2='193.10' style='stroke-width: 1.07; stroke: #7F7F7F; stroke-dasharray: 5.69,5.69; stroke-linecap: butt;' />
</g>
<g clip-path='url(#cpMC4wMHw3MjAuMDB8MC4wMHw0MzIuMDA=)'>
<text x='40.07' y='364.95' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>0.950</text>
<text x='40.07' y='280.54' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>0.975</text>
<text x='40.07' y='196.13' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>1.000</text>
<text x='40.07' y='111.72' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>1.025</text>
<text x='40.07' y='27.31' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>1.050</text>
<text x='75.43' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='17.11px' lengthAdjust='spacingAndGlyphs'>0.00</text>
<text x='227.60' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='17.11px' lengthAdjust='spacingAndGlyphs'>0.25</text>
<text x='379.76' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='17.11px' lengthAdjust='spacingAndGlyphs'>0.50</text>
<text x='531.92' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='17.11px' lengthAdjust='spacingAndGlyphs'>0.75</text>
<text x='684.09' y='372.90' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='17.11px' lengthAdjust='spacingAndGlyphs'>1.00</text>
<text x='379.76' y='385.04' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='130.70px' lengthAdjust='spacingAndGlyphs'>Run id (shuffled trial index)</text>
<text transform='translate(13.05,193.10) rotate(-90)' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='96.75px' lengthAdjust='spacingAndGlyphs'>fleet_k_q48 / 65536</text>
<text x='293.76' y='416.18' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='27.53px' lengthAdjust='spacingAndGlyphs'>mode</text>
<circle cx='335.41' cy='412.40' r='1.95' style='stroke-width: 0.71; stroke: #4A90D9; stroke-opacity: 0.60; fill: #4A90D9; fill-opacity: 0.60;' />
<circle cx='392.97' cy='412.40' r='1.95' style='stroke-width: 0.71; stroke: #E07B39; stroke-opacity: 0.60; fill: #E07B39; fill-opacity: 0.60;' />
<text x='349.53' y='415.43' style='font-size: 8.80px; font-family: "Liberation Sans";' textLength='29.31px' lengthAdjust='spacingAndGlyphs'>uniform</text>
<text x='407.09' y='415.43' style='font-size: 8.80px; font-family: "Liberation Sans";' textLength='58.67px' lengthAdjust='spacingAndGlyphs'>heterogeneous</text>
<text x='379.76' y='23.35' text-anchor='middle' style='font-size: 9.00px;fill: #666666; font-family: "Liberation Sans";' textLength='314.09px' lengthAdjust='spacingAndGlyphs'>Dashed line = Q48.16 conserved value (1.0); trial-end reads, shuffled run order</text>
<text x='379.76' y='14.98' text-anchor='middle' style='font-size: 12.00px; font-weight: bold; font-family: "Liberation Sans";' textLength='310.25px' lengthAdjust='spacingAndGlyphs'>Fleet Heat Conservation (K) Across the Trial Sequence</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

@@ -1,34 +0,0 @@
<?xml version='1.0' encoding='UTF-8' ?>
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='576.00pt' height='288.00pt' viewBox='0 0 576.00 288.00'>
<g class='svglite'>
<defs>
<style type='text/css'><![CDATA[
.svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
fill: none;
stroke: #000000;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 10.00;
}
.svglite text {
white-space: pre;
}
.svglite g.glyphgroup path {
fill: inherit;
stroke: none;
}
]]></style>
</defs>
<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
<defs>
<clipPath id='cpMC4wMHw1NzYuMDB8MC4wMHwyODguMDA='>
<rect x='0.00' y='0.00' width='576.00' height='288.00' />
</clipPath>
</defs>
<g clip-path='url(#cpMC4wMHw1NzYuMDB8MC4wMHwyODguMDA=)'>
<rect x='0.00' y='0.00' width='576.00' height='288.00' style='stroke-width: 0.00; stroke: none;' />
<text x='288.00' y='137.58' text-anchor='middle' style='font-size: 17.07px;fill: #666666; font-family: "Liberation Sans";' textLength='164.02px' lengthAdjust='spacingAndGlyphs'>No trials persisted yet</text>
<text x='288.00' y='162.16' text-anchor='middle' style='font-size: 17.07px;fill: #666666; font-family: "Liberation Sans";' textLength='109.02px' lengthAdjust='spacingAndGlyphs'>(0 trials so far)</text>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,67 @@
<?xml version='1.0' encoding='UTF-8' ?>
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='576.00pt' height='432.00pt' viewBox='0 0 576.00 432.00'>
<g class='svglite'>
<defs>
<style type='text/css'><![CDATA[
.svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
fill: none;
stroke: #000000;
stroke-linecap: round;
stroke-linejoin: round;
stroke-miterlimit: 10.00;
}
.svglite text {
white-space: pre;
}
.svglite g.glyphgroup path {
fill: inherit;
stroke: none;
}
]]></style>
</defs>
<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
<defs>
<clipPath id='cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA='>
<rect x='0.00' y='0.00' width='576.00' height='432.00' />
</clipPath>
</defs>
<g clip-path='url(#cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA=)'>
<rect x='0.00' y='0.000000000000057' width='576.00' height='432.00' style='stroke-width: 1.07; stroke: none; fill: #FFFFFF;' />
</g>
<defs>
<clipPath id='cpNDcuOTJ8NTcwLjUyfDI0LjI5fDQwMS4xMg=='>
<rect x='47.92' y='24.29' width='522.60' height='376.83' />
</clipPath>
</defs>
<g clip-path='url(#cpNDcuOTJ8NTcwLjUyfDI0LjI5fDQwMS4xMg==)'>
<polyline points='47.92,401.12 570.52,401.12 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='47.92,306.91 570.52,306.91 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='47.92,212.70 570.52,212.70 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='47.92,118.49 570.52,118.49 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='47.92,24.29 570.52,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='190.45,401.12 190.45,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<polyline points='427.99,401.12 427.99,24.29 ' style='stroke-width: 1.07; stroke: #E5E5E5; stroke-linecap: butt;' />
<line x1='190.45' y1='212.70' x2='190.45' y2='212.70' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
<line x1='190.45' y1='212.70' x2='190.45' y2='212.70' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
<polygon points='101.37,212.70 101.37,212.70 279.53,212.70 279.53,212.70 101.37,212.70 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt; stroke-linejoin: miter; fill: #50C878; fill-opacity: 0.80;' />
<line x1='101.37' y1='212.70' x2='279.53' y2='212.70' style='stroke-width: 2.13; stroke: #333333; stroke-linecap: butt; stroke-linejoin: miter;' />
<line x1='427.99' y1='212.70' x2='427.99' y2='212.70' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
<line x1='427.99' y1='212.70' x2='427.99' y2='212.70' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
<polygon points='338.91,212.70 338.91,212.70 517.07,212.70 517.07,212.70 338.91,212.70 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt; stroke-linejoin: miter; fill: #E07B39; fill-opacity: 0.80;' />
<line x1='338.91' y1='212.70' x2='517.07' y2='212.70' style='stroke-width: 2.13; stroke: #333333; stroke-linecap: butt; stroke-linejoin: miter;' />
</g>
<g clip-path='url(#cpMC4wMHw1NzYuMDB8MC4wMHw0MzIuMDA=)'>
<text x='42.99' y='404.14' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='24.92px' lengthAdjust='spacingAndGlyphs'>-0.050</text>
<text x='42.99' y='309.94' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='24.92px' lengthAdjust='spacingAndGlyphs'>-0.025</text>
<text x='42.99' y='215.73' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>0.000</text>
<text x='42.99' y='121.52' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>0.025</text>
<text x='42.99' y='27.31' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='22.00px' lengthAdjust='spacingAndGlyphs'>0.050</text>
<text x='190.45' y='412.10' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='4.89px' lengthAdjust='spacingAndGlyphs'>2</text>
<text x='427.99' y='412.10' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Liberation Sans";' textLength='4.89px' lengthAdjust='spacingAndGlyphs'>8</text>
<text x='309.22' y='424.24' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='96.00px' lengthAdjust='spacingAndGlyphs'>Concurrent workers</text>
<text transform='translate(13.05,212.70) rotate(-90)' text-anchor='middle' style='font-size: 11.00px; font-family: "Liberation Sans";' textLength='122.34px' lengthAdjust='spacingAndGlyphs'>switch_count_cumulative</text>
<text x='309.22' y='23.35' text-anchor='middle' style='font-size: 9.00px;fill: #666666; font-family: "Liberation Sans";' textLength='290.50px' lengthAdjust='spacingAndGlyphs'>Stage-3 switch signal count at trial end, by number of concurrent workers</text>
<text x='309.22' y='14.98' text-anchor='middle' style='font-size: 12.00px; font-weight: bold; font-family: "Liberation Sans";' textLength='341.33px' lengthAdjust='spacingAndGlyphs'>Cumulative Preemptive Switch Count by Concurrency Level</text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

@@ -1,4 +1,11 @@
% Auto-generated by analyse_multiuser_doe.R -- do not edit by hand. % Auto-generated by analyse_multiuser_doe.R -- do not edit by hand.
No trial data has been persisted to the DoE region yet. This section This report reflects \textbf{2} completed trial(s) persisted via
will populate automatically the next time this report is built after \texttt{DOE-PERSIST-TRIAL} as of the last extraction, spanning ISA(s)
the campaign has produced at least one completed trial. \texttt{amd64}. Overall fail rate across all trials so far is
\textbf{0.0\%}; \textbf{100.0\%} of trials read
\texttt{fleet\_conserved==1} at trial end.
\begin{itemize}
\item 2 workers, uniform: 1 trials, fail rate 0.0\%, mean fleet K = 1.0000
\item 8 workers, heterogeneous: 1 trials, fail rate 0.0\%, mean fleet K = 1.0000
\end{itemize}
@@ -0,0 +1,3 @@
"nw","mode","n_trials","n_fail","fail_rate","mean_fail_count","mean_fleet_k","pct_conserved","mean_switch_cnt"
"2","uniform",1,0,0,0,1,1,0
"8","heterogeneous",1,0,0,0,1,1,0
1 nw mode n_trials n_fail fail_rate mean_fail_count mean_fleet_k pct_conserved mean_switch_cnt
2 2 uniform 1 0 0 0 1 1 0
3 8 heterogeneous 1 0 0 0 1 1 0
@@ -1,2 +0,0 @@
"status","trials_so_far"
"No trials persisted yet",0
1 status trials_so_far
2 No trials persisted yet 0
@@ -1 +1,3 @@
isa,run_id,cfg,rep,nw,mode,fail_count,fleet_k_q48,fleet_conserved,switch_count_cumulative isa,run_id,cfg,rep,nw,mode,fail_count,fleet_k_q48,fleet_conserved,switch_count_cumulative
amd64,0,0,14,2,0,0,65536,1,0
amd64,1,5,8,8,1,0,65536,1,0
1 isa run_id cfg rep nw mode fail_count fleet_k_q48 fleet_conserved switch_count_cumulative
2 amd64 0 0 14 2 0 0 65536 1 0
3 amd64 1 5 8 8 1 0 65536 1 0
+7 -5
View File
@@ -73,11 +73,13 @@ CTRL_CRC_SPAN = struct.calcsize("<QIIII") # everything before hdr_crc
# doe_trial_slot_t: fleet_k_q48(u64) switch_count_cumulative(u64) # doe_trial_slot_t: fleet_k_q48(u64) switch_count_cumulative(u64)
# run_id(u32) cfg(u32) rep(u32) nw(u32) mode(u32) fail_count(u32) # run_id(u32) cfg(u32) rep(u32) nw(u32) mode(u32) fail_count(u32)
# fleet_conserved(u32) isa(8s) slot_crc(u64), rest is padding to 64. # fleet_conserved(u32) isa(8s) _align_pad(u32, explicit -- see
SLOT_FMT = "<QQIIIIIII8sQ" # doe_region.h's own comment on why: brings slot_crc to an 8-aligned
# offset without relying on implicit compiler padding) slot_crc(u64).
SLOT_FMT = "<QQIIIIIII8sIQ"
SLOT_SIZE = struct.calcsize(SLOT_FMT) SLOT_SIZE = struct.calcsize(SLOT_FMT)
SLOT_CRC_SPAN = struct.calcsize("<QQIIIIIII8s") # everything before slot_crc SLOT_CRC_SPAN = struct.calcsize("<QQIIIIIII8sI") # everything before slot_crc
assert SLOT_SIZE <= DOE_SLOT_SIZE assert SLOT_SIZE == DOE_SLOT_SIZE
# CRC-64/XZ, same polynomial/algorithm as compute_crc64() in # CRC-64/XZ, same polynomial/algorithm as compute_crc64() in
@@ -186,7 +188,7 @@ def read_ring(dev_path: str):
f.seek(blk_off + slot_off_in_devblock) f.seek(blk_off + slot_off_in_devblock)
raw = f.read(SLOT_SIZE) raw = f.read(SLOT_SIZE)
(fleet_k_q48, switch_count, run_id, cfg, rep, nw, mode, (fleet_k_q48, switch_count, run_id, cfg, rep, nw, mode,
fail_count, fleet_conserved, isa_raw, slot_crc) = struct.unpack(SLOT_FMT, raw) fail_count, fleet_conserved, isa_raw, _align_pad, slot_crc) = struct.unpack(SLOT_FMT, raw)
want_slot_crc = compute_crc64(raw[:SLOT_CRC_SPAN]) want_slot_crc = compute_crc64(raw[:SLOT_CRC_SPAN])
if want_slot_crc != slot_crc: if want_slot_crc != slot_crc: