feat(prbs): Add 100G PRBS monitor; fix the job log path and USB mount
port_prbs_monitor.sh drives PRBS on both 100G uplinks: lpmode off, arm the pattern, then poll `phy diag <phy> prbs get` in the background until stopped, counting a poll as PASS only when the output says "PRBS OK!". prbsstat Ber is captured beside every poll for the record but does not decide the verdict. `stop` runs prbsstat STOp and prbs clear before rendering the report, so the test does not leave PRBS armed. `start a` / `start b` runs one uplink alone, which is how a genuine port fault is separated from the DUT not coping with two PRBS streams at once. A port that was not run reports SKIP rather than FAIL -- deciding on poll count alone would have made a deliberate single-port run look like half the hardware was broken. The port status is deliberately not printed at `start`: with PRBS armed the link reports DOWN, which reads as a failure to anyone glancing at the console. It appears in the report instead, after prbs clear and labelled as the recovered state. The calls in Script A, B and C are committed but commented out -- PRBS is still under bring-up. Fix: the job directory was written as /host/hw-eval/current/jobs in some places and /host/hw-eval/jobs in others, so what Script B wrote was not what Script C collected. Unified on /host/hw-eval/jobs. Fix: Script C copied to /mnt/usb assuming it was mounted. It now finds the device with usb_target.sh and mounts it first, so the logs actually leave the DUT. Script C also reorders its results -- stress logs, then the MGMT ping report, then 100G status -- and cats the bgctl ssd/usb logs. Script A -> V1.0.9. Docs and docs/release-notes/v1.0.9.md updated. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014RetWKFZFG1ZHcitQAyhwM
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# v1.0.9 — 100G PRBS testing, and the job logs actually reach the USB stick
|
||||
|
||||
## ✨ New features
|
||||
|
||||
**100G uplink PRBS test**
|
||||
* New `port_prbs_monitor.sh` drives a PRBS test on both 100G uplinks: it clears low-power mode, arms the pattern, then polls `phy diag <phy> prbs get` in the background until stopped. A poll counts as PASS only when the output says `PRBS OK!`; `prbsstat Ber` is captured alongside every poll for the record.
|
||||
* `stop` runs `prbsstat STOp` and `prbs clear` on each port before rendering the report, so the test does not leave PRBS armed behind it.
|
||||
* `report` gives the tally the bench actually wants:
|
||||
|
||||
```
|
||||
PORT POLLS PASS FAIL RESULT
|
||||
Ethernet513 42 42 0 PASS
|
||||
Ethernet514 42 40 2 FAIL
|
||||
```
|
||||
* **One port at a time is a first-class mode.** `start a` or `start b` runs a single uplink, which is how you separate a genuine port fault from the DUT not coping with two PRBS streams at once. A port that was not run reports `SKIP`, not `FAIL`.
|
||||
* Every command and its full output — setup, each poll, teardown — goes to that port's raw log.
|
||||
|
||||
> ⚠️ The script ships in this build and can be run by hand, but **the calls in Script A, B and C are commented out**: PRBS is still under bring-up on this platform.
|
||||
|
||||
**USB target detection**
|
||||
* `usb_target.sh` reports an inserted USB device's node, mount point or by-id path. It excludes whatever disk backs `/` and `/host` — this platform can boot from a USB DOM, which also reports as USB — refuses to guess when several USB disks are present, and when mounting, verifies the result is writable rather than trusting that `mount` succeeded.
|
||||
* Script B builds the USB stress command from the detected node instead of a hard-coded `/dev/sda1`.
|
||||
|
||||
## 🐛 Bug fixes
|
||||
|
||||
**The job logs were being written to a path nobody collected**
|
||||
* Stress output, the monitors' logs and the USB archive disagreed about where the job directory lives. Everything now uses `/host/hw-eval/jobs/`, so what Script B writes is what Script C copies out.
|
||||
|
||||
**Script C copied to a USB that was never mounted**
|
||||
* The archive step assumed `/mnt/usb` was ready. Script C now finds the device and mounts it first, so a run's logs leave the DUT instead of being written into an empty mount point.
|
||||
|
||||
**`show interfaces status` right after starting PRBS reads as a failure**
|
||||
* With PRBS armed the link is out of normal operation and reports DOWN. `port_prbs_monitor.sh` deliberately does not print the port status at `start` — it appears in the report instead, after `prbs clear`, labelled as the recovered state.
|
||||
|
||||
## 📦 Downloads
|
||||
|
||||
| File | Contents |
|
||||
|---|---|
|
||||
| `Script_ABC_Blanton_V1.0.9.zip` | The full Tera Term working directory, including `Blanton_Script/` to copy onto the DUT |
|
||||
|
||||
**After copying to the DUT:**
|
||||
|
||||
```bash
|
||||
chmod +x ~/Blanton_Script/*.sh # see below
|
||||
grep -rlU $'\r' ~/Blanton_Script # expect no output
|
||||
```
|
||||
|
||||
`mgmt_ping_monitor.sh` and `port_prbs_monitor.sh` launch their workers through `bash`, so those two run without the execute bit. `bmc_monitor.sh` and `usb_target.sh` still need it, and neither git (mode 100644) nor a Windows/USB copy carries it. Without the `chmod`, `start` fails with `Permission denied` and the later `cat` finds nothing: **the section ends up empty and nothing reports an error.**
|
||||
|
||||
## ⚠️ Before you run
|
||||
|
||||
* **Declare the switch population.** `SWB_UNIT0` / `SWB_UNIT1` in `config.ttl` say which switch units this DUT has; traffic and the readiness gate both follow them.
|
||||
* **Set `FAN_SPEED`.** It is applied at the start of every run.
|
||||
* **Management connectivity is in use, not preserved.** Both management NICs are up and pinging — drive the run from the serial console.
|
||||
* **PRBS is not wired into the macros yet.** Run `port_prbs_monitor.sh` by hand if you want it; uncommenting the calls in A/B/C is not supported in this build.
|
||||
* **Two settings persist to `config_db.json`** and survive a reboot: LLDP is left disabled and the 100G uplinks are left configured. Restore them before the DUT moves on.
|
||||
|
||||
## 🔗 Links
|
||||
|
||||
* [ARCHITECTURE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/ARCHITECTURE.md) — test flow, data models, constraints
|
||||
* [CLAUDE.md](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/src/branch/main/CLAUDE.md) — commands and the bench gotchas
|
||||
|
||||
**Full changelog:** [V1.0.8...V1.0.9](https://etgit.et-wen.com/etwen/Blanton_TTL_Script/compare/V1.0.8...V1.0.9)
|
||||
Reference in New Issue
Block a user