forked from extern/nushell
Fix CPU frequency in sys
output (#8275)
The `sys | get cpu.freq` column (supposed to contain the frequency for each CPU core in megahertz) was incorrect for 2 reasons: 1. We weren't telling the `sysinfo` crate to refresh CPU frequency info 2. We were overwriting the values in the column with the systemwide physical core count. Whoops! ### Before ![image](https://user-images.githubusercontent.com/26268125/222045977-2c021c92-794f-4498-b12c-e3a1bbaa7483.png) ### After ![image](https://user-images.githubusercontent.com/26268125/222046066-ff8ccd21-3c47-4d7d-8f14-e0744822cd2d.png) ## Future work This PR does not fix https://github.com/nushell/nushell/issues/8264 ; the `cpu_usage` column is still incorrect.
This commit is contained in:
parent
e22b70acff
commit
324d625324
@ -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<Value> {
|
||||
}
|
||||
|
||||
pub fn cpu(sys: &mut System, span: Span) -> Option<Value> {
|
||||
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<Value> {
|
||||
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 });
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user