mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-04 04:25:45 +00:00
cli: Accept K,M,G suffixes for size parameters
For every parameter dealing with a size as option, such as memory or virtio-pmem, the CLI can now parse sizes with the suffixes K, M or G. Fixes #70 Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
2bb0b22cc1
commit
a2947f9a9f
22
src/main.rs
22
src/main.rs
@ -135,7 +135,7 @@ fn main() {
|
|||||||
"Cloud Hypervisor Guest\n\tvCPUs: {}\n\tMemory: {} MB\
|
"Cloud Hypervisor Guest\n\tvCPUs: {}\n\tMemory: {} MB\
|
||||||
\n\tKernel: {:?}\n\tKernel cmdline: {}\n\tDisk(s): {:?}",
|
\n\tKernel: {:?}\n\tKernel cmdline: {}\n\tDisk(s): {:?}",
|
||||||
u8::from(&vm_config.cpus),
|
u8::from(&vm_config.cpus),
|
||||||
vm_config.memory.size,
|
vm_config.memory.size >> 20,
|
||||||
vm_config.kernel.path,
|
vm_config.kernel.path,
|
||||||
vm_config.cmdline.args.as_str(),
|
vm_config.cmdline.args.as_str(),
|
||||||
vm_config.disks,
|
vm_config.disks,
|
||||||
@ -294,7 +294,7 @@ mod tests {
|
|||||||
let (disks, fw_path) = prepare_files();
|
let (disks, fw_path) = prepare_files();
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", fw_path.as_str()])
|
.args(&["--kernel", fw_path.as_str()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -322,7 +322,7 @@ mod tests {
|
|||||||
let (disks, fw_path) = prepare_files();
|
let (disks, fw_path) = prepare_files();
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "2"])
|
.args(&["--cpus", "2"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", fw_path.as_str()])
|
.args(&["--kernel", fw_path.as_str()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -347,7 +347,7 @@ mod tests {
|
|||||||
let (disks, fw_path) = prepare_files();
|
let (disks, fw_path) = prepare_files();
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=5120"])
|
.args(&["--memory", "size=5120M"])
|
||||||
.args(&["--kernel", fw_path.as_str()])
|
.args(&["--kernel", fw_path.as_str()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -372,7 +372,7 @@ mod tests {
|
|||||||
let (disks, fw_path) = prepare_files();
|
let (disks, fw_path) = prepare_files();
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", fw_path.as_str()])
|
.args(&["--kernel", fw_path.as_str()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -410,7 +410,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -452,7 +452,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -488,7 +488,7 @@ mod tests {
|
|||||||
let (disks, fw_path) = prepare_files();
|
let (disks, fw_path) = prepare_files();
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", fw_path.as_str()])
|
.args(&["--kernel", fw_path.as_str()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -535,7 +535,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512,file=/dev/shm"])
|
.args(&["--memory", "size=512M,file=/dev/shm"])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -605,7 +605,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--disk", disks[0], disks[1]])
|
.args(&["--disk", disks[0], disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
@ -673,7 +673,7 @@ mod tests {
|
|||||||
|
|
||||||
let mut child = Command::new("target/debug/cloud-hypervisor")
|
let mut child = Command::new("target/debug/cloud-hypervisor")
|
||||||
.args(&["--cpus", "1"])
|
.args(&["--cpus", "1"])
|
||||||
.args(&["--memory", "size=512"])
|
.args(&["--memory", "size=512M"])
|
||||||
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
.args(&["--kernel", kernel_path.to_str().unwrap()])
|
||||||
.args(&["--disk", disks[1]])
|
.args(&["--disk", disks[1]])
|
||||||
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
.args(&["--net", "tap=,mac=,ip=192.168.2.1,mask=255.255.255.0"])
|
||||||
|
@ -22,8 +22,6 @@ const CMDLINE_OFFSET: GuestAddress = GuestAddress(0x20000);
|
|||||||
pub enum Error<'a> {
|
pub enum Error<'a> {
|
||||||
/// Failed parsing cpus parameters.
|
/// Failed parsing cpus parameters.
|
||||||
ParseCpusParams(std::num::ParseIntError),
|
ParseCpusParams(std::num::ParseIntError),
|
||||||
/// Failed parsing memory size parameter.
|
|
||||||
ParseMemorySizeParam(std::num::ParseIntError),
|
|
||||||
/// Failed parsing memory file parameter.
|
/// Failed parsing memory file parameter.
|
||||||
ParseMemoryFileParam,
|
ParseMemoryFileParam,
|
||||||
/// Failed parsing kernel parameters.
|
/// Failed parsing kernel parameters.
|
||||||
@ -50,8 +48,8 @@ pub enum Error<'a> {
|
|||||||
ParseFsQueueSizeParam(std::num::ParseIntError),
|
ParseFsQueueSizeParam(std::num::ParseIntError),
|
||||||
/// Failed parsing persitent memory file parameter.
|
/// Failed parsing persitent memory file parameter.
|
||||||
ParsePmemFileParam,
|
ParsePmemFileParam,
|
||||||
/// Failed parsing persitent memory size parameter.
|
/// Failed parsing size parameter.
|
||||||
ParsePmemSizeParam(std::num::ParseIntError),
|
ParseSizeParam(std::num::ParseIntError),
|
||||||
}
|
}
|
||||||
pub type Result<'a, T> = result::Result<T, Error<'a>>;
|
pub type Result<'a, T> = result::Result<T, Error<'a>>;
|
||||||
|
|
||||||
@ -67,6 +65,24 @@ pub struct VmParams<'a> {
|
|||||||
pub pmem: Option<Vec<&'a str>>,
|
pub pmem: Option<Vec<&'a str>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_size(size: &str) -> Result<u64> {
|
||||||
|
let s = size.trim();
|
||||||
|
|
||||||
|
let shift = if s.ends_with('K') {
|
||||||
|
10
|
||||||
|
} else if s.ends_with('M') {
|
||||||
|
20
|
||||||
|
} else if s.ends_with('G') {
|
||||||
|
30
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
let s = s.trim_end_matches(|c| c == 'K' || c == 'M' || c == 'G');
|
||||||
|
let res = s.parse::<u64>().map_err(Error::ParseSizeParam)?;
|
||||||
|
Ok(res << shift)
|
||||||
|
}
|
||||||
|
|
||||||
pub struct CpusConfig(pub u8);
|
pub struct CpusConfig(pub u8);
|
||||||
|
|
||||||
impl CpusConfig {
|
impl CpusConfig {
|
||||||
@ -117,9 +133,7 @@ impl<'a> MemoryConfig<'a> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Ok(MemoryConfig {
|
Ok(MemoryConfig {
|
||||||
size: size_str
|
size: parse_size(size_str)?,
|
||||||
.parse::<u64>()
|
|
||||||
.map_err(Error::ParseMemorySizeParam)?,
|
|
||||||
file,
|
file,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -323,7 +337,7 @@ impl<'a> PmemConfig<'a> {
|
|||||||
|
|
||||||
Ok(PmemConfig {
|
Ok(PmemConfig {
|
||||||
file: Path::new(file_str),
|
file: Path::new(file_str),
|
||||||
size: size_str.parse::<u64>().map_err(Error::ParsePmemSizeParam)?,
|
size: parse_size(size_str)?,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -924,7 +924,7 @@ impl<'a> Vm<'a> {
|
|||||||
let fd = Arc::new(fd);
|
let fd = Arc::new(fd);
|
||||||
|
|
||||||
// Init guest memory
|
// Init guest memory
|
||||||
let arch_mem_regions = arch::arch_memory_regions(config.memory.size << 20);
|
let arch_mem_regions = arch::arch_memory_regions(config.memory.size);
|
||||||
|
|
||||||
let guest_memory = match config.memory.file {
|
let guest_memory = match config.memory.file {
|
||||||
Some(file) => {
|
Some(file) => {
|
||||||
|
Loading…
Reference in New Issue
Block a user