diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 7a79ae6..ce3d931 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -37,8 +37,11 @@ LTC2980 margin 控制器。TTL 只負責「按順序 `sendln` 並把畫面收進 | 電源 margin | LTC2980(= 2 × LTC2977)over PMBus,LINEAR16 編碼 | | 錯誤計數來源 | Linux PCIe AER sysfs(`aer_dev_*`)、EDAC sysfs(`dimm_ce/ue_count`) | | 平台監控 | SONiC `show platform *`(pmon container,含 `leak status` / `leak channels`) | -| BMC 存取 | host 端 `bmc-manager run ""`(不需對 BMC 開 SSH,繞開其 busybox 工具鏈) | -| 壓力測試 | `mlucas-avx2`(AMD CPU)、`~/hammer/tools/stress_{mem,ssd,usb}.py` | +| BMC 存取 | host 端 `bmc-manager run ""`(不需對 BMC 開 SSH,繞開其 busybox 工具鏈);`bmc-first-enroll` / `bmc-manager version\|status` | +| 背景工作管理 | `bgctl run/list/stop --all/reset`(平台工具);長時間 ping 用 `systemd-run --unit=` 掛成 transient unit | +| 管理網路 | iproute2(`ip link set` / `ip address replace` / `ip route replace ... metric`)+ `ping -I` | +| 測試 session | `hw-test-session start\|log\|status\|finish` | +| 壓力測試 | `mlucas-avx2`(AMD CPU)、`bgctl run` 排程的 `memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb` | | 資料面流量 | `bcmcmd`(Broadcom drivshell)VLAN loopback + `tx` burst,switch unit 0 / 1 | | 流量報表 | DUT 上 awk(`blanton_traffic_linespeed report`);離線 `python3 tools/bcm_mibpair_report_V1.1.0.py` | | 版本控制 | Git(NAS + Gitea 私有 remote;**不推 GitHub,含客戶 NDA 資料**) | @@ -148,8 +151,8 @@ Blanton_TTL_Script/ ├── utils/ # 可 include 的取數片段(TTL,無狀態、只 wait+sendln) │ ├── pcie_bus.ttl # lspci -tvvv / -vv │ ├── setup_pmon.ttl # show platform summary/fan/temperature/psustatus/voltage/ - │ │ # current/ssdhealth/leak status/leak channels(9 項) - │ ├── show_dmesg.ttl # date + dmesg grep error/fail/warning + │ │ # current/ssdhealth/leak status/leak channels + TPM(11 項) + │ ├── show_dmesg.ttl # dmesg -T 合併 error 正則 + i2c 過濾 + dmesg -C 清空 │ ├── show_margin_status.ttl # source margin_status_all.sh(掃 9 顆 LTC2980) │ ├── kill_all_process.ttl # kill $(jobs -p) │ ├── wait_init.ttl # 輪詢 show platform temperature 直到 pmon 起來 @@ -172,9 +175,11 @@ Blanton_TTL_Script/ ├── blanton_pwr_data.sh # SWB VRM + PDB brick 的 Vin/Vout/Iout/Temp 表 ├── blanton_traffic_linespeed.sh # SWB loopback 線速流量(bcmcmd unit 0/1) │ # init/clear/show/start/stop/ps/report/run - ├── bmc_monitor.sh # BMC 監控:週期跑 free -m,寫輪替 log - ├── bmc_monitor_ddr.sh # BMC DDR 壓力:memtester,逾時 3600s - │ # ↑ 兩支都要 chmod +x 才能跑(見 Key Constraints) + ├── mgmt_ping_monitor.sh # 10G/1G 管理網路 ping 監控(iproute2) + │ # eth0→TARGET_10G、eth1→TARGET_1G,兩張卡都保持 up + ├── bmc_monitor.sh # ⚠️ 已停用:B/C 內呼叫處已註解,改走 bgctl + bmc-manager + ├── bmc_monitor_ddr.sh # ⚠️ 已停用,同上 + │ # ↑ 三支都要 chmod +x 才能跑(見 Key Constraints) └── LTC2980_Margin_Script/ # 電壓 margin 子專案(另有獨立 repo) ├── margin.sh # margin_init/status/set/apply_profile/save ├── settings/*.conf # 一個 .conf = 一顆 LTC2980(CB + SWB0/1 × CONN13~16) @@ -290,9 +295,9 @@ PROFILE_CHANNELS=( "0:high:8" "1:low:8" ... ) # "channel:operation:change_perc | 模組 | 進入點 | 功能 | |------|--------|------| -| **Script A(Pre-test)** | `1_Blanton_Script_A.ttl` V1.0.3 | root 登入 → `date -s` 對時 → `show boot` → **等 pmon 起來**(`wait_init.ttl`)→ BMC 版本 → source 六個 bash 工具 → 清/讀 7 組 PCIe AER → `lspci` → margin 全掃 → PMON 九項 → dmesg → 100G port 狀態 → **一輪流量基線** → `show uptime` | -| **Script B(Stress)** | `2_Blanton_Script_B.ttl` | `mlucas-avx2 -cpu 0:15` + 5 份 `stress_mem.py` + `stress_ssd.py` + `stress_usb.py`(**共 8 個 job**)→ 啟動兩支 BMC monitor → `jobs` → 100G port 狀態 → traffic `ps/init/clear/show/start`(**兩個 unit**)→ `while 1` 每輪完整 PMON + margin | -| **Script C(Post-test)** | `3_Blanton_Script_C.ttl` | `kill $(jobs -p)` → PMON + dmesg → 7 組 AER → 停兩支 BMC monitor 並 `cat` 其 log → `cat` mlucas / stress_ssd log → traffic `stop` + `report`(兩個 unit)→ `show reboot-cause` / `show uptime` → 完成 messagebox | +| **Script A(Pre-test)** | `1_Blanton_Script_A.ttl` V1.0.6 | root 登入 → `date -s` 對時 → `hw-test-session start` → **等資料面就緒**(`wait_init.ttl`)→ DUT 清單(boot/version/fwutil/syseeprom/ssdhealth/TPM/NVMe)→ BMC enroll + version/status → source bash 工具 → 清/讀 7 組 PCIe AER + `ras-mc-ctl --summary` → `lspci` → margin → PMON → dmesg → **10G/1G 管理網路 ping** → 100G uplink 設定與狀態 → **一輪流量基線** → `show uptime` | +| **Script B(Stress)** | `2_Blanton_Script_B.ttl` | `mlucas-avx2 -cpu 0:15` + `bgctl run` 的 `memtester` / SSD / USB 壓力 + BMC DDR(`bmc-manager run memtester`)→ BMC USB net test(探測 cdc_ncm 介面,`systemd-run` 掛 4 小時 ping)→ 啟動 mgmt ping 監控 → `jobs` / `bgctl list` → traffic(依 `SWB_UNIT`)→ `while 1` 每輪完整 PMON + margin | +| **Script C(Post-test)** | `3_Blanton_Script_C.ttl` | `kill $(jobs -p)` + `bgctl stop --all` / `reset` + 停 BMC USB unit 與 mgmt ping → PMON + dmesg → 7 組 AER + `ras-mc-ctl` → BMC USB `journalctl` → `ip -s link show eth0/eth1` → `cat` mlucas log → traffic `stop` + `report` → NVMe 健康 → `show reboot-cause` / `uptime` → `hw-test-session finish` | | **SWB loopback 流量** | `blanton_traffic_linespeed [-u 0\|1\|all]` | `init`(VLAN 30..137,成對 `cdN`/`cdN+32`)→ `clear` → `start`(`tx 100 length=512`)→ `stop` → `report`(per-pair TX/RX 交叉比對 PASS/FAIL);另有 `ps`(link/speed)與 `run`(一條龍) | | **FPGA 暫存器存取** | `cb_fpga [data]`、`fpga_rescan` | pcimem 打 `resource0` + BAR 相對 offset,32-bit word;BDF 於 source 時自動偵測;`pmc/icb/swb0/swb1_fpga` 走 VSPI 窗口 | | **CB I2C / PMBus** | `cb_i2c_init/scan/read/write`、`cb_pmbus_read/write/linear16` | FPGA F3 OpenCores master,**讀用 Repeated START**(SMBus/PMBus 裝置必需) | @@ -300,7 +305,8 @@ PROFILE_CHANNELS=( "0:high:8" "1:low:8" ... ) # "channel:operation:change_perc | **溫度** | `temp_cb` / `temp_icb` / `temp_all` | TMP75(12-bit 左靠齊 ×0.0625)、TMP432(含 RANGE bit 的 −64 偏移、remote1/2) | | **電源資料** | `pwr_data` / `pwr_data_pdb` / `pwr_pdb_id` | SWB VRM 全軌 Vin/Vout/Iout/Temp 對齊表;MP29816 解析度**執行期從 `MFR_VOUT_SCALE_LOOP` 讀**,不寫死 | | **電壓 Margin** | `margin_init/status/set/apply_profile/save` + `*_all.sh` | 9 顆 LTC2980(CB CONN13、SWB0/1 CONN13~16)批次 high/low margin 與狀態掃描。v2.6.0 起 SWB 路徑真正接上共用 cb_i2c 後端,並有 `margin_swb_info/probe/scan/reset/sem` 除錯包裝 | -| **BMC 監控 / 壓力** | `bmc_monitor.sh` / `bmc_monitor_ddr.sh` `{start\|stop\|status\|fg\|tail\|clear}` | 由 host 端 `bmc-manager run` 週期性打 BMC,背景 detached、log 輪替。前者跑 `free -m`(逾時 30s),後者跑 `memtester`(逾時 3600s),各自獨立 log 與 pid | +| **管理網路 ping** | `mgmt_ping_monitor.sh {start\|stop\|status\|fg\|tail\|clear\|summary}` | 一輪 = 10G leg + 1G leg,各自 `ip address/route replace` 後 `ping -I ` 打自己的對端;兩張卡都保持 up。每 leg 記 `ip -s link show` 與該卡的 TX/RX packet delta,另出一行可 grep 的 `RESULT` | +| **BMC 監控 / 壓力** | `bmc_monitor.sh` / `bmc_monitor_ddr.sh` | ⚠️ **已停用** —— B/C 內呼叫處已註解,改由 `bgctl` + `bmc-manager run memtester` 取代。檔案保留未刪 | | **打包交付** | `publish/publish.sh [-v Ver] [-f] [-z] [-n]` | 版號讀 Script A 檔頭,複製成 `publish/Script_ABC_Blanton_/`,排除 `*.log`,可另出 zip | --- @@ -323,8 +329,9 @@ Script A ── logopen Logs/Blanton_Margin_.log ──┐ (之後所有畫 ├─ lspci -tvvv / -vv ← 拓樸 + link speed/width ├─ margin_status_all ← 9 顆 LTC2980 × 16ch 的 Vout 與偏差% ├─ show platform × 9 ← fan/temp/psu/voltage/current/ssdhealth/leak status/leak channels - ├─ dmesg | grep error/fail/warning - ├─ show interfaces status Ethernet513,Ethernet514 ← 100G uplink 狀態 + ├─ dmesg -T(合併 error 正則 + i2c 過濾)→ dmesg -C 清空 ← C 只會看到 soak 期間新產生的 + ├─ mgmt ping:start → pause 45 → stop → cat log ← 10G/1G 各一輪 + ├─ 100G uplink:lpmode off → 兩埠 startup → config save → show interfaces status ├─ 一輪流量基線:ps → init → clear → show → start → stop → report └─ show uptime (最前面還有 wait_init.ttl:輪詢 show platform temperature 直到不再回報 @@ -336,8 +343,10 @@ Script A ── logopen Logs/Blanton_Margin_.log ──┐ (之後所有畫 Script B ── 同一個 log 檔續寫(logwrite 分隔線) ├─ 背景程序:mlucas-avx2(CPU) ×1, stress_mem ×5, stress_ssd, stress_usb → 共 8 個 job │ (stress_hhmd / stress_pcie 已於 2026-08-17 移除,見 Status 表 ScriptB #5/#7 "KC Remove") - ├─ BMC: bmc_monitor.sh start + bmc_monitor_ddr.sh start - ├─ jobs ← 確認全部起來了 + ├─ bgctl run: memtester 1G / qfx5252-stress-ssd / qfx5252-stress-usb + ├─ BMC: bmc-manager run memtester(DDR)、cdc_ncm 介面探測 + systemd-run 4hr ping(USB) + ├─ mgmt_ping_monitor.sh start + ├─ jobs / bgctl list ← 確認全部起來了 ├─ traffic: ps → init → clear → (pause 15) → show → start (unit 0 與 1,VLAN 30..137 loopback) └─ while 1: setup_pmon(9 項)→ margin_status_all (soak 期間持續取樣) ▼ @@ -348,10 +357,13 @@ Script C ├─ kill $(jobs -p) ← 收掉所有背景壓力 ├─ show platform × 9 + dmesg ← 收工快照 ├─ AER 再抓一次 ← 與 Script A 基線相減 = 本輪新增錯誤 - ├─ BMC: 兩支 monitor stop → cat log/bmc_poll.log + log/bmc_ddr.log - ├─ cat mlucas_amm_log / log.stress_ssd ← 壓力程式自身的 pass/fail + ├─ bgctl stop --all / reset、systemctl stop BMC USB unit、mgmt ping stop + ├─ journalctl BMC USB unit、ip -s link show eth0/eth1、ras-mc-ctl --summary + ├─ cat mlucas_amm_log ← CPU 壓力程式自身的 pass/fail + ├─ nvme smart-log / smartctl -x /dev/nvme0 ├─ traffic: stop → report ← per-pair TX/RX 交叉比對,PASS/FAIL/NA(exit 2 = 有 FAIL/NA) - └─ show reboot-cause / show uptime ← soak 期間有沒有意外重開,一眼看得到 + ├─ show reboot-cause / show uptime ← soak 期間有沒有意外重開,一眼看得到 + └─ hw-test-session finish ▼ [messagebox "GOOD JOB! Test Case DONE"] → 人工檢查 log ``` @@ -409,12 +421,21 @@ pwr_data ⚠️ 但 `.gitattributes` **不會回頭重寫既有工作區檔案** —— 早於它 clone 出來的目錄, 需 `git rm --cached -r . && git reset --hard` 或刪掉目錄重新 checkout 才會生效, 而且 `git status` 乾淨**不代表**磁碟上是 LF(`--renormalize` 只在進 index 的路上轉換)。 -13. **`bmc_monitor*.sh` 需要執行權**:它們是本專案第一組「被執行」而非被 `source` 的腳本, +13. **`bmc_monitor*.sh` / `mgmt_ping_monitor.sh` 需要執行權**:它們是本專案「被執行」而非被 `source` 的腳本, 而 `do_start` 內部是 `setsid "$SCRIPT_PATH" __daemon`,**即使用 `bash x.sh start` 呼叫 也仍需 exec bit**。git 記錄為 `100644`,且 Windows → 隨身碟 → DUT 的路徑無法攜帶權限位元, 所以佈署後要先 `chmod +x ~/Blanton_Script/bmc_monitor*.sh`,否則 Script B 的 start 會 `Permission denied`、Script C 的 `cat` 撲空(BMC 段全空但不會報錯)。 -14. **客戶 NDA**:`docs/` 內含客戶 FPGA 規格與 schematic 衍生資訊,**本 repo 只推 NAS + Gitea, +14. **TTL 的 `timeout` 是全域的,設了就要還原**:`timeout = N` 之後**每一個** `wait` 都被限制在 N 秒, + 逾時的 `wait` 會直接返回而沒吃到 prompt,於是下一個指令在前一個還沒跑完就送出,之後整輪錯開一拍。 + `wait_init.ttl` 設 60 後還原 0;Script B 的 cdc_ncm 探測設 15,在 `:skip_ping`(兩條路徑的匯流點)還原。 + 加新的 `timeout` 時務必配一個 `timeout = 0`。 +15. **兩張管理網卡同網段時會 ARP flux**:`mgmt_ping_monitor.sh` 讓 eth0/eth1 同時 up,若兩者在同一個 + /24(本專案預設 `192.168.1.99` / `.101`),對端 ARP 可能由任一張卡回應,回包落在沒送封包的那張, + 量到的數字不能歸屬。`ARP_STRICT=1` 會設 `arp_ignore=1` / `arp_announce=2` 擋掉; + 另外每個 leg 的 `RESULT` 行帶 `nic_tx` / `nic_rx`(該卡自己的 packet delta), + **ping 成功但 `nic_tx` 接近 0 就代表封包從另一張卡出去了**。兩張卡在不同網段時可設 0。 +16. **客戶 NDA**:`docs/` 內含客戶 FPGA 規格與 schematic 衍生資訊,**本 repo 只推 NAS + Gitea, 絕不推 GitHub**。 --- @@ -554,13 +575,12 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值, **目標:** 壓力程序起得來、起不來看得出來,soak 迴圈有時戳、可控週期。 **包含:** -- [ ] 部署 `~/hammer/tools/` 前置檢查:新增 `utils/check_hammer_tools.ttl` - (`ls -l ~/hammer/tools/` + `ls ~/hammer/tools/amd/mlucas-avx2`),缺檔就別往下跑 +- [ ] 前置檢查:`~/hammer/tools/amd/mlucas-avx2` 仍是唯一還依賴 hammer 的項目,缺檔就別往下跑 - [ ] 壓力程序 log 加時戳,避免多輪覆蓋: `mlucas_amm_log` → `~/logs/mlucas_amm_log_$(date +%Y%m%d-%H%M%S).log`(Status 表 ScriptB #2 的既定寫法) -- [ ] `jobs` 之後加驗證:期望 **8** 個背景 job(1 mlucas + 5 mem + ssd + usb), - 數量不符時 `messagebox` 提示 - (`stress_hhmd` / `stress_pcie` 已於 2026-08-17 由 KC 移除,原本的 10 改為 8) +- [x] 壓力層改用平台的 `bgctl`(`memtester` / `qfx5252-stress-ssd` / `qfx5252-stress-usb`), + 取代 `~/hammer/tools/stress_*.py`;Script B 以 `jobs` + `bgctl list` 兩者並列確認 +- [ ] `bgctl list` 之後加數量驗證,不符時 `messagebox` 提示(目前只印出來給人看) - [ ] soak 迴圈改為「每輪先 `date`、跑完 `pause <間隔>`」, 把 `EN_LoopInterval`(預設 600 秒 = 10 min)放進 `config.ttl`,兌現 Status 表的「Get data every 10mins」 **← 目前 `while 1` 仍無 `pause`,實際間隔取決於指令執行時間,不是 10 分鐘** @@ -621,9 +641,13 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值, UE > 0 或 fatal/nonfatal > 0 直接標 FAIL - [ ] Margin 表解析:把 9 顆 × 16ch 的 Vout / 偏差% 收成 CSV,標出超出 ±(profile 設定值 + 容差) 的軌 - [ ] 溫度 / 風扇 / 電源趨勢:soak 期間逐輪取樣 → CSV(可直接畫圖) -- [ ] Stress 判定:`mlucas_amm_log` 與 `log.stress_ssd` 的錯誤關鍵字掃描 +- [ ] Stress 判定:`mlucas_amm_log` 與 `bgctl` 各工作的 log + (`/host/hw-eval/.../qfx5252-stress-{ssd,usb}.log`)的錯誤關鍵字掃描 - [ ] Traffic 判定:**直接複用 `tools/bcm_mibpair_report_V1.1.0.py`**(它已能吃 console log 的 `show c` 段落並輸出 PASS/FAIL),不要重寫一套解析 +- [ ] 管理網路判定:抓 `mgmt_ping_monitor.sh` 的 `RESULT` 行(已是單行可 grep 格式), + 並檢查 `nic_tx`/`nic_rx` 不為 0 —— 否則 PASS 也不能歸屬到那張卡 +- [ ] NVMe / EDAC:`nvme smart-log`、`smartctl -x`、`ras-mc-ctl --summary` 的前後差值 - [ ] 產出 `Logs/_summary.md`:一頁 PASS/FAIL + 每個子系統一行結論 **驗收條件:** 拿一份既有 log(如 `Blanton_Margin_20260814-164122.log`)跑解析器, @@ -676,8 +700,10 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值, 文件已加過期警告但內文未動。第 1~4 章不受影響。 - **`wait_init.ttl` 沒有逾時出口**:若 pmon 一直起不來,`result` 既非 1 也非 2,迴圈會無限重試, Script A 既不往下走也不報錯。可加最大重試次數 + `messagebox` 提示。 -- **`bmc_monitor*.sh` 的執行權**:目前需人工 `chmod +x`。可在 Script B 起它們之前補一行 - `chmod +x`(比照既有的 `chmod +x ~/hammer/tools/amd/mlucas-avx2`),或在 publish 時處理。 -- **`bmc_monitor_ddr.sh` 的壓力強度**:`memtester 500M 1` 配 `INTERVAL_SEC=5` 等於整個 soak - 近乎不間斷壓 BMC 記憶體,而 BMC 同時還要服務 host 的 `show platform` 查詢。 - 若 PMON 取數變慢,先調大 `INTERVAL_SEC` 或縮小 memtester 的量。 +- **腳本的執行權**:`mgmt_ping_monitor.sh`(以及保留但已停用的 `bmc_monitor*.sh`)需人工 `chmod +x`。 + 可在 Script B 起它之前補一行(比照既有的 `chmod +x ~/hammer/tools/amd/mlucas-avx2`),或在 publish 時處理。 +- **`bmc_monitor.sh` / `bmc_monitor_ddr.sh` 已停用**:B/C 內的呼叫都已註解,改由 `bgctl` + + `bmc-manager run memtester` 取代。檔案還留在 repo,待確認不再需要後刪除,或在檔頭標註停用。 +- **Script C 沒有倒出 `mgmt_ping.log`**:C 會 `stop` 管理網路監控並印 `ip -s link show`, + 但沒有 `cat ~/Blanton_Script/log/mgmt_ping.log`,所以整個 soak 期間累積的 per-leg `RESULT` + 留在 DUT 上、沒進 master log。Script A 那輪基線有 `cat`。 diff --git a/CLAUDE.md b/CLAUDE.md index eb040de..eb3b0ec 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,9 +9,12 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` → 完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。 -**目前狀態(2026-08-21)**:Script A/B/C 為 **V1.0.3**,涵蓋 PCIe AER / DDR EDAC / PMON / -電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量(兩個 switch unit)/ BMC 監控與 DDR 壓力。 -SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。交付用 `./publish/publish.sh` 打包。 +**目前狀態(2026-08-24)**:Script A 為 **V1.0.6**(A 集中記錄 A/B/C 三支的變更)。涵蓋 +PCIe AER / DDR EDAC / PMON+TPM / 電壓 margin(9 顆 LTC2980)/ SWB loopback 線速流量 / +10G+1G 管理網路 ping / BMC DDR 與 USB / NVMe 健康,壓力層走平台的 `bgctl`。 +switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告。 +最後一次發布是 **V1.0.5**;SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。 +交付用 `./publish/publish.sh` 打包。 ## 技術棧 @@ -24,6 +27,8 @@ SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。交付用 `./publish - **資料面流量**:`bcmcmd`(Broadcom drivshell)SWB loopback,VLAN 30..137 成對 `cdN`/`cdN+32`, `tx 100 length=512`;判定讀 ASIC `MIB_TPOK`/`MIB_RPOK` 做 per-pair 雙向交叉比對 - **BMC**:host 端 `bmc-manager run ""`,不需對 BMC 開 SSH(繞開其 busybox 工具鏈) +- **背景工作**:平台的 `bgctl run/list/stop --all/reset`;長時間 ping 用 `systemd-run --unit=` 掛 transient unit +- **管理網路**:iproute2(`ip link set` / `address replace` / `route replace ... metric`)+ `ping -I` - **判定資料源**:PCIe AER sysfs(`aer_dev_*`)、EDAC sysfs(`dimm_{ce,ue}_count`)、SONiC `show platform *` - **無編譯步驟**:TTL 與 bash 都直譯執行 @@ -70,13 +75,20 @@ blanton_traffic_linespeed report -f # 離線重解一份存下來的 cons # 離線版報表(開發機上跑,選項更多) python3 tools/bcm_mibpair_report_V1.1.0.py -a -# ── BMC 監控 / 壓力(需先 chmod +x!)──────────────── -chmod +x ~/Blanton_Script/bmc_monitor*.sh # 佈署後必做一次 -~/Blanton_Script/bmc_monitor.sh start # free -m 取樣,log/bmc_poll.log -~/Blanton_Script/bmc_monitor_ddr.sh start # memtester,log/bmc_ddr.log -~/Blanton_Script/bmc_monitor.sh status # pid / log 路徑 / log 大小 -~/Blanton_Script/bmc_monitor.sh stop -# ⚠️ tail 子命令是 tail -f,會卡住不返回;要倒 log 請直接 cat log/*.log +# ── 管理網路 ping 監控(需先 chmod +x!)────────────── +chmod +x ~/Blanton_Script/*.sh # 佈署後必做一次 +~/Blanton_Script/mgmt_ping_monitor.sh fg # 前景試一輪(約 30 秒),確認 IP/對端/網卡 +~/Blanton_Script/mgmt_ping_monitor.sh start # 背景,log/mgmt_ping.log(start 會先清空) +~/Blanton_Script/mgmt_ping_monitor.sh status +~/Blanton_Script/mgmt_ping_monitor.sh stop +~/Blanton_Script/mgmt_ping_monitor.sh summary # 只看每段的 RESULT 行 +# ⚠️ tail 子命令是 tail -f,會卡住不返回;TTL 裡要倒 log 請用 cat +# ⚠️ bmc_monitor.sh / bmc_monitor_ddr.sh 已停用(改走 bgctl + bmc-manager),檔案仍在 + +# ── 背景壓力(平台工具)────────────────────────────── +bgctl run /usr/sbin/memtester 1G 100 +bgctl list +bgctl stop --all ; bgctl reset --yes # ── 各工具的 help ─────────────────────────────────── blanton_fpga_help ; blanton_cb_i2c_help ; vi2c_help @@ -166,13 +178,23 @@ Tera Term 連 COM port (115200-8-N-1) `.gitattributes` 已擋住 git 這條路徑,但**不會回頭重寫既有工作區檔案**:早於它 clone 的目錄要 `git rm --cached -r . && git reset --hard` 才會生效,而且 **`git status` 乾淨不代表磁碟上是 LF** (`--renormalize` 只在進 index 的路上轉換)。驗證要看 byte:`grep -rlU $'\r' ` -- ⚠️ **`bmc_monitor*.sh` 需要 exec bit**,且**不是改用 `bash x.sh start` 就能繞過** —— +- ⚠️ **TTL 的 `timeout` 是全域的**:`timeout = N` 之後**每一個** `wait` 都被限制在 N 秒。逾時的 `wait` + 直接返回而沒吃到 prompt,下一個指令就在前一個還沒跑完時送出,之後整輪錯開一拍。**設了一定要 + 配一個 `timeout = 0` 還原**(`wait_init.ttl` 60→0;Script B 的 cdc_ncm 探測 15→0 在 `:skip_ping`) +- ⚠️ **兩張管理網卡同網段會 ARP flux**:`mgmt_ping_monitor.sh` 讓 eth0/eth1 同時 up,同一個 /24 下 + 對端 ARP 可能由任一張卡回應,回包落在沒送封包的那張。`ARP_STRICT=1` 擋掉;判讀時看 `RESULT` 行的 + `nic_tx`/`nic_rx`(該卡自己的 packet delta)—— **ping 成功但 `nic_tx` 接近 0 = 封包從另一張卡出去的** +- ⚠️ **`ip -s link` 的欄位順序是 `bytes packets errors ...`**,要 packet 數取的是**第 2 欄**不是第 1 欄 +- ⚠️ **`mgmt_ping_monitor.sh` / `bmc_monitor*.sh` 需要 exec bit**,且**不是改用 `bash x.sh start` 就能繞過** —— `do_start` 內部是 `setsid "$SCRIPT_PATH" __daemon`,直接執行該路徑。git 記錄是 `100644`, Windows → 隨身碟 → DUT 也帶不動權限位元,所以佈署後要 `chmod +x ~/Blanton_Script/bmc_monitor*.sh`。 - 沒做的話 Script B 的 start 會 Permission denied、Script C 的 `cat` 撲空,而且**不會報錯**, - 只會得到一份 BMC 段全空的 log -- ⚠️ **`bmc_monitor*.sh` 的 `tail` 子命令是 `tail -n 50 -f`,永遠不返回**。TTL 裡絕對不要呼叫它 + 沒做的話 start 會 Permission denied、後面的 `cat` 撲空,而且**不會報錯**,只會得到一份全空的 log +- ⚠️ **這幾支 monitor 的 `tail` 子命令是 `tail -n 50 -f`,永遠不返回**。TTL 裡絕對不要呼叫它 (Script C 曾因此卡死,`18ce7a1` 改成直接 `cat log/*.log`) +- ⚠️ **背景 monitor 的 `start` 只等 1 秒就返回**,不是跑完一輪。Script A 要做一輪基線的話, + `start` 和 `stop` 中間必須 `pause`(目前是 45 秒,一輪約 30 秒)—— 少了它 log 只會有 START banner +- ⚠️ **`show_dmesg.ttl` 結尾會 `dmesg -C` 清空 kernel ring buffer**。這是刻意的(讓 Script C 只看到 + soak 期間新產生的訊息),但代表事後在 DUT 上 `dmesg` 撈不到舊訊息 —— 內容只存在 master log 裡 - ⚠️ **DUT 的 awk 對 `%d` 會夾到 INT32**(2147483647)。線速流量的計數器是 ~10¹² 量級, 所以 awk 裡輸出大數一律用 `%.0f`(double 域,精確到 2⁵³)。`blanton_traffic_linespeed.sh` V0.4.1 已修;寫新的 awk 報表時要記得同一件事 diff --git a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl index 53111e9..1bd97ee 100644 --- a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl +++ b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl @@ -163,6 +163,7 @@ include "utils/show_dmesg.ttl" wait prompt_sonic_root sendln "./Blanton_Script/mgmt_ping_monitor.sh start" wait prompt_sonic_root +pause 45 sendln "~/Blanton_Script/mgmt_ping_monitor.sh stop" wait prompt_sonic_root sendln "cat ~/Blanton_Script/log/mgmt_ping.log"