diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index ce3d931..36f21b0 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -40,7 +40,8 @@ LTC2980 margin 控制器。TTL 只負責「按順序 `sendln` 並把畫面收進 | 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` | +| 測試 session | `hw-test-session start\|log\|status\|finish`;job log 收在 `/host/hw-eval/current/jobs/` | +| 風扇控制 | max31790 driver rebind(`/sys/bus/i2c/drivers/max31790/{bind,unbind}`)+ `fan-speed-control.sh <%>` | | 壓力測試 | `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` | @@ -200,15 +201,20 @@ Blanton_TTL_Script/ ### 1. `config.ttl` — 全域測試參數(TTL 變數) ```ini -strTestcase = "Margin" ; 測項名,進 log 檔名 project_name = "Blanton" ; 專案名,進 log 檔名 -EN_Margin = 1 ; 1=跑 margin 掃描, 0=跳過 +strTestcase = "ENV" ; 測項名(ENV/EMC/Margin...),進 log 檔名 +EN_Margin = 0 ; 1=跑 margin 掃描, 0=跳過 EN_log = 1 ; 1=logopen 存檔, 0=不存 +FAN_SPEED = 30 ; 傳給 fan-speed-control.sh 的風扇轉速 (%) +SWB_UNIT0 = 1 ; 這台有 switch unit 0(流量與 wait_init 都依此) +SWB_UNIT1 = 1 ; 這台有 switch unit 1 prompt_login = "sonic login:" prompt_sonic = "admin@sonic:~$" prompt_sonic_root = "root@sonic:~#" ``` +> `SWB_UNIT0` / `SWB_UNIT1` 兩個都是 0 時,`wait_init.ttl` 直接 bypass、A/B/C 的流量段整段跳過。 + Log 檔名規則:`\Logs\__.log` ### 2. `settings/.conf` — 一顆 LTC2980(16 channel) @@ -295,9 +301,9 @@ PROFILE_CHANNELS=( "0:high:8" "1:low:8" ... ) # "channel:operation:change_perc | 模組 | 進入點 | 功能 | |------|--------|------| -| **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 A(Pre-test)** | `1_Blanton_Script_A.ttl` V1.0.7 | root 登入 → `date -s` 對時 → 清 job log → `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` | +| **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` → **job log 複製到 USB(帶時戳)** → `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 裝置必需) | @@ -322,7 +328,11 @@ PROFILE_CHANNELS=( "0:high:8" "1:low:8" ... ) # "channel:operation:change_perc Script A ── logopen Logs/Blanton_Margin_.log ──┐ (之後所有畫面都進這個檔) │ │ ├─ 登入 admin → sudo -i → root@sonic:~# │ - ├─ date -s "" ← 讓 DUT 時戳可對照 │ + ├─ date -s "" ← 讓 DUT 時戳可對照 + ├─ rm /host/hw-eval/current/jobs/* ← 清掉上一輪的 job log + ├─ hw-test-session start / log / status + ├─ 風扇:max31790 unbind→sleep→bind(18-0020 與 25-0020 各一次) + │ → fan-speed-control.sh → 回答 y 確認 │ ├─ source 6 個 bash 工具(函數進 shell) │ │ └ 此時 blanton_fpga_pcimem.sh 印出 [INFO] CB FPGA BDF = ...(自動偵測結果) ├─ AER 基線:7 組 EP+RP 的 correctable/nonfatal/fatal @@ -363,6 +373,7 @@ Script C ├─ 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 期間有沒有意外重開,一眼看得到 + ├─ cp -r /host/hw-eval/current/jobs/ /mnt/usb/jobs-_ └─ hw-test-session finish ▼ [messagebox "GOOD JOB! Test Case DONE"] → 人工檢查 log @@ -704,6 +715,14 @@ margin status、全部 VRM 軌的 Vin/Vout/Iout/Temp、CB + ICB 溫感讀值, 可在 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,待確認不再需要後刪除,或在檔頭標註停用。 +- **`rm /host/hw-eval/current/jobs/*` 清不掉子目錄**:Script A 用的是不帶 `-r` 的 `rm`,但 Script C + 是 `cp -r` 那個目錄,代表裡面可能有子目錄。清不乾淨的話,上一輪的 job log 會被當成這輪的一起 + 複製到 USB。要確認 `bgctl` 的產出結構,必要時改成 `rm -rf .../jobs/*`。 +- **風扇確認提示是無限等待**:`wait "Set all configured fan channels to"` 之後才 `sendln "y"`; + 若該版 `fan-speed-control.sh` 不再詢問(或字串改了),這個 `wait` 會永遠等下去,Script A 停在那裡 + 且不報錯。加個 `timeout` + 分支會比較保險(記得還原 `timeout = 0`)。 +- **USB 掛載點未檢查**:Script C 直接 `cp -r ... /mnt/usb/`,`/mnt/usb` 沒掛載時只會失敗一行, + 整輪測試的 job log 就沒被帶出來。可在複製前先 `mountpoint -q /mnt/usb` 判斷。 - **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 eb3b0ec..c3f828b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -9,10 +9,11 @@ DUT 端的取數能力由一組 **bash 工具庫** 提供(CB FPGA `pcimem` → 完整架構見 [ARCHITECTURE.md](ARCHITECTURE.md)。 -**目前狀態(2026-08-24)**:Script A 為 **V1.0.6**(A 集中記錄 A/B/C 三支的變更)。涵蓋 +**目前狀態(2026-08-25)**:Script A 為 **V1.0.7**(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` 宣告。 +switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告,風扇轉速由 `FAN_SPEED` 指定。 +測試 job log 收在 DUT 的 `/host/hw-eval/current/jobs/`,Script C 結束時帶時戳複製到 `/mnt/usb/`。 最後一次發布是 **V1.0.5**;SWB 的 I2C 通道與位址已於 2026-08-19 上機驗證。 交付用 `./publish/publish.sh` 打包。 @@ -29,6 +30,7 @@ switch unit 數量由 `config.ttl` 的 `SWB_UNIT0` / `SWB_UNIT1` 宣告。 - **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` +- **風扇**:max31790 driver rebind + `fan-speed-control.sh <%>`(轉速讀 `config.ttl` 的 `FAN_SPEED`) - **判定資料源**:PCIe AER sysfs(`aer_dev_*`)、EDAC sysfs(`dimm_{ce,ue}_count`)、SONiC `show platform *` - **無編譯步驟**:TTL 與 bash 都直譯執行 @@ -193,6 +195,8 @@ Tera Term 連 COM port (115200-8-N-1) (Script C 曾因此卡死,`18ce7a1` 改成直接 `cat log/*.log`) - ⚠️ **背景 monitor 的 `start` 只等 1 秒就返回**,不是跑完一輪。Script A 要做一輪基線的話, `start` 和 `stop` 中間必須 `pause`(目前是 45 秒,一輪約 30 秒)—— 少了它 log 只會有 START banner +- ⚠️ **風扇那段設完會 `wait "Set all configured fan channels to"` 等確認提示再送 `y`**。該提示沒出現 + (版本改了、字串換了)就會永遠卡住且不報錯 —— 現場看起來像 Script A 當掉 - ⚠️ **`show_dmesg.ttl` 結尾會 `dmesg -C` 清空 kernel ring buffer**。這是刻意的(讓 Script C 只看到 soak 期間新產生的訊息),但代表事後在 DUT 上 `dmesg` 撈不到舊訊息 —— 內容只存在 master log 裡 - ⚠️ **DUT 的 awk 對 `%d` 會夾到 INT32**(2147483647)。線速流量的計數器是 ~10¹² 量級, diff --git a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl index 1bd97ee..404e2b6 100644 --- a/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl +++ b/src/Script_ABC_Blanton/1_Blanton_Script_A.ttl @@ -37,6 +37,10 @@ ; ScriptA, utils/setup_pmon.ttl Add TPM ; ScriptAC NVME Error Info ; ScriptAC Add PCIe Summary +; V1.0.7 2026-08-25 config.ttl Add FAN_SPEED +; ScriptA Add Fan Ctrl (max31790 rebind + fan-speed-control.sh) +; ScriptA Clear /host/hw-eval/current/jobs before the run +; ScriptC Copy stress jobs log to USB, timestamped ; ============================================================================= include "config.ttl" @@ -71,6 +75,10 @@ gettime timestr sprintf2 cmd 'sudo date -s "%s %s"' datestr timestr sendln cmd +;Stress log clear +wait prompt_sonic_root +sendln "rm /host/hw-eval/current/jobs/*" + ; ========== HW Test Session ========== wait prompt_sonic_root sendln "hw-test-session start" @@ -79,8 +87,29 @@ sendln "hw-test-session log" wait prompt_sonic_root sendln "hw-test-session status" -; ========== Wait DUT Init ========== +; ========== FAN SPEED ========== wait prompt_sonic_root +sendln "echo 18-0020 > /sys/bus/i2c/drivers/max31790/unbind" +wait prompt_sonic_root +sendln "sleep .5" +wait prompt_sonic_root +sendln "echo 18-0020 > /sys/bus/i2c/drivers/max31790/bind" +wait prompt_sonic_root +sendln "echo 25-0020 > /sys/bus/i2c/drivers/max31790/unbind" +wait prompt_sonic_root +sendln "sleep .5" +wait prompt_sonic_root +sendln "echo 25-0020 > /sys/bus/i2c/drivers/max31790/bind" + +wait prompt_sonic_root +sprintf2 fan_ctrl_cmd 'fan-speed-control.sh %d' FAN_SPEED +sendln fan_ctrl_cmd + +wait "Set all configured fan channels to" +sendln "y" + + +; ========== Wait DUT Init ========== include "utils/wait_init.ttl" ; ========== DUT Info ========== diff --git a/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl b/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl index 340167e..305ca3a 100644 --- a/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl +++ b/src/Script_ABC_Blanton/3_Blanton_Script_C.ttl @@ -102,6 +102,14 @@ sendln "show reboot-cause" wait prompt_sonic_root sendln "show uptime" +; ========== Copy Stress Log to USB ========== +getdate ts_date "%Y%m%d" +gettime ts_time "%H%M" +sprintf2 usb_dst "/mnt/usb/jobs-%s_%s" ts_date ts_time +sprintf2 cmd "cp -r /host/hw-eval/current/jobs/ %s" usb_dst +wait prompt_sonic_root +sendln cmd + ; ========== HW Test Session ========== wait prompt_sonic_root sendln "hw-test-session finish" diff --git a/src/Script_ABC_Blanton/config.ttl b/src/Script_ABC_Blanton/config.ttl index 5d88f68..b39d2eb 100644 --- a/src/Script_ABC_Blanton/config.ttl +++ b/src/Script_ABC_Blanton/config.ttl @@ -7,6 +7,10 @@ strTestcase="ENV" ;ENV,EMC,Margin...etc EN_Margin = 0 ; 1: Enable Margin Test, 0: Disable Margin Test EN_log = 1 ; 1: Enable log, 0: Disable log +;================================================================ +; FAN_SPEED +;================================================================ +FAN_SPEED = 30 ;================================================================ ; Switch Unit Population ;================================================================