mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
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 <pkbhowmick007@gmail.com>
This commit is contained in:
committed by
Rob Bradford
parent
818fc07266
commit
03e229786d
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user