Skip to content

Commit 158b789

Browse files
MTSistemiclaude
andcommitted
docs: telemetria per core/thread, e allineo pagine ormai vecchie
README e DESKTOP.md descrivono le novita' di Telemetry (asse con i valori, pannello frequenza per core/thread, slot "off" per i thread parcheggiati). OPTIMIZATIONS.md prende una sezione nuova (11) su cosa questo APU dice e non dice di se': il clock GPU si legge solo dal mailbox SMU (pp_dpm_sclk sotto carico riporta 17-51 MHz), la frequenza per CU NON esiste perche' le 40 CU stanno in un unico dominio sclk, e anche l'occupazione per WGP e' irraggiungibile (umr -wa non vede wave per via del GFXOFF, i nodi amdgpu_gfxoff* rispondono EINVAL, GRBM_STATUS_SE0/SE1 restano fissi a 0x6 anche sotto carico). Nel farlo ho corretto due punti diventati falsi: - il kernel non e' piu' 7.0.10 ma 7.1.7 (due varianti, generic e slim, con prestazioni identiche a 7.0.11 entro il 2%) - l'overclock CPU non e' piu' 3,7 GHz su 6 core ma 4,0 GHz su 8, rimisurato gradino per gradino; aggiunta la sezione 3b sullo sblocco degli 8 core Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent 7faf25f commit 158b789

8 files changed

