diff --git a/crates/nu-command/src/system/sys.rs b/crates/nu-command/src/system/sys.rs index 2ad738b1ae..26a7e23c66 100644 --- a/crates/nu-command/src/system/sys.rs +++ b/crates/nu-command/src/system/sys.rs @@ -6,7 +6,9 @@ use nu_protocol::{ Category, Example, IntoPipelineData, PipelineData, ShellError, Signature, Span, Type, Value, }; use std::time::{Duration, UNIX_EPOCH}; -use sysinfo::{ComponentExt, CpuExt, DiskExt, NetworkExt, System, SystemExt, UserExt}; +use sysinfo::{ + ComponentExt, CpuExt, CpuRefreshKind, DiskExt, NetworkExt, System, SystemExt, UserExt, +}; #[derive(Clone)] pub struct Sys; @@ -199,7 +201,10 @@ pub fn net(sys: &mut System, span: Span) -> Option { } pub fn cpu(sys: &mut System, span: Span) -> Option { - sys.refresh_cpu(); + // FIXME: we must refresh the CPU *twice* System::MINIMUM_CPU_UPDATE_INTERVAL apart to + // get valid usage data, we're currently only doing it once. Consider using a LazyRecord + // to avoid slowing down all calls to `sys` + sys.refresh_cpu_specifics(CpuRefreshKind::everything()); let mut output = vec![]; for cpu in sys.cpus() { @@ -246,12 +251,6 @@ pub fn cpu(sys: &mut System, span: Span) -> Option { span, }); - cols.push("freq".into()); - vals.push(Value::Int { - val: sys.physical_core_count().unwrap_or(0) as i64, - span, - }); - output.push(Value::Record { cols, vals, span }); }