From 03e229786d1b2f8f697b1f76b44e27651ee51bc2 Mon Sep 17 00:00:00 2001 From: Pulak Kanti Bhowmick Date: Tue, 7 Jul 2026 21:53:34 +0700 Subject: [PATCH] vmm: memory_manager: use available_parallelism for prefault threads Use std::thread::available_parallelism() when sizing the prefault worker threads so the number of threads scales with the host CPU count instead of relying on unsafe sysconf. Fixes: #8495 Signed-off-by: Pulak Kanti Bhowmick --- vmm/src/memory_manager.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/vmm/src/memory_manager.rs b/vmm/src/memory_manager.rs index e57ec41cb..d04fcbb35 100644 --- a/vmm/src/memory_manager.rs +++ b/vmm/src/memory_manager.rs @@ -26,7 +26,6 @@ use arch::{RegionType, layout}; use devices::ioapic; #[cfg(any(target_arch = "aarch64", target_arch = "riscv64"))] use hypervisor::HypervisorVmError; -use libc::_SC_NPROCESSORS_ONLN; use log::{debug, error, info, warn}; use serde::{Deserialize, Serialize}; use thiserror::Error; @@ -2237,14 +2236,10 @@ impl MemoryManager { } fn get_prefault_num_threads(page_size: usize, num_pages: usize) -> usize { - let mut n: usize = 1; - // Do not create more threads than processors available. - // SAFETY: FFI call. Trivially safe. - let procs = unsafe { libc::sysconf(_SC_NPROCESSORS_ONLN) }; - if procs > 0 { - n = cmp::min(procs as usize, MAX_PREFAULT_THREAD_COUNT); - } + let mut n = thread::available_parallelism() + .map_or(1, |val| val.get()) + .min(MAX_PREFAULT_THREAD_COUNT); // Do not create more threads than pages being allocated. n = cmp::min(n, num_pages);