Lines changed: 68 additions & 12 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ The BC-250 is fantastic value but a difficult target: non-standard clock control
4848
- 📸 **Btrfs + Snapper + grub-btrfs** — automatic pre/post-apt snapshots and bootable rollbacks straight from the GRUB menu, with `@home` kept separate so a rollback never touches user data.
4949
- 🎮 **Gaming, ready** — Steam, Heroic, Proton, gamescope (+ FSR 1), GameMode, MangoHud, plus **EmuDeck** and the **ES-DE** frontend to install and configure emulators in a few clicks. *(SkillFishOS ships the tools, not the games — you bring your own games and ROMs.)*
5050
- 🧠 **On-device AI** — an Ollama + OpenWebUI stack accelerated in **Vulkan** on the integrated GPU, with a one-click panel that frees the GPU when you want to play.
51-
- 🧩 **Native PyQt6 app suite** — grouped under a dedicated **"SkillFishOS"** menu: **Tuner**, **AI Panel**, **Monitor** (live sensor charts), **Kernel Manager** (pick the boot kernel and uninstall old ones), **ISO Mount**, and **Hub** — a Discover-style software centre: browse by category, search, read app pages with screenshots, and install/remove/update across **APT** (incl. the signed [`aetherium`](https://mtsistemi.github.io/SkillFishOS/) repo), **Flatpak** and **Snap**, plus add/remove software sources. Every app ships as an updatable `.deb` — including **`skillfish-base`** (hardware **watchdog** + boot-time **freeze detector**: the board recovers from hard hangs by itself and warns you if your profile is unstable) and **`skillfish-console`** (a SteamOS-style **"SkillFishOS Console (Big Picture)"** session on the login screen).
52-
- 📡 **Remote Manager — web control dashboard** — a modular, self-hosted dashboard to drive the board from any browser or phone: **live telemetry**, a software **KVM** (noVNC) and **web terminal** (ttyd), the **Tuner** on the web (CPU/GPU + live Compute-Unit control), a **full Hub app store** (AppStream + Flatpak + Snap, with the SkillFishOS apps featured), **AI/OpenWebUI**, logs, auto-rules, Wake-on-LAN and **ZeroTier** for access from anywhere. PAM login over HTTPS, LAN-first by design; off by default and toggled per-module from the native **Remote Manager** app. `apt install skillfish-dashboard` — see the [remote-control guide](https://skillfishos.com/docs/controllo-remoto/).
51+
- 🧩 **Native PyQt6 app suite** — grouped under a dedicated **"SkillFishOS"** menu: **Tuner**, **AI Panel**, **Monitor** (live sensor charts with a labelled axis and **per core/thread CPU frequency**), **Kernel Manager** (pick the boot kernel and uninstall old ones), **ISO Mount**, and **Hub** — a Discover-style software centre: browse by category, search, read app pages with screenshots, and install/remove/update across **APT** (incl. the signed [`aetherium`](https://mtsistemi.github.io/SkillFishOS/) repo), **Flatpak** and **Snap**, plus add/remove software sources. Every app ships as an updatable `.deb` — including **`skillfish-base`** (hardware **watchdog** + boot-time **freeze detector**: the board recovers from hard hangs by itself and warns you if your profile is unstable) and **`skillfish-console`** (a SteamOS-style **"SkillFishOS Console (Big Picture)"** session on the login screen).
52+
- 📡 **Remote Manager — web control dashboard** — a modular, self-hosted dashboard to drive the board from any browser or phone: **live telemetry** (including per core/thread CPU frequency), a software **KVM** (noVNC) and **web terminal** (ttyd), the **Tuner** on the web (CPU/GPU + live Compute-Unit control), a **full Hub app store** (AppStream + Flatpak + Snap, with the SkillFishOS apps featured), **AI/OpenWebUI**, logs, auto-rules, Wake-on-LAN and **ZeroTier** for access from anywhere. PAM login over HTTPS, LAN-first by design; off by default and toggled per-module from the native **Remote Manager** app. `apt install skillfish-dashboard` — see the [remote-control guide](https://skillfishos.com/docs/controllo-remoto/).
5353
- 🎨 **End-to-end steampunk theme** — GRUB, Plymouth, SDDM, the KDE Plasma desktop, icons, cursors, Kvantum and wallpaper. The theme lives in [`theme/`](theme/).
5454
- 🖨️ Driverless printing (CUPS + IPP Everywhere + Avahi), Bluetooth controllers, broken-HPD display hot-swap, and a fully localized desktop.
5555

docs/DESKTOP.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ controls — to control the hardware with no terminal:
5858

5959
A polkit policy lets the active local user run the privileged helper (a personal machine — no password prompts for the kids).
6060

61+
## SkillFishOS Telemetry (Monitor)
62+
63+
Live charts of temperature, frequency, CPU/GPU load, voltages, power and fan — opened automatically during Tuner tests, and a standalone app otherwise. **REC** records a session to a `.sfmon` file under `~/SkillFishOS-benchmarks/`; re‑opening that file turns Telemetry into an analyzer with a time scrubber.
64+
65+
Each chart carries a **gridline scale with values**, snapped to human numbers (`0 / 1000 / 2000`, never `-160 / 1394 / 2948`): zero becomes the floor for quantities that can't go negative, and a flat line is not zoomed until noise looks like a mountain.
66+
67+
A **per core/thread frequency** panel draws one bar per logical CPU, paired by physical core and labelled `core·thread`, with the MHz on each bar and min/avg/max/online in the header. Threads parked from the Tuner stay visible as a dashed **"off"** slot. This matters on this board: with 8 cores unlocked the sixteen threads idle at 800, 1775 and 3990 MHz at the same time, so a single "CPU MHz" number tells you almost nothing — see [OPTIMIZATIONS.md](OPTIMIZATIONS.md#11-telemetry--what-this-apu-will-and-wont-tell-you).
68+
6169
## Local AI panel
6270

6371
A matching brass PyQt6 panel to turn the on‑device LLM stack on and off with one click — it frees the GPU/RAM when you want to game. See [AI.md](AI.md).

docs/OPTIMIZATIONS.md

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The BC‑250 is a semi‑custom APU from the **AMD Zen 2 + RDNA 2** family: CPU
66

77
---
88

9-
## 1. Custom kernel — `linux-tkg` 7.0.10‑skillfishos
9+
## 1. Custom kernel — `linux-tkg` 7.1.7‑skillfishos
1010

1111
Built from [Frogging‑Family/linux‑tkg](https://github.com/Frogging-Family/linux-tkg) with:
1212

@@ -18,7 +18,7 @@ Built from [Frogging‑Family/linux‑tkg](https://github.com/Frogging-Family/li
1818

1919
> ⚠️ **Never enable IOMMU on the BC‑250** — it's broken on this hardware. Avoid kernels 6.15.0–6.15.6 and 6.17.8–6.17.10.
2020
21-
Recipe and patches: [`kernel-build/`](../kernel-build/). Build instructions: [BUILD.md](BUILD.md). Prebuilt `.deb`: [Releases](../../../releases/tag/kernel-7.0.10-skillfishos).
21+
Recipe and patches: [`kernel-build/`](../kernel-build/). Build instructions: [BUILD.md](BUILD.md). Prebuilt `.deb`: [Releases](../../../releases/tag/kernel-7.1.7-skillfishos). Two variants ship: **generic** (`-march=x86-64`, runs on any x64 box) and **slim** (BC‑250 only). Measured against 7.0.11 the two kernels are **identical within ±2%** — the update is for maintenance and security, not speed.
2222

2323
---
2424

@@ -39,19 +39,29 @@ Memory bandwidth was *measured* (clpeak/OpenCL) at **~350–367 GB/s** — healt
3939

4040
---
4141

42-
## 3. CPU overclock & undervolt — 3.7 GHz
42+
## 3. CPU overclock & undervolt — 4.0 GHz
4343

4444
A persistent SMU overclock via [`bc250_smu_oc`](https://github.com/bc250-collective/bc250_smu_oc), applied at boot by a one‑shot systemd service from `/etc/bc250-smu-oc.conf`:
4545

46-
- **3700 MHz** with **Vid ≤ 1.325 V**, 6 cores active, **85 °C** thermal cap.
47-
- 3700 is this chip's verified‑stable maximum under an 85 °C cap; 3800 throttles back to 3700 reproducibly.
46+
- **4000 MHz** with **Vid ≤ 1.325 V**, **85 °C** thermal cap.
47+
- 4000 is this chip's verified‑stable maximum with **all 8 cores** unlocked, re‑measured step by step from 3500: every rung up to 4000 passes with **zero MCEs**, and the score climbs +14% over 3500. It only became reachable after the fan control was fixed — below ~3900 the limiter is the heatsink, not the silicon.
48+
- With **half the cores parked** (4c/8t) the ceiling moves to **4200 MHz**, but multi‑thread throughput halves: worth it only for loads that use ≤8 threads.
49+
- ⚠️ Under a **combined CPU+GPU** soak the clock settles at 3375‑3492 MHz at 86 °C — no crash, just the thermal budget.
4850
- **APU power sharing:** under a combined CPU+GPU load the APU eases the CPU to ~3450 MHz to stay in budget — by design, no instability. Under CPU‑only load it holds 3700 MHz pinned right at the 85 °C guard.
4951
- A **thermal guard** watchdog steps the clock down if temperature exceeds the cap.
5052

5153
⚠️ **SMU contention:** the governor and the OC tool both talk to the SMU. The OC service ordering (`After=`) and a lock prevent them from clashing during apply/detect.
5254

5355
---
5456

57+
## 3b. 8‑core unlock — 6c/12t → 8c/16t
58+
59+
The BC‑250 ships with two cores fused off *in software*: the SMU's core‑enable mask at SMN `0x5A870` reads `0x77` (3 of 4 cores per CCX). Writing `0xFF` through SMU queue 3 (message `0x98`) brings all **8 cores / 16 threads** online — **no patched BIOS required**. `skillfish-core-unlock`, shipped in `skillfish-base`, does this at boot.
60+
61+
Measured gain (same boot, extra cores toggled off via `/sys/.../cpuN/online`): **+20%**`xz -T` 6.41 s → **5.11 s**, CPU llama.cpp inference 34.0 → **40.8 tok/s**, for +2 °C. Below the theoretical +33% because of memory bandwidth and thread overhead, but the unlock genuinely pays.
62+
63+
---
64+
5565
## 4. 40‑CU unlock
5666

5767
Adds `amdgpu.bc250_cc_write_mode=3` to the kernel cmdline → `active_cu_number` goes from **24 → 40** at GPU init. Result: fp32 jumps from ~6.9 to **~11.3 TFLOPS** (vkpeak `11329` GFLOPS). It's a boot‑time setting (no runtime toggle); the **Tuner** flips it for you and reboots.
@@ -118,7 +128,25 @@ Controller battery levels (via UPower) are surfaced in the desktop HUD.
118128
119129
---
120130

121-
## 11. Always‑on (no suspend)
131+
## 11. Telemetry — what this APU will and won't tell you
132+
133+
The BC‑250 mis‑reports its own graphics clock: under load `pp_dpm_sclk` reads **17‑51 MHz**. Real numbers only come from the **SMU mailbox**, which is what `skillfish-gpu-freq-sampler` reads for the HUD and the charts.
134+
135+
On the CPU side each Zen 2 core has its own P‑state, so per‑core frequency is real and meaningful — with 8 cores unlocked, idle threads sit at 800, 1775 and 3990 MHz *simultaneously*. Sampling one core (what `/proc/cpuinfo`'s first entry gives you) is therefore misleading, and **Monitor** and the dashboard now chart **every logical CPU** separately.
136+
137+
**There is no per‑CU frequency, and that's hardware.** `umr -c` reports `max_shader_engines=2`, `max_sh_per_se=2`, `max_cu_per_sh=10` — 2×2×10 = **40 CU (20 WGP)** — all in a **single `sclk` domain**. RDNA2 has no per‑CU DVFS: every enabled CU always runs at the same clock, so there is nothing to read.
138+
139+
Per‑CU *occupancy* is blocked too, on three independent counts (all measured with `vkcube` running):
140+
141+
- `umr -wa` returns *"No active waves!"***GFXOFF** power‑gates the shader array between frames;
142+
- the `amdgpu_gfxoff*` debugfs nodes are **read‑only and return `EINVAL`**, so GFXOFF can't even be queried from there;
143+
- `GRBM_STATUS`, `GRBM_STATUS_SE0` and `GRBM_STATUS_SE1` stay pinned at `0x00000006` both idle and loaded — the cheap per‑shader‑engine signal doesn't move on this ASIC.
144+
145+
Getting there would need GFXOFF disabled via module parameter plus `-O halt_waves`, which **halts the SQ** — unacceptable on a GPU that is driving the desktop.
146+
147+
---
148+
149+
## 12. Always‑on (no suspend)
122150

123151
The BC‑250's ACPI suspend is broken (it enters `s2idle` and never wakes → reset). SkillFishOS **masks** `sleep.target suspend.target hibernate.target hybrid-sleep.target` and sets logind/KDE to never idle‑suspend or lock — so the box stays reachable (important for remote access) and a child or a remote session is never locked out. **This mask is mandatory on any desktop environment.**
124152

117 KB
Loading

website/src/content/docs/en/app-native.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,17 @@ The **"My silicon"** panel sums up your board's profile — best CPU and GPU fou
6363

6464
**Telemetry** shows temperature, frequency, CPU/GPU load, voltages, power draw and fan in real time. It opens automatically during Tuner tests, but it's also a standalone app. The **REC** button records a benchmark session to a **`.sfmon`** file (in `~/SkillFishOS-benchmarks/`): re-open it and Telemetry becomes an **analyzer** with a time scrubber to review the run second by second.
6565

66-
![SkillFishOS Telemetry — live charts of temperature, frequency, GPU voltage and fan, with REC recording](/img/monitor.jpg)
66+
![SkillFishOS Telemetry — charts with a labelled axis and the per core/thread frequency panel](/img/telemetry-percore.jpg)
67+
68+
### Per core/thread frequency
69+
70+
With [8 cores unlocked](/en/docs/hardware-bc250) a single "CPU frequency" number says very little: at idle the sixteen threads can sit at 800, 1775 and 3990 MHz **at the same time**, so the value you read depends only on which core happened to be sampled.
71+
72+
The bottom panel draws **one bar per thread**, paired by physical core and labelled `core·thread`. The colour runs from brass to ember as the thread climbs, the MHz are printed on each bar, and the header sums up **min, average, max and how many threads are online**. Threads you parked from the Tuner don't vanish: they stay as a dashed **"off"** slot, so the real configuration is visible at a glance.
73+
74+
### Readable axes
75+
76+
Every chart now has a **gridline scale with values on the vertical axis**, snapped to human numbers (`0 / 1000 / 2000 / 3000`, not `-160 / 1394 / 2948`). Zero becomes the floor when the data sits near it, so a MHz or fan-RPM chart never shows a negative baseline; and a flat line is no longer zoomed until noise looks like a mountain.
6777

6878
## SkillFishOS AI
6979

website/src/content/docs/en/controllo-remoto.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Sign in with your **system username and password** (the same as the SkillFishOS
3838

3939
The dashboard composes itself from the modules you enabled:
4040

41-
- **Telemetry** — live charts of temperatures, frequencies, Watts and CPU/GPU load.
41+
- **Telemetry** — live charts of temperatures, frequencies, Watts and CPU/GPU load, with values on the vertical axis and a bar panel showing **per core/thread frequency** (all 16 threads, parked ones clearly marked).
4242
- **System status** — host, IP, kernel, uptime, RAM, disk, active CUs, detected freezes.
4343
- **Controls (Tuner)** — quick presets plus the **full Tuner** on the web: CPU (frequency/undervolt/temperature), GPU (frequency/voltage/governor), **live Compute-Unit control** (WGP grid, no reboot), fan, VRAM, *Test* and the **"Find my max"** wizards.
4444
- **Apps & packages (Hub)** — a real **app store** (AppStream + Flatpak + Snap): browse by category, search, install/remove, update. The **SkillFishOS apps** are featured at the top.

website/src/content/docs/it/app-native.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,17 @@ Il pannello **«Il mio silicio»** riassume il profilo della tua scheda — CPU
6363

6464
**Telemetry** mostra in tempo reale temperatura, frequenza, carico CPU/GPU, voltaggi, assorbimento e ventola. Si apre automaticamente durante i test del Tuner, ma è anche un'app a sé. Il pulsante **REC** registra una sessione di benchmark in un file **`.sfmon`** (in `~/SkillFishOS-benchmarks/`): riaprendolo, Telemetry diventa un **analizzatore** con scrubber temporale per rivedere la run secondo per secondo.
6565

66-
![SkillFishOS Telemetry — grafici live di temperatura, frequenza, voltaggio GPU e ventola, con registrazione REC](/img/monitor.jpg)
66+
![SkillFishOS Telemetry — grafici con asse dei valori e pannello della frequenza per core/thread](/img/telemetry-percore.jpg)
67+
68+
### Frequenza per core/thread
69+
70+
Con gli [8 core sbloccati](/docs/hardware-bc250) un unico numero "frequenza CPU" dice poco: a riposo i sedici thread possono stare **contemporaneamente** a 800, 1775 e 3990 MHz, quindi il valore che leggi dipende solo da quale core è stato campionato.
71+
72+
Il pannello in fondo mostra **una barra per ogni thread**, raggruppate a coppie per core fisico ed etichettate `core·thread`. Il colore va dall'ottone alla brace man mano che il thread sale, i MHz sono scritti sopra ogni barra e l'intestazione riassume **minimo, media, massimo e quanti thread sono attivi**. I thread che hai spento dal Tuner non spariscono: restano come **slot tratteggiato "off"**, così vedi a colpo d'occhio la configurazione reale.
73+
74+
### Assi leggibili
75+
76+
Tutti i grafici hanno una **griglia con i valori sull'asse verticale**, agganciati a numeri tondi (`0 / 1000 / 2000 / 3000`, non `-160 / 1394 / 2948`). Lo zero diventa il fondo scala quando i dati gli stanno vicino, così un grafico di MHz o di giri ventola non mostra mai un fondo negativo; e una linea piatta non viene "zoomata" fino a trasformare il rumore in una montagna.
6777

6878
## SkillFishOS AI
6979

website/src/content/docs/it/controllo-remoto.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Accedi con **utente e password di sistema** (gli stessi del login di SkillFishOS
3838

3939
La dashboard si compone in automatico in base ai moduli che hai attivato:
4040

41-
- **Telemetria** — grafici live di temperature, frequenze, Watt e carichi CPU/GPU.
41+
- **Telemetria** — grafici live di temperature, frequenze, Watt e carichi CPU/GPU, con i valori sull'asse verticale e un pannello a barre della **frequenza per core/thread** (tutti i 16 thread, con evidenza di quelli spenti dal Tuner).
4242
- **Stato sistema** — host, IP, kernel, uptime, RAM, disco, CU attive, freeze rilevati.
4343
- **Controlli (Tuner)** — preset rapidi + il **Tuner completo** in versione web: CPU (frequenza/undervolt/temperatura), GPU (frequenza/voltaggio/governor), **controllo delle Compute Unit a caldo** (griglia WGP, senza riavvio), ventola, VRAM, *Test* e wizard **"Trova il massimo"**.
4444
- **App e pacchetti (Hub)** — un vero **app store** (AppStream + Flatpak + Snap): sfoglia per categorie, cerca, installa/rimuovi, aggiorna. Le **app SkillFishOS** sono messe in evidenza in cima.

0 commit comments

Comments
 (0)