vmm: Add 'host_numa_nodes' option to memory zones

Since memory zones have been introduced, it is now possible for a user
to specify multiple backends for the guest RAM. By adding a new option
'host_numa_node' to the 'memory-zone' parameter, we allow the guest RAM
to be backed by memory that might come from a specific NUMA node on the
host.

The option expects a node identifier, specifying which NUMA node should
be used to allocate the memory associated with a specific memory zone.

Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
Sebastien Boeuf
2020-08-25 17:36:19 +02:00
committed by Bo Chen
parent ad5d0e4713
commit e6f585a31c
4 changed files with 12 additions and 2 deletions

View File

@@ -467,6 +467,8 @@ components:
hugepages:
type: boolean
default: false
host_numa_node:
type: uint64
MemoryConfig:
required:

View File

@@ -352,6 +352,8 @@ pub struct MemoryZoneConfig {
pub shared: bool,
#[serde(default)]
pub hugepages: bool,
#[serde(default)]
pub host_numa_node: Option<u64>,
}
#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
@@ -431,7 +433,8 @@ impl MemoryConfig {
.add("size")
.add("file")
.add("shared")
.add("hugepages");
.add("hugepages")
.add("host_numa_node");
parser.parse(memory_zone).map_err(Error::ParseMemoryZone)?;
let size = parser
@@ -450,12 +453,16 @@ impl MemoryConfig {
.map_err(Error::ParseMemoryZone)?
.unwrap_or(Toggle(false))
.0;
let host_numa_node = parser
.convert::<u64>("host_numa_node")
.map_err(Error::ParseMemoryZone)?;
zones.push(MemoryZoneConfig {
size,
file,
shared,
hugepages,
host_numa_node,
});
}
Some(zones)

View File

@@ -364,6 +364,7 @@ impl MemoryManager {
file: None,
shared: config.shared,
hugepages: config.hugepages,
host_numa_node: None,
}];
(config.size, zones)