Repository navigation
SysMon 3.2.0 — the Performance page
The Windows XP Task Manager's Performance tab, in SysMon's own hand.
An LED meter beside a scrolling scope graph for each resource, etched
boxes of totals underneath, a status bar along the bottom. Everything
on one screen, no scrolling to find a number. It is the page the
window opens on now; Overview and Processes are one tab away.
What's on it
- CPU: busy % with kernel time (system + irq + softirq) as a
second trace, or one small graph per thread in/proc/stat
order. A carved two-way switch picks; auto chooses by width, and
the choice survives a restart. - Memory: used, with the page cache beneath it.
- GPU: busy, with VRAM as a second trace.
- Disk and Network: read/write, down/up, autoscaled with the
ceiling written in the corner so a spike never hides what follows. - Thermals: CPU and GPU temperature over time, the busy clock
beside it. No warnings. The heat is shown next to the clock it
costs, and the data speaks. - Totals, Physical memory, Commit charge (
Committed_AS,
CommitLimit, and SysMon's own peak since launch, labelled as such),
Kernel memory (slab, page tables, stacks). - A status bar: processes, CPU, commit, GPU, temperature.
Every graph sits on a dark instrument field tinted to the theme, with a
graticule that moves exactly one step per sample. Clicking a meter
opens that card on the Overview; clicking a graph opens Processes
sorted by that resource. Narrow (430 px) and wide (two columns from
760 px) layouts, all eleven themes, greyscale draws the second trace
dashed.
Still audited
Three new numbers, each checked live against the tool a skeptic would
open: kernel time against mpstat (%sys + %irq + %soft, and never
above busy), commit charge and kernel memory against /proc/meminfo.
The audit is now 66 of 66. Its first run on this branch also
caught a naming bug live: a python3 -I -c "from multiprocessing.resource_tracker import …" launcher was shown as a
bare python3; it is now named by the module, like -m.
Cost
Measured on the same software-rendered display, interleaved with the
installed 3.1.0, child processes counted: the Performance page costs
9.7% of a core (combined) or 11.1% (32 per-thread graphs)
against the 3.1.0 Overview's 11.05%. Memory within 2 MB. The
sampler is unchanged.
That "child processes counted" is a lesson from the review: the first
cut spawned a gsettings subprocess per graph per frame to ask about
reduced motion, and scripts/perf.sh only counted the binary's own
ticks, so it reported 10.9% while the real figure was 28%. The read is
now once per theme change, perf.sh counts cutime+cstime, and the
A/B script fails if the page costs more than the Overview.
Agent surface
sysmon ctl page performance(pages: performance, overview,
processes)sysmon ctl cpugraph auto|combined|per_threadprobe cpucarrieskernel_percent;probe memorycarries
committed_bytes,commit_limit_bytes,slab_bytes,
kernel_stack_bytes,page_tables_bytes. Older consumers see
nothing removed.- Settings:
start_page,cpu_graph_mode. A 3.1 settings file opens
on Performance with the graph decided by width.
Receipts
Spec first (docs/dev/PERFORMANCE-VIEW.md), failure modes V1–V9
listed before the code (docs/dev/FAILURE-MODES.md), a kittest
(ui_performance) that proves the meter and the graph are the same
number, per-thread order, no clipping at 430 and 1240 px, the toggle
persisting, and the click-throughs. 44 e2e screenshots on X11 and a
native Wayland run. Conformance 17/17. A read-only Opus 5.5 reviewer read the diff and
the screenshots before release and returned 24 findings; every one is
addressed, the four P1s with a failing test first: the hidden
subprocess cost above, inline python -c "import x" naming that
mislabelled real processes (now strict and Python-only), one wrongly
typed key in settings.json wiping every other preference (now that
key alone falls back), and the meter and graph being published under
two locks (now one).
