mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
main, vmm: Add new --numa parameter
Through this new parameter, we give users the opportunity to specify a set of CPUs attached to a NUMA node that has been previously created from the --memory-zone parameter. This parameter will be extended in the future to describe the distance between multiple nodes. For instance, if a user wants to attach CPUs 0, 1, 2 and 6 to a NUMA node, here are two different ways of doing so: Either ./cloud-hypervisor ... --numa id=0,cpus=0-2:6 Or ./cloud-hypervisor ... --numa id=0,cpus=0:1:2:6 Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
@@ -170,3 +170,47 @@ impl FromStr for ByteSized {
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
pub struct IntegerList(pub Vec<u64>);
|
||||
|
||||
pub enum IntegerListParseError {
|
||||
InvalidValue(String),
|
||||
}
|
||||
|
||||
impl FromStr for IntegerList {
|
||||
type Err = IntegerListParseError;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut integer_list = Vec::new();
|
||||
let ranges_list: Vec<&str> = s.trim().split(':').collect();
|
||||
|
||||
for range in ranges_list.iter() {
|
||||
let items: Vec<&str> = range.split('-').collect();
|
||||
|
||||
if items.len() > 2 {
|
||||
return Err(IntegerListParseError::InvalidValue(range.to_string()));
|
||||
}
|
||||
|
||||
let start_range = items[0]
|
||||
.parse::<u64>()
|
||||
.map_err(|_| IntegerListParseError::InvalidValue(items[0].to_owned()))?;
|
||||
|
||||
integer_list.push(start_range);
|
||||
|
||||
if items.len() == 2 {
|
||||
let end_range = items[1]
|
||||
.parse::<u64>()
|
||||
.map_err(|_| IntegerListParseError::InvalidValue(items[1].to_owned()))?;
|
||||
if start_range >= end_range {
|
||||
return Err(IntegerListParseError::InvalidValue(range.to_string()));
|
||||
}
|
||||
|
||||
for i in start_range..end_range {
|
||||
integer_list.push(i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Ok(IntegerList(integer_list))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user