Processes: show current / max clock so idle scaling isn't mistaken for the rated speed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
bd475eaafd
commit
fc42675e9f
@@ -894,6 +894,7 @@ type ProcTable struct {
|
|||||||
CPUHist []float64 `json:"cpu_hist"` // recent total-CPU samples, oldest first
|
CPUHist []float64 `json:"cpu_hist"` // recent total-CPU samples, oldest first
|
||||||
CPUModel string `json:"cpu_model,omitempty"`
|
CPUModel string `json:"cpu_model,omitempty"`
|
||||||
CPUMHz float64 `json:"cpu_mhz,omitempty"`
|
CPUMHz float64 `json:"cpu_mhz,omitempty"`
|
||||||
|
CPUMaxMHz float64 `json:"cpu_max_mhz,omitempty"`
|
||||||
CPUTemp float64 `json:"cpu_temp,omitempty"`
|
CPUTemp float64 `json:"cpu_temp,omitempty"`
|
||||||
Load [3]float64 `json:"load"`
|
Load [3]float64 `json:"load"`
|
||||||
Mem Mem `json:"mem"`
|
Mem Mem `json:"mem"`
|
||||||
@@ -916,6 +917,13 @@ var cpuModel = func() string {
|
|||||||
return ""
|
return ""
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
var cpuMaxMHz = func() float64 {
|
||||||
|
if v, ok := readInt("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq"); ok {
|
||||||
|
return float64(v) / 1000
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}()
|
||||||
|
|
||||||
func cpuMHz() float64 {
|
func cpuMHz() float64 {
|
||||||
var sum float64
|
var sum float64
|
||||||
n := 0
|
n := 0
|
||||||
@@ -1055,7 +1063,7 @@ func (c *Collector) Processes() ProcTable {
|
|||||||
return procs[i].RSS > procs[j].RSS
|
return procs[i].RSS > procs[j].RSS
|
||||||
})
|
})
|
||||||
t := ProcTable{T: now.UnixMilli(), Procs: procs, Total: len(procs), Uptime: uptime(), Load: loadavg(),
|
t := ProcTable{T: now.UnixMilli(), Procs: procs, Total: len(procs), Uptime: uptime(), Load: loadavg(),
|
||||||
CPUModel: cpuModel, CPUMHz: round1(cpuMHz()), CPUHist: []float64{}, Net: []Net{}}
|
CPUModel: cpuModel, CPUMHz: round1(cpuMHz()), CPUMaxMHz: cpuMaxMHz, CPUHist: []float64{}, Net: []Net{}}
|
||||||
for _, p := range procs {
|
for _, p := range procs {
|
||||||
if p.State == "R" {
|
if p.State == "R" {
|
||||||
t.Running++
|
t.Running++
|
||||||
|
|||||||
+1
-1
@@ -86,7 +86,7 @@ export default function Procs() {
|
|||||||
return (
|
return (
|
||||||
<div className="procs-page">
|
<div className="procs-page">
|
||||||
{showTop && <div className="procs-top">
|
{showTop && <div className="procs-top">
|
||||||
<Box title="cpu" right={`${t.cpu_model ?? ''}${t.cpu_mhz ? ` · ${(t.cpu_mhz / 1000).toFixed(2)} GHz` : ''}${t.cpu_temp ? ` · ${t.cpu_temp.toFixed(0)}°C` : ''}`}>
|
<Box title="cpu" right={`${t.cpu_model ?? ''}${t.cpu_mhz ? ` · ${(t.cpu_mhz / 1000).toFixed(2)}${t.cpu_max_mhz ? ` / ${(t.cpu_max_mhz / 1000).toFixed(1)}` : ''} GHz` : ''}${t.cpu_temp ? ` · ${t.cpu_temp.toFixed(0)}°C` : ''}`}>
|
||||||
<div className="cpu-total">
|
<div className="cpu-total">
|
||||||
<Graph values={t.cpu_hist} />
|
<Graph values={t.cpu_hist} />
|
||||||
<div className="cpu-total-v"><span className="bl">CPU</span><span className="bv big">{pct(t.cpu)}</span><span className="muted small">total, all cores</span></div>
|
<div className="cpu-total-v"><span className="bl">CPU</span><span className="bv big">{pct(t.cpu)}</span><span className="muted small">total, all cores</span></div>
|
||||||
|
|||||||
+1
-1
@@ -42,7 +42,7 @@ export interface FS { mount: string; type: string; size: number; used: number }
|
|||||||
export interface UPS { driver: string; model: string; state: string; source: string; on_battery: boolean; in_v: number; out_v: number; battery_pct: number; runtime_min: number; load_w: number; load_pct: number; last_event?: string }
|
export interface UPS { driver: string; model: string; state: string; source: string; on_battery: boolean; in_v: number; out_v: number; battery_pct: number; runtime_min: number; load_w: number; load_pct: number; last_event?: string }
|
||||||
export interface Proc { pid: number; ppid: number; name: string; cmd?: string; user: string; cpu: number; cpu_time: number; rss: number; threads: number; state: string; nice: number; started: number }
|
export interface Proc { pid: number; ppid: number; name: string; cmd?: string; user: string; cpu: number; cpu_time: number; rss: number; threads: number; state: string; nice: number; started: number }
|
||||||
export interface MemInfo { total: number; used: number; avail: number; free?: number; cached?: number; buffers?: number }
|
export interface MemInfo { total: number; used: number; avail: number; free?: number; cached?: number; buffers?: number }
|
||||||
export interface ProcTable { t: number; cpu: number; cores: number[]; cpu_hist: number[]; cpu_model?: string; cpu_mhz?: number; cpu_temp?: number; load: [number, number, number]; mem: MemInfo; swap: MemInfo; net: NetIf[]; uptime: number; procs: Proc[]; total: number; running: number }
|
export interface ProcTable { t: number; cpu: number; cores: number[]; cpu_hist: number[]; cpu_model?: string; cpu_mhz?: number; cpu_max_mhz?: number; cpu_temp?: number; load: [number, number, number]; mem: MemInfo; swap: MemInfo; net: NetIf[]; uptime: number; procs: Proc[]; total: number; running: number }
|
||||||
export interface Sample {
|
export interface Sample {
|
||||||
t: number; interval_ms: number; cpu: number; cores: number[]; load: [number, number, number]
|
t: number; interval_ms: number; cpu: number; cores: number[]; load: [number, number, number]
|
||||||
mem: { total: number; used: number; avail: number }; swap: { total: number; used: number; avail: number }
|
mem: { total: number; used: number; avail: number }; swap: { total: number; used: number; avail: number }
|
||||||
|
|||||||
Reference in New Issue
Block a user