forked from arti/vt1200
plan: task 7 carries the real rx ring and the unit measurement
This commit is contained in:
1 parent
53b1580abd
commit
7eb7b61234
1 file changed
+42
-14
@@ -365,34 +365,62 @@ git commit -m "feat(stream): paced sender and terminal status frames"
|
||||
|
||||
---
|
||||
|
||||
### Task 7: Unit run and measurement
|
||||
### Task 7: Real RX ring, then the unit measurement
|
||||
|
||||
**Files:**
|
||||
- Modify: `harness/udpstream/vidstream.c` (RX ring), `harness/mame/vidstream.lua`
|
||||
- Create: `harness/udpstream/test-stream.sh`
|
||||
- Modify: `harness/mame/NETWORK_REPORT.md` (new section: scheme A on the unit)
|
||||
|
||||
- [ ] **Step 1: Write `test-stream.sh`**
|
||||
**Interfaces:**
|
||||
- Consumes: `fp_parse`, `blit_row`, the marker page (R12), the status frame (Task 6).
|
||||
- Produces: a payload that receives real Ethernet through its own LANCE RX ring and paints it;
|
||||
`test-stream.sh <iface> <mac> [rows] [stretch]` driving 300 frames and reporting fps/bytes/drops.
|
||||
|
||||
Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh <iface> <mac> [rows] [stretch]`, driving `vidsend.py` at 30 fps for 300 frames and recording fps, delivery %, drops, CSR0 error bits.
|
||||
**Ruling R16:** ruling R11 deferred the *DMA* path to this task. The payload's RX is currently a
|
||||
debugger-injected buffer; this task replaces it with the ring the unit needs, and closes the two
|
||||
Important findings from Task 4: (a) clamp `len` to `SLOT_BYTES` before `fp_parse`; (b) replace the
|
||||
level-triggered `RX_READY` flag with a consume counter (or mask RX while consuming), because a real
|
||||
ISR owns that cell. The unit run itself needs the physical terminal (R4) and is recorded as
|
||||
human-assisted.
|
||||
|
||||
- [ ] **Step 2: Run it on the unit**
|
||||
- [ ] **Step 1: Write the failing MAME check**
|
||||
|
||||
Run: `sudo ./test-stream.sh enp197s0f3u1 08:00:2b:16:4b:5a 80 12`
|
||||
Expected: a CSV row per 30 frames, no `MISS`, and a measurable fps.
|
||||
Add `VT1200_MODE=ring` to `vidstream.lua`: assert the payload arms 16 descriptors with OWN set for
|
||||
slot A, that a completion moves the write pointer to slot B, and that a descriptor marked with a
|
||||
frame larger than `SLOT_BYTES` is rejected without a blit (`RX_BAD` increments, `RX_OK` does not).
|
||||
|
||||
- [ ] **Step 3: Measure `B,XY` versus `L,XY`**
|
||||
- [ ] **Step 2: Run it to verify it fails**
|
||||
|
||||
Run the same test with the helper forced to `vram_blit_` (L,XY) via `--blit=l`, and record both fps values. This is the number the tile plan needs.
|
||||
Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh`
|
||||
Expected: FAIL — the ring words are zero (no RX ring exists yet).
|
||||
|
||||
- [ ] **Step 4: 3.5-minute soak**
|
||||
- [ ] **Step 3: Implement the RX ring**
|
||||
|
||||
Run 6,300 frames continuously; assert the terminal still answers and the picture is still updating (status frames keep arriving).
|
||||
16 descriptors × 1526 bytes at `RX_SLOT_A`; arm all 16 for the active slot at frame start; on
|
||||
completion sum the delivered lengths, clamp to `SLOT_BYTES`, `fp_parse`, paint, then arm the other
|
||||
slot. Count `drops` when a completion arrives while the previous slot is still being painted.
|
||||
|
||||
- [ ] **Step 5: Commit the numbers**
|
||||
- [ ] **Step 4: Run the ring check to verify it passes**
|
||||
|
||||
Run: `VT1200_MODE=ring harness/mame/run-vidstream.sh`
|
||||
Expected: PASS, with the descriptor/OWN transition and the oversize rejection both evidenced.
|
||||
|
||||
- [ ] **Step 5: Write `test-stream.sh`**
|
||||
|
||||
Same shape as `bench-sweep.sh`: `sudo ./test-stream.sh <iface> <mac> [rows] [stretch]`, 300 frames
|
||||
at 30 fps through `vidsend.py`, one CSV row per 30 frames (fps, delivery %, drops, CSR0 bits).
|
||||
|
||||
- [ ] **Step 6: Unit run (human-assisted)**
|
||||
|
||||
Run: `sudo ./test-stream.sh <iface> 08:00:2b:16:4b:5a 128 8`, then the same with the blit forced to
|
||||
`L,XY`, then a 6,300-frame soak. Record fps for both, and whether the OS interfered (`OS_TOUCH`).
|
||||
This step cannot be executed without the terminal; it stays open until the operator runs it.
|
||||
|
||||
- [ ] **Step 7: Commit**
|
||||
|
||||
```bash
|
||||
git add harness/udpstream/test-stream.sh harness/mame/NETWORK_REPORT.md
|
||||
git commit -m "test(stream): scheme A measured on the unit (B,XY vs L,XY, 3.5 min soak)"
|
||||
git add harness/udpstream/vidstream.c harness/mame/vidstream.lua harness/udpstream/test-stream.sh
|
||||
git commit -m "feat(stream): real rx ring over chained descriptors; unit measurement script"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Reference in new issue
Block a user