mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2024-10-01 02:55:45 +00:00
main, vmm: Add mandatory id to memory zones
In anticipation for allowing memory zones to be removed, but also in anticipation for refactoring NUMA parameter, we introduce a mandatory 'id' option to the --memory-zone parameter. This forces the user to provide a unique identifier for each memory zone so that we can refer to these. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
c37fb5b602
commit
3ff82b4b65
@ -121,7 +121,7 @@ fn create_app<'a, 'b>(
|
|||||||
"User defined memory zone parameters \
|
"User defined memory zone parameters \
|
||||||
\"size=<guest_memory_region_size>,file=<backing_file>,\
|
\"size=<guest_memory_region_size>,file=<backing_file>,\
|
||||||
shared=on|off,hugepages=on|off,host_numa_node=<node_id>,\
|
shared=on|off,hugepages=on|off,host_numa_node=<node_id>,\
|
||||||
guest_numa_node=<node_id>\"",
|
guest_numa_node=<node_id>,id=<zone_identifier>\"",
|
||||||
)
|
)
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.min_values(1)
|
.min_values(1)
|
||||||
|
@ -453,9 +453,12 @@ components:
|
|||||||
|
|
||||||
MemoryZoneConfig:
|
MemoryZoneConfig:
|
||||||
required:
|
required:
|
||||||
|
- id
|
||||||
- size
|
- size
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
size:
|
size:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
@ -46,6 +46,8 @@ pub enum Error {
|
|||||||
ParseMemory(OptionParserError),
|
ParseMemory(OptionParserError),
|
||||||
/// Error parsing memory zone options
|
/// Error parsing memory zone options
|
||||||
ParseMemoryZone(OptionParserError),
|
ParseMemoryZone(OptionParserError),
|
||||||
|
/// Missing 'id' from memory zone
|
||||||
|
ParseMemoryZoneIdMissing,
|
||||||
/// Error parsing disk options
|
/// Error parsing disk options
|
||||||
ParseDisk(OptionParserError),
|
ParseDisk(OptionParserError),
|
||||||
/// Error parsing network options
|
/// Error parsing network options
|
||||||
@ -154,6 +156,7 @@ impl fmt::Display for Error {
|
|||||||
ParseVsockSockMissing => write!(f, "Error parsing --vsock: socket missing"),
|
ParseVsockSockMissing => write!(f, "Error parsing --vsock: socket missing"),
|
||||||
ParseMemory(o) => write!(f, "Error parsing --memory: {}", o),
|
ParseMemory(o) => write!(f, "Error parsing --memory: {}", o),
|
||||||
ParseMemoryZone(o) => write!(f, "Error parsing --memory-zone: {}", o),
|
ParseMemoryZone(o) => write!(f, "Error parsing --memory-zone: {}", o),
|
||||||
|
ParseMemoryZoneIdMissing => write!(f, "Error parsing --memory-zone: id missing"),
|
||||||
ParseNetwork(o) => write!(f, "Error parsing --net: {}", o),
|
ParseNetwork(o) => write!(f, "Error parsing --net: {}", o),
|
||||||
ParseDisk(o) => write!(f, "Error parsing --disk: {}", o),
|
ParseDisk(o) => write!(f, "Error parsing --disk: {}", o),
|
||||||
ParseRNG(o) => write!(f, "Error parsing --rng: {}", o),
|
ParseRNG(o) => write!(f, "Error parsing --rng: {}", o),
|
||||||
@ -353,6 +356,7 @@ impl Default for CpusConfig {
|
|||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
|
||||||
pub struct MemoryZoneConfig {
|
pub struct MemoryZoneConfig {
|
||||||
|
pub id: String,
|
||||||
pub size: u64,
|
pub size: u64,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub file: Option<PathBuf>,
|
pub file: Option<PathBuf>,
|
||||||
@ -440,6 +444,7 @@ impl MemoryConfig {
|
|||||||
for memory_zone in memory_zones.iter() {
|
for memory_zone in memory_zones.iter() {
|
||||||
let mut parser = OptionParser::new();
|
let mut parser = OptionParser::new();
|
||||||
parser
|
parser
|
||||||
|
.add("id")
|
||||||
.add("size")
|
.add("size")
|
||||||
.add("file")
|
.add("file")
|
||||||
.add("shared")
|
.add("shared")
|
||||||
@ -448,6 +453,7 @@ impl MemoryConfig {
|
|||||||
.add("guest_numa_node");
|
.add("guest_numa_node");
|
||||||
parser.parse(memory_zone).map_err(Error::ParseMemoryZone)?;
|
parser.parse(memory_zone).map_err(Error::ParseMemoryZone)?;
|
||||||
|
|
||||||
|
let id = parser.get("id").ok_or(Error::ParseMemoryZoneIdMissing)?;
|
||||||
let size = parser
|
let size = parser
|
||||||
.convert::<ByteSized>("size")
|
.convert::<ByteSized>("size")
|
||||||
.map_err(Error::ParseMemoryZone)?
|
.map_err(Error::ParseMemoryZone)?
|
||||||
@ -472,6 +478,7 @@ impl MemoryConfig {
|
|||||||
.map_err(Error::ParseMemoryZone)?;
|
.map_err(Error::ParseMemoryZone)?;
|
||||||
|
|
||||||
zones.push(MemoryZoneConfig {
|
zones.push(MemoryZoneConfig {
|
||||||
|
id,
|
||||||
size,
|
size,
|
||||||
file,
|
file,
|
||||||
shared,
|
shared,
|
||||||
|
@ -44,6 +44,8 @@ use vm_migration::{
|
|||||||
Transportable,
|
Transportable,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const DEFAULT_MEMORY_ZONE: &str = "mem0";
|
||||||
|
|
||||||
#[cfg(target_arch = "x86_64")]
|
#[cfg(target_arch = "x86_64")]
|
||||||
const X86_64_IRQ_BASE: u32 = 5;
|
const X86_64_IRQ_BASE: u32 = 5;
|
||||||
|
|
||||||
@ -426,6 +428,7 @@ impl MemoryManager {
|
|||||||
// Create a single zone from the global memory config. This lets
|
// Create a single zone from the global memory config. This lets
|
||||||
// us reuse the codepath for user defined memory zones.
|
// us reuse the codepath for user defined memory zones.
|
||||||
let zones = vec![MemoryZoneConfig {
|
let zones = vec![MemoryZoneConfig {
|
||||||
|
id: String::from(DEFAULT_MEMORY_ZONE),
|
||||||
size: config.size,
|
size: config.size,
|
||||||
file: None,
|
file: None,
|
||||||
shared: config.shared,
|
shared: config.shared,
|
||||||
|
Loading…
Reference in New Issue
Block a user