From 86163845a5742e5dcbdccfb6ef9d6729496129ec Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Wed, 10 Aug 2022 17:49:24 +0200 Subject: [PATCH] Switch back to `available_parallelism` This reverts commit 8345cf5037506b38457483429fb113322c58f668. Since that time, there are now multiple calls to get the number of CPUs, to handle the `-j -NUM` case, so factor out a helper function. --- Cargo.toml | 1 - src/cargo/core/compiler/build_config.rs | 13 ++++++++++--- src/cargo/core/compiler/timings.rs | 6 +++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index f62933b01..3f183f481 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -44,7 +44,6 @@ libc = "0.2" log = "0.4.6" libgit2-sys = "0.13.2" memchr = "2.1.3" -num_cpus = "1.0" opener = "0.5" os_info = "3.5.0" pathdiff = "0.2" diff --git a/src/cargo/core/compiler/build_config.rs b/src/cargo/core/compiler/build_config.rs index 51c9bf778..b512c7f5d 100644 --- a/src/cargo/core/compiler/build_config.rs +++ b/src/cargo/core/compiler/build_config.rs @@ -1,11 +1,12 @@ use crate::core::compiler::CompileKind; use crate::util::interning::InternedString; use crate::util::{CargoResult, Config, RustfixDiagnosticServer}; -use anyhow::bail; +use anyhow::{bail, Context as _}; use cargo_util::ProcessBuilder; use serde::ser; use std::cell::RefCell; use std::path::PathBuf; +use std::thread::available_parallelism; /// Configuration information for a rustc build. #[derive(Debug)] @@ -45,6 +46,12 @@ pub struct BuildConfig { pub timing_outputs: Vec, } +fn default_parallelism() -> CargoResult { + Ok(available_parallelism() + .context("failed to determine the amount of parallelism available")? + .get() as u32) +} + impl BuildConfig { /// Parses all config files to learn about build configuration. Currently /// configured options are: @@ -71,9 +78,9 @@ impl BuildConfig { )?; } let jobs = match jobs.or(cfg.jobs) { - None => ::num_cpus::get() as u32, + None => default_parallelism()?, Some(0) => anyhow::bail!("jobs may not be 0"), - Some(j) if j < 0 => (::num_cpus::get() as i32 + j).max(1) as u32, + Some(j) if j < 0 => (default_parallelism()? as i32 + j).max(1) as u32, Some(j) => j as u32, }; diff --git a/src/cargo/core/compiler/timings.rs b/src/cargo/core/compiler/timings.rs index 7c5b13a0e..ecb660fa1 100644 --- a/src/cargo/core/compiler/timings.rs +++ b/src/cargo/core/compiler/timings.rs @@ -13,6 +13,7 @@ use anyhow::Context as _; use cargo_util::paths; use std::collections::HashMap; use std::io::{BufWriter, Write}; +use std::thread::available_parallelism; use std::time::{Duration, Instant, SystemTime}; pub struct Timings<'cfg> { @@ -380,6 +381,9 @@ impl<'cfg> Timings<'cfg> { }; let total_time = format!("{:.1}s{}", duration, time_human); let max_concurrency = self.concurrency.iter().map(|c| c.active).max().unwrap(); + let num_cpus = available_parallelism() + .map(|x| x.get().to_string()) + .unwrap_or_else(|_| "n/a".into()); let max_rustc_concurrency = self .concurrency .iter() @@ -442,7 +446,7 @@ impl<'cfg> Timings<'cfg> { self.total_fresh + self.total_dirty, max_concurrency, bcx.jobs(), - num_cpus::get(), + num_cpus, self.start_str, total_time, rustc_info,